{ "success": true, "message": "El documento ya se había creado con este Idempotency-Key", "data": { "id": "2be3b9d7-4c5d-4e6f-8a9b-0c1d2e3f4a5b", "status": "PENDING_SIGNATURE", "signatureType": "SIMPLE", "fileName": "contrato.pdf", "createdAt": "2026-10-26T12:00:00.000Z", "creator": { "email": "ana.lopez@cliente.example" }, "participantsCount": 2, "publicUrl": "https://app.firmalo.com/public/documents/2be3b9d7-4c5d-4e6f-8a9b-0c1d2e3f4a5b", "participants": [ { "email": "luis.martinez@correo.example", "status": "PENDING", "signatureType": "SIMPLE", "order": 1 } ] }}
Integration Documents
Crear un documento PDF con su flujo de firmas
Es multipart/form-data con dos campos: file (el PDF, binario) y payload (texto con un JSON con creator, document y participants; su estructura es IntegrationDocumentPayloadDto).
La organización sale de la API key. El creador se identifica por su correo: si es miembro de la organización se usa su cuenta; si existe sin membresía, se le crea una con el rol INTEGRATION_DOCUMENT_CREATOR; si no existe, se crea como usuario provisional (sin contraseña). Sus datos nunca se sobrescriben.
Cada documento creado consume un crédito de la organización. Los participantes se invitan por correo.
Orden de firma.document.isSequential decide si participants[].order es obligatorio:
document.isSequential
SIGNER
WITNESS
true o se omite
order obligatorio: firman uno a la vez
No requiere order ni participa en él
false
order no es obligatorio: firman en cualquier momento
No requiere order ni participa en él
En un documento secuencial, order es un entero que inicia en 1 y debe ser único y consecutivo entre firmantes (1, 2, 3…). Es este valor, no la posición en participants, lo que define el orden. Si no se cumple, la respuesta es 422 con INVALID_SIGNING_ORDER o DUPLICATE_SIGNING_ORDER.
Ejemplo de payload: flujo secuencial (dos firmantes y un testigo):
API key de tu organización, con formato fma_live_<publicId>_<secret>. Se emite (y se rota o revoca) desde Integraciones en Firmalo; el secreto completo sólo se muestra al emitirla.
Ejemplo (no es una llave real): fma_live_0123456789abcdef_EjemploNoRealEjemploNoRealEjemploNoReal1234
La organización y el contexto de acceso salen de la llave: no se usan JWT, X-Account-Id ni X-Organization-Id. Llama a la API sólo desde tu backend; nunca expongas la llave en un navegador o una app móvil.
Valor único elegido por ti para este documento (1 a 255 caracteres ASCII visibles), por API key, durante 24 horas. Repetir la petición con la misma clave y el mismo contenido devuelve el documento original sin subir, crear, cobrar ni notificar nada.