{
  "item": [
    {
      "id": "515d5eef-b648-49b6-a424-edd72f71d2f1",
      "name": "Documents",
      "description": {
        "content": "Create, send, void and list documents for signature — from a template or an inline base64 file. One endpoint, two sources.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ae668323-2d3f-4e80-8e67-6560d0ac3916",
          "name": "List documents",
          "request": {
            "name": "List documents",
            "description": {
              "content": "Lista tus documentos con paginación por cursor y filtros. Para la página siguiente manda el `nextCursor` de la respuesta como `startingAfter`; para la anterior, el `previousCursor` como `endingBefore`. Los cursores son opacos: el `id` de un documento no sirve como cursor (`400 INVALID_CURSOR`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor opaco: el `nextCursor` de la página anterior. Devuelve la página que sigue."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor opaco: el `previousCursor` de la página actual. Devuelve la página anterior."
                },
                {
                  "disabled": true,
                  "key": "status",
                  "value": "<string>",
                  "description": "Filtra por estado: `draft`, `collecting_data`, `awaiting_signatures`, `correcting`, `processing`, `completed`, `expired`, `voided`."
                },
                {
                  "disabled": true,
                  "key": "status[not]",
                  "value": "<string>",
                  "description": "Statuses to hide. Repeat the parameter to hide several, e.g. `?status[not]=voided&status[not]=expired`. Omit to return every status. Documents with no signature state are never hidden. Mutually exclusive with `status`."
                },
                {
                  "disabled": true,
                  "key": "status[not]",
                  "value": "<string>",
                  "description": "Statuses to hide. Repeat the parameter to hide several, e.g. `?status[not]=voided&status[not]=expired`. Omit to return every status. Documents with no signature state are never hidden. Mutually exclusive with `status`."
                },
                {
                  "disabled": true,
                  "key": "sort",
                  "value": "-createdAt",
                  "description": "Orden. Solo `createdAt` / `updatedAt`, ascendente o descendente con el prefijo `-`. Valores: `createdAt`, `-createdAt`, `updatedAt`, `-updatedAt` (default `-createdAt`). Otro valor es un `422 VALIDATION_ERROR`."
                },
                {
                  "disabled": true,
                  "key": "scope",
                  "value": "owner",
                  "description": "Alcance: `owner` (default), `org`, `tenant`, `accessible`."
                },
                {
                  "disabled": true,
                  "key": "folderId",
                  "value": "<string>",
                  "description": "Filtra por carpeta (`fld_…`)."
                },
                {
                  "disabled": true,
                  "key": "templateId",
                  "value": "<string>",
                  "description": "Keep only documents created from this template (`tmpl_…`)."
                },
                {
                  "disabled": true,
                  "key": "search",
                  "value": "<string>",
                  "description": "Búsqueda por texto libre en el nombre (1–255 caracteres)."
                },
                {
                  "disabled": true,
                  "key": "createdAt[gte]",
                  "value": "<dateTime>",
                  "description": "Solo documentos creados en o después de esta fecha (ISO 8601)."
                },
                {
                  "disabled": true,
                  "key": "createdAt[lte]",
                  "value": "<dateTime>",
                  "description": "Solo documentos creados en o antes de esta fecha (ISO 8601)."
                },
                {
                  "disabled": true,
                  "key": "includeTotal",
                  "value": "false",
                  "description": "Si es `true`, la respuesta incluye `totalCount`. Default `false` (más rápido)."
                },
                {
                  "disabled": true,
                  "key": "includeFiledDocuments",
                  "value": "true",
                  "description": "When false, hides documents the caller has filed into one of their own folders. The auto-created inbox folder does not count as filing. Ignored when `folderId` selects a folder."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "07c2ed3b-3fef-4d4e-8b1a-9b25e659d676",
          "name": "Create document",
          "request": {
            "name": "Create document",
            "description": {
              "content": "Crea un documento a partir de **una plantilla** (`source: \"template\"`) **o** de un **archivo subido en base64** (`source: \"file\"`) — nunca ambos. El campo `source` es un discriminador explícito; si lo omites, se infiere de cuál de `templateId` / `file` mandaste, pero cuando lo incluyes **debe coincidir** con el campo presente. Efectos en entorno `live`: consume 1 o más créditos, arranca un workflow de Temporal y sube el archivo a S3. Con una key `test` el documento es `livemode: false` y no factura. Cada firmante toma un **rol** de la plantilla con `roleName` y hereda sus campos; `values` prellena campos del formulario PDF por nombre y `readOnly` lista los que el firmante no puede cambiar (guía [Formularios PDF](/guides/pdf-forms)). `signingOrder: \"sequential\"` + `routingOrder` por firmante invita por etapas.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"source\": \"template\",\n  \"templateId\": \"tmpl_781b330d64722697116d41b9d3263760\",\n  \"name\": \"Contrato de compraventa — Ana López\",\n  \"signers\": [\n    {\n      \"roleName\": \"Cliente\",\n      \"email\": \"ana@cliente.mx\",\n      \"name\": \"Ana López\",\n      \"values\": {\n        \"rfc\": \"XAXX010101000\",\n        \"fecha\": \"2026-09-20\"\n      },\n      \"readOnly\": [\n        \"rfc\"\n      ]\n    },\n    {\n      \"roleName\": \"Asesor\",\n      \"email\": \"asesor@ejemplo.com\",\n      \"name\": \"Juan Pérez\"\n    }\n  ],\n  \"signingOrder\": \"parallel\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "8a2578f5-78e2-4da8-8167-6e30e7302033",
          "name": "Get aggregate statistics",
          "request": {
            "name": "Get aggregate statistics",
            "description": {
              "content": "Conteos agregados en el mismo `scope` que `GET /documents`. Sin rango de fechas, usa los últimos 365 días por default; `recentCount` siempre son los últimos 7 días **dentro** de esa ventana, no de todo el histórico. No es un objeto recurso (sin `livemode`) — es un resumen, como `List documents` pero contado en vez de listado.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                "stats"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "scope",
                  "value": "owner",
                  "description": "Alcance: `owner` (default), `org`, `tenant`, `accessible`."
                },
                {
                  "disabled": true,
                  "key": "createdAt[gte]",
                  "value": "<dateTime>",
                  "description": "Solo cuenta documentos creados en o después de esta fecha (ISO 8601)."
                },
                {
                  "disabled": true,
                  "key": "createdAt[lte]",
                  "value": "<dateTime>",
                  "description": "Solo cuenta documentos creados en o antes de esta fecha (ISO 8601)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "38e4af89-f802-4f66-b659-a3e99fdd82f4",
          "name": "Retrieve document",
          "request": {
            "name": "Retrieve document",
            "description": {
              "content": "Consulta un documento por su `id`. `folderId` es la carpeta (`fld_…`) donde está el documento, y es `null` si no está en una carpeta que tu key pueda abrir con `GET /v3/folders/{id}`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "expand",
                  "value": "<string>",
                  "description": "Lista separada por comas de sub-recursos a expandir en línea. Si se omite, la respuesta trae solo los campos del propio documento."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "585fd9b8-2e27-4a01-b13e-57b07416a503",
          "name": "Update document",
          "request": {
            "name": "Update document",
            "description": {
              "content": "Merge-patch parcial: solo se modifican los campos que envías. Los únicos campos mutables son `name` y `folderId`. `folderId: \"fld_…\"` mueve el documento a esa carpeta; `folderId: null` lo saca de su carpeta. Enviar cualquier otro campo (`status`, `ownerId`, `id`, `createdAt`, …) se rechaza al parsear con **422 `VALIDATION_ERROR`** nombrando el campo ofensor — así se protege un campo inmutable.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Contrato final v2.pdf\",\n  \"folderId\": \"fld_dab687a0d6afa9a6c895ae22678f315f\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "22a79f6b-9fce-4455-82ac-f400d69ddcf9",
          "name": "Attach an annex",
          "request": {
            "name": "Attach an annex",
            "description": {
              "content": "Crea un documento **nuevo** —un anexo— colgado de un documento que ya firmaron todos. El cuerpo es el mismo de `POST /documents` (archivo o plantilla, firmantes, campos…) y el anexo tiene su propio ciclo de firma; el original no se toca. La respuesta es el anexo, con `parentDocumentId` apuntando al original.\n\nSolo se anexa al documento **raíz**: anexar a un anexo responde 409 `ANNEX_OF_ANNEX_NOT_ALLOWED`, y un documento al que todavía le faltan firmas, 409 `DOCUMENT_NOT_FULLY_SIGNED`. `Idempotency-Key` obligatoria: un reintento con la misma llave devuelve el mismo anexo en vez de crear otro. Para ver el original con todos sus anexos usa `GET /documents/{id}/family`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "annexes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento original, ya firmado por todos (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"source\": \"<string>\",\n  \"templateId\": \"<string>\",\n  \"templateValues\": {\n    \"key_0\": \"<string>\"\n  },\n  \"values\": {\n    \"key_0\": \"<string>\",\n    \"key_1\": \"<string>\"\n  },\n  \"readOnly\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"file\": {\n    \"content\": \"<string>\",\n    \"fileType\": \"pdf\",\n    \"name\": \"<string>\"\n  },\n  \"documents\": [\n    {\n      \"file\": {\n        \"content\": \"<string>\",\n        \"fileType\": \"pdf\",\n        \"name\": \"<string>\"\n      },\n      \"templateId\": \"<string>\",\n      \"templateValues\": {\n        \"key_0\": \"<string>\"\n      },\n      \"name\": \"<string>\",\n      \"kind\": \"main\",\n      \"position\": \"<integer>\",\n      \"dedupeScope\": \"document\"\n    },\n    {\n      \"file\": {\n        \"content\": \"<string>\",\n        \"fileType\": \"pdf\",\n        \"name\": \"<string>\"\n      },\n      \"templateId\": \"<string>\",\n      \"templateValues\": {\n        \"key_0\": \"<string>\",\n        \"key_1\": \"<string>\",\n        \"key_2\": \"<string>\"\n      },\n      \"name\": \"<string>\",\n      \"kind\": \"main\",\n      \"position\": \"<integer>\",\n      \"dedupeScope\": \"document\"\n    }\n  ],\n  \"fields\": [\n    {\n      \"email\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"pageNumber\": \"<integer>\",\n      \"documentPdfPosition\": \"<integer>\",\n      \"anchorString\": \"<string>\",\n      \"anchorHorizontalAlignment\": \"left\",\n      \"anchorVerticalAlignment\": \"center\",\n      \"position\": {\n        \"x\": \"<number>\",\n        \"y\": \"<number>\"\n      },\n      \"height\": 100,\n      \"includeInAllPages\": false\n    },\n    {\n      \"email\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"pageNumber\": \"<integer>\",\n      \"documentPdfPosition\": \"<integer>\",\n      \"anchorString\": \"<string>\",\n      \"anchorHorizontalAlignment\": \"left\",\n      \"anchorVerticalAlignment\": \"center\",\n      \"position\": {\n        \"x\": \"<number>\",\n        \"y\": \"<number>\"\n      },\n      \"height\": 100,\n      \"includeInAllPages\": false\n    }\n  ],\n  \"sendInvitations\": false,\n  \"startAtStep\": 1,\n  \"folderId\": \"<string>\",\n  \"ownerEmail\": \"<string>\",\n  \"name\": \"<string>\",\n  \"signers\": [\n    {\n      \"email\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"name\": \"<string>\",\n      \"roleName\": \"<string>\",\n      \"values\": {\n        \"key_0\": \"<string>\"\n      },\n      \"readOnly\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"routingOrder\": \"<integer>\",\n      \"kind\": \"signer\",\n      \"capability\": \"<string>\",\n      \"events\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    },\n    {\n      \"email\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"name\": \"<string>\",\n      \"roleName\": \"<string>\",\n      \"values\": {\n        \"key_0\": \"<string>\",\n        \"key_1\": \"<string>\"\n      },\n      \"readOnly\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"routingOrder\": \"<integer>\",\n      \"kind\": \"signer\",\n      \"capability\": \"<string>\",\n      \"events\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    }\n  ],\n  \"signatureValidation\": {\n    \"autografa\": true,\n    \"nom151\": false,\n    \"fea\": false,\n    \"biometricSignature\": false,\n    \"idScan\": false,\n    \"videofirma\": false\n  },\n  \"expiresAt\": \"<dateTime>\",\n  \"mode\": \"<string>\",\n  \"signingOrder\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3171dc53-29e3-429c-a2b8-c945186c9e4a",
          "name": "Get a document's family",
          "request": {
            "name": "Get a document's family",
            "description": {
              "content": "El documento original y todos sus anexos, en orden de creación. Puedes pedirla con el id de cualquier miembro: `rootId` siempre es el original. Cada miembro trae su `status`, si es `original` o `annex` (`kind`) y de quién es anexo (`parentDocumentId`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "family"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID de cualquier documento de la familia (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "93b7ab42-1501-4587-8584-07a39cc4fbb1",
          "name": "Create bulk send",
          "request": {
            "name": "Create bulk send",
            "description": {
              "content": "Sube un PDF una sola vez y crea N documentos independientes, uno por destinatario, cada uno con su propio enlace de firma. **Asíncrono**: valida todo de forma síncrona (créditos, tamaño de archivo, forma del body; un correo de destinatario inválido es `422 VALIDATION_ERROR` y no se crea ni se cobra nada) y agenda el trabajo pesado — la respuesta es un **202** con el lote en `processing` y cada `items[].status` en `pending`. Haz *poll* de `GET /documents/bulk-sends/{id}` (Get bulk send) hasta que `status` cambie a `completed` o `partialError`.\n\nCada documento del lote nace con una caja de firma para su destinatario, las mismas cajas automáticas que pone Create document cuando recibe `signers` sin `fields`. **Costo**: cada documento creado se cobra lo mismo que enviarlo por separado con `POST /documents/{id}/send` (los créditos de su `signatureValidation` en tu plan), aunque mandes `sendInvites: false`; no es 1 crédito por documento. El saldo de todo el lote se revisa antes de agendar (`402 INSUFFICIENT_CREDITS`).\n\n`Idempotency-Key` es **obligatorio**: un reintento con la misma key devuelve el MISMO 202 + el mismo id de lote (`Idempotency-Replayed: true`) en vez de agendar el trabajo dos veces — nunca cobra créditos ni invita dos veces por un retry.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                "bulk-sends"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Política de privacidad 2026\",\n  \"file\": {\n    \"content\": \"JVBERi0xLjQKJcOkw7zDtsO...\",\n    \"fileType\": \"pdf\"\n  },\n  \"recipients\": [\n    {\n      \"email\": \"ana@ejemplo.com\",\n      \"name\": \"Ana Torres\"\n    },\n    {\n      \"email\": \"luis@ejemplo.com\",\n      \"name\": \"Luis Gómez\"\n    }\n  ],\n  \"sendInvites\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "681ca0d3-fa52-42b5-955f-1ce4c41ed28c",
          "name": "Get bulk send",
          "request": {
            "name": "Get bulk send",
            "description": {
              "content": "Consulta el resultado de un `createBulkSend` asíncrono. Usa el MISMO objeto que la respuesta 202 original — `status` empieza en `processing` (todos los items `pending`) y se asienta en `completed` o `partialError` una vez que cada destinatario fue intentado.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                "bulk-sends",
                ":batch_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "batch_id",
                  "description": "(Required) ID del lote (`bat_…`), del header `Location` de Create bulk send."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "96280be7-5dc4-4c89-a79c-9e89a407e06f",
          "name": "Import signing fields from a document",
          "request": {
            "name": "Import signing fields from a document",
            "description": {
              "content": "Copia las cajas de firma (posiciones por rol) de otro documento ya firmado a este documento. Sirve para repetir un layout sin plantilla de por medio. Solo viaja la geometría, convertida a la hoja de este documento; ningún valor del documento origen.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "fields:from-document"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentId\": \"doc_2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "51024c5b-cd7b-4469-96f3-8b2e9f9cf3ca",
          "name": "Send document",
          "request": {
            "name": "Send document",
            "description": {
              "content": "Cobra los créditos, avanza el estado del documento y despacha las invitaciones de firma (email o WhatsApp vía Temporal) a los firmantes que adjuntaste al crearlo. `recipients` es opcional y solo sirve para invitar a **algunos** de esos firmantes, nombrándolos por su `email` o su `phone`: no agrega personas. Si alguno no es firmante del documento, la respuesta es `422 RECIPIENT_NOT_SIGNER` y no se cobra ni se invita a nadie.\n\n`Idempotency-Key` es obligatoria: repetir con la misma llave devuelve la respuesta original sin cobrar ni invitar otra vez. Un `send` nuevo sobre un documento que ya está en firma no vuelve a cobrar y solo invita a quien no tiene una invitación vigente (y, en orden secuencial, a quien ya le toca); para insistirle a quien ya la tiene usa Remind signer (uno cada 4 horas). Un documento anulado o expirado responde `409 DOCUMENT_NOT_SENDABLE`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "send"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"recipients\": [\n    {\n      \"email\": \"juan@ejemplo.com\",\n      \"name\": \"Juan Pérez\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "64809e01-d132-49ca-9d27-813658b37fe8",
          "name": "List signers",
          "request": {
            "name": "List signers",
            "description": {
              "content": "Lista los firmantes de un documento. Es una colección acotada (no paginada por cursor).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "signers"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "e91296f2-c836-4f96-a3ce-3cd73c59900c",
          "name": "Remind signer",
          "request": {
            "name": "Remind signer",
            "description": {
              "content": "Reenvía la invitación (email o WhatsApp, según cómo se agregó el firmante) a UN firmante que todavía no completa. Exige `Idempotency-Key`: un reintento de red con la misma llave devuelve la primera respuesta y no manda un segundo correo. Además hay un freno de un recordatorio cada 4 horas por firmante. La respuesta `200` trae `nextAllowedAt`: guárdala y no vuelvas a recordar antes de esa hora. Si lo haces, la respuesta es `429 RATE_LIMITED` con la hora solo dentro de `detail` y sin `Retry-After`, así que no la reintentes con backoff.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "signers",
                ":signer_id",
                "remind"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "signer_id",
                  "description": "(Required) ID del firmante a recordar (`sgr_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "10822f80-84c4-4b91-a4ee-939eda0155d6",
          "name": "Remind all pending signers",
          "request": {
            "name": "Remind all pending signers",
            "description": {
              "content": "Reenvía el recordatorio a TODOS los firmantes pendientes del documento de una sola llamada — la versión masiva de `POST .../remind`.\n\nCada firmante conserva su propio enfriamiento de 4h y su propio turno de orden de firma: uno en cooldown, o que todavía no le toca, nunca bloquea a los demás — aparece en `results[]` con su propio `status` (`sent` | `failed` | `rate_limited` | `skipped`) en vez de fallar toda la petición.\n\nSolo falla como un todo si el DOCUMENTO no existe (**404**) o está en un estado terminal (**409**, `reason: document_terminal`) — ahí no hay nada que recordarle a nadie.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "signers",
                "remind-all"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "22ead880-4416-4ae8-b07a-4b72c6313f03",
          "name": "Reassign signer",
          "request": {
            "name": "Reassign signer",
            "description": {
              "content": "Cambia a la **persona** detrás de un firmante sin perder su lugar: el `sgr_…` es el mismo, sus campos y su etapa en el orden de firma sobreviven, y su rol conserva nombre y cajas. Manda exactamente uno de `email` o `phone` (correo → WhatsApp y de regreso están soportados, una llamada a la vez). Lo que el firmante anterior había capturado se descarta — sus campos vuelven a vacío, su verificación de identidad no se hereda y sus ligas vivas se revocan; lo que prellenó el emisor se conserva. Si ya había capturado algo, la API exige `confirm: true` (409 `INVALID_STATE_TRANSITION` con `reason: \"confirmation_required\"` si falta). Si el documento ya está enviado y es el turno de ese firmante, la invitación sale sola al nuevo contacto; al anterior no se le avisa. Un firmante que ya firmó no se puede reasignar (409). `Idempotency-Key` obligatorio: un reintento con la misma llave devuelve la misma respuesta sin volver a mover nada.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "signers",
                ":signer_id",
                "reassign"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "signer_id",
                  "description": "(Required) ID del firmante a reasignar (`sgr_…`). Es el que se conserva."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"ana.torres@ejemplo.com\",\n  \"name\": \"Ana Torres\",\n  \"reason\": \"María dejó la empresa; firma su reemplazo\",\n  \"confirm\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2bd4e61c-cf6b-4fe9-a159-ce05e250cc9c",
          "name": "Change a signer's stage",
          "request": {
            "name": "Change a signer's stage",
            "description": {
              "content": "Mueve a un firmante de etapa en un documento `sequential`, sin tocar su identidad ni sus campos: mismo `sgr_…`, mismo contacto, mismos campos colocados — sólo cambia cuándo le toca firmar.\n\nLa etapa activa es la más baja que todavía tiene firmantes pendientes, y se recalcula en el momento: adelantar a alguien a la etapa activa lo invita de inmediato, y sacar de la etapa activa al último pendiente cierra esa etapa e invita a la siguiente. Por eso la respuesta trae el `status` ya recalculado (`waiting_turn` si quedó detrás de la etapa activa).\n\nSe rechaza con **409** en tres casos, cada uno con su `reason`: el firmante ya firmó y su etapa es historia (`already_signed`); el documento firma en paralelo (`document_not_sequential` — `signingOrder` no se puede cambiar después de crear); o ese firmante no tiene un rol propio al que colgarle la etapa y cuenta siempre como etapa 1 (`signer_without_role`, que se resuelve volviendo a crear el documento con todos los firmantes numerados).\n\nDisponible sólo si el orden de firma está habilitado en el entorno; si no, sobre un documento en paralelo responde 403 `SEQUENTIAL_NOT_AVAILABLE` en vez del 409 `document_not_sequential`.\n\nPara cambiar a la persona detrás del lugar, usa `POST /v3/documents/{documentId}/signers/{signerId}/reassign`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "signers",
                ":signer_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "signer_id",
                  "description": "(Required) ID del firmante (`sgr_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routingOrder\": \"<integer>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "e16d520d-fe34-40c1-8c7e-a4fc6b229bc1",
          "name": "Sign as a signer (sandbox only)",
          "request": {
            "name": "Sign as a signer (sandbox only)",
            "description": {
              "content": "Firma por un firmante en **sandbox**, como si hubiera abierto su liga: estampa su firma en sus cajas y lo deja `signed`. Responde **200** en el momento, con el firmante ya firmado; si era el último, en la misma llamada el documento queda `completed` con su PDF de evidencia (en sandbox, con una constancia NOM-151 simulada, sin validez legal). Emite los mismos webhooks que una firma real: `signer.signed` y, si era el último, `document.completed`.\n\nÚsalo con `signer-pending@sandbox.allsign.io`, que nunca firma solo y no recibe correo, para recorrer a tu ritmo el ciclo real: `awaiting_signatures` → `signer.signed` → `completed` (ver [Entornos](/environments#firmantes-magicos)).\n\n**Solo existe en sandbox.** Con una key live responde **409** `ENVIRONMENT_MISMATCH` y no cambia nada: en producción cada firmante firma con su propia liga.\n\n**409** `INVALID_STATE_TRANSITION` cuando el estado lo impide, con `reason`: `never_invited` (el documento todavía no se envía), `document_terminal` (ya terminó, se anuló, venció o está en corrección), `signer_terminal` (ese firmante ya firmó o fue cancelado) o `variables_pending` (faltan variables requeridas de su rol). En un documento `sequential`, **409** `NOT_YOUR_TURN` si su etapa todavía no abre. Un `signerId` que no existe, de otra organización o de otro entorno responde **404** `SIGNER_NOT_FOUND`.\n\n`Idempotency-Key` es opcional. Si la mandas, un reintento con la misma llave te devuelve la respuesta original (con `Idempotency-Replayed: true`) en vez del 409 que daría volver a firmar a alguien que ya firmó.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "sandbox",
                "signers",
                ":signer_id",
                "sign"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "signer_id",
                  "description": "(Required) ID del firmante (`sgr_…`), el que devuelve `GET /documents/{documentId}/signers`."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "db80ef33-f382-409e-bce5-664695da72e4",
          "name": "List events",
          "request": {
            "name": "List events",
            "description": {
              "content": "Lista la bitácora de eventos de un documento (creación, envío, firmas, etc.), paginada por cursor. `type` es un token del catálogo de eventos con namespace punteado `recurso.enPasado` (ej. `document.created`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "events"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor: eventos después de este `id` (`evt_…`)."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor: eventos antes de este `id` (`evt_…`)."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d88b7afd-d207-448b-b1c8-95ea329e5974",
          "name": "Void document",
          "request": {
            "name": "Void document",
            "description": {
              "content": "Anula (invalida) un documento. **No es un DELETE**: la retención NOM-151 conserva el registro, por eso anular es una operación explícita que deja el documento en `voided`. Puedes incluir una `reason` opcional. Una anulación legítima puede cancelar cero firmas — el resultado se decide por el `status`, no por cuántas firmas se cancelaron.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "void"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Cliente canceló la operación\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "9854244b-ad1f-4408-9a54-a694d8c7340c",
          "name": "Get evidence bundle",
          "request": {
            "name": "Get evidence bundle",
            "description": {
              "content": "Los 2 archivos de respaldo de un documento: el PDF sellado con todas las firmas (`evidencePdf`) y la constancia de conservación NOM-151 (`nom151`, `null` si el documento no es `livemode`). Ambos son `null` hasta que **todos** los firmantes completan — el workflow de Temporal que los genera termina unos segundos después de la última firma, así que haz *poll* de `available` en vez de asumir que ya existen justo al completarse el flujo.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "evidence"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "70cffc9f-aae9-4461-867a-946030faf8a8",
          "name": "Bulk delete documents",
          "request": {
            "name": "Bulk delete documents",
            "description": {
              "content": "Elimina hasta 100 documentos en una sola petición. Éxito parcial por diseño (igual que v2): un id mal formado, un id de otro tenant, o un documento en un estado no eliminable (ya firmado o en progreso) falla SOLO ese elemento — nunca todo el lote. Revisa `items[].status` por cada id, nunca asumas éxito total por un `200`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                "bulk"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentIds\": [\n    \"doc_87ddf9e935308b6b612fed30f4b30475\",\n    \"doc_b2235df1caac13fb1effe6b9aa34ae08\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "22a10823-18f8-4de3-9389-f72c68391107",
          "name": "Get document values",
          "request": {
            "name": "Get document values",
            "description": {
              "content": "Los valores de las **variables** `{{ }}` de un documento creado desde una plantilla DOCX: los `templateValues` con los que se creó y lo que llenaste después con `PATCH …/values`. Todas las variables las llena el remitente. Para los campos del formulario PDF, que sí llena el firmante, usa `GET …/fields`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "values"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "efd5e534-9a0a-41e7-9400-bd97e67a7478",
          "name": "Update document values",
          "request": {
            "name": "Update document values",
            "description": {
              "content": "Escribe valores de variables `{{ }}` en un documento que todavía no se envía (`draft`) y regenera su PDF. Todas las variables las llena el remitente; los valores propuestos al firmante (`proposals`) se retiraron. Una vez enviado, los valores quedan fijos: responde `409 DOCUMENT_CONFLICT` y no cambia nada — excepto en `collecting_data` (variables obligatorias ligadas a un rol de un documento anterior a este cambio, que los firmantes todavía están llenando): ahí solo acepta variables de un firmante (las del dueño responden `409` con `lockedVariables`), y cuando ya están todas el documento pasa a firma. Solo variables; los campos del formulario PDF se prellenan con `PATCH …/fields/{id}` o con `values` al crear.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "values"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"values\": {\n    \"key_0\": \"<string>\",\n    \"key_1\": \"<string>\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6d2806c5-2980-47c0-8b12-56a31a3e34fb",
          "name": "Transfer document owner",
          "request": {
            "name": "Transfer document owner",
            "description": {
              "content": "Pasa el documento a otro miembro del **mismo** espacio de trabajo, nunca a otro espacio. Lo puede hacer el dueño actual o un owner/admin del espacio; cualquier otro recibe 403 `PERMISSION_DENIED`. Manda exactamente uno de `ownerUserId` (`usr_…`) u `ownerEmail`.\n\nFirmas, evidencia, constancias NOM-151 y quién creó el documento no cambian. La bitácora gana un evento `document.owner_transferred` (con tu `reason`, si la mandas) y los webhooks suscritos reciben el mismo evento. Con `keepPreviousOwnerAccess` (default `true`) el dueño anterior conserva acceso de lectura; en `false` lo pierde.\n\nSi el documento pertenece a una cadena, manda `transferChain: true` (409 `DOCUMENT_CONFLICT` si falta): se traspasa la cadena completa y `documentIds` dice cuáles cambiaron. `Idempotency-Key` obligatoria. Repetir el traspaso hacia quien ya es dueño responde `transferred: false`, igual que reintentar con la misma llave. Requiere la función `document-owner-transfer` activa en tu cuenta (403 `FEATURE_NOT_AVAILABLE`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "transfer-owner"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ownerUserId\": \"<string>\",\n  \"ownerEmail\": \"<string>\",\n  \"keepPreviousOwnerAccess\": true,\n  \"transferChain\": false,\n  \"reason\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c8e1bf8c-70ab-4b7e-8e77-780ba02704c9",
          "name": "Transfer documents owner",
          "request": {
            "name": "Transfer documents owner",
            "description": {
              "content": "Traspasa varios documentos al miembro `toUserId` (`usr_…`) del mismo espacio, en una sola llamada síncrona de hasta 500 documentos. Manda exactamente uno de `documentIds` (máximo 500) o `fromUserId`, que toma todos los documentos de ese dueño en el espacio y en el entorno de tu API key. Si `fromUserId` tiene más de 500, responde 422 `VALIDATION_ERROR` y no mueve nada: pártelos en tandas con `documentIds`.\n\n**Éxito parcial por diseño**: un documento que no existe, de otro espacio o entorno, que no puedes administrar o de una cadena sin `transferChains: true` falla solo su elemento (`items[].status: \"error\"` con el motivo en `error`). Un `200` no significa que todo se movió: revisa `items[]` y los contadores.\n\nTodos los documentos traspasados comparten el mismo `batchId` en su bitácora y en su webhook `document.owner_transferred`. `keepPreviousOwnerAccess` y `reason` funcionan igual que en el traspaso de uno. `Idempotency-Key` obligatoria. Requiere la función `document-owner-transfer` activa en tu cuenta (403 `FEATURE_NOT_AVAILABLE`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                "transfer-owner"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"toUserId\": \"<string>\",\n  \"fromUserId\": \"<string>\",\n  \"documentIds\": [\n    \"<string>\"\n  ],\n  \"keepPreviousOwnerAccess\": true,\n  \"transferChains\": false,\n  \"reason\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "87b2e41c-2cd9-4320-a4bc-6f3cb690e5e9",
          "name": "List document fields",
          "request": {
            "name": "List document fields",
            "description": {
              "content": "El estado de cada campo del formulario de un documento: `role` y `signerId` (quién debe llenarlo), `value` (texto o casilla), `readOnly` (prellenado que el firmante no puede cambiar), `status` (`pending` hasta que su firmante firma), y la procedencia del valor: `filledBy` (`owner` si lo puso el emisor por API o desde el panel, `signer` si lo puso el firmante dueño) y `filledAt`. Es la llamada para volcar lo capturado a tu sistema cuando el documento se completa.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "fields"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "560bf4e9-21ee-4150-a1de-83a0ec2840ed",
          "name": "Create document field",
          "request": {
            "name": "Create document field",
            "description": {
              "content": "Agrega un campo a un documento que todavía no se envía. Igual que en plantillas: `type`, `page`, `rect` (en % del papel), `role` (se crea si no existe), `required`, `label`, `options`, `group`. Puedes mandar tu propio `id` (`fie_…`) para crearlo de forma idempotente, o `aliasOf` para que comparta valor con otro campo del mismo nombre.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "fields"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"telefono\",\n  \"type\": \"text\",\n  \"page\": 1,\n  \"rect\": {\n    \"x\": 12.5,\n    \"y\": 30,\n    \"width\": 30,\n    \"height\": 3.1\n  },\n  \"role\": \"Cliente\",\n  \"required\": false,\n  \"label\": \"Teléfono\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c07d5dd9-3d94-45a9-bd0f-82d4337a736a",
          "name": "Update document field",
          "request": {
            "name": "Update document field",
            "description": {
              "content": "Mueve, renombra, reasigna o configura un campo — y **prellena**: `value` (texto, fecha `YYYY-MM-DD` o `true`/`false` para casillas) deja el valor puesto por el emisor (`filledBy: \"owner\"`); `readOnly: true` lo bloquea para que el firmante lo vea pero no lo cambie. Un campo ya firmado no se puede tocar: responde 409 `FIELD_CONFLICT`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "fields",
                ":field_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "field_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"value\": \"XAXX010101000\",\n  \"readOnly\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "04e6026c-c64c-4f87-9f45-56495955a720",
          "name": "Delete document field",
          "request": {
            "name": "Delete document field",
            "description": {
              "content": "Quita un campo del documento. Un campo ya firmado no se puede borrar (409 `FIELD_CONFLICT`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "fields",
                ":field_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "field_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/problem+json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f17ebb3f-72c8-4200-8926-c318bafe534e",
          "name": "Assign fields to a role",
          "request": {
            "name": "Assign fields to a role",
            "description": {
              "content": "Asigna varios campos a un rol de una sola vez (o `role: null` para dejarlos sin rol). Si el rol ya tiene firmante, los campos pasan a ese firmante en el mismo paso. Un campo ya firmado responde 409.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "fields:assign-role"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fieldIds\": [\n    \"fie_0f1e2d3c4b5a69788796a5b4c3d2e1f0\",\n    \"fie_9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d\"\n  ],\n  \"role\": \"Cliente\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "08e91fbe-0777-4535-9bd9-e5742a2194b0",
          "name": "Download document file",
          "request": {
            "name": "Download document file",
            "description": {
              "content": "El PDF del documento **antes de enviarlo**: con `format=form` conserva los widgets vivos con lo prellenado (para que el emisor lo revise en Acrobat); con `format=flat` lo hornea con los valores actuales. Después de la firma, el PDF con validez legal es la evidencia (`GET /documents/{id}/evidence`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "file"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "format",
                  "value": "form",
                  "description": "`form` (default) conserva los widgets; `flat` los hornea con lo prellenado."
                },
                {
                  "disabled": true,
                  "key": "position",
                  "value": "1",
                  "description": "Posición del PDF dentro de un expediente compuesto (default 1)."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/pdf"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "eec0cee4-e44f-4901-8ea4-b6ee77226bf2",
          "name": "List document roles",
          "request": {
            "name": "List document roles",
            "description": {
              "content": "Los roles del documento, en orden, con cuántos campos le pertenecen a cada uno (`fieldCount`) y quién lo ocupa (`signerId`, o `null` si nadie lo ha tomado). En un documento `sequential` cada rol trae su etapa (`stage`); en paralelo, `null`. El `id` (`rol_…`) es estable aunque renombres el rol, y es el que usa `DELETE /documents/{id}/roles/{roleId}`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "roles"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f79de965-8eb1-4cd8-96d8-ecbaea8284d1",
          "name": "Delete a document role",
          "request": {
            "name": "Delete a document role",
            "description": {
              "content": "Borra un rol que **nadie ocupa**. Sus campos y variables no se borran: quedan sin rol, y la respuesta los lista en `unassignedFields` y `unassignedVariables` para que los asignes antes de enviar a firmar. Si el rol ya tiene firmante responde 409 `ROLE_OCCUPIED`: quita primero al firmante y luego el rol.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "roles",
                ":role_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "role_id",
                  "description": "(Required) ID del rol (`rol_…`), tal como lo devuelve `GET /documents/{id}/roles`."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5d2572e1-33af-4b0f-bd93-bc3bb5a232fa",
          "name": "List document observers",
          "request": {
            "name": "List document observers",
            "description": {
              "content": "Lista quién observa el documento: los observadores agregados a **este** documento (`origin: \"document\"`, con su `id` `rol_…`) y los de la organización, que observan todos los documentos (`origin: \"organization\"`, `id: null` y `locked: true`; esos se quitan desde Ajustes → Observadores, no por documento). Un observador **nunca firma**: recibe los avisos que eligió en `events` y, con `capability: \"notify_and_view\"`, un enlace de solo lectura. `status` vale `pending_verification` mientras el correo de un observador de organización no confirme la regla. Es una colección acotada: `hasMore` siempre es `false`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "observers"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "bb6a603d-8322-459f-98fb-e58be30d53b1",
          "name": "Add document observer",
          "request": {
            "name": "Add document observer",
            "description": {
              "content": "Agrega a alguien que **nunca firma** y solo recibe avisos del documento. Manda `email` (obligatorio) y, si quieres, `name`, `capability` —`notify` (default, solo avisos) o `notify_and_view` (avisos y un enlace de solo lectura)— y `events`, los avisos que recibe (default `[\"document.completed\"]`).\n\nEs idempotente por correo: si ese correo ya observa el documento, se actualizan sus ajustes y la respuesta trae `created: false`; pasar de `notify_and_view` a `notify` revoca sus enlaces de solo lectura. Un observador nuevo recibe un correo de aviso, y los webhooks suscritos reciben `document.observer_added` cuando se agrega o cambian sus ajustes.\n\nUn firmante del documento no puede ser también observador (409 `OBSERVER_IS_SIGNER`) y un documento anulado ya no acepta observadores (409 `DOCUMENT_CONFLICT`). Requiere la función `document-observers` activa en tu cuenta; sin ella responde 403 `FEATURE_NOT_AVAILABLE` y no cambia nada.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "observers"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"<string>\",\n  \"name\": \"<string>\",\n  \"capability\": \"notify\",\n  \"events\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6eac97bd-71a6-4d6e-a46d-17b42428d4c3",
          "name": "Remove document observer",
          "request": {
            "name": "Remove document observer",
            "description": {
              "content": "Quita un observador agregado a este documento y revoca sus enlaces de solo lectura; los webhooks suscritos reciben `document.observer_removed`. Solo quita observadores de documento: los de la organización (`origin: \"organization\"`) no tienen `id` y se quitan desde Ajustes → Observadores. Requiere la función `document-observers` activa en tu cuenta (403 `FEATURE_NOT_AVAILABLE`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "observers",
                ":observer_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento (`doc_…`)."
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "observer_id",
                  "description": "(Required) ID del observador (`rol_…`): el `id` que devuelven la lista o el alta."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "ee1e567f-3a0a-47a4-b7d4-d36c39c2f28d",
          "name": "Save the document as a template version",
          "request": {
            "name": "Save the document as a template version",
            "description": {
              "content": "Guarda el documento tal como está —campos, roles, variables, orden de firma y ajustes— como una versión nueva de la plantilla.\n\nCon `templateId` se agrega una versión a esa plantilla (`created: false`); sin él se crea una plantilla nueva a partir del documento (`created: true`). Las personas se guardan **sólo** con `rememberSigners: true`: sin eso el layout conserva los roles («Parte 1», «Parte 2»…) pero no quién los ocupó. Los valores que llenó el DUEÑO se guardan **sólo** con `rememberFieldValues: true`; lo que llenó un firmante nunca se guarda, tenga este flag el valor que tenga. Un documento con al menos una firma responde 409 `DOCUMENT_ALREADY_SIGNED`.\n\n`formView` (`fill` o `edit`) es la vista con la que abrirá el formulario de los documentos que nazcan de la versión, y queda en `layout.settings.formView`. Si se omite, la versión hereda la de la última versión con layout de la plantilla.\n\nEl documento queda ligado a la plantilla y a la versión guardada, así que `GET /documents/{id}` ya responde con `templateId` y `templateVersionId`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "documents",
                ":document_id",
                "save-to-template"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "document_id",
                  "description": "(Required) ID del documento a guardar (`doc_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"templateId\": \"<string>\",\n  \"name\": \"<string>\",\n  \"rememberSigners\": false,\n  \"rememberFieldValues\": false,\n  \"formView\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "9290eced-534f-486b-b33f-f8c22c468388",
      "name": "Templates",
      "description": {
        "content": "Reusable templates: upload DOCX or PDF, inspect analysis and layout, edit variables and signing fields, then build `templateValues` for `POST /v3/documents`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ff010e9d-834a-422c-be3a-1f7a23618149",
          "name": "List catalog templates",
          "request": {
            "name": "List catalog templates",
            "description": {
              "content": "El catálogo curado por AllSign (contratos y formatos mexicanos listos para usar). Cada entrada trae un `slug` estable y los planes que la incluyen; copia una a tu tenant con `POST /templates/catalog/{slug}:copy`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                "catalog"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "0d726aef-b724-44e3-a7c6-a39d4ff8785c",
          "name": "Copy catalog template",
          "request": {
            "name": "Copy catalog template",
            "description": {
              "content": "Materializa una copia de la plantilla del catálogo dentro de tu tenant, con sus campos, roles y variables. A partir de ahí es tuya: edítala y emite documentos con su `id`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                "catalog",
                "{{slug}}:copy"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "7aa8cd86-4260-4de9-b800-63c70c7ed3a2",
          "name": "List templates",
          "request": {
            "name": "List templates",
            "description": {
              "content": "Lista tus plantillas con paginación por cursor y filtros por tipo de archivo, categoría y texto libre.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor: plantillas después de este `id` (`tmpl_…`)."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor: plantillas antes de este `id` (`tmpl_…`)."
                },
                {
                  "disabled": true,
                  "key": "sort",
                  "value": "-createdAt",
                  "description": "Orden por fecha de creación: `createdAt` o `-createdAt` (default `-createdAt`)."
                },
                {
                  "disabled": true,
                  "key": "fileType",
                  "value": "<string>",
                  "description": "Filtra por tipo de archivo (ej. `docx`, `pdf`)."
                },
                {
                  "disabled": true,
                  "key": "category",
                  "value": "<string>",
                  "description": "Filtra por categoría."
                },
                {
                  "disabled": true,
                  "key": "tags",
                  "value": "<string>",
                  "description": "CSV de etiquetas — la plantilla debe tener TODAS."
                },
                {
                  "disabled": true,
                  "key": "search",
                  "value": "<string>",
                  "description": "Búsqueda por texto libre en el nombre (1–255 caracteres)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2304fff0-24d2-4316-9b2b-e85428d5e9a8",
          "name": "Create template",
          "request": {
            "name": "Create template",
            "description": {
              "content": "Da de alta una plantilla a partir de un **PDF** o un **DOCX** en base64 (máximo 10 MB decodificados). Es el arranque del dominio: si el PDF trae formulario, sus widgets entran como campos (`GET …/fields`, guía [Formularios PDF](/guides/pdf-forms)); si es un DOCX con `{{ variables }}`, se detectan en el mismo paso (`GET …/variables`). La respuesta trae `fieldCount`, `variableCount` y `readiness`. `Idempotency-Key` es opcional pero se honra: un reintento devuelve la misma plantilla.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<string>\",\n  \"file\": {\n    \"content\": \"<string>\",\n    \"fileType\": \"docx\",\n    \"name\": \"<string>\"\n  },\n  \"description\": \"<string>\",\n  \"category\": \"<string>\",\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "0fe0aee1-3302-400d-8b81-4cc47eb05c46",
          "name": "List template facets",
          "request": {
            "name": "List template facets",
            "description": {
              "content": "Las categorías y etiquetas que usan tus plantillas, con conteos, para construir filtros en tu propia UI (`GET /templates?category=…`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                "facets"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c506cf9a-3ab9-4af5-84af-09fe703b482d",
          "name": "Retrieve template",
          "request": {
            "name": "Retrieve template",
            "description": {
              "content": "Consulta una plantilla por su `id`. Un `id` inexistente responde **404** (no 500).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) ID de la plantilla (`tmpl_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4c7c8996-1766-495f-aab2-1641b2fe0a5d",
          "name": "Update template",
          "request": {
            "name": "Update template",
            "description": {
              "content": "Merge-patch de los metadatos: `name`, `description`, `category`, `tags`. Nunca cambia el archivo ni los campos/variables (para eso están `…/fields` y `…/variables`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<string>\",\n  \"description\": \"<string>\",\n  \"category\": \"<string>\",\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "db376a14-7cd8-43d5-9546-1b9c410d69dd",
          "name": "Delete template",
          "request": {
            "name": "Delete template",
            "description": {
              "content": "Borrado suave: la plantilla desaparece de las listas pero se conserva para auditoría. Responde 409 `TEMPLATE_IN_USE` si algún documento activo todavía la referencia; el `detail` trae el conteo.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/problem+json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d7e43a85-241e-4677-b918-5ae07ff0fcda",
          "name": "Duplicate template",
          "request": {
            "name": "Duplicate template",
            "description": {
              "content": "Crea una copia independiente (`\"{name} (copia)\"`) con el mismo archivo, campos, roles y variables. `Idempotency-Key` opcional: un reintento devuelve la primera copia.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                "{{template_id}}:duplicate"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "690f06b2-9cfa-4eee-a835-677386d3abda",
          "name": "List template variables",
          "request": {
            "name": "List template variables",
            "description": {
              "content": "Lista las variables de una plantilla — justo lo que necesitas para armar el mapa `templateValues` de Create document. Es una colección acotada (no paginada por cursor): el número de variables lo limita el propio archivo.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "variables"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) ID de la plantilla (`tmpl_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c18be6f1-a6bc-411f-a958-6e4211ac9190",
          "name": "Create template variable",
          "request": {
            "name": "Create template variable",
            "description": {
              "content": "Agrega una variable `{{ }}` a mano a una plantilla DOCX: nombre, etiqueta, tipo y, opcionalmente, su posición (`page`, `rect`, `slots`). `mergeInto` la une a una variable existente como hueco adicional. Todas las variables las llena el remitente: `filledBy` solo acepta `owner`, y `signer` responde `422`. Lo que captura el firmante va en un campo del formulario PDF (guía [Formularios PDF](/guides/pdf-forms)).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "variables"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<string>\",\n  \"label\": \"<string>\",\n  \"type\": \"text\",\n  \"required\": true,\n  \"defaultValue\": \"<string>\",\n  \"options\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"role\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"rect\": {\n    \"x\": \"<number>\",\n    \"y\": \"<number>\",\n    \"width\": \"<number>\",\n    \"height\": \"<number>\"\n  },\n  \"slots\": [\n    {\n      \"page\": \"<integer>\",\n      \"rect\": {\n        \"x\": \"<number>\",\n        \"y\": \"<number>\",\n        \"width\": \"<number>\",\n        \"height\": \"<number>\"\n      }\n    },\n    {\n      \"page\": \"<integer>\",\n      \"rect\": {\n        \"x\": \"<number>\",\n        \"y\": \"<number>\",\n        \"width\": \"<number>\",\n        \"height\": \"<number>\"\n      }\n    }\n  ],\n  \"mergeInto\": \"<string>\",\n  \"filledBy\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "1a415356-ee80-4743-9320-bd7bfa1ea925",
          "name": "Update template variable",
          "request": {
            "name": "Update template variable",
            "description": {
              "content": "Cambia una variable por su `name`: renombrarla (`newName`), su etiqueta, tipo o su posición. Los documentos ya creados no cambian. `filledBy` solo acepta `owner`: todas las variables las llena el remitente, y `signer` responde `422`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "variables"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<string>\",\n  \"newName\": \"<string>\",\n  \"label\": \"<string>\",\n  \"type\": \"<string>\",\n  \"required\": \"<boolean>\",\n  \"defaultValue\": \"<string>\",\n  \"options\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"role\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"rect\": {\n    \"x\": \"<number>\",\n    \"y\": \"<number>\",\n    \"width\": \"<number>\",\n    \"height\": \"<number>\"\n  },\n  \"slots\": [\n    {\n      \"page\": \"<integer>\",\n      \"rect\": {\n        \"x\": \"<number>\",\n        \"y\": \"<number>\",\n        \"width\": \"<number>\",\n        \"height\": \"<number>\"\n      }\n    },\n    {\n      \"page\": \"<integer>\",\n      \"rect\": {\n        \"x\": \"<number>\",\n        \"y\": \"<number>\",\n        \"width\": \"<number>\",\n        \"height\": \"<number>\"\n      }\n    }\n  ],\n  \"mergeInto\": \"<string>\",\n  \"filledBy\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3ccfb5be-5f45-45c3-a238-b81d5cd49fed",
          "name": "Delete template variable",
          "request": {
            "name": "Delete template variable",
            "description": {
              "content": "Quita una variable de la plantilla (por `name`). Los documentos ya creados conservan sus valores.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "variables"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "name",
                  "value": "<string>",
                  "description": "(Required) Nombre de la variable a quitar."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/problem+json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "fca69dee-33a9-4693-91d4-da82bba4eb62",
          "name": "Validate template values",
          "request": {
            "name": "Validate template values",
            "description": {
              "content": "Comprueba un mapa `templateValues` contra las variables de la plantilla **sin crear nada y sin consumir crédito**. Es el ensayo previo de Create document: te dice qué falta antes de que el documento exista.\n\nPor qué importa: si emites el documento sin una variable requerida, la respuesta es `422` y no se crea nada — pero ya escribiste el formulario, ya pediste los datos al usuario y ya armaste el request. Validar en cada guardado te deja corregir mientras el usuario sigue en la pantalla.\n\n**Siempre responde `200`**, incluso cuando el mapa está mal: es un diagnóstico, no un rechazo. Lo que te dice si puedes crear el documento es el campo `valid`.\n\nLa respuesta separa tres cosas que no pesan igual:\n\n- **`errors`** — falta una variable **requerida**, llegó vacía, o mandaste una llave que la plantilla no declara (`UNKNOWN_VARIABLE`, casi siempre un typo como `nombre_completoo`). Cualquiera de ellos pone `valid` en `false`. `POST /v3/templates/{id}/documents` rechaza con `422` estos mismos errores; `POST /v3/documents` rechaza la requerida que falta, pero descarta sin imprimir las llaves desconocidas.\n- **`warnings`** — el valor no cuadra con el `type` de la variable. **Nunca bloquean.** El `type` no se declara: se infiere del nombre, así que una variable llamada `forma_de_pago` se marca `currency` aunque contenga texto. Trátalos como una pista para revisar, no como un error.\n- **`ignored`** — las mismas llaves desconocidas, en una lista simple de nombres. Cada una aparece también en `errors` con `UNKNOWN_VARIABLE`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "validate-values"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) ID de la plantilla (`tmpl_…`) contra la que se validan los valores."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"templateValues\": {\n    \"key_0\": \"<string>\",\n    \"key_1\": \"<string>\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4c9fe788-0fe4-44c7-9022-58e2d0d3e4ab",
          "name": "Confirm variable candidates",
          "request": {
            "name": "Confirm variable candidates",
            "description": {
              "content": "Convierte candidatos del análisis en variables de la plantilla, con nombre final y etiqueta. Todas las variables las llena el remitente: `filledBy` solo acepta `owner`, y `signer` responde `422`. Lo que captura el firmante va en un campo del formulario PDF (guía [Formularios PDF](/guides/pdf-forms)). Cuando no quedan candidatos pendientes la plantilla pasa a `readiness: \"ready\"`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "variables:confirm"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"all\": \"<boolean>\",\n  \"items\": [\n    {\n      \"index\": \"<integer>\",\n      \"name\": \"<string>\",\n      \"label\": \"<string>\",\n      \"type\": \"<string>\",\n      \"kind\": \"<string>\",\n      \"filledBy\": \"<string>\"\n    },\n    {\n      \"index\": \"<integer>\",\n      \"name\": \"<string>\",\n      \"label\": \"<string>\",\n      \"type\": \"<string>\",\n      \"kind\": \"<string>\",\n      \"filledBy\": \"<string>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f01a9257-84d4-40a9-bf86-b4af7efcb6f2",
          "name": "Get template analysis",
          "request": {
            "name": "Get template analysis",
            "description": {
              "content": "Solo plantillas DOCX: el análisis vigente de huecos (`______`, `[CIUDAD]`, `{{ }}`) con sus candidatos a variable. Los candidatos no son variables hasta que los confirmas con `POST …/variables:confirm`; `pendingCandidates` en la plantilla dice cuántos faltan.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "analysis"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "a7cdd5d4-3fb0-4e36-9052-d11cc9e6068e",
          "name": "Get template layout",
          "request": {
            "name": "Get template layout",
            "description": {
              "content": "Vista de solo lectura del layout completo: páginas con su tamaño y cada campo o variable con su posición. Útil para dibujar el editor; para cambiar campos usa `…/fields`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "layout"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "702a5661-8982-411f-ad4b-0e3751f665d7",
          "name": "Get template page image",
          "request": {
            "name": "Get template page image",
            "description": {
              "content": "Imagen limpia de una página del PDF (sin widgets ni anotaciones), para pintar tu propio editor de campos encima; las coordenadas de `areas` son porcentajes de esta página.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "pages",
                ":page_number"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<integer>",
                  "key": "page_number",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5a5bcdc7-a92d-4ee2-b6ce-5df369520329",
          "name": "Get template preview",
          "request": {
            "name": "Get template preview",
            "description": {
              "content": "PNG de la primera página, para mostrar la plantilla en tu propia lista. Solo plantillas PDF; un DOCX responde 404 `PREVIEW_UNAVAILABLE`. `width` reduce la imagen (nunca la agranda).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "preview"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "width",
                  "value": "400",
                  "description": "Ancho máximo en píxeles; la imagen se reduce, nunca se agranda."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "image/png"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3a53fc1f-37e3-451c-ade0-a228ef37d97a",
          "name": "Download marked Word file",
          "request": {
            "name": "Download marked Word file",
            "description": {
              "content": "Solo plantillas DOCX: el Word original con `{{nombre}}` en cada dato ya confirmado, conservando los estilos. Sirve para revisar en Word qué detectó el análisis. Un PDF responde 422.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "marked.docx"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d76b3f50-d08d-4eec-939b-615fc9cfd3de",
          "name": "Download original file",
          "request": {
            "name": "Download original file",
            "description": {
              "content": "El archivo original tal como se subió (PDF o DOCX), sin marcar ni convertir. Se transmite directo, nunca por redirect. Para el PDF con widgets o aplanado usa `GET …/file?format=form|flat`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "download"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "0e5fa453-2342-4f36-bae1-3283bd367e0f",
          "name": "Download template file",
          "request": {
            "name": "Download template file",
            "description": {
              "content": "El PDF de la plantilla. Con `format=form` conserva los widgets del formulario **vivos** (para revisarlo en Acrobat o en tu propio visor); con `format=flat` los hornea (aplanado, sin campos editables). Solo plantillas PDF: una plantilla DOCX responde 422.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "file"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "format",
                  "value": "form",
                  "description": "`form` (default) conserva los widgets; `flat` los hornea."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/pdf"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f43cbce3-deab-4b1b-9f23-566922ca5e89",
          "name": "Replace a PDF template's file",
          "request": {
            "name": "Replace a PDF template's file",
            "description": {
              "content": "Sustituye el PDF de la plantilla —una cláusula nueva, otro logo— **sin rehacer los campos que ya colocaste**: sus áreas se guardan en porcentaje de página, así que un archivo con otro tamaño de hoja no las mueve. Lo único que sí puede romperse es el **número de páginas**: un campo que vivía en una página que el archivo nuevo ya no tiene se poda —se borra esa área, nunca la plantilla ni el resto de sus áreas— y la respuesta lo dice en `prunedFields`, con el nombre del campo, las páginas que perdió y `removed` en `true` si se quedó sin ninguna. Revísalo siempre después de reemplazar. Solo plantillas PDF (`fileType: \"pdf\"`) y el reemplazo también debe ser PDF: este endpoint no convierte DOCX↔PDF. El archivo viaja en base64, máximo 10 MB decodificados, igual que al crear la plantilla.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "file"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) ID de la plantilla PDF cuyo archivo se reemplaza (`tmpl_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"file\": {\n    \"content\": \"<string>\",\n    \"fileType\": \"docx\",\n    \"name\": \"<string>\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "37689d1b-8e55-4353-a929-b884f4efa415",
          "name": "Get signing layout (legacy)",
          "request": {
            "name": "Get signing layout (legacy)",
            "description": {
              "content": "El layout de firma del modo anterior a los formularios: cajas de firma/iniciales/fecha por rol sobre una plantilla DOCX. Para plantillas PDF con formulario usa `…/fields` y `…/roles`, que lo sustituyen.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "signing"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4a591b7d-aaf0-4fc0-ac1c-1611d7d903ba",
          "name": "Replace signing layout (legacy)",
          "request": {
            "name": "Replace signing layout (legacy)",
            "description": {
              "content": "Reemplaza el layout de firma completo (roles y cajas) de una plantilla DOCX. Declarativo. En plantillas PDF con formulario usa `PUT …/fields`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "signing"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PUT",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"roles\": [\n    {\n      \"name\": \"<string>\",\n      \"fields\": [\n        {\n          \"roleName\": \"<string>\",\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\",\n          \"expect\": \"<integer>\",\n          \"onMiss\": \"<string>\"\n        },\n        {\n          \"roleName\": \"<string>\",\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\",\n          \"expect\": \"<integer>\",\n          \"onMiss\": \"<string>\"\n        }\n      ]\n    },\n    {\n      \"name\": \"<string>\",\n      \"fields\": [\n        {\n          \"roleName\": \"<string>\",\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\",\n          \"expect\": \"<integer>\",\n          \"onMiss\": \"<string>\"\n        },\n        {\n          \"roleName\": \"<string>\",\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\",\n          \"expect\": \"<integer>\",\n          \"onMiss\": \"<string>\"\n        }\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "326c455f-a070-4e29-a42f-ba2a97aa2456",
          "name": "List documents to seed the signing layout (legacy)",
          "request": {
            "name": "List documents to seed the signing layout (legacy)",
            "description": {
              "content": "Documentos ya firmados creados desde esta plantilla, de los que puedes copiar las cajas de firma con `POST …/signing:from-document`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "signing",
                "documents"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5b5019d7-23d4-4311-a3fe-f9c275fd9411",
          "name": "Import signing layout from a document (legacy)",
          "request": {
            "name": "Import signing layout from a document (legacy)",
            "description": {
              "content": "Copia las cajas de firma (por rol) de un documento firmado al layout de la plantilla DOCX. El equivalente para formularios PDF es `POST …/fields:from-document`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "signing:from-document"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentId\": \"<string>\",\n  \"consolidate\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "fd34a045-c896-49b8-93f7-b5d5250cf63c",
          "name": "List template fields",
          "request": {
            "name": "List template fields",
            "description": {
              "content": "Los campos del formulario de una plantilla PDF: los que trajo el AcroForm al subirla (`source: acroform`), los que dibujaste por API (`drawn`) y los que copiaste de un documento (`template`). Cada campo tiene un `name` estable (el del widget del PDF), un `type` (`text`, `date`, `checkbox`, `radio`, `select`, `signature`, `initials` o `stamp`), sus `areas` (una o varias por página, en % del papel) y el `role` que lo llena — o `null` si nadie lo ha reclamado. `unassignedCount` dice cuántos siguen sin rol; mientras haya uno, la plantilla queda en `readiness: \"pending\"`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "fields"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "38b7470a-7de8-4015-8c7e-6f4a515c146f",
          "name": "Replace template fields",
          "request": {
            "name": "Replace template fields",
            "description": {
              "content": "Reemplaza el layout completo de una vez (declarativo e idempotente): mandas la lista final de campos y AllSign crea, mueve, reasigna y borra lo que haga falta para que la plantilla quede exactamente así. Útil para versionar el layout en tu repositorio o para sincronizarlo desde tu propio editor.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "fields"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PUT",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fields\": [\n    {\n      \"name\": \"nombre\",\n      \"type\": \"text\",\n      \"role\": \"Cliente\",\n      \"required\": true,\n      \"label\": \"Nombre completo\",\n      \"areas\": [\n        {\n          \"page\": 1,\n          \"rect\": {\n            \"x\": 12.5,\n            \"y\": 18.2,\n            \"width\": 40,\n            \"height\": 3.1\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"firma_cliente\",\n      \"type\": \"signature\",\n      \"role\": \"Cliente\",\n      \"required\": true,\n      \"areas\": [\n        {\n          \"page\": 2,\n          \"rect\": {\n            \"x\": 12.5,\n            \"y\": 80,\n            \"width\": 30,\n            \"height\": 8\n          }\n        }\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f57bee80-0700-4468-8441-d7dfc0124280",
          "name": "Create template field",
          "request": {
            "name": "Create template field",
            "description": {
              "content": "Dibuja un campo nuevo sobre el PDF de la plantilla. Indica `type`, `name` (único en la plantilla) y al menos un área `{page, rect}`; opcionalmente el `role` que lo llenará (se crea si no existe), `required`, `label` para el firmante, `options` para `select`/`radio` y `group` para casillas excluyentes. Nace con `source: \"drawn\"`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "fields"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"telefono\",\n  \"type\": \"text\",\n  \"role\": \"Cliente\",\n  \"required\": false,\n  \"label\": \"Teléfono\",\n  \"areas\": [\n    {\n      \"page\": 1,\n      \"rect\": {\n        \"x\": 12.5,\n        \"y\": 30,\n        \"width\": 30,\n        \"height\": 3.1\n      }\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f69e925d-7b02-4b23-8d4d-91545b1a439c",
          "name": "Update template field",
          "request": {
            "name": "Update template field",
            "description": {
              "content": "Cambia una o varias cosas de un campo por su `name`: moverlo o redistribuir sus `areas`, renombrarlo (`name`, renombra todas sus áreas), cambiar su `type`, asignarle un `role` (o `null` para dejarlo sin rol), `required`, `label`, `options` o `group`. Es la llamada con la que asignas los campos importados del PDF a un rol antes de emitir.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "fields",
                ":name"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "name",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"Cliente\",\n  \"required\": true,\n  \"label\": \"RFC del cliente\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "87b59f60-b8da-4636-9a9a-f8ac12e2185c",
          "name": "Delete template field",
          "request": {
            "name": "Delete template field",
            "description": {
              "content": "Quita el campo y todas sus áreas de la plantilla. Los documentos ya emitidos no cambian.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "fields",
                ":name"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "name",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/problem+json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3d736b01-51d9-4ed4-983a-fa4ecc65654c",
          "name": "List template roles",
          "request": {
            "name": "List template roles",
            "description": {
              "content": "Los roles de la plantilla en orden, con cuántos campos tiene cada uno. Al crear un documento desde la plantilla, cada firmante toma un rol por `roleName` y hereda todos sus campos.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "roles"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "815f79d8-6401-481d-b5cc-f315c041edd2",
          "name": "Replace template roles",
          "request": {
            "name": "Replace template roles",
            "description": {
              "content": "Fija la lista de roles (nombre y orden). Los roles que ya no estén en la lista se quitan y sus campos quedan sin rol (`unassignedCount` sube); los nombres nuevos se crean vacíos, listos para asignarles campos con `PATCH …/fields/{name}`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "roles"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PUT",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"roles\": [\n    \"Cliente\",\n    \"Asesor\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "647966aa-8fa6-4eef-aa05-7fbf7f1f577e",
          "name": "Import fields from a document",
          "request": {
            "name": "Import fields from a document",
            "description": {
              "content": "Copia los campos y los roles de un documento a la plantilla: es el \"guardar como plantilla\" del super editor, por API. Los firmantes del documento **no** viajan — la plantilla guarda estructura (campos + roles), nunca personas. Tampoco viajan los datos: de cada campo se copian nombre, tipo, rol, posición (convertida a % de la hoja), requerido, etiqueta, opciones y grupo, **nunca** el valor que tenía en el documento origen ni su candado (`readOnly`). Los campos existentes de la plantilla se reemplazan por los del documento.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "fields:from-document"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentId\": \"doc_8f2c1e0a9b7d4c6e5f3a2b1c0d9e8f7a\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6b63d7f8-edb7-44ab-ae63-d7f5ab99fa08",
          "name": "Create a document from a template",
          "request": {
            "name": "Create a document from a template",
            "description": {
              "content": "Crea un **borrador** a partir de la plantilla y, opcionalmente, lo deja listo en la misma llamada: fija `values`, adjunta `signers` y, con `send: true`, lo manda a firma. `{}` basta para obtener el borrador.\n\nEquivale a `POST /documents` con `templateId` y `mode: draft`, seguido de `PATCH /documents/{id}/values` y, si se pide, de `POST /documents/{id}/send` — el mismo documento que devuelve `GET /documents/{id}`.\n\nCon `send: true`, un valor obligatorio que llena el dueño y no viene en `values` es un 422 `VALIDATION_ERROR` con la lista en `missingVariables`, y no se crea nada: los valores quedan fijos al enviar. Las variables de un firmante y las opcionales no cuentan.\n\nSi con `values` el PDF queda con menos páginas y alguna de las que se pierden tiene campos colocados, el borrador se crea con los valores pero su PDF no cambia, igual que en `PATCH /documents/{id}/values`, y `POST /documents/{id}/send` responde 409 `DOCUMENT_NOT_SENDABLE` hasta que muevas esos campos o cambies los valores. Con `send: true` ese 409 llega en esta misma llamada, con `documentId`, sin cobrar ni invitar.\n\n`values` se valida contra la plantilla **antes** de crear nada. Si algo falla después de creado el borrador (un envío sin saldo, por ejemplo), el problem+json trae `documentId`: retómalo con `POST /documents/{id}/send`, no repitiendo esta llamada.\n\n`Idempotency-Key` es obligatoria, igual que en `POST /documents`: un reintento con la misma clave repite la respuesta original (el 201 o un 4xx) en lugar de crear otro borrador. Un 402, un 429 o un 5xx liberan la clave, así que repetir esta llamada después de ellos crea otro borrador.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "documents"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) ID de la plantilla desde la que se emite (`tmpl_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<string>\",\n  \"signers\": [\n    {\n      \"email\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"name\": \"<string>\",\n      \"roleName\": \"<string>\",\n      \"values\": {\n        \"key_0\": \"<string>\"\n      },\n      \"readOnly\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"routingOrder\": \"<integer>\",\n      \"kind\": \"signer\",\n      \"capability\": \"<string>\",\n      \"events\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    },\n    {\n      \"email\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"name\": \"<string>\",\n      \"roleName\": \"<string>\",\n      \"values\": {\n        \"key_0\": \"<string>\",\n        \"key_1\": \"<string>\"\n      },\n      \"readOnly\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"routingOrder\": \"<integer>\",\n      \"kind\": \"signer\",\n      \"capability\": \"<string>\",\n      \"events\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    }\n  ],\n  \"values\": {\n    \"key_0\": \"<string>\",\n    \"key_1\": \"<string>\",\n    \"key_2\": \"<string>\",\n    \"key_3\": \"<string>\"\n  },\n  \"send\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "391664aa-186a-4e0f-b286-0fda51eebc55",
          "name": "List template versions",
          "request": {
            "name": "List template versions",
            "description": {
              "content": "Las versiones guardadas de la plantilla, de la más reciente a la más antigua. Cada una trae su `layout` —orden de firma, roles con su etapa, firmantes habituales y ajustes del documento— y un `summary` para comparar dos versiones de un vistazo sin bajar el archivo. `summary.fields` cuenta los campos de firma de la **plantilla** (nombres distintos): los campos no se versionan, así que ese número es el mismo en todas las filas.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "templates",
                ":template_id",
                "versions"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "template_id",
                  "description": "(Required) ID de la plantilla (`tmpl_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "8f3edb57-f7d0-4157-9ac2-b85462ed0a73",
      "name": "Signer sets",
      "description": {
        "content": "Reusable signer layouts for a tenant: roles, fields and verification requirements you can apply to a template.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "f8f65f50-79a0-4bb2-be19-4937950135be",
          "name": "List signer sets",
          "request": {
            "name": "List signer sets",
            "description": {
              "content": "Lista los juegos de firmantes de tu tenant que ve tu API key, con paginación por cursor. Un juego de firmantes es una configuración reutilizable: roles con nombre, las verificaciones que se le piden a cada uno (`ine`, `liveness`) y sus campos de firma (`signature`, `initials`, `name`, `date` o `vobo`), ubicados por coordenadas, por ancla o por regla.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signer-sets"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor: juegos después de este `id` (`sset_…`). No lo combines con `endingBefore`."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor: juegos antes de este `id` (`sset_…`)."
                },
                {
                  "disabled": true,
                  "key": "sort",
                  "value": "-createdAt",
                  "description": "Orden por fecha de creación: `createdAt` o `-createdAt` (default `-createdAt`)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "9c7e403f-eeaa-4fa0-8d73-ee2b680de735",
          "name": "Create signer set",
          "request": {
            "name": "Create signer set",
            "description": {
              "content": "Guarda un juego de firmantes reutilizable: `name` y `roles[]`. Cada rol lleva su `name` (único en el juego, sin distinguir mayúsculas), sus `verifications` (`ine`, `liveness`) y sus `fields[]`. Cada campo lleva su `kind` y se ubica por `page` + `rect` (porcentajes de 0 a 100 del papel), por `anchor` (un texto del PDF) o por `rule` (`all_pages` lo repite en cada página). El juego queda en el entorno de tu API key. `Idempotency-Key` es opcional: si la mandas, un reintento con la misma llave devuelve la primera respuesta.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signer-sets"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<string>\",\n  \"roles\": [\n    {\n      \"name\": \"<string>\",\n      \"verifications\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"fields\": [\n        {\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\"\n        },\n        {\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\"\n        }\n      ]\n    },\n    {\n      \"name\": \"<string>\",\n      \"verifications\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"fields\": [\n        {\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\"\n        },\n        {\n          \"kind\": \"<string>\",\n          \"page\": \"<integer>\",\n          \"rect\": {\n            \"x\": \"<number>\",\n            \"y\": \"<number>\",\n            \"width\": \"<number>\",\n            \"height\": \"<number>\"\n          },\n          \"rule\": \"<string>\",\n          \"anchor\": \"<string>\"\n        }\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "1774803a-05f9-461b-98b0-b9a5d7359320",
          "name": "Retrieve signer set",
          "request": {
            "name": "Retrieve signer set",
            "description": {
              "content": "Recupera un juego de firmantes con sus roles, verificaciones y campos.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signer-sets",
                ":signer_set_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "signer_set_id",
                  "description": "(Required) ID del juego de firmantes (`sset_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "e13265e8-64aa-458a-9286-a01004ae8b9d",
          "name": "Apply signer set to template",
          "request": {
            "name": "Apply signer set to template",
            "description": {
              "content": "Compara el juego con una plantilla (`templateId`, `tmpl_…`) y te dice, campo por campo, qué encaja. **No modifica la plantilla**: es una comprobación.\n\nUn rol del juego encaja con el rol de la plantilla que tiene el mismo nombre (sin distinguir mayúsculas). Cada campo encaja con un campo de firma de ese rol que no se haya usado ya, del mismo `kind` y con la misma página, regla, ancla y rectángulo cuando el juego los trae. `items[]` trae `matched` y un `detail` con el motivo: el rol no está en la plantilla, o no quedó ningún campo libre que coincida. La plantilla tiene que ser del entorno de tu API key. `Idempotency-Key` es opcional.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signer-sets",
                ":signer_set_id",
                "apply"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "signer_set_id",
                  "description": "(Required) ID del juego de firmantes (`sset_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"templateId\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "0ee703f1-812e-432d-b9e2-a1e2d170bc68",
      "name": "Folders",
      "description": {
        "content": "Organize documents into a folder hierarchy: create, read, rename, move, delete, and list a folder's documents.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "de8524e0-9836-4a14-9d91-7421fa84c2ad",
          "name": "List folders",
          "request": {
            "name": "List folders",
            "description": {
              "content": "Lista tus carpetas con paginación por cursor.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "folders"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor: carpetas después de este `id` (`fld_…`)."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor: carpetas antes de este `id` (`fld_…`)."
                },
                {
                  "disabled": true,
                  "key": "sort",
                  "value": "-createdAt",
                  "description": "Orden por fecha de creación: `createdAt` o `-createdAt` (default `-createdAt`)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "b804492b-8c87-47b0-ac42-cb4656f0d724",
          "name": "Create folder",
          "request": {
            "name": "Create folder",
            "description": {
              "content": "Crea una carpeta. Puedes anidarla pasando un `parentId`; si lo omites (o mandas `null`), la carpeta queda a nivel raíz.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "folders"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Contratos 2026\",\n  \"parentId\": null\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "af5cc670-f6f1-477a-a2d7-9baa5bd775f1",
          "name": "Retrieve folder",
          "request": {
            "name": "Retrieve folder",
            "description": {
              "content": "Consulta una carpeta por su `id`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "folders",
                ":folder_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "folder_id",
                  "description": "(Required) ID de la carpeta (`fld_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c550ab79-86c4-465d-b6e0-a47b1a923888",
          "name": "Update folder",
          "request": {
            "name": "Update folder",
            "description": {
              "content": "Merge-patch parcial: solo se modifican los campos que envías. Los únicos campos mutables son `name` y `parentId`. Enviar cualquier otro campo se rechaza al parsear con **422 `VALIDATION_ERROR`** nombrando el campo ofensor.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "folders",
                ":folder_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "folder_id",
                  "description": "(Required) ID de la carpeta (`fld_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Contratos firmados 2026\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "7ca7d64e-879d-4c64-86b4-7cf6f240996a",
          "name": "Delete folder",
          "request": {
            "name": "Delete folder",
            "description": {
              "content": "Elimina una carpeta **vacía**. Si todavía tiene documentos o subcarpetas, la respuesta es **`409 FOLDER_NOT_EMPTY`** (problem+json): vacía o mueve su contenido primero. La carpeta borrada no se recupera.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "folders",
                ":folder_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "folder_id",
                  "description": "(Required) ID de la carpeta (`fld_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/problem+json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "7476e292-36bd-4724-9c77-8c325e302777",
          "name": "List folder documents",
          "request": {
            "name": "List folder documents",
            "description": {
              "content": "Lista los documentos contenidos en una carpeta, con paginación por cursor. Devuelve el mismo sobre que List documents.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "folders",
                ":folder_id",
                "documents"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor: documentos después de este `id` (`doc_…`)."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor: documentos antes de este `id` (`doc_…`)."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "folder_id",
                  "description": "(Required) ID de la carpeta (`fld_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "0ded98d9-2f63-4d50-9b06-bf6e7eba4c4a",
      "name": "Analytics",
      "description": {
        "content": "Read-only tenant signing metrics: KPIs, funnel, monthly trend, bottlenecks, team activity and recent events. All require `analytics:read`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "58c6498b-9e2d-413f-ad33-1d34460e1e63",
          "name": "KPIs",
          "request": {
            "name": "KPIs",
            "description": {
              "content": "Indicadores clave del periodo: total de documentos, completados, pendientes, expirados, tasa de finalización y tiempo promedio de firma. La respuesta es un **objeto plano** (no un sobre `list`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "analytics",
                "kpis"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "period",
                  "value": "30d",
                  "description": "Ventana de tiempo: `7d`, `30d`, `90d` o `12m`. Default `30d`. Otro valor es un `422 VALIDATION_ERROR`."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4cc91f4e-1935-4d3e-b1f7-405c522443e2",
          "name": "Signing funnel",
          "request": {
            "name": "Signing funnel",
            "description": {
              "content": "El embudo de firma en **cuatro etapas fijas**: Enviados → En progreso → Completados → Expirados. La colección siempre trae exactamente 4 elementos.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "analytics",
                "funnel"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "period",
                  "value": "30d",
                  "description": "Ventana de tiempo: `7d`, `30d`, `90d` o `12m`. Default `30d`."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4741a71d-30f3-410c-85a4-177d8539cdd3",
          "name": "Monthly trend",
          "request": {
            "name": "Monthly trend",
            "description": {
              "content": "Documentos firmados y horas promedio de firma por mes, para los **últimos 6 meses** (fijo, sin parámetros).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "analytics",
                "trend"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "9792f1ac-ffda-4306-a5e7-64f079be9f8c",
          "name": "Bottlenecks",
          "request": {
            "name": "Bottlenecks",
            "description": {
              "content": "Los firmantes que más documentos tienen pendientes — quién está frenando tus flujos de firma.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "analytics",
                "bottlenecks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "5",
                  "description": "Máximo de firmantes a devolver (1–20, default `5`)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3530b6e8-1a7c-4075-8aa6-afc6548793dd",
          "name": "Team activity",
          "request": {
            "name": "Team activity",
            "description": {
              "content": "Actividad de envío y firma por cada miembro del tenant — una fila por miembro.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "analytics",
                "team"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "period",
                  "value": "30d",
                  "description": "Ventana de tiempo: `7d`, `30d`, `90d` o `12m`. Default `30d`."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "b86cf1fd-5b28-4389-ac4b-d0b11cccb087",
          "name": "Recent events",
          "request": {
            "name": "Recent events",
            "description": {
              "content": "El feed de actividad reciente del tenant — los últimos eventos de documento (creado, enviado, firmado, etc.).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "analytics",
                "events"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "8",
                  "description": "Máximo de eventos a devolver (1–50, default `8`)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "5d242e6d-fa3d-49c0-a1c2-8c8a183919f5",
      "name": "Users",
      "description": {
        "content": "Identify the principal behind your API key (`/users/me`, never 403) and list your tenant's team members (`/users/team`, requires `user:read`).",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "aa5d09a7-ae03-4d64-88c1-5b5207721692",
          "name": "Get current user",
          "request": {
            "name": "Get current user",
            "description": {
              "content": "Devuelve el tenant y el usuario detrás de tu credencial, junto con los scopes que tiene tu API key y el entorno en que opera. Usa este endpoint como sonda de salud de tu credencial antes de una integración. **Responde `200` (autenticado) o `401` (sin credencial válida) — nunca `403`.** Solo confirma tu propia identidad, así que no está protegido por ningún scope.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "users",
                "me"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "68feecb2-5e77-4e99-b576-38a014d1689e",
          "name": "List team members",
          "request": {
            "name": "List team members",
            "description": {
              "content": "Lista a cada miembro de tu tenant con su rol. A diferencia de `/users/me`, este endpoint **sí está protegido por un scope**: expone datos de otras personas, así que requiere `user:read`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "users",
                "team"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "63742c3a-39f6-433b-a32e-246bbfd8216a",
      "name": "Webhooks",
      "description": {
        "content": "Manage webhook endpoints (create, rotate secret, list deliveries) for the v3 event catalog — HMAC-signed, tenant-scoped.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "2d13cb09-a6f0-4ee8-afba-ab3e5530c518",
          "name": "Create endpoint",
          "request": {
            "name": "Create endpoint",
            "description": {
              "content": "Registra un endpoint firmado. Genera un secreto `whsec_` (**devuelto una sola vez**), fuerza HMAC, y estampa la versión de contrato con fecha (`apiVersion`) + el entorno de la key — no hay cruce `live`/`test`. Requiere `webhook:write`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://tu-servidor.com/webhooks/allsign\",\n  \"events\": [\n    \"document.completed\",\n    \"document.voided\"\n  ],\n  \"description\": \"Integración de contratos\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "bca71f9e-8651-4ef9-b380-fe727effb5db",
          "name": "List endpoints",
          "request": {
            "name": "List endpoints",
            "description": {
              "content": "Lista tus endpoints de webhook con paginación por cursor. **El secreto nunca aparece aquí** — solo `secretLast4`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor: endpoints después de este `id` (`whe_…`)."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor: endpoints antes de este `id` (`whe_…`)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "8296e365-1ba4-4c9d-b6a8-35a8c7e05e83",
          "name": "List events",
          "request": {
            "name": "List events",
            "description": {
              "content": "El catálogo **congelado** de eventos v3 a los que puedes suscribirte — la fuente de verdad contra la que valida `POST /v3/webhooks`. Requiere `webhook:read`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks",
                "events"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5d384175-a1bf-4499-a0ac-60d852a1b41d",
          "name": "Retrieve endpoint",
          "request": {
            "name": "Retrieve endpoint",
            "description": {
              "content": "Consulta un endpoint por su `id`. No incluye el secreto (solo `secretLast4`). Un `id` inexistente o de otro tenant responde **404 `WEBHOOK_NOT_FOUND`**.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks",
                ":webhook_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "webhook_id",
                  "description": "(Required) ID del endpoint (`whe_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "bcce1f9b-85dc-4cb2-bd95-ff406a0c2b75",
          "name": "Update endpoint",
          "request": {
            "name": "Update endpoint",
            "description": {
              "content": "Merge-patch: solo cambian los campos que envías. Puedes reasignar `url`, `events`, `description`, o pausar/reactivar con `disabled`. Enviar un campo desconocido o inmutable es un **422 `VALIDATION_ERROR`**. Requiere `webhook:write`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks",
                ":webhook_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "webhook_id",
                  "description": "(Required) ID del endpoint (`whe_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"events\": [\n    \"document.completed\"\n  ],\n  \"disabled\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f56fcaee-3e9b-4f69-a8ec-0c598251ff0f",
          "name": "Delete endpoint",
          "request": {
            "name": "Delete endpoint",
            "description": {
              "content": "Elimina un endpoint. Requiere el scope `webhook:delete`. Las entregas en vuelo hacia ese endpoint se marcan como fallidas (`webhook deleted`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks",
                ":webhook_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "webhook_id",
                  "description": "(Required) ID del endpoint (`whe_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/problem+json"
              }
            ],
            "method": "DELETE"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6718c809-73cc-4ea8-a047-2a70e32cd4e0",
          "name": "Rotate secret",
          "request": {
            "name": "Rotate secret",
            "description": {
              "content": "Acuña un secreto `whsec_` nuevo. El anterior se conserva como *secreto previo* durante una **ventana de 24 h** en la que el despachador firma con **ambos** — así rotas sin downtime. Requiere `webhook:write` y honra `Idempotency-Key` (un reintento con la misma llave reproduce el mismo secreto en vez de rotar dos veces).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks",
                ":webhook_id",
                "rotate-secret"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "webhook_id",
                  "description": "(Required) ID del endpoint (`whe_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "afd51c75-d1f9-464d-bce3-a8ed9baae15f",
          "name": "List deliveries",
          "request": {
            "name": "List deliveries",
            "description": {
              "content": "El log de entregas de un endpoint — para depurar qué se envió, qué respondió tu servidor y cuántos intentos hubo. Pagina por cursor. Requiere `webhook:read`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks",
                ":webhook_id",
                "deliveries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20",
                  "description": "Resultados por página (1–100, default `20`)."
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>",
                  "description": "Cursor: entregas después de este `id` (`whd_…`)."
                },
                {
                  "disabled": true,
                  "key": "endingBefore",
                  "value": "<string>",
                  "description": "Cursor: entregas antes de este `id` (`whd_…`)."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "webhook_id",
                  "description": "(Required) ID del endpoint (`whe_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "25f13c8b-e615-4eec-bedd-485f5294534a",
      "name": "Embedded Signing",
      "description": {
        "content": "Signing sessions for the embedded (iframe) surface: mint a `clientSecret` server-side, then the iframe shell exchanges it for a guest token and reads the CSP policy through the two public first-party routes.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "1b9e1191-49af-48bd-969f-ba062aad621a",
          "name": "Create signing session",
          "request": {
            "name": "Create signing session",
            "description": {
              "content": "Acuña un `clientSecret` que autoriza al iframe a firmar como un firmante (identificado por su correo) de un documento existente. **El `clientSecret` se devuelve una sola vez, aquí.** Requiere el scope `embedded:write` y honra la cabecera `Idempotency-Key`. `livemode` sale de la key, no del body: una key `live` exige `allowedOrigins`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signing-sessions"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentId\": \"doc_b2235df1caac13fb1effe6b9aa34ae08\",\n  \"signerEmail\": \"firmante@empresa.com\",\n  \"allowedOrigins\": [\n    \"https://app.tuempresa.com\"\n  ],\n  \"successUrl\": \"https://app.tuempresa.com/firma/ok\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "7baba10e-a76a-4a69-9c4c-f203791f09ae",
          "name": "Retrieve signing session",
          "request": {
            "name": "Retrieve signing session",
            "description": {
              "content": "Lee el estado **autoritativo del lado del servidor** de una sesión — la verdad sobre si la firma se completó, no lo que reporte el iframe. Un `?expand=evidence` adjunta el paquete de evidencia (PDF sellado + NOM-151 + URLs prefirmadas) cuando ya existe. Requiere `embedded:write`. El `clientSecret` no se devuelve aquí (viene `null`).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signing-sessions",
                ":session_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "expand",
                  "value": "<string>",
                  "description": "Pasa `evidence` para adjuntar el paquete de evidencia sellada. Otro valor es un **400 `INVALID_EXPAND`**."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "session_id",
                  "description": "(Required) ID de la sesión (`ses_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "305cf54e-f8e5-4e62-a8c7-9dcc553e4751",
          "name": "Init signing session",
          "request": {
            "name": "Init signing session",
            "description": {
              "content": "Intercambia el `clientSecret` por un **guest token** nuevo de la sesión. **Ruta pública — no lleva `Authorization`**: la autenticación es el `clientSecret` en el body. Si la sesión se creó con `allowedOrigins`, `parentOrigin` es **obligatorio** y tiene que ser uno de ellos: sin él, o con otro origen, la respuesta es `403 PERMISSION_DENIED` y no se entrega token. La única excepción es de desarrollo: un origen `http://localhost:<puerto>` se acepta con cualquier lista. Llamarla otra vez rota el guest token y entrega uno nuevo.\n\n**No la necesitas para embeber la firma:** ni el SDK ni el iframe de AllSign la llaman; AllSign hace el equivalente por ti al abrir la firma. Por eso una página tuya que no está en `allowedOrigins` no recibe este `403`: lo normal es que el navegador ni siquiera cargue el iframe, porque AllSign lo sirve con `Content-Security-Policy: frame-ancestors` limitado a esa lista. Si aun así llega a cargar, la llamada con la que el iframe inicia la sesión responde `403` con el código `ORIGIN_NOT_ALLOWED`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signing-sessions",
                ":session_id",
                "init"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "session_id",
                  "description": "(Required) ID de la sesión (`ses_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"clientSecret\": \"as_sess_3fa85f6457174562b3fc2c963f66afa6_secret_9f86d081884c7d659a2feaa0\",\n  \"parentOrigin\": \"https://app.tuempresa.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "0b61d321-bfc2-430a-affa-181a5c3c2ebc",
          "name": "Get session policy",
          "request": {
            "name": "Get session policy",
            "description": {
              "content": "Consulta pública (por id, **no** por el secreto) de los orígenes autorizados a embeber la firma de la sesión: devuelve `allowedOrigins` y la directiva `frameAncestors` que les corresponde. **Ruta pública — no lleva `Authorization`.** No expone el `clientSecret` ni datos del documento.\n\n**No la necesitas para embeber la firma:** AllSign aplica esa misma lista en la cabecera `Content-Security-Policy: frame-ancestors` del iframe por su cuenta, sin pasar por esta ruta.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "signing-sessions",
                ":session_id",
                "policy"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "session_id",
                  "description": "(Required) ID de la sesión (`ses_…`)."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "def723fd-c974-48ef-a389-98b7f6f4f0b4",
      "name": "Constancias",
      "description": {
        "content": "Issue and retrieve standalone NOM-151 constancias from a SHA-256 hash without uploading the document.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "35bd3186-cb69-4ae6-98b5-d61a2105e2a8",
          "name": "Emitir constancia NOM-151",
          "request": {
            "name": "Emitir constancia NOM-151",
            "description": {
              "content": "Emite una **Constancia de Conservación NOM-151** a partir del hash SHA-256 de tu documento. **Tu documento nunca sale de tu infraestructura.**\n\nNo es una restricción nuestra: la NOM-151-SCFI-2016 lo **ordena**. Apéndice Normativo A, numeral A.2.4 — *«el Prestador de Servicios de Certificación únicamente recibirá la huella digital electrónica del mensaje de datos»*. Usa este endpoint si ya firmas por tu cuenta (e.firma del SAT, tu propio flujo) y solo necesitas la prueba legal del momento en que el documento existió.\n\n**El hash** va en hexadecimal minúsculas de 64 caracteres — exactamente lo que produce `sha256sum archivo.pdf`. Se aceptan mayúsculas y se normalizan; **no** se acepta base64 ni prefijos tipo `sha256:`.\n\n**`Idempotency-Key` es obligatoria.** Este endpoint cobra y llama a un PSC externo: sin la key, un timeout de red te deja sin forma segura de reintentar. Reintentar con la misma key devuelve la primera respuesta, nunca emite dos veces.\n\n**`externalId`** es tu propia referencia (el folio de tu expediente). Te sirve para recuperar la constancia después sin haber guardado nuestro `id`, y como segunda red contra el doble cobro. Reusar un `externalId` **con el mismo hash** devuelve la constancia ya emitida; reusarlo **con otro hash** devuelve `409` — la referencia ya está tomada por otro documento, y devolverte la constancia equivocada sería peor que fallar.\n\n**Facturación y entornos.** En `live` consume créditos y llama al PSC. Con una API key `test` o `dev` no cobra, no contacta al PSC y devuelve un artefacto **sin validez legal**, marcado con `sandbox: true` y `livemode: false`.\n\n**Requiere contrato.** El addon se activa por tenant tras firmar el contrato de prestación de servicio; sin él, `live` responde `403 CONTRACT_REQUIRED`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "constancias"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) Clave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"hashSha256\": \"<string>\",\n  \"externalId\": \"<string>\",\n  \"label\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6467a18f-e4a5-4e05-b568-85f4b3b3b7e5",
          "name": "Listar constancias",
          "request": {
            "name": "Listar constancias",
            "description": {
              "content": "Lista las constancias del tenant, más recientes primero, con paginación por cursor.\n\n**El listado NO trae el artefacto.** Devolver el base64 de hasta 100 constancias por página significaría descargarlas todas de nuestro almacenamiento en cada petición. Para el artefacto usa `GET /v3/constancias/{constanciaId}`, que trae uno.\n\nSirve para **conciliar**: filtra por tu `externalId` para encontrar el expediente que buscas, o pagina el periodo completo para cuadrar lo emitido contra lo cobrado.\n\nPaginación: manda `startingAfter` con el `nextCursor` de la respuesta anterior. `hasMore` te dice si vale la pena pedir otra página.\n\nEl listado está **acotado al entorno de tu API key**: una key `test` no ve las constancias `live` del tenant, ni al revés.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "constancias"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "20"
                },
                {
                  "disabled": true,
                  "key": "startingAfter",
                  "value": "<string>"
                },
                {
                  "disabled": true,
                  "key": "externalId",
                  "value": "<string>"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "096bf097-0ffc-4dd4-a82b-4704f5f29ae2",
          "name": "Raíz de confianza para verificar offline",
          "request": {
            "name": "Raíz de confianza para verificar offline",
            "description": {
              "content": "Devuelve en PEM el certificado raíz de la **Autoridad Certificadora Raíz Segunda de Secretaría de Economía** — el `-CAfile` que necesitas para verificar una constancia sin depender de AllSign.\n\n⚠️ **`openssl ts -verify` rechaza una constancia NOM-151 con la invocación normal.** No es que la constancia esté mal: el certificado firmante **no lleva el Extended Key Usage `Time Stamping`** (solo `Digital Signature, Non Repudiation`), porque una constancia de conservación no es un sello de tiempo puro. Sin el flag correcto verás `unsuitable certificate purpose` y concluirás, equivocadamente, que la constancia es inválida.\n\nEl flag es **`-purpose any`**. Y como SeguriData entrega un **token CMS pelado** (no un `TimeStampResp`), hace falta además **`-token_in`**.\n\nSi tu versión de `openssl` aun así se niega, `openssl cms -verify -purpose any` comprueba firma y cadena — **pero no compara el message imprint**, así que en ese camino tienes que extraer el `TSTInfo` y comparar el hash tú mismo.\n\n> Servimos esta raíz **por conveniencia, no como autoridad**: no somos PSC acreditado. La fuente autoritativa es la Secretaría de Economía; si tu proceso requiere rigor, bájala de ahí y compara. El archivo que servimos se valida contra su fingerprint SHA-256 antes de entregarse.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "constancias",
                "certchain"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/problem+json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "8c08941a-7dc6-4d24-9eac-62832eee19a6",
          "name": "Verificar una constancia",
          "request": {
            "name": "Verificar una constancia",
            "description": {
              "content": "Corre los **cuatro** checks criptográficos sobre una constancia y devuelve el resultado por criterio.\n\n| Check | Qué prueba |\n|---|---|\n| `integrity` | El hash sellado dentro del token es el de tu documento |\n| `chainOfTrust` | El certificado firmante encadena a la raíz de **Secretaría de Economía** |\n| `cmsSignature` | La firma CMS del token es válida (RFC 5652) |\n| `certValidity` | El certificado estaba vigente **al momento del sellado** |\n\nLos cuatro son necesarios y ninguno implica a otro: un imprint correcto no dice nada de quién firmó, y una firma válida de un emisor cualquiera no acredita nada.\n\n**`status` es tri-estado, no un booleano** (ETSI EN 319 102-1):\n\n- `VALID` — los cuatro checks pasaron.\n- `INVALID` — afirmación fuerte: el artefacto está mal (el documento no es el que se selló, o el emisor no es acreditado).\n- `INDETERMINATE` — **no pudimos concluir**. Token ilegible, o un check que no se pudo completar. *No* significa que la constancia sea falsa.\n\nEsa distinción importa: colapsar `INDETERMINATE` en `INVALID` te haría reportar «tu constancia es falsa» cuando el problema es de nuestro lado.\n\n> **Esto es una conveniencia, no una autoridad.** AllSign no es PSC acreditado, y preguntarle al emisor si su propio artefacto es válido no constituye prueba ante un tercero. Para eso está la verificación independiente: baja la raíz en `/v3/constancias/certchain` y verifica con `openssl` por tu cuenta. El valor de este endpoint es que valida el certificado del PSC contra la raíz correcta, que es el paso que se suele equivocar.\n\nPuedes mandar `constancia` (base64) + `hashSha256`, **o** solo `constanciaId` si la emitimos nosotros — en ese caso el hash sale de nuestro registro.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "constancias",
                "verify"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"hashSha256\": \"<string>\",\n  \"constancia\": \"<string>\",\n  \"constanciaId\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "8b22ceb3-7439-41bd-8253-57384f44c261",
          "name": "Recuperar una constancia",
          "request": {
            "name": "Recuperar una constancia",
            "description": {
              "content": "Devuelve una constancia que emitimos, con el **artefacto inline en base64** — así que basta con haber guardado el `id` (o tu `externalId`) para recuperarla meses después.\n\n**Archiva `constancia`, no `downloadUrl`.** La URL de descarga es una conveniencia con caducidad (`downloadUrlExpiresAt`); si guardas el JSON con la URL y vuelves después, te queda un enlace muerto. El base64 es la fuente de verdad y no expira.\n\nLos campos `sealedAt`, `serialNumber`, `policyOid` y `tsaName` se extraen **del interior del token**, donde están cubiertos por la firma — no del JSON que envuelve la respuesta del PSC. `sealedAt` es el `genTime` del sello: el instante con valor legal.\n\nCon `Accept: application/pkcs7-mime` la misma ruta devuelve el **DER crudo** en vez del JSON, listo para pasárselo a `openssl` sin decodificar nada.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "constancias",
                ":constancia_id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "constancia_id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "80ede656-afa4-4765-8e82-64212dc0f058",
      "name": "Devices",
      "description": {
        "content": "Counter tablets. A one-time enrollment code minted from the dashboard is exchanged here for the tablet's own scoped credential, so no account-wide secret ever lives on a device handed to signers.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "225bdb57-b9ec-43b7-bfb9-3a4803a1303d",
          "name": "Enroll counter tablet",
          "request": {
            "name": "Enroll counter tablet",
            "description": {
              "content": "Enrola una tableta de mostrador con un código de enrolamiento de **8 dígitos**, de un solo uso y válido 10 minutos. No lleva API key: el código es la credencial. Puedes mandar además `platform` (`ios` o `android`) y `model`.\n\nLa respuesta trae `deviceId` (`dev_…`), el nombre del punto de firma, su sucursal, el nombre de la cuenta dueña y `token`, la credencial de la tableta. **El `token` se entrega una sola vez**: guárdalo en el llavero del dispositivo.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "devices",
                "enroll"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"<string>\",\n  \"platform\": \"<string>\",\n  \"model\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "000a2898-bebc-408c-b202-063d76fcaa05",
      "name": "Health",
      "description": {
        "content": "",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "fc20a451-6cb3-4f5a-b94b-9168649335ab",
          "name": "Health check",
          "request": {
            "name": "Health check",
            "description": {
              "content": "Sonda de salud pública, sin autenticación. Úsala para verificar que la API v3 está arriba antes de una integración o en tus checks de monitoreo.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "healthz"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Fecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400 `UNSUPPORTED_API_VERSION`.",
                "key": "AllSign-Version",
                "value": "2026-07-11"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "type": "string",
      "value": "https://api.allsign.io/v3",
      "key": "baseUrl"
    },
    {
      "disabled": false,
      "description": {
        "content": "(Required) ",
        "type": "text/plain"
      },
      "type": "any",
      "value": "<string>",
      "key": "slug"
    },
    {
      "disabled": false,
      "description": {
        "content": "(Required) ",
        "type": "text/plain"
      },
      "type": "any",
      "value": "<string>",
      "key": "template_id"
    },
    {
      "key": "bearerToken",
      "value": "",
      "type": "string",
      "description": "Tu key de sandbox (allsign_test_sk_…). No la guardes en una colección compartida."
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{bearerToken}}"
      }
    ]
  },
  "info": {
    "_postman_id": "8d6f8b32-3f36-4834-a65b-1c1527772e9e",
    "name": "AllSign API v3",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "AllSign API v3 — contract-first, camelCase wire, RFC 9457 problem+json errors. See https://allsign.io/developers/docs.",
      "type": "text/plain"
    }
  }
}