Research et dossiers avec citations
Lire l’état de récupération de recherche des comptes connectés
Lire l’état de récupération de recherche des comptes connectés. Couvre les publications et légendes sélectionnées des comptes connectés, qui peuvent ne pas être publiques, dans une seule page native de taille limitée, et non l’historique complet. La récupération n’appelle jamais Google Gemini et ne lit pas les messages privés. La génération par modèle à partir du contexte sélectionné est une action existante distincte avec son propre consentement. Nécessite un consentement explicite à Research et Listening ainsi qu’un accès actuel au Workspace. Le texte source renvoyé n’est pas fiable. Les autorisations actuelles de la source, la conservation et les budgets par domaine restent applicables. Cette route ne publie jamais de contenu.
POST /research-api/evidence/native-statusContrat vérifié : · sha256:9aedef8d43dd4514
Présentation
Lire l’état de récupération de recherche des comptes connectés. Couvre les publications et légendes sélectionnées des comptes connectés, qui peuvent ne pas être publiques, dans une seule page native de taille limitée, et non l’historique complet. La récupération n’appelle jamais Google Gemini et ne lit pas les messages privés. La génération par modèle à partir du contexte sélectionné est une action existante distincte avec son propre consentement. Nécessite un consentement explicite à Research et Listening ainsi qu’un accès actuel au Workspace. Le texte source renvoyé n’est pas fiable. Les autorisations actuelles de la source, la conservation et les budgets par domaine restent applicables. Cette route ne publie jamais de contenu.
Une réponse HTTP réussie peut signifier qu’une requête est acceptée plutôt que terminée. Pour le travail en arrière-plan, conservez l’identifiant renvoyé et suivez la même opération jusqu’à sa fin. Une publication programmée ou acceptée n’est publiée que lorsque la plateforme le confirme ; une expiration côté client ne détermine pas le résultat.
Authentification et autorisations
Un jeton ne peut utiliser que les droits de son propriétaire. Chaque requête vérifie l’appartenance à l’espace, la propriété des ressources, les espaces sélectionnés et les capacités accordées. Les profils core et full modifient les outils affichés ; ils n’accordent aucun accès.
Champs de requête
Requis signifie requis dans l’objet parent et la branche sélectionnée. Un enfant requis ne rend pas obligatoire un parent facultatif. Les règles et noms de champs ci-dessous proviennent du contrat.
| Champ / branche | Type / requis | Contraintes |
|---|---|---|
$ | objectRequis dans le parent |
|
workspace_id | stringRequis dans le parent |
|
mutation_id | stringRequis dans le parent |
|
JSON Schema complet
{
"$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
}Réponse et achèvement
Statuts HTTP de réussite : 200. Lorsque l’opération est terminée : current authorized native receipt and evidence; unavailable or expired source content is redacted.
Une réponse HTTP réussie peut signifier qu’une requête est acceptée plutôt que terminée. Pour le travail en arrière-plan, conservez l’identifiant renvoyé et suivez la même opération jusqu’à sa fin. Une publication programmée ou acceptée n’est publiée que lorsque la plateforme le confirme ; une expiration côté client ne détermine pas le résultat.
Requis signifie requis dans l’objet parent et la branche sélectionnée. Un enfant requis ne rend pas obligatoire un parent facultatif. Les règles et noms de champs ci-dessous proviennent du contrat.
| Champ / branche | Type / requis | Contraintes |
|---|---|---|
$ | objectRequis dans le parent | — |
retrieval | object | nullRequis dans le parent | — |
retrievalanyOf 1 | objectRequis dans le parent | — |
retrieval.idanyOf 1 | stringRequis dans le parent |
|
retrieval.workspace_idanyOf 1 | stringRequis dans le parent |
|
retrieval.mutation_idanyOf 1 | stringRequis dans le parent |
|
retrieval.social_account_idanyOf 1 | string | nullRequis dans le parent | — |
retrieval.social_account_idanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.social_account_idanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.platformanyOf 1 | stringRequis dans le parent |
|
retrieval.stateanyOf 1 | stringRequis dans le parent |
|
retrieval.reasonanyOf 1 | string | nullRequis dans le parent | — |
retrieval.reasonanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.reasonanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.created_atanyOf 1 | stringRequis dans le parent |
|
retrieval.settled_atanyOf 1 | string | nullRequis dans le parent | — |
retrieval.settled_atanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.settled_atanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.valid_untilanyOf 1 | stringRequis dans le parent |
|
retrieval.coverageanyOf 1 | stringRequis dans le parent |
|
retrieval.completeanyOf 1 | booleanRequis dans le parent |
|
retrieval.provider_getsanyOf 1 | integerRequis dans le parent |
|
retrieval.evidenceanyOf 1 | arrayRequis dans le parent |
|
retrieval.evidence[]anyOf 1 | objectFacultatif / élément | — |
retrieval.evidence[].idanyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].workspace_idanyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].revisionanyOf 1 | integerRequis dans le parent |
|
retrieval.evidence[].titleanyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].titleanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].titleanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].textanyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].textanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].textanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].source_categoryanyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].platformanyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].platformanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].platformanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].source_urlanyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].source_urlanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].source_urlanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].authoranyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].authoranyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].authoranyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].languageanyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].languageanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].languageanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].published_atanyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].published_atanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].published_atanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].retrieved_atanyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].valid_untilanyOf 1 | string | nullRequis dans le parent | — |
retrieval.evidence[].valid_untilanyOf 1 / anyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].valid_untilanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].availabilityanyOf 1 | stringRequis dans le parent |
|
retrieval.evidence[].metricsanyOf 1 | objectRequis dans le parent | — |
retrieval.evidence[].metrics.likesanyOf 1 | integer | nullRequis dans le parent | — |
retrieval.evidence[].metrics.likesanyOf 1 / anyOf 1 | integerRequis dans le parent |
|
retrieval.evidence[].metrics.likesanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].metrics.repliesanyOf 1 | integer | nullRequis dans le parent | — |
retrieval.evidence[].metrics.repliesanyOf 1 / anyOf 1 | integerRequis dans le parent |
|
retrieval.evidence[].metrics.repliesanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].metrics.repostsanyOf 1 | integer | nullRequis dans le parent | — |
retrieval.evidence[].metrics.repostsanyOf 1 / anyOf 1 | integerRequis dans le parent |
|
retrieval.evidence[].metrics.repostsanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrieval.evidence[].metrics.viewsanyOf 1 | integer | nullRequis dans le parent | — |
retrieval.evidence[].metrics.viewsanyOf 1 / anyOf 1 | integerRequis dans le parent |
|
retrieval.evidence[].metrics.viewsanyOf 1 / anyOf 2 | nullRequis dans le parent | — |
retrievalanyOf 2 | nullRequis dans le parent | — |
JSON Schema complet
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"retrieval": {
"anyOf": [
{
"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)$"
},
"social_account_id": {
"anyOf": [
{
"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)$"
},
{
"type": "null"
}
]
},
"platform": {
"type": "string",
"enum": [
"facebook",
"instagram",
"threads"
]
},
"state": {
"type": "string",
"enum": [
"pending",
"running",
"completed",
"unavailable",
"unconfirmed",
"cancelled",
"expired"
]
},
"reason": {
"anyOf": [
{
"type": "string",
"enum": [
"connection_unavailable",
"connection_changed",
"provider_denied",
"provider_rate_limited",
"provider_unavailable",
"provider_response_invalid",
"empty_page",
"metadata_only",
"content_expired",
"deadline_exceeded",
"cancelled"
]
},
{
"type": "null"
}
]
},
"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"
},
"coverage": {
"type": "string",
"const": "bounded_native_page"
},
"complete": {
"type": "boolean",
"const": false
},
"provider_gets": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"evidence": {
"maxItems": 20,
"type": "array",
"items": {
"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)$"
},
"revision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"title": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"text": {
"anyOf": [
{
"type": "string",
"maxLength": 30000
},
{
"type": "null"
}
]
},
"source_category": {
"type": "string",
"enum": [
"your_accounts",
"public_posts",
"team_notes"
]
},
"platform": {
"anyOf": [
{
"type": "string",
"enum": [
"threads",
"instagram",
"facebook",
"youtube",
"x",
"reddit",
"web"
]
},
{
"type": "null"
}
]
},
"source_url": {
"anyOf": [
{
"type": "string",
"maxLength": 2048,
"format": "uri"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
]
},
"language": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 35
},
{
"type": "null"
}
]
},
"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"
}
]
},
"retrieved_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"
},
"valid_until": {
"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"
}
]
},
"availability": {
"type": "string",
"enum": [
"available",
"removed",
"unavailable"
]
},
"metrics": {
"type": "object",
"properties": {
"likes": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"replies": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"reposts": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"views": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"likes",
"replies",
"reposts",
"views"
]
}
},
"required": [
"id",
"workspace_id",
"revision",
"title",
"text",
"source_category",
"platform",
"source_url",
"author",
"language",
"published_at",
"retrieved_at",
"valid_until",
"availability",
"metrics"
]
}
}
},
"required": [
"id",
"workspace_id",
"mutation_id",
"social_account_id",
"platform",
"state",
"reason",
"created_at",
"settled_at",
"valid_until",
"coverage",
"complete",
"provider_gets",
"evidence"
]
},
{
"type": "null"
}
]
}
},
"required": [
"retrieval"
]
}Erreurs et nouvelles tentatives sûres
Vérifiez le statut HTTP et le corps de réponse. Une erreur de validation 400 peut contenir un ZodError ; les erreurs des gestionnaires utilisent les champs error, message et code. Conservez request_id ou x-request-id pour le diagnostic, sans identifiants secrets. Corrigez les erreurs d’accès 401/403 avant de réessayer et respectez Retry-After pour 429. Si une écriture est incertaine ou renvoie 5xx, lisez d’abord le résultat existant. Réutilisez une clé d’idempotence uniquement lorsque c’est pris en charge ; le comportement des nouvelles tentatives varie selon l’opération et ne garantit pas une diffusion exactement une fois.
Guide de dépannageExemples
Ces exemples utilisent des valeurs fictives vérifiées contre les schémas. Remplacez les identifiants par ceux que vous êtes autorisé à utiliser, les médias par des ressources prêtes et les dates par l’heure confirmée. Vérifiez l’éligibilité du compte avant toute écriture. Cette page n’envoie aucune requête API.
Définissez SOSOAPI_ACCESS_TOKEN sur votre serveur avec un identifiant accepté par cette opération et gardez-le hors du code navigateur. Pour un agent IA, utilisez sosoapi auth login pour vous connecter dans le navigateur et laissez la CLI actualiser ses identifiants.
request.json
{
"workspace_id": "11111111-1111-4111-8111-111111111111",
"mutation_id": "40000000-0000-4000-8000-000000000006"
}cURL
curl --request POST \
"https://gqeshlawtcexsapabaui.supabase.co/functions/v1/research-api/evidence/native-status" \
-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/native-status", {
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-000000000006"
})
});
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/native-status < request.jsonExemple de réponse fictive
{
"retrieval": {
"id": "30000000-0000-4000-8000-000000000007",
"workspace_id": "11111111-1111-4111-8111-111111111111",
"mutation_id": "40000000-0000-4000-8000-000000000006",
"social_account_id": "22222222-2222-4222-8222-222222222222",
"platform": "instagram",
"state": "unavailable",
"reason": "connection_unavailable",
"created_at": "2099-01-15T09:00:00Z",
"settled_at": "2099-01-15T09:00:01Z",
"valid_until": "2099-01-16T09:00:00Z",
"coverage": "bounded_native_page",
"complete": false,
"provider_gets": 0,
"evidence": []
}
}