Getting started (integrators)
1. Get an API key
Every consuming app has its own key. Ask the admin team (Mike) to register your app and issue one; it is shown exactly once at issue time, so store it straight into your app's secret store. Keys can be revoked and reissued at any time without affecting other apps.
2. Know the basics
| Base URL | https://errors.stowe-app.co.uk/api/v1 |
|---|---|
| Auth | Header X-API-Key: <your key> on every request |
| Format | JSON in, JSON out, UTF-8 |
| Health check | GET /api/v1/health, no auth needed |
| Full spec | Swagger UI (browsable, try-it-out enabled) |
3. Send your first event
curl -X POST https://errors.stowe-app.co.uk/api/v1/events \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_type": "error",
"error_class": "technical",
"severity": "error",
"integration": "my-app-nightly-sync",
"code": "HTTP_502",
"message": "Bad gateway from upstream when syncing records",
"retryable": true,
"occurred_at": "2026-08-13T06:15:00Z"
}'
A successful call returns 201 with an acknowledgement, your proof the
log was received:
{ "ack": { "received": true, "id": 123,
"received_at": "2026-08-13T06:15:01+00:00", "alerts_queued": 1 } }
If validation fails you get 400 with ack.received: false and a
plain-English list in errors[]. A missing or revoked key gets
401. Anything else (500) means the event may not have been
stored, so treat it as unlogged and retry.
4. Log successes too
Successful runs matter as much as failures; they are how the dashboard can show
an integration is alive and healthy. Send the same call with
"event_type": "success" (no error_class needed) at the end of
each run.
Next: Logging events