Consent evidence infrastructure

Consent records that hold up when terms are tested.

99zebras turns every clickwrap acceptance into signed, independently-anchored evidence. Export it on demand for legal review, audit response, or dispute production.

For teams that have to prove what someone agreed to — in a dispute, an audit, or a legal claim.

How it works

Four steps from acceptance to evidence.

01

Show terms

Lock the exact version, rendered text, and version metadata for every page view.

02

Capture the moment

Record server timestamp, subject identifiers, source flow, IP evidence, and device context.

03

Seal the evidence

Hash, sign, and anchor with an independent third party. Any tampering becomes visible.

04

Hand to counsel

Export a self-contained pack legal, audit, or opposing counsel can review without us.

See the full walkthrough

The problem

Your agreement is only useful if you can prove the acceptance.

A checkbox, a database row, or a screenshot of your current terms is not enough when the question becomes specific: what did this person accept, at this time, in this flow?

01

The words they saw

Store the exact agreement version, rendered text, policy metadata, and content hash.

02

The moment they accepted

Capture server time, subject identifiers, intent, source flow, IP evidence, and device context.

03

The export legal needs

Produce evidence packs that explain the record without asking an engineer to reconstruct history.

Who it's for

The record is the same. What it protects depends on your business.

Online stores & growing businesses

Prove a customer accepted your returns, refund, or subscription terms before they paid, then use it in chargeback and dispute responses.

How it helps stores

Regulated & enterprise teams

A self-contained record for each acceptance: version, timestamp, and an independent seal anyone can verify, with retention and legal holds.

  • GDPR · Art. 7
  • CCPA · CPRA
  • FINRA · SOX
  • e-Discovery
How it helps compliance teams

FAQ

The questions buyers ask.

More in the pricing page, or send yours our way.

01 What is a clickwrap acceptance, exactly?

A signed, time-stamped record of a subject confirming a specific agreement version. 99zebras captures the exact rendered terms, the moment of acceptance, the subject's context, and seals it with a cryptographic signature.

02 How is this different from a checkbox in our database?

A database row says "1 = accepted." It doesn't store what they saw, when, in what flow, or whether the record is still intact. 99zebras stores the exhibit you'd actually need to produce in a dispute.

03 Will our counsel accept the evidence?

Yes. Evidence packs are self-contained: rendered terms (HTML and PDF), metadata, content hash, signature chain, and an independent RFC 3161 timestamp. Counsel verifies the record without 99zebras involvement, by anyone, at any time.

04 Can records be tampered with?

No. Every record is hashed and signed; any change to the rendered terms, metadata, or signature makes verification fail. Public verification URLs let anyone, including opposing counsel, check the record without us.

05 How long does implementation take?

Hours for hosted pages, an afternoon for the drop-in modal, a day for direct integration. We're designed to be added to existing onboarding, checkout, and consent flows without re-architecting them.

06 What happens if we leave 99zebras?

Records are portable. Exports are self-contained and signed; public verification URLs stay live for the retention window of the plan that created them. Your evidence doesn't expire with the subscription.

For developers

Five lines and an API key.

A deliberately plain REST API: create a record, get back a sealed hash and a verification URL. Add it to onboarding, checkout, or in-product gates in an afternoon. Or reach for an embed, a hosted page, a share link, or the browser SDK.

  • REST API
  • iframe embed
  • hosted page
  • share links
  • browser SDK
Explore all integration options
api.capture 201 created
POST https://api.99zebras.com/v1/acceptances
Authorization: Bearer zsk_live_…
Content-Type: application/json

{
  "agreement_version_id": "0193e8c7-…",
  "end_user_ref":         "user_8K42Q9",
  "acceptance_method":    "api_direct"
}

→ 201
{
  "id":                "019e8a4b-…",
  "accepted_at":       "2026-05-20T14:23:01.123456Z",
  "sealed_event_hash": "sha256:b91f2b4b…",
  "verification_url":  "https://app.99zebras.com/v/abc123…",
  "acceptance_method": "api_direct"
}

99zebras

Built for the moment your terms get tested.

When the question becomes "what did they accept, exactly?", a defensible record is the only acceptable answer.