Skip to main content

Support API fundamentals

Ticket, refund, chargeback, and attachment methods use the same signed API endpoint as payments:
Prerequisites: create a server-side API credential with only the scopes your integration needs. New support scopes are not granted to existing credentials automatically.

Sign every request

Send the exact raw JSON body with the required application ID and hash. The timestamp and nonce are an optional pair: Support methods never require timestamp/nonce. If you send replay proof, provide both headers with a fresh timestamp and nonce; partial, stale, and reused proofs are rejected when detected. Hash and send the same bytes: changing whitespace or key order after signing invalidates the request. Responses use the existing envelope and are signed in the X-Data-Hash response header:
Verify the response with SHA512(rawResponseBody + secretKey) before using its contents. Error responses use the same request_id and timing fields and are signed when credential verification succeeded; early authentication failures may not have a response signature.

Signed request example

The following example lists tickets. The same helper works for every method in this guide.

Scopes

Scope checks are always enforced for these methods. A credential can additionally restrict currencies or payment routes; payment-linked methods resolve the payment first and apply that policy to its actual currency and service.

Identifiers and idempotency

Resources expose only public identifiers: ticket.create and refund.request require params.identifiers.c_id. A successful response contains both c_id and h_id. Read methods accept exactly one of them, except chargebacks, which are addressed only by h_id. State-changing methods other than ticket/refund creation require a top-level operation_id:
Keep the same c_id or operation_id when retrying the same logical mutation. The server stores the completed business result without a time-to-live:
  • same key and same payload returns the original result;
  • same key and different payload returns HTTP 409 with code 1013;
  • transport timeouts do not authorize changing the key;
  • key scope is merchant + method, so do not reuse an operation key for a different method.
For refund.request, amount is an optional positive digit-string in minor units, up to 9223372036854775807. Values above JavaScript’s safe-integer limit remain strings in requests and responses; never coerce them to number.
Never generate a new refund c_id merely because the first request timed out. Query with the original c_id first. A retry cannot create a second refund when the original request committed successfully.

Cursor pagination

All list methods use opaque cursor pagination:
limit defaults to 25 and must be between 1 and 100. Pass next_cursor unchanged to obtain the next page; null means the list is complete. Lists intentionally omit an expensive total. Use the corresponding *.summary method for counts grouped by status.

Default quotas

Quotas are counted per merchant, application, and method. HTTP 429 responses include the standard error envelope and retry headers. Do not retry mutations automatically unless you keep the same idempotency key and exact payload.

Common errors

For resource-specific codes, see Error Codes.

Best practices

  • Store request_id, c_id, h_id, method, and operation key with your local operation.
  • Treat all not-found responses as final for that credential; cross-merchant resources are deliberately indistinguishable from missing resources.
  • Never send merchant_id, application ID, actor, source, or service_id in a support request body.
  • Use canonical dot-notation method names. Legacy payment aliases do not apply to support methods.