Bulk evaluate authorization
/api/v1/permissions/evaluate/bulkEvaluates many permission checks in a single request, returning a { items } array of decisions in the same order as the input checks, each with the same shape as the single evaluate endpoint. Every check is resolved independently against its own identity_id, permission, and scope (node lineage walk or app_wide). Scoped API keys must carry the evaluate scope (403 otherwise). Rate-limited to 500 requests/minute.
Authentication
Bearer Token
Authorization Option A JWT access token. Never send alongside X-API-Key: a request carrying both is refused.
API Key
X-API-Key Option B API key for management-tier access. Never send alongside an Authorization header: a request carrying both is refused.
Request body
application/json
checksEvaluateCheckDto[] Required Responses
application/json
items *EvaluateResponseDto[]
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
Returned object
curl -X POST "https://auth.canopy-io.com/api/v1/permissions/evaluate/bulk" \ -H "X-API-Key: $CANOPY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "checks": [ { "identity_id": "string", "permission": "string", "scope": "node", "node_id": "string" } ] }'
{ "items": [ { "allowed": false, "permission": "string", "scope_evaluated": "node", "effective_node_id": "string", "granting_roles": [ "string" ], "denial_reason": "string" } ] }
Tell us how we can improve this guide.