Every endpoint of the Polyblog REST API, generated from the API itself.
All endpoints are relative to https://api.polyblog.io. Create an API key in your Polyblog dashboard, then authenticate every request with it.
apiKey — HTTP Basic auth carrying only the API key secret: Authorization: Basic base64(<key secret>).
accessToken — Operator session token issued by the Polyblog dashboard: Authorization: Token <access token>.
Download the OpenAPI specification for use with your own tooling.
List articles
Lists the articles of a blog. Requires the articles:read scope. Anonymous (unauthenticated) callers only ever see published articles; drafts are visible only to an API key or operator token of the owning organization.
| Name | In | Type | Description |
|---|---|---|---|
| blogIdrequired | query | string | |
| locale | query | string | |
| published | query | boolean | |
| slug | query | string | |
| limit | query | integer | |
| skip | query | integer |
| Status | Meaning |
|---|---|
| 200 | A list of articles |
| 401 | Missing or invalid credentials |
| 403 | API key is missing the articles:read scope |
| 429 | API key rate limit exceeded |
Create or update an article
Creates an article (or updates one when the body carries an existing _id). Requires the articles:write scope. Fires the article.created webhook.
| Field | Type | Description |
|---|---|---|
| blogId | string | |
| title | string | |
| content | string | |
| slug | string | |
| locale | string | |
| published | boolean |
| Status | Meaning |
|---|---|
| 200 | The created or updated article |
| 401 | Missing or invalid credentials |
| 403 | API key is missing the articles:write scope |
| 429 | API key rate limit exceeded |
Get an article
Returns a single article by id or slug. Requires the articles:read scope. An article belonging to another organization responds 404 so ids cannot be probed. Anonymous callers can only read a published article; a draft responds 404 unless the caller is an API key or operator token of the owning organization.
| Name | In | Type | Description |
|---|---|---|---|
| idOrSlugrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The article |
| 404 | Not found (or owned by another organization / unpublished) |
Generate an article with AI
Generates (and by default publishes) an SEO article for a blog. Requires the articles:write scope. Fires the article.created webhook when the generated article is persisted.
| Status | Meaning |
|---|---|
| 200 | The generated article and metadata |
| 403 | API key is missing the articles:write scope |
Delete an article
Deletes an article. Requires the articles:write scope. An article owned by another organization responds 404. Fires the article.deleted webhook.
| Name | In | Type | Description |
|---|---|---|---|
| articleIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The deleted article id |
| 404 | Not found (or owned by another organization) |
List blogs
Lists the blogs of your organization. Requires the blogs:read scope.
| Status | Meaning |
|---|---|
| 200 | A list of blogs |
| 403 | API key is missing the blogs:read scope |
Create a blog
Creates a blog for your organization. Requires the blogs:write scope. Fires the blog.created webhook.
| Status | Meaning |
|---|---|
| 200 | The created blog |
| 403 | API key is missing the blogs:write scope |
Update a blog
Updates a blog owned by your organization. Requires the blogs:write scope.
| Name | In | Type | Description |
|---|---|---|---|
| blogIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The updated blog |
| 403 | Not your organization's blog, or missing the blogs:write scope |
List topic ideas
Lists the topic ideas of a blog you own. Requires the topics:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| blogIdrequired | query | string |
| Status | Meaning |
|---|---|
| 200 | The topic ideas |
| 403 | API key is missing the topics:read scope |
List webhook subscriptions
Webhook subscriptions deliver article.created, article.updated, article.deleted, blog.created and contact.created events to your server as signed POST requests (X-Polyblog-Signature: t=<timestamp>,v1=<hex HMAC-SHA256 of "timestamp.body">). An endpoint failing 20 times in a row is disabled automatically. Subscriptions are managed with an operator access token; the secret is only returned once, on create.
| Status | Meaning |
|---|---|
| 200 | Array of webhook subscriptions (without secrets) |
Create a webhook subscription
Pass a blogId to receive only that blog's events, or omit it for an organization-wide subscription. The response includes the signing secret exactly once — store it; it cannot be retrieved again.
| Field | Type | Description |
|---|---|---|
| blogId | string | |
| urlrequired | string | |
| events | array (article.created | article.updated | article.deleted | blog.created | contact.created) | Empty array subscribes to all events |
| Status | Meaning |
|---|---|
| 200 | The created subscription, including its secret |
Update a webhook subscription
url, events and active are editable; the secret, organization and blog are immutable. Re-enabling an auto-disabled endpoint is done by setting active back to true.
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The updated subscription (without secret) |
Delete a webhook subscription
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | Deleted |