invalid_requestFix the JSON body before sending again; do not repeat an unchanged request.
Call Ecomwith tools from your agent, automation script, or internal workflow with an API key. This guide currently covers GTIN, QR Code, UTM Builder, and Break-even ROAS APIs.
Authorization: Bearer ecw_live_...
X-API-Key: ecw_live_...X-Quota-Limit: 1000
X-Quota-Remaining: 997
X-RateLimit-Limit: 30Idempotency-Key: order-sync-2026-06-14-001Scope: tools:gtin:generateECOMWITH_API_KEY=ecw_live_...Error responses use error.code and error.message. Handle the status and code first, then decide whether to wait or retry the same business request with its original Idempotency-Key.
invalid_requestFix the JSON body before sending again; do not repeat an unchanged request.
authentication_required / invalid_api_keyCheck Authorization: Bearer or X-API-Key; never put the full key in error logs.
membership_required / insufficient_scopeCheck the current plan and the key scope; a scope cannot increase membership quota.
idempotency_conflict / idempotency_in_progressKeep one key for the same business request; stop on conflict, or wait and retry an active request with the same key.
payload_too_largeReduce the request body to the current plan payload limit before sending again.
quota_exceeded / rate_limited / concurrency_limitedRead X-Quota-*, X-RateLimit-*, and Retry-After; stop at zero quota and wait for rate or concurrency limits.
| Status | error.code | Next step |
|---|---|---|
| 400 | invalid_request | Fix the JSON body before sending again; do not repeat an unchanged request. |
| 401 | authentication_required / invalid_api_key | Check Authorization: Bearer or X-API-Key; never put the full key in error logs. |
| 403 | membership_required / insufficient_scope | Check the current plan and the key scope; a scope cannot increase membership quota. |
| 409 | idempotency_conflict / idempotency_in_progress | Keep one key for the same business request; stop on conflict, or wait and retry an active request with the same key. |
| 413 | payload_too_large | Reduce the request body to the current plan payload limit before sending again. |
| 429 | quota_exceeded / rate_limited / concurrency_limited | Read X-Quota-*, X-RateLimit-*, and Retry-After; stop at zero quota and wait for rate or concurrency limits. |
Error response shape
{"object":"tool_api.error","error":{"code":"invalid_request","message":"Request body must be a JSON object."}}