{"id":"ERC-5570","name":"Digital Receipt NFTs","status":"Final","chain":"both","category":{"id":"physical","name":"Physical & Real World","description":"Connecting NFTs to physical items"},"journeyStages":[{"id":"specialized","name":"Specialized Interactions","description":"Physical items, AI, social, gaming"}],"uxImpact":"Users receive NFT receipts for purchases containing a structured JSON schema for vendor info, line items, prices, tax, and serial numbers. The NFT ownership and metadata URI are on-chain references; receipt JSON may live off-chain and should expose its source and availability.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-5570","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"ERC-5570","sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-5570","type":"official-spec"}],"lastReviewed":"2026-09-18","specConstraints":[{"id":"receipt-root-fields","constraint":"A receipt document must provide name, description, image, and receipt fields at the root of the JSON schema.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [\"name\", \"description\", \"image\", \"receipt\"],","specSection":"Specification / Digital Receipt JSON Schema / Root Schema","specUrl":"https://ercs.ethereum.org/ERCS/erc-5570#root-schema","designImplication":"Design receipt previews and validation states around these root fields, while handling missing or malformed metadata explicitly rather than presenting an incomplete receipt as canonical."},{"id":"receipt-details-fields","constraint":"The receipt object must provide id, date, vendor, and items fields.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [\"id\", \"date\", \"vendor\", \"items\"],","specSection":"Specification / Digital Receipt JSON Schema / Root Schema","specUrl":"https://ercs.ethereum.org/ERCS/erc-5570#root-schema","designImplication":"Keep receipt identity, purchase date, vendor identity, and line items visible as distinct information groups; show a schema error when any required group is absent."},{"id":"vendor-identity-fields","constraint":"The vendor object must provide name and website fields.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [\"name\", \"website\"],","specSection":"Specification / Digital Receipt JSON Schema / Root Schema","specUrl":"https://ercs.ethereum.org/ERCS/erc-5570#root-schema","designImplication":"Show the vendor name and website as receipt identity context, and treat absent values as invalid metadata rather than filling them with an unverified issuer label."},{"id":"receipt-line-item-fields","constraint":"Each line item must provide id, title, date, amount, tax, and quantity fields.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [\"id\", \"title\", \"date\", \"amount\", \"tax\", \"quantity\"],","specSection":"Specification / Digital Receipt JSON Schema / Line Items Schema","specUrl":"https://ercs.ethereum.org/ERCS/erc-5570#line-items-schema","designImplication":"Give line items a stable identity and show date, amount, tax, and quantity as separate values so users can reconcile the receipt rather than relying on a single total."},{"id":"receipt-tax-fields","constraint":"A tax object must provide name, rate, and amount fields.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [\"name\", \"rate\", \"amount\"],","specSection":"Specification / Digital Receipt JSON Schema / Line Items Schema","specUrl":"https://ercs.ethereum.org/ERCS/erc-5570#line-items-schema","designImplication":"Label tax name, rate, and amount independently and do not infer a tax rate from a total when the structured tax fields are unavailable."},{"id":"erc721-compat","constraint":"The receipt standard extends ERC-721 and remains compatible with its Metadata and Enumerable optional extensions.","appliesTo":"application","normativity":"backwards-compatibility","specQuote":"This standard is an extension of ERC-721. It is compatible with both optional extensions, Metadata and Enumerable, mentioned in ERC-721.","specSection":"Backwards Compatibility","specUrl":"https://ercs.ethereum.org/ERCS/erc-5570#backwards-compatibility","designImplication":"Keep receipt presentation compatible with ordinary NFT metadata and enumeration flows, while treating the receipt schema as structured metadata rather than proof that every field is on-chain."},{"id":"receipt-pii","constraint":"Personally identifying information in a digital receipt should be encrypted so only authorized parties can read it.","appliesTo":"application","normativity":"security-considerations","specQuote":"To ensure the privacy of the customer, it is crucial to encrypt the PII contained within the digital receipt.","specSection":"Security Considerations","specUrl":"https://ercs.ethereum.org/ERCS/erc-5570#security-considerations","designImplication":"Redact or encrypt PII before publishing or rendering receipt metadata, show the privacy boundary to users, and do not imply that the ERC itself selects an encryption standard or provides issuer trust."}],"lastUpdated":"2026-09-18","summary":"Users receive NFT receipts for purchases containing a structured JSON schema for vendor info, line items, prices, tax, and serial numbers. The NFT ownership and metadata URI are on-chain references; receipt JSON may live off-chain and should expose its source and availability.","designerTakeaways":["You can render receipt NFTs as formatted documents with vendor logo and itemized rows.","Your export can offer PDF/CSV for accounting without exposing raw JSON.","You can show a cryptographic verification result when an optional signature, scheme, and trusted vendor key are available."],"applicability":{"whenToUse":["On-chain purchase proofs for commerce or B2B.","ERC-5570 receipt schema in metadata.","Users need print/export for expenses."],"whenToAvoid":["Generic NFT without receipt structure.","PII cannot be handled compliantly in the receipt metadata or linked storage.","No reliable metadata URI or storage path is available for the receipt JSON."]},"prototypeFirst":[{"screen":"Receipt document view","why":"Primary read mode is document not art.","covers":["Full receipt","Mobile narrow"],"include":["Vendor header","Line items","Tax total","Serial numbers"]},{"screen":"Print and export","why":"Expense reporting needs offline copy.","covers":["Print","PDF export"],"include":["Print stylesheet","Export PDF","Export CSV"]},{"screen":"Signature verification","why":"Trust tamper-evidence.","covers":["Valid","Invalid"],"include":["Verification status with scheme and trusted key context","Verify action","Issuer key info collapsed"]},{"screen":"PII encryption indicator","why":"Sensitive fields need trust cues.","covers":["Encrypted fields"],"include":["Lock icon on PII","Decrypt if authorized"]}],"mentalModel":[{"label":"Receipt NFT","description":"Proof of purchase, not primarily art."},{"label":"Line items","description":"Structured rows — qty, price, tax."},{"label":"Vendor block","description":"Seller identity and contact."},{"label":"Verification","description":"An optional signature can be checked under a known scheme and trusted vendor key; validity alone does not establish identity."},{"label":"Export","description":"Bridge to accounting tools off-chain."}],"statesToDesign":[{"state":"Standard receipt display","trigger":"Valid metadata.","userNeed":"Read like paper receipt.","designResponse":"Document layout default."},{"state":"Verified signature","trigger":"An optional signature validates under a known scheme and trusted vendor key.","userNeed":"Trust document.","designResponse":"Show cryptographic verification details and the configured trust root; use a Verified receipt label only when that context is established."},{"state":"Verification failed","trigger":"Tampered or bad sig.","userNeed":"Not trust blindly.","designResponse":"Verification failed warning."},{"state":"Encrypted PII","trigger":"Sensitive fields encrypted.","userNeed":"Know privacy protected.","designResponse":"Encrypted field indicators."},{"state":"Export in progress","trigger":"User exports PDF.","userNeed":"Get file.","designResponse":"Generating export spinner."}],"designDecisions":[{"question":"Receipt-like vs NFT-art layout?","recommendation":"Document default; art tab secondary if dual media.","rationale":"Use case is record-keeping."},{"question":"Accounting software integration?","recommendation":"CSV export first; direct integrations later.","rationale":"Export lowest common denominator."},{"question":"Mobile receipt view?","recommendation":"Single column stacked rows; sticky total.","rationale":"Receipts read on phone at returns desk."}],"problemsSolved":[{"problem":"No standard on-chain receipt format","oldWay":"Screenshot or email lost","newWay":"Structured parseable receipt NFT","impact":"high"},{"problem":"Expense report friction","oldWay":"Manual entry from tx hash","newWay":"Export PDF/CSV from receipt view","impact":"medium"},{"problem":"Fake receipt claims","oldWay":"Editable metadata","newWay":"Optional signature verification with its scheme and trusted vendor key shown","impact":"high"}],"uxPatterns":[{"name":"Receipt Document Renderer","description":"Formatted vendor line items and totals.","components":["VendorHeader","LineItemTable","TaxRow","TotalBar"],"userFlow":["Open receipt NFT","Read document","Print or export"]},{"name":"Receipt Verification Badge","description":"Optional signature verification on detail with scheme and trusted key context.","components":["VerifyButton","VerificationStatus"],"userFlow":["Tap Verify","Check the optional signature under its configured scheme","Show verified, failed, or unsupported with the trust context"]}],"antiPatterns":[{"pattern":"Receipt NFT as square art only","why":"Misses document utility","instead":"Document layout as default view","severity":"high"},{"pattern":"PII in plaintext on public explorer","why":"Privacy violation","instead":"Encryption indicators and redaction","severity":"critical"},{"pattern":"No export path","why":"Cannot use for accounting","instead":"Print and CSV export actions","severity":"medium"}],"vocabulary":[{"use":"Receipt","avoid":"Digital receipt NFT metadata","why":"Commerce term."},{"use":"Line items","avoid":"Structured calldata array","why":"Shopping language."},{"use":"Receipt signature verified under [scheme/key]","avoid":"Signature valid","why":"Trust badge language."}],"technicalNotes":"ERC-5570 defines a JSON receipt metadata schema used through the ERC-721 metadata URI; ownership and the URI are on-chain references, while the receipt JSON may be off-chain. The optional signature property has no standardized scheme, key registry, or trust root, so show its presence and verification context without treating cryptographic validity as universal issuer proof. Handle PII with encryption indicators and redaction.","relatedStandards":[{"id":"ERC-7578","relationship":"Physical asset backing on other RWAs"},{"id":"ERC-721","relationship":"Receipt as NFT metadata schema"}]},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-5570","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=ERC-5570","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5570","markdown":"https://www.eipsfordesigners.com/standards/ERC-5570/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5570/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5570","official":"https://ercs.ethereum.org/ERCS/erc-5570","discussion":"https://ethereum-magicians.org/search?q=ERC-5570"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}