Skip to content

Money you have spent, and how each one was recorded in the books.

2 endpoints, each with the fields it takes and the fields it gives back.

GET/transactions

Lists expenses and bank-feed transactions for one business, newest first.

  • Leave entityId out only when this key can reach exactly one business. When it can reach several, a call that omits it is refused; call GET /businesses for the ids.
  • dateFrom and dateTo match the transaction date and include both ends.
  • text matches the vendor's name only, not the memo or the account. % and _ are wildcards in it, because the match runs as a SQL ilike.
  • To read the next page, pass the previous response's nextCursor. A null there means you already have everything.

Needs the transactions:read permission. A Read only key has it.

Query parameters

entityId
Typestring
RequiredOptional
Details
  • a uuid
dateFrom
Typestring
RequiredOptional
Details
  • a date like 2026-09-20
dateTo
Typestring
RequiredOptional
Details
  • a date like 2026-09-20
vendorId
Typestring
RequiredOptional
Details
  • a uuid
accountId
Typestring
RequiredOptional
Details
  • a uuid
text
Typestring
RequiredOptional
Details
  • up to 200 characters
status
Typestring
RequiredOptional
Details
  • one of: pending, accepted, edited, uncategorized
minCents
Typestring
RequiredOptional
Details
  • digits only, whole cents
maxCents
Typestring
RequiredOptional
Details
  • digits only, whole cents
cursor
Typestring
RequiredOptional
Details
  • an opaque value from a previous response
limit
Typeinteger
RequiredOptional
Details
  • 1 to 100, default 50
Request
curl "https://www.numm.io/api/v1/transactions?entityId=0190a1b2-c3d4-7e5f-8a9b-0c1d2e3f1002&dateFrom=2026-01-01&dateTo=2026-01-31&limit=25" \
  -H "Authorization: Bearer nmo_live_REPLACE_WITH_YOUR_KEY"
Response 200
{
  "transactions": [
    {
      "id": "0190a1b2-c3d4-7e5f-9a9b-0c1d2e3f1006",
      "date": "2026-01-10",
      "amount": {
        "cents": "5000",
        "formatted": "$50.00",
        "currency": "USD"
      },
      "vendor": "Office Depot",
      "account": "Office Expense",
      "status": "accepted",
      "source": "email"
    }
  ],
  "nextCursor": null
}

Response fields

transactions
Typearray of object
PresentAlways
transactions[].id
Typestring
PresentAlways
Details
  • a uuid
transactions[].date
Typestring
PresentAlways
Details
  • a date like 2026-09-20
transactions[].amount
Typemoney
PresentAlways
Details
  • an object: cents (whole cents as a digit string, in the currency beside it), formatted (a display string, not something to parse), currency (a three-letter code)
transactions[].vendor
Typestring or null
PresentAlways
transactions[].account
Typestring or null
PresentAlways
transactions[].status
Typestring
PresentAlways
Details
  • one of: pending, accepted, edited, uncategorized
transactions[].source
Typestring
PresentAlways
Details
  • one of: manual, csv, email, ios, reconciliation, financial_connections
nextCursor
Typestring or null
PresentAlways
Details
  • an opaque value from a previous response

Errors

entity_not_allowed
Status403
MeaningYour key is limited to certain businesses, and this is not one of them.
not_found
Status404
MeaningThere is no such record, or none your key can reach.

Every endpoint can also return:

invalid_key
Status401
MeaningYour key is missing, malformed, revoked, or expired.
insufficient_scope
Status403
MeaningYour key does not carry the scope this endpoint needs.
rate_limited
Status429
MeaningYou've made too many requests for this key. The retry-after header says how long to wait.
validation_failed
Status422
MeaningSomething in the path, the query, or the body did not pass validation.
internal_error
Status500
MeaningSomething went wrong on our side. Try again.

GET/transactions/{id}

Returns full detail for one transaction, including how it was recorded in the books.

Needs the transactions:read permission. A Read only key has it.

Path parameters

id
Typestring
RequiredRequired
Details
  • a uuid
Request
curl "https://www.numm.io/api/v1/transactions/0190a1b2-c3d4-7e5f-9a9b-0c1d2e3f1006" \
  -H "Authorization: Bearer nmo_live_REPLACE_WITH_YOUR_KEY"
Response 200
{
  "id": "0190a1b2-c3d4-7e5f-9a9b-0c1d2e3f1006",
  "date": "2026-01-10",
  "amount": {
    "cents": "5000",
    "formatted": "$50.00",
    "currency": "USD"
  },
  "description": "Office supplies",
  "vendor": "Office Depot",
  "account": "Office Expense",
  "status": "accepted",
  "source": "email",
  "rationale": "Matches prior Office Depot purchases categorized as Office Expense.",
  "lines": [
    {
      "account": "Office Expense",
      "debit": {
        "cents": "5000",
        "formatted": "$50.00",
        "currency": "USD"
      },
      "credit": null
    },
    {
      "account": "Accounts Payable",
      "debit": null,
      "credit": {
        "cents": "5000",
        "formatted": "$50.00",
        "currency": "USD"
      }
    }
  ]
}

Response fields

id
Typestring
PresentAlways
Details
  • a uuid
date
Typestring
PresentAlways
Details
  • a date like 2026-09-20
amount
Typemoney
PresentAlways
Details
  • an object: cents (whole cents as a digit string, in the currency beside it), formatted (a display string, not something to parse), currency (a three-letter code)
description
Typestring or null
PresentAlways
vendor
Typestring or null
PresentAlways
account
Typestring or null
PresentAlways
status
Typestring
PresentAlways
Details
  • one of: pending, accepted, edited, uncategorized
source
Typestring
PresentAlways
Details
  • one of: manual, csv, email, ios, reconciliation, financial_connections
rationale
Typestring or null
PresentAlways
lines
Typearray of object
PresentAlways
lines[].account
Typestring
PresentAlways
lines[].debit
Typemoney or null
PresentAlways
Details
  • an object: cents (whole cents as a digit string, in the currency beside it), formatted (a display string, not something to parse), currency (a three-letter code)
lines[].credit
Typemoney or null
PresentAlways
Details
  • an object: cents (whole cents as a digit string, in the currency beside it), formatted (a display string, not something to parse), currency (a three-letter code)

Errors

not_found
Status404
MeaningThere is no such record, or none your key can reach.

Every endpoint can also return:

invalid_key
Status401
MeaningYour key is missing, malformed, revoked, or expired.
insufficient_scope
Status403
MeaningYour key does not carry the scope this endpoint needs.
rate_limited
Status429
MeaningYou've made too many requests for this key. The retry-after header says how long to wait.
validation_failed
Status422
MeaningSomething in the path, the query, or the body did not pass validation.
internal_error
Status500
MeaningSomething went wrong on our side. Try again.
Transactions — Nummio API