1. Guides
Synci API
  • Overview
  • Guides
    • Authentication
    • Building OAuth apps
    • Webhooks
    • Pagination, filtering, and sorting
    • Errors
    • Rate limits
    • MCP: Connect AI assistants
    • Partner integration guide
    • Synci as a SimpleFIN provider
  • API Reference
    • Finance
      • Connections
        • List all financial connections
        • Create a new financial connection
        • Get financial connection
        • Delete financial connection
        • Disable financial connection
        • Reconfirm the consent of a financial connection
      • Accounts
        • List all financial accounts
        • Get financial account
        • Update financial account
        • Delete financial account
        • Sync financial account data
        • Reset financial account config to defaults
        • List all account balance entries
        • Get account balance entry
        • List account holdings
        • Get account holding
      • Transactions
        • List all transactions
        • Create a new transaction
        • Get transaction
        • Update transaction
        • Delete transaction
        • Bulk delete transactions
      • Institutions
        • Get supported countries
        • List all supported institutions
        • Get supported institution
    • Destinations
      • YNAB Connections
        • YNAB Budgets
          • YNAB Budget Accounts
            • List all YNAB budget accounts
            • Get YNAB budget account
            • Delete YNAB budget account
          • List all YNAB budgets
          • Get YNAB budget
          • Delete YNAB budget
          • Update YNAB budget
        • List all YNAB connections
        • Create new YNAB connection
        • Get YNAB connection
        • Delete YNAB connection
        • Update YNAB connection
        • Refresh YNAB connection
      • Lunch Money Connections
        • Lunch Money Accounts
          • List all Lunch Money accounts
          • Get Lunch Money account
          • Delete Lunch Money account
        • List all Lunch Money connections
        • Create new Lunch Money connection
        • Get Lunch Money connection
        • Delete Lunch Money connection
        • Update Lunch Money connection
        • Refresh Lunch Money connection
      • Google Sheets Connections
        • Sheets
          • List destination spreadsheets for a connection
          • Register a destination spreadsheet
          • Get a destination spreadsheet
          • Update a destination spreadsheet
          • Delete a destination spreadsheet
          • List the worksheets (tabs) of a spreadsheet
          • Create a new worksheet (tab) in a spreadsheet
        • List all Google Sheets connections
        • Create new Google Sheets connection
        • Get Google Sheets connection
        • Delete Google Sheets connection
        • Update Google Sheets connection
        • Refresh Google Sheets connection
      • SimpleFIN Connections
        • List all SimpleFIN connections
        • Create new SimpleFIN connection
        • Get SimpleFIN connection
        • Update SimpleFIN connection
        • Delete SimpleFIN connection
        • Regenerate setup token
        • Revoke access credentials
        • List accounts observed syncing
    • Transfer Links
      • List all transfer links
      • Create a new transfer link
      • Get transfer link
      • Update transfer link
      • Delete transfer link
      • Retry transfers for all transfer links
      • Retry transfers for a specific transfer link
    • Transfer Logs
      • List all transfer logs
      • Get transfer log
      • Undo a transfer
      • Undo multiple transfers
    • Rules
      • Create a new rule
      • List all rules
      • Get rule
      • Rule field catalog
      • Update rule
      • Delete rule
      • Attach rule to transfer link
      • Detach rule from transfer link
      • Reorder rules for a transfer link
      • Attach rule to a financial account
      • Detach rule from financial account
      • Reorder rules for a financial account
      • Preview a rule against transactions (dry-run)
    • Rule Logs
      • List all rule logs
      • Get rule log
      • Undo multiple rule actions
      • Undo a rule action
    • Webhooks
      • List all webhook events
      • List all webhook endpoints
      • Create new webhook endpoint
      • Get webhook endpoint
      • Update webhook endpoint
      • Delete webhook endpoint
      • Test webhook endpoint
      • Rotate webhook secret
  • Schemas
    • AccountHoldingResource
    • BalanceTypeEnum
    • BulkDeleteTransactionsRequest
    • BulkUndoRuleLogsRequest
    • CreateFinancialConnectionRequest
    • BulkUndoTransferLogsRequest
    • CreateGoogleSheetTabRequest
    • CreateGoogleSheetsConnectionRequest
    • CreateRuleRequest
    • CreateLunchMoneyConnectionRequest
    • CreateTransferLinkRequest
    • CreateTransactionRequest
    • CreateWebhookEndpointRequest
    • CreateYnabConnectionRequest
    • DestinationTypeEnum
    • FinancialAccountBalanceResource
    • EnrichmentProviderEnum
    • FinancialAccountResource
    • FinancialAccount
    • FinancialConnectionResource
    • GoogleSheetResource
    • GoogleSheetsConnectionResource
    • HealthResource
    • HealthStatusEnum
    • InstitutionConfigMappedDateEnum
    • InstitutionConfigResource
    • InstitutionConfigMappedTextEnum
    • IntegratorEnum
    • InstitutionResource
    • PreviewRuleRequest
    • LunchMoneyAccountResource
    • LunchMoneyConnectionResource
    • ReauthorizeFinancialConnectionRequest
    • RetryTransfersAllLinksRequest
    • RuleActionResource
    • RetryTransfersRequest
    • RuleActionTypeEnum
    • RuleConditionResource
    • RuleLogResource
    • RuleResource
    • RuleOperatorEnum
    • RuleTypeEnum
    • SimpleFinAccountResource
    • RuleScopeEnum
    • SimpleFinAppEnum
    • SimpleFinConnectionResource
    • StoreGoogleSheetRequest
    • StoreSimpleFinConnectionRequest
    • SyncFinancialAccountRequest
    • TestWebhookRequest
    • TransactionTypeEnum
    • TransactionResource
    • TransferLink
    • TransferLinkResource
    • TransferLinkSyncModeEnum
    • TransferLogResource
    • TransferLogStatusEnum
    • UpdateFinancialAccountRequest
    • UpdateGoogleSheetRequest
    • UpdateGoogleSheetsConnectionRequest
    • UpdateLunchMoneyConnectionRequest
    • UpdateRuleRequest
    • UpdateSimpleFinConnectionRequest
    • UpdateTransactionRequest
    • UpdateWebhookEndpointRequest
    • UpdateTransferLinkRequest
    • UpdateYnabBudgetRequest
    • UpdateYnabConnectionRequest
    • WebhookEndpointPayloadVersion
    • WebhookEventResource
    • WebhookEndpointResource
    • WebhookTypeEnum
    • WebhookEventTypeEnum
    • YnabBudgetAccountResource
    • YnabBudgetAccountTypeEnum
    • YnabBudgetResource
    • YnabConnectionResource
  1. Guides

Synci as a SimpleFIN provider

Synci is a SimpleFIN data source. It implements the SimpleFIN protocol, so any SimpleFIN-compatible app can read a user's financial data (accounts, balances, and transactions) from Synci directly. The connection is read-only and scoped to the accounts the user chooses.

If you build or run a finance app#

If your app already speaks SimpleFIN, it already works with Synci. There is nothing Synci-specific to build: no partnership, no API keys to request, no Synci SDK. A user creates a Synci destination, copies a standard setup token, and pastes it into the same SimpleFIN screen your app already has. From your side it is an ordinary SimpleFIN source.
If SimpleFIN support is on your roadmap, implementing the spec is all it takes: Synci then becomes a data source your users can pick, for free, the day you ship it.
What Synci brings to your users:
Bank coverage beyond North America. European banks (via GoCardless) and New Zealand banks (via Akahu), so users in those regions can connect the accounts they actually have.
More than checking and savings. Investment/brokerage and crypto-exchange accounts are exposed as SimpleFIN accounts too.
Data users can shape. Transactions reflect the user's Synci bank-account rules (payee cleanup, renaming), so what your app imports is already tidy.
Actual Budget is the officially supported and tested consumer (see the Actual Budget setup guide). Other SimpleFIN-compatible apps (Buckets, Sparky Budget, ZapYeti, EnvelopeBudget, and others) work through the same flow via the generic SimpleFIN destination; see Apps powered by SimpleFIN.
The rest of this page covers the Synci-specific details a consumer needs. For the protocol itself (the request/response format), see the SimpleFIN spec.

Getting a setup token#

1
Open the destination in Synci
Go to Destinations then SimpleFIN (or an app-specific page such as Actual Budget). The page is presentation only; the token it produces works with any SimpleFIN consumer.
2
Choose which accounts to expose
Share all of them, or a specific selection.
3
Copy the setup token
Copy the one-time setup token.
The setup token is a Base64-encoded claim URL. It can be claimed once, expires after about 7 days if unused, and can be regenerated from the destination's page (regenerating invalidates the previous token). Treat it as a secret.

Claiming the token#

The token exchange follows the standard SimpleFIN flow:
1
Decode the setup token
Base64-decode the setup token to get a claim URL.
2
Claim it once
POST the claim URL once. On success you receive an access URL as text/plain:
https://{username}:{password}@api.synci.io/simplefin
The credentials are embedded in the URL. Store the access URL; the setup token is now spent.
3
Request accounts from then on
Request {access URL}/accounts using HTTP Basic auth built from the embedded username:password.
The host and path come from the token and the access URL, so a consumer never hardcodes them. A claim that has already been used, expired, or been revoked returns a 403 whose body begins with Forbidden.
Access credentials are revocable at any time from the destination's page in Synci. Once revoked, requests return 403.

Fetching accounts#

GET {access URL}/accounts returns a SimpleFIN Account Set. It is called in two shapes:
Balances only (account discovery, no transactions):
GET /accounts?balances-only=1
Returns every exposed account with its balances and an empty transactions array.
With transactions:
GET /accounts?start-date={epoch}&end-date={epoch}&pending=1&account={id}&account={id}
start-date / end-date are Unix timestamps in seconds. end-date is exclusive.
pending=1 includes not-yet-posted transactions.
Repeat account={id} to limit the response to specific accounts. Ids not exposed by this connection are ignored.
If start-date is omitted, the response is capped to roughly the last 90 days.
There is no pagination; each call returns a single JSON document.

Response shape#

{
    "errors": [],
    "accounts": [
        {
            "org": {
                "domain": "inst-916407839591829.synci.io",
                "sfin-url": "https://api.synci.io/simplefin",
                "name": "DNB"
            },
            "id": "916407839591829",
            "name": "DNB Brukskonto",
            "currency": "NOK",
            "balance": "12345.67",
            "available-balance": "12000.00",
            "balance-date": 1767225600,
            "transactions": [
                {
                    "id": "935986745228429",
                    "posted": 1767139200,
                    "transacted_at": 1767052800,
                    "amount": "-129.00",
                    "description": "REMA 1000 OSLO",
                    "payee": "REMA 1000",
                    "pending": false
                }
            ]
        }
    ]
}
Synci-specific guarantees, beyond the base spec:
Amounts (balance, available-balance, transaction amount) are signed decimal strings with exactly two decimal places. A negative amount is an outflow.
Timestamps (posted, transacted_at, balance-date) are Unix seconds at noon UTC of the relevant calendar date.
Ids (account id, transaction id) are stable across requests, so consumers can safely deduplicate on them.
payee is always present and non-empty.
A pending transaction always carries a transacted_at.
org identifies the underlying institution, not Synci: org.name is the institution's name (for example "DNB") and org.domain is stable and unique per institution. Consumers that group accounts into "banks" by org.domain therefore get one bank per institution, and multiple accounts from the same institution are grouped together.
available-balance is included only when Synci has one for the account.

Limits and behavior#

History: roughly 90 days when no start-date is given.
Rate limit: approximately 60 requests per hour per access credential.
Freshness: responses are served from Synci's most recent provider sync, not live from the bank, so balances in particular can lag behind. There is no real-time fetch on request.
Only bank-style account data is exposed (accounts, balances, transactions). No other part of the user's Synci account is reachable through these credentials.

Versioning and stability#

Synci advertises SimpleFIN version 1.0, which the protocol's info endpoint reports as {"versions":["1.0"]}. An issued access URL is permanent for the life of the credential. Any breaking change would ship as a new protocol version and new credentials rather than altering an existing access URL, so a working integration keeps working.

Security#

All requests are over HTTPS.
Credentials are read-only and scoped to exactly the accounts the destination exposes. If the user shared all accounts, that scope includes accounts they connect to Synci later.
Setup tokens are single-use with an expiry; access credentials are revocable at any time from Synci.
Treat both the setup token and the access URL as secrets.
Modified at 2026-07-25 13:38:59
Previous
Partner integration guide
Next
List all financial connections
Built with