DCQL: KYC (photo ID + address proof)
Scenario
KYC onboarding needs BOTH: a Photo ID (identity) AND a proof of address,
where either a Utility Bill or a Bank Statement satisfies the address
requirement. Two required credential_sets in one request.
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": "photo_id",
"format": "mso_mdoc",
"claims": [
{
"path": [
"family_name"
]
}
]
},
{
"id": "utility_bill",
"format": "dc+sd-jwt",
"claims": [
{
"path": [
"address"
]
}
]
},
{
"id": "bank_statement",
"format": "dc+sd-jwt",
"claims": [
{
"path": [
"address"
]
}
]
}
],
"credential_sets": [
{
"options": [
"photo_id"
],
"required": true
},
{
"options": [
[
"utility_bill"
],
[
"bank_statement"
]
],
"required": true
}
]
}
Run it on OWS
- Store as a presentation definition; keep the
presentationDefinitionId. - Send the verification request (v3); QR or DC API.
- On
presentation_acked+verified === true: the presentation carries TWO credentials - map each viapresentationSubmission, cross-check the name on the Photo ID against the address document holder.
Adjust for your deployment
- Add the identity claims KYC actually needs to
photo_id(given_name,birth_date,document_number, portrait) - the example discloses onlyfamily_name. - Add
meta(doctype_value/vct_values) pinned to your issuers' types, andtrusted_authoritiesfor regulated onboarding. - Extend the address group's
optionswith other accepted evidence (rental agreement, bank letter).
Cross-references
igrantio-dcql-student-pass- the same two-group pattern plus an OPTIONAL third group.igrantio-dcql-credential-sets- single-group alternatives.
Source of truth
This workflow mirrors https://docs.igrant.io/docs/dcql-2-4-4-kyc-request-photo-id-address-proof/ (query detailed in https://docs.igrant.io/concepts/eudi-wallet-dcql-openid4vp-business-wallet-payments/, §2.4.4). 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.