REST API
Base URL, authentication, product ids, and the rules every endpoint shares.
Base URL: https://fluf.io/wp-json/fc/api/v1 · Auth: Authorization: Bearer fluf_pat_…
Create and edit products, publish and delist them, report sales, and read back state. The machine-readable contract is openapi.yaml; these pages explain how to use it without guessing at fields or edge cases. Each endpoint has its own page — they're listed below and in the sidebar.
Authentication
Create a Personal Access Token in FLUF Connect → Developers, then send it on every API request:
Authorization: Bearer fluf_pat_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTokens act as the seller account that created them. The plan decides what they may do: Pro (including Pro Legacy) is read-only and Super Seller can read and write. Plans and fees has the details. Keep tokens server-side and create a separate one for each integration.
| HTTP | Code | Meaning |
|---|---|---|
401 | varies | Missing, malformed, revoked or expired token |
403 | no_active_subscription | The token is valid but the FLUF plan has lapsed. Don't create a new token |
403 | api_read_only | The plan allows reads only. The body's upgrade names the plan that adds writes |
403 | api_not_in_plan | The plan has no API access |
Product identity: vid
Every item is addressed by a vid:
{channel}_{channel_product_id}_{variant}Examples:
shopify_8123456789012_0
fluf_326428506_0The trailing variant defaults to 0, so shopify_8123456789012 and shopify_8123456789012_0 identify the same product. Pass the vid returned by reads straight back to writes; do not split it on underscores, because some marketplace ids contain underscores.
Integration behaviour
Publishing is per product, not per target: one request fans out to the target accounts you name.
Prices are decimal major units (45.00, not 4500). Use the account currency shown by GET /accounts.
Do not parse message; it is for humans and can change. Branch on HTTP status, top-level error code, target outcome, and target code.
Use webhooks for timely changes and GET /items?updated_since=… as the recovery path. The REST API is the source of current state; webhooks are delivery notifications.
Endpoints
/accountsList accounts/productsCreate a productPOST/products/importImport productsGET/products/import/{id}Get import progress/itemsPublish or repricePATCH/items/{vid}Update a productGET/itemsList itemsGET/items/{vid}Get an itemDELETE/itemsTake listings downPOST/items/{vid}/mark-soldMark as soldDELETE/items/{vid}Delete a product/draftsList draftsPOST/drafts/{id}/approveApprove a draftSomething missing? Email [email protected] — we prioritise by what people actually ask for.
