← Briefing Board

API docs

One call publishes a briefing and returns a private, unguessable link you can share with anyone.

1. Get a key

Request a key at /get-key (or POST /api/v1/keys { "email": "…" }). It arrives by email. Send it as Authorization: Bearer <key>; X-API-Key also works.

2. Publish

POST /api/v1/briefings with a JSON body:

curl -X POST https://briefingboard.app/api/v1/briefings \
  -H "Authorization: Bearer $BRIEFING_BOARD_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Weekly market pulse",
    "subtitle": "What moved and why",
    "summary": "Equities rose 2% on easing rates; energy lagged.",
    "body": "## Highlights\n\n- S&P 500 +2.1%\n- Brent -3.4%",
    "images": [
      { "caption": "Trading floor", "kind": "visual", "cover": true,
        "url": "https://example.com/floor.jpg" },
      { "caption": "S&P 500 weekly chart", "kind": "informational",
        "data": "iVBORw0KGgo..." }
    ]
  }'

Response:

HTTP/1.1 201 Created
{
  "id": "Zq3...43 chars...",
  "url": "https://briefingboard.app/b/Zq3...",
  "createdAt": "2026-10-22T12:00:00.000Z"
}

Return the url to your user. Anyone with it can read the briefing; it is not indexed by search engines.

3. Delete (optional)

DELETE /api/v1/briefings/<id> with any key registered to the same email returns 204; the link stops working immediately.

Use it from your agent

Agent skill (Hermes, OpenClaw, Claude Code, Codex and other Agent Skills clients) — set BRIEFING_BOARD_API_KEY, then install:

# Hermes
hermes skills install https://briefingboard.app/skills/briefing-board/SKILL.md
# OpenClaw
openclaw skills install briefing-board
# Claude Code / Codex: copy the folder into your skills directory
curl -fsSL https://briefingboard.app/skills/briefing-board/SKILL.md --create-dirs -o ~/.claude/skills/briefing-board/SKILL.md

MCP — connect any Streamable HTTP client to https://briefingboard.app/api/mcp with your key as a bearer token. Tools: publish_briefing, delete_briefing, request_api_key.

{
  "mcpServers": {
    "briefing-board": {
      "url": "https://briefingboard.app/api/mcp",
      "headers": { "Authorization": "Bearer <BRIEFING_BOARD_API_KEY>" }
    }
  }
}

Fields

FieldTypeRules
titlestring, required1–200 chars
subtitlestring≤ 300 chars
summarystring≤ 1024 chars — shown on the title page
bodystring (Markdown)≤ 100,000 chars; GFM. Raw HTML shows as text
imagesarray≤ 20 items; non-cover images follow the body in order
images[].captionstring, required1–500 chars; also used as alt text
images[].kind"informational" | "visual"informational: never cropped, tap to zoom (charts, screenshots). visual: cropped to fill (photos)
images[].coverbooleanAt most one image; shown on the full-screen title page
images[].urlhttps URLExactly one of url or data
images[].database64 / data URLPNG, JPEG, WebP or GIF, ≤ 3 MB decoded. Request body ≤ 4 MB total — send larger images as url

Errors

Errors share one shape: { "error": { "code", "message", "details?" } }

400validation_errorerror.details[] lists each { path, message }
401unauthorizedMissing, unknown or revoked API key
404not_foundBriefing doesn't exist or isn't yours (DELETE)
413payload_too_largeImage over 3 MB or request over 4 MB — use image URLs
429rate_limitedToo many requests; see Retry-After
502email_failedKey email could not be sent (POST /keys)

Machine-readable spec

OpenAPI 3.1: /api/v1/openapi.json · /llms.txt

Privacy: what we store and how to delete it.