Skip to main content
Both integrations end at the same payload.

Overview

  • Who is the user? → returned under user.
  • Which connection verified them? → provenance._metadata.provider_id, connection_id, credential_id, and connection_instance_id within the same metadata block.
  • How was this identity verified? → described by provenance.
  • Did the user’s claimed values match the source? → returned under match for match connections.
This data model is served by OIDC /userinfo (subject to granted scopes and the OIDC claim whitelist) and by the REST Get Verification UserInfo endpoint. On both, provenance and missing_claims are returned only when the request asks for them with provenance=true and missing_claims=true.

Connection identity

Under provenance._metadata, every userinfo result requested with provenance=true names the connection that ran, using the same ids you see in the Console and in Get Connections: There is no amr claim in v2. The ID token carries provider_id and connection_id inside one hopae_verification claim. credential_id and connection_instance_id are only in the userinfo response’s provenance._metadata. All four identifiers are nested there in userinfo, never top-level.

Verification models

The top-level verification_model field tells you which payload shape to read: verification_model is always present and is decided by the connection you verify against. For match flows, user echoes back the verified subset of the values you submitted. Per-field providers: only fields with matched: true. Aggregate providers: every submitted field when the aggregate outcome is true, otherwise empty. A match connection may additionally expose disclosed (provider-asserted) claims. Those appear under user only when the workflow requests them, and a requested-but-unavailable claim is listed in missing_claims. For match connections, the values to compare are supplied at session creation in userInput. The keys are OIDC-normalized names (see Normalized User Data) and appear back in match.submitted_fields and as match.details keys. See User Input.

Which claims you receive

The claims under user are the ones the workflow requested: the claims on its Claims tab, plus any claims set for the connection that ran. Nothing in the request body changes this set. source_id, a stable identifier for the same person on the same connection, is opt-in in v2. Tick Source ID on the workflow’s Claims tab to receive it. When the connection cannot derive it for this person, source_id is listed in missing_claims. sub is not a stable user identifier: it is the verification id and changes on every verification.

What “Provenance” means

Provenance is the audit trail of the verification: what the source actually returned, and when.
  • Presentation
    • Credentials[]: one entry per credential the source presented, carrying the source’s own claims exactly as received (for match connections too) and, when the provider issues it, evidence.
    • Evidence (when present)
      • The original signed proof from the source (or a Hopae-signed equivalent when the provider issues none), so you can independently verify the result wasn’t altered in transit. Shape and keys vary by provider. See Evidence & Data Integrity.
  • Metadata
    • Catalog identity, verification identifiers, and timestamps for audit and support (verification_id, verified_at, status, and error when the session ended with an error).
Read provenance._metadata for the catalog provider, credential, connection, and activated instance IDs. These are snapshotted when the session starts. Resolve issuer details through the catalog and source evidence.

UserInfo payload structure

Here is a conceptual map of the payload. For detailed field specifications, refer to the Data Types pages.

Match payload example

A complete userinfo response from a match connection (id-nik-match, Indonesia NIK):
For match connections, provenance.presentation.credentials[].claims carries the source’s own response. This is the audit trail for what the source agreed with. It is not a duplicate of match.details. Note the intentional naming asymmetry: userInput, match.submitted_fields, and match.details use OIDC-normalized keys (e.g. name, birthdate), while provenance claims keep the source’s native keys (e.g. fullName, dateOfBirth) so the audit trail stays aligned with the source.
details may include keys that are not in submitted_fields when the upstream provider emits additional verifier results (e.g., a liveness signal alongside the demographic match outcome).

Next Steps

OIDC Provider

How OIDC fits into User Verification

Verification Flow

Understand the end-to-end lifecycle