{"openapi":"3.0.3","info":{"title":"RAXIO API","version":"0.1.0","description":"Customer links, deposits, withdrawals and signed event notifications through RAXIO. Requests use HMAC-SHA256 authentication and stable idempotency keys. Use the Sandbox endpoints to set operation outcomes and inspect balances and events."},"servers":[{"url":"/","description":"Current API origin."}],"tags":[{"name":"Casino","description":"Customer links, deposits, withdrawals and operation tracking."},{"name":"Sandbox","description":"Balance inspection, operation outcomes and event delivery."},{"name":"Service"}],"security":[{"RaxioKey":[],"RaxioTimestamp":[],"RaxioNonce":[],"RaxioSignature":[]}],"paths":{"/health":{"get":{"summary":"Health","tags":["Service"],"security":[],"responses":{"200":{"description":"Service is running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/ready":{"get":{"summary":"Readiness","tags":["Service"],"security":[],"responses":{"200":{"description":"Service is ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/v1/casino/customer-links":{"post":{"summary":"Link a customer","description":"Links a casino customer reference to a RAXIO test account. The initial balance is USD 1000.00. Supports up to 100 customer links.","tags":["Casino"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable for the same request. Reusing it with different data returns a conflict. Generate a fresh request nonce for every transport retry.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerLink"},"example":{"merchantId":"merchant-001","customerId":"player-001","raxioCustomerId":"test_player_001"}}}},"responses":{"201":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CustomerLink"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/casino/deposit-intents":{"post":{"summary":"Create a deposit intent","description":"Registers an intent. RAXIO_BALANCE debits the customer balance when settled. EXTERNAL_CRYPTO credits the casino balance directly. Supports up to 500 operations.","tags":["Casino"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable for the same request. Reusing it with different data returns a conflict. Generate a fresh request nonce for every transport retry.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositInput"},"example":{"merchantId":"merchant-001","customerId":"player-001","externalTransactionId":"deposit-001","amount":"100.00","currency":"USD","source":"RAXIO_BALANCE"}}}},"responses":{"202":{"description":"Operation registered. Poll its status or use the simulation endpoint to set its outcome.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Operation"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false},"example":{"data":{"operationId":"rx_op_example","type":"deposit","source":"RAXIO_BALANCE","externalTransactionId":"deposit-001","merchantId":"merchant-001","customerId":"player-001","amount":"100.00","currency":"USD","fee":"0.00","netAmount":"100.00","status":"RECEIVED","createdAt":"2026-11-12T12:00:00.000Z","updatedAt":"2026-11-12T12:00:00.000Z","transferReference":null,"txHash":null},"meta":{"environment":"sandbox","simulated":true,"contractVersion":"0.1.0","replayed":false}}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/casino/withdrawals":{"post":{"summary":"Request a withdrawal","description":"Reserves the amount from the casino prefund. SETTLED credits the customer once; REJECTED releases the reservation. The fee is USD 0.00.","tags":["Casino"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable for the same request. Reusing it with different data returns a conflict. Generate a fresh request nonce for every transport retry.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalInput"},"example":{"merchantId":"merchant-001","customerId":"player-001","externalTransactionId":"withdrawal-001","amount":"50.00","currency":"USD"}}}},"responses":{"202":{"description":"Operation registered. Poll its status or use the simulation endpoint to set its outcome.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Operation"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/casino/operations/{operationId}":{"get":{"summary":"Read authoritative operation status","description":"Use after a timeout or replay. An idempotent creation replay may return its original response; this endpoint returns the current state.","tags":["Casino"],"parameters":[{"name":"operationId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Operation"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/casino/operations/{operationId}/proof":{"get":{"summary":"Read the signed operation receipt","description":"Available for SETTLED operations. Returns one persistent Ed25519 receipt and its separate Base registration status. Repeated reads return the same receipt. NOT_CONFIGURED means publication is not enabled; no transaction is implied. Returns 409 PROOF_NOT_AVAILABLE before settlement.","tags":["Casino"],"parameters":[{"name":"operationId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OperationProof"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/.well-known/raxio-signing-keys.json":{"get":{"summary":"Read RAXIO public signing keys","description":"Retrieve from the trusted HTTPS API origin. Select the unique key matching receipt.keyId; do not trust keys attached to a receipt.","tags":["Service"],"security":[],"responses":{"200":{"description":"Public Ed25519 key set.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SigningKeySet"}}}}}}},"/receipt-example.json":{"get":{"summary":"Read a signed example receipt","description":"Fixed public example for independent verification. No customer operation is exposed.","tags":["Service"],"security":[],"responses":{"200":{"description":"Signed example.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OperationProof"},"meta":{"type":"object","properties":{"environment":{"type":"string","enum":["sandbox"]},"simulated":{"type":"boolean","enum":[true]},"contractVersion":{"type":"string","enum":["0.1.0"]},"example":{"type":"boolean","enum":[true]}},"required":["environment","simulated","contractVersion","example"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}}}}},"/v1/sandbox/balances":{"get":{"summary":"Inspect balances","description":"The casino starts with USD 10000.00 and each test account starts with USD 1000.00. Reserved amounts remain unavailable for another withdrawal.","tags":["Sandbox"],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Balances"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sandbox/operations/{operationId}/simulate":{"post":{"summary":"Settle or reject a test operation","description":"Choose SETTLED or REJECTED. Settling an external deposit requires a test txHash starting test_tx_. Completed operations retain their final outcome.","tags":["Sandbox"],"parameters":[{"name":"operationId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable for the same request. Reusing it with different data returns a conflict. Generate a fresh request nonce for every transport retry.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationInput"},"example":{"outcome":"SETTLED"}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Operation"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sandbox/events":{"get":{"summary":"Inspect the event outbox","description":"Returns stored event payloads and delivery status. Select an event and use its delivery endpoint to send or retry the notification.","tags":["Sandbox"],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}},"required":["items"],"additionalProperties":false},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sandbox/events/{eventId}/deliver":{"post":{"summary":"Deliver or retry a signed event","description":"Sends the original payload to the configured callback. Delivery retries preserve the event and operation. ACKNOWLEDGED records HTTP acceptance by the callback; read the operation endpoint for its financial status.","tags":["Sandbox"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable for the same request. Reusing it with different data returns a conflict. Generate a fresh request nonce for every transport retry.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"example":{}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Event"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Invalid JSON, field, amount or simulation input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, expired or replayed request authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The credential does not authorize this merchant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown route, customer, operation or event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflicting replay, insufficient balance, invalid transition, capacity reached or callback not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body exceeds the service limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Request rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The service is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"RaxioKey":{"type":"apiKey","in":"header","name":"X-Raxio-Key","description":"RAXIO test credential identifier, starting raxio_test_."},"RaxioTimestamp":{"type":"apiKey","in":"header","name":"X-Raxio-Timestamp","description":"Unix timestamp in milliseconds; within five minutes of server time."},"RaxioNonce":{"type":"apiKey","in":"header","name":"X-Raxio-Nonce","description":"Unique 16–128 character ASCII nonce, using letters, digits, underscore or hyphen."},"RaxioSignature":{"type":"apiKey","in":"header","name":"X-Raxio-Signature","description":"Lowercase hex HMAC-SHA256. Canonical input: timestamp.METHOD.path-and-query.nonce.sha256(rawBody). Secret is UTF-8 text, not hex-decoded bytes. Sign the exact body bytes and path including query."}},"schemas":{"Meta":{"type":"object","properties":{"environment":{"type":"string","enum":["sandbox"]},"simulated":{"type":"boolean","enum":[true]},"contractVersion":{"type":"string","enum":["0.1.0"]},"replayed":{"type":"boolean"}},"required":["environment","simulated","contractVersion","replayed"],"additionalProperties":false},"Health":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"environment":{"type":"string","enum":["sandbox"]},"simulated":{"type":"boolean","enum":[true]},"contractVersion":{"type":"string","enum":["0.1.0"]}},"required":["status","environment","simulated","contractVersion"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"environment":{"type":"string","enum":["sandbox"]},"simulated":{"type":"boolean","enum":[true]},"contractVersion":{"type":"string","enum":["0.1.0"]}},"required":["environment","simulated","contractVersion"],"additionalProperties":false}},"required":["error","meta"],"additionalProperties":false},"CustomerLink":{"type":"object","properties":{"merchantId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"Merchant identifier assigned to your API credentials."},"customerId":{"type":"string","description":"Casino customer reference."},"raxioCustomerId":{"type":"string","pattern":"^test_","description":"RAXIO test account reference, beginning test_."}},"required":["merchantId","customerId","raxioCustomerId"],"additionalProperties":false},"DepositInput":{"type":"object","properties":{"merchantId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"Merchant identifier assigned to your API credentials."},"customerId":{"type":"string","description":"Previously linked casino customer ID."},"externalTransactionId":{"type":"string","description":"Stable reference assigned by the integrator; unique within the operation type."},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Positive exact USD amount from 0.01 to 100000.00. Numbers and scientific notation are rejected."},"currency":{"type":"string","enum":["USD"]},"source":{"type":"string","enum":["RAXIO_BALANCE","EXTERNAL_CRYPTO"]}},"required":["merchantId","customerId","externalTransactionId","amount","currency","source"],"additionalProperties":false},"WithdrawalInput":{"type":"object","properties":{"merchantId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"Merchant identifier assigned to your API credentials."},"customerId":{"type":"string","description":"Previously linked casino customer ID."},"externalTransactionId":{"type":"string","description":"Stable reference assigned by the integrator; unique within the operation type."},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Positive exact USD amount from 0.01 to 100000.00. Numbers and scientific notation are rejected."},"currency":{"type":"string","enum":["USD"]}},"required":["merchantId","customerId","externalTransactionId","amount","currency"],"additionalProperties":false},"SimulationInput":{"type":"object","properties":{"outcome":{"type":"string","enum":["SETTLED","REJECTED"]},"txHash":{"type":"string","pattern":"^test_tx_","description":"Test transaction reference beginning test_tx_, required to settle an external deposit."}},"required":["outcome"],"additionalProperties":false},"Operation":{"type":"object","properties":{"operationId":{"type":"string"},"type":{"type":"string","enum":["deposit","withdrawal"]},"source":{"type":"string","enum":["RAXIO_BALANCE","EXTERNAL_CRYPTO","CASINO_PREFUND"]},"externalTransactionId":{"type":"string"},"merchantId":{"type":"string"},"customerId":{"type":"string"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."},"currency":{"type":"string","enum":["USD"]},"fee":{"type":"string","enum":["0.00"]},"netAmount":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."},"status":{"type":"string","enum":["RECEIVED","RESERVED","SETTLED","REJECTED"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"transferReference":{"type":"string","nullable":true},"txHash":{"type":"string","nullable":true}},"required":["operationId","type","source","externalTransactionId","merchantId","customerId","amount","currency","fee","netAmount","status","createdAt","updatedAt","transferReference","txHash"],"additionalProperties":false},"SigningKeySet":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/SigningKey"}}},"required":["keys"],"additionalProperties":false},"SigningKey":{"type":"object","properties":{"kty":{"type":"string","enum":["OKP"]},"crv":{"type":"string","enum":["Ed25519"]},"x":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"kid":{"type":"string"},"alg":{"type":"string","enum":["EdDSA"]},"use":{"type":"string","enum":["sig"]}},"required":["kty","crv","x","kid","alg","use"],"additionalProperties":false},"Receipt":{"type":"object","properties":{"version":{"type":"string","enum":["1"]},"issuer":{"type":"string","enum":["RAXIO"]},"keyId":{"type":"string"},"receiptId":{"type":"string"},"operationId":{"type":"string"},"operationType":{"type":"string","enum":["deposit","withdrawal"]},"status":{"type":"string","enum":["SETTLED"]},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."},"currency":{"type":"string","enum":["USD"]},"fee":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."},"netAmount":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."},"transferReference":{"type":"string"},"settledAt":{"type":"string","format":"date-time"},"environment":{"type":"string","enum":["test","production"]},"salt":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$","description":"Random 32-byte base64url salt."}},"required":["version","issuer","keyId","receiptId","operationId","operationType","status","amount","currency","fee","netAmount","transferReference","settledAt","environment","salt"],"additionalProperties":false},"ReceiptEnvelope":{"type":"object","properties":{"canonicalization":{"type":"string","enum":["RAXIO-JSON-1"]},"receipt":{"$ref":"#/components/schemas/Receipt"},"signature":{"type":"object","properties":{"algorithm":{"type":"string","enum":["Ed25519"]},"keyId":{"type":"string"},"value":{"type":"string","pattern":"^[A-Za-z0-9_-]{86}$"}},"required":["algorithm","keyId","value"],"additionalProperties":false},"commitment":{"type":"string","pattern":"^0x[0-9a-f]{64}$","description":"SHA-256 of the canonical envelope without this commitment field."}},"required":["canonicalization","receipt","signature","commitment"],"additionalProperties":false},"ProofAnchor":{"type":"object","properties":{"status":{"type":"string","enum":["NOT_CONFIGURED","QUEUED","SIGNED","BROADCAST","CONFIRMED","FINALIZED","RECONCILIATION_REQUIRED"],"description":"Independent of receipt signature and operation status. This sandbox returns NOT_CONFIGURED."},"network":{"type":"string","enum":["base"]},"chainId":{"type":"integer","enum":[8453]},"contractAddress":{"type":"string","enum":["0x4200000000000000000000000000000000000021"]},"transactionHash":{"type":"string","nullable":true,"pattern":"^0x[0-9a-f]{64}$"},"blockNumber":{"type":"string","nullable":true,"pattern":"^[0-9]+$"},"blockHash":{"type":"string","nullable":true,"pattern":"^0x[0-9a-f]{64}$"},"explorerUrl":{"type":"string","nullable":true,"format":"uri"},"confirmedAt":{"type":"string","nullable":true,"format":"date-time"},"finalizedAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["status","network","chainId","contractAddress","transactionHash","blockNumber","blockHash","explorerUrl","confirmedAt","finalizedAt"],"additionalProperties":false},"OperationProof":{"type":"object","properties":{"operationId":{"type":"string"},"envelope":{"$ref":"#/components/schemas/ReceiptEnvelope"},"anchor":{"$ref":"#/components/schemas/ProofAnchor"}},"required":["operationId","envelope","anchor"],"additionalProperties":false},"Balances":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"casino":{"type":"object","properties":{"available":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."},"reserved":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."}},"required":["available","reserved"],"additionalProperties":false},"customers":{"type":"array","items":{"type":"object","properties":{"customerId":{"type":"string"},"balance":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","example":"100.00","description":"Exact USD amount, expressed as a string with two decimal places."}},"required":["customerId","balance"],"additionalProperties":false}},"fees":{"type":"string","enum":["0.00"]}},"required":["currency","casino","customers","fees"],"additionalProperties":false},"EventPayload":{"type":"object","properties":{"eventId":{"type":"string"},"type":{"type":"string","enum":["deposit.settled","deposit.rejected","withdrawal.settled","withdrawal.rejected"]},"createdAt":{"type":"string","format":"date-time"},"environment":{"type":"string","enum":["sandbox"]},"simulated":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Operation"}},"required":["eventId","type","createdAt","environment","simulated","data"],"additionalProperties":false},"Event":{"type":"object","properties":{"eventId":{"type":"string"},"type":{"type":"string"},"payload":{"$ref":"#/components/schemas/EventPayload"},"delivery":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","RETRYING","ACKNOWLEDGED"]},"attempts":{"type":"integer","minimum":0},"lastHttpStatus":{"type":"integer","nullable":true},"lastAttemptAt":{"type":"string","nullable":true}},"required":["status","attempts","lastHttpStatus","lastAttemptAt"],"additionalProperties":false}},"required":["eventId","type","payload","delivery"],"additionalProperties":false}}},"x-raxio-webhook":{"description":"POST the unchanged EventPayload as JSON. X-Raxio-Event is eventId. X-Raxio-Key identifies the integration; Timestamp, Nonce and Signature follow the same canonical format as requests, using the separate RAXIO_WEBHOOK_SECRET. Verify before processing and deduplicate by eventId. Repeated delivery must not credit twice.","example":{"eventId":"rx_evt_example","type":"deposit.settled","createdAt":"2026-11-12T12:01:00.000Z","environment":"sandbox","simulated":true,"data":{"operationId":"rx_op_example","type":"deposit","source":"RAXIO_BALANCE","externalTransactionId":"deposit-001","merchantId":"merchant-001","customerId":"player-001","amount":"100.00","currency":"USD","fee":"0.00","netAmount":"100.00","status":"SETTLED","createdAt":"2026-11-12T12:00:00.000Z","updatedAt":"2026-11-12T12:00:00.000Z","transferReference":"rx_ledger_example","txHash":null}}}}