API · Webhooks · Plantillas

Firmas desde tu propio software.

Crea solicitudes de firma desde tu aplicación, haz que tus firmantes firmen en tu página con tu marca y recibe el PDF sellado con su registro de auditoría por webhook. Una API REST con claves de idempotencia, eventos firmados y códigos de error estables.

Las claves API y los webhooks vienen con el plan Enterprise. Documentación pública, especificación OpenAPI 3.1, ningún SDK que instalar.

curl https://api.wesign.now/v1/signing-requests \
  -H "Authorization: Bearer $WSK_KEY" \
  -H "Idempotency-Key: case-4711/poa" \
  -F "file=@power-of-attorney.pdf" \
  -F 'signers=[{"email":"anna@example.ch","role":"client","name":"Anna Muster"}]' \
  -F "placement=anchors" \
  -F 'metadata={"case_id":"4711"}'

# → 201 Created
# {
#   "documentId": "8a1e4f9a-…",
#   "status": "pending",
#   "signers": [{ "role": "client", "signingUrl": "https://yourco.wesign.now/en/sign/…", "emailed": true, … }], …
# }
Cómo funciona

Cuatro pasos de tu código al PDF sellado.

Nada que instalar: HTTPS, JSON y multipart. Cada paso enlaza la página de la documentación que es su contrato.

  1. Paso 1

    Crea la solicitud

    Un POST /v1/signing-requests con el PDF, los firmantes y la colocación de los campos: anchors encuentra marcadores [[ls:signature:client]] en el PDF, explicit toma coordenadas, auto_append añade una página de firma. La respuesta trae el documentId y una signingUrl por firmante.

    En la documentación
    curl https://api.wesign.now/v1/templates/$TEMPLATE_ID/instantiate \
      -H "Authorization: Bearer $WSK_KEY" \
      -H "Idempotency-Key: case-4711/mandate" \
      -H "Content-Type: application/json" \
      -d '{
        "recipients": [{ "slot": 1, "email": "anna@example.ch", "name": "Anna Muster" }],
        "field_values": { "company.legal_name": "Muster AG", "company.tax_id": "CHE-123.456.789" },
        "metadata": { "case_id": "4711" }
      }'

    El mismo envío desde una plantilla bloqueada: POST /v1/templates/{id}/instantiate fusiona tus field_values en los {{placeholders}} e invita a los destinatarios.

  2. Paso 2

    Tu firmante firma

    Enviamos la invitación en el idioma del firmante desde tu subdominio con tu marca — o entregas tú el enlace con send_emails: false. Añade un número de móvil y require_sms_verification, y el firmante introduce primero un código de un solo uso: una firma electrónica avanzada (AES) en lugar del nivel de enlace por correo (SES).

    En la documentación
    "signers": [{
      "email": "anna@example.ch",
      "role": "client",
      "name": "Anna Muster",
      "locale": "de",
      "phone_e164": "+41791112233",
      "require_sms_verification": true
    }]
    
    # The invitation goes out in German from your branded subdomain.
    # Anna asks for the code on the signing page; the signature is AES once verified.
    # Deliver the link yourself instead: send_emails=false
  3. Paso 3

    Recibes el evento

    Registra un webhook una vez para el espacio de trabajo, o pasa callback_url por solicitud. Cada entrega va firmada con HMAC-SHA256, se reintenta con backoff exponencial y queda en un registro de entregas desde el que puedes reenviar. document.completed llega una vez por documento con signed_pdf_url, audit_trail_url y el sha256 del archivo.

    En la documentación
    POST https://your-app.example/wesign/callback
    X-WeSign-Event: document.completed
    X-WeSign-Signature: t=1757404800,v1=9c3b…a2f1
    
    {
      "event": "document.completed",
      "document_id": "8a1e4f9a-…",
      "metadata": { "case_id": "4711" },
      "signed_pdf_url": "https://api.wesign.now/v1/documents/8a1e4f9a-…/signed",
      "audit_trail_url": "https://api.wesign.now/v1/documents/8a1e4f9a-…/audit-trail",
      "sha256": "4f9a…d21c", …
    }
  4. Paso 4

    Descarga los archivos

    GET /v1/documents/{id}/signed devuelve el PDF sellado PAdES, todas las firmas bajo un solo sello; /audit-trail genera el registro de eventos — SHA-256, sello de tiempo, IP enmascaradas — como PDF, siempre en inglés. Ambos necesitan tu clave. Compara el hash y guarda ambos archivos en tu sistema.

    En la documentación
    curl -LOJ -H "Authorization: Bearer $WSK_KEY" \
      https://api.wesign.now/v1/documents/$DOC_ID/signed
    
    curl -OJ -H "Authorization: Bearer $WSK_KEY" \
      https://api.wesign.now/v1/documents/$DOC_ID/audit-trail
    
    # Compare the file's SHA-256 with the event's sha256, then store both files on your side.

Cada respuesta lleva un X-Request-Id, y Ajustes → API guarda 30 días un registro API de cada llamada — estado, código de error, documento afectado; los cuerpos nunca se almacenan. Una Idempotency-Key hace seguro reintentar un envío o un instantiate. Cada clave puede hacer 60 solicitudes por minuto.

Capacidades

Todo lo que la API hace hoy.

Plantillas y registro de campos

Redacta un contrato una vez con {{placeholders}}, bloquéalo, e instantiate lo rellena desde field_values. GET /v1/templates/{id} publica el esquema de entrada; el registro de campos del espacio de trabajo mantiene estables claves y valores de ejemplo.

Anclas

Pon marcadores [[ls:signature:client]] en tu PDF generado y los campos caen donde está el texto — sin coordenadas. Los marcadores se enmascaran antes de que el firmante vea la página.

Verificación por SMS (AES)

phone_e164 y require_sms_verification: un código de un solo uso antes de mostrar el documento o al pulsar Firmar. Vincula la firma a un teléfono — una firma electrónica avanzada.

Firma secuencial

signing_mode: sequential invita a un firmante tras otro; el paralelo es el valor por defecto. Observadores y webhooks siguen cada liberación.

Observadores

observer_emails: destinatarios en copia que nunca firman. Avisados al enviar y cuando todos han firmado, con el PDF final y el certificado.

Varios firmantes y sobres

Varios firmantes firman un PDF bajo un solo sello. Un sobre de varios archivos son varios documentos: cada uno se completa por sí solo y dispara su propio document.completed.

Firma integrada

Emite una sesión breve para un firmante y muestra la vista de firma dentro de tu propia página — iframe o webview móvil, tu marca, ninguna clave API en el navegador. Enterprise.

Webhooks

Firmados, reintentados con backoff exponencial, carga completa o mínima (sin datos personales), un registro de entregas con reenvío y rotación del secreto que mantiene válido el anterior 24 horas.

Sellado PAdES y verificable

Cada PDF firmado lleva un sello PAdES; el sello de tiempo RFC 3161 se guarda en nuestros registros. Cualquiera puede soltar el archivo en /verify y obtener un veredicto: auténtico, manipulado o desconocido.

Región de datos UE, CH o US

Cada espacio de trabajo fija sus documentos en una región: UE (por defecto), Suiza o EE. UU. Los documentos se quedan donde se crearon.

Swiss-made

Firmas enmarcadas en eIDAS y la ZertES suiza como SES y AES (sin QES). Documentación pública, especificación OpenAPI 3.1 y 90 días de aviso antes de cualquier cambio incompatible.

Quién construye sobre ella

Software que pone un contrato delante de un cliente.

Software fiscal y fiduciario

Cartas de encargo, poderes y autorizaciones de presentación directamente desde el expediente: la plantilla lleva el texto del despacho, tu plataforma rellena los datos del cliente y la empresa, el cliente firma en la página con la marca del despacho. El registro de auditoría responde a la consulta de la autoridad fiscal.

Plataformas de RR. HH. y selección

Ofertas, contratos y acuerdos de cesión de personal generados por candidato y enviados en secuencia — primero el candidato, luego el empleador — con el PDF firmado de vuelta en la ficha del candidato.

Onboarding fintech

Acuerdos de alta y documentación de inversores ejecutados dentro de tu flujo, integrados o por enlace, con un segundo factor SMS donde el riesgo lo pide, y un PDF sellado verificable por hash para cumplimiento.

Agencias y generadores de documentos

Tu herramienta produce el PDF, las anclas colocan los campos, el cliente firma sin cuenta. `metadata` lleva tu id de proyecto en cada evento de vuelta a tu sistema.

Historias de clientes publicadas:Zepf TaxesCurio Capital

Las claves API y los webhooks vienen con Enterprise.

Los espacios de trabajo Teams existentes conservan sus claves API y webhooks. El envío de plantillas por la API (instantiate, generate, confirm) y la firma integrada son solo Enterprise. Cada clave puede hacer 60 solicitudes por minuto.

Ver planes y precios

Preguntas

¿Hay un sandbox o una clave de prueba?

Todavía no: cada clave es real. send_emails: false crea el documento y los enlaces sin enviar correo a nadie; validate_only: true comprueba un instantiate sin crear nada; review: true deja un documento en espera para que una persona lo confirme o lo descarte.

¿Qué nivel de firma produce la API?

Una firma electrónica simple (SES) por enlace de correo, o una firma electrónica avanzada (AES) cuando el firmante verifica un código SMS de un solo uso. Sin firma cualificada (QES).

¿Cómo sé que un webhook viene de vosotros?

Cada entrega lleva X-WeSign-Signature: t=<time>,v1=<hmac> — HMAC-SHA256 sobre el sello de tiempo y el cuerpo sin procesar con el secreto del hook. Verifícala antes de confiar en el cuerpo; la documentación tiene verificadores en Node y PHP.

¿Qué pasa si mi endpoint está caído?

Reintentamos con backoff exponencial y guardamos un registro de entregas por hook; una entrega puede reenviarse desde el registro. También puedes consultar GET /v1/signing-requests/{id} en cualquier momento.

¿Puedo reintentar un envío sin enviar dos veces?

Sí. Envía una Idempotency-Key con POST /v1/signing-requests o instantiate: la misma clave con el mismo cuerpo devuelve la primera respuesta durante 24 horas; la misma clave con otro cuerpo se rechaza.

¿Dónde se guardan los documentos?

En la región que fija el espacio de trabajo: UE (por defecto), Suiza o EE. UU. Cifrados en tránsito y en reposo. Un PDF firmado puede borrarse tras el periodo de retención que definas: guarda tu copia en document.completed.

Firmas desde tu propio software.

Cuéntanos qué estás conectando. La documentación es pública — léela primero si quieres.