Skip to main content
POST

Authorizations

Authorization
string
header
required

The data.access_token value from Get access token.

x-api-key
string
header
required

API key issued by Kira.

Headers

X-Api-Version
string

Version applied to this request. It wins over your account's pinned version — see Versioning.

Example:

"2026-04-14"

Idempotency-Key
string<uuid>
required

A UUID you generate for this call. Retrying with the same key returns the first account instead of opening a second one; reusing it with a different body is rejected with a 409.

Example:

"3fa85f64-5717-4562-b3fc-2c963f66afa6"

Body

application/json

Send bank or provider — one of the two is required. Everything else is optional.

user_id
string<uuid>
required

The user the account belongs to. The user has to be a business with status: VERIFIED and be eligible for the product, or the call is refused.

type
enum<string>
required

Account type.

Available options:
US_BANK
bank
enum<string>

Which bank the account runs on, and with it the rail — see Virtual account values. Required unless you send provider instead.

A bank your account is not authorized for is rejected with Invalid bank.

Available options:
austin_capital_trust,
jp_morgan
provider
enum<string>

A short name for a bank: act means austin_capital_trust, and jp_morgan means the bank of the same name. Send this instead of bank, not as well.

Available options:
act,
jp_morgan
mode
enum<string>

What the account does with a deposit, and it cannot be changed later: fiat keeps it as a USD balance, crypto converts it and sends it to destination. See Virtual account values.

Omit it and a destination means crypto, none means fiat. fiat with a destination is rejected.

Available options:
fiat,
crypto
destination
object

Where a converted deposit is sent. Omit it for a fiat account.

You can also open a crypto account without one — the address is then created on the first payout.

description
string

Your own label for the account. It comes back on every read.

metadata
object

Your own key/value pairs, returned unchanged. Up to 50 keys. A key is 1 to 40 characters and cannot contain [ or ]; a value is up to 500 characters.

markup
object

Your fees on this account, each a decimal string such as "1.50". Negative values are rejected, and so is any key not listed here. Ask your Kira contact before setting these.

Response

The account was accepted and is being opened.

The account as it exists right after the call. Deposit details are not assigned yet, so source_deposit_instructions is null on every new account.

id
string<uuid>

Virtual account UUID. Use it to read the account later.

status
string

Where the account is in its lifecycle — see Virtual account values. A new account always comes back as approved, which means it was accepted, not that it can take money yet.

type
enum<string>

Account type.

Available options:
US_BANK
bank
string

Which bank the account runs on — see Virtual account values. When you sent provider, this is the bank it stands for.

mode
string

What the account does with a deposit. Available options: fiat, crypto. See Virtual account values.

destination
object | null

The destination you sent, returned unchanged. null when you sent none.

source_deposit_instructions
object | null

The bank details a payer sends to. Always null here — the bank assigns them while it opens the account.

description
string

The label you sent. Absent when you sent none.

markup
object

The fees you sent, returned unchanged. Absent when you sent none.

created_at
string

When the account was created, as an ISO 8601 timestamp.

metadata
object

The key/value pairs you sent, returned unchanged. {} when you sent none.