Search documentation
Fuzzy search across every docs page and section
API referenceTransactions
Fuzzy search across every docs page and section
API referenceTransactions
API reference
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.
/v1/transactions/syncaccess_tokenstringrequiredcursorstringnext_cursor. Omit on the very first call to receive full history.countnumbercurl 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}'
{"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}
next_cursor after every applied page, per item.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.has_more is true. When it is false you are caught up; keep the final cursor.transactions.sync_updates_available webhook arrives. Syncing on a timer works too, but webhooks are cheaper.invalid_request with code invalid_cursor; recover by re-syncing from scratch (no cursor) into a fresh table./v1/transactions/getaccess_tokenstringrequiredstart_datestringrequiredYYYY-MM-DD.end_datestringrequiredYYYY-MM-DD.options.countnumberoptions.offsetnumberoptions.account_idsstring[]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}}'
{"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"}]}
transaction_idstringtxn_…. Survives pending → posted.account_idstringdatestringYYYY-MM-DD posted date (authorization date while pending).authorized_datetimestring | nullnamestringmerchant_namestring | nullamountnumberiso_currency_codestringpendingbooleancategorystring | nullcategory_detailedstring | nullpayment_channelenumonline | in_store | transfer | other