REST API / Authentication
REST API / Authentication
Authentication
x-api-key header.Getting your API key
- 1Log in to your reseller dashboard
- 2Navigate to Settings → API Keys
- 3Click "Create API Key" and give it a name
- 4Copy the key — it is only shown once
Warning
Making authenticated requests
Pass your key in the x-api-key header:
curl https://api.feedapi.co.uk/v1/products \ -H "x-api-key: fapi_your_key_here"
const response = await fetch(
"https://api.feedapi.co.uk/v1/products",
{
headers: {
"x-api-key": "fapi_your_key_here",
"Content-Type": "application/json",
},
}
);
const { data, meta } = await response.json();Key format
All keys begin with fapi_ followed by 64 hex characters.
fapi_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
Access rights
Every key carries a set of access rights that decide which endpoints it may call. You choose them when you create the key and can change them at any time under Settings → API Keys → Access rights — the key itself does not change, so there is nothing to redeploy. Calling an endpoint your key does not cover returns 403 INSUFFICIENT_SCOPE.
products:readGET /v1/products, /v1/products/:id, /v1/products/:id/variantscategories:readGET /v1/categoriessuppliers:readGET /v1/suppliers, /v1/suppliers/:idorders:readGET /v1/orders and its sub-resources (returns, shipments, status-history, cancellations)orders:writePOST /v1/orders, /v1/orders/:id/cancel, /v1/orders/:id/returnswebhooks:readGET /v1/webhooks, /v1/webhooks/:id/deliverieswebhooks:writePOST, PATCH and DELETE on /v1/webhooks, plus /v1/webhooks/:id/rotate-secretinventory:readGET /v1/inventory/movements — stock change history for your catalogueTip
Key lifecycle
Key is valid and can make requests.
Key was replaced by a rotation and still works, but only until its deadline. Move your integration to the new key before then.
Key was manually revoked. Returns 403 KEY_REVOKED.
Key passed its expiry date. Returns 403 KEY_EXPIRED.
Tip
Rate limits
Requests are rate-limited per account to 60 requests per minute, not per key — during a rotation the retiring key and its replacement draw on the same budget. Status is returned in headers:
X-RateLimit-Limit60Maximum requests per minuteX-RateLimit-Remaining58Requests remaining in current windowX-RateLimit-Reset1719227460Unix timestamp when window resetsRetry-After12Seconds to wait (on 429, and on the 503 below)Tip
429 RATE_LIMIT_EXCEEDED. Separately, if the limiter itself cannot reach its store it refuses the request with 503 rather than letting it through unmetered — also with a Retry-After. Both are temporary and safe to retry after backing off.