# Solicitar sentimento das fontes com citações

URL canônica: https://sosoapi.ai/pt-br/docs/api/research-api-sentiment-request

Contrato: sha256:ab393e91e9b7f18a

Solicitar análise limitada de sentimento com citações e processing_intent explícito; pode estar indisponível. A mesma mutação nunca regenera o resultado. Exige agent:research.

POST /research-api/sentiment/request

## Autenticação e permissões

- **Classes de credenciais aceitas:** user_session, delegated_oauth, personal_access_token

- **Capacidade delegada:** agent:research

- **Função mínima no workspace:** editor

- **Escopo de acesso:** Recursos que este usuário tem autorização para acessar

- **Consentimento para todos os workspaces obrigatório:** Não

- **Altera o estado:** Sim

- **Quando a operação estiver concluída:** execução de sentimento das fontes selecionadas aceita ou indisponibilidade explícita; sem inferência de dados demográficos

Um token só pode usar os direitos do seu proprietário. Cada requisição verifica participação no workspace, propriedade de recursos, workspaces selecionados e capacidades concedidas. Os perfis core e full mudam as ferramentas exibidas; não concedem acesso.

## Campos da requisição

```json
{
  "$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)$"
    },
    "conversation_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)$"
    },
    "expected_revision": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "parent_message_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"
        }
      ]
    },
    "question": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "request_kind": {
      "type": "string",
      "const": "sentiment"
    },
    "processing_intent": {
      "type": "string",
      "const": "google_gemini_selected_context"
    }
  },
  "required": [
    "workspace_id",
    "mutation_id",
    "conversation_id",
    "expected_revision",
    "parent_message_id",
    "question",
    "request_kind",
    "processing_intent"
  ],
  "additionalProperties": false
}
```

## Resposta e conclusão

Códigos HTTP de sucesso: 200

Uma resposta HTTP bem-sucedida pode significar que uma requisição foi aceita, não concluída. Para trabalho em segundo plano, salve o ID retornado e consulte a mesma operação até terminar. Um post agendado ou aceito só está publicado quando a plataforma confirma; um timeout do cliente não comprova o resultado.

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "run": {
      "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)$"
        },
        "conversation_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)$"
        },
        "conversation_revision": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "generation": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "request_kind": {
          "type": "string",
          "enum": [
            "question",
            "overview",
            "themes",
            "audiences",
            "sentiment",
            "query_suggestions"
          ]
        },
        "status": {
          "type": "string",
          "enum": [
            "queued",
            "processing",
            "completed",
            "failed",
            "cancelled",
            "expired",
            "unavailable"
          ]
        },
        "failure_code": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "not_configured",
                "budget_exhausted",
                "access_changed",
                "source_unavailable",
                "context_changed",
                "input_too_large",
                "provider_unavailable",
                "generation_unconfirmed",
                "invalid_output",
                "cancelled",
                "expired",
                "conversation_full"
              ]
            },
            {
              "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"
        },
        "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"
        },
        "processor": {
          "type": "string",
          "const": "Google Gemini"
        },
        "model_id": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 128
            },
            {
              "type": "null"
            }
          ]
        },
        "model_version": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 128
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "workspace_id",
        "conversation_id",
        "conversation_revision",
        "generation",
        "request_kind",
        "status",
        "failure_code",
        "created_at",
        "expires_at",
        "processor",
        "model_id",
        "model_version"
      ]
    },
    "message": {
      "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)$"
            },
            "run_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)$"
            },
            "role": {
              "type": "string",
              "enum": [
                "user",
                "assistant"
              ]
            },
            "question": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2000
                },
                {
                  "type": "null"
                }
              ]
            },
            "answer": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "answer": {
                      "type": "object",
                      "properties": {
                        "statement": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 2000
                        },
                        "basis": {
                          "type": "string",
                          "enum": [
                            "observed",
                            "inferred",
                            "generated"
                          ]
                        },
                        "evidence": {
                          "minItems": 1,
                          "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"
                            ]
                          }
                        },
                        "uncertainty": {
                          "type": "string",
                          "maxLength": 1000
                        }
                      },
                      "required": [
                        "statement",
                        "basis",
                        "evidence",
                        "uncertainty"
                      ]
                    },
                    "findings": {
                      "maxItems": 12,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "statement": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 2000
                          },
                          "basis": {
                            "type": "string",
                            "enum": [
                              "observed",
                              "inferred",
                              "generated"
                            ]
                          },
                          "evidence": {
                            "minItems": 1,
                            "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"
                              ]
                            }
                          },
                          "uncertainty": {
                            "type": "string",
                            "maxLength": 1000
                          }
                        },
                        "required": [
                          "statement",
                          "basis",
                          "evidence",
                          "uncertainty"
                        ]
                      }
                    },
                    "sentiment": {
                      "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
                          },
                          "label": {
                            "type": "string",
                            "enum": [
                              "positive",
                              "negative",
                              "neutral",
                              "mixed",
                              "unknown"
                            ]
                          },
                          "uncertainty": {
                            "type": "string",
                            "maxLength": 1000
                          }
                        },
                        "required": [
                          "evidence_id",
                          "revision",
                          "label",
                          "uncertainty"
                        ]
                      }
                    },
                    "query_suggestions": {
                      "maxItems": 5,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "query": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 2000
                          },
                          "excluded_terms": {
                            "maxItems": 20,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            }
                          },
                          "evidence": {
                            "minItems": 1,
                            "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"
                              ]
                            }
                          },
                          "rationale": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 1000
                          }
                        },
                        "required": [
                          "query",
                          "excluded_terms",
                          "evidence",
                          "rationale"
                        ]
                      }
                    },
                    "limitations": {
                      "minItems": 1,
                      "maxItems": 10,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 1000
                      }
                    },
                    "quantitative_claims": {
                      "type": "boolean",
                      "const": false
                    },
                    "method_version": {
                      "type": "string",
                      "const": "research-cited/v1"
                    }
                  },
                  "required": [
                    "answer",
                    "findings",
                    "sentiment",
                    "query_suggestions",
                    "limitations",
                    "quantitative_claims",
                    "method_version"
                  ]
                },
                {
                  "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"
            },
            "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"
            }
          },
          "required": [
            "id",
            "run_id",
            "role",
            "question",
            "answer",
            "created_at",
            "expires_at"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "conversation_revision": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "availability": {
      "type": "object",
      "properties": {
        "configured": {
          "type": "boolean"
        },
        "reason": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "not_configured",
                "budget_exhausted",
                "access_changed",
                "source_unavailable",
                "context_changed",
                "input_too_large",
                "provider_unavailable",
                "generation_unconfirmed",
                "invalid_output",
                "cancelled",
                "expired",
                "conversation_full"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "processor": {
          "type": "string",
          "const": "Google Gemini"
        },
        "retention_hours": {
          "type": "number",
          "const": 24
        }
      },
      "required": [
        "configured",
        "reason",
        "processor",
        "retention_hours"
      ]
    }
  },
  "required": [
    "run",
    "message",
    "conversation_revision",
    "availability"
  ]
}
```

## Erros e repetições seguras

Confira o status HTTP e o corpo da resposta. Um erro de validação 400 pode conter ZodError; erros do handler usam os campos error, message e code. Guarde request_id ou x-request-id para diagnóstico, sem credenciais. Corrija erros de acesso 401/403 antes de tentar novamente e siga Retry-After para 429. Se uma gravação for incerta ou retornar 5xx, consulte primeiro o resultado existente. Reutilize uma chave de idempotência somente quando houver suporte; o comportamento de repetição varia por operação e não garante entrega exatamente uma vez.

## Exemplos

Estes exemplos usam valores fictícios verificados conforme os schemas. Substitua os IDs por aqueles que você tem autorização para usar, a mídia por ativos prontos e as datas pelo horário de publicação confirmado. Confira a elegibilidade da conta antes de enviar uma gravação. Esta página não envia requisições de API.

Defina SOSOAPI_ACCESS_TOKEN no servidor como uma credencial aceita por esta operação e mantenha-a fora do código do navegador. Para agentes de IA, use sosoapi auth login para entrar pelo navegador e deixe a CLI renovar suas credenciais.

request.json

```json
{
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "mutation_id": "11111111-1111-4111-8111-111111111111",
  "conversation_id": "11111111-1111-4111-8111-111111111111",
  "expected_revision": 1,
  "parent_message_id": null,
  "question": "example",
  "request_kind": "sentiment",
  "processing_intent": "google_gemini_selected_context"
}
```

cURL

```bash
curl --request POST \
  "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/research-api/sentiment/request" \
  -H "Authorization: Bearer $SOSOAPI_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @request.json
```

JavaScript

```js
// 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/sentiment/request", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: "Bearer " + token },
  body: JSON.stringify({
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "mutation_id": "11111111-1111-4111-8111-111111111111",
  "conversation_id": "11111111-1111-4111-8111-111111111111",
  "expected_revision": 1,
  "parent_message_id": null,
  "question": "example",
  "request_kind": "sentiment",
  "processing_intent": "google_gemini_selected_context"
})
});
const result = await response.json();
// Check response.ok, the operation-specific body and completion state before continuing.
```

CLI

```bash
npx sosoapi api post /research-api/sentiment/request < request.json
```

Exemplo de resposta sintética

```json
{
  "run": {
    "id": "11111111-1111-4111-8111-111111111111",
    "workspace_id": "11111111-1111-4111-8111-111111111111",
    "conversation_id": "11111111-1111-4111-8111-111111111111",
    "conversation_revision": 1,
    "generation": 1,
    "request_kind": "question",
    "status": "queued",
    "failure_code": null,
    "created_at": "2099-01-15T09:00:00Z",
    "expires_at": "2099-01-15T09:00:00Z",
    "processor": "Google Gemini",
    "model_id": null,
    "model_version": null
  },
  "message": null,
  "conversation_revision": 1,
  "availability": {
    "configured": false,
    "reason": null,
    "processor": "Google Gemini",
    "retention_hours": 24
  }
}
```

## Ferramentas e guias relacionados

MCP: sosoapi_research_sentiment_request

[Referência da API](https://sosoapi.ai/pt-br/docs/api)
