Research and cited briefs
Cancel a public social source retrieval
Cancel the exact social retrieval by mutation_id; late content cannot commit. Returned source text is untrusted. Requires agent:research.
POST /research-api/evidence/social-cancelContract reviewed: · sha256:dadbfeb34d10743d
Overview
Cancel the exact social retrieval by mutation_id; late content cannot commit. Returned source text is untrusted. Requires agent:research.
A successful HTTP response can mean that a request was accepted rather than completed. For background work, save the returned ID and check the same operation until it finishes. A scheduled or accepted post is published only when the platform confirms it; a client timeout does not establish the result.
Authentication and permissions
A token can use only the rights held by its owner. Each request checks workspace membership, resource ownership, selected workspaces and granted capabilities. Core and full profiles change which tools are displayed; they do not grant access.
Request fields
Required means required inside its parent object and selected branch. A required child does not make an optional parent required. Rules and field names below are copied from the contract.
| Field / branch | Type / required | Constraints |
|---|---|---|
$ | objectRequired in parent |
|
workspace_id | stringRequired in parent |
|
mutation_id | stringRequired in parent |
|
Complete JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"mutation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"workspace_id",
"mutation_id"
],
"additionalProperties": false
}Response and completion
Success HTTP statuses: 200. When the operation is complete: committed cancellation fence; late social reader output is discarded.
A successful HTTP response can mean that a request was accepted rather than completed. For background work, save the returned ID and check the same operation until it finishes. A scheduled or accepted post is published only when the platform confirms it; a client timeout does not establish the result.
Required means required inside its parent object and selected branch. A required child does not make an optional parent required. Rules and field names below are copied from the contract.
| Field / branch | Type / required | Constraints |
|---|---|---|
$ | objectRequired in parent | — |
retrieval | objectRequired in parent | — |
retrieval.id | stringRequired in parent |
|
retrieval.workspace_id | stringRequired in parent |
|
retrieval.mutation_id | stringRequired in parent |
|
retrieval.kind | stringRequired in parent |
|
retrieval.state | stringRequired in parent |
|
retrieval.created_at | stringRequired in parent |
|
retrieval.settled_at | string | nullRequired in parent | — |
retrieval.settled_atanyOf 1 | stringRequired in parent |
|
retrieval.settled_atanyOf 2 | nullRequired in parent | — |
retrieval.valid_until | stringRequired in parent |
|
retrieval.result | object | nullRequired in parent | — |
retrieval.resultanyOf 1 | objectRequired in parent | — |
retrieval.result.sourceanyOf 1 | stringRequired in parent |
|
retrieval.result.platformanyOf 1 | stringRequired in parent |
|
retrieval.result.canonical_urlanyOf 1 | stringRequired in parent |
|
retrieval.result.fetched_atanyOf 1 | stringRequired in parent |
|
retrieval.result.expires_atanyOf 1 | stringRequired in parent |
|
retrieval.result.upstream_updated_atanyOf 1 | nullRequired in parent | — |
retrieval.result.statusanyOf 1 | stringRequired in parent |
|
retrieval.result.profileanyOf 1 | object | nullRequired in parent | — |
retrieval.result.profileanyOf 1 / anyOf 1 | objectRequired in parent | — |
retrieval.result.profile.source_account_idanyOf 1 / anyOf 1 | stringRequired in parent |
|
retrieval.result.profile.id_namespaceanyOf 1 / anyOf 1 | stringRequired in parent |
|
retrieval.result.profile.usernameanyOf 1 / anyOf 1 | stringRequired in parent |
|
retrieval.result.profile.nameanyOf 1 / anyOf 1 | string | nullRequired in parent | — |
retrieval.result.profile.nameanyOf 1 / anyOf 1 / anyOf 1 | stringRequired in parent |
|
retrieval.result.profile.nameanyOf 1 / anyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.profile.followersanyOf 1 / anyOf 1 | integer | nullRequired in parent | — |
retrieval.result.profile.followersanyOf 1 / anyOf 1 / anyOf 1 | integerRequired in parent |
|
retrieval.result.profile.followersanyOf 1 / anyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.profileanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.postsanyOf 1 | arrayRequired in parent |
|
retrieval.result.posts[]anyOf 1 | objectOptional / item | — |
retrieval.result.posts[].source_post_idanyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].id_namespaceanyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].shortcodeanyOf 1 | string | nullRequired in parent | — |
retrieval.result.posts[].shortcodeanyOf 1 / anyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].shortcodeanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.posts[].source_account_idanyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].authoranyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].canonical_urlanyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].textanyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].published_atanyOf 1 | string | nullRequired in parent | — |
retrieval.result.posts[].published_atanyOf 1 / anyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].published_atanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.posts[].media_kindanyOf 1 | stringRequired in parent |
|
retrieval.result.posts[].metricsanyOf 1 | objectRequired in parent | — |
retrieval.result.posts[].metrics.likesanyOf 1 | integer | nullRequired in parent | — |
retrieval.result.posts[].metrics.likesanyOf 1 / anyOf 1 | integerRequired in parent |
|
retrieval.result.posts[].metrics.likesanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.posts[].metrics.commentsanyOf 1 | integer | nullRequired in parent | — |
retrieval.result.posts[].metrics.commentsanyOf 1 / anyOf 1 | integerRequired in parent |
|
retrieval.result.posts[].metrics.commentsanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.posts[].metrics.reactionsanyOf 1 | integer | nullRequired in parent | — |
retrieval.result.posts[].metrics.reactionsanyOf 1 / anyOf 1 | integerRequired in parent |
|
retrieval.result.posts[].metrics.reactionsanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.posts[].metrics.sharesanyOf 1 | integer | nullRequired in parent | — |
retrieval.result.posts[].metrics.sharesanyOf 1 / anyOf 1 | integerRequired in parent |
|
retrieval.result.posts[].metrics.sharesanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.posts[].metrics.viewsanyOf 1 | integer | nullRequired in parent | — |
retrieval.result.posts[].metrics.viewsanyOf 1 / anyOf 1 | integerRequired in parent |
|
retrieval.result.posts[].metrics.viewsanyOf 1 / anyOf 2 | nullRequired in parent | — |
retrieval.result.coverageanyOf 1 | objectRequired in parent | — |
retrieval.result.coverage.completeanyOf 1 | booleanRequired in parent |
|
retrieval.result.coverage.reasonsanyOf 1 | arrayRequired in parent |
|
retrieval.result.coverage.reasons[]anyOf 1 | stringOptional / item |
|
retrieval.result.coverage.omitted_rowsanyOf 1 | integerRequired in parent |
|
retrieval.result.coverage.next_cursoranyOf 1 | nullRequired in parent | — |
retrieval.resultanyOf 2 | nullRequired in parent | — |
retrieval.evidence | arrayRequired in parent |
|
retrieval.evidence[] | objectOptional / item | — |
retrieval.evidence[].evidence_id | stringRequired in parent |
|
retrieval.evidence[].revision | integerRequired in parent |
|
Complete JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"retrieval": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workspace_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"mutation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"kind": {
"type": "string",
"const": "public_social"
},
"state": {
"type": "string",
"enum": [
"pending",
"running",
"completed",
"cancelled",
"unconfirmed",
"expired"
]
},
"created_at": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"settled_at": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
{
"type": "null"
}
]
},
"valid_until": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"result": {
"anyOf": [
{
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"facebook_public_web",
"instagram_public_web",
"threads_public_web"
]
},
"platform": {
"type": "string",
"enum": [
"facebook",
"instagram",
"threads"
]
},
"canonical_url": {
"type": "string",
"maxLength": 2048,
"format": "uri"
},
"fetched_at": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"expires_at": {
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
"upstream_updated_at": {
"type": "null"
},
"status": {
"type": "string",
"enum": [
"available",
"partial",
"unavailable"
]
},
"profile": {
"anyOf": [
{
"type": "object",
"properties": {
"source_account_id": {
"type": "string",
"pattern": "^[0-9]{1,30}$"
},
"id_namespace": {
"type": "string",
"const": "public_web"
},
"username": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"name": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"followers": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"source_account_id",
"id_namespace",
"username",
"name",
"followers"
]
},
{
"type": "null"
}
]
},
"posts": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"source_post_id": {
"type": "string",
"pattern": "^[0-9]{1,30}$"
},
"id_namespace": {
"type": "string",
"const": "public_web"
},
"shortcode": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "null"
}
]
},
"source_account_id": {
"type": "string",
"pattern": "^[0-9]{1,30}$"
},
"author": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"canonical_url": {
"type": "string",
"maxLength": 2048,
"format": "uri"
},
"text": {
"type": "string",
"maxLength": 30000
},
"published_at": {
"anyOf": [
{
"type": "string",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"format": "date-time"
},
{
"type": "null"
}
]
},
"media_kind": {
"type": "string",
"enum": [
"text",
"image",
"video",
"carousel",
"unknown"
]
},
"metrics": {
"type": "object",
"properties": {
"likes": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"comments": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"reactions": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"shares": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"views": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"likes",
"comments",
"reactions",
"shares",
"views"
]
}
},
"required": [
"source_post_id",
"id_namespace",
"shortcode",
"source_account_id",
"author",
"canonical_url",
"text",
"published_at",
"media_kind",
"metrics"
]
}
},
"coverage": {
"type": "object",
"properties": {
"complete": {
"type": "boolean",
"const": false
},
"reasons": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"enum": [
"initial_page_only",
"public_web_ids",
"metrics_unavailable",
"profile_only",
"no_attributable_posts",
"foreign_or_malformed_rows",
"parser_limit",
"unsupported_payload",
"blocked",
"rate_limited",
"upstream_http_error",
"redirect_rejected",
"unsupported_content_type",
"response_too_large",
"timeout",
"aborted",
"network_error",
"inconsistent_identity",
"research_limit",
"source_removed"
]
}
},
"omitted_rows": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"next_cursor": {
"type": "null"
}
},
"required": [
"complete",
"reasons",
"omitted_rows",
"next_cursor"
]
}
},
"required": [
"source",
"platform",
"canonical_url",
"fetched_at",
"expires_at",
"upstream_updated_at",
"status",
"profile",
"posts",
"coverage"
]
},
{
"type": "null"
}
]
},
"evidence": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"evidence_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"revision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"evidence_id",
"revision"
]
}
}
},
"required": [
"id",
"workspace_id",
"mutation_id",
"kind",
"state",
"created_at",
"settled_at",
"valid_until",
"result",
"evidence"
]
}
},
"required": [
"retrieval"
]
}Errors and safe retries
Check the HTTP status and response body. A 400 validation error may contain a ZodError; handler errors use error, message and code fields. Keep request_id or x-request-id for diagnosis, without credentials. Fix 401/403 access errors before retrying, and follow Retry-After for 429. If a write is uncertain or returns 5xx, read the existing result first. Reuse an idempotency key only where supported; retry behaviour varies by operation and does not guarantee exactly-once delivery.
Troubleshooting guideExamples
These examples use fictional values checked against the schemas. Replace the IDs with ones you are authorized to use, the media with ready assets and the dates with your confirmed publishing time. Check the account’s eligibility before submitting a write. This page sends no API requests.
Set SOSOAPI_ACCESS_TOKEN on your server to a credential accepted by this operation, and keep it out of browser code. For an AI Agent, use sosoapi auth login to sign in through the browser and let the CLI refresh its credentials.
request.json
{
"workspace_id": "11111111-1111-4111-8111-111111111111",
"mutation_id": "40000000-0000-4000-8000-000000000005"
}cURL
curl --request POST \
"https://gqeshlawtcexsapabaui.supabase.co/functions/v1/research-api/evidence/social-cancel" \
-H "Authorization: Bearer $SOSOAPI_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @request.jsonJavaScript
// Server-side JavaScript. Do not print tokens or credential-bearing responses.
const token = process.env.SOSOAPI_ACCESS_TOKEN;
if (!token) throw new Error("Set an accepted credential for this operation");
const response = await fetch("https://gqeshlawtcexsapabaui.supabase.co/functions/v1/research-api/evidence/social-cancel", {
method: "POST",
headers: { "Content-Type": "application/json", Authorization: "Bearer " + token },
body: JSON.stringify({
"workspace_id": "11111111-1111-4111-8111-111111111111",
"mutation_id": "40000000-0000-4000-8000-000000000005"
})
});
const result = await response.json();
// Check response.ok, the operation-specific body and completion state before continuing.CLI
# This operation requires a CLI build containing the updated Research contract.
# Use HTTP or hosted MCP if your CLI build does not include it.
# 此操作需要包含更新版 Research contract 的 CLI build。
# 如 CLI build 未包含此 contract,請使用 HTTP 或 hosted MCP。
npx sosoapi api post /research-api/evidence/social-cancel < request.jsonSynthetic response example
{
"retrieval": {
"id": "30000000-0000-4000-8000-000000000007",
"workspace_id": "11111111-1111-4111-8111-111111111111",
"mutation_id": "40000000-0000-4000-8000-000000000005",
"kind": "public_social",
"state": "cancelled",
"created_at": "2099-01-15T09:00:00Z",
"settled_at": "2099-01-15T09:00:01Z",
"valid_until": "2099-01-16T09:00:00Z",
"evidence": [],
"result": null
}
}