{"openapi":"3.1.0","info":{"title":"S82 Tecnologia — API","version":"1.0.0","description":"API pública da S82 Tecnologia para integração de leads e catálogo com sistemas externos (CRM).\n\n## Autenticação\nTodas as rotas exigem um token Bearer emitido no painel administrativo.\nEnvie o header `Authorization: Bearer <token>` em cada requisição. Tokens têm\nescopos e podem ser revogados a qualquer momento.\n\n### Escopos\n- `leads:read` — Ler leads — listar e obter por id.\n- `leads:write` — Atualizar o status de um lead.\n- `leads:anonymize` — Anonimizar um lead (direito do titular — LGPD).\n- `catalog:read` — Ler o catálogo público — serviços e posts publicados.\n- `events:read` — Ler o feed de eventos do site (lead.created, lead.updated, etc.).\n\n## LGPD\nLeads são dado pessoal. O IP nunca é exposto pela API. Use `POST /leads/{id}/anonymize`\npara atender a solicitações de anonimização do titular.\n\n## Exportação para CRM\nPuxe `GET /leads?updated_since=<última sincronização>`, pagine por `next_cursor` até\n`has_more=false`, e devolva mudanças de estágio com `PATCH /leads/{id}`.\n\n## Eventos e Webhooks\nCada acontecimento do site (`lead.created`, `lead.updated`, `lead.anonymized`,\n`post.published`) vira um **evento**, consumível de duas formas — o mesmo objeto:\n- **Pull**: `GET /events` (polling, com cursor). Escopo `events:read`.\n- **Push (webhook)**: cadastre a URL do seu CRM no painel (Integrações → Webhooks).\n\n### Verificação da assinatura (webhook)\nCada POST traz o header `X-S82-Signature: t=<timestamp>,v1=<hmac>`. Calcule\n`HMAC-SHA256(secret, \"<timestamp>.<corpo-cru>\")` e compare em tempo constante com `v1`.\nO `secret` (`whsec_…`) é mostrado uma vez ao cadastrar o webhook. Headers auxiliares:\n`X-S82-Event` (tipo) e `X-S82-Delivery` (id da entrega). Responda `2xx`; a S82 retenta\ncom backoff exponencial em caso de falha.","contact":{"name":"S82 Tecnologia","email":"contato@s82.com.br","url":"https://s82.com.br"}},"externalDocs":{"description":"Documentação legível","url":"https://s82.com.br/api/docs"},"servers":[{"url":"https://s82.com.br/api/v1","description":"Produção"},{"url":"http://localhost:3082/api/v1","description":"Desenvolvimento local"}],"tags":[{"name":"Leads","description":"Leitura, atualização de status e anonimização de leads."},{"name":"Catálogo","description":"Serviços e posts publicados (dados públicos)."},{"name":"Eventos","description":"Feed de eventos do site (pull) — o mesmo que os webhooks entregam por push."}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Opaque (s82_live_…)","description":"Token emitido no painel (Integrações → Tokens de API). Enviado como `Authorization: Bearer <token>`. Os escopos exigidos por operação estão em `x-required-scope`."}},"x-api-scopes":[{"scope":"leads:read","description":"Ler leads — listar e obter por id."},{"scope":"leads:write","description":"Atualizar o status de um lead."},{"scope":"leads:anonymize","description":"Anonimizar um lead (direito do titular — LGPD)."},{"scope":"catalog:read","description":"Ler o catálogo público — serviços e posts publicados."},{"scope":"events:read","description":"Ler o feed de eventos do site (lead.created, lead.updated, etc.)."}],"schemas":{"LeadConsent":{"type":"object","description":"Registro de consentimento LGPD associado ao lead.","properties":{"choice":{"type":"string","enum":["granted","denied"],"description":"Escolha do titular."},"policy_version":{"type":"string","example":"1.0","description":"Versão da política vigente no aceite."},"at":{"type":"string","format":"date-time","description":"Momento do registro do consentimento."}},"required":["choice","policy_version","at"]},"Lead":{"type":"object","description":"Lead capturado por um formulário do site. IP NÃO é exposto pela API. Após anonimização (LGPD), os campos de PII ficam nulos/placeholder e `anonymized` = true.","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","description":"Nome do contato. Vira \"[anonimizado]\" após anonimização."},"phone":{"type":"string","description":"Telefone. Vira \"[anonimizado]\" após anonimização."},"email":{"type":["string","null"]},"company":{"type":["string","null"],"description":"Empresa (qualificação B2B)."},"role":{"type":["string","null"],"description":"Cargo (qualificação B2B)."},"service":{"type":["string","null"],"description":"Slug do serviço de interesse."},"service_name":{"type":["string","null"],"description":"Nome do serviço resolvido a partir do slug."},"message":{"type":["string","null"]},"source_page":{"type":["string","null"],"description":"Caminho da página de origem."},"origin":{"type":"string","enum":["site","whatsapp"],"description":"Código da origem: site (contato) ou whatsapp (popover)."},"origin_label":{"type":"string","description":"Rótulo humano da origem: \"Formulário Site\" ou \"Formulário WhatsApp\"."},"status":{"type":"string","enum":["new","contacted","scheduled","archived"],"description":"Estágio do lead no funil. `new` — Lead recebido pelo formulário, ainda não trabalhado. · `contacted` — Primeiro contato realizado com o lead. · `scheduled` — Diagnóstico ou reunião agendada. · `archived` — Lead descartado, perdido ou concluído."},"consent":{"description":"Consentimento LGPD do lead, ou null se não houver registro.","anyOf":[{"$ref":"#/components/schemas/LeadConsent"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"anonymized":{"type":"boolean","description":"true quando o lead já foi anonimizado (LGPD)."}},"required":["id","name","phone","email","company","role","service","service_name","message","source_page","origin","origin_label","status","consent","created_at","updated_at","anonymized"],"example":{"id":"b3f1c2a4-6d7e-4a1b-9c2d-0e5f6a7b8c9d","name":"Ana Ribeiro","phone":"+55 41 99876-5432","email":"ana.ribeiro@empresa.com.br","company":"Delta Serviços","role":"Head de Operações","service":"ia-aplicada-ao-negocio","service_name":"IA Aplicada ao Negócio","message":"Queremos priorizar casos de uso de IA na operação.","source_page":"/servicos/ia-aplicada-ao-negocio","status":"new","consent":{"choice":"granted","policy_version":"1.0","at":"2026-07-14T13:20:05.000Z"},"created_at":"2026-07-14T13:20:05.000Z","updated_at":"2026-07-14T13:20:05.000Z","anonymized":false}},"Service":{"type":"object","description":"Serviço do catálogo público da S82.","properties":{"slug":{"type":"string","description":"Identificador estável usado na URL."},"name":{"type":"string"},"cluster":{"type":"string","enum":["IA & Dados","Desenvolvimento","Automação","Cloud","Integrações","Segurança","Escalabilidade"],"description":"Uma das 7 frentes oficiais da marca."},"summary":{"type":"string","description":"Resumo curto do serviço."}},"required":["slug","name","cluster","summary"],"example":{"slug":"ia-aplicada-ao-negocio","name":"IA Aplicada ao Negócio","cluster":"IA & Dados","summary":"Mapeamento de oportunidades de IA, priorização por impacto no negócio e adoção responsável — com governança, ética e capacitação das equipes."}},"Post":{"type":"object","description":"Post do blog. Apenas posts publicados são retornados.","properties":{"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":["string","null"]},"cluster":{"type":["string","null"]},"url":{"type":"string","format":"uri","description":"URL pública canônica do post."},"published_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["slug","title","excerpt","cluster","url","published_at","updated_at"],"example":{"slug":"governanca-de-ia-nas-empresas","title":"Governança de IA nas empresas: por onde começar","excerpt":"Um roteiro prático para adotar IA com controle, ética e indicadores.","cluster":"IA & Dados","url":"https://s82.com.br/blog/governanca-de-ia-nas-empresas","published_at":"2026-06-10T12:00:00.000Z","updated_at":"2026-06-10T12:00:00.000Z"}},"LeadListResponse":{"type":"object","description":"Página de leads. Use `next_cursor` (quando `has_more`) para buscar a próxima página.","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Lead"}},"next_cursor":{"type":["string","null"],"description":"Cursor opaco para a próxima página. Nulo quando não há mais resultados."},"has_more":{"type":"boolean","description":"true se existe uma próxima página."}},"required":["data","next_cursor","has_more"],"example":{"data":[{"id":"b3f1c2a4-6d7e-4a1b-9c2d-0e5f6a7b8c9d","name":"Ana Ribeiro","phone":"+55 41 99876-5432","email":"ana.ribeiro@empresa.com.br","company":"Delta Serviços","role":"Head de Operações","service":"ia-aplicada-ao-negocio","service_name":"IA Aplicada ao Negócio","message":"Queremos priorizar casos de uso de IA na operação.","source_page":"/servicos/ia-aplicada-ao-negocio","status":"new","consent":{"choice":"granted","policy_version":"1.0","at":"2026-07-14T13:20:05.000Z"},"created_at":"2026-07-14T13:20:05.000Z","updated_at":"2026-07-14T13:20:05.000Z","anonymized":false}],"next_cursor":"eyJpZCI6ImIzZjFjMmE0In0","has_more":true}},"LeadResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lead"}},"required":["data"],"example":{"data":{"id":"b3f1c2a4-6d7e-4a1b-9c2d-0e5f6a7b8c9d","name":"Ana Ribeiro","phone":"+55 41 99876-5432","email":"ana.ribeiro@empresa.com.br","company":"Delta Serviços","role":"Head de Operações","service":"ia-aplicada-ao-negocio","service_name":"IA Aplicada ao Negócio","message":"Queremos priorizar casos de uso de IA na operação.","source_page":"/servicos/ia-aplicada-ao-negocio","status":"new","consent":{"choice":"granted","policy_version":"1.0","at":"2026-07-14T13:20:05.000Z"},"created_at":"2026-07-14T13:20:05.000Z","updated_at":"2026-07-14T13:20:05.000Z","anonymized":false}}},"LeadStatusResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["new","contacted","scheduled","archived"]},"updated_at":{"type":"string","format":"date-time"}},"required":["id","status","updated_at"]}},"required":["data"],"example":{"data":{"id":"3f1c2a4e-9b8d-4c7a-8e2f-1a2b3c4d5e6f","status":"contacted","updated_at":"2026-07-15T09:00:00.000Z"}}},"LeadAnonymizeResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"anonymized":{"type":"boolean"}},"required":["id","anonymized"]}},"required":["data"],"example":{"data":{"id":"3f1c2a4e-9b8d-4c7a-8e2f-1a2b3c4d5e6f","anonymized":true}}},"ServiceListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}},"required":["data"],"example":{"data":[{"slug":"ia-aplicada-ao-negocio","name":"IA Aplicada ao Negócio","cluster":"IA & Dados","summary":"Mapeamento de oportunidades de IA, priorização por impacto no negócio e adoção responsável — com governança, ética e capacitação das equipes."}]}},"PostListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Post"}}},"required":["data"],"example":{"data":[{"slug":"governanca-de-ia-nas-empresas","title":"Governança de IA nas empresas: por onde começar","excerpt":"Um roteiro prático para adotar IA com controle, ética e indicadores.","cluster":"IA & Dados","url":"https://s82.com.br/blog/governanca-de-ia-nas-empresas","published_at":"2026-06-10T12:00:00.000Z","updated_at":"2026-06-10T12:00:00.000Z"}]}},"Event":{"type":"object","description":"Evento do site. O MESMO objeto é entregue por webhook (push) e listado aqui (pull). Em eventos lead.*, `data` traz o lead (sem IP); em post.published, traz `{ id, slug, title, url }`.","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["lead.created","lead.updated","lead.anonymized","post.published"],"description":"Tipo do evento."},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","additionalProperties":true,"description":"Carga do evento (varia por tipo)."}},"required":["id","type","created_at","data"],"example":{"id":"9c1e2b3a-...","type":"lead.created","created_at":"2026-07-16T13:20:05.000Z","data":{"id":"b3f1c2a4-6d7e-4a1b-9c2d-0e5f6a7b8c9d","name":"Ana Ribeiro","phone":"+55 41 99876-5432","email":"ana.ribeiro@empresa.com.br","company":"Delta Serviços","role":"Head de Operações","service":"ia-aplicada-ao-negocio","service_name":"IA Aplicada ao Negócio","message":"Queremos priorizar casos de uso de IA na operação.","source_page":"/servicos/ia-aplicada-ao-negocio","status":"new","consent":{"choice":"granted","policy_version":"1.0","at":"2026-07-14T13:20:05.000Z"},"created_at":"2026-07-14T13:20:05.000Z","updated_at":"2026-07-14T13:20:05.000Z","anonymized":false}}},"EventListResponse":{"type":"object","description":"Página de eventos. Use `next_cursor` (quando `has_more`) para a próxima página.","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}},"required":["data","next_cursor","has_more"]},"LeadEventData":{"type":"object","description":"Dados do lead no evento `lead.created` (sem IP). É um subconjunto do Lead — para o objeto completo (consent, anonymized), busque via GET /leads/{id}.","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"]},"company":{"type":["string","null"]},"role":{"type":["string","null"]},"service":{"type":["string","null"]},"service_name":{"type":["string","null"]},"message":{"type":["string","null"],"description":"Mensagem do lead (no popover de WhatsApp, é a \"necessidade\" digitada)."},"source_page":{"type":["string","null"]},"origin":{"type":"string","enum":["site","whatsapp"]},"origin_label":{"type":"string"},"status":{"type":"string","enum":["new","contacted","scheduled","archived"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","name","phone","email","company","role","service","service_name","message","source_page","origin","origin_label","status","created_at"]},"Error":{"type":"object","description":"Formato único de erro da API.","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Código estável, legível por máquina."},"message":{"type":"string","description":"Mensagem legível por humanos."}},"required":["code","message"]}},"required":["error"]}},"responses":{"Unauthorized":{"description":"Token ausente, malformado, inválido, revogado ou expirado. Não distingue os casos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"missing":{"value":{"error":{"code":"missing_bearer_token","message":"Autentique-se com o header \"Authorization: Bearer <token>\"."}}},"invalid":{"value":{"error":{"code":"invalid_token","message":"Token inválido, revogado ou expirado. Emita um novo token no painel."}}}}}}},"Forbidden":{"description":"Token válido, mas sem o escopo exigido pela operação.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"insufficient_scope","message":"Token sem escopo leads:write."}}}}},"NotFound":{"description":"Recurso não encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"not_found","message":"Lead não encontrado."}}}}},"BadRequest":{"description":"Requisição inválida (ex.: status fora do enum).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"bad_request","message":"Status inválido."}}}}}}},"paths":{"/leads":{"get":{"operationId":"listLeads","summary":"Listar leads","description":"Lista leads em ordem decrescente de criação, paginados por cursor. Combine `updated_since` + `next_cursor` para exportação incremental contínua para o CRM.\n\n**Escopo exigido:** `leads:read`","tags":["Leads"],"security":[{"bearerAuth":[]}],"x-required-scope":"leads:read","responses":{"200":{"description":"Página de leads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadListResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"parameters":[{"name":"status","in":"query","required":false,"description":"Filtra pelo estágio do lead no funil.","schema":{"type":"string","enum":["new","contacted","scheduled","archived"]}},{"name":"since","in":"query","required":false,"description":"Retorna leads criados a partir deste instante (created_at ≥ since). ISO 8601.","schema":{"type":"string","format":"date-time"}},{"name":"updated_since","in":"query","required":false,"description":"Retorna leads alterados a partir deste instante (updated_at ≥ updated_since). Use para sincronização incremental com o CRM. ISO 8601.","schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"description":"Tamanho da página.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Cursor opaco devolvido em `next_cursor` para paginar.","schema":{"type":"string"}}]}},"/leads/{id}":{"get":{"operationId":"getLead","summary":"Obter um lead","description":"Retorna um único lead pelo seu UUID.\n\n**Escopo exigido:** `leads:read`","tags":["Leads"],"security":[{"bearerAuth":[]}],"x-required-scope":"leads:read","responses":{"200":{"description":"O lead solicitado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}},"parameters":[{"name":"id","in":"path","required":true,"description":"UUID do lead.","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"updateLeadStatus","summary":"Atualizar o status de um lead","description":"Move o lead no funil. Único campo mutável pela API é o `status`.\n\n**Escopo exigido:** `leads:write`","tags":["Leads"],"security":[{"bearerAuth":[]}],"x-required-scope":"leads:write","responses":{"200":{"description":"Status atualizado (resposta mínima, sem PII).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadStatusResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}},"parameters":[{"name":"id","in":"path","required":true,"description":"UUID do lead.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["new","contacted","scheduled","archived"],"description":"Estágio do lead no funil. `new` — Lead recebido pelo formulário, ainda não trabalhado. · `contacted` — Primeiro contato realizado com o lead. · `scheduled` — Diagnóstico ou reunião agendada. · `archived` — Lead descartado, perdido ou concluído."}},"required":["status"]},"example":{"status":"contacted"}}}}}},"/leads/{id}/anonymize":{"post":{"operationId":"anonymizeLead","summary":"Anonimizar um lead (LGPD)","description":"Anonimização soft (LGPD art. 5º, XI): limpa nome, telefone, e-mail, empresa, cargo, mensagem e IP; preserva service/source_page/status para os relatórios de funil. Idempotente. Retorna o lead já anonimizado (`anonymized` = true).\n\n**Escopo exigido:** `leads:anonymize`","tags":["Leads"],"security":[{"bearerAuth":[]}],"x-required-scope":"leads:anonymize","responses":{"200":{"description":"Lead anonimizado (resposta mínima, sem PII).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadAnonymizeResponse"},"example":{"data":{"id":"3f1c2a4e-9b8d-4c7a-8e2f-1a2b3c4d5e6f","anonymized":true}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}},"parameters":[{"name":"id","in":"path","required":true,"description":"UUID do lead.","schema":{"type":"string","format":"uuid"}}]}},"/services":{"get":{"operationId":"listServices","summary":"Listar serviços","description":"Catálogo público de serviços da S82, agrupável pelas 7 frentes oficiais da marca (`cluster`).\n\n**Escopo exigido:** `catalog:read`","tags":["Catálogo"],"security":[{"bearerAuth":[]}],"x-required-scope":"catalog:read","responses":{"200":{"description":"Lista de serviços.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceListResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/posts":{"get":{"operationId":"listPosts","summary":"Listar posts publicados","description":"Posts do blog em estado publicado. Rascunhos e agendados não são expostos.\n\n**Escopo exigido:** `catalog:read`","tags":["Catálogo"],"security":[{"bearerAuth":[]}],"x-required-scope":"catalog:read","responses":{"200":{"description":"Lista de posts publicados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostListResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/events":{"get":{"operationId":"listEvents","summary":"Listar eventos do site (feed pull)","description":"Feed de eventos do site para consumir por polling — o MESMO objeto que os webhooks entregam por push. Tipos: `lead.created`, `lead.updated`, `lead.anonymized`, `post.published`. Paginação por cursor keyset em (created_at, id).\n\n**Escopo exigido:** `events:read`","tags":["Eventos"],"security":[{"bearerAuth":[]}],"x-required-scope":"events:read","responses":{"200":{"description":"Página de eventos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"parameters":[{"name":"type","in":"query","required":false,"description":"Filtra por tipo de evento.","schema":{"type":"string","enum":["lead.created","lead.updated","lead.anonymized","post.published"]}},{"name":"since","in":"query","required":false,"description":"Retorna eventos criados a partir deste instante (created_at ≥ since). ISO 8601.","schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"description":"Tamanho da página.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Cursor opaco devolvido em `next_cursor` para paginar.","schema":{"type":"string"}}]}}},"webhooks":{"lead.created":{"post":{"summary":"Lead criado","description":"A S82 faz um **POST** no endpoint que você cadastra no painel (Integrações → Webhooks). Headers:\n- `X-S82-Signature: t=<unix>,v1=<hmac>` — HMAC-SHA256 de `\"<t>.<corpo-cru>\"` usando o `secret` (`whsec_…`); verifique em tempo constante.\n- `X-S82-Event` — o tipo do evento. `X-S82-Delivery` — id da entrega.\n\nResponda **2xx**. Em falha/timeout a S82 **retenta** 6× com backoff exponencial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID do evento."},"type":{"type":"string","enum":["lead.created"]},"created_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/LeadEventData"}},"required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx). Falha/timeout → a S82 retenta com backoff."}}}},"lead.updated":{"post":{"summary":"Status do lead alterado","description":"A S82 faz um **POST** no endpoint que você cadastra no painel (Integrações → Webhooks). Headers:\n- `X-S82-Signature: t=<unix>,v1=<hmac>` — HMAC-SHA256 de `\"<t>.<corpo-cru>\"` usando o `secret` (`whsec_…`); verifique em tempo constante.\n- `X-S82-Event` — o tipo do evento. `X-S82-Delivery` — id da entrega.\n\nResponda **2xx**. Em falha/timeout a S82 **retenta** 6× com backoff exponencial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID do evento."},"type":{"type":"string","enum":["lead.updated"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["new","contacted","scheduled","archived"]}},"required":["id","status"]}},"required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx). Falha/timeout → a S82 retenta com backoff."}}}},"lead.anonymized":{"post":{"summary":"Lead anonimizado (LGPD)","description":"A S82 faz um **POST** no endpoint que você cadastra no painel (Integrações → Webhooks). Headers:\n- `X-S82-Signature: t=<unix>,v1=<hmac>` — HMAC-SHA256 de `\"<t>.<corpo-cru>\"` usando o `secret` (`whsec_…`); verifique em tempo constante.\n- `X-S82-Event` — o tipo do evento. `X-S82-Delivery` — id da entrega.\n\nResponda **2xx**. Em falha/timeout a S82 **retenta** 6× com backoff exponencial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID do evento."},"type":{"type":"string","enum":["lead.anonymized"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"]}},"required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx). Falha/timeout → a S82 retenta com backoff."}}}},"post.published":{"post":{"summary":"Post publicado","description":"A S82 faz um **POST** no endpoint que você cadastra no painel (Integrações → Webhooks). Headers:\n- `X-S82-Signature: t=<unix>,v1=<hmac>` — HMAC-SHA256 de `\"<t>.<corpo-cru>\"` usando o `secret` (`whsec_…`); verifique em tempo constante.\n- `X-S82-Event` — o tipo do evento. `X-S82-Delivery` — id da entrega.\n\nResponda **2xx**. Em falha/timeout a S82 **retenta** 6× com backoff exponencial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID do evento."},"type":{"type":"string","enum":["post.published"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["id","slug","title","url"]}},"required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Recebido (qualquer 2xx). Falha/timeout → a S82 retenta com backoff."}}}}}}