# Foundry API > Multi-tenant commerce + content platform. Authenticate with Bearer sk_live_{slug}_{key} tokens. Each project (tenant) has its own data, modules, and configuration. ## Discovery - [OpenAPI Spec](https://rhubarbe.ca/api/openapi.json): Full machine-readable API specification (OpenAPI 3.1) - [API Catalog](https://rhubarbe.ca/.well-known/api-catalog): RFC 9727 discovery endpoint - [My Endpoints](https://rhubarbe.ca/api/schema/me): Scope-filtered endpoint list for authenticated callers - [MCP Tools](https://rhubarbe.ca/api/schema/mcp): Endpoints as MCP tool definitions ## Authentication - Bearer token: `Authorization: Bearer sk_live_{project}_{key}` - Scopes: `content:read`, `content:write`, `commerce:read`, `commerce:write`, `design:read`, `design:write`, `navigation:read`, `navigation:write`, `media:read`, `media:write`, `taxonomy:read`, `taxonomy:write`, `settings:read`, `settings:write`, `modules:read`, `modules:write` - Rate limits: per-key, returned in X-RateLimit-* headers ## API Reference ### Content - GET /api/content: List content entries (scope: content:read) - POST /api/content: Create a content entry (scope: content:write) - GET /api/content/{id}: Get a content entry by ID (scope: content:read) - PUT /api/content/{id}: Update a content entry (scope: content:write) - DELETE /api/content/{id}: Delete a content entry (scope: content:write) - POST /api/content/{id}/publish: Publish a content entry (scope: content:write) ### Orders - GET /api/orders: List orders (scope: commerce:read) - GET /api/orders/{id}: Get order by ID (scope: commerce:read) - PUT /api/orders/{id}: Update order metadata (scope: commerce:write) ### Products - GET /api/products: List products (scope: commerce:read) - GET /api/products/{id}: Get product by ID (scope: commerce:read) - GET /api/product-families: List product familys (scope: commerce:read) - POST /api/product-families: Create product family (scope: commerce:write) - GET /api/product-families/{id}: Get product family by ID (scope: commerce:read) - PUT /api/product-families/{id}: Update product family (scope: commerce:write) - DELETE /api/product-families/{id}: Delete product family (scope: commerce:write) - GET /api/product-families/{id}/members: List family members (scope: commerce:read) - POST /api/product-families/{id}/members: Create family member (scope: commerce:write) - GET /api/product-families/{id}/members/{id}: Get family member by ID (scope: commerce:read) - PUT /api/product-families/{id}/members/{id}: Update family member (scope: commerce:write) - DELETE /api/product-families/{id}/members/{id}: Delete family member (scope: commerce:write) ### Inventory - GET /api/inventory/items: List inventory levels (scope: commerce:read) - POST /api/inventory/adjust: Adjust inventory level (scope: commerce:write) ### Clients - GET /api/clients: List clients (scope: commerce:read) - GET /api/clients/{id}: Get client by ID (scope: commerce:read) ### FAQ - GET /api/faq: List FAQ items (scope: content:read) - POST /api/faq: Create FAQ item (scope: content:write) - GET /api/faq/{id}: Get FAQ item by ID (scope: content:read) - PUT /api/faq/{id}: Update FAQ item (scope: content:write) - DELETE /api/faq/{id}: Delete FAQ item (scope: content:write) ### Taxonomy - GET /api/taxonomy: List taxonomy values (scope: taxonomy:read) - POST /api/taxonomy: Create taxonomy value (scope: taxonomy:write) - GET /api/taxonomy/{id}: Get taxonomy value by ID (scope: taxonomy:read) - PUT /api/taxonomy/{id}: Update taxonomy value (scope: taxonomy:write) - DELETE /api/taxonomy/{id}: Delete taxonomy value (scope: taxonomy:write) ### Media - GET /api/media: List media files (scope: media:read) - POST /api/media: Create media file (scope: media:write) - GET /api/media/{id}: Get media file by ID (scope: media:read) - PUT /api/media/{id}: Update media file (scope: media:write) - DELETE /api/media/{id}: Delete media file (scope: media:write) ### SEO - GET /api/admin/redirects: List redirects (scope: settings:read) - POST /api/admin/redirects: Create redirect (scope: settings:write) - GET /api/admin/redirects/{id}: Get redirect by ID (scope: settings:read) - PUT /api/admin/redirects/{id}: Update redirect (scope: settings:write) - DELETE /api/admin/redirects/{id}: Delete redirect (scope: settings:write) - GET /api/seo/templates: List SEO templates (scope: settings:read) - POST /api/seo/templates: Create SEO template (scope: settings:write) - GET /api/seo/templates/{id}: Get SEO template by ID (scope: settings:read) - PUT /api/seo/templates/{id}: Update SEO template (scope: settings:write) - DELETE /api/seo/templates/{id}: Delete SEO template (scope: settings:write) ### Integrations - GET /api/integrations: List integrations (scope: settings:read) - POST /api/integrations: Create integration (scope: settings:write) - GET /api/integrations/{id}: Get integration by ID (scope: settings:read) - PUT /api/integrations/{id}: Update integration (scope: settings:write) - DELETE /api/integrations/{id}: Delete integration (scope: settings:write) ### Filters - GET /api/filters: List filter groups (scope: commerce:read) - POST /api/filters: Create filter group (scope: commerce:write) - GET /api/filters/{id}: Get filter group by ID (scope: commerce:read) - PUT /api/filters/{id}: Update filter group (scope: commerce:write) - DELETE /api/filters/{id}: Delete filter group (scope: commerce:write) ## Response Format All responses: `{ data: T | null, error: { code, message } | null, meta: { requestId, total?, limit?, offset? } }` ## Errors - 401: Missing or invalid API key - 403: Key lacks required scope or permission - 404: Resource not found or module disabled - 422: Business rule violation - 429: Rate limit exceeded (check Retry-After header)