POST /v1/tenants/{tenant_id}/permissions/check
The Check API answers resource-based authorization questions of the form: “Can user U perform action Y on resource Z?”
Permify evaluates the check by walking the relationship graph defined in your schema. It runs concurrent queries for each branch of the permission expression (or / and) and short-circuits as soon as a definitive result is found.
Path Parameters
The tenant identifier. Use the pre-inserted default tenant
t1 if you are not using multi-tenancy. Must match ^([a-zA-Z0-9_\-@\.:+]{1,128}|\*)$.Request Body
Controls schema version and caching behavior for this request.
The resource on which the permission is being checked.
The permission or relation name to check (e.g.
edit, view, push). Must match ^[a-zA-Z_]{1,64}$.The subject (user or user set) whose access is being evaluated.
Contextual data injected dynamically at check time — useful for attribute-based (ABAC) checks without writing tuples.
Response
The authorization decision. One of:
RESULT_ALLOWED— the subject is authorizedRESULT_DENIED— the subject is not authorized
Examples
Relationship-based check
Attribute-based check with context data
Error Codes
| HTTP Status | Description |
|---|---|
400 | Bad request — missing or invalid fields |
401 | Unauthorized — invalid or missing bearer token |
404 | Tenant not found |
429 | Rate limit exceeded |
500 | Internal server error |