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

# Resend OTP

> Resend a One-Time Password (OTP) to a subject for credential approval, via email or SMS.  
Provide exactly one query parameter to identify the subject: contact, id, or internalId.  
  
The endpoint validates:  
- The request is not canceled  
- Maximum attempts have not been reached, only successful OTP sends count towards resend limits  
- Sufficient time has passed since the last successful resend  
- Billing restrictions apply



## OpenAPI

````yaml /versions/2026-07-06.yaml patch /request/resend/{requestId}
openapi: 3.1.0
info:
  title: Humanos API
  description: Humanos API
  version: '1.0'
  contact: {}
servers: []
security: []
tags:
  - name: humanosApp
    description: ''
paths:
  /request/resend/{requestId}:
    patch:
      tags:
        - Requests
      summary: Resend OTP
      description: >-
        Resend a One-Time Password (OTP) to a subject for credential approval,
        via email or SMS.  

        Provide exactly one query parameter to identify the subject: contact,
        id, or internalId.  
          
        The endpoint validates:  

        - The request is not canceled  

        - Maximum attempts have not been reached, only successful OTP sends
        count towards resend limits  

        - Sufficient time has passed since the last successful resend  

        - Billing restrictions apply
      operationId: requests_resendOtp
      parameters:
        - name: requestId
          required: true
          in: path
          description: >-
            Unique identifier of the credential request. Must be a valid MongoDB
            ObjectId.
          schema:
            example: 507f1f77bcf86cd799439011
            type: string
        - name: contact
          required: false
          in: query
          description: Verified contact value (email or phone)
          schema:
            example: user@example.com
            type: string
        - name: id
          required: false
          in: query
          description: User's VIA identifier
          schema:
            example: did:web:humanos.tech:user:73ebefdd-a549-4873-aad9-def80c40c8c8
            type: string
        - name: internalId
          required: false
          in: query
          description: >-
            Identifier to help you identify the user in your own system. We
            recommend using a unique value.
          schema:
            example: internal-12345
            type: string
        - name: Idempotency-Key
          in: header
          description: >-
            Optional key used to safely retry the same create/initiate request
            without duplicating side effects.
          required: false
          schema:
            type: string
            example: a96d14c5-8e60-4f6b-9d80-5c18c0e4202a
        - $ref: '#/components/parameters/ApiVersion'
      responses:
        '201':
          description: >-
            Returns a confirmation that the OTP was sent successfully via email
            or SMS.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessEntity'
        '400':
          description: >-
            Invalid request — not exactly one of contact, id, or internalId was
            provided, or requestId is not a valid MongoDB ObjectId.
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 400
                  message:
                    type: string
                    example: >-
                      Exactly one search parameter must be provided: contact,
                      id, or internalId
                  error:
                    type: string
                    example: Bad Request
        '402':
          description: >-
            Payment required. The issuer does not have enough credits to resend
            the OTP.
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 402
                  message:
                    type: string
                    example: >-
                      Insufficient credits for this action. Please top up your
                      balance.
                  error:
                    type: string
                    example: Unknown Error
        '403':
          description: >-
            Request was canceled, the signing link expired, the maximum OTP
            attempts or resends were reached, or the minimum time between
            resends has not elapsed
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 403
                  message:
                    type: string
                    example: >-
                      Request was canceled, the signing link expired, the
                      maximum OTP attempts or resends were reached, or the
                      minimum time between resends has not elapsed
                  error:
                    type: string
                    example: Forbidden
        '404':
          description: >-
            No subject OTP matched the given request and selector (contact, id,
            or internalId).
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 404
                  message:
                    type: string
                    example: SubjectOtp not found
                  error:
                    type: string
                    example: Not Found
components:
  parameters:
    ApiVersion:
      name: API-Version
      in: header
      required: false
      schema:
        type: string
        pattern: ^\d{4}-\d{2}-\d{2}$
        example: '2026-07-06'
      description: >-
        Pin request, response, and webhook shapes to a specific dated API
        version (YYYY-MM-DD). Omit to use the version pinned to your API key
        (set when the key is created; new keys default to the latest version).
        New integrations should target the latest version.
  schemas:
    SuccessEntity:
      type: object
      properties:
        success:
          type: boolean
          description: Whether the operation was successful
          example: true
      required:
        - success

````