Skip to main content
POST
/
accounts
/
{accountId}
/
bank-accounts
Issue Bank Account
curl --request POST \
  --url https://api.rolla.xyz/api/v1/external/accounts/{accountId}/bank-accounts \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "accountData": {}
}
'
{
  "success": true,
  "message": "Bank account issued successfully",
  "data": {
    "status": "issued",
    "provider": "<string>",
    "bankAccount": {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "bankName": "Guaranty Trust Bank",
      "accountNumber": "1238726395",
      "accountName": "Beta Logistics LLC",
      "routingNumber": "<string>",
      "swiftCode": "<string>",
      "bankAddress": "<string>",
      "status": "active",
      "expiresAt": "2023-11-07T05:31:56Z",
      "createdAt": "2023-11-07T05:31:56Z"
    }
  }
}
Issues an NGN or USD deposit account for an approved account. The banking provider is selected automatically based on the currency and whether the account is a business or an individual. The details each provider needs are prefilled from the account’s application. Check Get Issuance Requirements first to see the prefilled payload and anything missing, then pass the missing pieces in accountData.

NGN accounts

NGN accounts are issued immediately.
curl -X POST "https://api.rolla.xyz/api/v1/external/accounts/eec3cbed-79d8-4370-87a0-b6be9e287337/bank-accounts" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "currency": "NGN",
    "accountData": {
      "bvn": "22211122233"
    }
  }'
{
  "success": true,
  "message": "Bank account issued successfully",
  "data": {
    "status": "issued",
    "provider": "gtbank",
    "bankAccount": {
      "id": "7f3a2b10-91c4-4f3b-b1d2-0a8e44c10a55",
      "currency": "NGN",
      "provider": "gtbank",
      "bankName": "Guaranty Trust Bank",
      "accountNumber": "1238726395",
      "accountName": "Beta Logistics LLC",
      "type": "static",
      "status": "active"
    }
  }
}

USD accounts

USD accounts require provider review. The first call submits the account’s application data (including its documents) to the provider and returns 202 Accepted:
curl -X POST "https://api.rolla.xyz/api/v1/external/accounts/eec3cbed-79d8-4370-87a0-b6be9e287337/bank-accounts" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "currency": "USD",
    "accountData": {
      "onboardingDetails": {
        "businessInfo": { "tradeName": "Beta Logistics", "website": "https://betalogistics.com" }
      },
      "representatives": [{
        "relatedPersonId": "a3d4f21e-f499-488f-8508-43228dfea485",
        "taxNumber": "123-45-6789",
        "idDocument": {
          "number": "P123456789",
          "type": "passport",
          "issueDate": "2020-01-01",
          "expirationDate": "2030-01-01"
        }
      }]
    }
  }'
{
  "success": true,
  "message": "Bank account request accepted",
  "data": {
    "status": "submitted_for_review",
    "provider": "ssb_usd",
    "state": "client_submitted",
    "message": "Account details were submitted to the provider for review. The deposit account becomes available once the provider approves; retry this endpoint to collect it."
  }
}
Call the endpoint again after the provider approves — the response then includes the deposit account with accountNumber, routingNumber and swiftCode. While review is in progress you get 202 with status: pending_provider_review.

Key Behaviours

Entries in accountData.representatives are merged into the prefilled representative with the same relatedPersonId, so you only send the fields you’re adding — names, addresses and ownership come from the application.
The account’s application must be approved before bank accounts can be issued. If provider-required details are missing, the response lists them under errors (USD) or missingFields (NGN).
One bank account per provider and currency: issuing again returns 409 Conflict once an account exists.

Authorizations

X-API-Key
string
header
required

Your Rolla API key

Path Parameters

accountId
string<uuid>
required

Identifier of an account owned by the same user as your API key's business

Body

application/json
currency
enum<string>
required
Available options:
NGN,
USD
accountData
object

Optional overrides merged over the details prefilled from the account's application. The shape depends on the provider — call GET /accounts/{accountId}/bank-accounts/requirements to see the prefilled payload and what's missing. For USD, entries in representatives merge into the prefilled person matching the same relatedPersonId.

Response

Bank account issued

success
boolean
Example:

true

message
string
Example:

"Bank account issued successfully"

data
object