> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didx.co.za/llms.txt
> Use this file to discover all available pages before exploring further.

# Update the holder's credential selection on a pending presentation.

> Updates the holder's selection. Partial overrides are allowed — queries not present in the request keep their currently-persisted choice. The selection is validated against the current available credentials; an invalid choice returns 400. Approving the presentation (via PATCH `/v3/presentations/{id}`) will share whatever is in the persisted selection at that point.



## OpenAPI

````yaml products/didx-me/api-reference/v1/me-wallet.json patch /v3/presentations/{id}/picker
openapi: 3.0.0
info:
  version: 1.0.0
  title: Me Wallet API
  description: >2-

          
    OpenAPI documentation for Me Wallet API

          
    Following JSON:API spec https://jsonapi.org/format/ approach to response
    payload format.


    **v1 endpoints are deprecated.** See the [Migration Guide (v1 to
    v2)](migration-guide) for details.

          
     - [JSON - OpenAPI Specification](/me-wallet/api/openapi.json)
servers:
  - url: https://test.didxtech.com/me-wallet/api
security:
  - bearerAuth: []
tags:
  - name: users
    description: User info
  - name: tenants
    description: Tenant management
  - name: credentials
    description: User credential management
  - name: presentations
    description: Presentation management
  - name: org-credentials
    description: Organization endpoints — credential issuance
  - name: org-presentations
    description: Organization endpoints — presentation requests
paths:
  /v3/presentations/{id}/picker:
    patch:
      tags:
        - presentations
      summary: Update the holder's credential selection on a pending presentation.
      description: >-
        Updates the holder's selection. Partial overrides are allowed — queries
        not present in the request keep their currently-persisted choice. The
        selection is validated against the current available credentials; an
        invalid choice returns 400. Approving the presentation (via PATCH
        `/v3/presentations/{id}`) will share whatever is in the persisted
        selection at that point.
      parameters:
        - schema:
            type: string
          required: true
          name: id
          in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PresentationPickerUpdateRequest'
      responses:
        '200':
          description: Updated picker view.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PresentationPickerApiResponse'
components:
  schemas:
    PresentationPickerUpdateRequest:
      type: object
      properties:
        selectedCredentials:
          $ref: '#/components/schemas/UserCredentialSelectionV3'
      required:
        - selectedCredentials
    PresentationPickerApiResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/PresentationPickerDto'
        links:
          $ref: '#/components/schemas/ApiLinks'
        meta:
          $ref: '#/components/schemas/ApiMeta'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
      required:
        - data
    UserCredentialSelectionV3:
      type: object
      additionalProperties:
        type: array
        items:
          type: string
          format: uuid
        maxItems: 1
      description: >-
        Per credential query, the wallet credential id to share (an array of at
        most one). Partial update: queries not present keep their
        currently-persisted choice; an empty array clears the holder's pick for
        that query, reverting it to the auto-selected default. Ids are validated
        against the current `availableCredentials` — an id that is not available
        for its query is rejected with 400.
      example:
        pid_query:
          - 123e4567-e89b-12d3-a456-426614174000
    PresentationPickerDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Identifier of the presentation this picker view belongs to.
          example: 123e4567-e89b-12d3-a456-426614174000
        requirements:
          $ref: '#/components/schemas/RequirementsDto'
        availableCredentials:
          $ref: '#/components/schemas/CredentialChoicesByQueryV3'
        selectedCredentials:
          allOf:
            - $ref: '#/components/schemas/CredentialChoicesByQueryV3'
            - description: >-
                Per verifier-defined credential query, the credentials the
                holder has chosen to share — same shape as
                `availableCredentials` (a subset of it). Always present; `{}`
                when nothing is selected. Seeded with a sensible default when
                the presentation is created; mutable via `PATCH .../picker`
                while pending. These credentials are what gets shared when the
                holder approves. Once approved/rejected this is a frozen
                snapshot taken at decision time — values stay readable even if
                the credential is later deleted. For a flat list of what will be
                shared, flatten this object:
                `Object.values(selectedCredentials).flat()`.
      required:
        - id
        - selectedCredentials
      description: >-
        The picker view of a presentation: the verifier's ask (`requirements`),
        the wallet's matching credentials (`availableCredentials`), and the
        holder's choice (`selectedCredentials`) — all keyed by the same query
        id, with the disclosed attribute values resolved inline. Live while
        pending; a frozen snapshot once approved/rejected.
    ApiLinks:
      type: object
      properties:
        self:
          type: string
          format: uri
        first:
          type: string
          format: uri
        last:
          type: string
          format: uri
        prev:
          type: string
          format: uri
        next:
          type: string
          format: uri
        related:
          type: string
          format: uri
    ApiMeta:
      type: object
      additionalProperties:
        nullable: true
    ApiError:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
        code:
          type: string
        title:
          type: string
        detail:
          type: string
        source:
          type: object
          properties:
            pointer:
              type: string
            parameter:
              type: string
        meta:
          type: object
          additionalProperties:
            nullable: true
      required:
        - detail
    RequirementsDto:
      type: object
      properties:
        credentials:
          type: array
          items:
            $ref: '#/components/schemas/RequirementCredentialDto'
          description: >-
            The credential requirements being asked for. Each entry describes
            one credential the verifier wants to receive, including its accepted
            formats/types and which attributes must be disclosed.
        credentialSets:
          type: array
          items:
            $ref: '#/components/schemas/CredentialSetDto'
          description: >-
            Optional combinators expressing alternatives across `credentials`.
            For example: 'satisfy either (passport) OR (driving licence AND ID
            card)'. When omitted, every entry in `credentials` must be
            satisfied.
      required:
        - credentials
      description: >-
        What the verifier is asking for: per-credential queries (accepted
        formats, requested claims) and any 'either/or' combinators across them.
        `requirements.credentials[].id` matches the query id keys used in
        `availableCredentials` and `selectedCredentials`, so you can correlate
        the ask with the wallet's matching credentials and the holder's chosen
        ones. Present for every presentation created via v3 (v3 accepts only
        DCQL requests).
    CredentialChoicesByQueryV3:
      type: object
      additionalProperties:
        type: array
        items:
          $ref: '#/components/schemas/CredentialChoiceV3Dto'
      description: >-
        For each verifier-defined credential query, the credentials in the
        holder's wallet that can satisfy it, each with the attributes (name +
        value) it would disclose — resolved server-side, so the client never
        needs to fetch and decode the credential. The set already reflects any
        access scope restrictions applied to the caller. Present (possibly `{}`)
        on pending presentations; omitted on approved/rejected, where a live
        wallet match is no longer meaningful.
    RequirementCredentialDto:
      oneOf:
        - $ref: '#/components/schemas/SdJwtVcRequirementDto'
        - $ref: '#/components/schemas/SdJwtVcLegacyRequirementDto'
        - $ref: '#/components/schemas/MdocRequirementDto'
        - $ref: '#/components/schemas/W3cVcJsonRequirementDto'
        - $ref: '#/components/schemas/W3cLdpVcRequirementDto'
      discriminator:
        propertyName: format
        mapping:
          dc+sd-jwt:
            $ref: '#/components/schemas/SdJwtVcRequirementDto'
          vc+sd-jwt:
            $ref: '#/components/schemas/SdJwtVcLegacyRequirementDto'
          mso_mdoc:
            $ref: '#/components/schemas/MdocRequirementDto'
          jwt_vc_json:
            $ref: '#/components/schemas/W3cVcJsonRequirementDto'
          ldp_vc:
            $ref: '#/components/schemas/W3cLdpVcRequirementDto'
    CredentialSetDto:
      type: object
      properties:
        options:
          type: array
          items:
            type: array
            items:
              type: string
          description: >-
            Alternative ways to satisfy this set, in the verifier's order of
            preference. Each inner array is a list of
            `requirements.credentials[].id`s that together fulfil it; any one
            inner array fulfils the whole set. The wallet currently auto-selects
            the first option it can satisfy — letting the holder choose an
            option explicitly is not supported yet.
        required:
          type: boolean
          description: Whether this set must be satisfied. Defaults to true if omitted.
        purpose:
          anyOf:
            - type: string
            - type: object
              additionalProperties:
                nullable: true
          description: >-
            Verifier-supplied label describing why this set is requested
            (free-form; useful for the disclosure prompt).
      required:
        - options
    CredentialChoiceV3Dto:
      type: object
      properties:
        credentialId:
          type: string
          format: uuid
          description: Identifier of a credential in the holder's wallet.
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/DisclosedAttributeV3Dto'
          description: >-
            The attributes this credential would disclose for its query, with
            their resolved values.
      required:
        - credentialId
        - attributes
    SdJwtVcRequirementDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier for this credential requirement (the "query id"). The
            same id keys `availableCredentials` and `selectedCredentials`,
            correlating the ask with the credentials that can answer it and the
            ones that will be shared.
        requireCryptographicHolderBinding:
          type: boolean
          description: >-
            Whether the credential must prove holder binding (key bound to the
            holder).
        claimSets:
          type: array
          items:
            type: array
            items:
              type: string
          description: >-
            Alternative attribute subsets that satisfy this credential
            requirement, in the verifier's order of preference. Each inner array
            lists `claims[].id`s that together satisfy it. If omitted, every
            entry in `claims` must be disclosed.
        format:
          type: string
          enum:
            - dc+sd-jwt
        meta:
          $ref: '#/components/schemas/SdJwtVcMetaDto'
        claims:
          type: array
          items:
            $ref: '#/components/schemas/PathClaimQueryDto'
      required:
        - id
        - format
        - meta
        - claims
    SdJwtVcLegacyRequirementDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier for this credential requirement (the "query id"). The
            same id keys `availableCredentials` and `selectedCredentials`,
            correlating the ask with the credentials that can answer it and the
            ones that will be shared.
        requireCryptographicHolderBinding:
          type: boolean
          description: >-
            Whether the credential must prove holder binding (key bound to the
            holder).
        claimSets:
          type: array
          items:
            type: array
            items:
              type: string
          description: >-
            Alternative attribute subsets that satisfy this credential
            requirement, in the verifier's order of preference. Each inner array
            lists `claims[].id`s that together satisfy it. If omitted, every
            entry in `claims` must be disclosed.
        format:
          type: string
          enum:
            - vc+sd-jwt
        meta:
          $ref: '#/components/schemas/SdJwtVcMetaDto'
        claims:
          type: array
          items:
            $ref: '#/components/schemas/PathClaimQueryDto'
      required:
        - id
        - format
        - meta
        - claims
    MdocRequirementDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier for this credential requirement (the "query id"). The
            same id keys `availableCredentials` and `selectedCredentials`,
            correlating the ask with the credentials that can answer it and the
            ones that will be shared.
        requireCryptographicHolderBinding:
          type: boolean
          description: >-
            Whether the credential must prove holder binding (key bound to the
            holder).
        claimSets:
          type: array
          items:
            type: array
            items:
              type: string
          description: >-
            Alternative attribute subsets that satisfy this credential
            requirement, in the verifier's order of preference. Each inner array
            lists `claims[].id`s that together satisfy it. If omitted, every
            entry in `claims` must be disclosed.
        format:
          type: string
          enum:
            - mso_mdoc
        meta:
          $ref: '#/components/schemas/MdocMetaDto'
        claims:
          type: array
          items:
            $ref: '#/components/schemas/MdocClaimQueryDto'
      required:
        - id
        - format
        - meta
        - claims
    W3cVcJsonRequirementDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier for this credential requirement (the "query id"). The
            same id keys `availableCredentials` and `selectedCredentials`,
            correlating the ask with the credentials that can answer it and the
            ones that will be shared.
        requireCryptographicHolderBinding:
          type: boolean
          description: >-
            Whether the credential must prove holder binding (key bound to the
            holder).
        claimSets:
          type: array
          items:
            type: array
            items:
              type: string
          description: >-
            Alternative attribute subsets that satisfy this credential
            requirement, in the verifier's order of preference. Each inner array
            lists `claims[].id`s that together satisfy it. If omitted, every
            entry in `claims` must be disclosed.
        format:
          type: string
          enum:
            - jwt_vc_json
        meta:
          $ref: '#/components/schemas/W3cVcMetaDto'
        claims:
          type: array
          items:
            $ref: '#/components/schemas/PathClaimQueryDto'
      required:
        - id
        - format
        - meta
        - claims
    W3cLdpVcRequirementDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier for this credential requirement (the "query id"). The
            same id keys `availableCredentials` and `selectedCredentials`,
            correlating the ask with the credentials that can answer it and the
            ones that will be shared.
        requireCryptographicHolderBinding:
          type: boolean
          description: >-
            Whether the credential must prove holder binding (key bound to the
            holder).
        claimSets:
          type: array
          items:
            type: array
            items:
              type: string
          description: >-
            Alternative attribute subsets that satisfy this credential
            requirement, in the verifier's order of preference. Each inner array
            lists `claims[].id`s that together satisfy it. If omitted, every
            entry in `claims` must be disclosed.
        format:
          type: string
          enum:
            - ldp_vc
        meta:
          $ref: '#/components/schemas/W3cVcMetaDto'
        claims:
          type: array
          items:
            $ref: '#/components/schemas/PathClaimQueryDto'
      required:
        - id
        - format
        - meta
        - claims
    DisclosedAttributeV3Dto:
      type: object
      properties:
        name:
          type: string
          description: >-
            The attribute's name. A top-level attribute is just its name (e.g.
            "age"). A nested attribute joins the first path segment to the
            dot-joined rest with "::" (e.g. "person::idNumber",
            "person::address.street"). For mdoc credentials this is the
            namespace and element joined with "::" (e.g.
            "org.iso.18013.5.1::given_name").
        value:
          nullable: true
          description: >-
            The attribute's value (any JSON value) as it would be — or was —
            disclosed to the verifier. Resolved live from the credential while
            the presentation is pending; frozen at approval, so the record stays
            readable even after the credential is deleted.
      required:
        - name
    SdJwtVcMetaDto:
      type: object
      properties:
        vctValues:
          type: array
          items:
            type: string
          description: >-
            Accepted Verifiable Credential Type values. The credential must
            declare one of these `vct`s.
      required:
        - vctValues
    PathClaimQueryDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier for this attribute requirement. Only meaningful when
            `claimSets` references it.
        path:
          type: array
          items:
            anyOf:
              - type: string
              - type: number
              - nullable: true
          description: >-
            Path to the requested attribute within the credential. Strings
            traverse object keys, numbers traverse array indices, null matches
            any array element. Example: ["address","street"] requests
            address.street; ["nationalities",null] matches any element in the
            nationalities array.
        values:
          type: array
          items:
            anyOf:
              - type: string
              - type: number
              - type: boolean
          description: >-
            If present, the attribute's value must equal one of these. Use to
            express constraints like 'country must be NL or DE'.
      required:
        - path
    MdocMetaDto:
      type: object
      properties:
        doctypeValue:
          type: string
          description: Accepted mdoc doctype, e.g. "org.iso.18013.5.1.mDL".
      required:
        - doctypeValue
    MdocClaimQueryDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier for this attribute requirement. Only meaningful when
            `claimSets` references it.
        namespace:
          type: string
          description: mdoc namespace the attribute belongs to, e.g. "org.iso.18013.5.1".
        claimName:
          type: string
          description: Attribute name within the namespace, e.g. "given_name".
        values:
          type: array
          items:
            anyOf:
              - type: string
              - type: number
              - type: boolean
          description: If present, the attribute's value must equal one of these.
        intentToRetain:
          type: boolean
          description: >-
            Whether the verifier intends to store the attribute after the
            presentation.
      required:
        - namespace
        - claimName
    W3cVcMetaDto:
      type: object
      properties:
        typeValues:
          type: array
          items:
            type: array
            items:
              type: string
          description: >-
            Accepted credential types. Each inner array is a complete type set
            the credential must satisfy; outer entries are alternatives.
      required:
        - typeValues
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````