Skip to main content

Users and balances

Read a user​

GET /api/v1/Users/{id}​

Scope: core:users:read

Returns the profile: name, username, email, phone number, KYC status and verification flags. Users can read themselves. Reading another user requires the scope through an administrative role.

KYC statusMeaning
PENDINGSubmitted or not yet started
VERIFIEDApproved. Full access
REJECTEDDeclined. Contact support

Balance​

GET /api/v1/Users/{id}/balance​

Scope: core:users:read

{
"data": {
"totalBalance": 1250.00,
"availableBalance": 850.00,
"currency": "BZD"
}
}
FieldMeaning
availableBalanceSpendable right now. This is what a payment is checked against
totalBalanceAvailable plus money still held, such as a deposit inside its hold window or a protected transfer waiting out its dispute window
currencyAlways BZD

Show availableBalance as the headline figure. The difference between the two is money the user owns but cannot spend yet, and is worth explaining wherever it appears.

Balances move without the user acting: a hold expiring, an incoming transfer, a dispute resolving. Re-fetch after any payment, and after a refusal for insufficient balance.

Permissions​

GET /api/v1/Users/{id}/scopes​

Requires a signed-in caller.

{
"data": {
"roles": ["customer"],
"scopes": ["transactions:create", "transactions:read", "cards:read"]
}
}

Use this to decide which controls to render. The API enforces the same rules on every call regardless of what the client shows.

KYC webhook​

POST /api/v1/Kyc/submit​

Called by the identity verification provider, not by API consumers. It is authenticated by the provider's own signature and updates the user's KYC status.