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

# List Delivery Reports

> Returns a paginated list of delivery reports for the authenticated project, sorted by creation date (newest first). Each report includes `downloadUrl` for direct download; there is no download-by-id endpoint.



## OpenAPI

````yaml GET /reports
openapi: 3.1.1
info:
  title: OTPIQ SMS API
  description: >-
    Enterprise-grade SMS and messaging API for sending verification codes,
    custom messages, and managing sender IDs. Supports multiple providers
    including SMS, WhatsApp, and Telegram with intelligent fallback routing.


    ## Features


    * **Multi-Provider Support**: Send messages via SMS, WhatsApp, or Telegram

    * **Smart Fallback Routes**: Automatic provider switching for maximum
    delivery success

    * **Verification Codes**: Automated OTP delivery with customizable codes

    * **Custom Messages**: Send personalized messages with custom sender IDs

    * **Rate Limiting**: Built-in protection against abuse

    * **Spending Controls**: Configurable spending thresholds and credit
    management

    * **Real-time Tracking**: Monitor message delivery status

    * **Sender ID Management**: Register and manage custom sender IDs

    * **Webhook Notifications**: Real-time delivery status updates via webhooks


    ## Provider Options


    OTPIQ now offers 6 provider options including smart fallback routes:


    - **`whatsapp-sms`**: Try WhatsApp first, fallback to SMS

    - **`telegram-sms`**: Try Telegram first, fallback to SMS

    - **`whatsapp-telegram-sms`**: Try WhatsApp → Telegram → SMS (maximum
    delivery success)

    - **`sms`**: SMS only

    - **`whatsapp`**: WhatsApp only

    - **`telegram`**: Telegram only


    ## Authentication


    All API requests require authentication using your project API key. Include
    it in the Authorization header:


    ```

    Authorization: Bearer sk_live_your_api_key_here

    ```


    ## Webhooks


    OTPIQ provides real-time delivery status notifications via webhooks. See the
    Webhooks section for detailed documentation and examples.


    ## Support


    * **Documentation**: [https://docs.otpiq.com](https://docs.otpiq.com)

    * **Support Email**: info@otpiq.com
  version: 1.0.0
  contact:
    name: OTPIQ Support
    url: https://otpiq.com
    email: info@otpiq.com
  license:
    name: Commercial
    url: https://otpiq.com/terms
servers:
  - url: https://api.otpiq.com/api
    description: Production API
security:
  - bearerAuth: []
tags:
  - name: Authentication
    description: API key authentication and project information
  - name: SMS
    description: >-
      Send SMS messages, verification codes, and track delivery with multiple
      provider options and fallback routing
  - name: Sender IDs
    description: Manage custom sender IDs for your messages
  - name: Webhooks
    description: Real-time delivery status notifications via webhooks
  - name: Delivery Reports
    description: Generate and list CSV delivery reports for SMS/messages in a date range
  - name: Pricing
    description: Retrieve international SMS pricing information
  - name: WhatsApp
    description: >-
      List WhatsApp businesses, accounts, phone numbers, and message templates
      connected to a project
externalDocs:
  description: OTPIQ Documentation
  url: https://docs.otpiq.com
paths:
  /reports:
    get:
      tags:
        - Delivery Reports
      summary: List delivery reports
      description: >-
        Returns a paginated list of delivery reports for the authenticated
        project, sorted by creation date (newest first). Each report includes
        `downloadUrl` for direct download; there is no download-by-id endpoint.
      operationId: listDeliveryReports
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
            example: 50
          description: 'Number of reports to return. Min: 1, max: 500.'
        - name: status
          in: query
          required: false
          schema:
            type: string
            example: available,expired
          description: >-
            Comma-separated list of report statuses to filter by. Allowed:
            available, expired, deleted.
      responses:
        '200':
          description: >-
            List of delivery reports. Each report includes downloadUrl for
            direct CSV download.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  required:
                    - _id
                    - reportId
                    - downloadUrl
                    - recordCount
                    - dateRange
                    - status
                  properties:
                    _id:
                      type: string
                      description: MongoDB ObjectId of the report
                      examples:
                        - 65a1b2c3d4e5f6789012345
                    reportId:
                      type: string
                      description: Same as _id; convenience for API consumers
                    project:
                      type: string
                      description: Project ObjectId
                    filename:
                      type: string
                      description: Storage filename
                    fileId:
                      type: string
                      description: Storage provider file identifier
                    downloadUrl:
                      type: string
                      format: uri
                      description: >-
                        Use this URL to download the CSV. No separate download
                        endpoint.
                    recordCount:
                      type: integer
                      description: Number of message rows in the report
                    dateRange:
                      type: object
                      properties:
                        startDate:
                          type: string
                          format: date-time
                        endDate:
                          type: string
                          format: date-time
                    filters:
                      type: object
                      description: Applied filters
                    expiresAt:
                      type: string
                      format: date-time
                      description: Reports valid for 30 days
                    status:
                      type: string
                      enum:
                        - available
                        - expired
                        - deleted
                    createdAt:
                      type: string
                      format: date-time
                    updatedAt:
                      type: string
                      format: date-time
              examples:
                success:
                  summary: Successful response
                  value:
                    - _id: 65a1b2c3d4e5f6789012345
                      reportId: 65a1b2c3d4e5f6789012345
                      filename: delivery-report-myproject-2026-02-12.csv
                      downloadUrl: https://cdn.example.com/files/delivery-report-....csv
                      recordCount: 150
                      dateRange:
                        startDate: '2026-01-01T00:00:00.000Z'
                        endDate: '2026-01-31T23:59:59.999Z'
                      status: available
                      createdAt: '2026-02-12T12:00:00.000Z'
        '400':
          description: Invalid status query value
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
              examples:
                invalid_status:
                  summary: Invalid report status
                  value:
                    error: 'Invalid report status: invalid_value'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - bearerAuth: []
components:
  responses:
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            required:
              - message
            properties:
              message:
                type: string
                description: Unauthorized error message
                examples:
                  - Unauthorized, please use your project api key
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            type: object
            required:
              - message
            properties:
              message:
                type: string
                description: Not found error message
                examples:
                  - SMS not found
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            type: object
            required:
              - message
            properties:
              message:
                type: string
                description: Internal server error message
                examples:
                  - Internal server error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Project API key (`sk_live…` or `sk_dev…`). Send it as `Authorization:
        Bearer <api_key>`.

````