{"openapi":"3.0.3","info":{"title":"KaspperVox — API de integração","version":"1.0.0","description":"Autenticação: `Authorization: Bearer <chave de integração>` (criada por um administrador na aba Integrações). Limite de 600 pedidos por minuto por chave (429 + Retry-After). Paginação por cursor: `?after=<next_cursor>&limit=<1..200>`; respostas de lista são `{ data, next_cursor, server_time }` (next_cursor null = fim; use o server_time da 1ª página como próximo `updated_since`). Erros: `{ error, code }`. Webhooks de saída: POST JSON `{ id, event_id, event, created_at, data }` com X-KV-Event, X-KV-Event-Id, X-KV-Delivery, X-KV-Timestamp e X-KV-Signature: t=<unix>,v1=<HMAC-SHA256 de \"t.corpo\" com o segredo do webhook>."},"servers":[{"url":"/api/v1"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Chave de integração (kv_...)"}},"schemas":{"Error":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string"},"code":{"type":"string"},"missing_scope":{"type":"string"}}}}},"tags":[],"paths":{"/conversations":{"get":{"operationId":"listConversations","summary":"Lista conversas (mais antigas primeiro, paginação por cursor)","description":"Escopo: `conversations:read`","security":[{"bearerAuth":[]}],"x-kv-scopes":["conversations:read"],"parameters":[{"name":"status","in":"query","required":false,"description":"Status (nova, em_automacao, em_atendimento, aguardando, finalizada)","schema":{"type":"string"}},{"name":"number_id","in":"query","required":false,"description":"Número/canal de atendimento","schema":{"type":"integer"}},{"name":"phone","in":"query","required":false,"description":"Telefone do contato (com DDI; 10–11 dígitos ganham o 55)","schema":{"type":"string"}},{"name":"updated_since","in":"query","required":false,"description":"Atualizadas desde (ms desde 1970 ou data/hora ISO 8601)","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Cursor: next_cursor da página anterior","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Itens por página (1 a 200; padrão 50)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/conversations/{id}/messages":{"get":{"operationId":"listMessages","summary":"Mensagens da conversa (mais antigas primeiro; mídia só como metadados)","description":"Escopo: `messages:read`","security":[{"bearerAuth":[]}],"x-kv-scopes":["messages:read"],"parameters":[{"name":"id","in":"path","required":true,"description":"Id da conversa","schema":{"type":"integer"}},{"name":"after","in":"query","required":false,"description":"Cursor: next_cursor da página anterior","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Itens por página (1 a 200)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/messages":{"post":{"operationId":"sendMessage","summary":"Envia texto (só com a janela de 24 h aberta; senão 409) ou template aprovado, para uma conversa ou telefone","description":"Escopo: `messages:send`","security":[{"bearerAuth":[]}],"x-kv-scopes":["messages:send"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Até 100 caracteres; repetição em 24 h devolve a mesma resposta sem refazer","schema":{"type":"string","maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversation_id":{"type":"integer"},"phone":{"type":"string","description":"Telefone (com DDI) quando não há conversation_id"},"number_id":{"type":"integer","description":"Número de origem (obrigatório com phone se houver mais de um número de WhatsApp)"},"text":{"type":"string","maxLength":4096},"template":{"type":"object","required":["name","language"],"properties":{"name":{"type":"string"},"language":{"type":"string","example":"pt_BR"},"variables":{"type":"array","items":{"type":"string"}}}}}}}}},"responses":{"201":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Fora da janela de 24 h (texto), contato em opt-out (template) ou Idempotency-Key em andamento","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo maior que 1 MB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Idempotency-Key já usada com outro pedido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"A Meta aceitou, mas a mensagem não foi registrada (`wa_message_id` na resposta)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"A Meta recusou o envio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/contacts/{phone}":{"get":{"operationId":"getContact","summary":"Contato pelo telefone (segmento, cliente vulnerável, consentimento, conversas)","description":"Escopo: `contacts:read`","security":[{"bearerAuth":[]}],"x-kv-scopes":["contacts:read"],"parameters":[{"name":"phone","in":"path","required":true,"description":"Telefone com DDI","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateContact","summary":"Altera nome, segmento e/ou cliente vulnerável do contato","description":"Escopo: `contacts:write`","security":[{"bearerAuth":[]}],"x-kv-scopes":["contacts:write"],"parameters":[{"name":"phone","in":"path","required":true,"description":"Telefone com DDI","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"segment_id":{"type":"integer","nullable":true},"vulnerable":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo maior que 1 MB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/protocols/{numero}":{"get":{"operationId":"getProtocol","summary":"Protocolo de atendimento pelo número (AAAAMMDD-NNNNNN)","description":"Escopo: `protocols:read`","security":[{"bearerAuth":[]}],"x-kv-scopes":["protocols:read"],"parameters":[{"name":"numero","in":"path","required":true,"description":"Número do protocolo","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/metrics/summary":{"get":{"operationId":"metricsSummary","summary":"Resumo dos indicadores do período","description":"Escopo: `metrics:read`","security":[{"bearerAuth":[]}],"x-kv-scopes":["metrics:read"],"parameters":[{"name":"period","in":"query","required":false,"description":"today, 7d ou 30d","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"AAAA-MM-DD","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"AAAA-MM-DD","schema":{"type":"string"}},{"name":"number_id","in":"query","required":false,"description":"Número/canal","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cases":{"get":{"operationId":"listCases","summary":"Lista casos de sigilo Normal (Confidencial e Denúncia/Anônimo nunca saem pela API)","description":"Escopo: `cases:read`","security":[{"bearerAuth":[]}],"x-kv-scopes":["cases:read"],"parameters":[{"name":"status","in":"query","required":false,"description":"Situação (aberto, em_analise, aguardando_retorno, respondido, encerrado)","schema":{"type":"string"}},{"name":"updated_since","in":"query","required":false,"description":"Alterados desde (ms ou ISO 8601)","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Cursor","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Itens por página (1 a 200)","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createCase","summary":"Abre um caso de sigilo Normal (opcionalmente ligado ao contato pelo telefone)","description":"Escopo: `cases:write`","security":[{"bearerAuth":[]}],"x-kv-scopes":["cases:write"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Até 100 caracteres; repetição em 24 h devolve a mesma resposta sem refazer","schema":{"type":"string","maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","title"],"properties":{"type":{"type":"string","enum":["solicitacao","reclamacao","reclamacao_formal","tarefa"]},"title":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":5000},"origin":{"type":"string","enum":["whatsapp","telefone","email","presencial","carta","interno","outro"],"description":"Padrão interno"},"regulatory_origin":{"type":"string","enum":["bacen","procon","consumidor_gov","ouvidoria","reclame_aqui","judicial","outra"],"description":"Obrigatória só em reclamacao_formal"},"priority":{"type":"integer","enum":[1,2,3]},"phone":{"type":"string"}}}}}},"responses":{"201":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Pedido com a mesma Idempotency-Key ainda em andamento","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo maior que 1 MB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Idempotency-Key já usada com outro pedido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cases/{id}":{"get":{"operationId":"getCase","summary":"Caso de sigilo Normal","description":"Escopo: `cases:read`","security":[{"bearerAuth":[]}],"x-kv-scopes":["cases:read"],"parameters":[{"name":"id","in":"path","required":true,"description":"Id do caso","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cases/{id}/status":{"post":{"operationId":"changeCaseStatus","summary":"Muda a situação do caso (Responder/Encerrar exigem resolution; reabrir exige reason)","description":"Escopo: `cases:write`","security":[{"bearerAuth":[]}],"x-kv-scopes":["cases:write"],"parameters":[{"name":"id","in":"path","required":true,"description":"Id do caso","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["aberto","em_analise","aguardando_retorno","respondido","encerrado"]},"resolution":{"type":"string"},"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Transição não permitida a partir da situação atual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo maior que 1 MB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks":{"get":{"operationId":"listWebhooks","summary":"Lista os webhooks de saída (sem o segredo)","description":"Escopo: `webhooks:manage`","security":[{"bearerAuth":[]}],"x-kv-scopes":["webhooks:manage"],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createWebhook","summary":"Cadastra webhook (URL https pública); o segredo do HMAC só aparece nesta resposta. Cada evento exige o escopo de leitura correspondente na chave (403 missing_scope)","description":"Escopo: `webhooks:manage`","security":[{"bearerAuth":[]}],"x-kv-scopes":["webhooks:manage"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","events"],"properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["message.received","message.status","conversation.status","conversation.bot_handoff","protocol.opened","protocol.closed","survey.answered","case.*","alert.raised","alert.resolved"]}}}}}}},"responses":{"201":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo maior que 1 MB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{id}":{"patch":{"operationId":"updateWebhook","summary":"Altera URL, eventos ou ativo (reativar zera as falhas seguidas)","description":"Escopo: `webhooks:manage`","security":[{"bearerAuth":[]}],"x-kv-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"description":"Id do webhook","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["message.received","message.status","conversation.status","conversation.bot_handoff","protocol.opened","protocol.closed","survey.answered","case.*","alert.raised","alert.resolved"]}},"active":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo maior que 1 MB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteWebhook","summary":"Exclui o webhook","description":"Escopo: `webhooks:manage`","security":[{"bearerAuth":[]}],"x-kv-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"description":"Id do webhook","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{id}/deliveries":{"get":{"operationId":"webhookDeliveries","summary":"Últimas entregas do webhook","description":"Escopo: `webhooks:manage`","security":[{"bearerAuth":[]}],"x-kv-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"description":"Id do webhook","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{id}/rotate-secret":{"post":{"operationId":"rotateWebhookSecret","summary":"Gera um segredo novo (mostrado só nesta resposta; o antigo deixa de valer na próxima entrega)","description":"Escopo: `webhooks:manage`","security":[{"bearerAuth":[]}],"x-kv-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"description":"Id do webhook","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Chave ausente, inválida, revogada ou expirada; ou certificado de cliente (mTLS) ausente ou diferente do fixado na chave (code client_cert_required / client_cert_mismatch)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Escopo faltando (`missing_scope`) ou IP não permitido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de pedidos por minuto (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/openapi.json":{"get":{"operationId":"openapi","summary":"Este documento (sem autenticação)","security":[],"x-kv-scopes":[],"responses":{"200":{"description":"OpenAPI 3"}}}}}}