AuthZEN.guide

AuthZEN API reference: endpoints and JSON examples

By David Brossard · Last updated


This page summarizes the OpenID AuthZEN Authorization API 1.0 (Final Specification, January 2026) with copy-paste JSON examples. All calls are HTTPS POST with Content-Type: application/json. A deny is a normal 200 response with "decision": false; HTTP 4xx/5xx codes mean transport or request errors.

On this page: Information model · Access Evaluation · Access Evaluations (batch) · Search APIs · PDP metadata & discovery · Try it

Information model: subject, action, resource, context

ElementRequired fieldsOptionalExample
subjecttype, idproperties{"type":"user","id":"[email protected]","properties":{"department":"Sales"}}
actionnameproperties{"name":"can_read"}
resourcetype, idproperties{"type":"account","id":"123"}
contextnone (the whole object is optional)any{"time":"1985-10-26T01:22-07:00"}

The decision response carries a boolean decision (required) and an optional context object. The PDP can use context to return reasons, advice or obligations, or hints such as a step-up authentication requirement.

Access Evaluation API

Default path: /access/v1/evaluation. One question, one decision.

POST /access/v1/evaluation HTTP/1.1
Host: pdp.example.com
Content-Type: application/json
Authorization: Bearer <token>

{
  "subject":  { "type": "user", "id": "[email protected]" },
  "resource": { "type": "account", "id": "123" },
  "action":   { "name": "can_read", "properties": { "method": "GET" } },
  "context":  { "time": "1985-10-26T01:22-07:00" }
}
HTTP/1.1 200 OK
Content-Type: application/json

{ "decision": true }

A deny that includes a reason in the response context:

{
  "decision": false,
  "context": {
    "reason_user": { "en": "Accounts can only be read by their owner or a manager." }
  }
}

The shape of context is up to the PDP. The example above is illustrative.

Access Evaluations API (batch)

Default path: /access/v1/evaluations. Top-level subject, action, resource and context act as defaults that each item in evaluations can override. Typical use: deciding which buttons to show in a UI with a single round trip.

{
  "subject": { "type": "user", "id": "[email protected]" },
  "action":  { "name": "can_read" },
  "options": { "evaluations_semantic": "execute_all" },
  "evaluations": [
    { "resource": { "type": "document", "id": "boxcarring.md" } },
    { "resource": { "type": "document", "id": "subject-search.md" } },
    { "action": { "name": "can_edit" }, "resource": { "type": "document", "id": "boxcarring.md" } }
  ]
}
{
  "evaluations": [
    { "decision": true },
    { "decision": false },
    { "decision": false, "context": { "error": { "status": 404, "message": "Resource not found" } } }
  ]
}

options.evaluations_semantic controls execution:

PDP metadata and discovery

A PDP publishes its configuration at /.well-known/authzen-configuration, placed between the host and any path (for example https://pdp.example.com/.well-known/authzen-configuration/tenant1).

GET /.well-known/authzen-configuration HTTP/1.1
Host: pdp.example.com

{
  "policy_decision_point": "https://pdp.example.com",
  "access_evaluation_endpoint": "https://pdp.example.com/access/v1/evaluation",
  "access_evaluations_endpoint": "https://pdp.example.com/access/v1/evaluations",
  "search_subject_endpoint": "https://pdp.example.com/access/v1/search/subject",
  "search_resource_endpoint": "https://pdp.example.com/access/v1/search/resource",
  "search_action_endpoint": "https://pdp.example.com/access/v1/search/action"
}

Try it