SpotHero Reservations API

Create, manage, and cancel parking reservations

OpenAPI Specification

spothero-reservations-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: SpotHero Parking Availability Reservations API
  description: The SpotHero Parking API provides programmatic access to the largest network of off-street parking facilities in North America. Partners can search for available parking spots, check real-time availability, create and manage reservations, and access facility details including pricing, amenities, and directions. The API supports navigation apps, mobility platforms, connected car dashboards, event ticketing systems, and enterprise fleet management solutions.
  version: 2.0.0
  termsOfService: https://spothero.com/terms
  contact:
    name: SpotHero Partner Support
    email: partner.support@spothero.com
    url: https://spothero.com/developers
  license:
    name: Proprietary
    url: https://spothero.com/terms
servers:
- url: https://api.spothero.com/v2
  description: SpotHero API v2 Production
security:
- ApiKeyAuth: []
tags:
- name: Reservations
  description: Create, manage, and cancel parking reservations
paths:
  /reservations:
    get:
      operationId: list-reservations
      tags:
      - Reservations
      summary: List Reservations
      description: Retrieve a list of parking reservations for the authenticated partner account. Supports filtering by status, date range, and facility.
      parameters:
      - name: status
        in: query
        description: Filter by reservation status
        required: false
        schema:
          type: string
          enum:
          - active
          - completed
          - cancelled
          - upcoming
      - name: starts_after
        in: query
        description: Filter reservations starting after this date
        required: false
        schema:
          type: string
          format: date-time
      - name: starts_before
        in: query
        description: Filter reservations starting before this date
        required: false
        schema:
          type: string
          format: date-time
      - name: facility_id
        in: query
        description: Filter by facility ID
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Maximum number of results to return
        required: false
        schema:
          type: integer
          default: 20
          maximum: 100
      - name: offset
        in: query
        description: Number of results to skip for pagination
        required: false
        schema:
          type: integer
          default: 0
      responses:
        '200':
          description: List of reservations
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservationList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: create-reservation
      tags:
      - Reservations
      summary: Create Reservation
      description: Create a new parking reservation at a specific facility for a given time period. Returns a confirmation with a booking reference and barcode for facility entry.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReservationRequest'
      responses:
        '201':
          description: Reservation created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reservation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          description: Conflict - facility no longer available for requested time period
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /reservations/{reservation_id}:
    get:
      operationId: get-reservation
      tags:
      - Reservations
      summary: Get Reservation
      description: Retrieve details for a specific parking reservation by its ID.
      parameters:
      - name: reservation_id
        in: path
        description: Unique identifier for the reservation
        required: true
        schema:
          type: string
          example: res_xyz789
      responses:
        '200':
          description: Reservation details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reservation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      operationId: cancel-reservation
      tags:
      - Reservations
      summary: Cancel Reservation
      description: Cancel an existing parking reservation. Cancellation policies and refund eligibility depend on the facility's terms and the time of cancellation relative to the reservation start.
      parameters:
      - name: reservation_id
        in: path
        description: Unique identifier for the reservation
        required: true
        schema:
          type: string
          example: res_xyz789
      responses:
        '200':
          description: Reservation cancelled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Reservation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Conflict - reservation cannot be cancelled (already completed or non-refundable)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    ReservationRequest:
      type: object
      required:
      - facility_id
      - rate_id
      - starts
      - ends
      - driver
      - vehicle
      properties:
        facility_id:
          type: string
          description: Unique identifier for the parking facility
          example: fac_abc123
        rate_id:
          type: string
          description: Unique identifier for the selected rate
          example: rate_early_bird
        starts:
          type: string
          format: date-time
          description: Reservation start time in ISO 8601 format
        ends:
          type: string
          format: date-time
          description: Reservation end time in ISO 8601 format
        driver:
          $ref: '#/components/schemas/Driver'
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        partner_reference:
          type: string
          description: Optional partner-side reference identifier for tracking
          example: order_99887766
    Vehicle:
      type: object
      properties:
        type:
          type: string
          enum:
          - car
          - motorcycle
          - oversized
          default: car
        license_plate:
          type: string
          description: Vehicle license plate number
          example: ABC1234
        state:
          type: string
          description: US state or Canadian province abbreviation
          example: IL
        make:
          type: string
          description: Vehicle manufacturer
          example: Toyota
        model:
          type: string
          description: Vehicle model
          example: Camry
        color:
          type: string
          description: Vehicle color
          example: Blue
    Reservation:
      type: object
      properties:
        reservation_id:
          type: string
          description: Unique SpotHero reservation identifier
          example: res_xyz789
        status:
          type: string
          enum:
          - active
          - completed
          - cancelled
          - upcoming
          description: Current reservation status
        facility_id:
          type: string
          description: Parking facility identifier
        facility_name:
          type: string
          description: Name of the parking facility
        starts:
          type: string
          format: date-time
          description: Reservation start time
        ends:
          type: string
          format: date-time
          description: Reservation end time
        price:
          $ref: '#/components/schemas/Price'
        driver:
          $ref: '#/components/schemas/Driver'
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        barcode:
          type: string
          description: Barcode value for facility access
        barcode_format:
          type: string
          description: Barcode format (e.g., QR, Code128)
          example: QR
        confirmation_code:
          type: string
          description: Human-readable confirmation code
          example: SH-ABC123
        partner_reference:
          type: string
          description: Partner-side reference identifier
        created_at:
          type: string
          format: date-time
          description: Timestamp when reservation was created
        updated_at:
          type: string
          format: date-time
          description: Timestamp when reservation was last updated
    Price:
      type: object
      properties:
        amount:
          type: number
          format: float
          description: Price amount
          example: 15.0
        currency:
          type: string
          description: Currency code (ISO 4217)
          example: USD
        display:
          type: string
          description: Human-readable price string
          example: $15.00
    Driver:
      type: object
      required:
      - first_name
      - last_name
      - email
      properties:
        first_name:
          type: string
          example: Jane
        last_name:
          type: string
          example: Smith
        email:
          type: string
          format: email
          example: jane.smith@example.com
        phone:
          type: string
          example: '+13125551234'
    ReservationList:
      type: object
      properties:
        reservations:
          type: array
          items:
            $ref: '#/components/schemas/Reservation'
        total:
          type: integer
        offset:
          type: integer
        limit:
          type: integer
    Error:
      type: object
      properties:
        code:
          type: string
          description: Error code
        message:
          type: string
          description: Human-readable error message
        details:
          type: object
          description: Additional error details
  responses:
    TooManyRequests:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized - invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request - missing or invalid parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Partner API key issued by SpotHero
externalDocs:
  description: SpotHero Developer Documentation
  url: https://api.spothero.com/v2/docs