Skip to main content

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

  1. Open the detail page of a recurring task, monitor, or endpoint
  2. Scroll to the Public Badge section
  3. Click Enable Badge
  4. 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.)

![Status](https://runlater.eu/badge/task/TOKEN/status.svg)
![Uptime](https://runlater.eu/badge/task/TOKEN/uptime.svg)

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