- Browse the Catalog tab in the production console to pick products you want to sell.
- Backfill initial product data with the product lookup endpoint to populate your database.
- Subscribe to
product.updated/product.removedwebhooks so your copy stays current in real time. - Reconcile once every 24 hours with the lookup endpoint, to catch anything a missed webhook left stale.
Step 1: Find products in the Catalog tab
Open the Catalog tab in the production console and browse the merchants and products available through Rye. When you find a product you want to sell, copy its product URL by right clicking on the product and clicking “Copy product URL” — that’s the only identifier you need to look it up.
Browse in production (
https://console.rye.com), not staging. The catalog is not yet available in the staging environment.Step 2: Set up a product.updated webhook handler
Product events keep your catalog current without polling. There are two:
Product webhooks are snapshot events, which mean they carry the full product state in their
data field, so you can write updated product data to your database without any follow-up API call. See the webhooks guide for endpoint setup, signature verification, and the verification handshake.
Handling the events
Verify the signature, then branch on the event type. Acknowledge quickly (within 5 seconds) and do the database write in the background.id (the stable Rye product identifier, e.g. fly-by-jing.myshopify.com:17880536678469) and the url on every product — you’ll key your reconciliation job off the url in Step 4.
Snapshots can arrive out of order. Each event carries a
createdAt timestamp; if you receive an update older than what you’ve already stored, ignore it. For strict consistency you can ignore the snapshot entirely and re-fetch authoritative state with the lookup endpoint (Step 3) using the product’s url.Step 3: Backfill your catalog with the lookup endpoint
To populate your catalog initially, call the product lookup endpoint once for each product URL you collected in Step 1. It’s a simpleGET keyed by URL:
curl
Product object:
upsertProduct you wrote for the webhook handler — the shape is identical to the product.updated snapshot:
Product lookup has its own rate-limit bucket of 10 requests/sec (see Rate Limits). For a large backfill, throttle to stay under it, or request an increase.
Step 4: Reconcile daily with a cron job
Webhooks can occasionally be missed — a delivery times out, your endpoint has a blip, an event is dropped. A periodic reconciliation pass keeps your catalog from drifting. Run a cron job once every 24 hours that re-looks-up every product in your catalog and writes back the current state. The job re-uses the lookup endpoint from Step 3. For each stored product:- Lookup succeeds → upsert the fresh data (this corrects anything a missed
product.updatedleft stale). - Lookup returns
404→ the product is gone; delete it (this corrects anything a missedproduct.removedleft behind).
Recap
With all four in place you have an authoritative, query-optimized copy of your product data that stays in sync with Rye. From here you can wire products straight into a checkout intent to let users buy them.

