Developer Resources
Interactive reference: Open interactive API reference — try endpoints and inspect schemas in the OpenAPI explorer on the marketing developer surface.
Narrative API hubs explain common workflows; SCM tag reference pages provide OpenAPI-backed endpoint details.
Better Data APIs provide programmatic access for Commerce Chain Optimization and SCM workloads — forecasting, inventory, transfers, alerts, catalog, and related platform operations. All tenant-facing APIs are workspace-scoped (tenant-bound) and require authentication.
Scope: This documentation covers public developer and tenant-facing APIs you use from your organization’s workspace — REST endpoints, SDKs, integrations, and operational usage.
All API requests should be made to:
1https://app.betterdata.co/apiHub pages summarize each area; authoritative path and schema detail is in the OpenAPI bundle. Tag-level references also live under SCM; sessions are documented under Sessions.
chart-lineForecasting API
Scenarios, events, accuracy, and projections — hub + OpenAPI.
packageInventory API
Levels, ATP, adjustments, replenishment, cycle counts — hub + OpenAPI.
arrow-right-leftTransfers API
Recommendations, execution, approvals — hub + OpenAPI.
bellAlerts API
Alert configuration and lifecycle — hub + OpenAPI.
boxCatalog API
Products, categories, attributes — hub + OpenAPI.
Requests run in the context of a workspace (tenant): API keys, roles, and data isolation are evaluated per workspace. Use organization and workspace identifiers from your admin surface when configuring clients; hub pages describe surface-specific flows.
All API requests require authentication. See Authentication for details.
Quick Start:
Authorization header:
1Authorization: Bearer YOUR_API_KEYAll requests must include:
1Content-Type: application/json2Authorization: Bearer YOUR_API_KEYPOST and PUT requests should include a JSON body:
1{2 "field1": "value1",3 "field2": "value2"4}Successful responses return a JSON body with the requested data:
1{2 "data": { ... },3 "pagination": { ... }4}Error responses include an error message and details:
1{2 "error": "Error message",3 "details": { ... }4}200 OK: Request successful201 Created: Resource created successfully400 Bad Request: Invalid request parameters401 Unauthorized: Authentication required or invalid403 Forbidden: Insufficient permissions404 Not Found: Resource not found409 Conflict: Resource conflict (e.g., duplicate)500 Internal Server Error: Server errorAPI requests are rate-limited to prevent abuse. See Rate limits; limits also depend on your plan — use response headers or contact support for specifics.
Default Limits:
Rate limit headers are included in all responses:
X-RateLimit-Limit: Maximum requests allowedX-RateLimit-Remaining: Remaining requests in current windowX-RateLimit-Reset: Time when rate limit resetsList endpoints support pagination:
Query Parameters:
page: Page number (default: 1)limit: Items per page (default: 20, max: 100)Response:
1{2 "data": [ ... ],3 "pagination": {4 "page": 1,5 "pageSize": 20,6 "total": 150,7 "totalPages": 88 }9}Many list endpoints support filtering and sorting:
Filtering:
?status=ACTIVE&locationId=loc_123Sorting:
sortBy and sortOrder query parameters?sortBy=createdAt&sortOrder=descSee Common Errors for detailed error handling guidance.
Common Error Codes:
UNAUTHORIZED: Authentication requiredFORBIDDEN: Insufficient permissionsVALIDATION_ERROR: Invalid request parametersNOT_FOUND: Resource not foundCONFLICT: Resource conflictSome endpoints are marked as Beta and may change without notice. Beta endpoints are indicated with a warning callout in their documentation.
Beta: This endpoint is in beta and may change. Use with caution.
The API is currently at version 1.0. Future versions will be indicated in the URL path (e.g., /api/v2/...).
Event delivery and provider-specific webhook contracts are documented under Webhooks.
For API support:
openapi.json for offline reference; see also Rate limitsAPI access requires an API key with appropriate permissions. Contact your organization administrator to create an API key.
