Docs

Create a transaction

POST /api/v1/programmatic/transactions

POST/api/v1/programmatic/transactions
Transactionsv1transactions:create

Creates one withdrawal, deposit, or transfer. The request is replay-safe per PAT and idempotency key.

Parameters

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

Request body

application/json
{
  "type": "withdrawal",
  "date": "2026-07-12T12:00:00.000Z",
  "amount": "12.50",
  "description": "Lunch",
  "source_account_id": "<asset-account-id>"
}

Code examples

curl --request POST \
  --url 'https://api.tetri.app/api/v1/programmatic/transactions' \
  --header 'Authorization: Bearer $TETRI_API_TOKEN' \
  --header 'Idempotency-Key: <Idempotency-Key>' \
  --header 'Content-Type: application/json' \
  --data '{ "type": "withdrawal", "date": "2026-07-12T12:00:00.000Z", "amount": "12.50", "description": "Lunch", "source_account_id": "<asset-account-id>" }'

Responses

201Request completed successfully.
{
  "data": {
    "type": "transactions",
    "id": "<uuid>",
    "attributes": {
      "group_title": "<string>",
      "execution_status": "scheduled",
      "executed_at": "2026-07-12T12:00:00Z",
      "archived_at": "2026-07-12T12:00:00Z",
      "is_archived": false,
      "transactions": [
        {
          "transaction_journal_id": "<uuid>",
          "type": "withdrawal",
          "transfer_kind": "internal_fx",
          "date": "2026-07-12T12:00:00Z",
          "occurred_at": "2026-07-12T12:00:00Z",
          "business_date": "2026-07-12",
          "timezone": "Europe/Tbilisi",
          "description": "Grocery shopping",
          "amount": "42.50",
          "foreign_amount": "45.00",
          "foreign_currency_code": "EUR",
          "foreign_currency_symbol": "€",
          "currency_code": "USD",
          "currency_symbol": "$",
          "currency_decimal_places": 2,
          "source_id": "<uuid>",
          "source_name": "<string>",
          "source_type": "asset",
          "destination_id": "<uuid>",
          "destination_name": "<string>",
          "destination_type": "expense",
          "category_id": "<uuid>",
          "category_name": "<string>",
          "budget_id": "<uuid>",
          "budget_name": "<string>",
          "tags": [
            "<string>"
          ],
          "notes": "<string>",
          "last_reconciled_at": "2026-07-12",
          "reconciled": false,
          "status": "settled",
          "estimated_rate": "1.05",
          "final_rate": "1.058",
          "settled_at": "2026-07-12T12:00:00Z",
          "splits": [
            {
              "id": "<uuid>",
              "amount": "42.50",
              "category_id": "<uuid>",
              "note": "<string>",
              "tag_ids": [
                "<uuid>"
              ]
            }
          ],
          "has_splits": false,
          "remainder": "0.00",
          "fx_delta_home": "1.23",
          "effective_rate_journal": "0.9200"
        }
      ]
    }
  }
}
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.