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

# Enviar una resposta de cartera de credencials digitals

> Envia la resposta de credencials de la cartera de la Digital Credentials API, com Google Wallet, i deixa que Didit decideixi la verificació.

Utilitza aquesta operació per a una cartera la resposta d'inici de la qual conté `next_action.type = request_digital_credential`, com ara Google Wallet.
Autentica't amb la clau d'API de l'aplicació que ha iniciat la verificació, des del teu backend.

Envia exactament el que ha retornat la cartera: `{protocol, data}` de `navigator.credentials.get` al navegador, o el `credentialJson` analitzat d'Android Credential Manager.
La resposta està xifrada per a Didit, així que no l'alteris.
Didit comprova la signatura de l'emissor contra les seves arrels de confiança dels emissors, cada valor retornat amb el seu resum signat, i la signatura del dispositiu sobre el teu `origin` i aquesta sol·licitud, i després decideix la verificació.

Una resposta es pot enviar una única vegada.
Un segon enviament retorna la verificació que ja s'havia decidit.
Una verificació que no requereix una resposta de cartera respon amb `409` i `error: "not_a_digital_credentials_wallet"`.

Consulta [APIs de cartera d'ID digital](https://docs.didit.me/ca/standalone-apis/digital-id-wallets.md#carteres-de-digital-credentials-google-wallet) per a la seqüència completa, incloent-hi els fragments per al navegador i per a Android.


## OpenAPI

````yaml ca/openapi-25.json POST /v3/id-verification/wallets/verifications/{request_id}/response/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificació d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/id-verification/wallets/verifications/{request_id}/response/:
    post:
      tags:
        - Digital ID wallets
      summary: Envia una resposta de cartera
      description: >-
        Carteres de la Digital Credentials API (Google Wallet): envia el que la
        cartera ha retornat a la teva pàgina o aplicació per a una verificació
        on next_action sigui request_digital_credential. Didit ho desxifra,
        comprova la signatura de l'emissor contra les arrels d'emissors de
        confiança, cada valor retornat contra el seu resum signat, i la
        signatura del dispositiu sobre el teu origen i aquesta sol·licitud, i
        després decideix la verificació: verificada (facturada una vegada) o
        rebutjada amb el codi d'error. D'un sol ús: un segon enviament retorna
        la verificació decidida.
      operationId: submit_wallet_verification_response
      parameters:
        - in: path
          name: request_id
          schema:
            type: string
            format: uuid
          description: El request_id que ha retornat l'endpoint d'inici.
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest
            example:
              response:
                protocol: openid4vp-v1-signed
                data:
                  response: <compact JWE returned by the wallet>
          application/x-www-form-urlencoded:
            schema:
              $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest
            example:
              response:
                protocol: openid4vp-v1-signed
                data:
                  response: <compact JWE returned by the wallet>
          multipart/form-data:
            schema:
              $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest
            example:
              response:
                protocol: openid4vp-v1-signed
                data:
                  response: <compact JWE returned by the wallet>
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/DigitalIdWalletApiWalletVerificationResponse
              example:
                request_id: 00000000-0000-4000-8000-000000000001
                wallet_verification:
                  wallet:
                    id: google_wallet
                    name: Google Wallet
                    issuing_authority: >-
                      Google Wallet (ID pass) and US state issuers (mobile
                      driving licence)
                  country: USA
                  status: Approved
                  outcome: verified
                  error: null
                  interaction: digital_credentials
                  simulated: false
                  expires_at: '2026-01-01T10:10:00Z'
                  next_action: null
                  identity:
                    full_name: Alex Example
                    first_name: Alex
                    last_name: Example
                    date_of_birth: '1990-01-31'
                    nationality: USA
                    issuing_state: USA
                  attributes:
                    document_number: X0000000
                    document_expiry_date: '2030-01-31'
                  level_of_assurance: substantial
                  verified_at: '2026-01-01T10:01:00Z'
                  signature_valid: true
                  credential_type: person_identification
                vendor_data: your-customer-reference
                metadata:
                  reference: example
                created_at: '2026-01-01T10:00:00Z'
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest
          description: 'Errors de validació de camp ({field: [messages]}).'
        '403':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage
          description: 'Falten les credencials (x-api-key o Authorization: Bearer).'
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            error not_found: cap verificació de cartera d'aquesta aplicació té
            aquest request_id.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            error not_a_digital_credentials_wallet: aquesta verificació no admet
            una resposta de cartera.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            error wallet_not_configured: aquest entorn no pot verificar la
            cartera.
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request POST \
              --url https://verification.didit.me/v3/id-verification/wallets/verifications/REQUEST_ID/response/ \
              --header 'x-api-key: YOUR_API_KEY' \
              --header 'Content-Type: application/json' \
              --data '{
              "response": {
                "protocol": "openid4vp-v1-signed",
                "data": {
                  "response": "<compact JWE returned by the wallet>"
                }
              }
            }'
components:
  schemas:
    DigitalIdWalletApiWalletDigitalCredentialResponseRequest:
      type: object
      description: >-
        El que la cartera ha respost a la teva pàgina o aplicació, per a una
        verificació de ``request_digital_credential``.
      properties:
        response:
          type: object
          additionalProperties: {}
          description: >-
            Exactament el que ha retornat la cartera: {protocol, data} del
            DigitalCredential de navigator.credentials.get, o el credentialJson
            analitzat del DigitalCredential d'Android. Xifrat per a Didit; no ho
            alteris.
      required:
        - response
    DigitalIdWalletApiWalletVerificationResponse:
      type: object
      description: >-
        Una verificació de cartera independent, tal com respon cada endpoint de
        carteres.
      properties:
        request_id:
          type: string
          format: uuid
        wallet_verification:
          $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationResult'
        vendor_data:
          type: string
          nullable: true
        metadata:
          type: object
          additionalProperties: {}
          nullable: true
          description: L'objecte de metadades enviat a l'inici, o null.
        created_at:
          type: string
          format: date-time
      required:
        - created_at
        - metadata
        - request_id
        - vendor_data
        - wallet_verification
    DigitalIdWalletApiWalletVerificationStartBadRequest:
      oneOf:
        - $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
        - $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationFieldErrors'
    DigitalIdWalletApiClientCredentialsForbiddenErrorMessage:
      type: object
      properties:
        detail:
          type: string
          default: Forbidden - User doesn't have permission
    DigitalIdWalletApiWalletVerificationError:
      type: object
      properties:
        error:
          type: string
          description: Codi llegible per màquina estable, p. ex. wallet_unavailable.
        detail:
          type: string
      required:
        - detail
        - error
    DigitalIdWalletApiWalletVerificationResult:
      type: object
      properties:
        wallet:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWallet'
          readOnly: true
        country:
          type: string
        status:
          type: string
          description: >-
            Not Finished mentre està pendent, després Approved (verificada) o
            Declined.
        outcome:
          $ref: >-
            #/components/schemas/DigitalIdWalletApiWalletVerificationResultOutcomeEnum
        error:
          type: string
          nullable: true
          readOnly: true
        interaction:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiInteractionEnum'
          readOnly: true
        simulated:
          type: boolean
          readOnly: true
        expires_at:
          type: string
          format: date-time
        next_action:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWalletNextAction'
          nullable: true
          readOnly: true
        identity:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWalletIdentity'
          nullable: true
          readOnly: true
        attributes:
          type: object
          additionalProperties: {}
          nullable: true
          readOnly: true
        level_of_assurance:
          type: string
          nullable: true
        verified_at:
          type: string
          format: date-time
          nullable: true
        signature_valid:
          type: boolean
          nullable: true
          description: >-
            Cert un cop s'ha verificat la signatura de la credencial; null per a
            una de simulada.
        credential_type:
          type: string
          nullable: true
      required:
        - attributes
        - country
        - credential_type
        - error
        - expires_at
        - identity
        - interaction
        - level_of_assurance
        - next_action
        - outcome
        - signature_valid
        - simulated
        - status
        - verified_at
        - wallet
    DigitalIdWalletApiWalletVerificationFieldErrors:
      type: object
      description: >-
        Errors de validació de la sol·licitud: cada camp rebutjat amb els seus
        missatges.
      additionalProperties:
        type: array
        items:
          type: string
    DigitalIdWalletApiWallet:
      type: object
      properties:
        id:
          type: string
          description: Identificador de catàleg de la cartera, p. ex., bankid_se.
        name:
          type: string
        issuing_authority:
          type: string
          nullable: true
      required:
        - id
        - issuing_authority
        - name
    DigitalIdWalletApiWalletVerificationResultOutcomeEnum:
      enum:
        - pending
        - verified
        - cancelled
        - timeout
        - failed
      type: string
      description: |-
        * `pending` - Pendent
        * `verified` - Verificat
        * `cancelled` - Cancel·lat per l'usuari
        * `timeout` - Temps esgotat
        * `failed` - Fallit
    DigitalIdWalletApiInteractionEnum:
      enum:
        - redirect
        - in_app
        - digital_credentials
      type: string
      description: |-
        * `redirect` - redirecció
        * `in_app` - a l'aplicació
        * `digital_credentials` - credencials digitals
    DigitalIdWalletApiWalletNextAction:
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWalletNextActionTypeEnum'
          description: >-
            redirect: envia el navegador de l'usuari a url. confirm_in_app:
            mostra verification_code a l'usuari, que comprova que coincideixi
            amb el codi de la seva aplicació de cartera i confirma allà; després
            fes una consulta periòdica. request_digital_credential: en un gest
            de l'usuari a l'origen amb què has començat, sol·licita-ho a la
            cartera amb digital_credentials.request i, a continuació, envia el
            que retorni a POST .../verifications/{request_id}/response/.


            * `redirect` - redirect

            * `confirm_in_app` - confirm_in_app

            * `request_digital_credential` - request_digital_credential
        url:
          type: string
          format: uri
          description: 'només redirect: on l''usuari inicia sessió amb la cartera.'
        digital_credentials:
          allOf:
            - $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialsRequest
          description: >-
            només request_digital_credential: la sol·licitud que s'ha de passar
            a la cartera.
        verification_code:
          type: string
          description: >-
            Només confirm_in_app: el codi de comparació de 4 dígits que també
            mostra l'aplicació de la cartera.
        poll_interval_seconds:
          type: integer
          description: >-
            Només confirm_in_app: amb quina freqüència s'ha de cridar POST
            .../verifications/{request_id}/poll/ per obtenir informació
            immediata. Didit també fa sondejos en segon pla dels inicis de
            sessió pendents, de manera que el webhook informa del resultat fins
            i tot si no fas sondejos.
      required:
        - type
    DigitalIdWalletApiWalletIdentity:
      type: object
      properties:
        full_name:
          type: string
          nullable: true
        first_name:
          type: string
          nullable: true
        last_name:
          type: string
          nullable: true
        date_of_birth:
          type: string
          format: date
          nullable: true
        nationality:
          type: string
          nullable: true
          description: Nacionalitat ISO3, només quan la cartera n'afirmi una (mai deduïda).
        issuing_state:
          type: string
          description: País ISO3 l'esquema del qual ha emès la identitat.
      required:
        - date_of_birth
        - first_name
        - full_name
        - issuing_state
        - last_name
        - nationality
    DigitalIdWalletApiWalletNextActionTypeEnum:
      enum:
        - redirect
        - confirm_in_app
        - request_digital_credential
      type: string
      description: |-
        * `redirect` - redirecció
        * `confirm_in_app` - confirma a l'aplicació
        * `request_digital_credential` - sol·licita una credencial digital
    DigitalIdWalletApiWalletDigitalCredentialsRequest:
      type: object
      properties:
        protocol:
          type: string
          description: openid4vp-v1-signed.
        request:
          type: object
          additionalProperties: {}
          description: >-
            Passa-ho tal com està: navigator.credentials.get({digital: request})
            al navegador, o JSON.stringify(request) com a requestJson de
            GetDigitalCredentialOption a Android. Signat per Didit per a la teva
            aplicació.
      required:
        - protocol
        - request
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clau d'API de la teva aplicació, des de Developers -> API keys a la
        Business Console. La clau primària té accés complet. Una clau amb nom
        pot tenir l'abast limitat: cap, lectura o escriptura per recurs,
        limitada a determinats fluxos de treball o a sessions aprovades, a una
        llista d'adreces IP i a una data de caducitat. 401 significa que la clau
        és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap
        clau, que la clau no té accés a aquest recurs o acció, o que la
        sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una
        ruta de sessió significa que la sessió està fora dels fluxos de treball
        o estats de la clau. Una clau sense accés a fitxers multimèdia rep els
        URL d'imatge, vídeo i PDF com a null, i una clau sense permís
        d'escriptura de sessions rep els enllaços de sessió i els tokens com a
        null. Consulta https://docs.didit.me/console/api-keys.
    BearerAuth:
      type: http
      scheme: bearer
      description: El token d'accés de credencials de client de l'aplicació.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.