Projects

list-budgets-tool

List budgets filtered by project, customer, budget group, status, billable/open flags or date range.

Returns paginated budgets with project, customer and budget group context. Each row also carries deadlines_count and times_count aggregates so the client can decide whether to dig deeper.

Inputs

NameTypeRequiredDescription
project_idintegernoLimit to a single project.
customer_idintegernoLimit to budgets whose project belongs to this customer.
budget_group_idintegernoLimit to a single budget group.
statusstringnoOne of active, inactive, blocked.
is_openbooleannoFilter open/closed budgets.
is_billablebooleannoFilter billable/non-billable budgets.
searchstringnoSubstring match on the description (case-insensitive).
start_date_fromstring (Y-m-d)noInclusive lower bound on the start date.
start_date_tostring (Y-m-d)noInclusive upper bound on the start date.
end_date_fromstring (Y-m-d)noInclusive lower bound on the end date.
end_date_tostring (Y-m-d)noInclusive upper bound on the end date.
limitintegernoPage size, 1–100, default 25.
offsetintegernoNumber of rows to skip, default 0.

Permissions

  • budgets::read.

Example

{
  "project_id": 7,
  "is_open": true
}

Response

{
  "data": [
    {
      "id": 31,
      "description": "Design budget",
      "status": "active",
      "is_open": true,
      "is_billable": true,
      "budget": 2400,
      "spendable": 0,
      "start_date": "2026-01-15",
      "end_date": "2026-03-31",
      "deadlines_count": 1,
      "times_count": 6,
      "budget_group": null,
      "project": {
        "id": 7,
        "title": "ACME website",
        "customer": { "id": 3, "name": "ACME", "code": "ACM" }
      }
    }
  ],
  "pagination": { "total": 1, "limit": 25, "offset": 0, "has_more": false }
}

Errors

  • An invalid status value returns a validation error.
  • Missing budgets::read returns an authorization error.

On this page