A gift card catalogue is a moving target: trade prices follow issuer pricing and currency movements, products appear and disappear, and denominations go out of stock without warning. If your storefront treats a synced copy as the truth, you will eventually quote stale prices and sell products that no longer exist.
The fix is not syncing harder. It is treating your local catalogue as what it is, a snapshot with a timestamp, and building the order flow so that anything with money attached gets re-checked against the live API at the moment it matters.
Your catalogue is a snapshot, not a source of truth
Store the sync time alongside the data and treat every price and availability flag as “true as of then”. This one mental shift drives the rest of the design: a snapshot can be minutes stale, so decisions that commit money (quoting a large order, fulfilling anything expensive) should confirm against the live API rather than trust the copy.
Hourly is a common baseline for the full catalogue pull, and it is enough for browsing and search. What hourly sync cannot do is guarantee the price at order time, which is why the integration guide pairs scheduled sync with an order-time re-check.
Handling delisted products
Products leave catalogues routinely: an issuer withdraws a denomination, a region gets restructured, a contract lapses. Your sync job will one day pull a catalogue that is missing something you sell.
Hide it, do not error. Mark the product unavailable and remove it from browsing while keeping its record, history and order references intact. Deleting the row breaks past orders and reporting; showing an error page turns a normal upstream event into a customer-facing incident. If a delisted product comes back a week later, and they sometimes do, a hidden product is one flag away from live again.
Out of stock is a normal state
Availability changes per product, per denomination and per region, many times a day. Model it as a first-class field, not an exception: a product can be listed and temporarily unbuyable at the same time. Show the state honestly, offer the nearest denomination if you have one, and let the next sync flip the flag back when stock returns.
Price drift guards at order time
The expensive failure mode is quoting a customer one price and fulfilling at another. Between quote and order, the trade price can move; if it moved against you and you fulfil anyway, you sell at a loss and discover it days later during reconciliation.
The guard is simple to state: at order time, fetch the live price and compare it with the quoted one. Within your tolerance (a small threshold you choose per category), fulfil. Beyond it, stop and re-confirm rather than eating the difference. A blocked order here is not a defect; it belongs to the same family of handled outcomes as the rest of the order failure field guide.
Monitor the sync, not just the site
A silently stale catalogue looks healthy. Pages render, orders flow, nothing throws; the data is just wrong. That is why catalogue sync needs its own monitoring, separate from uptime checks.
Alert on two things. First, sync failures and sync age: if the last successful pull is older than a couple of cycles, someone should know before a customer does. Second, drift itself: log price changes on each sync and flag anything that moved beyond your threshold, because a sharp move is either a currency event or an upstream mistake, and both deserve a human look.
Frequently asked questions
How often should I sync a gift card catalogue?
Hourly is a common baseline for the full pull, and it covers browsing and search comfortably. The sync interval matters less than the second mechanism: re-checking the live price and availability at order time for anything expensive. A five-minute sync with no order-time check is weaker than an hourly sync with one.
What happens when a product is delisted?
It disappears from the provider’s catalogue feed, and your next sync will not find it. Handle this by hiding the product, not deleting it: mark it unavailable, keep the record and its order history, and remove it from browsing. Delisted products sometimes return, and past orders still need to reference them either way.
How do I stop selling at stale prices?
Add a drift guard at order time: fetch the live price, compare it with the price the customer was quoted, and fulfil only if the difference sits inside a threshold you set. Beyond the threshold, pause and re-confirm the order. Backed by alerts on sync failures and large price moves, this closes the stale-price gap from both ends.
What is price drift in a gift card catalogue?
Price drift is the gap that opens between the price in your last synced snapshot and the provider’s live trade price, driven by issuer pricing changes and currency movements. It stays invisible until an order is fulfilled at the stale figure. The guard is an order-time comparison: fetch the live price, check it against the quote, and pause anything that falls outside your tolerance.
How do I monitor a catalogue sync job?
Alert on two signals. Sync age: if the last successful pull is older than a couple of cycles, someone should know before a customer does. And drift size: log price changes on each sync and flag moves beyond your threshold, because a sharp jump is either a currency event or an upstream mistake. Uptime checks alone miss both, since a stale catalogue still renders happily.