The service has three endpoints. Paths under /api/v1 and /review require the token configured as
EDP_API_TOKEN; /healthz is open. Bodies and replies are JSON. A path parameter is a whole segment, so
an action on one record is a trailing segment (/sources/{id}/extract) and an action on a collection
keeps a colon (/sources:ingest). Every reviewer, by and decidedBy field must name a configured
reviewer, or operator where the route allows it; any other name is refused with 400 and nothing is
recorded. Routes under "Requests and facets" and later are relative to /api/v1.
Endpoint
Prefix
ACL
Audience
ApiEndpoint
/api/v1
Acl.Authenticate: Authorization: Bearer <EDP_API_TOKEN> → principal operator; otherwise 401
the operator, the walkthrough, the tests
ReviewEndpoint
/review
the same token, carried in the edp_session cookie set by GET /review/session?token=; otherwise 401
the reviewer, in a browser
HealthEndpoint
/healthz
Acl.AllowAll; read-only
probes
JSON bodies and responses. A path parameter is a whole segment, so an action on a record is a trailing literal segment (/sources/{id}/extract); an action on a collection keeps the colon form (/sources:ingest). Every reviewer, by and decidedBy field must name an entry of the
configured reviewer list; otherwise 400 with unknown_reviewer and no write. Every write returns
the record's {id, version} (or the workflow it started). Record shapes are those in
data-model.md; this file lists routes, inputs and statuses only. Statuses come from the entities'
refusals through ankka's mapping (BadRequest 400, NotFound 404, Conflict 409, Forbidden 403,
Unavailable 503, Timeout 504); the endpoint maps nothing itself.
A route that starts or resumes a workflow returns at once with the workflow id; the caller reads
progress from /runs/{runId} or the workflow's lifecycle. The gateway bounds a response at fifteen
seconds, so nothing waits for a model inside a request.
An error is ankka's problem reply: the status and a message saying what was refused and why.
Status
When
400
a body that does not parse, an unknown enumeration value, a name that is not a configured reviewer, or a command an entity refuses as invalid
401
no token, or the wrong one
404
no record with that id
409
a command the record's current state forbids: an illegal status transition, a second decision, approval of a version not under review, a spent supplemental budget
Nothing is recorded when a command is refused. A stage whose model reply fails its gate is not an HTTP
error: the failure is recorded on the run's provenance record, GET /api/v1/runs/{runId}, and on the
workflow's state, GET /api/v1/workflows/{kind}/{id}.