API
Language
Ask for a seat

Closed beta. Nothing here is callable yet. These docs describe the day-one contract, and names marked proposed may change before the beta opens. Ask for a seat

Docs · Reference

Accounts

The business’s accounts and their balances. Numbers are masked to the last 4 digits.

List the accounts of the business your key is bound to

GET/v1/accounts

One checking account per business today; the response is a list so it can grow. Account and routing numbers are masked to the last 4 digits. Balances are signed: a negative balance means the account is overdrawn. Balances may lag by an unknown interval, and no as_of time is returned yet. If part of the answer can't be loaded, you get a 503 with Retry-After, never a partial 200.

Authentication

Bearer token whose client has the scope accounts:read

Response · a list of Account

dataarray of Account

The page of results

Each item in data:

idstringrequired

The account's id

namestring

Masked account name

typestringrequired

Account type

statusstringrequired

Account status

account_number_last4stringrequired

Last 4 digits of the account number

4 characters

routing_number_last4stringrequired

Last 4 digits of the routing number

4 characters

freeze_typestring

Set when the account is restricted. Omitted otherwise

One of FULL_FREEZEWITHDRAWAL_FREEZE

balanceobjectrequired

The account's balances

balance.availableSignedMoneyrequired

Available balance

balance.available.amountstringrequired

Decimal string with two places. Negative when the account is overdrawn

pattern ^-?[0-9]+\.[0-9]{2}$

balance.available.currencystringrequired

Always USD

One of USD

balance.currentSignedMoneyrequired

Current balance

balance.current.amountstringrequired

Decimal string with two places. Negative when the account is overdrawn

pattern ^-?[0-9]+\.[0-9]{2}$

balance.current.currencystringrequired

Always USD

One of USD

balance.spendableSignedMoneyrequired

Available balance minus reserved funds

balance.spendable.amountstringrequired

Decimal string with two places. Negative when the account is overdrawn

pattern ^-?[0-9]+\.[0-9]{2}$

balance.spendable.currencystringrequired

Always USD

One of USD

balance.as_ofstring

Time of the last balance change. Not returned yet

date-time

opened_atstring

Date the account was opened

date

Responses

  • 200OK
  • 401The token is missing, expired or unknown, or the client was revoked or switched off
  • 403The client lacks the scope, the owner's standing changed, or the API isn't enabled for this business
  • 429Too many requests. Wait for Retry-After
  • 500Something failed unexpectedly on Novo's side. Not retryable: quote request_id to support
  • 503Something the answer depends on is unavailable. Retry after Retry-After
Request
curl "https://$NOVO_API_HOST/v1/accounts" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Response · 200
{
  "data": [
    {
      "id": "acct_example_01",
      "name": "xxxxxx1234",
      "type": "EXAMPLE_TYPE",
      "status": "EXAMPLE_STATUS",
      "account_number_last4": "1234",
      "routing_number_last4": "5678",
      "balance": {
        "available": {
          "amount": "1250.00",
          "currency": "USD"
        },
        "current": {
          "amount": "1300.00",
          "currency": "USD"
        },
        "spendable": {
          "amount": "1150.00",
          "currency": "USD"
        }
      },
      "opened_at": "2024-03-14"
    }
  ]
}

Get one account

GET/v1/accounts/{account_id}

The same account object as in the list.

Authentication

Bearer token whose client has the scope accounts:read

Parameters

account_idpath · stringrequired

The account's id

Response · Account

idstringrequired

The account's id

namestring

Masked account name

typestringrequired

Account type

statusstringrequired

Account status

account_number_last4stringrequired

Last 4 digits of the account number

4 characters

routing_number_last4stringrequired

Last 4 digits of the routing number

4 characters

freeze_typestring

Set when the account is restricted. Omitted otherwise

One of FULL_FREEZEWITHDRAWAL_FREEZE

balanceobjectrequired

The account's balances

balance.availableSignedMoneyrequired

Available balance

balance.available.amountstringrequired

Decimal string with two places. Negative when the account is overdrawn

pattern ^-?[0-9]+\.[0-9]{2}$

balance.available.currencystringrequired

Always USD

One of USD

balance.currentSignedMoneyrequired

Current balance

balance.current.amountstringrequired

Decimal string with two places. Negative when the account is overdrawn

pattern ^-?[0-9]+\.[0-9]{2}$

balance.current.currencystringrequired

Always USD

One of USD

balance.spendableSignedMoneyrequired

Available balance minus reserved funds

balance.spendable.amountstringrequired

Decimal string with two places. Negative when the account is overdrawn

pattern ^-?[0-9]+\.[0-9]{2}$

balance.spendable.currencystringrequired

Always USD

One of USD

balance.as_ofstring

Time of the last balance change. Not returned yet

date-time

opened_atstring

Date the account was opened

date

Responses

  • 200OK
  • 401The token is missing, expired or unknown, or the client was revoked or switched off
  • 403The client lacks the scope, the owner's standing changed, or the API isn't enabled for this business
  • 404Nothing with that id in the bound business
  • 429Too many requests. Wait for Retry-After
  • 500Something failed unexpectedly on Novo's side. Not retryable: quote request_id to support
  • 503Something the answer depends on is unavailable. Retry after Retry-After
Request
curl "https://$NOVO_API_HOST/v1/accounts/acct_example_01" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Response · 200
{
  "id": "acct_example_01",
  "name": "xxxxxx1234",
  "type": "EXAMPLE_TYPE",
  "status": "EXAMPLE_STATUS",
  "account_number_last4": "1234",
  "routing_number_last4": "5678",
  "balance": {
    "available": {
      "amount": "1250.00",
      "currency": "USD"
    },
    "current": {
      "amount": "1300.00",
      "currency": "USD"
    },
    "spendable": {
      "amount": "1150.00",
      "currency": "USD"
    }
  },
  "opened_at": "2024-03-14"
}

Planned for accounts

  • Change account detailsNeeds your approval

Not available yet, and no endpoints are published for it. They’ll appear here once the contract defines them. Anything marked “needs your approval” waits for the account owner to approve it on their phone, every time. Tell us what you need first when you ask for a seat.