Docs

Get budget performance report

GET /api/v1/programmatic/reports/budget-performance

GET/api/v1/programmatic/reports/budget-performance
Reportsv1reports:read

Returns budget utilization and pacing for a month.

Parameters

NameInType Description
monthquerystringOptional Budget month. Defaults to the current month in the workspace timezone. 2026-07

Code examples

curl --request GET \
  --url 'https://api.tetri.app/api/v1/programmatic/reports/budget-performance?month=2026-07' \
  --header 'Authorization: Bearer $TETRI_API_TOKEN'

Responses

200Complete budget performance report in a JSON:API resource envelope.
{
  "data": {
    "type": "budget_performance",
    "id": "<string>",
    "attributes": {
      "month": "<string>",
      "currency_code": "<string>",
      "currency_symbol": "<string>",
      "days_elapsed": 0,
      "days_in_month": 0,
      "budgets": [
        {
          "budget_id": "<string>",
          "name": "<string>",
          "accent_color": "<string>",
          "budget_amount": "<string>",
          "actual_spent": "<string>",
          "forecast": "<string>",
          "status": "on_track",
          "percent_used": "<string>",
          "categories": [
            {
              "id": "<string>",
              "name": "<string>",
              "icon_name": "<string>",
              "accent_color": "<string>",
              "actual_spent": "<string>",
              "percentage_of_budget": "<string>"
            }
          ]
        }
      ],
      "summary": {
        "total_budgeted_agg": {
          "per_currency": [
            {
              "currency_code": "<string>",
              "currency_symbol": "<string>",
              "currency_decimal_places": 0,
              "amount": "<string>",
              "count": 0
            }
          ],
          "home_converted": {
            "currency_code": "<string>",
            "currency_symbol": "<string>",
            "currency_decimal_places": 0,
            "amount": "<string>",
            "fx_partial": false,
            "missing_fx_count": 0,
            "rate_date": "2026-07-12"
          }
        },
        "total_spent_agg": {
          "per_currency": [
            {
              "currency_code": "<string>",
              "currency_symbol": "<string>",
              "currency_decimal_places": 0,
              "amount": "<string>",
              "count": 0
            }
          ],
          "home_converted": {
            "currency_code": "<string>",
            "currency_symbol": "<string>",
            "currency_decimal_places": 0,
            "amount": "<string>",
            "fx_partial": false,
            "missing_fx_count": 0,
            "rate_date": "2026-07-12"
          }
        },
        "total_forecast_agg": {
          "per_currency": [
            {
              "currency_code": "<string>",
              "currency_symbol": "<string>",
              "currency_decimal_places": 0,
              "amount": "<string>",
              "count": 0
            }
          ],
          "home_converted": {
            "currency_code": "<string>",
            "currency_symbol": "<string>",
            "currency_decimal_places": 0,
            "amount": "<string>",
            "fx_partial": false,
            "missing_fx_count": 0,
            "rate_date": "2026-07-12"
          }
        },
        "on_track_count": 0,
        "on_edge_count": 0,
        "over_count": 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"
}