Summary
We’re bringing API support to Project Budgets, a critical component of Asana’s Resource Management Add-On. Project Budgets help teams monitor project financial health by tracking time and costs across multiple dimensions.
With this new API functionality, developers can:
- Programmatically create and configure project budgets and custom rates
- Pull budget data including actual time and costs spent on projects
- Integrate Asana budget tracking with external financial systems
- Automate budget setup across multiple projects
This enables teams to streamline their financial workflows and maintain synchronized budget data between Asana and their existing tools.
Timeline
Now available! API Reference available here:
Usage
We’re introducing two new resource types to the API: budgets and rates.
Budget endpoints
Manage project budgets including time-based and cost-based tracking configurations.
Available operations:
| Endpoint | Description |
|---|---|
GET /budgets/{budget_gid} |
Retrieve a specific budget |
GET /budgets |
List all budgets (requires parent query parameter) |
POST /budgets |
Create a new budget |
PUT /budgets/{budget_gid} |
Update an existing budget |
DELETE /budgets/{budget_gid} |
Delete a budget |
Example: Get a budget
GET /budgets/{budget_gid}
{
"data": {
"gid": "12345",
"resource_type": "budget",
"budget_type": "time",
"parent": {
"gid": "67890",
"resource_type": "project",
"name": "Marketing Campaign"
},
"estimate": {
"billable_status_filter": "billable",
"source": "tasks",
"enabled": true,
"value": 100000,
"units": "minutes"
},
"actual": {
"billable_status_filter": "billable",
"value": 1000,
"units": "minutes"
},
"total": {
"enabled": true,
"value": 10000,
"units": "minutes"
}
}
}
Example: List budgets for a project
GET /budgets?parent={project_gid}
Key budget fields:
| Field | Description |
|---|---|
budget_type |
Type of budget tracking: time or cost |
estimate |
Estimated time or cost, calculated from task estimates or capacity plans |
estimate.source |
Source of estimates: tasks, capacity_plans, or none |
estimate.billable_status_filter |
Filter for estimate calculations: billable, non_billable, or any |
estimate.enabled |
Whether the estimate is included in the budget |
actual |
Actual time or cost spent, calculated from time tracking entries |
actual.billable_status_filter |
Filter for actual calculations: billable, non_billable, or any |
total |
User-defined total budget target |
total.enabled |
Whether a total budget limit is set |
Rate endpoints
Manage custom billing rates for users on specific projects.
Available operations:
| Endpoint | Description |
|---|---|
GET /rates/{rate_gid} |
Retrieve a specific rate |
GET /rates |
List rates (supports parent and resource query parameters) |
POST /rates |
Create a new rate |
PUT /rates/{rate_gid} |
Update an existing rate |
DELETE /rates/{rate_gid} |
Delete a rate |
Example: Get a rate
GET /rates/{rate_gid}
{
"data": {
"gid": "12345",
"resource_type": "rate",
"resource": {
"gid": "11067",
"resource_type": "user",
"name": "Jane Smith"
},
"parent": {
"gid": "67890",
"resource_type": "project",
"name": "Marketing Campaign"
},
"rate": "125.50",
"created_by": {
"gid": "11067",
"resource_type": "user",
"name": "Jane Smith"
},
"currency_code": "USD"
}
}
Key rate fields:
| Field | Description |
|---|---|
resource |
User object this rate applies to |
parent |
Project object where this rate is applicable |
rate |
Hourly billing rate as a string (e.g., “125.50”) |
currency_code |
Three-letter ISO 4217 currency code (e.g., USD, EUR, GBP) |
created_by |
User who created this rate |