eReceipt credential schema
When to use
Use this skill when you issue or ask for an eReceipt. The credential is a
digital purchase receipt: what the customer bought, from which seller, for which
amount, with which tax, by which payment means, and when the goods arrived. The
claim names follow the business document vocabulary of an electronic invoice, so
a receipt line is a purchase_receipt_line and a total is a monetary_total.
The registry publishes this schema in one format only: dc+sd-jwt (SD-JWT
VC). The metadata sets isSdJwt to true, and isJwt and isMsoMdoc to
false. There is no JWT form and no mdoc form of this schema in the registry.
This page describes registry version 2025.7.1, the latest version of the template.
Claim path pointer document - dc+sd-jwt
| Fact | Value |
|---|---|
| Title | eReceipt |
| Credential type | VerifiablevReceiptSDJWT |
| Namespace | eu.europa.ec.eudi.verifiablereceipt |
| Format | dc+sd-jwt |
| Supported version | version_01 |
{
"claims": [
{
"path": [
"address",
"city_name"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"address",
"country_identifier"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"address",
"postcode"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"address",
"street_name"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"delivery",
"actual_delivery_date"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"delivery",
"actual_delivery_time"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"item_property",
"item_property_name"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"item_property",
"value"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"monetary_total",
"line_extension_amount"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"monetary_total",
"payable_amount"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"monetary_total",
"tax_inclusive_amount"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"party_identification",
"id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"party_name",
"name"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"payment_means",
"card_account",
"account_number_id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"payment_means",
"card_account",
"network_id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"payment_means",
"payment_means_code"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"document_currency_code"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"issue_date"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"legal_monetary_total"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"payment",
"authorization_id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"payment",
"paid_amount"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"payment",
"transaction_id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"purchase_receipt_line",
"id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"purchase_receipt_line",
"item",
"commodity_classification",
"item_classification_code"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"purchase_receipt_line",
"quantity"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"purchase_receipt_line",
"tax_inclusive_line_extension_amount"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"seller_supplier_party",
"supplier_party_id"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"purchase_receipt",
"tax_included_indicator"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"tax_total",
"tax_amount"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"tax_total",
"tax_subtotal",
"percent"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"tax_total",
"tax_subtotal",
"tax_amount"
],
"limitDisclosure": true,
"mandatory": true
},
{
"path": [
"tax_total",
"tax_subtotal",
"tax_category",
"tax_scheme",
"name"
],
"limitDisclosure": true,
"mandatory": true
}
]
}
How to read the fields
Each item of the claims array is one claim path pointer.
pathis an array that selects one claim. Each element is a string for an object key, an integer for an array index, ornullfor every element of an array. This schema is deeply nested. The shortest path holds two elements, for example["address", "city_name"]. The longest path holds five elements:["purchase_receipt", "purchase_receipt_line", "item", "commodity_classification", "item_classification_code"]. Each element after the first goes one level deeper into the claim structure.mandatorysays if the claim must hold a value when you issue. The issuer reads a missingmandatoryastrue. Every claim of this schema is mandatory, so an issue request must fill all 33 claims. Remove the claims that you do not issue from your credential definition.limitDisclosuresays if the holder can disclose the claim on its own. Every claim sets it totrue, so the customer can show the total amount and keep the line items hidden.
The top-level groups are:
addressandparty_nameandparty_identification- the seller.purchase_receipt- the receipt itself: identifier, issue date, currency, totals, payment, and the receipt lines.monetary_totalandtax_total- the amounts and the tax.payment_means- how the customer paid, with the card account.delivery- when the goods arrived.item_property- a named property of a purchased item.
purchase_receipt_line names one line of the receipt. The schema gives the
pointer to one line. To cover every line of an array, use null in the path in
place of the index.
Use with the iGrant.io API
Create a credential definition with:
POST /v2/config/digital-wallet/openid/sdjwt/credential-definition
Put one entry in credentialDefinitions[] and copy the claims array of the
schema document into that entry.
- Set
versiontoversion_01at the top level of the request. - Set
credentialFormattodc+sd-jwt. - Set
vctto the credential typeVerifiablevReceiptSDJWT. The registry also gives the namespaceeu.europa.ec.eudi.verifiablereceipt. Some ecosystem profiles use that namespace as thevct. Send the value that your verifier expects, because the verifier matches on thevct. - Put the array in
claims.claims. - Set
validationPathto$.
{
"label": "Issue eReceipt",
"version": "version_01",
"credentialDefinitions": [
{
"credentialFormat": "dc+sd-jwt",
"vct": "VerifiablevReceiptSDJWT",
"validationPath": "$",
"claims": {
"claims": [
{
"path": ["purchase_receipt", "id"],
"mandatory": true,
"limitDisclosure": true
},
{
"path": ["monetary_total", "payable_amount"],
"mandatory": true,
"limitDisclosure": true
}
]
}
}
]
}
The example shows two claims. Send the full array when you want the full schema.
When you issue, send vct plus claims in the credential object, and build the
claim values as a nested object that matches the paths.
Read igrantio-api-issuer for the full operation reference: every request
field, the display options, revocation, and the issue operation that fills these
claims.
Source is the registry
This skill mirrors the claim path pointer template in the iGrant.io verifiable data registry. If this skill and the registry file disagree, the registry wins. Fetch the source before you rely on a claim path:
- Template: https://github.com/decentralised-dataexchange/verifiable-data-registry/tree/main/credentialSchemas/claimPathPointer/eReceipt
- Raw schema: https://raw.githubusercontent.com/decentralised-dataexchange/verifiable-data-registry/main/credentialSchemas/claimPathPointer/eReceipt/2025.7.1/dc%2Bsd-jwt.schema.json
- Raw metadata: https://raw.githubusercontent.com/decentralised-dataexchange/verifiable-data-registry/main/credentialSchemas/claimPathPointer/eReceipt/2025.7.1/dc%2Bsd-jwt.schema.metadata.json
A newer version directory can appear in the registry. Check the directory listing for a version above 2025.7.1 and use the newest one.