API · Webhook · Modelli

Firme dal tuo software.

Crea richieste di firma dalla tua applicazione, fai firmare i tuoi firmatari sulla tua pagina con il tuo brand e ricevi il PDF sigillato con il suo audit trail via webhook. Un'API REST con chiavi di idempotenza, eventi firmati e codici di errore stabili.

Chiavi API e webhook sono inclusi nel piano Enterprise. Documentazione pubblica, specifica OpenAPI 3.1, nessun SDK da installare.

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, … }], …
# }
Come funziona

Quattro passi dal tuo codice al PDF sigillato.

Niente da installare: HTTPS, JSON e multipart. Ogni passo rimanda alla pagina della documentazione che ne è il contratto.

  1. Passo 1

    Crea la richiesta

    Un POST /v1/signing-requests con il PDF, i firmatari e il posizionamento dei campi: anchors trova i marcatori [[ls:signature:client]] nel PDF, explicit prende coordinate, auto_append aggiunge una pagina firma. La risposta contiene il documentId e una signingUrl per firmatario.

    Nella documentazione
    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" }
      }'

    Lo stesso invio da un modello bloccato: POST /v1/templates/{id}/instantiate unisce i tuoi field_values nei {{placeholder}} e invita i destinatari.

  2. Passo 2

    Il tuo firmatario firma

    Inviamo l'invito nella lingua del firmatario dal tuo sottodominio con il tuo brand — oppure consegni tu il link con send_emails: false. Aggiungi un numero di cellulare e require_sms_verification, e il firmatario inserisce prima un codice monouso: una firma elettronica avanzata (AES) invece del livello link e-mail (SES).

    Nella documentazione
    "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. Passo 3

    Ricevi l'evento

    Registra un webhook una volta per il workspace, oppure passa callback_url per richiesta. Ogni consegna è firmata HMAC-SHA256, ritentata con backoff esponenziale e registrata in un log di consegna da cui puoi riconsegnare. document.completed arriva una volta per documento con signed_pdf_url, audit_trail_url e lo sha256 del file.

    Nella documentazione
    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. Passo 4

    Scarica i file

    GET /v1/documents/{id}/signed restituisce il PDF sigillato PAdES, tutte le firme sotto un unico sigillo; /audit-trail genera il registro eventi — SHA-256, marca temporale, IP mascherati — come PDF, sempre in inglese. Entrambi richiedono la tua chiave. Confronta l'hash e conserva entrambi i file da parte tua.

    Nella documentazione
    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.

Ogni risposta porta un X-Request-Id, e Impostazioni → API conserva per 30 giorni un log API di ogni chiamata — stato, codice di errore, documento interessato; i corpi non vengono mai salvati. Una Idempotency-Key rende sicuro un invio o un instantiate ritentato. Ogni chiave può fare 60 richieste al minuto.

Funzionalità

Tutto ciò che l'API fa oggi.

Modelli e registro dei campi

Scrivi un contratto una volta con {{placeholder}}, bloccalo, e instantiate lo compila da field_values. GET /v1/templates/{id} pubblica lo schema di input; il registro dei campi del workspace tiene stabili chiavi e valori di esempio.

Ancore

Metti marcatori [[ls:signature:client]] nel tuo PDF generato e i campi finiscono dove c'è il testo — senza coordinate. I marcatori vengono mascherati prima che il firmatario veda la pagina.

Verifica via SMS (AES)

phone_e164 e require_sms_verification: un codice monouso prima che il documento venga mostrato o al momento della firma. Lega la firma a un telefono — una firma elettronica avanzata.

Firma sequenziale

signing_mode: sequential invita un firmatario dopo l'altro; il parallelo è il default. Osservatori e webhook seguono ogni rilascio.

Osservatori

observer_emails: destinatari in copia che non firmano mai. Avvisati all'invio e quando tutti hanno firmato, con il PDF finale e il certificato.

Più firmatari e buste

Più firmatari firmano un PDF sotto un unico sigillo. Una busta di più file è più documenti: ognuno si completa da solo e genera il proprio document.completed.

Firma integrata

Emetti una sessione breve per un firmatario e mostra la vista di firma nella tua pagina — iframe o webview mobile, il tuo brand, nessuna chiave API nel browser. Enterprise.

Webhook

Firmati, ritentati con backoff esponenziale, payload completo o minimo (senza dati personali), un log di consegna con riconsegna e rotazione del secret che mantiene valido il vecchio per 24 ore.

Sigillato PAdES e verificabile

Ogni PDF firmato porta un sigillo PAdES; la marca temporale RFC 3161 resta nei nostri registri. Chiunque può caricare il file su /verify e ottenere un verdetto: autentico, manomesso o sconosciuto.

Regione dati UE, CH o US

Ogni workspace fissa i propri documenti in una regione: UE (default), Svizzera o USA. I documenti restano dove sono stati creati.

Swiss-made

Firme inquadrate da eIDAS e dalla ZertES svizzera come SES e AES (niente QES). Documentazione pubblica, specifica OpenAPI 3.1 e 90 giorni di preavviso prima di ogni modifica incompatibile.

Chi ci costruisce sopra

Software che mette un contratto davanti a un cliente.

Software fiscale e fiduciario

Lettere di incarico, procure e autorizzazioni al deposito direttamente dal fascicolo: il modello porta il testo dello studio, la tua piattaforma compila i dati di cliente e azienda, il cliente firma sulla pagina con il brand dello studio. L'audit trail risponde alla richiesta dell'autorità fiscale.

Piattaforme HR e di recruiting

Offerte, contratti e accordi di somministrazione generati per candidato e inviati in sequenza — prima il candidato, poi il datore di lavoro — con il PDF firmato di ritorno nella scheda del candidato.

Onboarding fintech

Accordi di onboarding e documenti per investitori eseguiti nel tuo flusso, integrati o via link, con un secondo fattore SMS dove il rischio lo richiede, e un PDF sigillato verificabile tramite hash per la compliance.

Agenzie e generatori di documenti

Il tuo strumento produce il PDF, le ancore posizionano i campi, il cliente firma senza account. `metadata` porta il tuo id progetto in ogni evento fino al tuo sistema.

Storie clienti pubblicate:Zepf TaxesCurio Capital

Chiavi API e webhook arrivano con Enterprise.

I workspace Teams esistenti mantengono chiavi API e webhook. L'invio di modelli tramite API (instantiate, generate, confirm) e la firma integrata sono solo Enterprise. Ogni chiave può fare 60 richieste al minuto.

Vedi piani e prezzi

Domande

Esiste una sandbox o una chiave di test?

Non ancora: ogni chiave è reale. send_emails: false crea il documento e i link senza inviare e-mail a nessuno; validate_only: true verifica un instantiate senza creare nulla; review: true mette un documento in attesa perché una persona lo confermi o lo scarti.

Quale livello di firma produce l'API?

Una firma elettronica semplice (SES) via link e-mail, oppure una firma elettronica avanzata (AES) quando il firmatario verifica un codice SMS monouso. Nessuna firma qualificata (QES).

Come so che un webhook arriva da voi?

Ogni consegna porta X-WeSign-Signature: t=<time>,v1=<hmac> — HMAC-SHA256 su marca temporale e corpo grezzo con il secret dell'hook. Verificala prima di fidarti del corpo; la documentazione ha verificatori in Node e PHP.

Cosa succede se il mio endpoint è giù?

Ritentiamo con backoff esponenziale e teniamo un log di consegna per hook; una consegna può essere rimandata dal log. Puoi anche interrogare GET /v1/signing-requests/{id} in qualsiasi momento.

Posso ritentare un invio senza inviare due volte?

Sì. Invia una Idempotency-Key con POST /v1/signing-requests o instantiate: la stessa chiave con lo stesso corpo restituisce la prima risposta entro 24 ore; la stessa chiave con un corpo diverso viene rifiutata.

Dove vengono salvati i documenti?

Nella regione fissata dal workspace: UE (default), Svizzera o USA. Cifrati in transito e a riposo. Un PDF firmato può essere eliminato dopo un periodo di conservazione che imposti tu: conserva la tua copia a document.completed.

Firme dal tuo software.

Dicci cosa stai collegando. La documentazione è pubblica — leggila prima, se vuoi.