Crear un documento

POST
/developers/json

El endpoint principal. Sube un PDF, coloca los recuadros de firma sobre él y devuelve la URL donde se puede firmar.

El documento puede venir de una URL, de Base64 o de una plantilla ya registrada — elige uno. Cada entrada de stickers es un firmante en un lugar; dale email y configura un flujo si quieres que Firmame mande las invitaciones, si no, reparte tú document_url.

Authorization<token>

Cada petición lleva Authorization: signmage {webId}:{firma}, donde firma es el Base64 de HMAC-SHA256(apiKey, cadenaFirmada).

Qué va dentro de cadenaFirmada depende de la petición:

PeticióncadenaFirmada
GETLa URI completa incluyendo el query string, exactamente como se envía
POST con JSONEl cuerpo JSON, re-serializado compacto (sin espacios ni salto de línea final)
POST multipartEl SHA-256 en Base64 del archivo, que además se manda en el header Content-SHA256

Dos detalles que conviene resolverlos desde el principio:

  1. En GET, la URI se firma tal como se envía, así que el orden y el encoding de los parámetros importan.
  2. En POST, la comparación se hace contra tu JSON re-serializado en forma compacta. Manda JSON compacto y canónico para que las firmas coincidan.

Una firma que no coincide devuelve 401 con el cuerpo vacío. Como la misma respuesta cubre un web ID desconocido, una llave inactiva y una firma que no coincide, revisa las tres cosas al diagnosticar.

En: header

Cuerpo de la petición

application/json

Definiciones de TypeScript

Usa el tipo request body en TypeScript.

Cuerpo de la respuesta

application/json

text/plain

curl -X POST "https://example.com/developers/json" \  -H "Content-Type: application/json" \  -d '{    "url_doc": {      "url": "https://ejemplo.com/contrato.pdf",      "name": "contrato.pdf"    },    "stickers": [      {        "authority": "EMAIL_LINK",        "stickerType": "rect",        "dataType": "email",        "imageType": "stroke",        "data": "[email protected]",        "page": 0,        "rect": {          "lx": 330,          "ly": 300,          "tx": 530,          "ty": 400        }      }    ]  }'
{  "document_ticket": "c6279a7c-b3d5-4c71-b417-4687a4f38914",  "document_flow": false,  "sticker_count": 1,  "stickers": [    {      "sticker_id": "qv3ZzAL3w",      "sticker_index": 0,      "sticker_email": "[email protected]",      "sticker_data": "[email protected]",      "sticker_page": 0,      "sticker_coordinates": {        "lx": 388,        "ly": 400,        "ux": 496,        "uy": 480      },      "sticker_type": "EMAIL",      "sticker_image_type": "hash",      "sticker_authorities": [        {          "authority_name": "Vinculada a Correo Electrónico"        }      ]    }  ],  "document_url": "https://app.firmame.com/pdf/c6279a7c-b3d5-4c71-b417-4687a4f38914/?child=true&inv=true"}