Meta Catalog Feed CSV (v1)
Method & Path
GET /api/v1/public/storefront/stores/:slug/catalog-feed.csv
Actual backend path: GET /v1/public/storefront/stores/:slug/catalog-feed.csv
Description
Returns a CSV product feed compatible with Meta Commerce scheduled data feeds (comma-separated, header row). Product link values prefer a verified/active custom domain for the store when configured; otherwise they use STOREFRONT_WEB_URL with /{slug}/products/{productId}.
Meta does not accept JSON for this scheduled URL format. Use ?format=json only for debugging.
Authentication
None — access is gated by a secret token query parameter (Workspace Owner configures the feed in the dashboard).
Personas: not applicable (server-to-server / Meta fetch). Store settings are managed by Workspace Owner / staff with store.manage.
Headers
| Header | Required | Description |
|---|---|---|
| None | — |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Public store slug |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
token | string | Yes | Plaintext feed secret (shown once when enabled/regenerated in dashboard) |
format | string | No | json — return JSON array instead of CSV (debug only; do not use in Meta) |
Request Body
None
Response 200 OK
- CSV (default):
Content-Type: text/csv; charset=utf-8 - JSON:
Content-Type: application/json; charset=utf-8whenformat=json
CSV columns (header row):
id, title, description, availability, condition, price, sale_price, link, image_link, brand, gtin
The availability column is always in stock for every product row in the feed (inventory is not reflected in this export).
price is the regular (pre-discount) amount. When a product has an active product-level discount or the store has an active storewide percentage discount, sale_price is the discounted amount (Meta “sale price”); otherwise sale_price is empty.
Common Errors
- 404 Not Found: Invalid slug, store not published, feed disabled, or invalid token (response body is plain text
Not foundto avoid leaking details) - 500 Internal Server Error: Server error