Skip to main content

Documentation Index

Fetch the complete documentation index at: https://www.finta.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

The Finta API gives you programmatic access to your company’s financial data: transactions, journal entries, categories, and financial reports. The API is read-only for now.

Get your API key

1

Go to API Keys

Sign in to Finta and go to Settings > API Keys.
2

Create a key

Click Create API key.
3

Copy the key

Copy the key immediately. It starts with finta_ and is only shown once. You cannot retrieve it later.
Each API key is tied to the user who created it and scoped to a single company. There is no company ID parameter; the key already knows which company it belongs to. If you manage multiple companies, create a separate key for each. If you are removed from a company, your key automatically loses access.

Base URL

All requests go to:
https://app.finta.com/api/v1

Environments

There is no sandbox or test environment. Every request runs against your real company data, and every response reflects live production data. The API is read-only, so calls cannot modify your books, but you should assume any data you fetch is live.

Authentication

Include your API key in the Authorization header as a Bearer token:
curl https://app.finta.com/api/v1/company \
  -H "Authorization: Bearer finta_your_key_here"

Key prefix convention

Every Finta credential is prefixed so it can be recognized at a glance in logs, error messages, and secret scanners. Today there is one credential type and its prefix is finta_. As additional credential or token types are introduced (for example restricted keys or webhook signing secrets), each will have its own distinct prefix that stacks on the brand prefix (e.g. finta_<type>_...). Treat the prefix as load-bearing: do not strip it before sending, and do not assume a missing or unknown prefix is still a Finta credential.

Content type

All responses are returned as JSON. The API is currently read-only, and all parameters are passed as query strings.

Pagination

List endpoints (/transactions, /journal_entries) use cursor-based pagination. Responses are wrapped in a list envelope:
{
  "object": "list",
  "url": "/api/v1/transactions",
  "has_more": true,
  "next_cursor": "txn_h8i9j0k1l2m3n4",
  "data": [...]
}
Pass limit (default 100, max 500) to control page size, and starting_after with the next_cursor value to fetch the next page. There is no offset or page-number parameter. The url field carries the canonical path of the collection and is useful for logging and generic pagination helpers. See Pagination for full parameters and an example fetch-all loop.

Monetary amounts

Every monetary field in the API follows two non-negotiable rules:
  1. Integer cents. Monetary values are integers, never floats and never formatted strings. \$499.00 is 49900. \$1,500.00 is 150000. Divide by 100 to get dollars.
  2. _cents suffix. The field name always ends in _cents (e.g. amount_cents, balance_cents, total_cents). If a field name does not end in _cents, it is not a monetary value.
There are no exceptions and no “summary” or “display” sibling field that returns the same amount in dollars or as a string. If you encounter a field that appears to hold a monetary value but does not end in _cents, or whose value is not an integer, treat it as a bug and report it. Sign conventions:
  • Income statement: revenue/income amounts are positive, expense amounts are negative. Summing every section’s total_cents yields net income without sign-flipping.
  • Balance sheet: balance_cents carries the natural-sign cumulative balance for that account at the report date.
  • Cash flow: amount_cents is positive for cash inflows and negative for cash outflows.

Errors

The Finta API uses conventional HTTP status codes and returns every error in a consistent JSON envelope. Branch on error.type and error.code to handle errors programmatically; treat error.message as human-readable only and do not parse it.
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_missing",
    "message": "Missing required parameter: start_date.",
    "param": "start_date",
    "doc_url": "https://docs.finta.com/api-reference/errors#parameter_missing"
  }
}
StatusDescription
200Success.
400Bad request. A required parameter is missing or invalid.
401Unauthorized. The bearer credential is missing, malformed, or unrecognized. The fix is to obtain a valid API key.
403Forbidden. The API key is valid, but the caller no longer has permission to access the resource (deactivated user, removed from company, closed company, or expired subscription). The fix is to regain access, not to get a new key.
404Not found. The endpoint path does not exist.
429Rate limited. Either the per-minute burst limit (retryable, with Retry-After) or the monthly per-company call limit (not retryable in the short term, no Retry-After). Branch on error.code to distinguish the two.
5xxServer error. Something went wrong on our end.
See Errors for the full list of error codes with resolution steps.

Making your first request

Verify your API key by pulling your company’s metadata:
curl https://app.finta.com/api/v1/company \
  -H "Authorization: Bearer finta_your_key_here"
{
  "id": "comp_a1b2c3d4e5f6g7",
  "object": "company",
  "name": "Acme Corp",
  "legal_name": "Acme Corp Inc.",
  "entity_type": "c_corp",
  "federal_ein_last4": "6789",
  "incorporation": {
    "date": "2022-10-21",
    "state": "DE"
  },
  "legal_address": {
    "line_1": "548 Market Street",
    "line_2": "PMB 39381",
    "city": "San Francisco",
    "state": "CA",
    "postal_code": "94104",
    "country": "US"
  },
  "created": 1688053841
}
The full schema, including all field types and enum values (e.g. the closed set of entity_type values), is in the Retrieve Company reference. The id is included so you can cross-reference the company from other API responses, and as the disambiguator for the planned multi-company-keys feature; the endpoint is a singleton, so there is no GET /v1/company/{id}. From here, try pulling your income statement, balance sheet, or journal entries. To understand how journal entries, transactions, and reports fit together, see Data Model.