ESIGN & UETA compliance for developers

A developer-focused reference that turns the ESIGN Act and UETA into concrete code requirements — the five things your signing flow must capture, mapped to statute, plus copy-pasteable consent copy and a JSON audit-record schema. Educational, not legal advice.

Last updated July 23, 2026 · facts verified against primary sources
Not legal advice. This is an engineering reference to help you build a defensible signing flow. Statutes and case law change and vary by jurisdiction and document type — have counsel review anything you rely on.

ESIGN vs UETA, in two sentences

ESIGN (the federal Electronic Signatures in Global and National Commerce Act, 15 U.S.C. §7001, 2000) makes electronic signatures and records legally effective across US interstate commerce. UETA (the Uniform Electronic Transactions Act, 1999) is the near-identical state-level law adopted by 49 states; where a state has adopted UETA, it generally governs, with ESIGN as the federal backstop.

Both say the same core thing: a signature, contract, or record may not be denied legal effect solely because it is electronic. Neither dictates a technology — they set outcomes your process must achieve. Here is that process as code requirements.

The five code requirements, mapped to statute

1. Intent to sign — §7001(a)

The signer must take a deliberate action that manifests intent to sign (typing a name, drawing a signature, clicking a clearly labeled “Sign” button). In code: capture the specific action and its timestamp; never treat a page view or a pre-checked box as a signature.

2. Consent to do business electronically — §7001(c)

For consumer transactions, ESIGN requires affirmative consent to use electronic records, plus disclosures: the right to a paper copy, how to withdraw consent, the hardware/software needed to access records. In code: gate signing behind an explicit consent step and store the exact disclosure text and version the signer agreed to.

3. Association with the record — attribution, §7001(a) & UETA §9

The signature must be logically bound to the exact document that was signed. In code: hash the final document bytes (e.g. SHA-256) and store the hash with the signature event, so you can later prove the signed bytes were not altered.

4. Retention & reproducibility — §7001(d)

The record must be retained and capable of accurate reproduction for later reference by everyone entitled to it. In code: store the signed artifact in a durable, tamper-evident form (a PAdES/PKCS#7-sealed PDF is ideal) and keep it for the life of the agreement plus any statute-of-limitations tail.

5. Attribution & audit trail — §7001(a), UETA §9

You must be able to show who signed and how you know. In code: record signer identity signals (authenticated email/OTP, IP address, user agent, timestamps for view/consent/sign) in an audit record bound to the document hash.

A JSON audit-record schema (copy-paste)

This is the citable artifact: a compact, court-friendly audit record that captures the five requirements for one signer on one document. Emit one per signer, bind it to the document hash, and seal it with the final PDF.

{
  "envelope_id": "env_9f2c1a",
  "document": {
    "filename": "services-agreement.pdf",
    "sha256": "b1946ac92492d2347c6235b4d2611184...",   // hash of the exact signed bytes (req. 3)
    "version_signed": 2
  },
  "signer": {
    "name": "Jordan Rivera",
    "email": "jordan@example.com",
    "identity_method": "email_otp",                       // how identity was verified (req. 5)
    "authenticated_at": "2026-07-23T14:01:40Z"
  },
  "intent": {                                             // deliberate signing action (req. 1)
    "action": "click_sign_button",
    "signed_at": "2026-07-23T14:02:11Z"
  },
  "consent": {                                            // e-records consent + disclosure (req. 2)
    "granted": true,
    "disclosure_version": "esign-consent-v3",
    "disclosure_sha256": "5f0c1e...",
    "granted_at": "2026-07-23T14:01:58Z"
  },
  "attribution": {                                        // who/where/when (req. 5)
    "ip": "203.0.113.7",
    "user_agent": "Mozilla/5.0 ...",
    "viewed_at": "2026-07-23T14:00:12Z"
  },
  "retention": {                                          // reproducible, sealed record (req. 4)
    "sealed_pdf": "s3://vault/env_9f2c1a/sealed.pdf",
    "seal": "PAdES-PKCS7",
    "retain_until": "2033-07-23"
  }
}

Bind this record to the sealed PDF (embed it, or store it under the same document hash). That single object answers the questions a dispute actually asks: was it the right document, did they mean to sign, did they consent, and can you prove who and when?

What ESIGN does not cover

ESIGN carves out categories where electronic signatures may not be sufficient. Don’t use a generic e-sign flow for:

  • Wills, codicils, and testamentary trusts.
  • Certain family-law matters (e.g. adoption, divorce).
  • Specific court documents and official court orders/notices.
  • Some statutorily required notices — utility shut-off, insurance cancellation, foreclosure, eviction, product recalls, and the like — where the law may require paper.

These exceptions live in the statute (§7003). When your product touches one, route it to the appropriate legal process rather than assuming e-sign applies.

When US law isn’t enough: eIDAS, AES, and QES

ESIGN/UETA govern the United States. If your signers are in the EU/EEA, the relevant framework is eIDAS, which tiers signatures as SES (simple), AES (advanced — uniquely linked to and under the sole control of the signer), and QES (qualified — AES backed by a qualified certificate from a Qualified Trust Service Provider, with legal effect equivalent to a handwritten signature EU-wide).

You cannot self-issue a QES. If a transaction demands qualified or advanced signatures, integrate a QTSP — a US-law self-hosted flow, however well built, does not produce them. For most US commercial and consumer agreements, though, a sound ESIGN/UETA implementation is exactly right.

The developer checklist

  • ☐ Deliberate signing action captured with a timestamp (intent).
  • ☐ Affirmative, unchecked-by-default consent gate; store the disclosure text + version.
  • ☐ Paper-copy right, withdrawal method, and system requirements disclosed.
  • ☐ SHA-256 (or stronger) hash of the exact signed bytes stored with the signature.
  • ☐ Signer identity signal recorded (authenticated email/OTP, SSO, etc.).
  • ☐ IP, user agent, and view/consent/sign timestamps in an audit record.
  • ☐ Signed artifact sealed (PAdES/PKCS#7) and retained per your retention policy.
  • ☐ Excluded document types (§7003) routed away from generic e-sign.
  • ☐ EU signers → evaluate whether AES/QES via a QTSP is required.

A worked example. Lifted Sign implements this checklist as a self-hostable server: an explicit ESIGN/UETA consent gate, a document hash bound to each signature, and a PAdES/PKCS#7-sealed Certificate of Completion capturing identities, timestamps, IPs, and consent. It’s one open example among several — Documenso, DocuSeal, and OpenSign also emit completion certificates — so you can read exactly how a compliant flow is built rather than trust a black box.

Methodology & sources

How we compiled this

Every license, star count, and language below was read from the GitHub REST API on July 23, 2026; pricing and carrier figures come from each vendor’s own pages on the same date. Open-source status means source published under an OSI/FSF-recognized license you can self-host and inspect. Figures change — check the primary source before you rely on a number, and tell us if anything here is out of date.

  1. ESIGN Act — 15 U.S.C. §7001 (general validity, consumer consent & disclosures, retention) and §7003 (exceptions): law.cornell.edu/uscode/text/15/7001, §7003.
  2. UETA (Uniform Electronic Transactions Act, 1999) — Uniform Law Commission; §9 (attribution) referenced.
  3. Worked example — Lifted Sign consent gate + Certificate of Completion: github.com/LiftedHoldings/lifted-sign; read 2026-07-23.
  4. eIDAS Regulation (EU) No 910/2014 — SES/AES/QES tiers and Qualified Trust Service Providers.
FAQ

Common questions

What is the difference between ESIGN and UETA?
ESIGN is the federal Electronic Signatures in Global and National Commerce Act (15 U.S.C. §7001, 2000), which makes electronic signatures and records legally effective across US interstate commerce. UETA is the near-identical model state law (1999) adopted by 49 states. Where a state has adopted UETA it generally governs, with ESIGN as the federal backstop. Both require the same core evidence: intent, consent, association, and retention.
What does an e-signature need to be legally binding in the US?
Five things, per ESIGN and UETA: a deliberate signing action showing intent; affirmative consent to do business electronically (with paper-copy, withdrawal, and system-requirement disclosures for consumers); the signature associated with the exact document (a hash); a retained, accurately reproducible record; and an attribution/audit trail of who signed, when, and from where. The technology is up to you; the evidence is not.
What documents cannot be signed electronically under ESIGN?
ESIGN §7003 excludes wills, codicils, and testamentary trusts; certain family-law matters like adoption and divorce; specific court documents; and some statutorily required notices such as utility shut-off, insurance cancellation, foreclosure, eviction, and product recalls. For those, route to the appropriate legal process rather than a generic e-sign flow.
Do I need eIDAS QES for US signers?
No. eIDAS and its qualified (QES) and advanced (AES) signature tiers apply to the EU/EEA. For US signers, a sound ESIGN/UETA implementation is what you need. If your signers are in the EU and the transaction requires advanced or qualified signatures, you must integrate a Qualified Trust Service Provider; you cannot self-issue a QES.
How do I prove which document was signed?
Hash the exact bytes of the final document (e.g. SHA-256) and store that hash with the signature event, then seal the signed PDF with a PAdES/PKCS#7 signature so any later alteration breaks the seal visibly. Keeping the document hash in the audit record satisfies the ESIGN/UETA association requirement and lets you demonstrate the signed bytes were not changed.
Open source, honestly

See the checklist implemented in open code.

Lifted Sign is a self-hostable, AGPL-3.0 worked example of an ESIGN/UETA flow — consent gate, document hash, and a PAdES-sealed Certificate of Completion. Read it, self-host it, or run the managed cloud.