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.
Supported assets — usdt_trc20 (TRON), usdc_erc20 and eth (Ethereum), usdt_bep20 (BNB Chain), btc (Bitcoin). Every address the API issues comes from Kassa's own custody — see how it is held.
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.
Try it now — public sandbox
Everything below works immediately with the shared test key — no account, no fees, no real
money. Sandbox responses are realistic but fake: nothing touches custody or the chain. Checkout
sessions are real enough to open in the hosted page, and a simulate-payment call marks them paid
so you can build your success flow end to end.
# the public sandbox key — safe to share, safe to hardcode in tests
ksk_test_69187db6307b0001c4d273f6ba508995
# walk the whole checkout lifecycle without money:
curl -X POST https://api.kassa.app/api/v1/checkout \
-H "X-API-Key: ksk_test_69187db6307b0001c4d273f6ba508995" \
-H "Content-Type: application/json" \
-d '{ "coin": "usdt_trc20", "amount": "49.90", "label": "Demo order" }'
# → open the returned url in a browser, then:
curl -X POST https://api.kassa.app/api/v1/checkout/<id>/simulate-payment \
-H "X-API-Key: ksk_test_69187db6307b0001c4d273f6ba508995"
# → the hosted page flips to "Payment received" within ~5 seconds
Sandbox responses carry "note": "sandbox — no real funds moved"
and "test": true on /v1/ping.
When you are ready, swap in a live ksk_… key from your dashboard —
the endpoints are identical.
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.