SpotHero Reservations API
Create, manage, and cancel parking reservations
Create, manage, and cancel parking reservations
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