API and tokens
Updated 2026-09-08 ยท Pharos 0.5.10
Create tokens under Integrations or with php artisan pharos:token "n8n".
A token is 40 characters and only its SHA-256 hash is stored, so it is shown exactly once.
Tokens are all-or-nothing: there are no scopes.
Write endpoints accept either header โ the second exists so Cachet scripts need no editing:
Authorization: Bearer <token> X-Cachet-Token: <token>
Reading, without a token
curl -s https://status.example.com/api/v1/components curl -s https://status.example.com/api/v1/incidents
/components returns the Cachet envelope with the same field names and status
integers. /incidents returns the 50 most recent public incidents with their
updates and components.
Setting one component
curl -sX PUT https://status.example.com/api/v1/components/1 \
-H "Authorization: Bearer $PHAROS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"status": 4}'
This does not open an incident. If a built-in check also watches that component, the next check run overwrites whatever you set โ pick one owner per component.
Opening an incident across several components
curl -sX POST https://status.example.com/api/v1/incidents \ -H "Authorization: Bearer $PHAROS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "template": "server-unreachable", "vars": { "server": "web-06.example.net", "started_at": "16:50" }, "status": "investigating", "impact": "major", "components": { "7": "major_outage", "8": "degraded" }, "auto_resolve": true }'
Status is a name, not an integer: investigating,
identified, watching or resolved. Component keys may
be an id or a name. An unrecognised component status silently becomes operational, so check
your spelling.
Adding an update
curl -sX POST https://status.example.com/api/v1/incidents/12/updates \
-H "Authorization: Bearer $PHAROS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"status": "resolved", "message": "Back up at 17:22."}'