Docs

Upload a statement import

POST /api/v1/programmatic/imports

POST/api/v1/programmatic/imports
Importsv1imports:create

Uploads and parses a statement for an existing active asset account.

Parameters

NameInType Description
Idempotency-KeyheaderstringRequired Unique 16–128 character retry key. <Idempotency-Key>

Request body

multipart/form-data
{
  "account_id": "<uuid>",
  "file": "<file>"
}

Code examples

curl --request POST \
  --url 'https://api.tetri.app/api/v1/programmatic/imports' \
  --header 'Authorization: Bearer $TETRI_API_TOKEN' \
  --header 'Idempotency-Key: <Idempotency-Key>' \
  --form 'account_id=<uuid>' \
  --form 'file=@statement.csv'

Responses

201Request completed successfully.
{
  "data": {
    "type": "import_jobs",
    "id": "<uuid>",
    "attributes": {
      "bank_key": "revolut",
      "bank_name": "Revolut",
      "file_name": "statement.csv",
      "file_type": "csv",
      "total_rows": 150,
      "imported_count": 148,
      "skipped_count": 1,
      "skipped_existing_count": 1,
      "error_count": 1,
      "status": "completed",
      "error_message": "<string>",
      "account_id": "<uuid>",
      "preview": [
        {}
      ],
      "opening_balance_adjusted": [
        {
          "account_id": "<uuid>",
          "account_name": "Main checking",
          "currency_code": "USD",
          "reason": "pre_opening_import_rows",
          "target_balance": "1000.00",
          "balance_as_of_date": "2026-07-12",
          "tetri_balance_before": "950.00",
          "tetri_balance_after": "1000.00",
          "delta": "50.00",
          "old_opening_balance": "100.00",
          "new_opening_balance": "150.00",
          "old_opening_balance_date": "2026-07-12",
          "new_opening_balance_date": "2026-07-12"
        }
      ],
      "reverted_at": "2026-07-12T12:00:00Z",
      "created_at": "2026-07-12T12:00:00Z",
      "updated_at": "2026-07-12T12:00:00Z"
    }
  }
}
400The request payload or parameters are invalid.
401The access token is missing, invalid, expired, or revoked.
403The token does not have the required scope or workspace access.
409The idempotency key conflicts with an earlier request.
429The credential has exceeded its request limit.