Gravv docs
Docs Agent Sign in Get API keys

Open your card account

Opens your business's one card account, which backs every card you issue. Send type card, currency USD and your business's own customer ID, which is the customer_id on your account whose category is main. The API refuses an end customer's ID and a second card account. The account starts pending. Wait for the account.activated webhook, or read the account until it is active, before you activate cards with it.

This is the only use of POST /v1/accounts that Gravv documents. Open every other account with POST /v2/accounts. Every error is HTTP 400.

POSThttps://api.gravv.xyz/v1/accounts

Headers

Required for POST requests. The key is 1 to 255 printable ASCII characters. A retry with the same key and body within 24 hours returns the first response, including a 400. After you fix a failed request, send a new key.

Request Body

Always USD

Possible values: USD

Always card

Possible values: card

Label for the account

Your business's own customer ID. It is the customer_id on your account whose category is main.

Network of the account's wallet, in lower case

Possible values: polygon, ethereum, solana, stellar, avalanche_c_chain

Bank that holds the card account

Possible values: lead_bank, cross_river_bank

Request Examples

{
"currency": "USD",
"type": "card",
"label": "cards",
"customer_id": "550e8400-e29b-41d4-a716-446655440178",
"blockchain_network": "polygon",
"bank": "cross_river_bank"
}

Responses

Status Description
200 Account created
400 The request failed. These account routes return every error as HTTP 400, including not found. Read the error message for the cause.

200 response

An internal account. The API leaves out empty fields. It also returns accounts opened with /v2/accounts, without their v2-only fields.

Type of account.

Possible values: regular, savings, card, auto_sweep, collection, default, non_custodial

What the account can do. It depends on the account type.

Possible values: transfer, receive, remittance, card_payment, sweep_collection

pending while the bank sets the account up, then active. frozen means suspended or set-up failed, manual_review means held for review, and deleted is closed and final. reason explains a status other than active.

Possible values: active, pending, frozen, manual_review, deleted

Why the account is not active. Omitted for active accounts.

main for your own accounts, sub_account for your customers' accounts.

Possible values: main, sub_account

Balance as a decimal string in major units. For USD it is the USDC balance. For EUR it is that balance converted to EUR. For NGN it is the token balance. For other currencies it is the USDC amount, not converted. The API omits it when it cannot read the balance, so treat a missing value as unknown, not zero.

True for NGN accounts

Set for NGN accounts only

Possible values: settle, auto_onramp

The token wallet of an NGN account

Deposit account number. The US account number for USD, the IBAN for EUR, the account number for GBP, the CLABE for MXN and the BR code for BRL. Bank details appear only once the account is active.

The ABA routing number for USD, the BIC for EUR and the sort code for GBP.

Balance per token

{
"data": {
"id": "6f1c2b8e-9a43-4f0e-8d35-2b7f0f6c1a90",
"label": "cards",
"date_created": "2026-10-13T09:12:44Z",
"wallet_address": "0x25a4c9853e761753ae18d6871731e305b8b0b2a4",
"blockchain_network": "polygon",
"type": "card",
"customer_id": "550e8400-e29b-41d4-a716-446655440178",
"capabilities": [
  "transfer",
  "receive",
  "remittance"
],
"currency": "USD",
"tenant_name": "Acme Payments",
"tenant_id": "b8b2f7f4-3c2a-4f3e-9d61-0c5a7d1e2f33",
"status": "pending",
"category": "sub_account"
},
"error": null
}

400 response

Human-readable error message.

Authorization

  • ApiKeyAuth
Was this page helpful?
ESC