Create a transaction template
POST /api/v1/programmatic/transaction-templates
/api/v1/programmatic/transaction-templatesCreates a user-saved transaction template in the PAT workspace. At least one transaction default besides direction and name is required.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | stringRequired | Unique 16–128 character retry key. Reuse it only when retrying the identical template. template_20260722_01J2Y8M4R1 |
Request body
application/jsonReusable transaction defaults. Wallet references are optional; their role depends on the selected direction. Supply at least one wallet, category, amount, description, or notes value.
{
"direction": "expense",
"name": "Lunch",
"source_wallet_id": "<asset-wallet-id>",
"amount_minor": "1250",
"currency_code": "USD",
"description": "Weekday lunch"
}Code examples
curl --request POST \
--url 'https://api.tetri.app/api/v1/programmatic/transaction-templates' \
--header 'Authorization: Bearer $TETRI_API_TOKEN' \
--header 'Idempotency-Key: template_20260722_01J2Y8M4R1' \
--header 'Content-Type: application/json' \
--data '{ "direction": "expense", "name": "Lunch", "source_wallet_id": "<asset-wallet-id>", "amount_minor": "1250", "currency_code": "USD", "description": "Weekday lunch" }'Responses
{
"data": {
"id": "<uuid>",
"source": "user_saved",
"name": "<string>",
"direction": "income",
"fields": {
"sourceWallet": {},
"targetWallet": {},
"category": {},
"amountMinor": "1250",
"currencyCode": "USD",
"description": "<string>",
"notes": "<string>",
"note": "<string>",
"tags": [
"<string>"
],
"recurrencePreset": "daily"
},
"usageCount": 0,
"lastUsedAt": "2026-07-12T12:00:00Z"
},
"side_effects": [
{
"domain": "wallets",
"id": "<string>",
"action": "upsert",
"data": {}
}
]
}{
"statusCode": 400,
"code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
"message": "<string>",
"error": "Bad Request",
"request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}{
"statusCode": 400,
"code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
"message": "<string>",
"error": "Bad Request",
"request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}{
"statusCode": 400,
"code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
"message": "<string>",
"error": "Bad Request",
"request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}{
"statusCode": 400,
"code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
"message": "<string>",
"error": "Bad Request",
"request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}{
"statusCode": 400,
"code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
"message": "<string>",
"error": "Bad Request",
"request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}{
"statusCode": 400,
"code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
"message": "<string>",
"error": "Bad Request",
"request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}