On this page & all guides
All guides

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:read permission to look at articles and editorial:write to create, change, publish and delete them. A key with admin:* (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 403 even when the key carries editorial: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_at with a UTC offset, such as +00:00 or +01:00. Without one it is read as UTC.
  • published_at only applies to a published article. Sending it on a draft is rejected.
  • To publish at once, send status: published and leave published_at out.
  • To reschedule, PATCH a new published_at. To take a live article down, PATCH status: draft (this clears its publish time) or archived.
  • 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_markdown is accepted as a fallback.
  • hero_image_url takes the address of an image that is already hosted somewhere readers can reach, over http or https.
  • 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_ids shows the article as related reading on those lots. related_entity_ids shows it under those drivers or teams on The Record. Both must belong to your account.