Distribute through any site.
Drop a script tag.
Any button becomes a signing launcher.
Agencies, freelancer portfolios, contract-template marketplaces, CRMs. The signing flow opens in a modal over your own page, from any site, and the document it opens is served from cybersygn.io. Zero dependencies, attribution-tracked, ESIGN-compliant.
Setup.
Two lines of HTML.
<script src="https://cybersygn.io/embed.js" defer></script>
<button data-cybersygn-sign="https://cybersygn.io/preview/?doc=DOC_ID&t=TOKEN"
data-cybersygn-source="agency-portal">
Sign this NDA
</button>
That's the whole integration. Click the button, the CyberSygn signing flow opens
in a modal iframe over your page, the signer completes, the iframe closes, and
your page fires a cybersygn:complete CustomEvent so you can update
your UI.
The URL has to be on cybersygn.io. Use the
signing_url that POST /api/v1/documents returns, as
above, or a PDF we already host such as a template from
/templates-pdf/. A PDF served from your own domain does not work
today: the signing page fetches the file from cybersygn.io, and our own
connect-src 'self' policy blocks that request before it leaves the
browser. A proxy endpoint that would fetch it server-side is not built yet, so
upload the document through the API and embed the signing link it hands back.
Live demo.
Click and try it.
This opens the same flow your visitors would see, over your page, not over ours. It loads a real consulting agreement, so you get to watch the detector find its fields.
Data attributes.
All optional except the URL.
data-cybersygn-sign, required. Asigning_urlfrom the API, or a PDF URL on cybersygn.io. Customer-hosted PDF URLs are blocked by our CSP and do not work today.data-cybersygn-source, optional. Attribution tag. Default:location.hostname.data-cybersygn-email, optional. Pre-fills signer email.data-cybersygn-name, optional. Pre-fills signer name.
Programmatic API.
For framework code.
window.CyberSygn.open(pdfUrl, {
source: 'react-app',
signerEmail: 'jane@firm.com',
signerName: 'Jane Smith',
});
window.addEventListener('cybersygn:complete', function (e) {
// e.detail = { type: 'cybersygn:complete', docId, signerEmail }
router.push('/thanks');
});
