Embedded Signing
Los ejemplos usan $ALLSIGN_API_KEY. Defínela una vez con tu key de sandbox: export ALLSIGN_API_KEY="allsign_test_sk_…" (en PowerShell: $env:ALLSIGN_API_KEY="allsign_test_sk_…").
El objeto SigningSession
Atributos
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
idstring requeridoID de la sesión (
ses_…). -
objectstring, siempre "signing_session"Siempre
"signing_session". -
statusenum requeridoEstado de la sesión:
pending,active,completed,expiredocancelled.Valores:
pendingactivecompletedexpiredcancelled -
clientSecretstring puede ser nullEl secreto que tu frontend pasa al iframe. Devuelto una sola vez — en el GET viene
null. -
documentobjeto requeridoDocumento que firma la sesión.
Ver 2 atributos hijos
-
document.idstring requeridoID del documento (
doc_…). -
document.titlestring requeridoNombre del documento.
-
-
signerobjeto requeridoFirmante ligado a la sesión.
Ver 2 atributos hijos
-
signer.emailstring requeridoCorreo del participante que firma en el iframe.
-
signer.namestring requeridoNombre del firmante.
-
-
expiresAtstring (fecha-hora ISO 8601) puede ser nullCuándo expira la sesión (ISO 8601).
-
createdAtstring (fecha-hora ISO 8601) puede ser nullCuándo se creó (ISO 8601).
-
mountedAtstring (fecha-hora ISO 8601) puede ser nullCuándo se montó el iframe por primera vez.
-
completedAtstring (fecha-hora ISO 8601) puede ser nullCuándo se completó la firma.
-
signatureobjeto puede ser nullEstado autoritativo de la firma.
Ver 3 atributos hijos
-
signature.idstring requeridoID de la firma (
sgr_…). -
signature.statusenum requeridoEstado autoritativo de la firma:
pending,sent,signed,cancelled.Valores:
pendingsentsignedcancelledwaiting_turn -
signature.signedAtstring (fecha-hora ISO 8601) puede ser nullMomento de la firma (ISO 8601).
-
-
evidenceobjeto puede ser nullPaquete de evidencia sellada. Solo con
?expand=evidence.Ver 3 atributos hijos
-
evidence.availableboolean requeridoSi el paquete de evidencia ya está listo.
-
evidence.evidencePdfobjeto puede ser nullPuntero al PDF de evidencia sellado.
Ver 3 atributos hijos
-
evidence.evidencePdf.s3Keystring puede ser nullRuta S3 del PDF de evidencia.
-
evidence.evidencePdf.presignedUrlstring puede ser nullURL prefirmada del PDF de evidencia (válida ~24 h).
-
evidence.evidencePdf.hashstring puede ser nullHash del PDF de evidencia.
-
-
evidence.nom151objeto puede ser nullPuntero a la constancia NOM-151.
Ver 3 atributos hijos
-
evidence.nom151.s3Keystring puede ser nullRuta S3 de la constancia NOM-151.
-
evidence.nom151.presignedUrlstring puede ser nullURL prefirmada de la constancia NOM-151.
-
evidence.nom151.dataobjeto (llave → valor) puede ser nullMetadatos de la constancia NOM-151.
-
-
Create signing session
POST /signing-sessions
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.
Parámetros
-
Idempotency-Keystring header requeridoClave ú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.
-
AllSign-Versionenum headerFecha 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.Valores:
2026-07-11
Cuerpo de la petición
-
documentIdstring requeridoID del documento a firmar (
doc_…). Debe existir y tener al firmante como participante. -
signerEmailstring puede ser nullCorreo del participante que firmará. Manda éste o
signerPhone; uno de los dos es obligatorio. -
signerPhonestring puede ser nullWhatsApp del participante que firmará, en E.164 (
+5255…). Alternativa asignerEmailpara el firmante que no dio correo. -
successUrlstring puede ser nullA dónde redirigir cuando la firma se completa.
-
cancelUrlstring puede ser nullA dónde redirigir si el firmante cancela.
-
brandProfileIdstring puede ser nullUUID de un perfil de marca de tu cuenta; el iframe usa sus colores. Si no existe o es de otra cuenta responde 404
RESOURCE_NOT_FOUND. -
allowedOriginsarray de string puede ser nullOrígenes donde puede montarse el iframe. Obligatorio para keys
live. -
otpModeenumVerificación de identidad al crear:
none(default),requiredointegrator_verified. Solononeestá implementado.Valores:
nonerequiredintegrator_verified
Devuelve
201 La sesión creada, con clientSecret en claro (única vez). — el objeto SigningSession
Retrieve signing session
GET /signing-sessions/{session_id}
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).
Parámetros
-
session_idstring ruta requeridoID de la sesión (
ses_…). -
expandstring queryPasa
evidencepara adjuntar el paquete de evidencia sellada. Otro valor es un 400INVALID_EXPAND. -
AllSign-Versionenum headerFecha 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.Valores:
2026-07-11
Devuelve
200 El objeto sesión, con evidencia si se pidió ?expand=evidence. — el objeto SigningSession
Init signing session
POST /signing-sessions/{session_id}/init
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.
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.
Parámetros
-
session_idstring ruta requeridoID de la sesión (
ses_…). -
AllSign-Versionenum headerFecha 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.Valores:
2026-07-11
Cuerpo de la petición
-
clientSecretstring requeridoEl secreto acuñado en el create (forma
as_sess_{id}_secret_{rnd}). Es la credencial de esta ruta. -
parentOriginstring puede ser nullEl origen (
https://…) de la página que embebe el iframe, para validar contraallowedOrigins. Obligatorio si la sesión se creó conallowedOrigins: si falta o no está en la lista, la respuesta es 403PERMISSION_DENIED.http://localhost, con o sin puerto, se acepta siempre.
Devuelve
200 El guest token nuevo y el contexto de la sesión para montar el iframe.
Ver los 12 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
sessionIdstring requeridoID de la sesión (
ses_…). -
signatureIdstring requeridoFirma que el guest token autoriza (
sgr_…). -
signerIdstring puede ser nullID del firmante, si aplica.
-
guestTokenstring requeridoCredencial de un solo uso para el iframe (rotada en cada
init). -
signerobjeto requeridoFirmante ligado a la sesión.
Ver 2 atributos hijos
-
signer.emailstring requeridoCorreo del participante que firma en el iframe.
-
signer.namestring requeridoNombre del firmante.
-
-
documentobjeto requeridoDocumento que firma la sesión.
Ver 2 atributos hijos
-
document.idstring requeridoID del documento (
doc_…). -
document.titlestring requeridoNombre del documento.
-
-
brandProfileIdstring puede ser nullPerfil de marca, si se configuró.
-
appearanceobjeto puede ser nullMarca del workspace para el iframe.
null= el aspecto por defecto de AllSign (marca no habilitada, sin plan de pago, sin perfil o valor guardado inválido).Ver 5 atributos hijos
-
appearance.primaryColorstring requeridoColor de marca,
#rrggbben minúsculas. -
appearance.primaryTextColorstring requeridoColor del texto sobre
primaryColor(#ffffffo#000000), el de mayor contraste WCAG. -
appearance.borderRadiusinteger puede ser nullRadio de las esquinas en px (0–24).
-
appearance.fontFamilystring puede ser nullsystem,geist,manropeointer. Clientes deben tolerar valores nuevos. -
appearance.poweredByAllSignbooleanEl pie «Powered by AllSign» siempre se muestra.
-
-
localestring requeridoIdioma del iframe (ej.
es). -
successUrlstring puede ser nullRedirección de éxito.
-
cancelUrlstring puede ser nullRedirección de cancelación.
Get session policy
GET /signing-sessions/{session_id}/policy
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.
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.
Parámetros
-
session_idstring ruta requeridoID de la sesión (
ses_…). -
AllSign-Versionenum headerFecha 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.Valores:
2026-07-11
Devuelve
200 La política CSP (allowedOrigins + frameAncestors) de la sesión.
Ver los 3 atributos de la respuesta
-
sessionIdstring requeridoID de la sesión (
ses_…). -
allowedOriginsarray de string requeridoOrígenes autorizados a montar el iframe (los
allowedOriginsdel create). -
frameAncestorsstring requeridoEl valor listo para el header
Content-Security-Policy: frame-ancestors. Es*cuando no se configuraron orígenes.