Fortellis User / Booking Sessions API

Booking-sessions API illustrating Fortellis's REST conventions: session creation, item management, store availability, and slot reservation for service scheduling workflows.

Fortellis User / Booking Sessions API is one of 8 APIs that CDK Global publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Booking Sessions, Service, and Scheduling. The published artifact set on APIs.io includes an OpenAPI specification, an API reference, and 1 Naftiko capability spec.

OpenAPI Specification

fortellis-user-service-openapi.yml Raw ↑
swagger: '2.0'
info:
  version: "45.0.0"
  title: Booking Sessions
  description: |
    # Service Sessions - Service - Booking Sessions Spec
    This spec describes an API implementation that allows a solution to book service sessions to a car dealership.

    # What does this API do?
    With this spec, customers can use a solution to perform the following:
    
    * Create a booking session
    * Get the items in a booking session
    * Add items to the booking session
    * Remove items from a booking session
    * Query the service item by the identifier
    * Query the store
    * Query the store availability
    * Query the stores available session slots
    * Book the appointment     

    # Intended Audience
    This spec gives API Providers the design for APIs that allow dealers to book sessions online at different stores.
    This spec can give a design for a small API implementation or a large chain of dealerships that share a solution for booking service sessions. 
  contact:
    name: Developer Evangelists
    url: https://fortellis.io/contact-us
    email: [email protected]
securityDefinitions:
  permission-model:
    type: oauth2
    flow: implicit
    authorizationUrl: https://identity.fortellis.io/oauth2/
    scopes:
      anonymous: Permissions to query and read parts
security:
  - permission-model:
    - 'anonymous'
tags:
  - Testing Tag
host: api.fortellis.io
basePath: /service/sessions/v4/
schemes: 
  - https
paths:
  # Commands
  /booking-sessions:
    post:
      summary: Create a bookingSession
      tags:
        - Service Booking
      produces:
        - application/json
      consumes: 
        - application/json
      description: Creates a Booking Session. This session encapsulates the process of establishing the vehicle to be serviced, what services will be performed, what customer transportation is requested, and which available appointment slots are available.
      operationId: createBookingSession
      responses:
        '201':
          $ref: "#/responses/Created"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/header.Content-Type"
        - $ref: "#/parameters/body.CreateBookingSessionPayload"
  /booking-sessions/{bookingSessionId}/items:
    post:
      produces: 
        - application/json
      consumes: 
        - application/json
      summary: Adds a requested service item to the Booking Session
      tags:
        - Service Booking
      description: Adds a requested service item to the Booking Session
      operationId: addBookingSessionItem
      responses:
        '201':
          $ref: "#/responses/Created"
        '400':
          $ref: "#/responses/BadRequest"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/header.Content-Type"
        - $ref: "#/parameters/path.bookingSessionId"
        - $ref: "#/parameters/body.AddItemPayload"
    get:
      consumes: 
        - application/json
      summary: Queries the service items of the Booking Session
      tags:
        - Service Booking
      description: Queries the requested service items of the Booking Session
      operationId: queryBookingSessionItems
      produces:
        - application/json
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/path.bookingSessionId"
      responses:
        '200':
          $ref: "#/responses/items"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
        '410':
          $ref: "#/responses/Gone"
  /booking-sessions/{bookingSessionId}/items/{itemId}:
    post:
      produces: 
        - application/json
      consumes: 
        - application/json
      summary: Updates a requested service item to the Booking Session
      tags:
        - Service Booking
      description: Updates a requested service item to the Booking Session
      operationId: updateBookingSessionItem
      responses:
        '200':
          $ref: "#/responses/OK"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/header.Content-Type"
        - $ref: "#/parameters/path.bookingSessionId"
        - $ref: "#/parameters/path.itemId"
        - $ref: "#/parameters/body.UpdateItemPayload"
    get:
      consumes: 
        - application/json
      produces: 
        - application/json
      summary: Queries a requested service item by identifier
      tags:
        - Service Booking
      description: Queries a requested service item by identifier
      operationId: queryRequestedServiceItemById
      responses:
        '200':
          $ref: "#/responses/items"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
        '410':
          $ref: "#/responses/Gone"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/path.bookingSessionId"
        - $ref: "#/parameters/path.itemId"
    delete:
      consumes: 
        - application/json
      produces: 
        - application/json
      summary: Removes a service item from the Booking Session
      tags:
        - Service Booking
      description: Removes a service item from the Booking Session
      operationId: removeBookingSessionItem
      responses:
        '200':
          $ref: "#/responses/OK"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/header.Content-Type"
        - $ref: "#/parameters/path.bookingSessionId"
        - $ref: "#/parameters/path.itemId"
  /booking-sessions/{bookingSessionId}/available-stores:
    get:
      consumes: 
        - application/json
      produces: 
        - application/json
      summary: Queries the store availability for appointments for booking
      tags:
        - Service Booking
      description: Queries the store availability for appointments for booking
      operationId: queryBookingSessionStoreAvailability
      responses:
        '200':
          $ref: "#/responses/AvailableStore"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
        '410':
          $ref: "#/responses/Gone"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/path.bookingSessionId"
  /booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots:
    get:
      consumes: 
        - application/json
      produces: 
        - application/json
      summary: Queries the available appointment slots by store
      tags:
        - Service Booking
      description: Queries the available appointment slots by store
      operationId: queryBookingSessionsAvailableStoreSlots
      responses:
        '200':
          $ref: "#/responses/Slot"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
        '410':
          $ref: "#/responses/Gone"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/path.bookingSessionId"
        - $ref: "#/parameters/path.storeId"
  /booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots/{slotId}:
    get:
      consumes: 
        - application/json
      produces: 
        - application/json
      summary: Queries an available appointment slot
      tags:
        - Service Booking
      description: Queries an available appointment slot
      operationId: queryBookingSessionsAvailableSlot
      responses:
        '200':
          $ref: "#/responses/Slot"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
        '410':
          $ref: "#/responses/Gone"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/path.bookingSessionId"
        - $ref: "#/parameters/path.storeId"
        - $ref: "#/parameters/path.slotId"
    post:
      consumes: 
        - application/json
      produces: 
        - application/json
      summary: Books an appointment slot. This is the final step in the appointment booking process.
      tags:
        - Service Booking
      description: Books an appointment slot. This is the final step in the appointment booking process.
      operationId: bookAppointmentSlot
      responses:
        '201':
          $ref: "#/responses/Created"
        '400':
          $ref: "#/responses/BadRequest"
        '403':
          $ref: "#/responses/Forbidden"
        '404':
          $ref: "#/responses/NotFound"
        '410':
          $ref: "#/responses/Gone"
      parameters:
        - $ref: "#/parameters/header.Request-Id"
        - $ref: "#/parameters/header.Subscription-Id"
        - $ref: "#/parameters/header.Authorization"
        - $ref: "#/parameters/header.Content-Type"
        - $ref: "#/parameters/path.bookingSessionId"
        - $ref: "#/parameters/path.storeId"
        - $ref: "#/parameters/path.slotId"
parameters:
  header.Request-Id:
    name: Request-Id
    required: true
    type: string
    in: header
    description: A correlation ID that should be returned back to the caller to indicate the return of the given request
  header.Subscription-Id:
    name: Subscription-Id
    in: header
    required: true
    type: string
    format: guid
    description: The Fortellis Marketplace subscription identifier between a user entity and the solution. For sample responses use the Subscription-Id 'test'.
  header.Authorization:
    name: Authorization
    in: header
    required: true
    type: string
    format: guid
    description: Provides authorization to access Fortellis APIs. For calling a Fortellis Provider, this must be an OAuth 2.0 token issued by the Fortellis authorization server, but you may call the simulator platform with Basic Authorization using your API key and secret.
  header.Content-Type:
    description: This field shows the content type that the client sent. 
    name: Content-Type
    in: header
    required: true
    type: string
    enum:
      - application/json
  body.CreateBookingSessionPayload:
    name: CreateBookingSessionPayload
    in: body
    description: The bookingSession parameters.
    schema:
      $ref: '#/definitions/CreateBookingSessionPayload'
  path.bookingSessionId:
    name: bookingSessionId
    in: path
    description: The identifier of the bookingSession
    required: true
    type: string
  body.AddItemPayload:
    name: AddItemPayload
    in: body
    description: The requested bookingSession
    schema:
      $ref: '#/definitions/AddItemPayload'
  path.itemId:
    name: itemId
    in: path
    description: The identifier of the item
    required: true
    type: string
  body.UpdateItemPayload:
    name: UpdateItemPayload
    in: body
    description: The item update parameters
    schema:
      $ref: '#/definitions/AddItemPayload'
  path.storeId:  
    name: storeId
    in: path
    type: string
    format: uuid
    description: The store identifier => 000001
    required: true
  path.slotId:
    name: slotId
    in: path
    type: string
    format: uuid
    description: The slot identifier
    required: true
  query.vehicleSpecId:
    name: vehicleSpecId
    in: query
    type: string
    description: Filters the appointments by vehicle.
  query.customerId:
    name: customerId
    in: query
    type: string
    description: Filters the appointments by customer.
  query.advisorId:
    name: advisorId
    in: query
    type: string
    description: Filters the appointments by service advisor.
  query.startDateTime:
    name: startDateTime
    in: query
    type: string
    description: Filters the appointments by a start date/time.
  query.endDateTime: 
    name: endDateTime
    in: query
    type: string
    description: Filters the appointments by an end date/time.
  query.status:
    name: status
    in: query
    type: string
    description: Filters the appointments by status.
  path.appointmentId:
    name: appointmentId
    in: path
    description: The identifier of the appointment
    required: true
    type: string
definitions: 
  LinksObject:
    description: This is the common links object across all API calls.
    type: object
    properties:
      bookingSessions:
        type: object
        properties:
          functions:
            type: string
          href:
            type: string
          methods: 
            type: object
            properties: 
              POST:
                type: boolean
              GET:
                type: boolean
              DELETE: 
                type: boolean
      bookingSessionItems:
        type: object
        properties:
          functions:
            type: string
          href:
            type: string
          methods: 
            type: object
            properties: 
              POST:
                type: boolean
              GET:
                type: boolean
              DELETE: 
                type: boolean
      bookingSessionItem:
        type: object
        properties:
          functions:
            type: string
          href:
            type: string
          methods: 
            type: object
            properties: 
              POST:
                type: boolean
              GET:
                type: boolean
              DELETE: 
                type: boolean
      bookingSessionAvailableStores:
        type: object
        properties:
          functions:
            type: string
          href:
            type: string
          methods: 
            type: object
            properties: 
              POST:
                type: boolean
              GET:
                type: boolean
              DELETE: 
                type: boolean
      bookingSessionAvailableStoreSlots:
        type: object
        properties:
          functions:
            type: string
          href:
            type: string
          methods: 
            type: object
            properties: 
              POST:
                type: boolean
              GET:
                type: boolean
              DELETE: 
                type: boolean
      bookingSessionAvailableStoreSlot:
        type: object
        properties:
          functions:
            type: string
          href:
            type: string
          methods: 
            type: object
            properties: 
              POST:
                type: boolean
              GET:
                type: boolean
              DELETE: 
                type: boolean
    required:
      - bookingSessions
      - bookingSessionItems
      - bookingSessionItem
      - bookingSessionAvailableStores
      - bookingSessionAvailableStoreSlots
      - bookingSessionAvailableStoreSlot
    example:
      bookingSessions:
        functions: "Create a booking session."
        href: '/booking-sessions'
        methods:
          GET: false
          POST: true
          DELETE: false
      bookingSessionItems:
        functions: "Create and query session items."
        href: '/booking-sessions/{bookingSessionId}/items'
        methods:
          GET: true
          POST: true
          DELETE: false
      bookingSessionItem:
        functions: "Create and delete session items."
        href: '/booking-sessions/{bookingSessionId}/items/{itemId}'
        methods:
          GET: false
          POST: true
          DELETE: true
      bookingSessionAvailableStores:
        functions: "Query the available stores."
        href: '/booking-sessions/{bookingSessionId}/available-stores'
        methods:
          GET: true
          POST: false
          DELETE: false
      bookingSessionAvailableStoreSlots:
        functions: "Query slots that an available store has."
        href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots'
        methods:
          GET: true
          POST: false
          DELETE: false
      bookingSessionAvailableStoreSlot:
        functions: "Book and query a slot."
        href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots/{slotId}'
        methods:
          GET: true
          POST: true
          DELETE: false 
    
  BookingSession:
    description: This confirms the booking session when you have booked something.
    required: 
      - bookingSessionId
      - storeIdList
      - vehicleSpecId
      - vehicleTypeId
      - customerId
      - searchWindowStart
      - searchWindowEnd
      - transportationOptions
      - selectedTransportationOptions
      - links
    properties: 
      bookingSessionId:
        type: string
        description: The identifier of the booking session
      storeIdList:
        type: array
        items:
          type: string
        description: The identifiers of the stores to search
      vehicleSpecId:
        type: string
        description: The vehicle service model identifier
      vehicleTypeId:
        type: string
        description: The identifier of the vehicle type
      customerId:
        type: string
        description: The unique identifier of the customer
      searchWindowStart:
        type: string
        format: date-time
        description: The the start of the search window
      searchWindowEnd:
        type: string
        format: date-time
        description: The the end of the search window
      transportationOptions:
        type: array
        items:
          $ref: '#/definitions/TransportationOption'
        description: The available transportation options given the current filters
      selectedTransportationOptions:
        type: array
        items:
          type: string
        description: The identifiers of the selected available transportation options
      links:
        $ref: "#/definitions/LinksObject"
    example:
      bookingSessionId: "0fe1767a-0556-4661-9991-19dcfbb74421"
      storeIdList:
        - "29e1d17e-1ccf-4992-8ee0-e28dd75a3f75"
      vehicleSpecId: "CHEV-CORVST-2017-US"
      vehicleTypeId: "d062d8d8-d2b4-4c28-8060-a2f6ed9c9257"
      customerId: "73589670-4891-4204-aa61-1ffe7ceea50e"
      searchWindowStart: "2018-02-20T08:00:00Z"
      searchWindowEnd: "2018-02-21T16:00:00Z"
      transportationOptions:
        - transportationOptionId: "45e41b0d-099e-46d6-9ebd-ea35a2cd9f19"
          description: "Customer waiting"
      selectedTransportationOptions:
        - "WAITER"
      links:
        bookingSessions:
          functions: "Create a booking session."
          href: '/booking-sessions'
          methods:
            GET: false
            POST: true
            DELETE: false
        bookingSessionItems:
          functions: "Create and query session items."
          href: '/booking-sessions/{bookingSessionId}/items'
          methods:
            GET: true
            POST: true
            DELETE: false
        bookingSessionItem:
          functions: "Create and delete session items."
          href: '/booking-sessions/{bookingSessionId}/items/{itemId}'
          methods:
            GET: false
            POST: true
            DELETE: true
        bookingSessionAvailableStores:
          functions: "Query the available stores."
          href: '/booking-sessions/{bookingSessionId}/available-stores'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlots:
          functions: "Query slots that an available store has."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlot:
          functions: "Book and query a slot."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots/{slotId}'
          methods:
            GET: true
            POST: true
            DELETE: false
  Error:
    description: This is the description of the error that you are getting.
    required:
      - code
      - message
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
    example:
      code: 400
      message: Bad Request
  AvailableStore:
    description: This shows when the store has available slots. 
    required:
      - storeId
      - slots
      - links
    properties:
      storeId:
        type: string
        format: uuid
        description: The identifier of the store
      slots:
        type: array
        items:
          $ref: '#/definitions/Slot'
        description: The available appointment slots
      links:
        $ref: "#/definitions/LinksObject"
    example: 
      storeId: '01b1a2a6-257d-4b35-b4c2-ae08153033ca'
      slots: 
        - time
        - time
        - time
      links:
        bookingSessions:
          functions: "Create a booking session."
          href: '/booking-sessions'
          methods:
            GET: false
            POST: true
            DELETE: false
        bookingSessionItems:
          functions: "Create and query session items."
          href: '/booking-sessions/{bookingSessionId}/items'
          methods:
            GET: true
            POST: true
            DELETE: false
        bookingSessionItem:
          functions: "Create and delete session items."
          href: '/booking-sessions/{bookingSessionId}/items/{itemId}'
          methods:
            GET: false
            POST: true
            DELETE: true
        bookingSessionAvailableStores:
          functions: "Query the available stores."
          href: '/booking-sessions/{bookingSessionId}/available-stores'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlots:
          functions: "Query slots that an available store has."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlot:
          functions: "Book and query a slot."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots/{slotId}'
          methods:
            GET: true
            POST: true
            DELETE: false      
  Ok:
    description: This describes a successful POST to update an item.
    required:
      - success
      - links
    properties:
      success: 
        type: string        
      links: 
        $ref: "#/definitions/LinksObject"
    example:
      success: OK 
      links:
        bookingSessions:
          functions: "Create a booking session."
          href: '/booking-sessions'
          methods:
            GET: false
            POST: true
            DELETE: false
        bookingSessionItems:
          functions: "Create and query session items."
          href: '/booking-sessions/{bookingSessionId}/items'
          methods:
            GET: true
            POST: true
            DELETE: false
        bookingSessionItem:
          functions: "Create and delete session items."
          href: '/booking-sessions/{bookingSessionId}/items/{itemId}'
          methods:
            GET: false
            POST: true
            DELETE: true
        bookingSessionAvailableStores:
          functions: "Query the available stores."
          href: '/booking-sessions/{bookingSessionId}/available-stores'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlots:
          functions: "Query slots that an available store has."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlot:
          functions: "Book and query a slot."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots/{slotId}'
          methods:
            GET: true
            POST: true
            DELETE: false 
  Appointment:
    description: This is the appointment and all related information.
    required:
      - appointmentId
      - storeId
      - vehicleSpecId
      - customerId
      - advisorId
      - transportationReservation
      - status
      - links
    properties:
      appointmentId:
        type: string
        description: The unique identifier of the appointment.
      repairOrderId:
        type: string
        description: The unique identifier of the repair order generated from the appointment.
      storeId:
        type: string
        description: The unique indentifier of the store.
      vehicleSpecId:
        type: string
        description: The unique identifier of the vehicle.
      customerId:
        type: string
        description: The unique identifier of the customer.
      advisorId:
        type: string
        description: The unique identifier of the service advisor
      transportationReservation:
        $ref: '#/definitions/TransportationReservation'
      status:
        type: string
        enum:
          - BOOKED
          - CANCELLED
          - NOSHOW
      links: 
        $ref: "#/definitions/LinksObject"
    example:
      appointmentId: "79667722-fcc4-4cd8-995b-75d566bbba1b"
      storeId: "85254b70-c4b0-4461-937f-34d3502796bd"
      vehicleSpecId: "CHEV-CORVST-2017-US"
      customerId: "e3ad5443-72a7-4423-af2c-a5d7d510a39e"
      advisorId: "282fc845-868d-4678-b06c-82a6794e6309"
      accommodation:
        accommodationId: "fd133724-3450-47c3-b4a4-f888dbf74e40"
        description: "Courtesy Loaner Car"
      dateTime: "2019-10-11T09:30:00+00:00"
      status: "BOOKED"
      transportationReservation:
        transportationReservationId: "fd133724-3450-47c3-b4a4-f888dbf74e40"
        description: "A courtesy loaner car has been reserved for Ms. Jones"
      links:
        bookingSessions:
          functions: "Create a booking session."
          href: '/booking-sessions'
          methods:
            GET: false
            POST: true
            DELETE: false
        bookingSessionItems:
          functions: "Create and query session items."
          href: '/booking-sessions/{bookingSessionId}/items'
          methods:
            GET: true
            POST: true
            DELETE: false
        bookingSessionItem:
          functions: "Create and delete session items."
          href: '/booking-sessions/{bookingSessionId}/items/{itemId}'
          methods:
            GET: false
            POST: true
            DELETE: true
        bookingSessionAvailableStores:
          functions: "Query the available stores."
          href: '/booking-sessions/{bookingSessionId}/available-stores'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlots:
          functions: "Query slots that an available store has."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlot:
          functions: "Book and query a slot."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots/{slotId}'
          methods:
            GET: true
            POST: true
            DELETE: false 
  Item:
    description: This give the service package that the store would like to offer to the consumer.
    required: 
      - itemId
      - text
      - comment
      - id
      - specificationId
      - links
    properties:
      itemId:
        type: string
        description: The unique identifier of the item
      text:
        type: string
        description: A text field.
      comment:
        type: string
        description: A comment field.
      id:
        type: string
        description: The service package Id.  Unique when coupled with vehicleSpecId
      specificationId:
        type: string
        description: The specific instance of the service package.
      links:
        $ref: "#/definitions/LinksObject"
    example:
      itemId: "f74d81c1-fe33-4f1a-a5f6-ace24da670a8"
      text: "30,000 mile service - 2014 Toyota Camry"
      id: "BY28"
      comment: "Customer requested service."
      specificationId: "21732242"
      links:
        bookingSessions:
          functions: "Create a booking session."
          href: '/booking-sessions'
          methods:
            GET: false
            POST: true
            DELETE: false
        bookingSessionItems:
          functions: "Create and query session items."
          href: '/booking-sessions/{bookingSessionId}/items'
          methods:
            GET: true
            POST: true
            DELETE: false
        bookingSessionItem:
          functions: "Create and delete session items."
          href: '/booking-sessions/{bookingSessionId}/items/{itemId}'
          methods:
            GET: false
            POST: true
            DELETE: true
        bookingSessionAvailableStores:
          functions: "Query the available stores."
          href: '/booking-sessions/{bookingSessionId}/available-stores'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlots:
          functions: "Query slots that an available store has."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots'
          methods:
            GET: true
            POST: false
            DELETE: false
        bookingSessionAvailableStoreSlot:
          functions: "Book and query a slot."
          href: '/booking-sessions/{bookingSessionId}/available-stores/{storeId}/slots/{slotId}'
          methods:
            GET: true
            POST: true
            DELETE: false
  Slot:
    description: This field indicates the time slot that the store selects a time slot to offer the transportation.
    required:
      - slotId
      - storeId
      - dateTime
      - transportationOffer
      - links
    properties:
      slotId:
        type: string
        format: uuid
        description: The identifier of the slot
      storeId:
        type: string
        format: uuid
        description: The identifier of the store
      dateTime:
        type: string
        format: date-time
        description: The date and time of the slot
      transportationOffer:
        $ref: '#/definitions/TransportationOffer'
      links:
        $ref: "#/definitions/LinksObject"
    example:
      slotId: "85254b70-c4b0-4461-937f-34d3502796bd"
      dateTime: "2019-10-11T09:30:00+00:00"
      storeId: "85254b70-c4b0-4461-937f-34d3502796bd"
      transportationOffer:
        transportationOfferId: "fd133724-3450-47c3-b4a4-f888dbf74e40"
        description: "Midsized loaner car"
        cost:
          baseCost: 0.0
          currencyType: "GBP"
      links:
        bookingSessions:
          functions: "Create a booking session."
          href: '/booking-sessions'
          methods:
  

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cdk-global/refs/heads/main/openapi/fortellis-user-service-openapi.yml