Embedded Signing

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.

Cuerpo de la petición

application/json · schema SigningSessionCreateRequest

{
  "documentId": "doc_5Qr9tA3fZwLZmp3D1bCdEfG",
  "signerEmail": "firmante@empresa.com",
  "allowedOrigins": [
    "https://app.tuempresa.com"
  ],
  "successUrl": "https://app.tuempresa.com/firma/ok"
}

Ejemplo (cURL)

curl -X POST "https://api.allsign.io/v3/signing-sessions" \
  -H "Authorization: Bearer allsign_live_sk_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -d '{
    "documentId": "doc_5Qr9tA3fZwLZmp3D1bCdEfG",
    "signerEmail": "firmante@empresa.com",
    "allowedOrigins": ["https://app.tuempresa.com"],
    "successUrl": "https://app.tuempresa.com/firma/ok"
  }'

Respuestas

201 La sesión creada, con clientSecret en claro (única vez). — SigningSession

{
  "object": "signing_session",
  "id": "ses_3fa85f6457174562b3fc2c963f66afa6",
  "livemode": true,
  "status": "pending",
  "clientSecret": "as_sess_3fa85f6457174562b3fc2c963f66afa6_secret_9f86d081884c7d659a2feaa0",
  "document": {
    "id": "doc_5Qr9tA3fZwLZmp3D1bCdEfG",
    "title": "Contrato de arrendamiento 2026.pdf"
  },
  "signer": {
    "email": "firmante@empresa.com",
    "name": "Juan Pérez"
  },
  "expiresAt": "2026-07-12T18:04:00Z",
  "createdAt": "2026-07-11T18:04:00Z"
}

Errores posibles (problem+json): 400 401 403 404 409 422 429

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_id path · requerido ID de la sesión (ses_…).
expand query Pasa evidence para adjuntar el paquete de evidencia sellada. Otro valor es un 400 INVALID_EXPAND.

Ejemplo (cURL)

curl "https://api.allsign.io/v3/signing-sessions/ses_3fa85f6457174562b3fc2c963f66afa6?expand=evidence" \
  -H "Authorization: Bearer allsign_live_sk_..."

Respuestas

200 El objeto sesión, con evidencia si se pidió ?expand=evidence. — SigningSession

{
  "object": "signing_session",
  "id": "ses_3fa85f6457174562b3fc2c963f66afa6",
  "livemode": true,
  "status": "completed",
  "clientSecret": null,
  "document": {
    "id": "doc_5Qr9tA3fZwLZmp3D1bCdEfG",
    "title": "Contrato de arrendamiento 2026.pdf"
  },
  "signer": {
    "email": "firmante@empresa.com",
    "name": "Juan Pérez"
  },
  "signature": {
    "id": "sgr_63db6fa927094f689ea7bc640194bade",
    "status": "SIGNED",
    "signedAt": "2026-07-11T19:02:00Z"
  },
  "mountedAt": "2026-07-11T18:40:00Z",
  "completedAt": "2026-07-11T19:02:00Z",
  "createdAt": "2026-07-11T18:04:00Z",
  "expiresAt": "2026-07-12T18:04:00Z",
  "evidence": {
    "available": true,
    "evidencePdf": {
      "presignedUrl": "https://allsign-documents.s3.amazonaws.com/documentos/.../evidence.pdf?X-Amz-Signature=...",
      "s3Key": "documentos/5Qr9.../pdf/evidence.pdf",
      "hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
    },
    "nom151": {
      "presignedUrl": "https://allsign-documents.s3.amazonaws.com/documentos/.../constancia.tsr?X-Amz-Signature=...",
      "s3Key": "documentos/5Qr9.../nom151/constancia.tsr",
      "data": {
        "serialNumber": "12345",
        "issuedAt": "2026-07-11T19:03:00Z"
      }
    }
  }
}

Errores posibles (problem+json): 400 401 403 404 422 429

Init signing session

POST /signing-sessions/{session_id}/init

Intercambia el clientSecret por un guest token fresco que arranca la firma dentro del iframe. La consume el shell de iframe de AllSign (primera parte), no tu backend. Ruta pública — no lleva Authorization: la autenticación es el clientSecret en el body. Volver a llamar init es idempotente por diseño: rota el guest token interno y da uno nuevo.

Parámetros

session_id path · requerido ID de la sesión (ses_…).

Cuerpo de la petición

application/json · schema SigningSessionInitRequest

{
  "clientSecret": "as_sess_3fa85f6457174562b3fc2c963f66afa6_secret_9f86d081884c7d659a2feaa0",
  "parentOrigin": "https://app.tuempresa.com"
}

Ejemplo (cURL)

curl -X POST "https://api.allsign.io/v3/signing-sessions/ses_3fa85f6457174562b3fc2c963f66afa6/init" \
  -H "Content-Type: application/json" \
  -d '{
    "clientSecret": "as_sess_3fa85f6457174562b3fc2c963f66afa6_secret_9f86d081884c7d659a2feaa0",
    "parentOrigin": "https://app.tuempresa.com"
  }'

Respuestas

200 El guest token nuevo y el contexto de la sesión para montar el iframe. — SigningSessionInit

{
  "sessionId": "ses_3fa85f6457174562b3fc2c963f66afa6",
  "signatureId": "sgr_63db6fa927094f689ea7bc640194bade",
  "guestToken": "gt_7c9e6679742540de944be07fc1f90ae7",
  "signer": {
    "email": "firmante@empresa.com",
    "name": "Juan Pérez"
  },
  "signerId": "sgr_63db6fa927094f689ea7bc640194bade",
  "document": {
    "id": "doc_5Qr9tA3fZwLZmp3D1bCdEfG",
    "title": "Contrato de arrendamiento 2026.pdf"
  },
  "locale": "es",
  "brandProfileId": null,
  "successUrl": "https://app.tuempresa.com/firma/ok",
  "cancelUrl": null,
  "livemode": true
}

Errores posibles (problem+json): 400 403 404 409 422 429

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 el iframe. La ruta de primera parte que sirve el HTML del iframe inyecta estos valores en su header Content-Security-Policy: frame-ancestors. Ruta pública — no lleva Authorization. No expone el clientSecret ni datos del documento.

Parámetros

session_id path · requerido ID de la sesión (ses_…).

Ejemplo (cURL)

curl "https://api.allsign.io/v3/signing-sessions/ses_3fa85f6457174562b3fc2c963f66afa6/policy"

Respuestas

200 La política CSP (allowedOrigins + frameAncestors) de la sesión. — SigningSessionPolicy

{
  "sessionId": "ses_3fa85f6457174562b3fc2c963f66afa6",
  "allowedOrigins": [
    "https://app.tuempresa.com"
  ],
  "frameAncestors": "https://app.tuempresa.com http://localhost:*"
}

Errores posibles (problem+json): 400 404 422 429