Tenant Admins
Publishing Articles Through the API
Create, schedule, edit and publish editorial articles from your own scripts and tools with an API key.
Articles are the writing you publish on your storefront, called Articles in the console and shown to readers as your editorial section or notes. Everything you can do on the Articles screen you can also do through the API, so a script or a posting tool can write a piece, hold it as a draft, or schedule it to go live at a set time with no one logged in.
Before you start
- Editorial and API access must both be on for your account.
- Create an API key under Settings → API Keys with the
editorial:readpermission to look at articles andeditorial:writeto create, change, publish and delete them. A key withadmin:*(or*) can do all of this without those two. - The team member who owns the key (shown as Owner) needs the moderate content permission, the same one the Articles screen asks for. A key whose Owner lacks it gets a
403even when the key carrieseditorial:write. The standard Admin role holds it.
See API keys, CORS and the audit trail for creating a key.
Endpoints
All paths start with /api/editorial/articles and take the key as a bearer token. The API reference has every field.
| Call | What it does | | --- | --- | | GET /api/editorial/articles | Lists articles in every status. Filter with ?status=draft, published or archived. | | GET /api/editorial/articles/{id} | Reads one article. | | POST /api/editorial/articles | Creates an article. | | PATCH /api/editorial/articles/{id} | Changes the fields you send, or moves it between draft, published and archived. | | DELETE /api/editorial/articles/{id} | Deletes an article for good. To keep it, set its status to archived instead. |
The public GET /api/editorial-articles list is separate. It needs no key and only shows articles that are live.
Publish now, or schedule
An article is saved as a draft unless you say otherwise. To publish it, send status: published. To schedule it, add a published_at time in the future:
{
"title": "Behind the Wheel",
"body_html": "<p>A look at the collection.</p>",
"excerpt": "A look at the collection.",
"author_display_name": "Jane Smith",
"hero_image_url": "https://cdn.example.com/hero.jpg",
"hero_image_alt": "A silver teapot on a table",
"status": "published",
"published_at": "2026-11-09T18:00:00+00:00"
}
A scheduled article comes back with status: published and is_live: false. It stays hidden from readers until published_at passes, then appears on the storefront, in the RSS feed and in the sitemap by itself. You do not need to call the API again at that time.
- Always send
published_atwith a UTC offset, such as+00:00or+01:00. Without one it is read as UTC. published_atonly applies to a published article. Sending it on a draft is rejected.- To publish at once, send
status: publishedand leavepublished_atout. - To reschedule,
PATCHa newpublished_at. To take a live article down,PATCHstatus: draft(this clears its publish time) orarchived.
Body, images and links
- The body is HTML, in
body_html. It is cleaned on save the same way the console editor cleans it, so scripts and unsafe markup are removed.body_markdownis accepted as a fallback. hero_image_urltakes the address of an image that is already hosted somewhere readers can reach, overhttporhttps.- The slug comes from the title unless you send
slug, and a number is added if it is taken. It cannot be changed later, because it is the article's address. related_listing_idsshows the article as related reading on those lots.related_entity_idsshows it under those drivers or teams on The Record. Both must belong to your account.