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 postscontent: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 H1slug(required) — kebab-case; slugified on create and PATCHmetaTitle,metaDescription— optional overrides for the document title and descriptiondescriptionorexcerpt— used on index cards and RSSsummary— visible TL;DR blockbody— MarkdowncoverImage,coverImageAlt(alt required when a cover is set)ogImage,canonicalUrlauthorIdorauthorSlug,reviewerIdorreviewerSlugcategoryId,tagIds(array of tag ids)status—draft,scheduled,published, orarchivedscheduledAt,publishedAt,noindexfaq— 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