FeelConnect▍
ProductsDocsPricingChangelog
Sign inGet API keys

Search documentation

Fuzzy search across every docs page and section

API reference/Transactions

Getting started

  • Overview
  • Quickstart
  • Authentication
  • Environments and sandbox
  • Link
  • Going live

API reference

  • Link tokens
  • Institutions
  • Items
  • Accounts
  • Transactions
  • Identity
  • Income
  • Assets
  • Investments
  • Liabilities
  • Recurring
  • Categories
  • AI products

Platform

  • Webhooks
  • Errors
  • Rate limits and quotas
  • SDKs
  • GraphQL
  • MCP and AI agents
  • Changelog
  1. Docs
  2. API reference
  3. Transactions
PreviousAccountsNextIdentity

On this page

  • Sync transactions
  • Cursor semantics
  • Get transactions by date range
  • The transaction object
FeelConnect▍

The developer-first financial data platform.

All systems operational

Products

Universal LinkData APIsAI enrichmentPricing

Developers

DocumentationAPI explorerDashboardGet API keys

Company

HomeChangelogfeels.moneySign in

Legal

PrivacyTermsSecurityData processing
© 2026 FeelConnect. All rights reserved./v1 · FC-Version 2026-07-01

API reference

Transactions

POST /v1/transactions/sync (cursor pagination: added, modified, removed, next_cursor) and /v1/transactions/get (date-range reads).

All endpoints are POST with a JSON body, authenticated with your secret key (Authentication). Errors use the standard envelope; money is in major units with an iso_currency_code; dates are YYYY-MM-DD strings.

Two access patterns: /transactions/sync is the recommended incremental feed (cursor-based, delivers adds, modifications, and removals), and /transactions/get is a date-range query for one-off reads.

Sync transactions

POST/v1/transactions/sync
Request body
access_tokenstringrequired
The item's access token.
cursorstring
Position from a previous sync's next_cursor. Omit on the very first call to receive full history.
countnumber
Page size, 1–500. Defaults to 100.
curl https://api.feelconnect.dev/v1/transactions/sync \
-H "Authorization: Bearer $FEELCONNECT_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"access_token":"fc_at_…","cursor":"eyJ2IjoxLCJvIjo1MDB9","count":500}'
Response
{
"added": [
{
"transaction_id": "txn_3fW8kQxT1mB6nY2cRj9z",
"account_id": "acct_9hK2mQxP7cW1nR4tYb8s",
"date": "2026-07-24",
"authorized_datetime": "2026-07-24T18:12:09.000Z",
"name": "GREENMART #204 SEATTLE WA",
"merchant_name": "GreenMart",
"amount": 84.31,
"iso_currency_code": "USD",
"pending": false,
"category": "Groceries",
"category_detailed": "Supermarket",
"payment_channel": "in_store"
}
],
"modified": [],
"removed": [
{
"transaction_id": "txn_0aB1cD2eF3gH4iJ5kL6m"
}
],
"next_cursor": "eyJ2IjoxLCJvIjo1MDB9",
"has_more": true
}

Cursor semantics

  • The cursor encodes a position in the item's change stream. Persist next_cursor after every applied page, per item.
  • The first call (no cursor) pages through the item's full history via added.
  • modified re-delivers transactions you already have — upsert by transaction_id. The common case is a pending transaction posting (amount, date, and name can all change).
  • removed lists ids to delete — typically a pending authorization that never posted.
  • Loop while has_more is true. When it is false you are caught up; keep the final cursor.
  • Re-sync from your stored cursor when a transactions.sync_updates_available webhook arrives. Syncing on a timer works too, but webhooks are cheaper.
  • Cursors do not expire, but they are item-scoped and opaque — never share them across items or parse them.
  • Sending an unknown or foreign cursor returns invalid_request with code invalid_cursor; recover by re-syncing from scratch (no cursor) into a fresh table.

Make ingestion idempotent

Apply a page and persist its cursor atomically where possible. If you crash after applying but before persisting, the next sync re-delivers the same page — make ingestion idempotent by upserting on transaction_id.

Get transactions by date range

POST/v1/transactions/get
Request body
access_tokenstringrequired
The item's access token.
start_datestringrequired
Inclusive YYYY-MM-DD.
end_datestringrequired
Inclusive YYYY-MM-DD.
options.countnumber
Page size, 1–500. Defaults to 100.
options.offsetnumber
Rows to skip, for offset pagination.
options.account_idsstring[]
Restrict to specific accounts.
curl https://api.feelconnect.dev/v1/transactions/get \
-H "Authorization: Bearer $FEELCONNECT_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"access_token":"fc_at_…","start_date":"2026-06-01","end_date":"2026-06-30","options":{"count":100,"offset":0}}'
Response
{
"transactions": [
{
"transaction_id": "txn_3fW8kQxT1mB6nY2cRj9z",
"account_id": "acct_9hK2mQxP7cW1nR4tYb8s",
"date": "2026-07-24",
"authorized_datetime": "2026-07-24T18:12:09.000Z",
"name": "GREENMART #204 SEATTLE WA",
"merchant_name": "GreenMart",
"amount": 84.31,
"iso_currency_code": "USD",
"pending": false,
"category": "Groceries",
"category_detailed": "Supermarket",
"payment_channel": "in_store"
}
],
"total_transactions": 214,
"accounts": [
{
"account_id": "acct_9hK2mQxP7cW1nR4tYb8s",
"name": "Everyday Checking",
"official_name": "Meridian Trust Everyday Checking",
"type": "depository",
"subtype": "checking",
"mask": "4821",
"balances": {
"current": 4327.18,
"available": 4212.03,
"limit": null,
"iso_currency_code": "USD"
},
"verification_status": "verified"
}
]
}

The transaction object

Fields
transaction_idstring
Stable id, txn_…. Survives pending → posted.
account_idstring
Owning account.
datestring
YYYY-MM-DD posted date (authorization date while pending).
authorized_datetimestring | null
ISO-8601 authorization time when known.
namestring
Raw statement descriptor.
merchant_namestring | null
Cleaned merchant name when resolvable.
amountnumber
Positive = money out, negative = money in. Major units.
iso_currency_codestring
ISO-4217 currency.
pendingboolean
True until the transaction posts.
categorystring | null
Primary category from the taxonomy.
category_detailedstring | null
Detailed category from the same taxonomy.
payment_channelenum
online | in_store | transfer | other