Offerings API
Errors
HTTP status codes
| Status | Meaning |
|---|---|
200 | All rows succeeded |
207 Multi-Status | Partial success — at least one row failed; inspect results[].status and results[].error |
400 Bad Request | Invalid request body — malformed JSON, empty products array, or more than 1,000 items |
401 Unauthorized | Missing, malformed, or revoked API key |
Request-level errors
When the whole request is rejected (before any rows are processed), the response body is:
{ "error": "<message>" }Examples:
{ "error": "products must not be empty." }{ "error": "Max 1000 products per request." }These are returned with a 400 status.
Per-row validation errors (207)
A row that fails validation does not abort the batch. The failed row is skipped and reported in results with "status": "error" and a human-readable error string:
{
"created": 2,
"updated": 0,
"errors": 1,
"results": [
{ "index": 0, "status": "created", "id": "cmq1abc2def3ghi4jkl5" },
{ "index": 1, "status": "updated", "id": "cmq6mno7pqr8stu9vwx0" },
{
"index": 2,
"status": "error",
"error": "name: String must contain at least 1 character(s); price: Number must be greater than or equal to 0"
}
]
}The error string format is field: message for each failing validation, joined by ; . Field names match the Product object reference.
When the response status is 207, the rows that succeeded were still written to the database. Only rows listed with "status": "error" were skipped.
Limits
- Max 1,000 products per request — enforced at the request level (
400if exceeded). - No per-key rate limit currently (planned for a future release).
- Keep request payloads reasonable in size; a body-size cap is also on the roadmap.