Referência dos objetos Session e Event retornados pela Forward Session API.
Objeto Session
Os endpoints Crie, Get, List, Atualize e Archive Session retornam este objeto.
{
"id": "sess_xxx",
"type": "session",
"identity_id": "idn_xxx",
"template": {
"id": "tmpl_support",
"type": "template",
"name": "Customer support assistant",
"model": "ultimate",
"version": 3
},
"source_type": "api",
"status": "idle",
"title": "Customer support conversation",
"incremental_streaming_enabled": true,
"metadata": {
"source": "web",
"biz_id": "ticket_123"
},
"config": {
"environment_variables": {
"API_KEY": "sk-xxx"
}
},
"stats": {
"active_seconds": 30,
"duration_seconds": 3600
},
"usage": {
"credits": 12.5
},
"archived_at": null,
"created_at": "2026-06-22T10:00:00Z",
"updated_at": "2026-06-22T11:00:00Z"
}
|
Campo |
Tipo |
Sempre retornado |
Descrição |
|
|
|
string |
Sim |
ID da sessão com prefixo |
|
|
|
string |
Sim |
Sempre |
|
|
|
string |
Sim |
ID da Forward Identity que identifica o usuário final associado a esta sessão. |
|
|
|
object |
Sim |
Resumo do Forward Template. Consulte a tabela de resumo do template abaixo. |
|
|
|
string |
Sim |
Origem da sessão: |
|
|
|
string |
Sim |
Status de execução da sessão: |
|
|
|
string |
Sim |
Título da sessão. |
|
|
|
boolean |
Sim |
Indica se os eventos de streaming incremental estão ativados para esta sessão. O padrão é |
|
|
|
object |
Não |
Metadados de negócio definidos pelo chamador. |
|
|
|
object |
Não |
Configuração da sessão. Omitido caso nenhuma configuração tenha sido fornecida. |
|
|
|
object |
Não |
Variáveis de ambiente no nível da sessão como pares chave-valor. |
|
|
|
object |
Não |
Estatísticas de uso da sessão. Consulte a tabela de estatísticas da sessão abaixo. |
|
|
|
object |
Não |
Informações de uso. Pode ser omitido se o módulo de faturamento não estiver ativado. |
|
|
|
number |
Não |
Créditos consumidos. |
|
|
|
string \ |
null |
Sim |
Timestamp de arquivamento. Retorna |
|
|
string |
Sim |
Hora de criação no formato RFC 3339. |
|
|
|
string |
Sim |
Hora da última atualização no formato RFC 3339. |
Resumo do template
|
Campo |
Tipo |
Sempre retornado |
Descrição |
|
|
string |
Sim |
ID do Forward Template. |
|
|
string |
Sim |
Sempre |
|
|
string |
Sim |
Nome do template. |
|
|
string |
Sim |
Camada ou identificador do modelo usado pelo template. |
|
|
integer |
Sim |
Número da versão do template. |
Estatísticas da sessão
|
Campo |
Tipo |
Sempre retornado |
Descrição |
|
|
integer |
Não |
Tempo de processamento ativo em segundos. Geralmente |
|
|
integer |
Não |
Duração total da sessão em segundos. Normalmente |
Objeto Event
A API retorna eventos como objetos JSON cujo payload varia conforme o type. Todo evento contém o mesmo conjunto de campos comuns, além de campos de payload específicos do tipo.
{
"id": "evt_xxx",
"type": "agent.message",
"session_id": "sess_xxx",
"content": [
{
"type": "text",
"text": "Here is the analysis result."
}
],
"processed_at": "2026-06-22T11:00:03Z"
}
|
Campo |
Tipo |
Sempre retornado |
Descrição |
|
|
string |
Sim |
ID do evento com prefixo |
|
|
string |
Sim |
Tipo do evento. |
|
|
string |
Sim |
ID da sessão à qual este evento pertence. |
|
|
string |
Não |
Hora de processamento do evento no formato RFC 3339. Pode estar ausente em certos eventos gerados pelo agente ou em eventos incrementais. |
Os campos de payload permitidos para cada tipo de evento estão listados abaixo. A tabela não repete os campos comuns id, type, session_id e processed_at.
|
Tipo de evento |
Campos permitidos |
|
|
|
|
|
Nenhum |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nenhum |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nenhum |
|
|
|
|
|
Nenhum |
|
|
|
|
|
|
Tipos de evento graváveis pelo cliente
O endpoint POST /api/v1/forward/sessions/{session_id}/events aceita apenas os tipos de evento abaixo.
|
Tipo |
Campos obrigatórios |
Descrição |
|
|
|
Mensagem do usuário. |
|
|
Nenhum |
Solicita a interrupção do turno atual. |
|
|
|
Confirmação de chamada de ferramenta. |
|
|
|
Retorna o resultado de uma ferramenta integrada. |
|
|
|
Retorna o resultado de uma ferramenta personalizada definida pelo cliente. |
|
|
|
Define o resultado desejado e sua rubrica de avaliação. |
Embora system.message seja um tipo de evento público, o Forward não o aceita como evento gravável pelo cliente.
Tipos de evento públicos
Ao consultar o histórico de eventos ou assinar o stream SSE, você pode receber qualquer um dos seguintes tipos de evento públicos:
user.message, user.interrupt, user.tool_confirmation, user.tool_result, user.custom_tool_result, user.define_outcome, system.message, agent.message, agent.thinking, agent.message_start, agent.content_block_start, agent.content_block_delta, agent.content_block_stop, agent.message_delta, agent.message_stop, agent.tool_use, agent.tool_result, agent.custom_tool_use, agent.mcp_tool_use, agent.mcp_tool_result, agent.artifact_delivered, session.status_running, session.status_idle, session.status_terminated, session.error e session.updated.
Eventos de streaming incremental
O campo incremental_streaming_enabled, definido na criação da sessão, controla a exposição dos eventos de streaming incremental. Parâmetros de requisição em consultas de histórico ou assinaturas SSE não afetam esse comportamento:
true: O stream de eventos retorna a saída parcial do assistente antes doagent.messagefinal. Consultas de histórico também retornam esses eventos incrementais.falseou omitido: Modo padrão. Retorna apenas eventos públicos completos, sem emissão de eventos incrementais.
Mesmo com o streaming incremental ativado, o sistema ainda retorna o agent.message completo ao final. Use os eventos incrementais para renderização imediata e considere o agent.message final como source de verdade para persistência e reconciliação de exibição.
Somente os seis tipos de evento de nível superior a seguir são incrementais:
|
Tipo de evento |
Campos principais |
Descrição |
|
|
|
Marca o início de uma mensagem do assistente. |
|
|
|
Indica o início de um bloco de conteúdo, como texto, raciocínio ou uso de ferramenta. |
|
|
|
Entrega um fragmento incremental do bloco de conteúdo no |
|
|
|
Marca o fim do bloco de conteúdo no |
|
|
|
Fornece incrementos no nível da mensagem, como |
|
|
|
Sinaliza o término de uma mensagem do assistente. |
text_delta, thinking_delta, signature_delta, input_json_delta e tool_output_delta não são tipos de evento de nível superior. Eles aparecem apenas como valores de agent.content_block_delta.delta.type.
|
delta.type |
Campo |
Descrição |
|
|
|
Fragmento de saída de texto. Concatene |
|
|
|
Fragmento da saída de raciocínio do modelo ou provedor. |
|
|
|
Fragmento de assinatura para um bloco de raciocínio. Emitido apenas quando há uma assinatura presente. |
|
|
|
Fragmento do json de entrada da ferramenta. |
|
|
variável |
Reservado para futuro streaming de saída de ferramenta. Atualmente, o |
Exemplo de agent.content_block_delta:
{
"id": "evt_delta_xxx",
"type": "agent.content_block_delta",
"session_id": "sess_xxx",
"message_id": "msg_xxx",
"index": 0,
"delta": {
"type": "text_delta",
"text": "Here"
},
"processed_at": "2026-06-22T11:00:01Z"
}
Regras para análise de eventos incrementais:
Tanto a linha SSE
event:quanto o campo jsondata.typeusam os tipos de evento públicos.agent.content_block_delta.indexdistingue múltiplos blocos de conteúdo.processed_atpode estar ausente em eventos incrementais. Trate-o como opcional.Após uma interrupção de rede, use o cabeçalho
Last-Event-IDcom o último ID de evento recebido para retomar o stream.Defina
include_thinking=falsefiltrathinking_delta,signature_deltae eventos reconhecíveis de início ou fim de bloco de conteúdo de raciocínio.Defina
include_tool_calls=falsefiltrainput_json_delta,tool_output_deltae eventos reconhecíveis de início ou fim de bloco de conteúdo de ferramenta.