Let me give it a try.
If you use a timestamp in your request (UNIX timestamp in seconds), then the time stamp is rounded down to a minute. If you don’t provide a timestamp is provided, then the start of the current minute based on subnet time is used.
If there is an entry for your currency pair and this timestamp in a local datastructure of the canister, then the stored value is returned (and the low amount of cycles is consumed).
If there is no entry for your currency pair and this timestamp, then the canister will make outcalls to several exchange rate providers and compute the median for your pair. Since this is costs more resources, a higher amount in cycles is consumed, depending on the number of outcalls that were made.
Is this more clear?
Sources: