OID4VP

Hand off an x401 Verifiable Credential Presentation request

Accepts an x401 payload (https://x401.proof.com/spec/latest/#x401-payload) that wraps a Digital Credentials API request (https://www.w3.org/TR/digital-credentials/#DC-API) using the openid4vp-v1-signed protocol, and processes it as an OID4VP presentation request for the End-User identified by the login_hint claim of the signed request object. When the request carries a Proof access token issued to an End-User in the Authorization: Bearer header, that End-User is used instead of login_hint, and an invalid token is rejected with invalid_token.

The real OID4VP request is carried inside the signed request object at credential_requirements.digital.requests[0].data.request: a compact JWS with typ header oauth-authz-req+jwt, signed with ES256 by a key whose JWK is registered on your OAuth Application. Your client_id is conveyed by the request object's iss/client_id claims. Its response_mode must be dc_api. It must carry an exp claim at most one hour ahead and a unique jti claim; a request object is accepted once.

On success Proof returns a request_uri suitable for presenting to the End-User via their AI agent. Supply a top-level return_uri to use the x401 intermediary return channel (https://x401.proof.com/spec/latest/#return-channel); its origin must appear in the request object's expected_origins.

AI agents that cannot receive the presentation themselves omit return_uri and send an access token with the agentic scope. This requires the request object's expected_origins to be the agents trust list. Proof then also returns a result_polling_uri the agent polls with the same access token.

post/verifiable-credentials/v1/x401-handoff

Request

  • Base URL
    https://api.proof.com
  • URL
    https://api.proof.com/verifiable-credentials/v1/x401-handoff
  • Auth
    none declared

Headers

Authorizationstring

Optional Bearer access token issued by Proof to the End-User, with the mcp.read or agentic scope. When present, the transaction is created for that End-User instead of login_hint. Required, with the agentic scope, to receive a result_polling_uri.

Request body

return_uristring

Optional. Enables the x401 intermediary return channel (https://x401.proof.com/spec/latest/#return-channel). When present, Proof POSTs the Verifiable Credential Presentation to this URI instead of the request object's response_uri. Its origin must be listed in the request object's expected_origins, and the request object must not itself specify a response_uri. Omit it when the request object's expected_origins is the agents trust list: Proof then keeps the result for the calling agent to poll at result_polling_uri.

Example request

{
  "credential_requirements": {
    "digital": {
      "requests": [
        {
          "protocol": "openid4vp-v1-signed",
          "data": {
            "request": "eyJ0eXAiOiJvYXV0aC1hdXRoei1yZXErand0Iiwia2lkIjoiMTdhcnpDWk9XR1Q0ZXZGSWNCRVQ0cHJZMld5X0NlM192b1NfaHdtWHNuYyIsImFsZyI6IkVTMjU2In0.eyJpc3MiOiJjYWdua3JhZGoiLCJhdWQiOiJodHRwczovL2FwaS5sb2NhbC5kZXYtbm90YXJpemUuY29tL3ZlcmlmaWFibGUtY3JlZGVudGlhbHMvdjEvcHJlc2VudGF0aW9uIiwiY2xpZW50X2lkIjoiY2FnbmtyYWRqIiwicmVzcG9uc2VfdHlwZSI6InZwX3Rva2VuIiwicmVzcG9uc2VfbW9kZSI6ImRjX2FwaSIsInNjb3BlIjoidXJuOnByb29mOnBhcmFtczpzY29wZTp2ZXJpZmlhYmxlLWNyZWRlbnRpYWxzOmJhc2ljIiwibG9naW5faGludCI6ImphbmUuZG9lQHByb29mLmNvbSIsIm5vbmNlIjoiMjM3ZjFhMmEtOGZhZC00NmE3LWFjYWUtYmJjM2ZkMDQ5NDk5IiwiZXhwZWN0ZWRfb3JpZ2lucyI6WyJodHRwczovL2FnZW50LmV4YW1wbGUiXSwiZXhwIjoxNzkzNTQ5NjY0LCJqdGkiOiJlZTA5OTE2OC04ZTg2LTQ4M2YtOTQyNC1iMTdjZmI3MzFlNjUifQ.pbnuzYNCBriTHdI5fvLVlSqksfYyYT7Jz67km_DzvZ4T91FuNodf6J1R-owHvza__qXA2S4AhifllkYoTOvI1w"
          }
        }
      ]
    }
  },
  "return_uri": "https://agent.example/return"
}

Response

Created

request_uristring

A link to the Proof-hosted flow where the End-User authorizes the Verifiable Credential Presentation.

result_polling_uristring

Only present when the request object's expected_origins is the agents trust list and return_uri is omitted. Poll this URI with the same agentic access token to retrieve the Verifiable Credential Presentation once the End-User completes the flow.

Changes

No recorded changes to this operation across all 1 revision of this API.