This page is generated from the contract (data/gateway-v1.json): each operation shows its verb, path, parameters, body, responses, whether it carries an Idempotency-Key, and the equivalent method in all five SDKs. For the end-to-end flow with complete examples, see the implementation guide.

Operations in tag sandbox #

Contract description: Deterministic simulation surface for sandbox API keys (E6/E7): test clocks, time advance and wallet/credit simulations. Production keys are refused with 403.

MethodPathOperationScopeIdem.
POST/v1/gateway/sandbox/credits/{app_id}/advance/Advance a credit lifecycle (sandbox only)——
POST/v1/gateway/sandbox/test-clocks/Create a test clock (sandbox only)——
GET/v1/gateway/sandbox/test-clocks/{clock_id}/Read a test clock (sandbox only)——
POST/v1/gateway/sandbox/test-clocks/{clock_id}/advance/Advance a test clock (sandbox only)——
POST/v1/gateway/sandbox/wallet/simulate/Simulate a wallet movement (sandbox only)——

Advance a credit lifecycle (sandbox only) #

POST/v1/gateway/sandbox/credits/{app_id}/advance/

  • operationId advanceCreditDisbursement
  • Authentication X-API-Key · sandbox keys only
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
app_id requiredpathstringCredit application id. E.g.: CRED-2026-000123

Request body

Content type: application/json · required

Free-form object.

Responses

CodeDescriptionBody
200Advanced lifecycle state.object application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.sandbox.simulate.credit_disbursement()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Create a test clock (sandbox only) #

POST/v1/gateway/sandbox/test-clocks/

  • operationId createTestClock
  • Authentication X-API-Key · sandbox keys only
  • Idempotency-Key not applicable
Stateless: the clock state travels in the returned id (tcl-…, tamper-evident).

Request body

Content type: application/json

Free-form object.

Responses

CodeDescriptionBody
200Test clock created; state encoded in clock_id.object application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.sandbox.test_clocks.create()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Read a test clock (sandbox only) #

GET/v1/gateway/sandbox/test-clocks/{clock_id}/

  • operationId getTestClock
  • Authentication X-API-Key · sandbox keys only
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
clock_id requiredpathstringTest clock id (state-carrying). E.g.: tcl-eyJmcm96ZW4i-a1b2c3d4e5f6a7b8

Responses

CodeDescriptionBody
200Current clock state.object application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.sandbox.test_clocks.get()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Advance a test clock (sandbox only) #

POST/v1/gateway/sandbox/test-clocks/{clock_id}/advance/

  • operationId advanceTestClock
  • Authentication X-API-Key · sandbox keys only
  • Idempotency-Key not applicable
Forward-only and capped; returns the NEW clock id.

Parameters

NameInTypeDescription
clock_id requiredpathstringTest clock id (state-carrying). E.g.: tcl-eyJmcm96ZW4i-a1b2c3d4e5f6a7b8

Request body

Content type: application/json · required

Free-form object.

Responses

CodeDescriptionBody
200Clock advanced; use the returned id from now on.object application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.sandbox.test_clocks.advance()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Simulate a wallet movement (sandbox only) #

POST/v1/gateway/sandbox/wallet/simulate/

  • operationId simulateWalletTransfer
  • Authentication X-API-Key · sandbox keys only
  • Idempotency-Key not applicable
Deterministic transform — no ledger behind it, no money moves.

Request body

Content type: application/json · required

Free-form object.

Responses

CodeDescriptionBody
200Simulated result.object application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.sandbox.simulate.wallet_transfer()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.