Status Badges
Embeddable SVG badges for your tasks, monitors, and endpoints. Show live status in READMEs, dashboards, or status pages.
Overview
Every recurring task (cron), monitor, and endpoint can have a public badge enabled from its detail page. When enabled, a unique token is generated and two SVG badge URLs become available:
- Status badge — a shields.io-style flat badge showing the current state
- Uptime bars — a bar chart of recent executions or daily status
Badges are publicly accessible via their token URL — no API key or login required. Disable the badge at any time to revoke access.
Enabling a Badge
- Open the detail page of a recurring task, monitor, or endpoint
- Scroll to the Public Badge section
- Click Enable Badge
- Copy the markdown or URL from the embed snippets
Badge URLs
Once enabled, your badges are available at these URLs (replace TOKEN
with the generated token):
Task badges (cron only)
https://runlater.eu/badge/task/TOKEN/status.svg https://runlater.eu/badge/task/TOKEN/uptime.svg
Monitor badges
https://runlater.eu/badge/monitor/TOKEN/status.svg https://runlater.eu/badge/monitor/TOKEN/uptime.svg
Endpoint badges
https://runlater.eu/badge/endpoint/TOKEN/status.svg https://runlater.eu/badge/endpoint/TOKEN/uptime.svg
Embedding
Markdown (GitHub, GitLab, etc.)
 
HTML
<img src="https://runlater.eu/badge/task/TOKEN/status.svg" alt="Status" /> <img src="https://runlater.eu/badge/task/TOKEN/uptime.svg" alt="Uptime" />
Raw JSON data
Prefer to render your own badge, dashboard, or status widget? Every badge URL has a
.json
twin that returns the same data behind the image. Swap .svg
for .json:
https://runlater.eu/badge/task/TOKEN/status.json https://runlater.eu/badge/monitor/TOKEN/uptime.json
The status endpoint returns the current status, color, and the time of the last failure
(last_failure_at, null if it has never failed):
{
"name": "nightly-backup",
"status": "passing",
"color": "#0f766e",
"enabled": true,
"last_failure_at": "2026-06-22T02:00:11Z"
}
The uptime endpoint adds a bars
array. Tasks, monitors, and lanes return
one bar per day over the last 30 days
(the same view as the dashboard), each with a date, status, color, and counts. A day with some — but not all — failures has
status partial
and renders amber. Tasks and lanes also include an avg_duration_ms
summary over the window:
{
"name": "nightly-backup",
"status": "passing",
"color": "#0f766e",
"avg_duration_ms": 142,
"bars": [
{ "date": "2026-06-23", "status": "success", "color": "#0f766e", "total": 1440, "success": 1440, "failed": 0 },
{ "date": "2026-06-24", "status": "partial", "color": "#fbbf24", "total": 1441, "success": 1440, "failed": 1 }
]
}
Monitor bars use actual/expected
ping counts instead of total/success/failed, and have no
avg_duration_ms
(heartbeats aren't timed). Endpoint uptime bars are per inbound event
(last 50), each carrying the event time as at.
The .json endpoints share the same 60-second caching and token rules as the
image badges below.
Badge Types
Status badge
A flat, shields.io-style badge with two sections: the resource name on the left and its current status on the right.
| Resource | Possible values |
|---|---|
| Task (cron) | passing, failing, timeout, running, paused, unknown |
| Monitor | up, down, degraded, paused, new |
| Endpoint | passing, failing, timeout, running, disabled, no data |
Uptime bars
A horizontal bar chart showing recent history. Each bar represents:
- Tasks (cron) — one bar per day (last 30 days), matching the dashboard. Green = all passed, amber = some failed, red = all failed, gray = no runs.
- Monitors — one bar per day (last 30 days). Green = up, orange = degraded, red = down.
- Lanes — one bar per day (last 30 days), same colours as tasks.
- Endpoints — one bar per inbound event (last 50). Color reflects forwarding execution status.
Caching
Badge responses include a Cache-Control: public, max-age=60 header.
This means CDNs, browsers, and proxies will cache the badge for up to 60 seconds.
Status updates will appear within a minute.
Security
- Badges are opt-in — disabled by default, must be explicitly enabled per resource
- Each badge uses a unique, unguessable token (24 hex characters)
- Disabling a badge clears the token — the old URL immediately returns a 404
- Badges only expose the resource name and status — no URLs, headers, response bodies, or other sensitive data