{"openapi":"3.1.0","info":{"title":"ÂncoraSign API","version":"1.0.0","description":"Motor ÂncoraHUB. Desenvolvido por Serratech. Todas as operações são limitadas ao tenant e ao modo da API key."},"servers":[{"url":"/api/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"anc_live_… / anc_test_…"}}},"paths":{"/documents":{"get":{"summary":"Listar documentos (documents:read)","parameters":[{"name":"after","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}},"post":{"summary":"Criar documento e reservar upload R2 (documents:write)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"externalReference":{"type":"string","minLength":1,"maxLength":160},"tags":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"sizeBytes":{"type":"integer","exclusiveMinimum":0,"maximum":26214400},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["title","sizeBytes","sha256"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/documents/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"summary":"Consultar estado (documents:read)","responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/documents/{id}/upload-complete":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"summary":"Validar PDF e confirmar upload (documents:write)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["reservationId"],"properties":{"reservationId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/documents/{id}/signers":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"summary":"Definir signatários (documents:write)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"signers":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"identityNumber":{"type":"string","pattern":"^(?:\\d{11}|\\d{14})$"},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{9,14}$"},"channel":{"default":"EMAIL","type":"string","enum":["EMAIL","WHATSAPP","DIRECT"]},"order":{"default":0,"type":"integer","minimum":0,"maximum":99}},"required":["name","email","identityNumber"],"additionalProperties":false}}},"required":["signers"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/documents/{id}/fields":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"put":{"summary":"Definir posições normalizadas (documents:write)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fields":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"signerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"page":{"type":"integer","minimum":1,"maximum":500},"x":{"type":"number","minimum":0,"maximum":1},"y":{"type":"number","minimum":0,"maximum":1},"width":{"type":"number","exclusiveMinimum":0,"maximum":1},"height":{"type":"number","exclusiveMinimum":0,"maximum":1}},"required":["signerId","page","x","y","width","height"],"additionalProperties":false}}},"required":["fields"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/documents/{id}/send":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"summary":"Disparar convites e consumir cota (documents:send)","responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/documents/{id}/cancel":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"summary":"Cancelar documento (documents:write)","responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/documents/{id}/download":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"summary":"Obter URL do PDF final válida por 120s (documents:read)","responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/search":{"get":{"summary":"Buscar dentro do tenant (search:read)","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":200}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}},"/webhooks":{"post":{"summary":"Registrar endpoint; segredo retornado uma vez (webhooks:manage)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","maxLength":2048,"format":"uri"},"events":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"string","enum":["document.created","document.viewed","document.signed","document.completed","document.rejected","document.expired"]}}},"required":["url","events"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operação concluída","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Entrada inválida"},"401":{"description":"Credencial inválida"},"403":{"description":"Escopo ou plano insuficiente"},"404":{"description":"Recurso não encontrado no tenant"},"409":{"description":"Conflito de estado ou cota"},"429":{"description":"Rate limit ou cota mensal"},"503":{"description":"Dependência indisponível"}}}}}}