GET /articles Available
#List articles
Articles of your tenant (the SEO section) without their content, by descending updated_at. Articles of the shared platform blog are not included. include_deleted=true returns 422 not_supported: deleted articles are not stored.
- Scopes
articles:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 A page of articles.
Parameters
| Field | Type | Description |
|---|
limit | integer optional | In: query. Page size: 1 to 100, default 25. |
cursor | string optional | In: query. The next_cursor value from the previous response. Valid for 24 hours; start over when filters change. |
status | string optional | In: query. Article status. |
updated_after | string optional | In: query. Only articles updated strictly after the moment. ISO 8601: a date or a date-time. |
include_deleted | boolean optional | In: query. true — also return tombstones {id, deleted_at} of deleted records (kept for 30 days). |
Response body
| Field | Type | Description |
|---|
data | array<ArticleSummary> required | |
next_cursor | string required, may be null | Cursor of the next page; null — the list is exhausted. Valid for 24 hours. |
Examples
Request
curl -X GET 'https://wfacademy.org/api/public/v1/articles' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"data": [
{
"id": "EXAMPLE_ID",
"title": "string",
"slug": null,
"status": "string",
"locale": null,
"keyword": null,
"meta_title": null,
"meta_description": null,
"cover_image_url": null,
"word_count": 0,
"created_at": null,
"updated_at": null,
"published_at": null
}
],
"next_cursor": "EXAMPLE_CURSOR"
}
Error example
{
"type": "https://wfacademy.org/developers/errors#scope_missing",
"title": "Scope is missing",
"status": 403,
"code": "scope_missing",
"detail": "EXAMPLE",
"request_id": "req_EXAMPLE"
}
Examples are illustrative: the key in them is a placeholder (EXAMPLE), field values are made up.
Possible errors
invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing validation_failed
GET /articles/{id} Available
#Get an article
An article with its content as html (default), markdown or blocks, and its publication state (publication). The HTML is stripped of scripts; a body over 2,000,000 bytes returns 422.
- Scopes
articles:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 The article.
Parameters
| Field | Type | Description |
|---|
id | string required | In: path. Article id. |
format | string optional | In: query. Content format. |
Response body
| Field | Type | Description |
|---|
id | string required | Article id. |
title | string required | |
slug | string required, may be null | |
status | string required | draft — a draft; review — in review; approved — approved; published — published; rejected — rejected; transferred — moved to the blog; external — external. |
locale | string required, may be null | Article language (ru, en, id). |
keyword | string required, may be null | The main query of the article. |
meta_title | string required, may be null | |
meta_description | string required, may be null | |
cover_image_url | string required, may be null | |
word_count | integer required | |
created_at | string required, may be null | ISO 8601 UTC. |
updated_at | string required, may be null | ISO 8601 UTC. |
published_at | string required, may be null | ISO 8601 UTC. |
content | object required | The article body in the requested format: html and markdown — a string; blocks — an array of {type, html} blocks. The HTML is stripped of scripts, dangerous links and event handlers. For an article whose body moved to the platform blog the content is empty. |
publication | ArticlePublication required, may be null | null — the article has not been published through the site module yet. |
Examples
Request
curl -X GET 'https://wfacademy.org/api/public/v1/articles/EXAMPLE_ID' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"id": "EXAMPLE_ID",
"title": "string",
"slug": "string",
"status": "string",
"locale": "string",
"keyword": "string",
"meta_title": "string",
"meta_description": "string",
"cover_image_url": "https://example.com/hooks/sapport",
"word_count": 0,
"created_at": "2026-10-11T09:00:00Z",
"updated_at": "2026-10-11T09:00:00Z",
"published_at": "2026-10-11T09:00:00Z",
"content": "string",
"publication": {
"target": "string",
"state": "queued",
"published_url": null,
"error": null
}
}
Error example
{
"type": "https://wfacademy.org/developers/errors#scope_missing",
"title": "Scope is missing",
"status": 403,
"code": "scope_missing",
"detail": "EXAMPLE",
"request_id": "req_EXAMPLE"
}
Examples are illustrative: the key in them is a placeholder (EXAMPLE), field values are made up.
Possible errors
invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found validation_failed