Firma con posiciones personalizadas (CUSTOM)
Además de las posiciones automáticas (UPPER_RIGHT, UPPER_LEFT, LOWER_RIGHT, LOWER_LEFT), Verificamex permite que cada firmante coloque su firma en coordenadas exactas del PDF mediante el valor CUSTOM de sign_position. Esto es lo que usa nuestra propia app web en su editor visual de firma (“Firma Beta”), donde el usuario arrastra el recuadro de firma sobre el documento.
Cómo activarlo
Sección titulada «Cómo activarlo»-
Al crear el documento, define
sign_position: "CUSTOM"a nivel del documento. -
Por cada firmante en el arreglo
signatures, agrega el campopositionscon la(s) coordenada(s) donde deseas que aparezca su firma. -
Sube el PDF normalmente en el paso de subir documento.
El campo positions
Sección titulada «El campo positions»positions es un arreglo de objetos, uno por cada lugar del documento donde ese firmante estampará su firma.
| Campo | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
pos_x | float | No | 100 | Distancia desde el borde izquierdo de la página, en puntos PDF. |
pos_y | float | No | 100 | Distancia desde el borde superior de la página, en puntos PDF. |
width | float | No | 140 | Ancho del recuadro de firma, en puntos PDF. |
height | float | No | 80 | Alto del recuadro de firma, en puntos PDF. |
page | integer | No | 1 | Página donde se coloca la firma. Base 1 (la primera página es 1, no 0). |
rotation | integer | No | 0 | Rotación del recuadro de firma en grados. Valores soportados: 0, 90, 180, 270. |
Sistema de coordenadas
Sección titulada «Sistema de coordenadas»- Origen: esquina superior izquierda de la página (igual que un canvas o visor tipo PDF.js), no la esquina inferior izquierda que usa el estándar PDF internamente. La conversión la hace el backend por ti.
- Unidades: puntos PDF (1 punto = 1/72 pulgada) — el mismo tamaño real de la página, no píxeles de pantalla ni porcentajes. Por ejemplo, una página carta mide aproximadamente
612 x 792puntos. - El recuadro de firma se dibuja desde
(pos_x, pos_y)extendiéndosewidthpuntos a la derecha yheightpuntos hacia abajo.
Firmas en múltiples posiciones
Sección titulada «Firmas en múltiples posiciones»Un mismo firmante puede estampar su firma en más de un lugar del documento (por ejemplo, en varias páginas de un contrato) enviando más de un objeto en positions:
"positions": "[{\"pos_x\":100,\"pos_y\":700,\"width\":140,\"height\":80,\"page\":1,\"rotation\":0},{\"pos_x\":100,\"pos_y\":700,\"width\":140,\"height\":80,\"page\":3,\"rotation\":0}]"Rotación
Sección titulada «Rotación»| Valor | Descripción |
|---|---|
0 | Sin rotación (default). |
90 | Rotación 90° en sentido horario. |
180 | Firma invertida 180°. |
270 | Rotación 90° en sentido antihorario. |
Comportamiento si falta información
Sección titulada «Comportamiento si falta información»CUSTOM no valida ni rechaza la petición si algo falta: si un firmante no incluye positions, o el JSON enviado no es válido, el sistema no genera un error — simplemente coloca esa firma con los valores default (pos_x=100, pos_y=100, width=140, height=80) en la última página del documento. Del mismo modo, no se valida que las coordenadas quepan dentro de la página.
Recomendación: valida en tu propia integración, antes de enviar la petición, que:
pos_x + widthypos_y + heightno excedan el tamaño real de esa página.pagesea un número entre1y el total de páginas del PDF.
Esto evita firmas que terminan fuera del área visible o en una página inesperada.
Ejemplo completo de integración
Sección titulada «Ejemplo completo de integración»{ "company_id": "ac110005-9ae6-1318-819a-fc564ae00125", "tries": 3, "remember_every": 3, "remember_at": "16:54:00", "sign_mode": "PDF_SIGNATURE", "sign_position": "CUSTOM", "mode_logo": "FULL_BRANDING", "notification_mode": "ENABLED", "sign_ordered": "INACTIVE", "config": { "identity_providers": ["LOCAL", "VERIFICAMEX"], "allow_type_signatures": ["VERIFICAMEX", "EFIRMA"] }, "signatures": [ { "name": "Juan Perez", "email": "juanperez@gmail.com", "positions": "[{\"pos_x\":120,\"pos_y\":650,\"width\":180,\"height\":70,\"page\":1,\"rotation\":0}]" } ], "spectators": [], "webhook": "https://webhook.site/my-webhook"}curl --location 'https://api.digitafirma.com/v1/documents' \--header 'X-Api-Key: {X-API-KEY}' \--header 'Content-Type: application/json' \--data '{ "company_id": "ac110005-9ae6-1318-819a-fc564ae00125", "tries": 3, "remember_every": 3, "remember_at": "16:54:00", "sign_mode": "PDF_SIGNATURE", "sign_position": "CUSTOM", "mode_logo": "FULL_BRANDING", "notification_mode": "ENABLED", "sign_ordered": "INACTIVE", "signatures": [ { "name": "Juan Perez", "email": "juanperez@gmail.com", "positions": "[{\"pos_x\":120,\"pos_y\":650,\"width\":180,\"height\":70,\"page\":1,\"rotation\":0}]" } ], "spectators": [], "webhook": "https://webhook.site/my-webhook"}'Con el uuid de la respuesta, continúa con Subir un documento para cargar el PDF y activar el proceso de firma.
Actualizar posiciones de firmantes existentes
Sección titulada «Actualizar posiciones de firmantes existentes»El campo positions también está disponible al actualizar firmantes de un documento ya creado (PATCH /v1/documents/{uuid}), con el mismo formato de string JSON descrito arriba.