Ein POST. Zur Unterschrift verschickt.
Eine REST-API, mit der Sie PDFs zur Unterschrift senden und jeden Unterzeichner verfolgen, signierte Webhooks für jeden Schritt, Idempotenzschlüssel und stabile Fehlercodes. API-Schlüssel und Webhooks gibt es im Enterprise-Tarif.
Was Sie bauen können: Unterschriften aus Ihrer eigenen Softwarecurl https://api.wesign.now/v1/signing-requests \
-H "Authorization: Bearer $WSK_KEY" \
-H "Idempotency-Key: order-123/sign" \
-F "file=@contract.pdf" \
-F 'signers=[{"email":"jane@acme.com","role":"client"}]' \
-F "placement=auto_append"
# → 201 Created
# {
# "documentId": "8a1e4f9a-…",
# "status": "pending",
# "signers": [{
# "role": "client",
# "signingUrl": "https://acme.wesign.now/en/sign/…",
# "emailed": true, …
# }], …
# }Eine API, Webhooks und eine Doku, die auch Ihre Tools lesen.
REST-API
PDF senden, jeden Unterzeichner verfolgen, erinnern oder zurückziehen, das versiegelte PDF und seinen Audit-Trail herunterladen. Bearer-Schlüssel, JSON-Antworten und eine OpenAPI-3.1-Spezifikation mit einer ID für jede Operation.
API-ÜberblickSignierte Webhooks
signing_request.sent, .viewed, .signed, document.completed und weitere, jedes mit HMAC-SHA256 signiert. Eine fehlgeschlagene Zustellung wiederholen wir rund 45 Stunden lang; im Zustellprotokoll können Sie sie erneut senden.
Webhook-EventsDoku für KI-Assistenten
llms.txt listet jede Doku-Seite auf, llms-full.txt enthält sie alle als reinen Text, openapi.json die genauen Formen von Anfragen und Antworten. Geben Sie sie Ihrem Coding-Assistenten.
Für KI-AssistentenKonkrete Beispiele.
Vier Aufrufe, die die meisten Integrationen brauchen. Feldnamen wie in der OpenAPI-Spezifikation.
1. Senden mit Anker-Platzierung
Setzen Sie einen Marker wie [[ls:signature:buyer]] in Ihr PDF. Wir platzieren dort das Signaturfeld des Käufers und blenden den Marker aus. Kein Marker im PDF? Dann hängen wir eine Signaturseite an.
POST /v1/signing-requests
Content-Type: multipart/form-data
file=@offer.pdf # the PDF contains [[ls:signature:buyer]]
signers=[{"email":"buyer@acme.com","role":"buyer","name":"Ann Buyer"}]
placement=anchors2. Mehrere Unterzeichnende, der Reihe nach
Drei Unterzeichnende, nacheinander. Unterzeichner 2 wird erst eingeladen, wenn Unterzeichner 1 unterschrieben hat.
POST /v1/signing-requests
Content-Type: multipart/form-data
file=@contract.pdf
signing_mode=sequential
placement=auto_append
signers=[
{"email":"founder@acme.com","role":"founder"},
{"email":"investor@vc.example","role":"investor"},
{"email":"witness@law.example","role":"witness"}
]3. Webhook-Empfänger
Prüfen Sie den Zeitstempel und den HMAC über den unveränderten Body, dann reagieren Sie auf das Event.
// Node + Express. The full verifier (Node and PHP) is in the docs.
app.post('/wesign/callback', express.raw({ type: 'application/json' }), (req, res) => {
// X-WeSign-Signature: t=<unix seconds>,v1=<hex> (two v1 for 24 h after a rotation)
const parts = (req.get('x-wesign-signature') ?? '').split(',')
const t = parts[0]?.startsWith('t=') ? parts[0].slice(2) : ''
if (!t || Math.abs(Date.now() / 1000 - Number(t)) > 300) return res.status(401).end()
const expected = crypto.createHmac('sha256', SECRET)
.update(`${t}.${req.body}`).digest()
const valid = parts.filter((p) => p.startsWith('v1=')).some((p) => {
const got = Buffer.from(p.slice(3), 'hex')
return got.length === expected.length && crypto.timingSafeEqual(got, expected)
})
if (!valid) return res.status(401).end()
const evt = JSON.parse(req.body.toString('utf8'))
if (evt.event === 'document.completed') {
// fetch evt.signed_pdf_url with your API key, compare evt.sha256, keep a copy
}
res.sendStatus(200)
})4. Idempotente Wiederholung
Derselbe Schlüssel mit demselben Body innerhalb von 24 Stunden liefert die erste Antwort erneut. Eine Wiederholung nach einem Netzwerkfehler sendet also nie doppelt.
POST /v1/signing-requests
Idempotency-Key: order-123/sign
# First call: 201 Created
# Same key + same body (24 h): 201, the same body, Idempotent-Replayed: true
# Same key while the first runs: 409 idempotency_in_progress + Retry-After
# Same key + a different body: 422 idempotency_key_reuseWas Sie heute bauen können.
Jedes Muster nutzt die REST-API und Webhooks. Die Karten verlinken auf die Doku, die es beschreibt.
Mit send_emails: false versenden wir keine Einladung per E-Mail, und der Link jedes Unterzeichners kommt in der Antwort zurück, für Ihre eigene E-Mail, SMS oder App. Erinnerungen und die Abschluss-E-Mail kommen weiterhin von uns.
send_emailsDeren HTTP-Schritt ruft die API mit Ihrem Schlüssel auf, deren Webhook-Schritt empfängt unsere Events, sobald Sie ihn mit POST /v1/hooks registrieren. Nichts zu installieren.
Hooks für AutomatisierungstoolsIhr Handler nimmt den Phasenwechsel aus dem CRM entgegen, versendet den Vertrag und aktualisiert den Datensatz, wenn unser Webhook die Unterschrift meldet. Den Handler betreiben Sie; eine CRM-App gibt es nicht.
CRM-RezeptDocassemble, Pandoc oder LaTeX schreibt Anker-Marker ins PDF, ein POST versendet es, und Sie laden das unterschriebene PDF, wenn document.completed eintrifft.
Generator-RezeptLassen Sie den Agenten Marker wie [[ls:signature:client]] in den Entwurf schreiben, dort landen die Felder. Unterschreiben tut weiterhin ein Mensch, der seinen Link öffnet.
Agenten-RezeptErzeugen Sie auf Ihrem Server eine kurzlebige Sitzung und zeigen Sie die Signaturansicht in einem iframe auf Ihrer eigenen Website. Ihre Unterzeichnenden brauchen kein Konto.
Eingebettete SignaturNicht verfügbar: ein SDK, eine Sandbox oder Testschlüssel sowie Apps oder Plug-ins für andere Tools.
Gebaut für den Produktivbetrieb.
Bearer-Schlüssel, zwei Scopes
Jeder Schlüssel gehört zu genau einem Workspace. Ein full-Schlüssel ruft die ganze API auf, ein embedded-Schlüssel verwaltet nur eingebettete Signatursitzungen. Beschränken Sie einen Schlüssel auf Ihre IP-Adressen; ein Widerruf wirkt sofort.
60 Anfragen pro Minute und Schlüssel
Ein festes Zeitfenster pro Schlüssel über alle /v1-Endpunkte. Erfolgreiche Antworten tragen RateLimit-*-Header, ein 429 trägt Retry-After.
Stabile Fehlercodes
Jeder Fehler ist JSON mit einer lesbaren Meldung (error), einem stabilen code und, wo es hilft, meta. Prüfen Sie den code; die Meldung kann sich ändern.
Versiegelte, prüfbare PDFs
Das unterschriebene PDF trägt ein PAdES-Siegel, das jeder konforme Reader prüfen kann. Der Audit-Trail listet jedes Ereignis mit Zeitpunkt, E-Mail-Adresse und maskierter IP-Adresse des Unterzeichners sowie jede SMS-Code-Prüfung.
API-Zugang gibt es mit Enterprise.
API-Schlüssel und Webhooks sind Teil des Enterprise-Tarifs. Sagen Sie uns, was Sie anbinden möchten. Die Doku ist öffentlich, Sie können sie also vorher lesen.
