Docs

List recurring rules

GET /api/v1/programmatic/recurring-rules

GET/api/v1/programmatic/recurring-rules
Recurringv1recurring:read

Returns recurring rules with bounded filtering and pagination.

Parameters

NameInType Description
statusqueryactive | paused | endedOptional Return only recurring rules in this lifecycle state. active
typequeryexpense | income | transferOptional Return only rules for this transaction direction. expense
kindqueryrule | subscriptionOptional Filter automatic recurring rules separately from manually tracked subscriptions. rule
account_idquerystringOptional Return rules that use this source account. <account_id>
pagequerynumberOptional One-based result page. <page>
limitquerynumberOptional Maximum recurring rules returned per page. <limit>

Code examples

curl --request GET \
  --url 'https://api.tetri.app/api/v1/programmatic/recurring-rules?status=active&type=expense&kind=rule&account_id=<account_id>' \
  --header 'Authorization: Bearer $TETRI_API_TOKEN'

Responses

200Recurring rules and page metadata.
{
  "data": [
    {
      "id": "<uuid>",
      "created_by_user_id": "<uuid>",
      "name": "<string>",
      "raw_name": "<string>",
      "is_system_seed": false,
      "system_seed_key": "<string>",
      "system_seed_source": "<string>",
      "name_customized": false,
      "type": "expense",
      "kind": "rule",
      "amount": "49.99",
      "currency_id": "<uuid>",
      "currency_code": "USD",
      "currency_symbol": "$",
      "account_id": "<uuid>",
      "account_name": "<string>",
      "destination_account_id": "<uuid>",
      "destination_account_name": "<string>",
      "category_id": "<uuid>",
      "category_name": "<string>",
      "frequency": "monthly",
      "custom_interval_days": 0,
      "start_date": "2026-07-12",
      "end_date": "2026-07-12",
      "next_occurrence_date": "2026-07-12",
      "status": "active",
      "paused_at": "2026-07-12T12:00:00Z",
      "auto_create": false,
      "catalog_item_id": "<uuid>",
      "billing_url": "<string>",
      "icon": "<string>",
      "icon_url": "<string>",
      "accent_color": "sky",
      "external_id": "<string>",
      "notes": "<string>",
      "version": 0,
      "created_at": "2026-07-12T12:00:00Z",
      "updated_at": "2026-07-12T12:00:00Z",
      "created_by": {}
    }
  ],
  "meta": {
    "total": 0,
    "page": 0,
    "limit": 0
  }
}
400Request parameters or payload failed validation. Inspect `code` and `message`.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}
401The personal access token is missing, invalid, expired, or revoked.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}
403The token lacks the required scope or no longer has workspace access.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}
429The credential exceeded its request rate limit.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}