Developers

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.

OAuth 2.0 + PKCEGranular scopesMCP for AI assistants
Fetch transactions
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.

Connect a bank
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.