Response envelope
Successful tools return a short human-readable text block and structured data:request_id when reporting a problem. MCP arguments, customer message text, transcript queries and idempotency keys are not written to application logs or Sentry.
Pagination and limits
- List tools default to 20 records and accept at most 50.
- Cursors are opaque. Do not parse, edit or reuse them with different filters.
- Conversation detail accepts at most 100 messages.
- Analytics accepts at most eight metrics and a 366-day date range.
- Structured output is limited to 128 KiB; text summaries to 4 KiB.
- Each read tool allows 1,000 calls per minute per OAuth client/user; each write tool allows 500.
- Standard reads time out after 15 seconds, analytics after 30 seconds, and merchant mutations after 20 seconds.
meta.next_cursor is present, pass it unchanged to the same tool with the same filters.
Optimistic write preconditions
State-changing tools require the state the model previously observed. For example:MCP_EXPECTED_STATE_MISMATCH or ORDER_STATUS_PRECONDITION_FAILED. Reload the resource, reconsider the requested change, and only then retry.
Idempotency
External message, instruction, organization-creation, and location-creation tools require anidempotency_key between 8 and 255 characters. The key is scoped to OAuth client, delegated user and tool.
- The same key and same arguments replay the stored result for 24 hours.
- The same key with different arguments returns
MCP_IDEMPOTENCY_MISMATCH. - A concurrent duplicate returns
MCP_OPERATION_IN_PROGRESSwith a retry hint. - Raw keys are hashed before Redis storage and never logged.
Error contract
Tool failures setisError: true and return:
validation, authentication, authorization, not_found, conflict, rate_limit, timeout, dependency, and internal.