Pagination and syncing
Page through lists with a cursor, and fetch only what changed since your last sync.
Pages
List endpoints return up to limit records (default 50, at most 100), newest first. meta.pagination says whether there is more:
"meta": {
"pagination": { "limit": 50, "next_cursor": "eyJ0IjoiMjAyNi0xMS0y…", "has_more": true }
}To get the next page, send next_cursor back as cursor, keeping the other filters the same. On the last page has_more is false and next_cursor is null.
curl "https://api.getfom.com/public/v1/orders?status=new&cursor=eyJ0IjoiMjAyNi0xMS0y…" \
-H "Authorization: Bearer $FOM_API_KEY"Treat the cursor as an opaque string; don't build or change it.
Syncing
To keep your own copy up to date, pass updated_since. You then get every record changed at or after that time, oldest change first, so you can stop at any point and carry on later:
- The first time, sync from a date in the past, like
2026-01-01T00:00:00Z. - Page through the results and save each record.
- Keep the
updated_atof the last record you saved. - Next time, ask from that time.
curl "https://api.getfom.com/public/v1/products?updated_since=2026-11-25T08:00:00.000Z" \
-H "Authorization: Bearer $FOM_API_KEY"You may see a record again that you already have, so save by id (update if it exists). For products, a change to any variant or its stock counts as a change to the product.
Sync and webhooks together
Webhooks tell you about a change within seconds. A sync every few minutes or hours catches anything you missed while your server was down.
Filters
| Endpoint | Filters |
|---|---|
GET /orders | status, customer_id |
GET /deliveries | status |
GET /customers, GET /products | none |