# Zetus SPEI API > Collect SPEI transfers on your own CLABEs. Mutual TLS plus an OAuth2 client_credentials bearer token bound to the certificate; money in integer centavos; every write is idempotent by `reference`; incoming transfers must be confirmed (`verification.verified`) before you apply them; webhooks follow Standard Webhooks. Outgoing payments: your system only requests them (`payments.request`); two people of your organisation approve them in the console; only `payment.completed` is final money out. Integrate now against the sandbox: API `https://sandbox.zenit.zetuspay.com.mx`, token endpoint `https://auth.sandbox.zenit.zetuspay.com.mx/oauth2/token`, docs `https://docs.sandbox.zenit.zetuspay.com.mx`; the network is simulated and `/sandbox/*` routes trigger deposits, approvals and outcomes. Production (not live yet): token endpoint `https://idp.zetuspay.com.mx/oauth2/token`, API `https://api.zenit.zetuspay.com.mx` (to be confirmed). ## Tutorials - [Quickstart](tutorials/quickstart.md): from sandbox credentials to the first call ## How-to guides - [Generate a certificate and CSR](how-to/certificate-csr.md): key, CSR, rotation, revocation - [Get a token](how-to/get-a-token.md): client_credentials over mTLS, scopes, caching - [Idempotency and retries](how-to/idempotency-and-retries.md): `reference`, timeouts, backoff - [Pagination](how-to/pagination.md): cursors and the event log - [Verify webhooks](how-to/verify-webhooks.md): signature, dedupe, rotation - [Errors](how-to/errors.md): envelope, statuses, catalogue - [Send payments](how-to/send-payments.md): beneficiaries, requests, approvals, limits, events - [Use the sandbox](how-to/use-the-sandbox.md): URLs, deposits, simulated approvals, outcomes by amount, what changes at go-live - [Go live](how-to/go-live.md): production checklist ## Explanation - [Incoming transfer lifecycle](explanation/incoming-transfer-lifecycle.md): why received is not verified - [Operation date and 18:00 cut](explanation/operation-date-and-cutoff.md): business days - [Payment lifecycle](explanation/payment-lifecycle.md): why settled is not completed ## Reference - [Reference index](reference/README.md): OpenAPI contract and error catalogue - [Error codes](codes.json): machine-readable catalogue - [Full documentation in one file](llms-full.txt): all pages plus API reference