24. Playground (Simulador)#
POST/v1/playground/generate-payload#
Gera um body de exemplo via OpenAI para o endpoint informado. Usado pelo simulador da Console (botao "🎲 Outro exemplo"). Resposta cacheada por 7 dias (cache hit não gasta budget). Modelos default: gpt-5.4-nano (texto) + gpt-image-1-mini (imagem).
Este endpoint não e escopado por instância — a rota e /v1/playground/generate-payload, registrada fora do grupo /v1/instances/{instanceId}/contacts.
Auth: Todos autenticados (JWT ou API Key)
Request:
{
"endpoint": "messages/text",
"context": "casual"
}
| Campo | Tipo | Obrigatório | Descricao |
|---|---|---|---|
endpoint |
string | sim | "messages/text", "messages/image", "messages/audio", "messages/document", "messages/sticker", "messages/video", "messages/poll", "messages/template". Outros valores retornam 400 PLAYGROUND_UNSUPPORTED_KIND. |
context |
string | não | "casual" (default), "business", ou "friendly". Influencia o tom. |
Resposta 200:
{
"body": {"text": "Tudo certo, me confirma quando puder?"},
"generation_id": "gen_a1b2c3d4e5f6...",
"cached": false
}
| Campo | Tipo | Descricao |
|---|---|---|
body |
object | Partial body — o caller faz merge com a template existente. Para messages/image/video/sticker, contem media_url apontando para R2/S3 controlado pela Catcher (nunca URL OpenAI/Meta). |
generation_id |
string | ID curto para correlação em logs (cache hits e misses compartilham o mesmo ID quando o prompt e identico). |
cached |
bool | true quando o body veio do cache (sem call ao OpenAI). |
Erros:
503 PLAYGROUND_DISABLED— OPENAI_API_KEY não configurado neste servidor429 PLAYGROUND_BUDGET_EXCEEDED— limite diário de gasto atingido (default $10/dia)429 PLAYGROUND_RATE_LIMITED— rate limit per-user atingido (30/min ou 200/dia)400 PLAYGROUND_UNSUPPORTED_KIND— endpoint não reconhecido
Nota de seguranca: quando
endpointenvolve imagem, a Catcher baixa a imagem do OpenAI, faz upload para o storage controlado (S3/R2 público ou endpoint autenticado), e devolve apenas a URL Catcher. Nunca expomos URL do OpenAI direto para o consumidor — alinha com a disciplina de proxy/CDN (lesson #29).