Fingerprint PDFs on download and prove lineage later — no DRM, no PII.
/claim.html
.<script src="https://inkdnafingerprint.com/plugin.js" data-key="pk_XXXX" data-observe='a[href$=".pdf"],a[data-inkdna]' data-mode="loose" async></script>
If your API is at a different origin, add
data-api="https://api.example"
.
API Base
+ API Key
in Woo → Settings →
InkDNA.
While we provide a Woo plugin and a simple CDN loader snippet, other platforms that allow inserting the loader script will work too. We focus engineering effort on the CDN loader and Woo integration; reach out if you need a custom integration.
Order IDs make takedowns provable. The loader auto-detects them from attributes, URL params, or page hints. Use one of these:
<a href="/files/ebook.pdf" data-inkdna data-inkdna-order="ORDER-123">Download</a>
<script>(function(){ var el = document.querySelector('#orderNo, .order-number, [data-order-number]'); var ord = el ? (el.textContent || el.value || '').trim() : ''; if (!ord) { var q = new URLSearchParams(location.search); ord = q.get('order') || q.get('order_id') || q.get('order-received') || q.get('oid') || ''; } if (ord) { document.body.dataset.inkdnaOrder = ord; document.querySelectorAll('a[href$=".pdf"],a[data-inkdna]').forEach(function(a){ a.dataset.inkdnaOrder = ord; }); } })();</script>
<script>(function(){ var p=new URLSearchParams(location.search); var ord=p.get('order-received')||p.get('order')||''; if(ord) document.body.dataset.inkdnaOrder=ord; })();</script>
POST /detect/guess
(PDF with embedded FID), fallback
POST /detect
(supply X-Order-Id
).
# curl example curl -H "X-API-Key: ink_live_xxx" -F [email protected] https://ashtonx24-inkdna.hf.space/detect/guess
Use this public demo key on the Verify page to check our stamped sample.
Demo API key:
demo_live_d12KIiDxdoLLScgy9Suexow3m9oFAAwS
Download BEFORE.pdf Download AFTER.pdf Open Verify
This key only works on AFTER.pdf
and cannot mark.
/claim
{ publicKey, asset, context: { orderId?, referer, userAgent? }
}
{ token, expiresAt, policy }
/fp?token=…
202
+
Retry-After
if still rendering.
/events
clicked
→ claimed
→
served
→ failed
.
data-mode="loose"
for testing;
switch to "strict"
once stable.
/claim
? Add your domain on the claim
page.
data-inkdna-order
or the auto script
above.