Some exchanges have methods to check the status of an order. The most simple way is usually to check your funds. If you bought 1 btc and your btc funds are 1 btc higher than before => order filled.
Like you said, you cant hit the api continuously?, so how to work around this.
For example: You usually check for the opportunity and one round trip (buy USD to BTC and immediately sell BTC to XXX) would look like this:
Make one side of the trade
Wait one sec
Check balance if trade went through
Wait one sec
Make other side of the trade
Wait one sec
Check balance if trade went through
Wait one sec