- Base URL:
https://api.finta.io/v2 - Format: JSON
- Authentication: Bearer token (API key)
Manual accounts
Most accounts in Finta sync automatically from a connected bank. Manual accounts are ones you maintain yourself — cash, a property, a private loan, or a credit card you’d rather track by hand.POST /accountscreates a manual account. SetcurrentBalanceto the amount owed for liabilities, and pass aliabilityobject (typeofcredit,student, ormortgage) to record debt details.PATCH /accounts/{accountId}updates the name, type, currency, balance, or liability data. Updating the balance records a balance-history snapshot for that day.DELETE /accounts/{accountId}closes the account (soft delete): it moves toclosedstatus but keeps its transactions and balance history.
400 on a write. Manual account changes automatically sync to any connected destinations (Airtable, Notion, Google Sheets, etc.) the account is linked to.
If your API key (or OAuth client) is scoped to a specific set of accounts, an account it creates is automatically added to that allowlist, so the same credential can read and manage it right away.
Requirements
| Requirement | Details |
|---|---|
| Active subscription | API access is available on Standard and Pro plans. |
| Storage Mode | The v2 API reads from data Finta has already synced and stored. Creating an API key from the dashboard enables Storage Mode automatically. |
| API key | Generate one from API settings. |
Rate limits
| Plan | Limit |
|---|---|
| Standard | 200 requests / minute |
| Pro | Higher limits (contact us) |
429 RATE_LIMITED. The response may include a retryAfter field (seconds).
Errors
Most errors use a structured envelope:| Code | HTTP | When |
|---|---|---|
BAD_REQUEST | 400 | Invalid parameters or body |
STORAGE_MODE_REQUIRED | 403 | Storage mode is off |
SUBSCRIPTION_REQUIRED | 403 | Subscription inactive or canceled |
NOT_FOUND | 404 | Resource missing or not owned by the caller |
RATE_LIMITED | 429 | Rate limit exceeded |
PROVIDER_UNAVAILABLE | 502 | Upstream provider error |
INTERNAL_ERROR | 500 | Unexpected server error |
401 responses use a plain string rather than the envelope: