Skip to content
ZiaSignZiaSign
ZiaSign
    • Individuals & TeamsPay by document, unlimited users.
    • DevelopersREST API, SDKs, webhooks, sandbox.
    • EnterpriseSSO, QES, dedicated CSM, on-prem.
    Individuals pricingDevelopers pricingEnterprise pricing
  • Free PDF Tools
  • Browse by topic

    • Getting StartedQuickstart, account, first send
    • Documents & SigningPrepare, send, sign, track
    • Developer APIREST, SDKs, webhooks, sandbox
    • AI FeaturesField detection, summaries, Q&A
    • Billing & PlansSubscriptions, invoices, limits
    • Mobile AppiOS & Android guides

    Quick links

    • Quickstart
    • API reference
    • Authentication
    • Webhooks
    • How-to guides
    • Changelog
    Building with the API?Free sandbox, full REST + webhooks, SDKs in 5 languages.
    Browse all documentation
  • Pricing
  • Company

    • About
    • Blog
    • Investors
    • Security

    Compare

    • vs DocuSign
    • vs Adobe Sign
    • vs PandaDoc
    • vs iLovePDF
    • vs Smallpdf
    • vs PDF24
    • vs Sejda
    Investor connectLatest blog
PDF ToolsFreePricing
Start Free
Start Free
  1. Home
  2. Documentation
  3. Developer API
  4. Embedded Signing
Developer API

Embedded Signing

Embed the ZiaSign signing experience directly in your web application for a seamless user flow.

Last updated April 14, 2026
Quickstart GuideAccount & Organization SettingsDocument TemplatesSecurity & ComplianceHelp & Support
Sending Documents for SignatureThe Signing ExperienceAudit Trail & Legal ValidityBulk SendPDF ToolsDocument Editor & StudioDocument LibraryAnalytics & Reports
API AuthenticationDocuments APIWebhooksSandbox & TestingEmbedded SigningIntegrations
AI Contract AnalysisAI Smart Workflows
Plans & PricingBilling & InvoicesReferral Program
Mobile App Guide
Changelog & Release Notes

Overview

Embedded signing lets your users sign documents without leaving your application. Instead of receiving an email link, the signing experience appears directly within your product.

Integration Methods

1. JavaScript SDK (Recommended)

Install the SDK:


Create a signing session and embed it:


2. Generate Signing URL (Server-Side)

Your backend requests a signing URL from the ZiaSign API:


3. iframe Embed

For simpler integrations, use an iframe directly:


Note: The JavaScript SDK is preferred over raw iframes because it handles responsive resizing, cross-origin communication, and event callbacks.

Events

The SDK and iframe both emit events via postMessage:

EventDataDescription
ziasign:ready{}Signing interface loaded
ziasign:signed{ signerEmail }Signer completed their fields
ziasign:declined{ reason }Signer declined to sign
ziasign:completed{ documentId }All signers completed
ziasign:error{ code, message }An error occurred

Redirect Mode

Instead of embedding, you can redirect users to ZiaSign and back:

  1. Generate a signing URL with a redirectUrl parameter
  2. Redirect your user to the signing URL
  3. After signing, ZiaSign redirects back to your redirectUrl with the result
https://your-app.com/signing-complete?documentId=doc_abc123&status=completed&signerEmail=user@example.com

Frequently asked questions

Can I customize the embedded signing UI?

Yes. You can set your brand colors, logo, and hide ZiaSign branding (Business+ plans). The JavaScript SDK offers extensive customization options.

Is embedded signing secure?

Yes. Embedded signing uses the same security infrastructure as the standard experience: TLS 1.3, AES-256 encryption, and tamper-evident audit trails.

What plans support embedded signing?

Embedded signing is available on Professional plans and above. White-label (ZiaSign branding removed) requires a Business or Enterprise plan.

Related documentation

API Authentication

Authenticate your API requests using API keys with HMAC-SHA256 request signing for maximum security.

Documents API

Create, send, retrieve, download, and manage documents programmatically via the REST API.

Webhooks

Receive real-time HTTP notifications when documents are viewed, signed, completed, or declined.

Previous

Sandbox & Testing

Next

Integrations

On this page

OverviewIntegration Methods1. JavaScript SDK (Recommended)2. Generate Signing URL (Server-Side)3. iframe EmbedEventsRedirect Mode

Product

  • eSignature
  • AI Document Assistant
  • Templates & Workflows
  • Pricing
  • What's New

Solutions

  • Individuals & Teams
  • Developers & API
  • Enterprise
  • Trust & Security

Free PDF Tools

  • Browse All Tools
  • Merge PDF
  • Split PDF
  • Compress PDF
  • PDF to Word
  • Use-Case Guides

Developers

  • Documentation
  • API Reference
  • How-To Guides
  • Status

Compare

  • vs DocuSign
  • vs Adobe Sign
  • vs PandaDoc
  • vs iLovePDF
  • vs Smallpdf
  • vs Sejda

Company

  • Investors
  • Blog
  • Privacy
  • Terms
  • DPA
  • Sub-processors
ZiaSignZiaSign
ZiaSign

Sign. Automate. Scale — with AI.

© 2026 ZiaSign. All rights reserved.

SOC 2 (in audit)GDPR · DPDPeIDAS · ESIGN
bash
npm install @ziasign/embed
typescript
import { ZiaSignEmbed } from "@ziasign/embed";

// 1. Create a signing session via your backend
const response = await fetch("/api/create-signing-session", {
  method: "POST",
  body: JSON.stringify({ documentId: "doc_abc123", signerEmail: "user@example.com" }),
});
const { signingUrl } = await response.json();

// 2. Mount the signing experience
const embed = new ZiaSignEmbed({
  container: document.getElementById("signing-container")!,
  url: signingUrl,
  // Customization options
  options: {
    showHeader: false,    // Hide the ZiaSign header
    showFooter: false,    // Hide the footer
    brandColor: "#4F46E5", // Your brand color
    locale: "en",
  },
});

// 3. Listen for events
embed.on("signed", (event) => {
  console.log("Document signed by:", event.signerEmail);
  // Update your UI
});

embed.on("declined", (event) => {
  console.log("Signer declined:", event.reason);
});

embed.on("completed", () => {
  console.log("All signers have signed");
  // Redirect or show success state
});

// 4. Mount
embed.mount();
python
# POST /documents/{id}/signing-sessions
response = ziasign_request("POST", f"/api/v1/documents/{doc_id}/signing-sessions", {
    "signerEmail": "user@example.com",
    "redirectUrl": "https://your-app.com/signing-complete",
    "expiresIn": 3600,  # URL valid for 1 hour
})

signing_url = response["signingUrl"]
# Return this URL to your frontend for embedding
html
<iframe
  src="SIGNING_URL_FROM_API"
  width="100%"
  height="800"
  style="border: none; border-radius: 12px;"
  allow="camera"
  title="Sign Document"
></iframe>