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

# Cancel a reservation

> Requires `reservations:write`. Cancels a HOLD or CONFIRMED reservation. Idempotent if already CANCELLED. Expired holds return 409.



## OpenAPI

````yaml /openapi.json post /reservations/cancel
openapi: 3.0.0
info:
  title: Vulcano Partners API
  description: >-
    Public API for external partners integrating with Vulcano Pro.


    **Authentication:** send `X-API-KEY` and `X-API-SECRET` on protected
    endpoints.


    **IDs:** `countryId`, `zone`, `category`, `tour_id`, `transfer_id`, and
    place IDs are Vulcano canonical IDs.


    **Permissions:** `/countries`, `/zones`, and `/categories` are available to
    any authenticated partner. `/tours` requires `tours:read`. `/transfers`
    requires `transfers:read`. Reservations (`/reservations` and
    `/transfers/reservations`) require `reservations:write` and a linked Vulcano
    sale channel.
  version: '1.0'
  contact: {}
servers:
  - url: https://api-sandbox.vulcanopro.com/api/v1
    description: Sandbox
  - url: https://api.vulcanopro.com/api/v1
    description: Production
security: []
tags: []
paths:
  /reservations/cancel:
    post:
      tags:
        - Tours
      summary: Cancel a reservation
      description: >-
        Requires `reservations:write`. Cancels a HOLD or CONFIRMED reservation.
        Idempotent if already CANCELLED. Expired holds return 409.
      operationId: ReservationsController_cancel
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelReservationDto'
      responses:
        '200':
          description: Reservation cancelled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationResponseDto'
        '403':
          description: Reservation does not belong to this partner
        '404':
          description: Reservation not found
        '409':
          description: Hold expired or reservation cannot be cancelled
        '422':
          description: Validation error
      security:
        - api-key: []
        - api-secret: []
components:
  schemas:
    CancelReservationDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 11111111-1111-1111-1111-111111111111
        reason:
          type: string
          example: guest cancelled
      required:
        - id
    ReservationResponseDto:
      type: object
      properties:
        status:
          type: string
          example: ok
        timestamp:
          type: string
        data:
          $ref: '#/components/schemas/ReservationDto'
      required:
        - status
        - timestamp
        - data
    ReservationDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - HOLD
            - EXPIRED
            - CONFIRMED
            - CANCELLED
        tour_id:
          type: integer
        sale_channel_id:
          type: integer
        date:
          type: string
          format: date
        time:
          type: string
          example: '15:30'
        pax:
          $ref: '#/components/schemas/ReservationPaxDto'
        seats:
          type: integer
          description: Blocked seats (adult + child + senior)
        expires_at:
          type: string
          nullable: true
          format: date-time
        order_id:
          type: integer
          nullable: true
          description: Internal Vulcano order ID
        external_reference:
          type: string
          nullable: true
        customer:
          type: object
          nullable: true
          additionalProperties: true
        passengers:
          type: array
          nullable: true
          items:
            type: object
            additionalProperties: true
        additional_activities:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
              quantity:
                type: integer
              amount:
                type: number
              amount_usd:
                type: number
        created_at:
          type: string
          nullable: true
          format: date-time
      required:
        - id
        - status
        - tour_id
        - date
        - time
        - pax
        - seats
    ReservationPaxDto:
      type: object
      properties:
        adult:
          type: integer
          minimum: 0
          example: 2
        child:
          type: integer
          minimum: 0
          example: 1
        senior:
          type: integer
          minimum: 0
          example: 0
        infant:
          type: integer
          minimum: 0
          example: 1
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Partner API key
    api-secret:
      type: apiKey
      in: header
      name: X-API-SECRET
      description: Partner API secret

````

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