https://api.balampay.com/sandbox.
Get your credentials
Kira provides three credentials for your tenant:
api_key— sent as thex-api-keyheader on every request, including/auth.client_idandpassword— exchanged atPOST /authfor a short-lived access token.
Authenticate
Call The response wraps the token in the success envelope:Use the returned See Authentication for the full token lifecycle.
POST /auth with your client_id and password in the body and your x-api-key header. The /auth endpoint itself needs only x-api-key — no bearer token yet.access_token as your bearer token on every other request. It is valid for 3600 seconds, so refresh it before it expires.Pin your version
Pin your account to version Until you pin, send
2026-04-14 with POST /v1/versioning/upgrade. This call is idempotent — run it once.X-Api-Version: 2026-04-14 on each request. Once pinned, your account default is the pinned version and the header becomes optional. See Versioning for details.Create a user
Create a user with
POST /v1/users. A user is either an individual or a business. source_of_funds is required — omitting it most commonly triggers an automatic KYC rejection.Create a virtual account
Create a virtual account for the user with
POST /v1/virtual-accounts.There is one ACT virtual account per user. Re-creating returns
409 Conflict — reuse the existing VA via the list or get endpoints. A VA being approved does not mean funds are ready: confirm readiness via account_number being a real value (non-null and not "PENDING-ACT-ACCOUNT").Simulate a deposit (sandbox)
Fund the virtual account by simulating a deposit with
POST /v1/virtual-accounts/{id}/simulate-deposit, where {id} is the VA id from the previous step.simulate-deposit returns 201 with status: "completed" immediately. The simulated deposit does not appear in GET /v1/virtual-accounts/{id}/deposits and does not change the balance — the sandbox balance is a fixed provider value. Confirmation is the 201 response itself plus the virtual_account.deposit_funds_received webhook. settlement_triggered: false on a fiat deposit is normal, not an error.Make a payout
Payouts are a two-step flow. First preview to get a fee breakdown with
POST /v1/virtual-accounts/{id}/payout/preview, then create the payout with POST /v1/virtual-accounts/{id}/payout.There is no fee schedule endpoint and no
dry_run mode. Preview returns 400 "Total fees exceed or equal the payout amount" for amounts below the minimum (~$3 for SWIFT) — the only way to find the minimum is to iterate. The 201 create response returns lowercase status: "created", while GET /v1/payouts/{id} returns CREATED for the same payout — compare statuses case-insensitively.Next steps
Authentication
The full token lifecycle, required headers, and credential handling.
Webhooks
Register an endpoint and consume deposit, user, and payout events.
API reference
Browse every endpoint, request shape, and response in the interactive reference.