Docs · API

Platform API

Create a hashed, scoped API key in /admin/api-keys. Send it as a Bearer token to /api/v1/*. The full secret is shown only once; the dashboard keeps the visible prefix, expiry, last-used time, and a revoke control.

Authentication

Authorization: Bearer rly_<prefix>_<secret>

Expired or revoked keys return 401. A key missing the required scope returns 403.

Scopes

  • content:read — list or fetch blog posts
  • content:write — create, update, or delete posts (includes read)
  • customers:read — list workspaces, plans, and member/project counts (no session replay or event data)
  • usage:read — list session quota usage by workspace

Endpoints

GET /api/v1/content — list posts. Optional ?status=published, draft, scheduled, or archived.

POST /api/v1/content — create a post (201). PATCH /api/v1/content/:id slugifies slug and, for a published post, writes a 301 from the old slug. GET|DELETE /api/v1/content/:id read or delete one post. Publishing with an empty title or slug returns 400. If coverImage is set, coverImageAlt is required. authorId is set from the body, from authorSlug, or from the API key's createdById when that user has an author profile (otherwise the default editorial author).

Writable blog fields

POST and PATCH accept:

  • title (required) — visible H1
  • slug (required) — kebab-case; slugified on create and PATCH
  • metaTitle, metaDescription — optional overrides for the document title and description
  • description or excerpt — used on index cards and RSS
  • summary — visible TL;DR block
  • body — Markdown
  • coverImage, coverImageAlt (alt required when a cover is set)
  • ogImage, canonicalUrl
  • authorId or authorSlug, reviewerId or reviewerSlug
  • categoryId, tagIds (array of tag ids)
  • status — draft, scheduled, published, or archived
  • scheduledAt, publishedAt, noindex
  • faq — array of { question, answer }
  • sources — array of { name, url, checkedOn } (reviewer and sources: SEO-087)
  • relatedPostIds — array of post ids

Programmatic pages

GET/POST /api/v1/pages and GET|PATCH|DELETE /api/v1/pages/:id manage structured ProgrammaticPage records (type, slug, name, unique intro, body, table rows, FAQ, related URLs, noindex, status, timestamps) for vendor, use-case, industry, glossary, or integration pages. Same content:read / content:write scopes and revalidate rules as blog posts.

GET /api/v1/customers — workspaces with plan and usage totals. Does not return recordings.

GET /api/v1/usage — quota usage. Optional ?organizationId= to filter one workspace.

Example

curl -H "Authorization: Bearer rly_..." \
  https://your-domain.example/api/v1/usage