{"openapi":"3.1.0","info":{"title":"SmartAI CRM — API de captura de leads","version":"1.0.0","description":"Endpoint público para enviar leads (formulário, anúncio, landing page) direto pro pipeline de um tenant do SmartAI CRM. Cada tenant gera sua própria URL e segredo Bearer durante o onboarding do produto — não é uma API pública de propósito geral.","contact":{"url":"https://crm.agenciasmartai.com.br/developers"}},"servers":[{"url":"https://crm.agenciasmartai.com.br"}],"paths":{"/api/webhooks/leads/{sourceId}":{"post":{"operationId":"createLeadFromWebhook","summary":"Cria ou atualiza um lead a partir de um webhook externo","description":"Recebe um payload de lead (JSON, application/x-www-form-urlencoded ou multipart/form-data) e cria um lead na primeira etapa do primeiro pipeline do tenant dono de `sourceId`. Idempotente por `external_id` e deduplicado por telefone dentro de uma janela de 60 segundos.","security":[{"bearerAuth":[]}],"parameters":[{"name":"sourceId","in":"path","required":true,"description":"ID da fonte de webhook (gerado no onboarding do tenant).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadPayload"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LeadPayload"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LeadPayload"}}}},"responses":{"200":{"description":"Lead já existente — atualizado ou reconhecido como duplicata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadReceived"}}}},"201":{"description":"Lead criado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadReceived"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Segredo gerado por tenant na etapa de captura do onboarding."}},"responses":{"Error":{"description":"Erro estruturado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"LeadPayload":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Aliases: nome, full_name, fullname, nome_completo."},"phone":{"type":"string","description":"Aliases: telefone, whatsapp, celular, phone_number, fone."},"email":{"type":"string","description":"Aliases: e-mail, mail."},"source":{"type":"string","description":"Aliases: origem, utm_source."},"external_id":{"type":"string","description":"Aliases: externalid, lead_id, id. Usado para idempotência."}}},"LeadReceived":{"type":"object","properties":{"received":{"type":"boolean"},"lead_id":{"type":"string","format":"uuid"},"duplicate":{"type":"boolean"},"updated":{"type":"boolean"}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["payload_too_large","rate_limited","not_found","missing_secret","invalid_secret","invalid_body","validation_error","tenant_not_configured","server_error"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}}