Base URL https://api.synci.io/api/v1
Token URL https://api.synci.io/oauth/token| Role | Who | Responsibility |
|---|---|---|
| Your application | You | Owns the end-user relationship, stores their consent to your terms, correlates Synci connections to your users |
| Synci | Us | Open banking layer: consent orchestration, data retrieval, normalization, storage, API |
| Provider (GoCardless) | Bank data provider | Hosts the bank consent session and supplies the raw bank data |
reference field (see below). One connection represents one authorization at one bank; a single end user can have several.client_credentials grant:{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJ0eXAiOiJKV1..."
}401 means the token is missing, expired, or revoked. Mint a fresh one and retry.403 provider_not_allowed_for_platform.| Field | Required | Description |
|---|---|---|
institution_id | yes | From the institutions endpoint |
integrator | no | Defaults to GOCARDLESS |
reference | no | Your correlation id for this connection, typically your own user id. Echoed back on the callback and filterable later. Max 255 characters. |
max_historical_days | no | How much transaction history to request (institution-capped) |
access_valid_for_days | no | Consent lifetime (institution-capped, typically up to 180 days) |
auth_url:{
"data": {
"auth_url": "https://api.synci.io/connect/aBcD...",
"financial_connection": {
"id": "945400000000001",
"status": "PENDING_AUTHORIZATION",
"reference": "your-user-123"
}
}
}auth_urlauth_url is valid for 60 minutes and single-flow: create a fresh connection if the user abandons and retries later.https://yourapp.example/banking/callback?status=SUCCESS&connection=945400000000001&reference=your-user-123| Parameter | Present | Description |
|---|---|---|
status | always | SUCCESS, or an error code (table below) |
connection | on success | The Synci connection id |
reference | when set at creation | Your correlation id, echoed back |
message | on most errors | Human-readable detail |
status=SUCCESS as the signal to fetch the connection's accounts and continue your onboarding. Any other value is terminal for that attempt: create a new connection to retry.status | Meaning |
|---|---|
SUCCESS | Connection authorized; accounts are syncing |
USER_CANCELLED_SESSION | The user abandoned the consent flow |
USER_SESSION_REJECTED | The user rejected the consent |
NO_ACCOUNTS_CONNECTED | Consent completed but no accounts were shared |
INSTITUTION_UNAVAILABLE | The bank is temporarily unavailable |
INSTITUTION_TIMEOUT_ERROR | The bank timed out during consent |
INSTITUTION_TECHNICAL_ERROR | The bank reported a technical failure |
GOCARDLESS_TECHNICAL_ERROR | The provider reported a technical failure |
CONSENT_LINK_REUSED / REQUISITION_LINK_REUSED | An old auth_url was opened again; create a fresh connection |
SSN_VERIFICATION_FAILED | The bank's identity verification failed |
SYNCI_ERROR / UNKNOWN_ERROR | Something failed on our side. Retry with a new connection, or contact us |
| Endpoint | Filter | Behavior |
|---|---|---|
GET /finance/connections | filter[reference]=a,b | Exact match, comma-separated for multiple |
GET /finance/connections | filter[search]=dnb | Partial, case-insensitive, over institution name + reference |
GET /finance/connections | filter[status]=CONNECTED | Lifecycle status |
GET /finance/transactions | filter[reference]=a,b | Transactions whose connection carries the reference |
GET /finance/transactions | filter[booking_date_after]=2026-01-01 | Date bounds (_before too) |
POST /v1/webhooks and subscribe to bank-data events (new transactions, connection health changes, and more; GET /v1/webhooks/events lists the catalogue). See the webhooks guide for signatures and retries.| State | Meaning |
|---|---|
PENDING_AUTHORIZATION | Created, waiting for the user to complete consent |
CONNECTED | Live and syncing |
DISABLED | Syncing stopped (by you, or after repeated failures) |
EXPIRED | The bank consent lapsed; reauthorize to resume |
REVOKED | Access was withdrawn at the bank/provider side |
ERROR | Consent failed or the connection broke (see status_message) |
access_valid_for_days on the connection). Before expiry, re-run consent with PUT /finance/connections/{id}/reauthorize: it returns a fresh auth_url for the same connection, and the same callback contract applies. Synci also emails the account holder ahead of expiring consents.PUT /finance/connections/{id}/disable; to remove it and its data, DELETE /finance/connections/{id}.X-RateLimit-Limit and X-RateLimit-Remaining; a 429 means back off until the window resets. Per-account sync triggers are additionally rate-limited per account.{ "message": "This provider is not available to platform clients.", "code": "provider_not_allowed_for_platform" }| Status | When |
|---|---|
401 | Missing/expired/revoked token; mint a new one |
403 + provider_not_allowed_for_platform | Institution outside the supported provider set |
403 | Your app has been suspended; contact us |
404 | Resource doesn't exist or isn't yours |
422 | Validation failed; the body lists per-field errors |
429 | Rate limit exceeded |