Skip to content

API reference

REST API v1

Base URL https://bloting.com. JSON in, JSON out, bearer authentication. This page is generated from the same definition as the OpenAPI document.

Publications

List publications

GET/v1/publications

Permission: publications:read.

Responses

200
objectEvery publication in the workspace.

Create a publication

POST/v1/publications

Permission: drafts:create.

Parameters

Idempotency-Key
header · stringMakes the request safe to retry.

Body

namerequired
stringDisplay name.
handlerequired
stringSubdomain: 3–32 lowercase letters, numbers or hyphens.
description
string
language
string

Responses

201
PublicationCreated.
409
no bodyThe handle is taken. `error.suggestions` lists free alternatives.

Retrieve a publication

GET/v1/publications/{id}

Permission: publications:read.

Parameters

idrequired
path · stringPublication id.

Responses

200
PublicationThe publication.

Update a publication

PATCH/v1/publications/{id}

Permission: drafts:edit.

Parameters

idrequired
path · stringPublication id.

Body

name
string
description
string or null
template
"editorial" | "minimal" | "magazine"
language
string
settings
object

Responses

200
PublicationUpdated.

Content

List content

GET/v1/content

Newest first. Follow `next_cursor` until `has_more` is false.

Permission: content:read.

Parameters

limit
query · integerPage size (1–100). Default 30.
cursor
query · string`next_cursor` from the previous page.
status
query · "draft" | "scheduled" | "published" | "all"Filter by status. `draft` includes unpublished pages.
publication_id
query · stringOnly content in this publication.
q
query · stringMatch against the title.

Responses

200
objectA page of content, without bodies.

Create a draft

POST/v1/content

Creates a draft from Markdown. Nothing becomes public until it is published.

Permission: drafts:create.

Parameters

Idempotency-Key
header · stringMakes the request safe to retry.

Body

publication_id
stringWhere the page will live. Can be set later.
title
stringPage title. Defaults to the first `# ` heading in `markdown`.
markdownrequired
stringBody in GitHub-flavored Markdown. Raw HTML is shown as text, never rendered.
excerpt
stringSummary shown under the title and in search results.
language
stringBCP 47 tag. Detected from the text when omitted.
sources
object[]References. Each is fetched and marked verified, unreachable or unchecked.

Responses

201
ContentThe draft.

Retrieve content

GET/v1/content/{id}

Permission: content:read.

Parameters

idrequired
path · stringContent id.

Responses

200
ContentThe content, including its Markdown body.

Update content

PATCH/v1/content/{id}

Saves a new revision of the working copy. Edits to a published page stay private until it is published again.

Permission: drafts:edit.

Parameters

idrequired
path · stringContent id.

Body

title
stringPage title. Defaults to the first `# ` heading in `markdown`.
markdown
stringBody in GitHub-flavored Markdown. Raw HTML is shown as text, never rendered.
excerpt
stringSummary shown under the title and in search results.
language
stringBCP 47 tag. Detected from the text when omitted.
sources
object[]References. Each is fetched and marked verified, unreachable or unchecked.
publication_id
stringMove a draft into a publication.
slug
stringChange the URL. A published page keeps working at its old address through a permanent redirect.
cover_url
string or null
cover_alt
string or null
seo
object
topics
string[]Up to 8 topic names.
summary
stringNote stored with the revision.

Responses

200
ContentUpdated.

Delete content

DELETE/v1/content/{id}

A live page is taken down first. Without `content:delete` this returns 403; deletion is never queued for approval.

Permission: content:delete.

Parameters

idrequired
path · stringContent id.

Responses

204
no bodyDeleted.
403
no bodyThe credential lacks `content:delete`.

List revisions

GET/v1/content/{id}/revisions

Permission: content:read.

Parameters

idrequired
path · stringContent id.

Responses

200
objectUp to 100 revisions, newest first.

Publishing

Preview and validate

POST/v1/publishing/preview

Runs the pre-publish checks and returns the page as it would be published.

Permission: content:read.

Body

content_idrequired
string
check_sources
booleanAlso fetch sources that haven't been checked recently. Needs `drafts:edit`.

Responses

200
PreviewValidation result and preview.

Publish

POST/v1/publishing/publish

Publishes the current working copy. Content whose validation is `needs_review` is not published by a credential unless `acknowledge_review` is true.

Permission: drafts:create. With `content:publish` the page goes live. Without it, an approval request is created for the workspace owner instead.

Parameters

Idempotency-Key
header · stringMakes the request safe to retry.

Body

content_idrequired
string
acknowledge_review
booleanPublish even though checks flagged items for review. Requires `content:publish`.

Responses

200
PublishResultThe page is live.
202
ApprovalRequiredWaiting for the owner's approval.
422
no bodyBlocked by validation. `error.validation` holds the checks.

Schedule

POST/v1/publishing/schedule

Permission: content:publish.

Parameters

Idempotency-Key
header · stringMakes the request safe to retry.

Body

content_idrequired
string
publish_atrequired
date-timeAt least one minute in the future.

Responses

200
ContentScheduled.

Unpublish

POST/v1/publishing/unpublish

Takes a live page down, or cancels a schedule. The content is kept.

Permission: content:publish.

Parameters

Idempotency-Key
header · stringMakes the request safe to retry.

Body

content_idrequired
string

Responses

200
ContentNo longer public.

List pending approvals

GET/v1/publishing/approvals

Permission: content:read.

Responses

200
objectRequests waiting for the owner.

Request approval

POST/v1/publishing/approvals

Asks the workspace owner to publish. The request applies to the current revision only; editing the content afterwards voids it. Only a signed-in person can approve.

Permission: drafts:create.

Parameters

Idempotency-Key
header · stringMakes the request safe to retry.

Body

content_idrequired
string

Responses

201
objectThe pending request.

Analytics

Retrieve analytics

GET/v1/analytics

Visits counted by this platform. With no filter, covers every publication in the workspace.

Permission: analytics:read.

Parameters

publication_id
query · stringLimit to one publication.
content_id
query · stringLimit to one page.
days
query · integerLook-back window in days (1–90). Default 28.

Responses

200
AnalyticsSummary and breakdowns.

Revenue

Retrieve revenue

GET/v1/revenue

Revenue exactly as reported by LOOPIS. When `connected` is false or `has_data` is false, `summary` is null — nothing is estimated.

Permission: revenue:read.

Parameters

publication_id
query · stringLimit to one publication.
days
query · integerLook-back window in days (1–90). Default 28.

Responses

200
RevenueReported revenue, if any.

Webhooks

List webhooks

GET/v1/webhooks

Permission: content:publish.

Responses

200
objectRegistered endpoints. Secrets are not returned.

Create a webhook

POST/v1/webhooks

Permission: content:publish.

Parameters

Idempotency-Key
header · stringMakes the request safe to retry.

Body

urlrequired
stringAn https endpoint.
eventsrequired
"content.published" | "content.updated" | "content.unpublished" | "content.deleted" | "approval.requested"[]

Responses

201
WebhookCreated. `secret` is shown only in this response.

Delete a webhook

DELETE/v1/webhooks/{id}

Permission: content:publish.

Parameters

idrequired
path · stringWebhook id.

Responses

204
no bodyDeleted.