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

# Create In-person Verification

> Send a digital ID verification to a reader terminal. The reader asks the customer to choose what to share, then the customer taps their phone or presents a QR code for the reader to scan.

The response doesn't include the result. Poll [Get an in-person verification](/api-reference/terminal-api/get-in-person-verification) with the returned `verificationId` for it.

A reader handles one verification at a time. The reader's action must start with a digital credential request step with the Proximity transport enabled.

If the request fails or times out, retry it with the same `terminalId` and `reference`. While that verification is in progress, the retry returns it instead of starting a new one. Once it has finished, the same request starts a new verification.



## OpenAPI

````yaml terminal-api POST /terminal/proximity-verifications
openapi: 3.0.0
info:
  description: Authsignal's Terminal API.
  version: 1.0.0
  title: Terminal API
  termsOfService: https://www.authsignal.com/legal/terms-of-service
  contact:
    email: hello@authsignal.com
servers:
  - url: https://api.authsignal.com/v1
  - url: https://au.api.authsignal.com/v1
  - url: https://eu.api.authsignal.com/v1
  - url: https://ca.api.authsignal.com/v1
  - url: https://uk.api.authsignal.com/v1
security:
  - terminalAuth: []
tags:
  - name: payment-session
    description: ''
    externalDocs:
      description: Find out more
      url: https://docs.authsignal.com
  - name: in-person-verification
    description: ''
    externalDocs:
      description: Find out more
      url: https://docs.authsignal.com
externalDocs:
  description: Find out more about Authsignal
  url: https://docs.authsignal.com
paths:
  /terminal/proximity-verifications:
    post:
      tags:
        - in-person-verification
      summary: Create an in-person verification
      description: >-
        Send a digital ID verification to a reader terminal. The reader asks the
        customer to choose what to share, then the customer taps their phone or
        presents a QR code for the reader to scan.


        The response doesn't include the result. Poll [Get an in-person
        verification](/api-reference/terminal-api/get-in-person-verification)
        with the returned `verificationId` for it.


        A reader handles one verification at a time. The reader's action must
        start with a digital credential request step with the Proximity
        transport enabled.


        If the request fails or times out, retry it with the same `terminalId`
        and `reference`. While that verification is in progress, the retry
        returns it instead of starting a new one. Once it has finished, the same
        request starts a new verification.
      operationId: createProximityVerification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                terminalId:
                  type: string
                  maxLength: 100
                  description: >-
                    The ID of the reader terminal to send the verification to.
                    The reader shows its terminal ID as a QR code in its
                    settings.
                reference:
                  type: string
                  maxLength: 200
                  description: >-
                    A reference identifier originating from the point of sale
                    system, such as a sale ID. Use a new reference for each
                    sale.
              required:
                - terminalId
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InPersonVerificationStarted'
        '400':
          description: >-
            `invalid_request` if the request body is invalid.
            `invalid_configuration` if the reader's action doesn't start with a
            digital credential request step with the Proximity transport
            enabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The controller token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: The reader terminal doesn't exist in your tenant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: >-
            `terminal_busy` if the reader is handling a verification for another
            sale or controller. Wait for it to finish, or cancel it.
            `terminal_busy_or_configuration_changed` if the reader became busy
            or its action has no request options.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - controllerAuth: []
components:
  schemas:
    InPersonVerificationStarted:
      type: object
      properties:
        verificationId:
          type: string
          description: The ID of the in-person verification.
        terminalId:
          type: string
          description: The ID of the reader terminal the verification was sent to.
        optionId:
          type: string
          nullable: true
          description: >-
            The request option the customer chose on the reader. `null` until
            they choose.
        optionName:
          type: string
          nullable: true
          description: >-
            The display name of the chosen request option. `null` until the
            customer chooses.
        reference:
          type: string
          description: A reference identifier originating from the point of sale system.
        status:
          type: string
          enum:
            - PENDING
            - IN_PROGRESS
            - VERIFYING
          description: >-
            `PENDING` for a new verification. A retry for the same sale returns
            the verification with its current status.
        createdAt:
          type: string
          format: date-time
        expiresAt:
          type: string
          format: date-time
          description: When the customer must have presented their credential by.
        resultExpiresAt:
          type: string
          format: date-time
          description: When the verification and its result stop being available.
      required:
        - verificationId
        - terminalId
        - optionId
        - optionName
        - status
        - createdAt
        - expiresAt
        - resultExpiresAt
      example:
        verificationId: 41feec4e-5a9e-46bd-9068-72261a57fc5d
        terminalId: 8c2d0e1b-5f4a-4c3e-9b8a-7d6c5b4a3f2e
        optionId: null
        optionName: null
        reference: sale-1042
        status: PENDING
        createdAt: '2026-10-15T01:02:03.000Z'
        expiresAt: '2026-10-15T01:07:03.000Z'
        resultExpiresAt: '2026-10-15T01:12:03.000Z'
    Error:
      type: object
      properties:
        error:
          type: string
        errorCode:
          type: string
        errorDescription:
          type: string
      example:
        error: terminal_busy
        errorCode: terminal_busy
        errorDescription: ''
  securitySchemes:
    terminalAuth:
      type: apiKey
      in: header
      name: x-authsignal-terminal
      description: >-
        Use your terminal ID obtained from the on-boarded device. This unique
        identifier is required to authenticate requests to the payment session
        APIs from your point of sale terminal.
    controllerAuth:
      type: http
      scheme: bearer
      description: >-
        Use the controller token issued for your point of sale device. Contact
        Authsignal to issue a controller token.

````

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