{"openapi":"3.1.0","info":{"title":"WeFlock API","version":"1.0.0","description":"API pública do WeFlock. Crie a chave em Configurações > Chaves de API e envie como `Authorization: Bearer wf_...`. A chave age com as permissões de quem a criou. Limite: 120 requisições por minuto por chave. Escrita exige chave de leitura e escrita.\n\n**Webhooks:** cada entrega vem com `X-WeFlock-Signature: t=<timestamp>,v1=<hmac>`, em que `hmac = HMAC-SHA256(segredo, \"<timestamp>.<corpo>\")` em hexadecimal. Recuse entregas com timestamp com mais de 5 minutos."},"servers":[{"url":"https://api.weflock.com.br"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}},"schemas":{"Task":{"type":"object","properties":{"number":{"type":"integer","example":12},"title":{"type":"string","example":"Reels: bastidores da massa fresca"},"status":{"type":"string","example":"afazer","description":"Chave do status (GET /v1/statuses)"},"format":{"type":["string","null"],"enum":["post","carrossel","reels","story","video","reels_take","criativo","outro",null]},"priority":{"type":["integer","null"],"description":"1 urgente, 2 alta, 3 média, 4 baixa"},"client_id":{"type":["string","null"],"format":"uuid"},"assignee_id":{"type":["string","null"],"format":"uuid"},"due_date":{"type":["string","null"],"format":"date"},"publish_date":{"type":["string","null"],"format":"date"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"TaskInput":{"type":"object","properties":{"title":{"type":"string"},"client_id":{"type":["string","null"],"format":"uuid"},"format":{"type":["string","null"]},"assignee_id":{"type":["string","null"],"format":"uuid"},"status":{"type":"string"},"priority":{"type":["integer","null"],"minimum":1,"maximum":4},"due_date":{"type":["string","null"],"format":"date"},"publish_date":{"type":["string","null"],"format":"date"},"description":{"type":["string","null"]},"copy":{"type":["string","null"],"description":"Copy e legenda da peça"},"notes":{"type":["string","null"]}}},"Deal":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"company":{"type":"string","example":"Clínica Lívia"},"specialty":{"type":["string","null"]},"city":{"type":["string","null"]},"origin":{"type":"string","enum":["formulario","site","anuncio","indicacao","instagram","whatsapp","evento","api","manual","importado","outro"]},"status":{"type":"string","enum":["aberto","ganho","perdido"]},"stage_id":{"type":"string","format":"uuid","description":"GET /v1/deal-stages"},"owner_id":{"type":["string","null"],"format":"uuid"},"monthly_value":{"type":["number","null"]},"setup_value":{"type":["number","null"]},"service_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"primary_contact":{"type":["object","null"],"properties":{"name":{"type":"string"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]}}},"temperature":{"type":"string","enum":["quente","morno","frio","sem_contato"]},"stale":{"type":"boolean","description":"Parado na etapa há N dias (configurável)"},"stage_entered_at":{"type":"string","format":"date-time"},"last_contact_at":{"type":["string","null"],"format":"date-time"},"won_at":{"type":["string","null"],"format":"date-time","description":"Gravado só no primeiro ganho"},"lost_at":{"type":["string","null"],"format":"date-time","description":"Gravado só na primeira perda"},"reactivate_at":{"type":["string","null"],"format":"date"},"client_id":{"type":["string","null"],"format":"uuid"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"paths":{"/v1/me":{"get":{"summary":"Quem é esta chave","tags":["Conta"],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}}},"/v1/statuses":{"get":{"summary":"Status das demandas","tags":["Demandas"],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}}},"/v1/clients":{"get":{"summary":"Listar clientes","tags":["Clientes"],"parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["ativo","entregue","arquivado"]}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Criar cliente","tags":["Clientes"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"company_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"ai_context":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Criado"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}}},"/v1/clients/{id}":{"patch":{"summary":"Alterar cliente (só os campos enviados)","tags":["Clientes"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"company_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"ai_context":{"type":"string"}}}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"404":{"description":"Não encontrado"},"429":{"description":"Limite por minuto"}}},"get":{"summary":"Ficha do cliente (inclui contexto de IA)","tags":["Clientes"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"404":{"description":"Não encontrado"},"429":{"description":"Limite por minuto"}}}},"/v1/tasks":{"get":{"summary":"Listar demandas (mais novas primeiro)","tags":["Demandas"],"parameters":[{"name":"client_id","in":"query","schema":{"type":"string"}},{"name":"assignee_id","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"updated_since","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"next_cursor":{"type":["string","null"]}}}}}},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Criar demanda","tags":["Demandas"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInput"}}}},"responses":{"201":{"description":"Criada"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"422":{"description":"Dados inválidos"},"429":{"description":"Limite por minuto"}}}},"/v1/tasks/{number}":{"get":{"summary":"Detalhe da demanda","tags":["Demandas"],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"404":{"description":"Não encontrada"},"429":{"description":"Limite por minuto"}}},"patch":{"summary":"Alterar demanda (só os campos enviados)","tags":["Demandas"],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"integer"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInput"}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"404":{"description":"Não encontrada"},"429":{"description":"Limite por minuto"}}}},"/v1/tasks/{number}/comments":{"post":{"summary":"Comentar (to_client=true publica no portal do cliente)","tags":["Demandas"],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"integer"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["body"],"properties":{"body":{"type":"string"},"to_client":{"type":"boolean"}}}}}},"responses":{"201":{"description":"Criado"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}}},"/v1/tasks/{number}/files":{"get":{"summary":"Arquivos da demanda (links válidos por 1 hora)","tags":["Demandas"],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Pedir URL para enviar arquivo (PUT no upload_url, depois confirmar)","tags":["Demandas"],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"integer"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}}}}},"responses":{"201":{"description":"path e upload_url"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}}},"/v1/tasks/{number}/files/confirm":{"post":{"summary":"Confirmar arquivo enviado e anexar à demanda","tags":["Demandas"],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"integer"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["path","name"],"properties":{"path":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["media","file"]},"mime":{"type":"string"},"size":{"type":"integer"}}}}}},"responses":{"201":{"description":"Anexado"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"422":{"description":"Caminho inválido ou arquivo não enviado"},"429":{"description":"Limite por minuto"}}}},"/v1/approvals":{"get":{"summary":"Listar aprovações (mais recentes primeiro)","tags":["Aprovações"],"parameters":[{"name":"status","in":"query","schema":{"type":"string"}},{"name":"client_id","in":"query","schema":{"type":"string"}},{"name":"since","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Enviar peças para aprovação do cliente","tags":["Aprovações"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["task_numbers"],"properties":{"task_numbers":{"type":"array","items":{"type":"integer"}}}}}}},"responses":{"201":{"description":"Enviadas"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}}},"/v1/projects":{"get":{"summary":"Projetos com etapas","tags":["Projetos"],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"description":"Limite por minuto"}}}},"/v1/projects/{id}":{"get":{"summary":"Detalhe do projeto (etapas, demandas, arquivos)","tags":["Projetos"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"404":{"description":"Não encontrado"},"429":{"description":"Limite por minuto"}}},"patch":{"summary":"Alterar projeto","tags":["Projetos"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"client_id":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"404":{"description":"Não encontrado"},"429":{"description":"Limite por minuto"}}}},"/v1/deal-stages":{"get":{"summary":"Etapas do funil (ordem e probabilidade)","tags":["Comercial"],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/loss-reasons":{"get":{"summary":"Motivos de perda ativos","tags":["Comercial"],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/services":{"get":{"summary":"Catálogo de serviços (formatos por mês, sem preço)","tags":["Comercial"],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals":{"get":{"summary":"Listar negócios (mais novos primeiro)","tags":["Comercial"],"parameters":[{"name":"status","in":"query","schema":{"type":"string"}},{"name":"owner_id","in":"query","schema":{"type":"string"}},{"name":"stage_id","in":"query","schema":{"type":"string"}},{"name":"origin","in":"query","schema":{"type":"string"}},{"name":"search","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Deal"}},"next_cursor":{"type":["string","null"]}}}}}},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Criar negócio (lead)","tags":["Comercial"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"string"},"specialty":{"type":"string"},"city":{"type":"string"},"origin":{"type":"string","description":"Padrão: api"},"origin_detail":{"type":"object","description":"UTMs e afins (valores texto, número ou booleano)"},"owner_id":{"type":"string","format":"uuid","description":"Sem dono: o WeFlock aplica a regra da agência (rodízio ou por origem)"},"stage_id":{"type":"string","format":"uuid","description":"Só na criação; depois use /move"},"monthly_value":{"type":"number"},"setup_value":{"type":"number"},"service_ids":{"type":"array","items":{"type":"string","format":"uuid"},"description":"GET /v1/services"},"description":{"type":"string"},"contact":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"role":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","description":"WhatsApp"},"is_primary":{"type":"boolean"}}}},"required":["company"]}}}},"responses":{"201":{"description":"Criado"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"422":{"description":"Dados inválidos"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}":{"get":{"summary":"Ficha do negócio (com contatos)","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"404":{"description":"Não encontrado"},"429":{"description":"Limite por minuto"}}},"patch":{"summary":"Alterar negócio (só os campos enviados; etapa pelo /move)","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"string"},"specialty":{"type":"string"},"city":{"type":"string"},"origin":{"type":"string","description":"Padrão: api"},"origin_detail":{"type":"object","description":"UTMs e afins (valores texto, número ou booleano)"},"owner_id":{"type":"string","format":"uuid","description":"Sem dono: o WeFlock aplica a regra da agência (rodízio ou por origem)"},"stage_id":{"type":"string","format":"uuid","description":"Só na criação; depois use /move"},"monthly_value":{"type":"number"},"setup_value":{"type":"number"},"service_ids":{"type":"array","items":{"type":"string","format":"uuid"},"description":"GET /v1/services"},"description":{"type":"string"},"contact":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"role":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","description":"WhatsApp"},"is_primary":{"type":"boolean"}}}}}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/move":{"post":{"summary":"Mudar de etapa","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stage_id"],"properties":{"stage_id":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/win":{"post":{"summary":"Marcar como ganho: cria o cliente, os contatos, o valor mensal, o pacote do primeiro mês e o projeto de onboarding numa operação só","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"client_name":{"type":"string"},"monthly_value":{"type":"number"},"start_month":{"type":"string","description":"AAAA-MM (padrão: mês atual)"},"template_id":{"type":"string","format":"uuid","description":"Modelo de projeto (padrão: o de onboarding da agência)"},"skip_project":{"type":"boolean"},"project_start":{"type":"string","format":"date"},"portal_invite":{"type":"boolean"},"invite_email":{"type":"string"},"briefing_template_id":{"type":"string","format":"uuid"},"contract":{"type":"boolean"},"whatsapp_group":{"type":"boolean"}}}}}},"responses":{"200":{"description":"client_id, project_id, month e planned"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/lose":{"post":{"summary":"Marcar como perdido","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["reason_id"],"properties":{"reason_id":{"type":"string","format":"uuid"},"note":{"type":"string"},"reactivate":{"type":"string","description":"definitiva, 3m, 6m ou AAAA-MM-DD"}}}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/reopen":{"post":{"summary":"Reabrir negócio perdido (limpa motivo, nota e reativação)","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/timeline":{"get":{"summary":"Linha do tempo (histórico, atividades, notas, calls, propostas, aberturas, contrato)","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/activities":{"get":{"summary":"Atividades do negócio","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Criar atividade","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["ligacao","reuniao","email","whatsapp","tarefa","follow_up"]},"title":{"type":"string"},"description":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"due_at":{"type":"string","format":"date-time"},"done_at":{"type":"string","format":"date-time","description":"Preencher conclui a atividade e atualiza o último contato"}},"required":["type","title"]}}}},"responses":{"201":{"description":"Criada"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/activities/{activityId}":{"patch":{"summary":"Alterar ou concluir atividade (done_at)","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"activityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["ligacao","reuniao","email","whatsapp","tarefa","follow_up"]},"title":{"type":"string"},"description":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"due_at":{"type":"string","format":"date-time"},"done_at":{"type":"string","format":"date-time","description":"Preencher conclui a atividade e atualiza o último contato"}}}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/notes":{"get":{"summary":"Notas do negócio","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Criar nota","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["body"],"properties":{"body":{"type":"string"}}}}}},"responses":{"201":{"description":"Criada"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/contacts":{"get":{"summary":"Pessoas do negócio","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Adicionar pessoa","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"role":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","description":"WhatsApp"},"is_primary":{"type":"boolean"}}}}}},"responses":{"201":{"description":"Criada"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/deals/{id}/proposals":{"post":{"summary":"Criar proposta (nova versão em rascunho; serviços e valores do negócio quando não enviados)","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string"},"body":{"type":"string"},"service_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"monthly_value":{"type":"number"},"setup_value":{"type":"number"},"valid_until":{"type":"string","format":"date"}}}}}},"responses":{"201":{"description":"Criada"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/proposals":{"get":{"summary":"Listar propostas","tags":["Comercial"],"parameters":[{"name":"deal_id","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/proposals/{id}":{"get":{"summary":"Detalhe da proposta","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"404":{"description":"Não encontrada"},"429":{"description":"Limite por minuto"}}}},"/v1/proposals/{id}/send":{"post":{"summary":"Enviar: gera o link público (url) e substitui as versões anteriores em aberto","tags":["Comercial"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"responses":{"200":{"description":"id, status e url"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}}},"/v1/forms/{slug}/submissions":{"get":{"summary":"Envios do formulário (inclui spam barrado)","tags":["Comercial"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"429":{"description":"Limite por minuto"}}},"post":{"summary":"Entrada de lead (n8n, anúncios): mesmo caminho do formulário público, com dono pela regra da agência e duplicado em 24 h virando nota","tags":["Comercial"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Repetir a mesma chave devolve a mesma resposta, sem duplicar."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["nome"],"properties":{"nome":{"type":"string"},"email":{"type":"string"},"whatsapp":{"type":"string"},"empresa":{"type":"string"},"cidade":{"type":"string"},"especialidade":{"type":"string"},"mensagem":{"type":"string"},"servicos":{"type":"array","items":{"type":"string","format":"uuid"}},"origem":{"type":"string","description":"Origem do lead (padrão: a do formulário)"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"}}}}}},"responses":{"200":{"description":"duplicado (nota no negócio aberto)"},"201":{"description":"aceito (deal_id)"},"401":{"description":"Chave inválida","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Chave sem a área Comercial"},"422":{"description":"Campo obrigatório ou inválido"},"429":{"description":"Limite por minuto"}}}}}}