Developers

Custody as an API

Run Kassa inside your own platform: open managed accounts, issue deposit addresses, take payments through a hosted checkout, and route withdrawals to your treasury wallet — all over a simple, key-authenticated REST API.

Access & pricing

API access is issued to your main Kassa account from the dashboard. It is designed for businesses that hold custody with us and automate on top of it.

Minimum balance
$1,000
Your account must hold at least $1,000 before a key can be issued.
Yearly fee
$1,000
Setup and usage, charged from your balance when the key is created. Renewed yearly.
Commission
0.5%
On every amount arriving at API-created addresses, taken from the incoming balance.
Prepaid rate
0.1%
Prepay commission credit from your balance and the rate drops to 0.1% while it lasts — charged against the credit, so incoming amounts arrive untouched.

Create your key at kassa.app → Developer API. It is shown once; we store only a hash. Keys can be suspended or revoked at any time from the dashboard.

Authentication

Every call carries your key in the X-API-Key header over HTTPS. Base URL: https://api.kassa.app

# quick check curl https://api.kassa.app/api/v1/ping \ -H "X-API-Key: ksk_your_key_here"

Endpoints

GET/api/v1/pingKey status, fee window, commission terms
GET/api/v1/accountYour balances and sub-account count
POST/api/v1/subaccountsOpen a managed account (email + password)
GET/api/v1/subaccountsList them, with balances
POST/api/v1/addressesFresh deposit address, yours or a sub's
POST/api/v1/transferMove funds to a sub-account internally
POST/api/v1/payout-addressSet the one address withdrawals go to
POST/api/v1/withdrawWithdraw to the payout address
GET/api/v1/withdrawalsWithdrawal history & status
POST/api/v1/checkoutCreate a hosted checkout, get its URL
GET/api/v1/checkout/:idCheckout status (paid / pending / expired)
GET/api/v1/commissionsWhat you have been charged, entry by entry

Create a sub-account

curl -X POST https://api.kassa.app/api/v1/subaccounts \ -H "X-API-Key: ksk_…" -H "Content-Type: application/json" \ -d '{ "email": "customer@yourcompany.com", "password": "StrongPass#2026", "coin": "usdt_trc20" }' # → { "id": "…", "address": "T…", "email_verified": false } # The account works after the emailed 24h confirmation link is followed. # Password policy: ≥10 chars, 1 uppercase, 1 number, 1 special.

Issue a deposit address

curl -X POST https://api.kassa.app/api/v1/addresses \ -H "X-API-Key: ksk_…" -H "Content-Type: application/json" \ -d '{ "coin": "usdt_trc20", "label": "order-1042", "sub_id": "optional" }' # Deposits arriving here are credited automatically and pay your commission rate.

Withdrawals — locked to your payout address

The key can send money to exactly one place: the payout address you configure. Changing it requires your account password on top of the key, so a leaked key alone can only ever pay you.

# one-time setup (needs account_password) curl -X POST https://api.kassa.app/api/v1/payout-address \ -H "X-API-Key: ksk_…" -H "Content-Type: application/json" \ -d '{ "coin": "usdt_trc20", "address": "TYourTreasury…", "account_password": "…" }' # then withdrawals need only the amount curl -X POST https://api.kassa.app/api/v1/withdraw \ -H "X-API-Key: ksk_…" -H "Content-Type: application/json" \ -d '{ "amount": "250" }' # → { "status": "pending" } — network fee is taken from your balance; # the request passes the same platform safeguards as any withdrawal.

Hosted checkout

Charge a customer without building any crypto UI. Create a session, send the customer to the URL, and poll the status (or let the page redirect to your success_url). The page shows the amount, a QR code, a live countdown and confirms automatically when the payment lands.

curl -X POST https://api.kassa.app/api/v1/checkout \ -H "X-API-Key: ksk_…" -H "Content-Type: application/json" \ -d '{ "coin": "usdt_trc20", "amount": "49.90", "label": "Pro plan · invoice #1042", "ttl_minutes": 30, "success_url": "https://yourshop.com/thanks" }' # → { "id": "…", "url": "https://kassa.app/checkout?id=…", "address": "T…" } # poll until status == "paid" curl https://api.kassa.app/api/v1/checkout/<id> -H "X-API-Key: ksk_…" # → { "status": "paid", "paid_amount": "49.9", "tx_hash": "…" }

Sessions run 5–120 minutes. Partial payments are shown to the payer and stay credited to you; the session completes when the full amount has arrived.

Errors

400Invalid input, insufficient balance, or a platform limit — the message says which.
401Missing, unknown or revoked key; wrong account password.
403Key suspended, yearly fee lapsed, or the action is not allowed for this account.
404Resource does not exist or belongs to someone else.
409Conflict — e.g. the email is already registered.
429Rate limited — back off and retry.

Errors are JSON: {"detail": "human-readable reason"}

Ready to build?

Sign in, fund your account, and create your key under Developer API. Questions → support@kassa.app

Open the dashboard