live · /api/preview/badge?handle=demo0001
Image below is what the unauthed preview endpoint returns — same seal+ribbon+data layout mount() paints in the served bundle.
served live · unauthed · image/svg+xml · 60s edge cache · no API key
Copy the snippet, paste it next to the author byline, ship the badge. Peerseal serves the badge as a single self-contained script with a scoped stylesheet — no SDK to vendor, no API key to provision out of the box, no server-side fetch on your side.
01 · Live demo
The image below is fetched on render from the unauthed /api/preview/badgeendpoint — no API key needed for this read. Its visual grammar matches what the served /embed/badge/[handle].js mounts in a third-party page.
live · /api/preview/badge?handle=demo0001
Image below is what the unauthed preview endpoint returns — same seal+ribbon+data layout mount() paints in the served bundle.
served live · unauthed · image/svg+xml · 60s edge cache · no API key
02 · Snippet
The mount div goes next to the author byline; the script tag goes once before </body>. Replace REPLACE_WITH_HANDLE per listing and pk_live_replace_me once on the issued partner key.
<!-- Mount point: where the badge renders next to the byline -->
<div data-peerseal-handle="REPLACE_WITH_HANDLE"></div>
<!-- Script — place once per page; idempotent across multiple mount divs.
The placeholder key is replaced with your issued one at /pricing. -->
<script src="https://getpeerseal.com/embed/badge/REPLACE_WITH_HANDLE.js"
data-api-key="pk_live_replace_me"></script>03 · How it works
The integration is bounded by what your template already loads every day — a mount div and a script tag. Steps below are idempotent; you can re-run them in any order without breaking the previous state.
Place the <div> mount point next to the author byline and paste the <script> tag once per page. The script auto-discovers every data-peerseal-handle div on the page so a search-results page with many authors renders each badge independently.
Visit /pricing to upgrade to the partner API tier and issue a per-domain key. Replace pk_live_replace_me in your template with the issued value. The unauthed preview runs without a key, so you can ship the snippet first and the key second.
The script is a classic load, so script-src https://getpeerseal.com is enough. If your CSP additionally blocks inline <style> injection, allow style-src 'unsafe-inline'or a nonce — the widget injects one scoped stylesheet into document.head on first mount.