Verify a credential
One call turns a verification profile into a wallet launch URI. The wallet returns a presentation, LutraID validates it, and you read the result back by ID.
Initiate a verification
Editions: SaaS · Self-hosted · Public
curl "$LUTRAID_API/v1/organizations/$ORG/verifiers/$VERIFIER/initiate-verification" \
-H "X-API-Key: $LUTRAID_KEY" \
-H "Content-Type: application/json" \
-d '{
"verificationProfileId": "b21c…",
"metadata": { "redirectUri": "https://your-app.example/verify/done" }
}'
{
"verificationUri": "openid4vp://?client_id=x509_san_dns%3A…&request_uri=https%3A%2F%2F…",
"verificationId": "0f7a…"
}
- Name
verificationProfileId- Type
- uuid
- Description
Required. Carries the DCQL query and the assurance policy.
- Name
metadata.redirectUri- Type
- uri
- Description
Required —
redirect_uriis accepted as an alias. Omitting both returns400. Theresponse_codeis appended as a URL fragment when the wallet returns the holder.
- Name
requestUriMethod- Type
- string
- Description
get(default) orpost.
- Name
launchScheme- Type
- string
- Description
openid4vporhaip-vp. Omit to use the profile default. SaaS and self-hosted only.
A request expires after 15 minutes, or 60 minutes when delivered by email.
Read the result
Editions: SaaS · Self-hosted · Public
curl "$LUTRAID_API/v1/organizations/$ORG/verifiers/$VERIFIER/verifications/$VERIFICATION" \
-H "X-API-Key: $LUTRAID_KEY"
status is initiated, success, failure or expired. On success the disclosed claims are in rawPresentation; on failure read failureReason. Poll until status leaves initiated or expiresAt passes.
What the request object contains
| Query language | DCQL only — presentation_definition is not implemented |
| Request delivery | always by reference (request_uri), signed as an RFC 9101 JWT |
client_id prefixes | x509_san_dns: and x509_hash: |
response_mode | direct_post and direct_post.jwt |
response_type | vp_token |
Transaction data (QES-style binding) is not supported.