White-label signing · via API

Add e-signing to your product

Start signing requests from your backend and hand each signer a branded link on your own subdomain — or embed the signing view straight into your page. No wesign.now account for them, either way. The REST API comes with the Enterprise plan.

How it works today
1
Your backend creates the signing request

One POST to /v1/signing-requests with the PDF (bytes or a URL), the signers and a placement mode. Fields land at call time — anchors in your PDF, explicit coordinates, or an appended signature page.

2
Hand your user the branded link

The response carries a signingUrl per signer on yourco.wesign.now. Open it in a new tab or redirect to it — no login, no wesign.now account. Ask for an SMS code per signer when you need advanced (AES) assurance.

3
Get the sealed PDF back

A signed webhook fires as each signer completes and again when the document is done, carrying a key-authenticated URL to the sealed PDF (PAdES-B) and the audit trail. Or poll GET /v1/documents/{id}.

one call → a branded signing link per signer
POST https://api.wesign.now/v1/signing-requests
Authorization: Bearer wsk_live_…
Content-Type: application/json

{
  "file_url": "https://files.acme.com/msa.pdf",
  "placement": "anchors",
  "signers": [
    { "role": "customer", "email": "ann@acme.com", "name": "Ann Example",
      "phone_e164": "+41791234567", "require_sms_verification": true },
    { "role": "legal", "email": "legal@acme.com" }
  ],
  "callback_url": "https://app.acme.com/wesign/callback"
}

→ 201  {
  "documentId": "8a1e4f9a-…",
  "status": "pending",
  "signers": [
    { "role": "customer", "email": "ann@acme.com", "status": "pending",
      "signingUrl": "https://acme.wesign.now/en/sign/7b1c…", "signingRequestId": "…" },
    { "role": "legal", "email": "legal@acme.com", "status": "pending",
      "signingUrl": "https://acme.wesign.now/en/sign/9d2e…", "signingRequestId": "…" }
  ],
  "callback": { "url": "https://app.acme.com/wesign/callback", "secret": "whsec_…" }
}

Everything you need to ship it

No account for your signers

Signers are guests, keyed by email. They open the link, sign, and are done — they never sign up for wesign.now.

Your brand on every page

Signing runs on yourco.wesign.now with your logo, colours and reply-to address. It looks like your product, not ours.

One request, any number of signers

Your user, their counterparty, or both — up to 20 signers per request, in parallel or in a fixed order, each with their own link.

SMS step-up when you need AES

Set require_sms_verification and a phone number per signer. They confirm a one-time code before they sign (or before the document opens, with sms_gate: before_view); the check lands on the audit trail and the signature is classed as advanced (AES).

Legally sound + audited

A PAdES-B seal on every signed PDF, eIDAS- and ZertES-admissible, an RFC 3161 time stamp over the signed file kept with our records and on the audit certificate, plus an audit-trail PDF you can download by API. Every signature’s assurance level is recorded and verifiable.

Signed webhooks, sealed PDF by URL

HMAC-signed events for each signature and for completion, with a key-authenticated URL to the sealed PDF. Verify the signature, fetch the file, store it.

In-page signing · Enterprise

Sign inside your own page

Your backend exchanges a signing request for a short-lived session and gets back a URL you drop into an iframe or a mobile webview. The frame shows the document, that signer's fields and the signing action — nothing else: no account, no navigation, no wesign.now chrome. Your accent colour, your font, your logo.

  • A short-lived, single-signer session minted server-side with your API key: one signing request, one document, minutes — never an API key in the browser.
  • One ancestor origin per session — your backend names the page that will frame the view, and the frame answers with a frame-ancestors policy for that origin alone. Restrict a key to a list of origins for a second lock.
  • Theming and locale passed at mint time — accent, font, logo, corner radius — and none of our own brand chrome inside the frame.
  • A versioned postMessage schema (ready, viewed, signed, declined, expired, error) so your page can advance the case immediately, while the webhook stays the source of truth.
POST https://api.wesign.now/v1/embedded/sign-sessions
Authorization: Bearer wsk_live_…

{ "signing_request_id": "3f1c9e2a-…",
  "origin": "https://portal.example.com",
  "ttl_seconds": 300, "locale": "de" }

→ 201  { "embed_url": "https://acme.wesign.now/de/embed/sign/b7c2…",
         "expires_at": "…" }

The exact contract — minting, the CSP directives to publish, the postMessage schema, theming, token lifetime and revocation — is on the embedded signing docs page, with a copy-pasteable host page to start from.

Enterprise

Add legally-sound signing to your product

The hosted flow ships on every plan that includes the REST API. In-page signing — embed sessions, per-session origins and postMessage events — is an Enterprise capability; talk to us and we'll set your workspace up.