URL Schemes
Reference for verification URL schemes and client_id schemes
Verification requests use different URL schemes depending on the protocol version, profile, and use case. This page explains when to use each one and how they differ.
URL schemes
openid4vp://
The standard OID4VP v1.0 scheme using DCQL queries.
openid4vp://?request_uri=https://api.verifiables.com/verifier/authorization/request.jwt/550e8400-e29b-41d4-a716-446655440000| Property | Value |
|---|---|
| Protocol | OID4VP v1.0 |
| Query format | DCQL |
| Request delivery | request_uri (JAR) |
| Response encryption | JARM (JWE) |
| Credential formats | mso_mdoc, dc+sd-jwt, vc+sd-jwt |
Requests use this scheme when you set haip: false (or scheme: "openid4vp") with version: "v1". By default, v1 requests use the HAIP profile and the haip-vp:// scheme. France Identite wallets also accept openid4vp:// with HAIP payload conventions.
mdoc-openid4vp://
The legacy scheme from OID4VP Draft 18, using Presentation Exchange (PEX) queries.
mdoc-openid4vp://?request_uri=https://api.verifiables.com/verifier/authorization/request.jwt/550e8400-e29b-41d4-a716-446655440000| Property | Value |
|---|---|
| Protocol | OID4VP Draft 18 |
| Query format | Presentation Exchange (PEX) |
| Request delivery | request_uri (JAR) |
| Response encryption | JARM (JWE) |
| Credential formats | mso_mdoc only |
Use mdoc-openid4vp:// when you need compatibility with wallets that only support Draft 18, such as some early EUDI wallet implementations. Set version: "draft18" in the request body to use this scheme.
haip-vp://
The HAIP (High Assurance Interoperability Profile) scheme. Follows the OpenID4VP HAIP profile with stricter requirements.
haip-vp://?request_uri=https://api.verifiables.com/verifier/authorization/request.jwt/550e8400-e29b-41d4-a716-446655440000| Property | Value |
|---|---|
| Protocol | OID4VP HAIP profile |
| Query format | DCQL |
| Request delivery | request_uri (JAR) |
| Response encryption | JARM (JWE) |
| Client ID scheme | x509_hash |
HAIP mandates X.509 certificate-based client identification and specific algorithm choices. This is the default for version: "v1" requests (haip defaults to true).
eu-eaap://
The wallet invocation scheme ETSI TS 119 472-2 gives EUDI wallets. The request itself is whatever the other parameters produce (HAIP by default); only the scheme changes. The API never picks it on its own: pass scheme: "eu-eaap".
eu-eaap://?client_id=x509_hash%3A...&request_uri=https://api.verifiables.com/verifier/authorization/request.jwt/550e8400-e29b-41d4-a716-446655440000Wallets outside the EUDI ecosystem may not register this scheme, so keep haip-vp:// or openid4vp:// for general use.
av://
The Age Verification profile scheme. All parameters are inline in the URL.
av://?response_type=vp_token&client_id=redirect_uri%3Ahttps%3A%2F%2Fapi.verifiables.com%2Fverifier%2Fauthorization%2Fresponse%2F<id>&redirect_uri=https%3A%2F%2Fapi.verifiables.com%2Fverifier%2Fauthorization%2Fresponse%2F<id>&response_mode=direct_post&dcql_query=...| Property | Value |
|---|---|
| Protocol | AV profile |
| Query format | DCQL (inline) |
| Request delivery | Inline parameters (no JAR) |
| Response encryption | None |
| Client ID scheme | redirect_uri |
The simplest scheme. No request_uri indirection, no encrypted responses. Only used when you explicitly pass scheme: "av" in the request body. See Age Verification for details.
When to use which
| Use case | Scheme | Request parameters |
|---|---|---|
| New integration (recommended) | haip-vp:// | version: "v1" (default) |
| Plain OID4VP v1 | openid4vp:// | version: "v1" with haip: false |
| Legacy wallet compatibility | mdoc-openid4vp:// | version: "draft18" |
| EUDI wallet invocation (ETSI TS 119 472-2) | eu-eaap:// | scheme: "eu-eaap" |
| Age check only | av:// | scheme: "av" |
If you are unsure, start with the defaults (version: "v1", HAIP). They have the widest support and the most flexible query language.
Client ID schemes
The client_id_scheme determines how the wallet identifies and authenticates the verifier. Different schemes provide different trust levels.
redirect_uri
The client_id is the redirect URI itself. No verifier authentication.
{
"client_id_scheme": "redirect_uri",
"client_id": "redirect_uri:https://api.verifiables.com/verifier/authorization/response/<id>",
"redirect_uri": "https://api.verifiables.com/verifier/authorization/response/<id>"
}| Aspect | Detail |
|---|---|
| Trust level | Low (no verifier identity verification) |
| Certificate required | No |
| Use case | AV profile, development, low-assurance flows |
x509_san_dns
The client_id is a DNS name that appears in the Subject Alternative Name of the verifier's X.509 certificate. The wallet verifies the certificate chain.
{
"client_id": "x509_san_dns:api.verifiables.com"
}| Aspect | Detail |
|---|---|
| Trust level | High (DNS name in verified certificate) |
| Certificate required | Yes (X.509 with SAN dNSName) |
| Use case | Production deployments, EUDI ecosystem |
x509_hash
The client_id is derived from the hash of the verifier's X.509 certificate. Used by the HAIP profile.
{
"client_id": "x509_hash:Uvo3HtuIxuhwKLj1S0YAKGFf6TnKuvcS7dn8X4qoTs0"
}| Aspect | Detail |
|---|---|
| Trust level | High (certificate pinning by hash) |
| Certificate required | Yes (X.509) |
| Use case | HAIP profile, high-assurance verification |
Scheme selection in the API
You can set the scheme explicitly with the scheme request parameter (openid4vp, mdoc-openid4vp, haip-vp, eu-eaap, or av). If you omit it, the API selects a scheme from the other request parameters:
| Request parameters | Resulting scheme |
|---|---|
version: "v1" (default, HAIP enabled) | haip-vp:// |
version: "v1" with haip: false | openid4vp:// |
version: "draft18" | mdoc-openid4vp:// |
scheme: "av" | av:// (this is the only way to get an AV request; there is no auto-detection) |
The scheme is reflected in the url field of the response.