> ## 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.

# Create a reservation hold

> Requires `reservations:write`. Blocks seats for 15 minutes. The partner sale channel is injected server-side. Response status is `HOLD`.



## OpenAPI

````yaml /openapi.json post /reservations
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:
    post:
      tags:
        - Tours
      summary: Create a reservation hold
      description: >-
        Requires `reservations:write`. Blocks seats for 15 minutes. The partner
        sale channel is injected server-side. Response status is `HOLD`.
      operationId: ReservationsController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateReservationDto'
      responses:
        '201':
          description: Hold created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationResponseDto'
        '403':
          description: >-
            Missing reservations:write permission or partner without Vulcano
            sale channel
        '409':
          description: Not enough availability
        '422':
          description: Invalid tour, date or time
      security:
        - api-key: []
        - api-secret: []
components:
  schemas:
    CreateReservationDto:
      type: object
      properties:
        tour_id:
          type: integer
          minimum: 1
          example: 3448
        date:
          type: string
          format: date
          example: '2026-08-12'
        time:
          type: string
          pattern: ^\d{2}:\d{2}$
          example: '15:30'
        pax:
          $ref: '#/components/schemas/ReservationPaxDto'
      required:
        - tour_id
        - date
        - time
        - pax
    ReservationResponseDto:
      type: object
      properties:
        status:
          type: string
          example: ok
        timestamp:
          type: string
        data:
          $ref: '#/components/schemas/ReservationDto'
      required:
        - status
        - timestamp
        - data
    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
    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
  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.