Strategist
Methods in this section: 6. All methods
GET /strategist/reports Available
#List strategist reports
Headers of daily and weekly reports, newest first; each has data_as_of, the data freshness. Creative runs are not returned.
- Scopes
strategist:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 A page of reports.
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. |
report_type | string optional | In: query. Report type. |
Response body
| Field | Type | Description |
|---|
data | array<StrategistReportSummary> 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/strategist/reports' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"data": [
{
"id": "EXAMPLE_ID",
"report_date": "string",
"report_type": "daily",
"summary_text": "string",
"actions_count": 0,
"data_as_of": {},
"delivered_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 /strategist/reports/{id} Available
#Get a strategist report
The full report: conclusions, actions with rationale, and evidence. Competitor names are hidden; the analytics snapshot, model and cost are not returned.
- Scopes
strategist:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 The report.
Parameters
| Field | Type | Description |
|---|
id | string required | In: path. Report id. |
Response body
| Field | Type | Description |
|---|
id | string required | |
report_date | string required | |
report_type | string required | Values: daily weekly |
summary_text | string required | |
data_as_of | object required | Data freshness: for each metric (key) the date of the latest data, YYYY-MM-DD; the snapshot key is the date of the analytics snapshot the report is built on. Empty if there is no snapshot. |
highlights | array<object> required | What goes well. |
concerns | array<object> required | What is concerning. |
actions | array<StrategistReportAction> required | |
evidence | StrategistEvidence required | |
Examples
Request
curl -X GET 'https://wfacademy.org/api/public/v1/strategist/reports/EXAMPLE_ID' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"id": "EXAMPLE_ID",
"report_date": "string",
"report_type": "daily",
"summary_text": "string",
"data_as_of": {},
"highlights": [
{}
],
"concerns": [
{}
],
"actions": [
{
"title": "string",
"priority": "string",
"rationale": "string",
"target_ref": null,
"expected_effect": null,
"check_after_days": null,
"basis": "observed_pattern"
}
],
"evidence": {
"actions": [
{
"index": null,
"status": null,
"basis": null,
"items": null
}
],
"validation": {
"refs_valid": false,
"excerpts_valid": false,
"relevance_checked": false,
"limitations": [
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
GET /strategist/topics Available
#List topics
Article topics proposed by the strategist, by descending trend score. include_deleted=true returns 422 not_supported: deleted topics are not stored.
- Scopes
strategist:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 A page of topics.
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. Topic state. |
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<StrategistTopic> 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/strategist/topics' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"data": [
{
"id": "EXAMPLE_ID",
"title": null,
"rationale": null,
"trend_score": null,
"source": "string",
"status": "proposed",
"cluster_id": null,
"generated_article_id": null,
"proposed_at": null,
"decided_at": null,
"expires_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 /strategist/topics/{id} Available
#Get a topic
A queue topic. If an article was created from it, its id is in generated_article_id.
- Scopes
strategist:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 The topic.
Parameters
| Field | Type | Description |
|---|
id | string required | In: path. Topic id. |
Response body
| Field | Type | Description |
|---|
id | string required | |
title | string required, may be null | |
rationale | string required, may be null | Why the topic is proposed. For competitor-sourced topics domains are hidden. |
trend_score | number required, may be null | Trend score; null — not scored. |
source | string required | Where the topic comes from: planner, competitors, chat and others. |
status | string required | proposed — awaiting a decision; approved — approved; generating — the article is being created; generated — the article is created; rejected — rejected; duplicate — a duplicate; expired — expired. Values: proposed approved generating generated rejected duplicate expired |
cluster_id | string required, may be null | |
generated_article_id | string required, may be null | The id of the created article (GET /articles/{id}). |
proposed_at | string required, may be null | ISO 8601 UTC. |
decided_at | string required, may be null | ISO 8601 UTC. |
expires_at | string required, may be null | ISO 8601 UTC. |
Examples
Request
curl -X GET 'https://wfacademy.org/api/public/v1/strategist/topics/EXAMPLE_ID' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"id": "EXAMPLE_ID",
"title": "string",
"rationale": "string",
"trend_score": 0,
"source": "string",
"status": "proposed",
"cluster_id": "EXAMPLE_ID",
"generated_article_id": "EXAMPLE_ID",
"proposed_at": "2026-10-11T09:00:00Z",
"decided_at": "2026-10-11T09:00:00Z",
"expires_at": "2026-10-11T09:00:00Z"
}
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
GET /strategist/actions Available
#List strategist actions of your sessions
Actions the strategist proposed in sessions of THIS integration, newest first. Actions of staff in the cabinet and of other integrations are not visible. A proposal lives 7 days and then becomes expired.
- Scopes
strategist:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 A page of actions.
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. Action state. |
session_id | string optional | In: query. Only the actions of this session (uuid). |
Response body
| Field | Type | Description |
|---|
data | array<StrategistAction> 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/strategist/actions' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"data": [
{
"id": "EXAMPLE_ID",
"session_id": null,
"type": "string",
"title": "string",
"status": "proposed",
"result": null,
"error": null,
"created_at": null,
"decided_at": null,
"expires_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 /strategist/actions/{id} Available
#Get a strategist action
An action from your session: state, result (the created topic) or the failure reason. Another integration action returns 404.
- Scopes
strategist:read
- Rate limit
- read
- Idempotency
- not required
- Successful response
200 The action.
Parameters
| Field | Type | Description |
|---|
id | string required | In: path. Action id. |
Response body
| Field | Type | Description |
|---|
id | string required | |
session_id | string required, may be null | The conversation session in which the action was proposed. |
type | string required | The action kind. In v1 only propose_topic. |
title | string required | The title of the proposed topic. |
status | string required | proposed — awaiting confirmation; confirmed — confirmed, running; executed — done; failed — failed; cancelled — cancelled; expired — expired (7 days). Values: proposed confirmed executed failed cancelled expired |
result | object required, may be null | The result of an executed action: the created topic. |
result.topic_id | string required | |
error | object required, may be null | The failure reason when status = failed. |
error.code | string required | |
error.message | string required | |
created_at | string required, may be null | ISO 8601 UTC. |
decided_at | string required, may be null | ISO 8601 UTC. |
expires_at | string required, may be null | When the wait ends: creation + 7 days. ISO 8601 UTC. |
Examples
Request
curl -X GET 'https://wfacademy.org/api/public/v1/strategist/actions/EXAMPLE_ID' \
-H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Response 200
{
"id": "EXAMPLE_ID",
"session_id": "EXAMPLE_ID",
"type": "string",
"title": "string",
"status": "proposed",
"result": {
"topic_id": "EXAMPLE_ID"
},
"error": {
"code": "string",
"message": "string"
},
"created_at": "2026-10-11T09:00:00Z",
"decided_at": "2026-10-11T09:00:00Z",
"expires_at": "2026-10-11T09:00:00Z"
}
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