Build on Synci.
A REST API for financial data: accounts, balances, transactions, and holdings across banks, brokerages, and crypto exchanges. Personal tokens for scripts, OAuth for apps, MCP for AI assistants.
GET /api/v1/finance/transactions
{
"id": 84712,
"amount": "-54.90",
"currency": "NOK",
"booking_date": "2026-07-17",
"mapped_fields": {
"date": "2026-07-17",
"payee": "Starbucks",
"description": "CARD 17.07 STARBUCKS OSLO"
},
"enriched": {
"counterparty": {
"name": "Starbucks",
"logo_url": "https://…/starbucks.png",
"website": "starbucks.com"
},
"category_general": "Dining"
}
}
API
Everything the dashboard does, you can do too.
Data
Accounts, balances, transactions, holdings
Every resource in your Synci account is a REST endpoint, with filtering, sorting, and pagination built in. Enriched merchant names, logos, and categories come along for the ride.
Webhooks
Know the moment data lands
Subscribe to transaction, balance, and account events. Every delivery is signed with HMAC-SHA256 so you can verify it came from us, and retries carry a stable event id for deduplication.
Use cases
What you can build.
Budgeting and finance apps
Build the budgeting app you wish existed. Users connect their banks through OAuth, and clean, enriched transactions flow straight into your product.
Personal dashboards
Pull transactions and balances into Grafana, Notion, or a dashboard you built yourself.
Scripts and automations
Script against your accounts and holdings, or let webhook events trigger the rest of your toolchain.
AI agents and assistants
Connect the MCP server to Claude or ChatGPT, or call the API directly from your agent framework.
Building something with Synci? Share it on r/Synci or the feedback board. Early projects get direct support from the team.
Getting started
From connection to data in six calls.
Connect an institution, trigger a sync, and read everything back. Every step below is one real request. The full reference, with in-browser testing, lives in the docs.
POST /api/v1/finance/connections
{
"institution_id": 123
}
# 201 Created
{
"data": {
"auth_url": "https://ob.bank.example/authorize?…",
"financial_connection": {
"id": 456,
"status": "PENDING_AUTHORIZATION"
}
}
}
FAQ
Questions, answered.
Use a personal access token when you are accessing your own account: scripts, dashboards, server-to-server integrations. Register an OAuth app when other people will connect their Synci accounts to your product.
OAuth access tokens are valid for one hour. Refresh tokens are valid for 30 days and rotate on every use. Personal access tokens are managed from your dashboard, where you can revoke them at any time.
Everything the dashboard does: financial connections, accounts, balances, transactions, holdings, transfer links, rules, destinations, and webhooks. Granular scopes like accounts:read and transactions:write let you request only what you need.
Yes. Limits are documented in the API docs, and every response includes headers telling you where you stand.
New OAuth apps start in testing mode, where you can iterate freely. When you are ready for real users, submit the app for review. Once approved, any Synci user can connect to your app, and requesting minimal scopes improves your chances.
Start with the docs and the help center. For anything else, ask on r/Synci or the feedback board.