GET /v1/decisions
Liste auditorias de roteamento por sessão, janela de tempo, estratégia, modelo, ou um lote específico de request ids. Projetado para puxar todas as decisões de uma conversa para um notebook, ou para queries ad-hoc de auditabilidade a partir de um SIEM.
O endpoint de listagem nunca produz uma linha decision_trace própria.
Endpoint
Seção intitulada “Endpoint”GET https://api.floopy.ai/v1/decisionsAutenticação
Seção intitulada “Autenticação”Authorization: Bearer <your-floopy-api-key>- Permissão:
read_permission. - Flag de plano:
has_audit_api. Disponível nos planos Free e Pro. - Atrás do kill switch de canary por organização.
Query parameters
Seção intitulada “Query parameters”Pelo menos um de session_id, (from, to), ou request_ids é obrigatório.
| Field | Type | Required | Constraints | Default |
|---|---|---|---|---|
session_id | string | Conditional | O session id enviado no header floopy-session-id. | — |
from | ISO8601 | Conditional | Início inclusivo do intervalo de tempo. | — |
to | ISO8601 | Conditional | Fim inclusivo do intervalo de tempo. to - from ≤ 31 dias. | — |
request_ids | array of UUID | Conditional | Até 50 ids. Sempre avaliado em conjunto com o predicado da organização do chamador. | — |
routing_strategy | string | No | Um de feedback_driven, smart_cost, fallback, round_robin, weighted, latency_based, legacy_model. | — |
model | string | No | Filtra por um id de modelo específico (ex.: gpt-4o). | — |
min_confidence | number | No | Limite inferior, [0.0, 1.0]. Filtra em confidence >= min_confidence. | — |
max_confidence | number | No | Limite superior, [0.0, 1.0]. | — |
limit | integer | No | 1..=200. | 50 |
cursor | string | No | Token opaco de continuação assinado por HMAC, retornado por uma resposta anterior. | — |
O body da resposta tem semântica deny_unknown_fields — chaves de query desconhecidas retornam 400 invalid_request.
Resposta (200)
Seção intitulada “Resposta (200)”{ "items": [ { "request_id": "0c4a1d3f-7bea-4a1f-8b6e-2c0a8e4d3f10", "request_created_at": "2026-05-05T17:42:11Z", "session_id": "sess_demo_1", "routing_strategy": "feedback_driven", "phase": "auto", "weights": { "session": 0.5, "auto": 0.3, "manual": 0.1, "benchmark": 0.1 }, "candidates": [{ "provider": "openai", "model": "gpt-5.4-mini", "score": 0.81 }], "filtered": [], "winner": { "provider": "openai", "model": "gpt-5.4-mini" }, "reason": "dispatched", "confidence": 0.78, "confidence_reason": "ok", "exploration_rate_effective": 0.05, "used_shared_pool_prior": false, "outcome": { "status": 200, "latency_ms": 412, "cost_micro_usd": 230, "cache_hit": false, "threat_blocked": false, "fallback_used": false } } ], "next_cursor": "eyJ0cyI6IjIwMjYtMDUtMDVUMTc6NDI6MTFaIiwiaWQiOiIwYzRhMWQzZi03YmVhLTRhMWYtOGI2ZS0yYzBhOGU0ZDNmMTAifQ.RUVhSV9..."}| Field | Type | Description |
|---|---|---|
items | array | Página de decisões, mesmo formato de GET /v1/decisions/{request_id}. |
next_cursor | string | null | Token opaco a ser passado de volta como cursor para a próxima página. null quando não há mais resultados. |
O cursor é assinado por HMAC usando o pepper secreto do gateway. Cursors adulterados são rejeitados com 400 invalid_cursor. A rotação do pepper invalida todos os cursors em circulação — clientes devem reiniciar a paginação sem cursor após receber 400 invalid_cursor.
| Status | error code | Quando |
|---|---|---|
400 | missing_filter | Nenhum de session_id, (from, to), ou request_ids foi informado. |
400 | range_too_wide | to - from > 31 days. |
400 | request_ids_too_many | request_ids tem mais de 50 entradas. |
400 | invalid_cursor | O cursor falhou na verificação HMAC, ou o pepper foi rotacionado. |
400 | invalid_request | Chave de query desconhecida, UUID malformado em request_ids, ou tipo inválido. |
403 | read_permission / plan_required | Permissão ou flag de plano ausente. |
429 | rate_limited | Acima do orçamento por organização ou por key. |
5xx | internal | Falha upstream. |
Exemplo curl
Seção intitulada “Exemplo curl”curl -s -H "Authorization: Bearer $FLOOPY_API_KEY" \ "https://api.floopy.ai/v1/decisions?session_id=sess_demo_1&limit=100"Paginando por uma janela de tempo:
CURSOR=""while :; do RESP=$(curl -s -H "Authorization: Bearer $FLOOPY_API_KEY" \ "https://api.floopy.ai/v1/decisions?from=2026-05-01T00:00:00Z&to=2026-05-05T00:00:00Z&limit=200${CURSOR:+&cursor=$CURSOR}") echo "$RESP" | jq -c '.items[]' CURSOR=$(echo "$RESP" | jq -r '.next_cursor // empty') [ -z "$CURSOR" ] && breakdoneRate limits
Seção intitulada “Rate limits”- 60 requests / minuto / organização.
- 30 requests / minuto / API key.
Mais baixo que o endpoint de decisão única porque cada chamada é mais pesada.
Veja também
Seção intitulada “Veja também”GET /v1/decisions/{request_id}— consulta de uma decisão única.- GET /v1/export/decisions — export em massa, até janelas de 90 dias.
- Metodologia de Confidence.