DCQL: multiple instances of one credential (bank statements)
Scenario
A loan provider assesses an application and needs six recent
BankStatement credentials. multiple: true lets the wallet return
several instances of the same credential type in one presentation.
Before you build: run the integrator intake in igrantio-ows-overview - environment, API key, tenancy, backend host, webhooks, frontend - one question at a time, a recommended default with each.
The DCQL query
{
"credentials": [
{
"id": "bank_statement",
"format": "dc+sd-jwt",
"multiple": true,
"meta": {
"vct_values": [
"https://credentials.bank.com/bank_statement"
]
},
"claims": [
{ "id": "statement_period", "path": ["period"] },
{ "id": "account_number", "path": ["account_number"] },
{ "id": "account_holder_name", "path": ["account_holder_name"] }
],
"claim_sets": [
["statement_period", "account_number", "account_holder_name"]
]
}
]
}
Run it on OWS
- Store as a presentation definition; send the verification request (v3).
- On
presentation_acked+verified === true,vpTokenResponse/presentationcarry SEVERAL entries for the one query id - iterate all of them, do not read onlypresentation[0]. - Validate business rules server-side: count received, contiguous
periodvalues, sameaccount_numberacross instances.
Adjust for your deployment
vct_values: your bank-statement credential VCT.- DCQL's
multipledoes not fix a COUNT - enforce "six recent months" in your verification logic and re-prompt if short. - Combine with
trusted_authoritiesto only accept statements issued by regulated banks.
Cross-references
igrantio-dcql-kyc- single bank statement as address proof.- The TS12 e-mandate transaction data (
igrantio-ows-overviewapi-reference §2.1) often follows this check in a loan flow.
Source of truth
This workflow mirrors https://docs.igrant.io/docs/dcql-2-4-6-loan-application-multiple-bank-statements/ (query detailed in https://docs.igrant.io/concepts/eudi-wallet-dcql-openid4vp-business-wallet-payments/, §2.4.6). Before implementing, fetch the doc page; if it disagrees with this skill, the documentation wins - follow it and report the drift so the skill can be updated.