Budget versus actual
Reports module
GET/reports/budget-vs-actualreports.budgetVsActual
Revised budget (working budget plus approved change orders) against actual spend, grouped by one dimension. Unpriced lines stay out of each sum and are counted in `unpriced_count`. A rule that refuses the request returns 422 with `refusal` and `reason`.
- Requires the capability finance.budget.read.
- OAuth scopes: finance.
- Error statuses: 400, 401, 422, 429. Errors are RFC 9457 problem details.
Path and query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| project_id | string (uuid) | No | Only this project; every visible project when omitted. |
| dimension | "account" | "costCenter" | "department" | "urid" | "project" | No | Grouping dimension; defaults to account. |
Response 200: ReportRowPage
| Field | Type | Required | Description |
|---|---|---|---|
| data | array of ReportRow | Yes | Items on this page, in the documented default order. |
| next_cursor | string | null | Yes | Opaque cursor for the next page; null on the last page. |
{
"data": [
{
"dimension": "5400",
"budget": {
"total_minor": 1250000,
"currency": "USD",
"unpriced_count": 2
},
"actual": {
"total_minor": 1250000,
"currency": "USD",
"unpriced_count": 2
}
}
],
"next_cursor": null
}Code samples
curl -X GET "$XOS_BASE_URL/reports/budget-vs-actual" \
-H "Authorization: Bearer $XOS_API_KEY"const { data } = await xos.reports.budgetVsActual();response = xos.reports.budget_vs_actual()xos reports budget-vs-actual