API de solicitudes de firma
La API de solicitudes de firma envía documentos a firmar desde su propio sistema. Un envelope (sobre) es lo que la aplicación llama solicitud de firma: lo mismo, con su nombre en la API. Contiene hasta 10 documentos, las personas que los firman o los reciben, y los campos que rellena cada firmante.
AutomaDoc Sign registra una firma electrónica simple con registro de auditoría: quién firmó, cuándo, desde dónde, y la huella (SHA-256) de cada archivo. No es una firma digital basada en certificados. Algunos documentos (testamentos, asuntos de familia, escritos judiciales) y algunos sistemas oficiales necesitan otra forma de firma, así que compruebe qué requiere el suyo.
Autenticación
Sección titulada «Autenticación»Todas las rutas requieren una clave de API de la empresa (empieza por amk_), en cualquiera de estas cabeceras:
X-Webhook-API-Key: amk_…Authorization: Bearer amk_…Un administrador crea las claves de API de la empresa en el Portal de empresa, en Empresa → Claves de API (consulte el inicio rápido de la API). La clave propia de una plantilla abre esa plantilla, no las solicitudes de firma de su empresa: se rechaza con API_KEY_INVALID. Una clave ve todas las solicitudes de su empresa, se hayan creado con la API o en el portal, y nada de otra empresa (ENVELOPE_NOT_FOUND).
Se aplican dos límites de frecuencia:
- 60 peticiones por minuto por clave, sumando todas las rutas de solicitudes de firma.
- 600 documentos por minuto por empresa, compartidos con la API de documentos y el HTTP Trigger. Una creación cuenta uno por cada documento que contiene.
Si se supera cualquiera de ellos, la respuesta es 429 con RATE_LIMITED.
Cómo sale una solicitud
Sección titulada «Cómo sale una solicitud»POST /api/v1/envelopesguarda sus documentos y responde201de inmediato, con la solicitud todavía endrafty cada documento enprepareState: "pending".- AutomaDoc prepara cada documento: los archivos Word, Excel y PowerPoint se convierten a PDF, y se busca en el texto sus anclas y sus etiquetas
[[…]]. Un documento que sigue pendiente después de 30 minutos falla contimeout. - Cuando el último documento está listo, se colocan los campos de las anclas y las etiquetas y, con
send: true, se envía la solicitud. Los destinatarios por correo electrónico a los que les toca reciben su invitación. - Lea
GET /api/v1/envelopes/:idpara seguirla. Si no se pudo enviar, sigue endraftysendErrorindica el motivo.
La API pública no tiene una llamada de envío aparte: una solicitud creada sin send: true se queda como borrador. Un borrador que no se pudo enviar tampoco se puede reintentar con la API; cree una solicitud nueva. Los borradores que nadie modifica en 30 días se eliminan.
Crear una solicitud
Sección titulada «Crear una solicitud»POST https://api.automadoc.cc/api/v1/envelopesEnvíe el cuerpo como JSON (Content-Type: application/json, 14 MB como máximo), o como multipart/form-data con una parte envelope que contiene el mismo JSON más una parte por archivo (26 MB como máximo para toda la petición).
| Campo | Obligatorio | Qué hace |
|---|---|---|
title |
sí | Se muestra a los firmantes y en los correos. Hasta 200 caracteres. |
message |
no | Una nota para los destinatarios, hasta 1.000 caracteres. |
documents |
sí | De 1 a 10 documentos, en orden (ver más abajo). |
recipients |
sí | De 1 a 20 destinatarios (ver más abajo). |
fields |
no | Campos colocados por coordenadas (ver más abajo). Como máximo 500. |
anchors |
no | Campos colocados en relación con un texto de los documentos (ver más abajo). Como máximo 50. |
autoTags |
no | true coloca campos a partir de las etiquetas [[…]] escritas en los documentos (ver más abajo). |
send |
no | true envía la solicitud en cuanto los documentos están preparados y los campos colocados. Si no, se queda como borrador. |
locale |
no | El idioma de los correos y de la página de firma: en, zh, id, es, vi, th o ja. Cualquier otro valor se ignora. |
timezone |
no | Una zona horaria IANA (Asia/Jakarta) para las fechas escritas en los documentos y en el certificado. Predeterminado: UTC. |
expiryDays |
no | Días desde el envío hasta que caduca la solicitud: de 1 a 120, 30 de forma predeterminada. |
reminders |
no | { "everyDays": 3, "max": 3 } (el valor predeterminado; everyDays de 1 a 30, max de 0 a 10), o false para ninguno. |
appendCertificate |
no | Predeterminado true: cada PDF firmado termina con el certificado de finalización. El certificado también se puede descargar siempre por separado. |
Documentos
Sección titulada «Documentos»Cada documento es exactamente uno de estos:
| Campo | Qué es |
|---|---|
base64 |
Los bytes del archivo en base64 (se acepta un prefijo data:). Todos los documentos en base64 de una petición pueden sumar como máximo 10 MB una vez decodificados; envíe los archivos más grandes como multipart. |
file |
El nombre de una parte de la petición multipart que contiene el archivo. |
generationId |
Un documento completado que AutomaDoc generó para su empresa (el generationId de la API de documentos, o cualquier otro documento generado que aún se conserve). Su archivo se copia en la solicitud. |
name es opcional: de forma predeterminada es el nombre de archivo de la parte, el nombre del archivo generado, o “Document 1”, “Document 2”. Se quita un .pdf, .docx, .xlsx o .pptx final. Los archivos pueden ser PDF, Word, Excel o PowerPoint, reconocidos por su contenido, nunca por su nombre. Cada archivo puede ocupar como máximo 25 MB, y los archivos de una solicitud como máximo 50 MB en total.
Destinatarios
Sección titulada «Destinatarios»| Campo | Obligatorio | Qué hace |
|---|---|---|
key |
sí | Su propio nombre para este destinatario (client), que usan fields y anchors y que se devuelve en cada respuesta. De 1 a 60 letras, dígitos, _, - o ., único en la petición. |
role |
sí | signer (rellena campos y firma) o cc (recibe el resultado firmado). |
name |
sí | Hasta 120 caracteres. |
email |
con reach: "email" |
Adónde se envía la invitación. Opcional para un destinatario por enlace. |
reach |
no | "email" (predeterminado): AutomaDoc envía la invitación por correo cuando le toca a este destinatario. "link": no se envía ningún correo, y la respuesta de creación devuelve una signingUrl para que usted la entregue. |
routingOrder |
no | De 1 a 100, 1 de forma predeterminada. Los destinatarios con el mismo número firman en paralelo; un número mayor espera a que hayan terminado todos los menores. |
accessCode |
no | De 6 a 128 caracteres que el destinatario debe escribir antes de ver los documentos. Cinco códigos incorrectos bloquean el enlace. Entrégueselo usted mismo, no en el mismo mensaje que el enlace. |
slot |
no | Con autoTags: el nombre de rol usado en las etiquetas (Client) que rellena este destinatario. |
Campos por coordenadas
Sección titulada «Campos por coordenadas»| Campo | Obligatorio | Qué hace |
|---|---|---|
document |
sí | El índice del documento en documents, desde 0. |
recipient |
sí | Una key de destinatario. Solo los firmantes tienen campos. |
type |
sí | signature, initials, name, date_signed, text, checkbox, company o email. |
page |
sí | La página, desde 1. |
x, y, w, h |
sí | Posición y tamaño en puntos (1/72 de pulgada), medidos desde la esquina superior izquierda de la página tal como se muestra (después de cualquier rotación). Un campo debe medir al menos 8 puntos de ancho y de alto y estar dentro de la página. |
required |
no | Predeterminado true. |
label |
no | Una indicación que se muestra al firmante, hasta 100 caracteres. |
options |
no | Para campos de texto: maxLength (de 1 a 1.000), validate ("number" o "email"), fontSize (de 6 a 72, se reduce para caber). |
name y email empiezan con el nombre y la dirección del destinatario, que el firmante puede cambiar; date_signed se rellena con la fecha de firma, escrita en la zona horaria de la solicitud. Las páginas y las posiciones se comprueban con los documentos preparados cuando se envía la solicitud (field_bad_page, field_off_page), ya que un archivo Word no tiene páginas hasta que se convierte.
Campos por texto de anclaje
Sección titulada «Campos por texto de anclaje»Un ancla coloca un campo en relación con un texto que ya está en el documento, así que no necesita coordenadas:
| Campo | Obligatorio | Qué hace |
|---|---|---|
anchor |
sí | El texto que se busca, hasta 200 caracteres. La búsqueda es exacta y distingue mayúsculas y minúsculas; cualquier serie de espacios o saltos de línea coincide con cualquier otra. |
recipient |
sí | Una key de destinatario. |
type |
sí | Un tipo de campo, como arriba. |
occurrence |
no | "all" (predeterminado: un campo en cada coincidencia, como máximo 200), o n para solo la n-ésima coincidencia, contada en todos los documentos de la solicitud en orden de lectura. |
offsetX, offsetY |
no | Puntos desde la esquina superior izquierda del texto encontrado hasta la esquina superior izquierda del campo (de -2.000 a 2.000, predeterminado 0). Un offsetY negativo sube. |
w, h |
no | El tamaño del campo en puntos (de 8 a 1.000). Predeterminado: firma 160×48, iniciales 64×40, casilla 14×14, fecha 110×20, correo electrónico 180×20, otro texto 160×20. |
required, label |
no | Como en los campos por coordenadas. |
Un campo que se saldría de la página se devuelve a ella. Un ancla que no coincide con nada no crea ningún campo, lo que suele aparecer como signer_without_fields en sendError.
Campos a partir de etiquetas
Sección titulada «Campos a partir de etiquetas»Con autoTags: true, las etiquetas escritas en los documentos se convierten en campos para el destinatario cuyo slot coincide con el rol de la etiqueta (exactamente, respetando mayúsculas y minúsculas):
[[sign:Client]] [[initials:Client]] [[name:Client]] [[date:Client]][[text:Client:PO number]] [[check:Client]] [[company:Client]] [[email:Client]][[sign:Client;w=180;h=50]] [[text:Client:Notes;optional]]La esquina superior izquierda del campo es la esquina superior izquierda de la etiqueta, así que el campo cubre la etiqueta. Una etiqueta cuyo rol no rellena ningún destinatario no crea ningún campo.
La respuesta
Sección titulada «La respuesta»201 Created con la solicitud. Justo después de crearla es un borrador cuyos documentos aún se están preparando:
{ "id": "env_01JAB3K9Q7M2X8R4T6V0W1Y2Z3", "status": "draft", "finishing": false, "finalizeFailed": false, "title": "Service agreement ACME-2026-114", "createdAt": 1792290600000, "sentAt": null, "expiresAt": null, "completedAt": null, "documents": [ { "id": "doc_01JAB3K9RA5C7E9G1H3J5K7M9N", "name": "Service agreement", "prepareState": "pending", "prepareError": null, "pageCount": null, "originalSha256": "3b7e0c…", "preparedSha256": null, "finalSha256": null, "deliveredSha256": null } ], "recipients": [ { "id": "rcp_01JAB3K9R2B4D6F8H0J2K4M6P8", "key": "client", "role": "signer", "name": "Dana Lee", "email": "dana@example.com", "status": "created", "routingOrder": 1, "viewedAt": null, "completedAt": null, "declineReason": null } ], "auditHead": "a41f9d…", "sendError": null}Un destinatario con reach: "link" tiene además una signingUrl (https://sign.automadoc.cc/#/…) solo en esta respuesta: ninguna lectura posterior la devuelve, así que guárdela ahora. El enlace empieza a funcionar cuando se envía la solicitud. Cada invitación y cada recordatorio por correo llevan un enlace nuevo, por eso a un destinatario por enlace nunca se le envían recordatorios por correo.
Leer una solicitud
Sección titulada «Leer una solicitud»GET https://api.automadoc.cc/api/v1/envelopes/{envelopeId}Responde con la misma estructura que la creación, con el estado actual. Consúltela cada pocos segundos mientras se preparan los documentos; una vez enviada la solicitud, basta con consultarla cada pocos minutos.
status |
Significado |
|---|---|
draft |
No enviada: documentos en preparación, no se pidió send, o sendError indica por qué no pudo salir. |
sent |
Enviada a firmar. |
completed |
Todos firmaron y los archivos firmados están listos. |
declined |
Un firmante la rechazó; su declineReason figura en su destinatario. |
voided |
Usted la anuló. |
expired |
Pasó expiresAt antes de que todos firmaran. |
finishing: true (con status: "sent") significa que todos han firmado y se están creando los PDF firmados. finalizeFailed: true significa que no se pudieron crear tras todos los reintentos: las firmas se conservan y nuestro equipo recibió una alerta.
Los destinatarios pasan por created (aún no es su turno), sent, viewed y después completed o declined. Un destinatario cc está en sent desde el principio.
Cada documento lleva el SHA-256 de cada etapa: originalSha256 (su archivo), preparedSha256 (el PDF que todos vieron y firmaron), finalSha256 (estampado con las firmas) y deliveredSha256 (el archivo que se descarga: estampado, más el certificado cuando está añadido). auditHead es el hash del último evento del registro de auditoría de la solicitud. Cualquiera puede comprobar un archivo entregado con POST https://api.automadoc.cc/api/verify y { "sha256": "…" } (hexadecimal en minúsculas del archivo completo), que responde si coincide con una solicitud completada.
Listar solicitudes
Sección titulada «Listar solicitudes»GET https://api.automadoc.cc/api/v1/envelopes?status=completed&since=1792290600000&limit=50| Parámetro | Qué hace |
|---|---|
status |
draft, sent, completed, declined, voided o expired. |
since |
Solo las solicitudes actualizadas en ese momento o después (Unix ms). |
limit |
De 1 a 100, 25 de forma predeterminada. |
cursor |
El nextCursor de la página anterior. |
La respuesta es { "envelopes": [ … ], "nextCursor": "…" }, de la más reciente a la más antigua; nextCursor es null en la última página. key es null para los destinatarios de solicitudes creadas en el portal.
Descargar los archivos firmados
Sección titulada «Descargar los archivos firmados»GET https://api.automadoc.cc/api/v1/envelopes/{envelopeId}/documents/{documentId}/signedGET https://api.automadoc.cc/api/v1/envelopes/{envelopeId}/certificateGET https://api.automadoc.cc/api/v1/envelopes/{envelopeId}/combinedsigned es un documento firmado; certificate es el certificado de finalización por separado; combined son todos los documentos firmados en un PDF (con el certificado al final cuando está añadido), que solo se crea para solicitudes de dos o más documentos. Funcionan una vez que la solicitud está en completed: antes, responden 409 con DOCUMENT_NOT_FOUND.
La respuesta es un enlace de corta duración, no el archivo:
{ "url": "https://api.automadoc.cc/api/esign-files/env_01JAB3K9Q7M2X8R4T6V0W1Y2Z3/final/doc_01JAB3K9RA5C7E9G1H3J5K7M9N.pdf?e=…&d=a&n=…&s=…", "filename": "Service agreement.pdf", "expiresAt": 1792306800000, "sha256": "e5a01c…"}Descargue url en un plazo de 15 minutos; no necesita clave. Vuelva a pedirlo para obtener uno nuevo. sha256 es la huella del archivo (para signed, el deliveredSha256 del documento). Cada descarga queda en el registro de auditoría. Los archivos firmados de una solicitud completada se conservan hasta que alguien los elimine.
Anular una solicitud
Sección titulada «Anular una solicitud»POST https://api.automadoc.cc/api/v1/envelopes/{envelopeId}/void{ "reason": "Replaced by version 2" }Detiene una solicitud enviada: los enlaces dejan de funcionar, y los destinatarios que ya la habían recibido reciben un aviso por correo. reason es obligatorio (hasta 500 caracteres). Responde con la solicitud, ahora en voided. Solo se puede anular una solicitud enviada que siga abierta.
Recordar a un destinatario
Sección titulada «Recordar a un destinatario»POST https://api.automadoc.cc/api/v1/envelopes/{envelopeId}/recipients/{recipientId}/remindrecipientId es el id del destinatario (rcp_…), no su key. Envía al destinatario un enlace nuevo por correo al instante; el enlace de los correos anteriores deja de funcionar. Solo para un destinatario por correo al que le toca, como máximo una vez cada 10 minutos. Responde { "remindedAt": 1792300000000, "channel": "email" }. Los recordatorios automáticos siguen el ajuste reminders de la solicitud sin ninguna llamada.
Ejemplo: curl
Sección titulada «Ejemplo: curl»Cree una solicitud con un firmante, coloque la firma junto al texto “Client signature:” y la fecha junto a “Date:”, y envíela. El JSON va en la parte envelope y el PDF en una parte llamada contract:
cat > envelope.json <<'EOF'{ "title": "Service agreement ACME-2026-114", "message": "Please review and sign by Friday.", "timezone": "Asia/Jakarta", "documents": [{ "name": "Service agreement", "file": "contract" }], "recipients": [ { "key": "client", "role": "signer", "name": "Dana Lee", "email": "dana@example.com" } ], "anchors": [ { "anchor": "Client signature:", "recipient": "client", "type": "signature", "offsetX": 110, "offsetY": -10 }, { "anchor": "Date:", "recipient": "client", "type": "date_signed", "offsetX": 40, "occurrence": 1 } ], "send": true}EOF
curl -X POST 'https://api.automadoc.cc/api/v1/envelopes' \ -H "X-Webhook-API-Key: $AUTOMADOC_KEY" \ -F 'envelope=<envelope.json' \ -F 'contract=@contract.pdf;type=application/pdf'Sígala hasta que status sea sent (o sendError tenga valor), y después hasta que esté en completed:
curl -s 'https://api.automadoc.cc/api/v1/envelopes/ENVELOPE_ID' \ -H "X-Webhook-API-Key: $AUTOMADOC_KEY"Una vez completada, obtenga el enlace del documento firmado y descárguelo:
url=$(curl -s 'https://api.automadoc.cc/api/v1/envelopes/ENVELOPE_ID/documents/DOCUMENT_ID/signed' \ -H "X-Webhook-API-Key: $AUTOMADOC_KEY" | jq -r .url)curl -s -o signed.pdf "$url"La misma creación en JSON pone el archivo en base64: "documents": [{ "name": "Service agreement", "base64": "JVBERi0xLjcK…" }].
Ejemplo: Node.js
Sección titulada «Ejemplo: Node.js»Node.js 18 o posterior. Ejecútelo con AUTOMADOC_KEY=amk_… node sign.mjs:
import { readFile, writeFile } from 'node:fs/promises'import { createHash } from 'node:crypto'
const API = 'https://api.automadoc.cc'const KEY = process.env.AUTOMADOC_KEY
async function call(method, path, body) { const res = await fetch(API + path, { method, headers: body ? { 'X-Webhook-API-Key': KEY, 'Content-Type': 'application/json' } : { 'X-Webhook-API-Key': KEY }, body: body ? JSON.stringify(body) : undefined, }) const json = await res.json() if (!res.ok) throw new Error(`${res.status} ${json.code}: ${json.error}`) return json}
const pdf = await readFile('contract.pdf')let envelope = await call('POST', '/api/v1/envelopes', { title: 'Service agreement ACME-2026-114', documents: [{ name: 'Service agreement', base64: pdf.toString('base64') }], recipients: [{ key: 'client', role: 'signer', name: 'Dana Lee', email: 'dana@example.com' }], anchors: [{ anchor: 'Client signature:', recipient: 'client', type: 'signature', offsetX: 110, offsetY: -10 }], send: true,})
// The documents are prepared and the fields placed, then the envelope is sent.while (envelope.status === 'draft' && !envelope.sendError) { await new Promise((resolve) => setTimeout(resolve, 2000)) envelope = await call('GET', `/api/v1/envelopes/${envelope.id}`)}if (envelope.sendError) throw new Error(`Not sent: ${JSON.stringify(envelope.sendError)}`)console.log(`${envelope.id} is ${envelope.status}`)
// Later (a scheduled job, say): download every signed document of a completed envelope.export async function downloadSigned(envelopeId) { const current = await call('GET', `/api/v1/envelopes/${envelopeId}`) if (current.status !== 'completed') return false for (const doc of current.documents) { const link = await call('GET', `/api/v1/envelopes/${envelopeId}/documents/${doc.id}/signed`) const bytes = Buffer.from(await (await fetch(link.url)).arrayBuffer()) if (createHash('sha256').update(bytes).digest('hex') !== link.sha256) throw new Error('Download damaged') await writeFile(`${doc.id}.pdf`, bytes) } return true}Errores
Sección titulada «Errores»Los errores son JSON: { "code": "…", "error": "English text" }, con path indicando la parte de la petición que falla (recipients[1].email) cuando la hay.
| HTTP | code |
Cuándo |
|---|---|---|
| 400 | INVALID_REQUEST |
La petición no es válida; consulte path y error. |
| 401 | API_KEY_MISSING |
No hay clave en X-Webhook-API-Key ni en Authorization. |
| 403 | API_KEY_INVALID |
La clave es desconocida o está revocada, o es la clave propia de una plantilla. |
| 403 | ESIGN_SEND_BLOCKED |
Recordatorio: el envío está detenido para su empresa mientras se revisa una denuncia sobre sus correos. Póngase en contacto con soporte. |
| 404 | ENVELOPE_NOT_FOUND |
No existe esa solicitud en su empresa. |
| 404 | RECIPIENT_NOT_FOUND |
Recordatorio: no existe ese destinatario en esta solicitud. |
| 404 | DOCUMENT_NOT_FOUND |
Descarga: no existe ese documento, o ese archivo (un archivo combined de una solicitud con un solo documento). |
| 404 | GENERATION_NOT_FOUND |
Un generationId que no es un documento generado de su empresa. |
| 409 | GENERATION_NOT_COMPLETED |
El documento generado no está completado, o ya no se conserva. |
| 409 | DOCUMENT_NOT_FOUND |
Descarga antes de que la solicitud esté completada. |
| 409 | ENVELOPE_NOT_DRAFT |
Anulación o recordatorio de una solicitud que nunca se envió. |
| 409 | ENVELOPE_CLOSED |
Anulación o recordatorio de una solicitud completada, rechazada, anulada o caducada. |
| 409 | ENVELOPE_FINISHING |
Anulación o recordatorio después de que todos firmaran, mientras se crean los archivos firmados. |
| 409 | NOT_ALLOWED |
Recordatorio a un destinatario al que no le toca, o a un destinatario por enlace. |
| 410 | ENVELOPE_CLOSED |
Descarga después de que se eliminaran los archivos de la solicitud. |
| 413 | FILE_TOO_LARGE |
Un archivo de más de 25 MB, o una petición multipart de más de 26 MB. |
| 413 | ENVELOPE_TOO_LARGE |
Los documentos en base64 suman más de 10 MB, o los archivos más de 50 MB. |
| 413 | INVALID_REQUEST |
Un cuerpo JSON de más de 14 MB. |
| 415 | UNSUPPORTED_FILE |
Un archivo que no es PDF, Word, Excel ni PowerPoint. |
| 429 | RATE_LIMITED |
Más de 60 peticiones por minuto para la clave, o 600 documentos por minuto para la empresa. |
| 429 | ESIGN_SEND_RATE_LIMITED |
Recordatorio: a este destinatario se le envió un recordatorio hace menos de 10 minutos. |
| 502 | ESIGN_WORKER_UNAVAILABLE |
Recordatorio: no se pudo entregar el recordatorio. |
| 503 | ESIGN_WORKER_UNSUPPORTED |
Ahora mismo no se pueden preparar documentos para firmar. Vuelva a intentarlo más tarde; no se creó nada. |
Una creación rechazada mientras se guardan sus documentos elimina el borrador y sus archivos, para que no quede nada a medias.
Por qué no se envió una solicitud
Sección titulada «Por qué no se envió una solicitud»Con send: true, el envío se produce después de que la creación haya respondido, así que sus rechazos llegan en el sendError de la solicitud (que se queda en draft), no como un estado HTTP:
sendError.code |
Significado |
|---|---|
SEND_PROBLEMS |
La solicitud no está completa; problems enumera los motivos (ver más abajo). |
QUOTA_EXCEEDED |
La cuota mensual y todos los paquetes de documentos están agotados (consulte lo que cuesta). |
ESIGN_SEND_RATE_LIMITED |
Gratuito: su empresa ya envió 3 solicitudes en la última hora. En cualquier plan: más de 10 envíos en un minuto. |
ESIGN_RECIPIENT_CAP |
Este envío superaría los destinatarios diarios que puede alcanzar su empresa (ver más abajo). |
ESIGN_SEND_BLOCKED |
El envío está detenido para su empresa mientras se revisa una denuncia sobre sus correos. Póngase en contacto con soporte. |
ESIGN_EMAIL_UNAVAILABLE |
No se pueden enviar correos para esta solicitud. No se envió ni se cobró nada; los destinatarios con reach: "link" siguen pudiendo usarse. |
ESIGN_EMAIL_UNVERIFIED |
La persona que creó la clave no tiene una dirección de correo electrónico verificada. |
ESIGN_ALREADY_PENDING |
Este documento generado ya está pendiente de firma en otra solicitud. |
INVALID_REQUEST |
Las etiquetas y las anclas juntas crearon más de 500 campos, o algo inesperado falló. |
Cada problema es { "code": "…" }, con documentId, recipientId o fieldId cuando se refiere a uno de ellos (ids, no sus claves):
| Problema | Significado |
|---|---|
document_failed |
Un documento no se pudo preparar; su prepareError indica el motivo (ver más abajo). |
too_many_pages |
Más de 300 páginas en el conjunto de los documentos. |
envelope_too_large |
Los archivos suman más de 50 MB, o los PDF preparados más de 100 MB. |
no_signer |
Ningún destinatario tiene el rol signer. |
signer_without_fields |
Un firmante no tiene ningún campo: un ancla no coincidió con nada, o el rol de una etiqueta no tenía slot. |
recipient_missing_email |
Un destinatario por correo no tiene dirección. |
recipient_role_unavailable |
Un rol distinto de signer o cc. |
too_many_fields |
Más de 500 campos. |
field_for_non_signer |
Se asignó un campo a un destinatario cc. |
field_bad_page |
La página de un campo está más allá del final de su documento. |
field_off_page |
Un campo se sale de su página, o mide menos de 8 puntos. |
field_type_unavailable |
Un tipo de campo distinto de los ocho indicados arriba. |
El prepareError de un documento es uno de estos: pdf_encrypted (el PDF está protegido con contraseña), file_too_large (su PDF preparado superaría los 50 MB), too_many_pages, unsupported_file, invalid_file (el archivo está dañado), conversion_failed, source_unavailable, timeout o internal.
Límites
Sección titulada «Límites»| Límite | Valor |
|---|---|
| Documentos por solicitud | 10 |
| Un archivo | 25 MB |
| Archivos de una solicitud en total | 50 MB |
| Un documento preparado (el PDF que todos firman) | 50 MB |
| Documentos preparados de una solicitud en total | 100 MB |
| Páginas en el conjunto de los documentos de una solicitud | 300 |
| Destinatarios por solicitud | 20 |
| Campos por solicitud | 500 |
| Anclas por solicitud | 50, cada una con 200 coincidencias como máximo |
| Cuerpo de una petición JSON | 14 MB, con 10 MB de documentos en base64 como máximo |
| Petición multipart | 26 MB |
| Caducidad | de 1 a 120 días después del envío, 30 de forma predeterminada |
| Recordatorios | cada 1 a 30 días, 10 como máximo; de forma predeterminada cada 3 días, 3 veces |
| Códigos de acceso incorrectos antes de que se bloquee un enlace | 5 |
| Enlaces de descarga | 15 minutos |
| Borradores | se eliminan tras 30 días sin cambios |
| Archivos de solicitudes rechazadas, anuladas y caducadas | se eliminan 90 días después del cierre |
Para enviar más de 26 MB de archivos, añádalos por generationId, que no viaja en la petición.
Topes de envío. Sin Pro y sin un puesto Business, una empresa envía como máximo 3 solicitudes por hora y alcanza como máximo 20 destinatarios al día (5 al día en las primeras 24 horas de la cuenta). Con Pro o un puesto Business, alcanza hasta 1.000 destinatarios al día. Cuenta cada destinatario, cc y destinatarios por enlace incluidos, en un periodo móvil de 24 horas. Toda empresa envía como máximo 10 solicitudes por minuto.
Lo que cuesta
Sección titulada «Lo que cuesta»- Una solicitud enviada consume un documento de su cuota, tenga los documentos y destinatarios que tenga. Se cobra al enviarla y no se devuelve si después se anula, se rechaza o caduca. Un borrador no cuesta nada.
- Los documentos generados por AutomaDoc se envían gratis la primera vez: una solicitud cuyos documentos proceden todos de
generationIdno cuesta nada, salvo que alguno de ellos ya se enviara en otra solicitud; entonces cuesta un documento. Una solicitud que mezcla archivos generados y subidos cuesta uno. - Qué paga. Una solicitud enviada con una clave de la empresa es automatizada, como la API de documentos: gratuita con Pro (o una prueba); en otro caso se descuenta primero de los documentos automatizados de sus puestos Business, después de la cuota mensual gratuita y después de sus paquetes de documentos. Cuando todo está agotado,
sendErroresQUOTA_EXCEEDED. Un puesto Starter pertenece a una persona y no cubre los envíos por la API.
Los topes de envío anteriores se aplican en todos los planes.