Methods
Submit a transaction package
Send JSON withContent-Type: application/json. Build the package from the prepared SDK operation rather than constructing proof data manually.
The SDK and the environment’s circuit configuration determine which conditional fields to include. Proof-related material can be sensitive: do not log the full request body.
The response contains:
Submitting the same canonical payload with the same pool and nullifier identity reuses the existing request. A different payload for that identity returns
409 conflicting_payload. Admission limits still apply to repeated submissions.
Track the result
CallGET /api/relay-requests/{relayRequestId}. No request body is needed.
The response includes
relayRequestId, status, createdAt, updatedAt, and retryAllowed. It can also include attemptNumber, transactionHash, and publicReason.
Persist the request ID so you can resume status checks after a reload or service restart. A transaction hash alone does not indicate success.
Retry a request
WhenretryAllowed is true, call POST /api/relay-requests/{relayRequestId}/attempts with no body. The response has the same shape as the status response. Eligibility is checked again when the request arrives.
Do not start a replacement transaction while the existing request is submitted or reconciling. Continue checking its outcome.
Errors
Admission errors use a JSONreason field.
After acceptance, operation failures appear in
status and publicReason. Reasons include invalid_proof, kyt_rejected, nullifiers_spent, simulation_failed, and transaction_failed.
See KYT API for screening decisions and SDK and APIs for the integration model.