Dar de alta un template PDF desde bytes
Igual que POST /developers/template/save, pero el cuerpo es el PDF crudo en vez de JSON —
útil cuando el archivo es lo bastante grande como para que pese el sobrecosto de Base64.
Esta ruta maneja PDFs con formulario AcroForm, y los campos del formulario se vuelven los
campos de la plantilla. Siempre crea una plantilla nueva; para reemplazar una, usa
POST /developers/template/save.
Autenticación
signmage 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ón | cadenaFirmada |
|---|---|
GET | La URI completa incluyendo el query string, exactamente como se envía |
POST con JSON | El cuerpo JSON, re-serializado compacto (sin espacios ni salto de línea final) |
POST multipart | El SHA-256 en Base64 del archivo, que además se manda en el header Content-SHA256 |
Dos detalles que conviene resolverlos desde el principio:
- En
GET, la URI se firma tal como se envía, así que el orden y el encoding de los parámetros importan. - 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
Parámetros de ruta
Nombre con el que se dará de alta la plantilla.
Cuerpo de la petición
application/pdf
Definiciones de TypeScript
Usa el tipo request body en TypeScript.
binaryCuerpo de la respuesta
application/json
text/plain
curl -X POST "https://example.com/developers/template/save/contrato-arrendamiento" \ -H "Content-Type: application/pdf" \ -d 'string'{ "summary": "html", "value": { "template_title": "contrato-arrendamiento", "fields": [ { "id": "full-name", "value": "" } ], "tables": [ { "id": "directory", "rows": [] } ] }}