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

# Sendcustomerotp

> ### Send OTP to Customer

Generate and send a one-time password to a customer's email or phone number.
The OTP is stored in Redis with a 5-minute expiry.

**Rate Limiting**:
- Maximum 5 requests per hour per target
- Maximum 10 requests per day per target

**Security**:
- OTP codes are 6 digits, cryptographically secure
- Codes expire after 5 minutes
- Maximum 3 verification attempts per code
- OTP codes are never returned in production (only in dev/test mode)

**Request Body**:
- `target`: Email address or phone number

**Status Codes**:
- 200: OTP sent successfully
- 400: Invalid target format
- 429: Rate limit exceeded



## OpenAPI

````yaml https://api.loyalty.dog/openapi.json post /v2/giftcards/customers/otp/send
openapi: 3.1.0
info:
  title: LoyaltyDog
  description: >-

    Welcome to the LoyaltyDog API! This API provides access to our loyalty
    program features, allowing you to integrate with various platforms and
    manage your loyalty data.


    Want to query LoyaltyDog via an AI assistant (Claude, Cursor, Windsurf)? See
    the [MCP Integration guide](https://loyaltydog.ai/playground#mcp).
        
  termsOfService: https://loyalty.dog/loyalty-program-terms-service
  contact:
    name: LoyaltyDog Support
    url: https://loyalty.dog/contact-us
    email: support@loyalty.dog
  version: 1.0.1
servers:
  - url: https://api.loyalty.dog
    description: Production
security:
  - bearerAuth: []
paths:
  /v2/giftcards/customers/otp/send:
    post:
      tags:
        - Gift Card Customers
      summary: Sendcustomerotp
      description: >-
        ### Send OTP to Customer


        Generate and send a one-time password to a customer's email or phone
        number.

        The OTP is stored in Redis with a 5-minute expiry.


        **Rate Limiting**:

        - Maximum 5 requests per hour per target

        - Maximum 10 requests per day per target


        **Security**:

        - OTP codes are 6 digits, cryptographically secure

        - Codes expire after 5 minutes

        - Maximum 3 verification attempts per code

        - OTP codes are never returned in production (only in dev/test mode)


        **Request Body**:

        - `target`: Email address or phone number


        **Status Codes**:

        - 200: OTP sent successfully

        - 400: Invalid target format

        - 429: Rate limit exceeded
      operationId: sendCustomerOTP_v2_giftcards_customers_otp_send_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendOTPRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendOTPResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    SendOTPRequest:
      properties:
        target:
          type: string
          maxLength: 255
          minLength: 1
          title: Target
          description: Email address or phone number to send OTP to
      type: object
      required:
        - target
      title: SendOTPRequest
      description: Request to send an OTP to an email or phone number.
    SendOTPResponse:
      properties:
        success:
          type: boolean
          title: Success
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
        otpType:
          anyOf:
            - type: string
            - type: 'null'
          title: Otptype
        mockCode:
          anyOf:
            - type: string
            - type: 'null'
          title: Mockcode
      type: object
      required:
        - success
      title: SendOTPResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT access token obtained from POST /v2/token.

````