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

Transactions

Posted and pending transactions, ledger and card, newest first.

List posted transactions

GET/v1/transactions

Ledger and card transactions, ordered by date, newest first, then a unique tiebreaker. Category ids can change during the closed beta, so don't store them as keys.

Authentication

Bearer token whose client has the scope transactions:read

Parameters

cursorquery · string

The next_cursor from the previous page. Opaque: don't build or edit it

limitquery · integer

Rows per page

min 1 · max 100 · default 50

fromquery · string

Earliest date, inclusive

date

toquery · string

Latest date

date

directionquery · string

Only credits or only debits

One of creditdebit

mediumquery · string

Only one payment medium, such as ach, card, check or wire

card_idquery · string

Only transactions on this card

category_idquery · string

Only transactions in this category

qquery · string

Search text: letters, digits, spaces and periods only. Anything else is a 400

max 30 characters · pattern ^[a-zA-Z0-9. ]*$

Response · a list of Transaction

dataarray of Transaction

The page of results

next_cursorstring or null

Pass it as cursor to get the next page. null on the last page

Each item in data:

idstringrequired

The transaction's id

datestringrequired

Transaction date

date

amountMoneyrequired

Amount moved

amount.amountstringrequired

Decimal string with two places, never negative. The direction field says which way it moved

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

amount.currencystringrequired

Always USD

One of USD

directionstringrequired

Money in (credit) or out (debit)

One of creditdebit

mediumstringrequired

Payment medium, such as ach, card, check or wire

statusstringrequired

Transaction status

descriptionstringrequireduntrusted text

Description from the merchant, payer or bank

counterpartyobject

Who was on the other side

counterparty.namestringuntrusted text

Merchant or payee name

categoryCategoryRef

Category of the transaction

category.idstring

The category's id. May change during the closed beta

category.namestringuntrusted text

The category's name. Untrusted when the owner created the category

notesstringuntrusted text

Note added in Novo

reference_numberstring

Reference number

check_numberstring

Check number, for checks

cardobject

The card used, for card transactions

card.idstring

The card's id

card.last_fourstring

Last 4 digits of the card

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/transactions" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Response · 200
{
  "data": [
    {
      "id": "txn_example_01",
      "date": "2026-10-01",
      "amount": {
        "amount": "84.20",
        "currency": "USD"
      },
      "direction": "debit",
      "medium": "card",
      "status": "EXAMPLE_STATUS",
      "description": "EXAMPLE MERCHANT",
      "counterparty": {
        "name": "Example Merchant"
      },
      "category": {
        "id": "cat_example_01",
        "name": "Supplies"
      },
      "card": {
        "id": "00000000-0000-4000-8000-000000000001",
        "last_four": "4321"
      }
    }
  ],
  "next_cursor": null
}

List pending transactions

GET/v1/transactions/pending

Transactions that haven't posted yet. Pages hold at most 100 rows. The counterparty is a name only. If part of the list can't be loaded, you get a 503 with Retry-After, never an incomplete page. A page is a snapshot; a walk through many pages is not.

Authentication

Bearer token whose client has the scope transactions:read

Parameters

cursorquery · string

The next_cursor from the previous page. Opaque: don't build or edit it

limitquery · integer

Rows per page

min 1 · max 100 · default 50

Response · a list of PendingTransaction

dataarray of PendingTransaction

The page of results

next_cursorstring or null

Pass it as cursor to get the next page. null on the last page

Each item in data:

idstringrequired

The pending transaction's id

amountMoneyrequired

Amount

amount.amountstringrequired

Decimal string with two places, never negative. The direction field says which way it moved

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

amount.currencystringrequired

Always USD

One of USD

directionstringrequired

Money in (credit) or out (debit)

One of creditdebit

mediumstringrequired

Payment medium

descriptionstringrequireduntrusted text

Description from the merchant, payer or bank

counterpartyobject

Who is on the other side

counterparty.namestringuntrusted text

Merchant or payee name

expected_onstring

Date it's expected to arrive

date

check_numberstring

Check number, for checks

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/transactions/pending" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Response · 200
{
  "data": [
    {
      "id": "ptx_example_01",
      "amount": {
        "amount": "400.00",
        "currency": "USD"
      },
      "direction": "credit",
      "medium": "ach",
      "description": "EXAMPLE PAYER PAYMENT",
      "counterparty": {
        "name": "Example Payer"
      },
      "expected_on": "2026-10-03"
    }
  ],
  "next_cursor": null
}

Get one posted transaction

GET/v1/transactions/{transaction_id}

The same transaction object as in the list.

Authentication

Bearer token whose client has the scope transactions:read

Parameters

transaction_idpath · stringrequired

The transaction's id

Response · Transaction

idstringrequired

The transaction's id

datestringrequired

Transaction date

date

amountMoneyrequired

Amount moved

amount.amountstringrequired

Decimal string with two places, never negative. The direction field says which way it moved

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

amount.currencystringrequired

Always USD

One of USD

directionstringrequired

Money in (credit) or out (debit)

One of creditdebit

mediumstringrequired

Payment medium, such as ach, card, check or wire

statusstringrequired

Transaction status

descriptionstringrequireduntrusted text

Description from the merchant, payer or bank

counterpartyobject

Who was on the other side

counterparty.namestringuntrusted text

Merchant or payee name

categoryCategoryRef

Category of the transaction

category.idstring

The category's id. May change during the closed beta

category.namestringuntrusted text

The category's name. Untrusted when the owner created the category

notesstringuntrusted text

Note added in Novo

reference_numberstring

Reference number

check_numberstring

Check number, for checks

cardobject

The card used, for card transactions

card.idstring

The card's id

card.last_fourstring

Last 4 digits of the card

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/transactions/txn_example_01" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Response · 200
{
  "id": "txn_example_01",
  "date": "2026-10-01",
  "amount": {
    "amount": "84.20",
    "currency": "USD"
  },
  "direction": "debit",
  "medium": "card",
  "status": "EXAMPLE_STATUS",
  "description": "EXAMPLE MERCHANT",
  "counterparty": {
    "name": "Example Merchant"
  },
  "category": {
    "id": "cat_example_01",
    "name": "Supplies"
  },
  "card": {
    "id": "00000000-0000-4000-8000-000000000001",
    "last_four": "4321"
  }
}

Planned for transactions

  • Add notes and categories

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.