Developers
One API. Every shopping surface.
REST endpoints, webhooks, and an MCP server. Built for catalogs that change every second.
Authentication
Bearer-token auth, scoped to one workspace
Generate a key from your dashboard → API keys. Every request must include Authorization: Bearer <token>. Your token always acts on its own workspace — there is no workspaceId in the URL or body, ever.
curl https://your-app.lovable.app/api/public/v1/products \
-H "Authorization: Bearer cat_live_XXXXXXXXXXXXXXXX"Create a product
POST /api/public/v1/products
Validates with the same schema the dashboard uses. Returns 201 with the created row, 402 if the plan cap is hit, 422 on validation errors.
curl -X POST https://your-app.lovable.app/api/public/v1/products \
-H "Authorization: Bearer $CATALYTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"sku": "AERO-001",
"title": "Aero Runner",
"price_amount": 129,
"price_currency": "USD",
"brand": "Catalyte",
"availability": "in_stock",
"condition": "new"
}'Bulk import
POST /api/public/v1/products/bulk
Up to 1,000 rows per call. The full batch must fit under your plan cap, otherwise the whole call rejects with 402 (nothing is written).
curl -X POST https://your-app.lovable.app/api/public/v1/products/bulk \
-H "Authorization: Bearer $CATALYTE_KEY" \
-H "Content-Type: application/json" \
-d '{ "products": [ { "sku": "A-1", "title": "..." }, ... ] }'List, read, update, delete
/api/public/v1/products and /:id
GET list (?limit=&offset=, max 200). GET /:id, PATCH /:id (partial), DELETE /:id. Any :id outside your workspace returns 404 — keys can never read or touch another workspace's data.
GET /api/public/v1/products?limit=50
GET /api/public/v1/products/<id>
PATCH /api/public/v1/products/<id>
DELETE /api/public/v1/products/<id>Errors
JSON error envelope
Every non-2xx response is { error: { code, message } }. Codes: UNAUTHORIZED (401), FORBIDDEN (403), NOT_FOUND (404), VALIDATION (422), PLAN_LIMIT (402), INTERNAL (500).
{
"error": {
"code": "PLAN_LIMIT",
"message": "Plan free caps products at 50.",
"plan": "free",
"limit": 50
}
}Plan limits
Caps apply to every surface
The same product cap is enforced in the dashboard, the importer, and the API. Bulk imports that would exceed it are rejected up front.
| Plan | Products | API keys | Channels | Teammates |
|---|---|---|---|---|
| Free | 50 | 1 | 1 | 1 |
| Starter | 2,000 | 3 | 3 | 3 |
| Growth | 25,000 | 10 | 8 | 10 |
| Scale | 250,000 | 50 | 20 | 50 |
| Enterprise | Unlimited | Unlimited | Unlimited | Unlimited |