BunnyDoc
APIE-Signing API

Templates

List your E-Signing templates and read a single template's roles — the starting point for sending an envelope from the API.

Templates are the reusable documents your team has already set up in the app, with their fields and signer roles laid out. To send an envelope through the API you start from one of these, so the two read endpoints here are usually the first calls after authentication.

Both require the templates:read scope, and a key only ever sees the templates its owner can see in the app.

List templates

Endpoint

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

Query parameters

ParameterTypeDescription
pageintegerPage number, from 1. Default 1.
per_pageintegerResults per page, 1100. Default 25.
searchstringOptional. Filter by template name, up to 200 characters.

Example request

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

Response

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 }
}
FieldTypeDescription
idstringThe template id — pass it to POST /v1/envelopes/from-template.
namestringTemplate name.
descriptionstring | nullOptional description.
file_countintegerNumber of documents in the template.
role_countintegerNumber of signer roles.
created_at / updated_atstringISO 8601 timestamps.

Get a template

Returns one template including its roles. Call this before sending — the roles array tells you exactly which role names to supply, and which ones are locked.

Endpoint

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

Example request

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

Response

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"
    }
  ]
}
Role fieldTypeDescription
rolestringThe role name. Supply this in recipients[].role when you send.
recipient_typestringHow the recipient participates, e.g. need-to-sign, receives-a-copy.
signing_orderintegerThe order this role signs in.
lockedbooleanIf true, the name and email are fixed on the template — omit this role from your send request.
name / emailstring | nullPresent only for locked roles — the fixed recipient.

Locked roles can't be reassigned

A locked role already has a person attached (or it's the template's own sender). Sending a recipient for a locked role is rejected with unknown_signer_role. Only supply recipients for roles where locked is false.

Errors

Statuserror.codeWhen it happens
404template_not_foundNo template with that id exists in your company.

Next step

On this page