Acuity PPM API
Projects

GET List resources

Retrieve normalized allocation cells under /api/snapshot/projects/resources. Assignment rows represent one assignment and period. NPT rows represent one resource, category, and period. Use work_type and snapshot_source to distinguish their origin; include npt_category_id when deduplicating overlapping NPT cells.

Retrieve normalized project resource allocation cells. This endpoint is under /api/snapshot/projects/resources and authenticates with the Company-Api-Token header.

The response uses a normalized fact/cell format for Excel pivot tables, Power BI, and other BI tools. Each JSON object represents exactly one assignment and one time period for project_work, or one resource, one active NPT category, and one time period for non_project_work.

Both resource endpoints use the same normalized row contract. work_type: "project_work" rows contain resource assignment allocation. work_type: "non_project_work" rows contain company project resource non-project-time allocation by category. NPT rows include npt_category_id and npt_category_name; assignment rows omit them.

This endpoint returns snapshot_source: "projects" on every row.

For project_work rows, estimate is the planned assignment estimate for that specific period from project resource assignment time period details. For non_project_work rows, estimate is the category percentage from ResourceNptPeriodAllocation for that resource/category/period, falling back to ResourceNptAllocation for that resource/category, and then to 0 when neither is configured. A period override of 0 takes precedence over the global allocation. Archived categories are excluded. Categories with no positive configured allocation are omitted when every period value is zero.

Both work types return an effective estimate of 0 when the resource is unavailable during the period. Historical cells remain in the response. NPT rows use the category name as project_name, except when the only active category is the protected default category, which uses Non-Project Time.

Period labels are not returned as dynamic JSON keys. Instead, each row includes fixed period fields: period, period_name, period_number, fiscal_year, and estimate.

The response does not include period-label keys, period_start_date, or period_end_date. The previous resource_department field was replaced by resource_team.

resource_team is included only when company.resource_team_hierarchy_enabled is true. When team hierarchy is disabled, the field is not present. Assignment rows use the assignment role's default team; NPT rows use the resource primary role's default team. Assignment-specific team overrides are not used.

For this endpoint, project work rows use project_type: "project".

When combining project and proposal resource snapshots, do not sum non_project_work from both sources without filtering or deduplicating. Use snapshot_source to keep NPT from one source, or deduplicate overlapping NPT cells by work_type, resource_id, npt_category_id, fiscal_year, and period_number. Keep distinct categories as separate rows. The two endpoints can cover different periods, so retain non-overlapping cells when combining their data.

GET/projects/resources

Authorization

Company-Api-Token<UUID>

Ask Acuity Support for your Company-Api-Token token.

You can also find Company-Api-Token: UUID on Project -> Information -> Gear -> Company Api Token.

Missing or invalid Company-Api-Token returns 401 unauthorized.

API Credentials (save your keys here to make the request examples copy-ready)Hidden by default

Save your domain and request headers once, then reuse them across the current docs session.

Session storage clears when this tab closes. Local storage stays available the next time you open the docs in this browser.

Saved values are used in request examples and code snippets on API pages, including the request domain.