> ## 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.

# Kirim Respons Dompet Kredensial Digital

> Kirim respons dompet Digital Credentials API, seperti Google Wallet, ke halaman atau aplikasi Anda. Didit yang memutuskan verifikasinya.

Gunakan operasi ini untuk dompet yang respons awalnya memuat `next_action.type = request_digital_credential`, misalnya Google Wallet.
Lakukan autentikasi dengan kunci API aplikasi yang memulai verifikasi tersebut, dari backend Anda.

Kirim persis apa yang dikembalikan dompet: `{protocol, data}` dari `navigator.credentials.get` di browser, atau `credentialJson` yang sudah di-parse dari Android Credential Manager.
Respons dienkripsi untuk Didit, jadi jangan mengubahnya.
Didit memeriksa tanda tangan penerbit terhadap root penerbit tepercaya, memeriksa setiap nilai yang dikembalikan terhadap digest yang ditandatangani, dan memeriksa tanda tangan perangkat atas `origin` Anda dan permintaan ini, lalu memutuskan verifikasinya.

Respons hanya dapat dikirim sekali.
Pengiriman kedua akan mengembalikan verifikasi yang sudah diputuskan sebelumnya.
Verifikasi yang tidak menerima respons dompet akan menjawab `409` dengan `error: "not_a_digital_credentials_wallet"`.

Lihat [API dompet Digital ID](https://docs.didit.me/id/standalone-apis/digital-id-wallets.md#dompet-digital-credentials-google-wallet) untuk urutan lengkapnya, termasuk cuplikan browser dan Android.


## OpenAPI

````yaml id/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 Verifikasi Identitas. Lakukan autentikasi dengan header 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: Kirim respons dompet
      description: >-
        Dompet untuk Digital Credentials API (Google Wallet): kirim apa yang
        dikembalikan dompet ke halaman atau aplikasi Anda untuk verifikasi yang
        next_action-nya adalah request_digital_credential. Didit mendekripsinya,
        memeriksa tanda tangan penerbit terhadap root penerbit tepercaya, setiap
        nilai yang dikembalikan terhadap digest yang ditandatanganinya, dan
        tanda tangan perangkat atas origin Anda dan permintaan ini, lalu
        memutuskan verifikasi: diverifikasi (ditagih sekali) atau ditolak dengan
        kode kesalahan. Sekali pakai: pengiriman kedua mengembalikan verifikasi
        yang telah diputuskan.
      operationId: submit_wallet_verification_response
      parameters:
        - in: path
          name: request_id
          schema:
            type: string
            format: uuid
          description: request_id yang dikembalikan oleh endpoint untuk memulai.
          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: 'Error validasi kolom ({field: [messages]}).'
        '403':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage
          description: 'Kredensial tidak ada (x-api-key atau Authorization: Bearer).'
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            kesalahan not_found: tidak ada verifikasi dompet dari aplikasi ini
            yang memiliki request_id ini.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            kesalahan not_a_digital_credentials_wallet: verifikasi ini tidak
            menerima respons dompet.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            kesalahan wallet_not_configured: lingkungan ini tidak dapat
            memverifikasi dompet.
      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: >-
        Jawaban dompet kepada halaman atau aplikasi Anda, untuk verifikasi
        ``request_digital_credential``.
      properties:
        response:
          type: object
          additionalProperties: {}
          description: >-
            Persis seperti yang dikembalikan dompet: {protocol, data} dari
            DigitalCredential dari navigator.credentials.get, atau
            credentialJson yang diurai dari DigitalCredential Android.
            Dienkripsi ke Didit; jangan diubah.
      required:
        - response
    DigitalIdWalletApiWalletVerificationResponse:
      type: object
      description: >-
        Satu verifikasi dompet mandiri, sebagaimana setiap endpoint dompet
        meresponsnya.
      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: Objek metadata yang dikirim saat mulai, atau 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: Kode stabil yang dapat dibaca mesin, mis. 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: >-
            Belum Selesai saat tertunda, kemudian Disetujui (diverifikasi) atau
            Ditolak.
        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: >-
            True setelah tanda tangan kredensial diverifikasi; null untuk
            kredensial simulasi.
        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: >-
        Kesalahan validasi permintaan: setiap kolom yang ditolak beserta
        pesannya.
      additionalProperties:
        type: array
        items:
          type: string
    DigitalIdWalletApiWallet:
      type: object
      properties:
        id:
          type: string
          description: ID katalog dompet, misalnya 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` - Menunggu
        * `verified` - Terverifikasi
        * `cancelled` - Dibatalkan oleh pengguna
        * `timeout` - Waktu habis
        * `failed` - Gagal
    DigitalIdWalletApiInteractionEnum:
      enum:
        - redirect
        - in_app
        - digital_credentials
      type: string
      description: |-
        * `redirect` - redirect
        * `in_app` - in_app
        * `digital_credentials` - digital_credentials
    DigitalIdWalletApiWalletNextAction:
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWalletNextActionTypeEnum'
          description: >-
            redirect: arahkan peramban pengguna ke url. confirm_in_app:
            tampilkan verification_code kepada pengguna, yang memeriksa
            kecocokannya dengan kode di aplikasi dompet mereka dan
            mengonfirmasinya di sana; lalu lakukan polling.
            request_digital_credential: dalam interaksi pengguna pada origin
            tempat Anda memulai, minta ke dompet dengan
            digital_credentials.request, lalu kirimkan hasilnya ke 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: 'khusus redirect: tempat pengguna masuk dengan dompet.'
        digital_credentials:
          allOf:
            - $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialsRequest
          description: >-
            khusus request_digital_credential: permintaan yang diserahkan ke
            dompet.
        verification_code:
          type: string
          description: >-
            hanya confirm_in_app: kode perbandingan 4 digit yang juga
            ditampilkan oleh aplikasi dompet.
        poll_interval_seconds:
          type: integer
          description: >-
            hanya confirm_in_app: seberapa sering memanggil POST
            .../verifications/{request_id}/poll/ untuk umpan balik cepat. Didit
            juga melakukan polling proses masuk yang tertunda di latar belakang,
            sehingga webhook melaporkan hasilnya meskipun Anda tidak melakukan
            polling.
      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: >-
            Kewarganegaraan ISO3, hanya jika dompet menyatakannya (tidak pernah
            disimpulkan).
        issuing_state:
          type: string
          description: Negara ISO3 yang skemanya menerbitkan identitas.
      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` - redirect
        * `confirm_in_app` - confirm_in_app
        * `request_digital_credential` - request_digital_credential
    DigitalIdWalletApiWalletDigitalCredentialsRequest:
      type: object
      properties:
        protocol:
          type: string
          description: openid4vp-v1-signed.
        request:
          type: object
          additionalProperties: {}
          description: >-
            Teruskan apa adanya: navigator.credentials.get({digital: request})
            di browser, atau JSON.stringify(request) sebagai requestJson milik
            GetDigitalCredentialOption di Android. Ditandatangani oleh Didit
            untuk aplikasi Anda.
      required:
        - protocol
        - request
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.
    BearerAuth:
      type: http
      scheme: bearer
      description: Token akses client-credentials milik aplikasi.

````

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