{"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"]}}},"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"}}}}}}