§ Embed widgetBeta

Embed signing inside your product — in an afternoon.

One script tag mounts the VG·Sign signer in an iframe inside your product — themed by your workspace brand, with signed and declined events delivered to your page over postMessage.

Request embed access →Read the APIv1 · REST · OpenAPI on request

Three lines of HTML.

Renders a sealed signing experience inside any container — your dashboard, your customer portal, your white-labelled invoice page.

your-app.html⎘ Copy
<script src="https://vg-sign.com/embed.js"></script>

<div id="vg-sign" data-token="SIGNING_TOKEN"
     data-theme="auto"></div>

<script>
  VGSign.mount({
    onSigned: e => toast(`✓ Signed: ${e.token}`),
    onDeclined: e => reroute("/agreements/inbox"),
  });
</script>
Acme · Customer portalYour app
VG · Sign
Awaiting signature
Master Services Agreement
12 pages · expires May 4 · 3 signers
Drop-in
One script tag, one div. No build pipeline, no React peer dep.
Branded
Inherits your workspace logo and brand colour — set once in settings.
Sandboxed
Renders in an iframe; talks back over postMessage only. Your DOM stays untouched.
Allowlisted
Framing is denied by default — only origins we add to your allowlist can embed.

Branded from your workspace.

The embedded signer inherits your workspace branding — logo and brand colour — set once under Settings → Branding. No separate theme file to maintain; what your senders see is what your embedded customers see. By default the embedded signer follows the viewer’s system light/dark preference.

Access & origins.

01
Signing token
Your backend creates an envelope through the API and receives a per-recipient signing token. Pass it as data-token — the widget loads that recipient’s signer.
02
Origin allowlist
Your site’s origin must be on the workspace frame-ancestors allowlist. Request it from us when you go live; until then, framing is denied.
03
Events
The iframe posts { source: "vg-sign", type, token } on signed / declined. mount() surfaces them as onSigned / onDeclined.