Get delivery analytics
How the team's deliveries went over a period, against the period before: webhooks CoderHelm received (GitHub, Jira, alerts), events it relayed, and what it sent (webhook endpoints, Slack, Teams, email). Per hour for 24h, per day otherwise: volume, success rate, latency percentiles, retries and how many of them went fine, failures by reason in plain words, the event types that failed most, and each webhook endpoint's success rate, latency, failure streak and whether it is turned off. Counts are kept 120 days; each delivery's own record 14.
api_key deliveriesAuthorizationBearer <token>A team API key, made by an admin under Settings, API keys. Send it as Authorization: Bearer chk_....
Scope: deliveries
period?string24h (by hour), 7d or 30d (by day). Default 7d. Each is
compared with the period before it, as long.
source?stringOnly one source: github, relay, webhook, alerts, jira,
slack, teams, email, broker, knowledge.
status?stringall (default), ok (handled or ignored), handled, ignored or
failed. Retrying deliveries count once they finish.
endpoint?stringOnly one outbound webhook endpoint (its id).
The overview.
application/json- response
The Deliveries overview for one period.
{ "backfill": { "complete": true }, "endpoints": [ { "deleted": false, "deliveries": 214, "description": "Incident bot", "disabled_reason": "", "enabled": true, "failed": 12, "failing_since": null, "id": "ep_01JBENDPT4K2M8N3P5Q7R9S1T3", "last_failure_at": "2026-10-26T09:14:02Z", "last_failure_message": "Your webhook endpoint answered with a server error (5xx).", "last_failure_reason": "webhook_server_error", "last_success_at": "2026-10-26T15:02:40Z", "ok": 202, "p50_ms": 320, "p95_ms": 2900, "streak": 0, "success_rate": 0.9439, "url": "https://hooks.example.com/coderhelm" } ], "events": [ { "event": "run.failed", "failed": 9, "source": "webhook" } ], "from": "2026-10-20T00:00:00Z", "granularity": "day", "kept_days": 120, "period": "7d", "previous": { "deliveries": 1120, "failed": 28, "handled": 1040, "ignored": 52, "p50_ms": 170, "p95_ms": 1100, "p99_ms": 4100, "retried": 30, "retried_ok": 26, "retries": 44, "success_rate": 0.975 }, "previous_from": "2026-10-13T00:00:00Z", "previous_to": "2026-10-20T00:00:00Z", "reasons": [ { "code": "webhook_server_error", "count": 12, "fix": "Check your endpoint's logs for this event id. CoderHelm retries for about a day.", "message": "Your webhook endpoint answered with a server error (5xx).", "previous_count": 3, "sources": [ "webhook" ] } ], "records_kept_days": 14, "seen_sources": [ "github", "webhook", "slack", "email" ], "series": [ { "deliveries": 190, "end": "2026-10-27T00:00:00Z", "failed": 4, "ok": 186, "p95_ms": 1100, "previous_deliveries": 171, "start": "2026-10-26T00:00:00Z", "success_rate": 0.9789 } ], "sources": [ { "deliveries": 912, "direction": "inbound", "failed": 7, "ok": 905, "p95_ms": 640, "previous_deliveries": 870, "previous_success_rate": 0.9897, "source": "github", "success_rate": 0.9923 } ], "summary": { "deliveries": 1284, "failed": 33, "handled": 1190, "ignored": 61, "p50_ms": 180, "p95_ms": 1240, "p99_ms": 4800, "retried": 41, "retried_ok": 37, "retries": 58, "success_rate": 0.9743 }, "to": "2026-10-27T00:00:00Z"}backfill*Whether the records from before rollups existed are all counted yet.
endpoints*array<>The team's outbound webhook endpoints, and any that had deliveries in the period since. Empty when another source is chosen.
events*array<>The event types that failed most (up to 10).
from*stringThe period: from (inclusive) to (exclusive), RFC 3339.
"2026-10-20T00:00:00Z"granularity*stringhour or day.
"day"kept_days*integerDays the counts are kept.
int64120period*string24h, 7d or 30d.
"7d"previous*Headline numbers for one period.
previous_from*stringThe period before, as long as this one.
"2026-10-13T00:00:00Z"previous_to*stringThe end of the period before, exclusive.
"2026-10-20T00:00:00Z"reasons*array<>Failures by reason, most first.
records_kept_days*integerDays each delivery's record is kept (what a drill-in can list).
int6414seen_sources*array<string>Every source with deliveries in either period, for the filter.
[ "github", "webhook", "slack", "email"]series*array<>One point per hour (24h) or day, oldest first.
sources*array<>By source and direction, most deliveries first.
summary*Headline numbers for one period.
to*stringThe end of the period, exclusive.
"2026-10-27T00:00:00Z"curl -X GET 'https://api.coderhelm.com/api/deliveries/analytics?period=7d&source=webhook&status=failed&endpoint=ep_01JBENDPT4K2M8N3P5Q7R9S1T3' \ -H "Authorization: Bearer $CODERHELM_API_KEY"{ "backfill": { "complete": true }, "endpoints": [ { "deleted": false, "deliveries": 214, "description": "Incident bot", "disabled_reason": "", "enabled": true, "failed": 12, "failing_since": null, "id": "ep_01JBENDPT4K2M8N3P5Q7R9S1T3", "last_failure_at": "2026-10-26T09:14:02Z", "last_failure_message": "Your webhook endpoint answered with a server error (5xx).", "last_failure_reason": "webhook_server_error", "last_success_at": "2026-10-26T15:02:40Z", "ok": 202, "p50_ms": 320, "p95_ms": 2900, "streak": 0, "success_rate": 0.9439, "url": "https://hooks.example.com/coderhelm" } ], "events": [ { "event": "run.failed", "failed": 9, "source": "webhook" } ], "from": "2026-10-20T00:00:00Z", "granularity": "day", "kept_days": 120, "period": "7d", "previous": { "deliveries": 1120, "failed": 28, "handled": 1040, "ignored": 52, "p50_ms": 170, "p95_ms": 1100, "p99_ms": 4100, "retried": 30, "retried_ok": 26, "retries": 44, "success_rate": 0.975 }, "previous_from": "2026-10-13T00:00:00Z", "previous_to": "2026-10-20T00:00:00Z", "reasons": [ { "code": "webhook_server_error", "count": 12, "fix": "Check your endpoint's logs for this event id. CoderHelm retries for about a day.", "message": "Your webhook endpoint answered with a server error (5xx).", "previous_count": 3, "sources": [ "webhook" ] } ], "records_kept_days": 14, "seen_sources": [ "github", "webhook", "slack", "email" ], "series": [ { "deliveries": 190, "end": "2026-10-27T00:00:00Z", "failed": 4, "ok": 186, "p95_ms": 1100, "previous_deliveries": 171, "start": "2026-10-26T00:00:00Z", "success_rate": 0.9789 } ], "sources": [ { "deliveries": 912, "direction": "inbound", "failed": 7, "ok": 905, "p95_ms": 640, "previous_deliveries": 870, "previous_success_rate": 0.9897, "source": "github", "success_rate": 0.9923 } ], "summary": { "deliveries": 1284, "failed": 33, "handled": 1190, "ignored": 61, "p50_ms": 180, "p95_ms": 1240, "p99_ms": 4800, "retried": 41, "retried_ok": 37, "retries": 58, "success_rate": 0.9743 }, "to": "2026-10-27T00:00:00Z"}Webhooks
Get CoderHelm's events in your own systems, signed the Standard Webhooks way, and see which webhooks CoderHelm receives, how it verifies them and what they start.
Get the caller GET
Returns who the request is authenticated as. With an API key this is the key itself: its name, who made it, when it expires, its rate limit, and in `capabilities` the scopes it holds right now (cut down to what its maker holds). Call it first to check a key works.