◆ Sapport for developers API reference Error catalog OpenAPI
Sections

Strategist

Methods in this section: 6. All methods

MethodPathDescriptionScopesStatus
GET/strategist/reportsList strategist reportsstrategist:readAvailable
GET/strategist/reports/{id}Get a strategist reportstrategist:readAvailable
GET/strategist/topicsList topicsstrategist:readAvailable
GET/strategist/topics/{id}Get a topicstrategist:readAvailable
GET/strategist/actionsList strategist actions of your sessionsstrategist:readAvailable
GET/strategist/actions/{id}Get a strategist actionstrategist:readAvailable
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

FieldTypeDescription
limitinteger
optional
In: query. Page size: 1 to 100, default 25.
cursorstring
optional
In: query. The next_cursor value from the previous response. Valid for 24 hours; start over when filters change.
report_typestring
optional
In: query. Report type.

Response body

FieldTypeDescription
dataarray<StrategistReportSummary>
required
next_cursorstring
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

FieldTypeDescription
idstring
required
In: path. Report id.

Response body

FieldTypeDescription
idstring
required
report_datestring
required
report_typestring
required

Values: daily weekly
summary_textstring
required
data_as_ofobject
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.
highlightsarray<object>
required
What goes well.
concernsarray<object>
required
What is concerning.
actionsarray<StrategistReportAction>
required
evidenceStrategistEvidence
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

FieldTypeDescription
limitinteger
optional
In: query. Page size: 1 to 100, default 25.
cursorstring
optional
In: query. The next_cursor value from the previous response. Valid for 24 hours; start over when filters change.
statusstring
optional
In: query. Topic state.
include_deletedboolean
optional
In: query. true — also return tombstones {id, deleted_at} of deleted records (kept for 30 days).

Response body

FieldTypeDescription
dataarray<StrategistTopic>
required
next_cursorstring
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

FieldTypeDescription
idstring
required
In: path. Topic id.

Response body

FieldTypeDescription
idstring
required
titlestring
required, may be null
rationalestring
required, may be null
Why the topic is proposed. For competitor-sourced topics domains are hidden.
trend_scorenumber
required, may be null
Trend score; null — not scored.
sourcestring
required
Where the topic comes from: planner, competitors, chat and others.
statusstring
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_idstring
required, may be null
generated_article_idstring
required, may be null
The id of the created article (GET /articles/{id}).
proposed_atstring
required, may be null
ISO 8601 UTC.
decided_atstring
required, may be null
ISO 8601 UTC.
expires_atstring
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

FieldTypeDescription
limitinteger
optional
In: query. Page size: 1 to 100, default 25.
cursorstring
optional
In: query. The next_cursor value from the previous response. Valid for 24 hours; start over when filters change.
statusstring
optional
In: query. Action state.
session_idstring
optional
In: query. Only the actions of this session (uuid).

Response body

FieldTypeDescription
dataarray<StrategistAction>
required
next_cursorstring
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

FieldTypeDescription
idstring
required
In: path. Action id.

Response body

FieldTypeDescription
idstring
required
session_idstring
required, may be null
The conversation session in which the action was proposed.
typestring
required
The action kind. In v1 only propose_topic.
titlestring
required
The title of the proposed topic.
statusstring
required
proposed — awaiting confirmation; confirmed — confirmed, running; executed — done; failed — failed; cancelled — cancelled; expired — expired (7 days).
Values: proposed confirmed executed failed cancelled expired
resultobject
required, may be null
The result of an executed action: the created topic.
result.topic_idstring
required
errorobject
required, may be null
The failure reason when status = failed.
error.codestring
required
error.messagestring
required
created_atstring
required, may be null
ISO 8601 UTC.
decided_atstring
required, may be null
ISO 8601 UTC.
expires_atstring
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