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

# List reservation message attempts

> Requires `reservations:read`. Attempt diagnostics are not delivery proof. would_send does not mean delivered. Use nextCursor while hasNext is true.



## OpenAPI

````yaml /openapi.json get /reservations/lifecycle/attempts
openapi: 3.0.3
info:
  title: Visito M2M API
  version: 1.0.0
  description: >-
    Tenant-scoped server-to-server API for channels, conversations, commerce,
    custom AI tools, and WhatsApp templates. Send operations are asynchronous
    and return queued acknowledgements. Expansion adds conversation controls,
    knowledge, sales opportunities, delivery status, reporting, and signed
    webhooks.
servers:
  - url: https://platform-api.visitoai.com/m2m/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Channels
  - name: Conversations
  - name: Commerce
  - name: Custom tools
  - name: WhatsApp templates
  - name: Properties
  - name: Knowledge
  - name: Sales CRM
  - name: Delivery
  - name: Reporting
  - name: Webhooks
paths:
  /reservations/lifecycle/attempts:
    get:
      summary: List reservation message attempts
      description: >-
        Requires `reservations:read`. Attempt diagnostics are not delivery
        proof. would_send does not mean delivered. Use nextCursor while hasNext
        is true.
      operationId: list_reservation_message_attempts
      parameters:
        - name: integrationId
          in: query
          schema:
            type: string
            maxLength: 160
          required: false
        - name: cursor
          in: query
          schema:
            type: string
            maxLength: 500
          required: false
        - name: reservationId
          in: query
          schema:
            type: string
            maxLength: 160
          required: false
        - name: eventType
          in: query
          schema:
            type: string
            enum:
              - booking_confirmed
              - pre_checkin
              - post_checkout_review
          required: false
        - name: result
          in: query
          schema:
            type: string
            enum:
              - would_send
              - deferred
              - skipped
              - invalid
              - duplicate
              - error
          required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/ReservationLifecycleOutboundAttemptsResponse
        default:
          $ref: '#/components/responses/Error'
components:
  schemas:
    ReservationLifecycleOutboundAttemptsResponse:
      type: object
      properties:
        attempts:
          type: array
          items:
            type: object
            properties:
              eventId:
                type: string
              lifecycleEventType:
                anyOf:
                  - type: string
                    enum:
                      - booking_confirmed
                  - type: string
                    enum:
                      - pre_checkin
                  - type: string
                    enum:
                      - post_checkout_review
              result:
                anyOf:
                  - type: string
                    enum:
                      - would_send
                  - type: string
                    enum:
                      - deferred
                  - type: string
                    enum:
                      - skipped
                  - type: string
                    enum:
                      - invalid
                  - type: string
                    enum:
                      - duplicate
                  - type: string
                    enum:
                      - error
              reason:
                type: string
              integrationId:
                type: string
              integrationName:
                type: string
              propertyId:
                type: string
              propertyName:
                type: string
              senderPhoneNumber:
                type: string
              senderLabel:
                type: string
              channelId:
                type: string
              metaTemplateName:
                type: string
              metaTemplateLocale:
                anyOf:
                  - type: string
                    enum:
                      - en_US
                  - type: string
                    enum:
                      - es_MX
              metaTemplateStatus:
                anyOf:
                  - type: string
                    enum:
                      - pending
                  - type: string
                    enum:
                      - approved
                  - type: string
                    enum:
                      - rejected
                  - type: string
                    enum:
                      - paused
              metaTemplateVersion:
                type: number
              metaTemplateErrorCode:
                type: string
              metaTemplateErrorMessage:
                type: string
              providerReservationId:
                type: string
              checkInDate:
                type: string
              checkOutDate:
                type: string
              triggerSource:
                anyOf:
                  - type: string
                    enum:
                      - sync_transition
                  - type: string
                    enum:
                      - scheduled_due_scan
              attemptCount:
                type: number
              duplicateCount:
                type: number
              guestPhoneRaw:
                type: string
              guestPhoneNormalized:
                type: string
              conversationId:
                type: string
              conversationLink:
                type: string
              policy:
                type: object
                properties:
                  outboundEnabled:
                    type: boolean
                  tenantAllowed:
                    type: boolean
                  masterEnabled:
                    type: boolean
                  integrationActive:
                    type: boolean
                  integrationEligible:
                    type: boolean
                  eventEnabled:
                    type: boolean
                  channelMapped:
                    type: boolean
                  channelActive:
                    type: boolean
                  respondEnabled:
                    type: boolean
                  phonePresent:
                    type: boolean
                  phoneValid:
                    type: boolean
                  outsideQuietHours:
                    type: boolean
                required:
                  - outboundEnabled
                  - tenantAllowed
                  - masterEnabled
                  - integrationActive
                  - integrationEligible
                  - eventEnabled
                  - channelMapped
                  - channelActive
                  - respondEnabled
                  - phonePresent
                  - phoneValid
                  - outsideQuietHours
                additionalProperties: false
              createdAt:
                type: string
              updatedAt:
                type: string
            required:
              - eventId
              - lifecycleEventType
              - result
              - reason
              - integrationId
              - providerReservationId
              - triggerSource
              - attemptCount
              - duplicateCount
              - policy
              - createdAt
            additionalProperties: false
        availableIntegrations:
          type: array
          items:
            type: object
            properties:
              integrationId:
                type: string
              integrationName:
                type: string
              provider:
                type: string
            required:
              - integrationId
            additionalProperties: false
        availableStatuses:
          type: array
          items:
            type: string
        availableStages:
          type: array
          items:
            type: string
        pageSize:
          type: number
        hasNext:
          type: boolean
        nextCursor:
          type: string
      required:
        - attempts
        - availableIntegrations
        - availableStatuses
        - availableStages
        - pageSize
        - hasNext
      additionalProperties: false
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              example: M2M_AUTH_INSUFFICIENT_SCOPE
            message:
              type: string
            details:
              type: object
              additionalProperties: true
      example:
        error:
          code: M2M_AUTH_INSUFFICIENT_SCOPE
          message: M2M credential does not have required scope.
          details:
            requiredScopes:
              - conversations:write
            missingScopes:
              - conversations:write
  responses:
    Error:
      description: Structured error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Visito M2M API key
      description: Server-side tenant-scoped credential created from Build > API Keys.

````