BunnyDoc
APIAPI de firma electrónica

Plantillas

Lista tus plantillas de firma electrónica y consulta los roles de una plantilla concreta: el punto de partida para enviar un sobre desde la API.

Las plantillas son los documentos reutilizables que tu equipo ya ha configurado en la app, con sus campos y roles de firmante definidos. Para enviar un sobre por la API parte de una de ellas, así que los dos endpoints de lectura de aquí suelen ser las primeras llamadas tras la autenticación.

Ambos requieren el scope templates:read, y una clave solo ve las plantillas que su propietario puede ver en la app.

Listar plantillas

Endpoint

GET   https://api2.bunnydoc.com/v1/templates

Parámetros de consulta

ParámetroTipoDescripción
pageintegerNúmero de página, desde 1. Por defecto 1.
per_pageintegerResultados por página, 1–100. Por defecto 25.
searchstringOpcional. Filtra por nombre de plantilla, hasta 200 caracteres.

Ejemplo de petición

Listar plantillas
curl "https://api2.bunnydoc.com/v1/templates?per_page=25&search=nda" \
  -H "Authorization: Bearer <access_token>"

Respuesta

200 OK
{
  "data": [
    {
      "id": "018f2c3d-4e5f-7a8b-9c0d-1e2f3a4b5c6d",
      "name": "Mutual NDA",
      "description": "Standard two-way non-disclosure agreement",
      "file_count": 1,
      "role_count": 2,
      "created_at": "2026-06-01T09:30:00.000Z",
      "updated_at": "2026-07-10T14:12:00.000Z"
    }
  ],
  "pagination": { "page": 1, "per_page": 25, "total": 1, "total_pages": 1 }
}
CampoTipoDescripción
idstringEl id de la plantilla: pásalo a POST /v1/envelopes/from-template.
namestringNombre de la plantilla.
descriptionstring | nullDescripción opcional.
file_countintegerNúmero de documentos de la plantilla.
role_countintegerNúmero de roles de firmante.
created_at / updated_atstringMarcas de tiempo ISO 8601.

Obtener una plantilla

Devuelve una plantilla incluidos sus roles. Llama a este endpoint antes de enviar: el array roles te indica exactamente qué nombres de rol debes proporcionar y cuáles están bloqueados.

Endpoint

GET   https://api2.bunnydoc.com/v1/templates/{id}

Ejemplo de petición

Obtener una plantilla
curl https://api2.bunnydoc.com/v1/templates/018f2c3d-4e5f-7a8b-9c0d-1e2f3a4b5c6d \
  -H "Authorization: Bearer <access_token>"

Respuesta

200 OK
{
  "id": "018f2c3d-4e5f-7a8b-9c0d-1e2f3a4b5c6d",
  "name": "Mutual NDA",
  "description": "Standard two-way non-disclosure agreement",
  "file_count": 1,
  "role_count": 2,
  "created_at": "2026-06-01T09:30:00.000Z",
  "updated_at": "2026-07-10T14:12:00.000Z",
  "roles": [
    {
      "role": "Client",
      "recipient_type": "need-to-sign",
      "signing_order": 1,
      "locked": false
    },
    {
      "role": "Account manager",
      "recipient_type": "need-to-sign",
      "signing_order": 2,
      "locked": true,
      "name": "Dana Lee",
      "email": "dana@yourco.com"
    }
  ],
  "fields": [
    {
      "id": "018f2c3d-7a8b-7c9d-8e0f-1a2b3c4d5e6f",
      "role": "Client",
      "file_id": "018f2c3d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
      "page_number": 1,
      "type": "signature",
      "label": "Client signature",
      "required": true,
      "locked": false,
      "position": { "x": 72, "y": 540, "width": 180, "height": 48 }
    }
  ],
  "files": [
    { "file_id": "018f2c3d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "order": 1, "excluded_pages": [] }
  ],
  "settings": {
    "signing_order": true,
    "email_subject": "Please sign: Mutual NDA",
    "email_message": "<p>Please review and sign the enclosed NDA.</p>",
    "expiry_date": "2026-12-31T23:59:59.000Z",
    "timezone": "Australia/Sydney",
    "signed_date_format": "DD/MM/YYYY",
    "envelope_date_time_format": "DD/MM/YYYY HH:mm",
    "brand_id": "018f2c3d-9c0d-7e1f-8a2b-3c4d5e6f7a8b"
  }
}

roles

Campo de rolTipoDescripción
rolestringEl nombre del rol. Proporciónalo en recipients[].role al enviar.
recipient_typestringCómo participa el destinatario, p. ej. need-to-sign, receives-a-copy.
signing_orderintegerEl orden en que firma este rol.
lockedbooleanSi es true, el nombre y el correo están fijados en la plantilla: omite este rol en tu petición de envío.
name / emailstring | nullPresentes solo en roles bloqueados: el destinatario fijo.

Los roles bloqueados no se pueden reasignar

Un rol bloqueado ya tiene una persona asignada (o es el propio remitente de la plantilla). Enviar un destinatario para un rol bloqueado se rechaza con unknown_signer_role. Proporciona destinatarios solo para los roles con locked en false.

fields

Todos los campos colocados en la plantilla, para que puedas mostrar a tus usuarios qué pedirá el documento antes de enviarlo.

CampoTipoDescripción
idstring | nullEl id del campo.
rolestringEl rol de firmante al que pertenece el campo: únelo con roles[].role.
file_idstringSobre cuál de los files de la plantilla se sitúa el campo.
page_numberintegerPágina (desde 1) dentro de ese archivo.
typestringTipo de campo: signature, initials, text, date, date_signed, checkbox, radio, dropdown, multi_select, email, phone, number, amount, address, company, job_title, title, full_name, first_name, last_name, masked_text, image o file_attachment.
labelstring | nullLa etiqueta del campo.
requiredbooleanSi un firmante debe completarlo.
lockedbooleanSi el valor está fijado en la plantilla.
positionobjectx, y, width, height en la página.

Los valores preparados no se exponen

La geometría de los campos es legible; los valores preparados por el remitente no. Un valor del lado del remitente puede ser una referencia de firma o texto sensible precargado, así que nunca sale de la app por esta API.

files

Solo metadatos, en orden de documento.

CampoTipoDescripción
file_idstringEl id del archivo. Úsalo para unirlo con fields[].file_id.
orderintegerPosición en el conjunto de documentos.
excluded_pagesinteger[]Páginas excluidas de la plantilla, si hay alguna.

Los archivos de plantilla no se pueden descargar

Aquí no hay URL de descarga ni ruta de almacenamiento, y no existe ningún endpoint para obtener el documento de una plantilla. Esto te dice qué archivos están adjuntos y en qué orden, nada más. El PDF final firmado se entrega mediante el webhook envelope.document_ready.

settings

Lo que heredará el sobre cuando envíes desde esta plantilla. Leerlo es la forma fiable de saber qué no necesitas pasar.

CampoTipoDescripción
signing_orderbooleanSi los destinatarios firman de forma secuencial.
email_subjectstring | nullAsunto por defecto. Sobrescríbelo por envío con email_subject.
email_messagestring | nullMensaje por defecto, como HTML seguro. Sobrescríbelo por envío con email_message.
expiry_datestring | nullISO 8601. Lo hereda el sobre; no se puede fijar desde la API.
timezonestringZona IANA usada para las fechas del documento y los correos.
signed_date_formatstringCómo se muestran las fechas de firma en el PDF.
envelope_date_time_formatstringCómo se muestran las fechas y horas.
brand_idstring | nullLa marca aplicada a los correos y a la página de firma.

Errores

Estadoerror.codeCuándo ocurre
404template_not_foundNo existe ninguna plantilla con ese id en tu empresa.

Siguiente paso

En esta página