openapi: 3.0.0
info:
  version: 2.021.1
  title: PartsTech API
  description: |2

    # Rate Limiting

    Requests can be limited by user requests, by private partner requests and by all requests with partner's credentials.
    It has several time intervals:
      - *Per day* restricts count of requests made in one day.
      - *Requests per second* restricts count of requests made in one second.
      - *Concurrent requests* restricts count of parallel requests.
      - *Sliding 15 minutes* restricts count of requests made in last 15 minutes.

    **Note**: Every method has own separate sets of the limits.

    ## Headers
    Use the HTTP headers in order to understand where the application is at for a given rate limit, on the method that was just utilized.
    The HTTP header is returned only for one general limit or for limit that user reached.


    *Headers*
      - the rate limit ceiling for that given endpoint:
      ```
      x-rate-limit-limit: 1000
      ```
      - the number of requests left:
      ```
      x-rate-limit-remaining: 570
      ```
      - the remaining window before the rate limit resets, in UTC [epoch seconds](https://en.wikipedia.org/wiki/Unix_time):
      ```
      x-rate-limit-reset: 1552003200
      ```

    When an application exceeds the rate limit for a given standard API endpoint,
    the API will return a HTTP 429 “Too Many Requests” response code, and the following error will be returned in the response body:
    ```
    {
      "error": {
        "code": "TooManyRequests",
        "message": "Some description"
      }
    }
    ```

    # Pagination

    When you call an API method to retrieve information, it can be returned to you in portions.
    Check out more detail below on pagination in API methods, including how to use them and which methods follow the pattern.

    API methods that supports pagination will return the `Link` header. It will include available urls of `first`, `last`, `previous` and `next` pages.

    ```
    Link: <https://api.partstech.com/purchases?page=1>; rel="first"
    Link: <https://api.partstech.com/purchases?page=1>; rel="previous"
    Link: <https://api.partstech.com/purchases?page=3>; rel="next"
    Link: <https://api.partstech.com/purchases?page=142>; rel="last"
    ```

    # MOTOR Compliance Requirements

    All MOTOR-powered endpoints (Labor, Maintenance Schedules, Fluids, and Specifications) return a `Link` header
    containing the URL to MOTOR's OEM Compliance Requirements documentation.

    The header follows the [RFC 8288 (Web Linking)](https://tools.ietf.org/html/rfc8288) format:

    ```
    Link: <https://www.motor.com/oem-compliance-requirements/>; rel="compliance"
    ```

    # Errors

    The API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format:

    ```
    {
      "error": {
        "code": "InternalErrorCode",
        "message": "Some description"
      }
    }
    ```

    # Error Responses
    Some default error responses used in the API.

    Http Code  | Explanation | Content Type | Used error codes
    ----------------|-------------|------------------|---------
    400 | Bad Request. The request was unacceptable. | `application/json` | `InvalidRequestSyntax`
    401 | Unauthorized. The request requires user or partner credentials or bearer token. Also used for invalid credentials or bearer token. | `application/json` | `InvalidToken`, `UserAuthenticationFailed`, `PartnerAuthenticationFailed`
    402 | Request Failed. The parameters were valid but the request failed. | `application/json` | Different codes, depend on method.
    403 | Forbidden. Also used for unauthorized requests such as improper credentials scopes or permissions issues. | `application/json` | `IncorrectMode`, `DisabledApiUsage`, `UserIsNotActivated`, `HaveNotPermission`, `NotAvailableMethod`
    404 | Some data in the request is not found. Or incorrect url was used. | `application/json`, `text/html`, no content | `NotFound`
    405 | Method not allowed. | `application/json`, `text/html`, no content |
    406 | Unacceptable content type. Client sent an accepts header for a content type which does not exist on the server. | No content |
    409 | Locked. One of the another operations that is in progress blocks this method call. | `application/json` | `LockedSession`
    429 | Too Many Requests | `application/json` | `TooManyRequests`
    432 | Integration Error | `application/json` |
    500 | Internal Server Error. (This is rare.) | `application/json` | `InternalError`
    501 | Not Implemented | `application/json` | `MethodNotImplemented`
    503 | The backend server is not available. (This is rare.) | No content |
  x-logo:
    url: https://partstech.com/wp-content/uploads/2025/03/PartsTech_OEC-compnay_logo.svg
    altText: PartsTech logo
servers:
- url: https://api.partstech.com
  description: Production server
- url: https://api.beta.partstech.com
  description: Beta server
tags:
- name: custom-cart
  description: Custom Cart
  x-displayName: Custom Cart
- name: motor-labor
  description: Labor
  x-displayName: Labor
- name: mitchell1
  description: Vehicles
  x-displayName: Vehicles
- name: mitchell1-labor
  description: Labor
  x-displayName: Labor
- name: jobs
  description: Jobs
  x-displayName: Jobs
- name: motor-maintenance-schedules
  description: Maintenance Schedules
  x-displayName: Maintenance Schedules
- name: motor-fluids
  description: Fluids
  x-displayName: Fluids
- name: motor-specifications
  description: Specifications
  x-displayName: Specifications
- name: search
  description: Search
  x-displayName: Search
- name: parts
  description: Parts
  x-displayName: Parts
- name: brands
  description: Brands
  x-displayName: Brands
- name: quoting
  description: Quoting
  x-displayName: Quoting
- name: tires
  description: Tires
  x-displayName: Tires
- name: auth
  description: |
    A valid JSON Web Token (JWT) is required to access API methods. A JWT access token must be included in the authorization header of each request in the following Bearer schema:
    ```
    Authorization: Bearer <accessToken>
    ```
    Use the Get Access method to get a valid access token. Each access token expires after 60 minutes.
  x-displayName: Authentication and Access
- name: punchout_quote
  description: Quote Methods
  x-displayName: Quotes
- name: punchout-cart
  description: Cart with Punchout
  x-displayName: Cart with Punchout
- name: session-cart
  description: Cart by Session
  x-displayName: Cart by Session
- name: callback-cart
  description: Callback
  x-displayName: Callback
- name: punchout-orders
  description: Punchout Orders
  x-displayName: Punchout Orders
- name: vin
  description: VIN Methods
  x-displayName: VIN
- name: user
  description: User Methods
  x-displayName: User
- name: shop
  description: Shop
  x-displayName: Shop
- name: supplier_preferences
  description: Supplier Preferences
  x-displayName: Supplier Preferences
- name: orders
  description: Orders
  x-displayName: Orders
- name: users
  description: Users methods
  x-displayName: Users
- name: shops
  description: Shop methods
  x-displayName: Shops
- name: partner-orders
  description: Orders methods
  x-displayName: Orders
- name: auto-connect
  description: Easy Registration & Auto-Connect API
  x-displayName: Easy Registration & Auto-Connect API
- name: suppliers
  description: Supplier methods
  x-displayName: Suppliers
- name: pcdb
  description: Product Characteristics Database
  x-displayName: Product Characteristics DB
- name: vcdb
  description: Vehicle Configuration Database
  x-displayName: Vehicle Configuration DB
- name: ex-permissions
  description: EX Permissions
  x-displayName: EX Permissions
- name: local-inventory
  description: Local inventory
  x-displayName: Local inventory
x-tagGroups:
- name: Authentication
  tags:
  - auth
- name: Punchout
  tags:
  - punchout_quote
- name: Cart
  tags:
  - punchout-cart
  - session-cart
  - callback-cart
  - punchout-orders
  - custom-cart
- name: Catalog
  tags:
  - vin
  - search
  - quoting
  - parts
  - tires
  - brands
- name: Taxonomy
  tags:
  - pcdb
  - vcdb
  - jobs
- name: Profile
  tags:
  - user
  - shop
  - supplier_preferences
  - orders
- name: Partner
  tags:
  - users
  - shops
  - ex-permissions
  - partner-orders
  - auto-connect
- name: Others
  tags:
  - suppliers
  - local-inventory
- name: Motor Taxonomy
  tags:
  - motor-labor
  - motor-maintenance-schedules
  - motor-fluids
  - motor-specifications
- name: Mitchell1 Taxonomy
  tags:
  - mitchell1
  - mitchell1-labor
paths:
  /oauth/access:
    post:
      summary: Get Access
      description: |
        Generates and returns a valid access token to use in request headers for access to methods.

        Each method requires either `user` or `partner` access type for authorization. The required access type for a given method can be viewed in the Authorizations section of each method's documentation.
         - To get a valid `accessToken` for methods that require `user` access type, provide `UserCredentials` and the value `user` for `accessType` in the request. For punchout integrations, all Punchout and Cart methods require `user` access type.
         - To get a valid `accessToken` for methods that require `partner` access type, provide `PartnerCredentials` and the value `partner` for `accessType` in the request.

        Check out the Request Body Schema below to view what user and partner information is required in the `UserCredentials` and `PartnerCredentials` objects.

        The response contains a valid `accessToken` that must be included in the authorization header of requests to access other methods. The authorization header format is ```Authorization: Bearer <accessToken>```
      operationId: getAcessToken
      x-operation-name: CreateAccessToken
      tags:
      - auth
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - credentials
              - accessType
              properties:
                accessType:
                  type: string
                  description: Specify an access type for method authorization
                  enum:
                  - user
                  - partner
                credentials:
                  oneOf:
                  - $ref: "#/components/schemas/UserCredentials"
                  - $ref: "#/components/schemas/PartnerCredentials"
      responses:
        "200":
          $ref: "#/components/responses/Tokens"
        "400":
          $ref: "#/components/responses/InvalidRequest"
        "401":
          $ref: "#/components/responses/AuthenticationFailed"
        "403":
          $ref: "#/components/responses/ForbiddenError"
        "406":
          description: Unacceptable content type. Client sent an accepts header for
            a content type which does not exist on the server.
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          description: The backend server is not available.
  /oauth/refresh:
    post:
      summary: Refresh Access
      deprecated: true
      description: |
        Refresh an access token.
        A response is the same to [`/oauth/access`](#operation/getAcessToken)
      operationId: refreshAccessToken
      x-operation-name: RefreshAccessToken
      tags:
      - auth
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - refreshToken
              properties:
                refreshToken:
                  type: string
                  description: A JWT token received in the Access request
                  example: Some JWT token
      responses:
        "200":
          $ref: "#/components/responses/Tokens"
        "401":
          $ref: "#/components/responses/InvalidToken"
  /punchout/quote/create:
    post:
      summary: Create quote
      description: |
        Creates a new punchout session and returns a unique `sessionId` and `redirectUrl`. The `redirectUrl` is the session URL where your app will send the user to procure parts and tires. Visiting a `redirectUrl` will automatically log the visitor into the user account that the session was created for. Take care not to send one user to a session that was created for a different user. Sessions expire after 120 days for platform performance and stability.

        You can include vehicle identifiers and search parameters in your request. A vehicle identifier will let PartsTech automatically select the vehicle in that session, while a search parameter will trigger an automatic search when the user is sent to the session.

        Accepted **vehicle identifiers**:
          - VIN
          - Plate & State
          - PartsTech Vehicle ID
          - Year, Make, Model, Submodel, Engine

        Accepted **search parameters**:
          - Part Number
          - Part Type ID
          - Keyword
          - Tire Size

        Check out the Request Body Schema below for the possible parameters.
      operationId: createQuote
      x-operation-name: CommandPunchoutQuoteCreate
      tags:
      - punchout_quote
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                searchParams:
                  nullable: true
                  type: object
                  oneOf:
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParams"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByTireId"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByTireSize"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByTireId"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByTireSize"
                  - $ref: "#/components/schemas/VinSearchParams"
                  - $ref: "#/components/schemas/VinSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VinSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/VinSearchParamsByTireId"
                  - $ref: "#/components/schemas/VinSearchParamsByTireSize"
                  - $ref: "#/components/schemas/PlateSearchParams"
                  - $ref: "#/components/schemas/PlateSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PlateSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PlateSearchParamsByTireId"
                  - $ref: "#/components/schemas/PlateSearchParamsByTireSize"
                  - $ref: "#/components/schemas/TireSizeSearchParams"
                  - $ref: "#/components/schemas/PartNumberSearchParams"
                urls:
                  $ref: "#/components/schemas/URLs"
                additionalInformation:
                  $ref: "#/components/schemas/PunchoutAdditionalInformation"
                settings:
                  $ref: "#/components/schemas/QuoteSettings"
            examples:
              PunchoutVehiclePartTypeSearch:
                summary: Search by Vehicle and PartTypeIds
                description: Make a quote with a search by Vehicle and PartTypeIds.
                  `searchParams` accepts only `vehicleParams` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 21
                      modelId: 104
                      subModelId: 3512
                      engineId: 2062
                      engineParams:
                        engineVinId: 31
                        engineDesignationId: 1
                        engineVersionId: 73
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    partTypeIds:
                    - 5132
                    - 10328
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
                  settings:
                    poNumber: 123
              PunchoutVehicleKeywordSearch:
                summary: Search by Vehicle and Keyword
                description: Make a quote with a search by Vehicle and PartTypeIds.
                  `searchParams` accepts only `vehicleParams` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 21
                      modelId: 104
                      subModelId: 3512
                      engineId: 2062
                      engineParams:
                        engineVinId: 31
                        engineDesignationId: 1
                        engineVersionId: 73
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    keyword: Air Filter
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
              PunchoutVehicleTireIdSearch:
                summary: Search by Vehicle and TireId
                description: Make a quote with a search by Vehicle and TireId. `searchParams`
                  accepts only `vehicleParams` and `tireId` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 76
                      modelId: 1026
                      subModelId: 3571
                      engineId: 2578
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 4833
                        engineVersionId: 3
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    tireId: 128618
              PunchoutVehicleTireSizeSearch:
                summary: Search by Vehicle and Tire Size
                description: "Make a quote with a search by Vehicle and Tire Size.\
                  \ `searchParams` accepts only `vehicleParams`, `width`, `height`\
                  \ and `rim` parameters."
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 76
                      modelId: 1026
                      subModelId: 3571
                      engineId: 2578
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 4833
                        engineVersionId: 3
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    width: 40
                    height: 14.5
                    rim: 18
              VehicleIdPartTypeSearch:
                summary: Search by PartsTech Vehicle ID and PartTypeIds
                description: Make a quote with a search by PartsTech Vehicle ID and
                  PartTypeIds. `searchParams` accepts only `vehicleId` and `partTypeIds`
                  parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    partTypeIds:
                    - 5132
                    - 10328
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
              VehicleIdKeywordSearch:
                summary: Search by PartsTech Vehicle ID and Keyword
                description: Make a quote with a search by PartsTech Vehicle ID and
                  Keyword. `searchParams` accepts only `vehicleId` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    keyword: Air Filter
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
              VehicleIdTireIdSearch:
                summary: Search by PartsTech Vehicle ID and TireId
                description: Make a quote with a search by PartsTech Vehicle ID and
                  TireId. `searchParams` accepts only `vehicleId` and `tireId` parameters.
                value:
                  searchParams:
                    vehicleId: 586988
                    tireId: 128618
              VehicleIdTireSizeSearch:
                summary: Search by PartsTech Vehicle ID and Tire Size
                description: "Make a quote with a search by PartsTech Vehicle ID and\
                  \ Tire Size. `searchParams` accepts only `vehicleId`, `width`, `height`\
                  \ and `rim` parameters."
                value:
                  searchParams:
                    vehicleId: 586988
                    width: 40
                    height: 14.5
                    rim: 18
              VinPartTypeSearch:
                summary: Search by VIN and PartTypeIds
                description: Make a quote with a search by VIN and PartTypeIds. `searchParams`
                  accepts only `vin` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vin: somevin
                    partTypeIds:
                    - 1005
                    - 1006
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
              VinKeywordSearch:
                summary: Search by VIN and Keyword
                description: Make a quote with a search by VIN and Keyword. `searchParams`
                  accepts only `vin` and `keyword` parameters.
                value:
                  searchParams:
                    vin: somevin
                    keyword: Air Filter
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
              VinTireIdSearch:
                summary: Search by VIN and TireId
                description: Make a quote with a search by VIN and TireId. `searchParams`
                  accepts only `vin` and `tireId` parameters.
                value:
                  searchParams:
                    vin: somevin
                    tireId: 128618
              VinTireSizeSearch:
                summary: Search by VIN and Tire Size
                description: "Make a quote with a search by VIN and Tire Size. `searchParams`\
                  \ accepts only `vin`, `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    vin: somevin
                    width: 40
                    height: 14.5
                    rim: 18
              PlatePartTypeSearch:
                summary: Search by Plate and PartTypeIds
                description: Makes a quote with a search by Plate and PartTypeIds.
                  `searchParams` accepts only `plate` and `partTypeIds` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    partTypeIds:
                    - 1005
                    - 1006
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
              PlateKeywordSearch:
                summary: Search by Plate and Keyword
                description: Makes a quote with a search by Plate and Keyword. `searchParams`
                  accepts only `plate` and `keyword` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    keyword: Air Filter
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
              PlateTireIdSearch:
                summary: Search by Plate and TireId
                description: Makes a quote with a search by Plate and TireId. `searchParams`
                  accepts only `plate` and `tireId` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    tireId: 128618
              PlateTireSizeSearch:
                summary: Search by Plate and Tire Size
                description: "Makes a quote with a search by Plate and Tire Size.\
                  \ `searchParams` accepts only `plate`, `width`, `height` and `rim`\
                  \ parameters."
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    width: 40
                    height: 14.5
                    rim: 18
              TireSizeSearch:
                summary: Search by Tire Size
                description: "Makes a quote with a search by Tire Size. `searchParams`\
                  \ accepts only `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    width: 40
                    height: 14.5
                    rim: 18
              PartNumberSearch:
                summary: Search by PartNumber
                description: Makes a quote with a search by PartNumber. `searchParams`
                  accepts only `partNumber` parameter.
                value:
                  searchParams:
                    partNumber:
                    - 331
                  urls:
                    callbackUrl: http://localhost:80/some-callback-url
                    callbackOrderUrl: http://localhost:80/some-callback-order-url
                    returnUrl: http://localhost:80/some-return-url
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - sessionId
                - redirectUrl
                properties:
                  sessionId:
                    type: string
                    example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                    description: The unique identifier of a punchout session.
                  redirectUrl:
                    type: string
                    description: The session URL.
                    format: url
                    example: https://app.partstech.com/api-search/your_partnerId/your_test_userId/1ag3d2b5240e4jcbbe3ee9c49c929fe4/
  /punchout/quote/update:
    post:
      summary: Update quote
      description: |
        Updates the search params and URLs of a given `sessionId`.

        Returns a `redirectUrl` for the updated session.

        Accepted **vehicle identifiers**:
          - VIN
          - Plate & State
          - PartsTech Vehicle ID
          - Year, Make, Model, Submodel, Engine

        Accepted **search parameters**:
          - Part Number
          - Part Type ID
          - Keyword
          - Tire Size

        Check out the Request Body Schema below for the possible parameters.
      operationId: updateQuote
      x-operation-name: CommandPunchoutQuoteUpdate
      tags:
      - punchout_quote
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
                searchParams:
                  oneOf:
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParams"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByTireId"
                  - $ref: "#/components/schemas/PunchoutVehicleSearchParamsByTireSize"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByTireId"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByTireSize"
                  - $ref: "#/components/schemas/VinSearchParams"
                  - $ref: "#/components/schemas/VinSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VinSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/VinSearchParamsByTireId"
                  - $ref: "#/components/schemas/VinSearchParamsByTireSize"
                  - $ref: "#/components/schemas/PlateSearchParams"
                  - $ref: "#/components/schemas/PlateSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PlateSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PlateSearchParamsByTireId"
                  - $ref: "#/components/schemas/PlateSearchParamsByTireSize"
                  - $ref: "#/components/schemas/TireSizeSearchParams"
                  - $ref: "#/components/schemas/PartNumberSearchParams"
                urls:
                  $ref: "#/components/schemas/URLs"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - sessionId
                - redirectUrl
                properties:
                  sessionId:
                    type: string
                    example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                    description: The unique identifier of a punchout session.
                  redirectUrl:
                    type: string
                    format: url
                    example: https://app.partstech.com/api-search/your_partnerId/your_test_userId/1ag3d2b5240e4jcbbe3ee9c49c929fe4/
                    description: The session URL.
  /punchout/quote/info:
    post:
      summary: Get quote info
      description: |
        Returns details about the punchout session and the `redirectUrl` to open the punchout session.
      operationId: getQuoteInformation
      x-operation-name: QueryPunchoutQuoteInfo
      tags:
      - punchout_quote
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - sessionId
                - quote
                properties:
                  sessionId:
                    type: string
                    example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                    description: The unique identifier of a punchout session.
                  redirectUrl:
                    type: string
                    format: url
                    nullable: true
                    example: https://app.partstech.com/api-search/your_partnerId/your_test_userId/1ag3d2b5240e4jcbbe3ee9c49c929fe4/
                    description: The session URL.
                  quote:
                    type: object
                    required:
                    - status
                    - submitted
                    properties:
                      date:
                        type: string
                        format: date-time
                        description: "The date and time that the session was created.\
                          \ In the format: ISO 8601/RFC 3339, UTC"
                      status:
                        type: string
                        enum:
                        - OPEN
                        - CLOSED
                        description: The session is OPEN until a purchase method is
                          called on the session to order the items in the cart.
                      closedDate:
                        type: string
                        format: date-time
                        nullable: true
                        description: "The date and time that the session was closed.\
                          \ In the format: ISO 8601/RFC 3339, UTC"
                      submitted:
                        type: boolean
                        example: true
                        description: False until one of the cart buttons is used.
                      urls:
                        $ref: "#/components/schemas/URLs"
  /punchout/quote/stock-order:
    post:
      summary: Create Stock Order Quote
      description: |
        Creates a new stock order punchout session with the provided part numbers and quantity of each. Returns a unique `sessionId` for the newly created session and a `redirectUrl` to open the session.

        When opening a stock order session, PartsTech attempts to find the correct parts and place those parts on the correct supplier card. The more part information that is provided in the request, the more accurate and efficient the parts selection will be.

        Providing the `storeId` for each part enables PartsTech to automatically select the correct supplier for each part on the stock order punchout. This saves users a lot of time. In addition to the `partNumber`, providing each part's `partId` and `lineCardId` will enable a much more accurate parts selection. Each Id referenced here can be found in the part data for each part in cart callbacks.
      operationId: createStockOrderQuote
      x-operation-name: CreatePunchoutQuoteStockOrder
      tags:
      - punchout_quote
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - parts
              properties:
                parts:
                  description: Information for one or more parts.
                  type: array
                  items:
                    type: object
                    description: |
                      At least one of `partNumber` or `partId` must be provided. Both may be provided together.
                    properties:
                      partNumber:
                        type: string
                        nullable: true
                        description: The manufacturer part number. Required if `partId` is not provided.
                      partId:
                        type: string
                        nullable: true
                        pattern: '^.{1,}\-.*$'
                        description: PartsTech's ID for a part. Consists of `brandId`-`partNumber`.
                          Makes part selection more accurate. Required if `partNumber` is not provided.
                      quantity:
                        type: integer
                        nullable: true
                        description: The requested quantity for a part. Automatically
                          fills in the quantity for a part.
                      storeId:
                        type: integer
                        nullable: true
                        description: PartsTech's ID for a supplier location. Automatically
                          places a part on the correct supplier card.
                      lineCardId:
                        type: integer
                        nullable: true
                        description: PartsTech's ID for a line code. Makes part selection
                          much more accurate when provided in requests to create a
                          cart or search the PartsTech Catalog.
                  example:
                  - partNumber: 123
                    partId: DFFD-123
                    quantity: 1
                    storeId: 1
                  - partNumber: 124
                    partId: DFFD-124
                    quantity: 2
                    lineCardId: 1
                urls:
                  $ref: "#/components/schemas/URLs"
                additionalInformation:
                  $ref: "#/components/schemas/PunchoutAdditionalInformation"
                settings:
                  $ref: "#/components/schemas/QuoteSettings"
                storeId:
                  description: |
                    PartsTech Id of a store. Defines a tab that will be opened by default on the stock order page.

                    Deprecated. Send storeId for every part.
                  type: integer
                  nullable: true
                  deprecated: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - sessionId
                - redirectUrl
                properties:
                  sessionId:
                    type: string
                    example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                    description: The unique identifier of a punchout session.
                  redirectUrl:
                    type: string
                    format: url
                    example: https://app.partstech.com/api-search/your_partnerId/your_test_userId/1ag3d2b5240e4jcbbe3ee9c49c929fe4/
  /punchout/cart/create:
    post:
      summary: Create Cart
      description: |
        Creates a new punchout session and forms a cart with the provided parts. Orders are separated by supplier store.

        For partners that use our Catalog quoting API, use this method to create a cart for placing orders.

        In this method PartsTech attempts to find the correct parts for each order, given the part information that is provided in the request. The more part information that is provided in the request, the more accurate and efficient the parts selection will be. In addition to the required fields, providing at least each part's `lineCardId` will enable a much more accurate parts selection. In some cases, providing only the `storeId` and `partId` is not enough to uniquely identify a part.

        Returns a unique `sessionId` and `redirectUrl` to get access to the punchout session through the site.
      operationId: createCart
      x-operation-name: CommandPunchoutCartCreate
      tags:
      - punchout-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - orders
              properties:
                orders:
                  type: array
                  minItems: 1
                  items:
                    type: object
                    required:
                    - storeId
                    - parts
                    properties:
                      storeId:
                        description: PartsTech's ID for a supplier location.
                        type: integer
                        example: 1
                      parts:
                        type: array
                        minItems: 1
                        items:
                          type: object
                          required:
                          - partId
                          - quantity
                          properties:
                            partId:
                              description: PartsTech's ID for a part. Consists of
                                `brandId`-`partNumber`.
                              type: string
                              example: ABCD-12345
                            lineCardId:
                              description: PartsTech's ID for a line code. Makes part
                                selection much more accurate when provided in the
                                request. It is required for tire suppliers with the
                                `availabilitySelect` option. For other suppliers it
                                is not required.
                              type: integer
                              example: 123
                              nullable: true
                            quantity:
                              description: The requested quantity for a part.
                              type: integer
                              example: 10
                              minimum: 1
                              maximum: 999
                            vehicleId:
                              description: PartsTech's ID for a vehicle.
                              type: integer
                              nullable: true
                              default: null
                            partTypeId:
                              description: The ID of a part type from the Autocare
                                Association's PCdb.
                              type: integer
                              nullable: true
                              default: null
                            selectedStore:
                              description: The supplier store to get the part from.
                                Only required for suppliers with the `availabilitySelect`
                                option. The value to include here is a `specificName`
                                from `storesAvailability` of the part.
                              type: string
                              nullable: true
                      poNumber:
                        type: string
                        nullable: true
                        description: Prefilling of purchase order number in the order.
                          Will be sent to the Supplier when the order is placed.
                        example: Some PoNumber
                      notes:
                        type: string
                        nullable: true
                        description: "Prefilling of supplier notes in the order. Will\
                          \ be sent to the Supplier when the order is placed, if it's\
                          \ supported by the Supplier's API."
                        example: Some Notes
                urls:
                  $ref: "#/components/schemas/URLs"
                additionalInformation:
                  $ref: "#/components/schemas/PunchoutAdditionalInformation"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - sessionId
                - redirectUrl
                properties:
                  sessionId:
                    type: string
                    example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                    description: The unique identifier of a punchout session.
                  redirectUrl:
                    type: string
                    example: https://app.partstech.com/api-search/your_partnerId/your_test_userId/1ag3d2b5240e4jcbbe3ee9c49c929fe4/
        "400":
          $ref: "#/components/responses/DataAvailabilityError"
  /punchout/cart/submit:
    post:
      summary: Submit Cart
      description: |
        Orders all of the parts in the cart for the provided punchout `sessionId`.

        Returns the orders that were placed.
      operationId: submitCart
      x-operation-name: CommandPunchoutCartSubmit
      tags:
      - session-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              properties:
                sessionId:
                  type: string
                  description: The unique identifier of a punchout session.
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                orderParams:
                  type: array
                  description: "To provide additional options for specific orders,\
                    \ such as `poNumber` and `notes`."
                  nullable: true
                  items:
                    type: object
                    required:
                    - storeId
                    properties:
                      storeId:
                        type: integer
                        description: PartsTech's ID for a supplier location. Identifies
                          an order in the cart.
                      poNumber:
                        type: string
                        description: "Optional. If a value is included here, any PO\
                          \ number provided earlier in the quoting process for the\
                          \ specified order will be overwritten."
                        nullable: true
                        deprecated: true
                      notes:
                        type: string
                        description: "Optional. If a value is included here, any supplier\
                          \ notes provided earlier in the quoting process for the\
                          \ specified order will be overwritten."
                        nullable: true
                poNumber:
                  type: string
                  description: |
                    Optional.

                    If a value is included here, it will overwrite any previously provided PO numbers for all orders in the session.
                  nullable: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PunchoutPurchasedCartResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - $ref: "#/components/schemas/RequiredAdditionalParametersError"
                - $ref: "#/components/schemas/EmptyCartError"
        "402":
          description: Some orders are not available for purchasing
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/OrderAvailabilityError"
                - $ref: "#/components/schemas/OrderNotPlacedError"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
        "432":
          description: Integration Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationError"
  /punchout/cart/update:
    post:
      summary: Update Cart
      description: |
        Updates the requested `quantity` of items in the cart of the provided punchout `sessionId`. Can be used to keep the PartsTech cart in sync with the partner application when users change the requested quantity of quoted items in a work order.

        Returns the updated cart information.
      operationId: updateCart
      x-operation-name: CommandPunchoutCartUpdate
      tags:
      - punchout-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              - updates
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
                updates:
                  type: array
                  description: The items to be updated.
                  items:
                    type: object
                    required:
                    - orderItemId
                    - quantity
                    properties:
                      orderItemId:
                        description: "The unique identifier for an item added to a\
                          \ cart. This ID allows PartsTech to reference a specific\
                          \ item in a specific session and its cart details (e.g.\
                          \ PO number, supplier notes, delivery method)."
                        type: string
                        example: 0ze4f01824764a61991b9d090fdc1813
                      quantity:
                        description: The requested quantity for a part.
                        type: integer
                        minimum: 1
                        maximum: 999
                        example: 10
                  example:
                  - orderItemId: orderItemId1
                    quantity: 25
                  - orderItemId: orderItemId2
                    quantity: 3
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PunchoutCartResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - $ref: "#/components/schemas/EmptyCartError"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
  /punchout/cart/info:
    post:
      summary: Get Cart
      description: |
        Gets the current cart information for the provided `sessionId`.

        **Note**: For desktop applications that lack the ability to use cart callback functionality, this method should be used to get cart information. In this case, our cart buttons cannot be used. The partner application will need to add a button on the PartsTech punchout for users to click when they are ready to transfer cart items to the partner application.
      operationId: getCart
      x-operation-name: QueryPunchoutCartInfo
      tags:
      - session-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PunchoutCartResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
  /punchout/cart/availability:
    post:
      summary: Check Cart Availability
      description: |
        Gets real-time pricing and availability information directly from suppliers for each cart item of the provided `sessionId`. Pricing and availability can change from the time an item is quoted, to the time it is ordered. This method should be used before attempting to place an order, so users can be notified of any price changes or unavailable items.

        **Note**: While the PartsTech API is optimized to deliver quick responses, this endpoint depends on the response times of suppliers' APIs, which may vary.

        If all items are available in the requested quantities, a successful response with a 200 HTTP status code will be returned. The response will include a list of orders with the current cost of each item. Make sure to check other pricing fields for any changes that would affect the total cost, such as `shippingPrice` or `fet` (if applicable).

        If there are pricing changes, it is recommended to update the necessary values in the work order and inform the user about the changes. The user can decide whether to proceed with the order at the updated total cost or not.

        When one or more items are unavailable for ordering, a response with a 402 HTTP status code will be returned. The response will contain details about the availability error, including which items were unavailable and errors fields specifying the reason for each item.

        In such cases, it is highly recommended to inform the user about the unavailable items and let them decide on the next steps. They may choose to proceed with ordering the available items and return later for the currently unavailable ones when they become available. Alternatively, they can punchout to PartsTech to explore alternative items that are currently available for immediate ordering.
      operationId: checkCartAvailability
      x-operation-name: QueryPunchoutCartAvailability
      tags:
      - session-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PunchoutCartResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - $ref: "#/components/schemas/RequiredAdditionalParametersError"
        "402":
          description: Some orders are not available for purchasing
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/OrderAvailabilityError"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
        "432":
          description: Integration Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationError"
  /punchout/cart/add-part:
    post:
      summary: Add Part
      description: |
        Adds an item to the cart of the provided punchout `sessionId`.

        In this method PartsTech attempts to find the correct part to add to the cart, given the part information that is provided in the request. The more part information that is provided in the request, the more accurate and efficient the parts selection will be. In addition to the required fields, providing at least the part's `lineCardId` will enable a much more accurate parts selection. In some cases, providing only the `storeId` and `partId` is not enough to uniquely identify a part.

        Returns the updated cart information.
      operationId: addPartToCart
      x-operation-name: CommandPunchoutCartAddPart
      tags:
      - punchout-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              - requestedPart
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
                requestedPart:
                  type: object
                  required:
                  - partId
                  - storeId
                  properties:
                    partId:
                      description: PartsTech's ID for a part. Consists of `brandId`-`partNumber`.
                      type: string
                      example: ABCD-12345
                    storeId:
                      description: PartsTech's ID for a supplier location.
                      type: integer
                      example: 1052
                    lineCardId:
                      description: PartsTech's ID for a line code. Makes part selection
                        much more accurate when provided in the request. It is required
                        for tire suppliers with the `availabilitySelect` option. For
                        other suppliers it is not required.
                      type: integer
                      example: 123
                      nullable: true
                    quantity:
                      description: The requested quantity for a part.
                      type: integer
                      minimum: 1
                      maximum: 999
                      example: 3
                    vehicleId:
                      description: PartsTech's ID for a vehicle.
                      type: integer
                      nullable: true
                      example: 2
                    partTypeId:
                      description: The ID of a part type from the Autocare Association's
                        PCdb.
                      type: integer
                      nullable: true
                      default: null
                    selectedStore:
                      description: The supplier store to get the part from. Only required
                        for suppliers with the `availabilitySelect` option. The value
                        to include here is a `specificName` from `storesAvailability`
                        of the part.
                      type: string
                      nullable: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PunchoutCartResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - type: object
                  description: Part not found
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: PartNotFound
                      messsage: Can`t find part with such parameters
                - type: object
                  description: Part not available
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: PartNotAvailable
                      messsage: Part is not available
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
        "432":
          description: Integration Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationError"
  /punchout/cart/remove-parts:
    post:
      summary: Remove Parts
      description: |
        Removes items from the cart of the provided punchout `sessionId` by `orderItemId`. Can be used to keep the PartsTech cart in sync with the partner application when users remove quoted items from a work order.

        Returns the updated cart information.
      operationId: removeItemsFromCart
      x-operation-name: CommandPunchoutCartRemovePart
      tags:
      - punchout-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              - removals
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
                removals:
                  type: array
                  description: Collection of `orderItemId`.
                  minItems: 1
                  maxItems: 10
                  items:
                    type: string
                  example:
                  - orderItem1
                  - orderItem2
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PunchoutCartResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - $ref: "#/components/schemas/EmptyCartError"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
  /our-callback:
    post:
      summary: Cart Callback
      description: |
        The cart callback allows PartsTech to send session quote and order data to the partner application as soon as a cart button is clicked. After a user has added items to the cart, quote data is sent when the user clicks the Submit Quote button, while order data is sent when the Buy Now button is clicked. To receive these callbacks, the partner application needs to set up an endpoint that can accept POST requests from PartsTech.

        The URL of the callback endpoint will be sent to PartsTech as the `callbackUrl` and `callbackOrderUrl` in create session requests. The partner application should be able to differentiate between quote and order data when a session's callback data is received. This can be done by using the `action` field. If the `action` field contains `SUBMIT_QUOTE`, then the user clicked the Submit Quote cart button to transfer quote data to the partner application. If the `action` field contains `PURCHASE`, then the user clicked the Buy Now cart button to place the orders with suppliers and transfer order data to the partner application.

        The schema for quote and order data is almost the same, the difference being that order data has two additional fields: `id` (PartsTech generated order ID) and `orderUrl` (URL for order details).
      tags:
      - callback-cart
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - user
              - sessionId
              - orders
              properties:
                user:
                  $ref: "#/components/schemas/User"
                sessionId:
                  type: string
                  description: The unique identifier of a punchout session.
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                orders:
                  description: "Contains quote or order information, including supplier,\
                    \ pricing, and detailed part/tire information. Will contain a\
                    \ list of `PunchoutOrder` for quotes, or a list of `PunchoutPurchasedOrder`\
                    \ for placed orders."
                  type: array
                  minItems: 1
                  items:
                    oneOf:
                    - $ref: "#/components/schemas/PunchoutOrder"
                    - $ref: "#/components/schemas/PunchoutPurchasedOrder"
                localInventoryItems:
                  type: array
                  items:
                    $ref: "#/components/schemas/CartLocalInventoryItem"
                action:
                  description: "Indicates whether the callback contains quote, order,\
                    \ or tire comparison quote data. Value `SUBMIT_QUOTE` indicates\
                    \ quote data, and `PURCHASE` indicates order data. Value `TIRE_QUOTE`\
                    \ indicates tire comparison quote data, which means that a shop's\
                    \ customer has chosen a tire from PartsTech's tire comparison\
                    \ quote feature."
                  type: string
                  enum:
                  - SUBMIT_QUOTE
                  - PURCHASE
                  - TIRE_QUOTE
                selectedLaborItems:
                  type: array
                  nullable: true
                  description: |
                    Labor items that were selected by user.

                    Labor items may be attached to items and cart/punchout session.

                    Selected labor items are not used (they will not be copied or returned) in next methods:
                    - [Create Custom Cart](#operation/customCartCreate)
                    - [Order Custom Cart](#operation/submitItems)
                    - [Check Custom Cart Availability](#operation/checkItemsAvailability)
                  items:
                    $ref: "#/components/schemas/PunchoutLaborItem"
      responses:
        "200":
          description: OK
        "201":
          description: OK
        "202":
          description: OK
        "204":
          description: OK
  /tire-quote-callback:
    post:
      summary: Tire Quote Callback
      description: |
        Callback, that sends orders with quote to partner. It is available if `callbackUrl` is provided.

        Please, do not provide invalid `callbackUrl`. It slows user's work with cart with no effect.
      tags:
      - callback-cart
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - user
              - sessionId
              - orders
              properties:
                user:
                  $ref: "#/components/schemas/User"
                sessionId:
                  type: string
                  description: The identifier of a punchout session.
                orders:
                  type: array
                  minItems: 1
                  items:
                    $ref: "#/components/schemas/PunchoutOrder"
                localInventoryItems:
                  type: array
                  items:
                    $ref: "#/components/schemas/CartLocalInventoryItem"
                action:
                  type: string
                  enum:
                  - SUBMIT_QUOTE
                  - PURCHASE
                  - TIRE_QUOTE
                selectedLaborItems:
                  type: array
                  nullable: true
                  description: |
                    Labor items that were selected by user.

                    Labor items may be attached to items and cart/punchout session.

                    Selected labor items are not used (they will not be copied or returned) in next methods:
                    - [Create Custom Cart](#operation/customCartCreate)
                    - [Order Custom Cart](#operation/submitItems)
                    - [Check Custom Cart Availability](#operation/checkItemsAvailability)
                  items:
                    $ref: "#/components/schemas/PunchoutLaborItem"
                itemizedQuote:
                  $ref: "#/components/schemas/ItemizedQuote"
      responses:
        "200":
          description: OK
        "201":
          description: OK
        "202":
          description: OK
        "204":
          description: OK
  /punchout/orders:
    post:
      summary: Get orders by session.
      description: "Returns orders placed during the session with the provided `sessionId`.\
        \ For partner applications that do not use cart callbacks, this method can\
        \ be used to get orders that were purchased during a punchout session."
      operationId: getPunchoutOrders
      x-operation-name: QueryPunchoutOrders
      tags:
      - punchout-orders
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - sessionId
              properties:
                sessionId:
                  type: string
                  example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                  description: The unique identifier of a punchout session.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Order"
  /catalog/vin/{vin}:
    get:
      summary: Decode VIN
      description: Decodes VIN and returns a VIN decode result.
      operationId: decodeVin
      x-operation-name: GetCatalogDecodedVinByVin
      tags:
      - vin
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: vin
        in: path
        required: true
        schema:
          type: string
          minLength: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                minItems: 1
                items:
                  type: object
                  required:
                  - vin
                  - vinDecode
                  properties:
                    vin:
                      type: string
                    vinDecode:
                      type: object
                      additionalProperties:
                        oneOf:
                        - type: array
                          items: {}
                        - type: integer
                        - type: string
                        - type: boolean
        "400":
          $ref: "#/components/responses/VinDecodeError"
  /catalog/plate/{state}/{plate}:
    get:
      summary: Decode Plate
      description: Decodes Plate and returns VINs and VIN decode results.
      operationId: decodePlate
      x-operation-name: GetCatalogDecodedVinByPlates
      tags:
      - vin
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: state
        in: path
        required: true
        schema:
          type: string
          maxLength: 2
          minLength: 2
        example: CT
      - name: plate
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          example: RGZ276
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                minItems: 1
                items:
                  type: object
                  required:
                  - vin
                  - vinDecode
                  properties:
                    vin:
                      type: string
                    vinDecode:
                      type: object
                      additionalProperties:
                        oneOf:
                        - type: array
                          items: {}
                        - type: integer
                        - type: string
                        - type: boolean
        "400":
          $ref: "#/components/responses/PlateDecodeError"
  /catalog/brands:
    get:
      summary: Get/Search Brands
      description: |
        Returns available brands. Results can be filtered by `name` or `brandID`, provided in query.
      tags:
      - brands
      operationId: getBrands
      x-operation-name: GetAllCatalogBrands
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: name
        in: query
        description: The part of a BrandName.
        required: false
        schema:
          type: string
          minLength: 3
          pattern: ".{3,}"
        example: Alb
      - name: brandID
        in: query
        description: The part of a BrandID.
        required: false
        schema:
          type: string
          minLength: 1
          maxLength: 4
          pattern: "\\w{1,4}"
        example: BB
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                minItems: 0
                maxItems: 100
                items:
                  $ref: "#/components/schemas/Brand"
  /catalog/brands/{brandID}:
    get:
      summary: Get Brand
      description: |
        Returns brand information by BrandID.
      tags:
      - brands
      operationId: getBrand
      x-operation-name: GetCatalogBrand
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: brandID
        in: path
        description: BrandID of brand
        required: true
        schema:
          type: string
          minLength: 4
          maxLength: 4
          pattern: "\\w{4,4}"
        example: BBCM
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Brand"
  /taxonomy/categories:
    get:
      summary: Get/Search Categories
      description: |
        Returns categories. Results can be filtered by `name`, provided in query.
      operationId: getCategories
      x-operation-name: GetAllTaxonomyCategories
      tags:
      - pcdb
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: name
        in: query
        description: The part of a category name
        required: false
        schema:
          type: string
          minLength: 2
          pattern: ".{2, }"
        example: Fluids
      - $ref: "#/components/parameters/locale"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    categoryId:
                      type: integer
                    categoryName:
                      type: string
                example:
                - categoryId: 4
                  categoryName: Belts and Cooling
                - categoryId: 5
                  categoryName: Driveline and Axles
                - categoryId: 6
                  categoryName: "Electrical, Charging and Starting"
          headers:
            X-PCDB-VERSION:
              schema:
                type: string
                format: date
                description: Product Characteristics DB version
                example: 2019-04-15
  /taxonomy/tree/{categoryId}:
    get:
      summary: Get part taxonomy by categoryId
      description: |
        Returns category with subcategory - part type tree.
      operationId: GetPartTaxonomyByCategoryId
      x-operation-name: GetPartTaxonomyByCategoryId
      tags:
      - pcdb
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: categoryId
        in: path
        required: true
        schema:
          type: integer
      - $ref: "#/components/parameters/locale"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - categoryId
                - categoryName
                - subcategories
                properties:
                  categoryId:
                    type: integer
                    example: 4
                  categoryName:
                    type: string
                    example: Belts and Cooling
                  subcategories:
                    type: array
                    items:
                      type: object
                      required:
                      - subcategoryId
                      - subcategoryName
                      - partTypes
                      properties:
                        subcategoryId:
                          type: integer
                          example: 116
                        subcategoryName:
                          type: string
                          example: Battery and Related Components
                        partTypes:
                          type: array
                          items:
                            $ref: "#/components/schemas/ResponsePartType"
          headers:
            X-PCDB-VERSION:
              schema:
                type: string
                format: date
                description: Product Characteristics DB version
                example: 2019-04-15
  /taxonomy/subcategories:
    get:
      summary: Get/Search Subcategories
      description: |
        Returns categories. Results can be filtered by `name` and `category`, provided in query.
      operationId: getSubcategories
      x-operation-name: GetAllTaxonomySubcategories
      tags:
      - pcdb
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: name
        in: query
        description: The part of a subcategory name
        required: false
        schema:
          type: string
          minLength: 2
          pattern: ".{2, }"
        example: Bag System
      - name: category
        in: query
        description: Category ID
        required: false
        schema:
          type: integer
        example: 6
      - $ref: "#/components/parameters/locale"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    subcategoryId:
                      type: integer
                    subcategoryName:
                      type: string
                example:
                - subcategoryId: 116
                  subcategoryName: Battery and Related Components
                - subcategoryId: 131
                  subcategoryName: Control Modules
                - subcategoryId: 143
                  subcategoryName: Electrical Connectors
          headers:
            X-PCDB-VERSION:
              schema:
                type: string
                format: date
                description: Product Characteristics DB version
                example: 2019-04-15
  /taxonomy/part-types:
    get:
      summary: Get/Search Part Types
      description: |
        Returns part types. Results can be filtered by `name`, `category` and `subcategory`, provided in query.

        **Note** Results limited by 10000 records. Use filters to get needed records.
      operationId: getPartTypes
      x-operation-name: GetAllTaxonomyPartTypes
      tags:
      - pcdb
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: name
        in: query
        description: The part of a part type name
        required: false
        schema:
          type: string
          minLength: 2
          pattern: ".{2, }"
        example: Door Handle
      - name: category
        in: query
        description: Category ID
        required: false
        schema:
          type: integer
        x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
        example: 6
      - name: subcategory
        in: query
        description: Subcategory ID
        required: false
        schema:
          type: integer
        x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
        example: 229
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      - $ref: "#/components/parameters/locale"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ResponsePartType"
                example:
                - partTypeId: 22585
                  partTypeName: Alternator Voltage Regulator Mounting Bolt
                  description: ""
                  application: FITTED
                - partTypeId: 48875
                  partTypeName: Voltage Regulator Bracket
                  description: ""
                  application: FITTED
                - partTypeId: 53431
                  partTypeName: Voltage Regulator Screw
                  description: Mounting screw for the voltage regulator.
                  application: FITTED
          headers:
            X-PCDB-VERSION:
              schema:
                type: string
                format: date
                description: Product Characteristics DB version
                example: 2019-04-15
  /taxonomy/part-types/{partTypeId}:
    get:
      summary: Get Part Type
      description: Returns part type by part type id.
      operationId: getPartType
      x-operation-name: GetTaxonomyPartType
      tags:
      - pcdb
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: partTypeId
        in: path
        required: true
        schema:
          type: integer
          pattern: "\\d{1,19}"
        example: 53431
      - $ref: "#/components/parameters/locale"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResponsePartType"
          headers:
            X-PCDB-VERSION:
              schema:
                type: string
                format: date
                description: Product Characteristics DB version
                example: 2019-04-15
  /taxonomy/part-types/{partTypeId}/attributes:
    get:
      summary: Get Part Type Attributes
      description: |
        Returns part type attributes.

        Required attributes must be provided with selected value in the search by part type (UNIVERSAL, UNIVERSAL_FITTED) without vehicle params.
      operationId: getPartTypeAttributes
      x-operation-name: GetAllTaxonomyPartTypeAttributes
      tags:
      - pcdb
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: partTypeId
        in: path
        required: true
        schema:
          type: integer
          pattern: "\\d{1,19}"
        example: 53431
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ResponsePartTypeAttribute"
  /taxonomy/vehicles/vin/{vin}:
    get:
      summary: Get Vehicle By VIN
      description: |
        Returns vehicle information by VIN
      operationId: getVehicleByVin
      x-operation-name: GetTaxonomyVehicleByVin
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - name: vin
        in: path
        required: true
        schema:
          type: string
          minLength: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResponseVehicle"
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /taxonomy/vehicles/{vehicleID}:
    get:
      summary: Get/Search Vehicles
      description: |
        Returns vehicle information by VehicleID
      operationId: getVehicle
      x-operation-name: GetTaxonomyVehicle
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - name: vehicleID
        in: path
        description: PartsTech's ID for a vehicle.
        required: true
        schema:
          type: integer
          pattern: "\\d{1,19}"
        example: 613426
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResponseVehicle"
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /taxonomy/vehicles:
    get:
      summary: List Vehicles
      description: |
        Returns available vehicles list.

        `year`, `make`, `model` query parameters are **required**.

        `engine`, `region` and `submodel` query parameters are optional.
      operationId: listVehicles
      x-operation-name: GetAllTaxonomyVehicles
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - $ref: "#/components/parameters/year"
      - $ref: "#/components/parameters/make"
      - $ref: "#/components/parameters/model"
      - $ref: "#/components/parameters/submodel"
      - $ref: "#/components/parameters/engine"
      - $ref: "#/components/parameters/region"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ResponseVehicle"
                example:
                - baseVehicleId: 140702
                  yearId: 2017
                  makeId: 21
                  modelId: 105
                  subModelId: 113
                  engineId: 5486
                  vehicleId: 613426
                  vehicleName: 2017 Kia Rio LX 1.6L L4  DOHC G4FD
                  engineParams:
                    engineVinId: 1
                    engineDesignationId: 4985
                    engineVersionId: 3
                    fuelTypeId: 5
                    cylinderHeadTypeId: 6
                  region: US
                  regions:
                  - US
                - baseVehicleId: 140702
                  yearId: 2017
                  makeId: 21
                  modelId: 105
                  subModelId: 113
                  engineId: 5486
                  vehicleId: 473536
                  vehicleName: 2017 Kia Rio LX 1.6L L4 vin 3 DOHC G4FD
                  engineParams:
                    engineVinId: 6
                    engineDesignationId: 4985
                    engineVersionId: 3
                    fuelTypeId: 5
                    cylinderHeadTypeId: 6
                  region: null
                  regions:
                  - US
                  - CA
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /taxonomy/vehicles/years:
    get:
      summary: Get Years
      description: |
        Returns available years.

        `make` and `model` query parameters are available and optional.
      operationId: getYears
      x-operation-name: GetAllTaxonomyVehiclesYears
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - $ref: "#/components/parameters/make"
      - $ref: "#/components/parameters/model"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: integer
                example:
                - 2016
                - 2017
                - 2018
                - 2019
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /taxonomy/vehicles/makes:
    get:
      summary: Get Makes
      description: |
        Returns available makes.

        `year`, `model`, `submodel` query parameters are available and optional.
      operationId: getMakes
      x-operation-name: GetAllTaxonomyVehiclesMakes
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - $ref: "#/components/parameters/year"
      - $ref: "#/components/parameters/model"
      - $ref: "#/components/parameters/submodel"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    makeName:
                      type: string
                    makeId:
                      type: integer
                example:
                - makeName: Jaguar
                  makeId: 20
                - makeName: Kia
                  makeId: 21
                - makeName: Volvo
                  makeId: 27
                - makeName: BMW
                  makeId: 31
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /taxonomy/vehicles/models:
    get:
      summary: Get Models
      description: |
        Returns available models.

        `year`, `make`, `submodel` query parameters are available.

        One of `year` and `make` are **required**.
      operationId: getModels
      x-operation-name: GetAllTaxonomyVehiclesModels
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - $ref: "#/components/parameters/year"
      - $ref: "#/components/parameters/make"
      - $ref: "#/components/parameters/submodel"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    modelName:
                      type: string
                    modelId:
                      type: integer
                example:
                - modelId: 104
                  modelName: Optima
                - modelId: 105
                  modelName: Rio
                - modelId: 106
                  modelName: Sedona
                - modelId: 108
                  modelName: Sorento
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /taxonomy/vehicles/submodels:
    get:
      summary: Get Submodels
      description: |
        Returns available submodels.

        `year`, `make`, `model` and `engine` query parameters are available.

        `year`, `make`, `model` are **required**.

        `engine` and `region` are optional.
      operationId: getSubmodels
      x-operation-name: GetAllTaxonomyVehiclesSubmodels
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - $ref: "#/components/parameters/year"
      - $ref: "#/components/parameters/make"
      - $ref: "#/components/parameters/model"
      - $ref: "#/components/parameters/engine"
      - $ref: "#/components/parameters/region"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    submodelName:
                      type: string
                    submodelId:
                      type: integer
                    region:
                      type: string
                      description: ISO 3166-1 alpha-2
                      nullable: true
                      deprecated: true
                    regions:
                      $ref: "#/components/schemas/Regions"
                example:
                - submodelId: 3
                  submodelName: SX
                  region: US
                  regions:
                  - US
                - submodelId: 113
                  submodelName: LX
                  region: CA
                  regions:
                  - CA
                - submodelId: 191
                  submodelName: EX
                  region: null
                  regions:
                  - US
                  - CA
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /taxonomy/vehicles/engines:
    get:
      summary: Get Engines
      description: |
        Returns available engines with engine params.

        `year`, `make`, `model` and `submodel` are **required**.

        `region` is optional.
      operationId: getEngines
      x-operation-name: GetAllTaxonomyVehiclesEngines
      tags:
      - vcdb
      security:
      - bearerAuth:
        - user
        - partner
      parameters:
      - $ref: "#/components/parameters/year"
      - $ref: "#/components/parameters/make"
      - $ref: "#/components/parameters/model"
      - $ref: "#/components/parameters/submodel"
      - $ref: "#/components/parameters/region"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    engineId:
                      type: integer
                    engineName:
                      type: string
                    engineParams:
                      $ref: "#/components/schemas/EngineParams"
                    region:
                      type: string
                      description: ISO 3166-1 alpha-2
                      nullable: true
                      deprecated: true
                    regions:
                      $ref: "#/components/schemas/Regions"
                example:
                - engineId: 5486
                  engineName: 1.6L L4 vin 3 DOHC G4FD
                  engineParams:
                    engineVinId: 6
                    engineDesignationId: 4985
                    engineVersionId: 3
                    fuelTypeId: 5
                    cylinderHeadTypeId: 6
                  region: US
                  regions:
                  - US
                - engineId: 5486
                  engineName: 1.6L L4  DOHC G4FD
                  engineParams:
                    engineVinId: 1
                    engineDesignationId: 4985
                    engineVersionId: 3
                    fuelTypeId: 5
                    cylinderHeadTypeId: 6
                  region: null
                  regions:
                  - US
                  - CA
          headers:
            X-VCDB-VERSION:
              schema:
                type: string
                format: date
                description: Vehicle Configuration DB version
                example: 2019-04-15
  /profile:
    get:
      summary: Get User Profile
      description: Return user profile information
      operationId: profile
      x-operation-name: GetProfile
      tags:
      - user
      security:
      - bearerAuth:
        - user
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
    patch:
      summary: Update User Profile
      description: |
        Updates a profile. It will update only provided fields.
      operationId: updateProfile
      x-operation-name: UpdateProfile
      tags:
      - user
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  minLength: 2
                  maxLength: 100
                lastName:
                  type: string
                  minLength: 2
                  maxLength: 100
                allowOrderEmails:
                  type: boolean
      responses:
        "204":
          description: OK
  /profile/reset-password:
    post:
      summary: Reset User Password
      description: Reset user password
      operationId: resetPassword
      x-operation-name: ResetProfilePassword
      tags:
      - user
      security:
      - bearerAuth:
        - user
      responses:
        "204":
          description: OK
  /profile/shop:
    get:
      summary: Get Shop Information
      description: Returns a shop information
      operationId: getProfileShop
      x-operation-name: GetProfileShop
      tags:
      - shop
      security:
      - bearerAuth:
        - user
      responses:
        "200":
          $ref: "#/components/responses/ProfileShopResponse"
    patch:
      summary: Update Shop Information
      description: |
        Updates a shop information. It will update only provided fields.

        At least one field is required.
      operationId: updateProfileShop
      x-operation-name: UpdateProfileShop
      tags:
      - shop
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              minProperties: 1
              properties:
                name:
                  type: string
                  minLength: 1
                otherBusinessName:
                  type: string
                  nullable: true
                phone:
                  type: string
                  pattern: "\\(\\d{3}\\)\\s\\d{3}-\\d{4}(\\s?x\\d{1,5})?"
                  minLength: 1
                cellphone:
                  type: string
                  nullable: true
                  pattern: "\\(\\d{3}\\)\\s\\d{3}-\\d{4}(\\s?x\\d{1,5})?"
                pickUpRadius:
                  type: integer
                  minimum: 0
            examples:
              UpdateAllFields:
                value:
                  cellphone: (777) 777-7777 x111
                  name: Mechanic Shop
                  otherBusinessName: "Mechanic Shop #1"
                  phone: (777) 777-7777 x111
                  pickUpRadius: 50
              UpdateOnlyName:
                value:
                  name: Mechanic Shop
              UpdateOnlyCellPhone:
                value:
                  cellphone: (777) 777-7777 x111
              UpdateOnlyPhone:
                value:
                  phone: (777) 777-7777 x111
      responses:
        "204":
          description: OK
  /profile/shop/shipping-address:
    patch:
      summary: Update Shop Shipping Address
      description: |
        Updates the shipping address of the user's shop.

        **Note** that we may correct an address automatically in different ways.
      operationId: updateShippingAddress
      x-operation-name: UpdateProfileShopShippingAddress
      tags:
      - shop
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Address"
      responses:
        "204":
          description: OK
        "400":
          $ref: "#/components/responses/InvalidAddressError"
  /profile/shop/billing-address:
    patch:
      summary: Update Shop Billing Address
      description: |
        Updates the billing address of the user's shop.

        **Note** that we may correct an address automatically in different ways.
      operationId: updateBillingAddress
      x-operation-name: UpdateProfileShopBillingAddress
      tags:
      - shop
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Address"
      responses:
        "204":
          description: OK
        "400":
          $ref: "#/components/responses/InvalidAddressError"
  /profile/shop/suppliers:
    get:
      summary: Get Supplier Preferences
      operationId: getSupplierPreferences
      x-operation-name: GetAllProfileShopSupplierPreferences
      tags:
      - supplier_preferences
      security:
      - bearerAuth:
        - user
      responses:
        "200":
          $ref: "#/components/responses/SupplierPreferences"
    post:
      summary: Add Supplier Preference
      description: |
        Add new supplier preference to the shop.

        **Note** StoreId requirement depends on the `lockedStore` option of a supplier.

        **Note** Not all suppliers requires credentials.

        **Note** Required set of credentials depends on requested supplier.

        **Note** You must send all set of required credentials or not send any of them at all.
      operationId: addSupplierPreference
      x-operation-name: CreateProfileShopSupplierPreference
      tags:
      - supplier_preferences
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - supplierId
              - priority
              properties:
                supplierId:
                  description: PartsTech Id of a supplier.
                  type: integer
                storeId:
                  description: PartsTech Id of a store.
                  type: integer
                  nullable: true
                credentials:
                  $ref: "#/components/schemas/SupplierPreferenceCredentialsRequest"
                priority:
                  type: integer
            examples:
              AdvanceAutoParts:
                description: Adds Advance Auto Parts Preference with empty values
                  of credentials
                value:
                  supplierId: 2501
                  priority: 1
                  credentials:
                  - name: customer
                    value: null
                  - name: username
                    value: null
                  - name: password
                    value: null
              MD:
                description: Adds MD Preference (no required credentials)
                value:
                  supplierId: 15021
                  storeId: 685
                  priority: 1
              AutoZone With Credentials:
                description: Adds AutoZone Preference (with required credentials)
                value:
                  supplierId: 2501
                  storeId: 705
                  priority: 1
                  credentials:
                  - name: customerNumber
                    value: some value
              AutoZone:
                description: Adds AutoZone Preference (with required credentials)
                value:
                  supplierId: 2501
                  storeId: 705
                  priority: 1
              Fisher Auto Parts:
                description: Adds Fisher Auto Parts Preference with empty values of
                  credentials
                value:
                  supplierId: 15044
                  storeId: 1163
                  priority: 1
                  credentials:
                  - name: account
                    value: null
                  - name: username
                    value: null
                  - name: password
                    value: null
              WORLDPAC:
                description: Adds WORLDPAC Preference with empty values of credentials
                value:
                  supplierId: 15061
                  storeId: 699
                  priority: 1
                  credentials:
                  - name: customerNumber
                    value: null
                  - name: password
                    value: null
      responses:
        "204":
          description: OK
  /profile/shop/suppliers/{supplierPreferenceId}:
    patch:
      summary: Update Supplier Preference
      description: |
        Updates a supplier preference.

        **Note** StoreID requirement depends on the `lockedStore` option of a supplier.

        **Note** Not all suppliers requires credentials.

        **Note** Required set of credentials depends on requested supplier.

        **Note** You must send all set of required credentials or not send any of them at all.
      operationId: updateSupplierPreference
      x-operation-name: UpdateProfileShopSupplierPreference
      tags:
      - supplier_preferences
      security:
      - bearerAuth:
        - user
      parameters:
      - name: supplierPreferenceId
        in: path
        required: true
        schema:
          type: integer
          pattern: \d+
        example: 13564
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - supplierId
              - priority
              properties:
                storeId:
                  description: PartsTech Id of a store.
                  type: integer
                  nullable: true
                credentials:
                  $ref: "#/components/schemas/SupplierPreferenceCredentialsRequest"
                priority:
                  type: integer
            examples:
              AdvanceAutoParts:
                description: Updating Advance Auto Parts Preference with empty values
                  of credentials
                value:
                  priority: 1
                  credentials:
                  - name: customer
                    value: null
                  - name: username
                    value: null
                  - name: password
                    value: null
              MD:
                description: Updating MD Preference (no required credentials)
                value:
                  storeId: 685
                  priority: 1
              AutoZone With Credentials:
                description: Updating AutoZone Preference (with required credentials)
                value:
                  storeId: 705
                  priority: 1
                  credentials:
                  - name: customerNumber
                    value: some value
              AutoZone:
                description: Updating AutoZone Preference (without required credentials)
                value:
                  storeId: 705
                  priority: 1
              Fisher Auto Parts:
                description: Updating Fisher Auto Parts Preference with empty values
                  of credentials
                value:
                  storeId: 1163
                  priority: 1
                  credentials:
                  - name: account
                    value: null
                  - name: username
                    value: null
                  - name: password
                    value: null
              WORLDPAC:
                description: Updating WORLDPAC Preference with empty values of credentials
                value:
                  storeId: 699
                  priority: 1
                  credentials:
                  - name: customerNumber
                    value: null
                  - name: password
                    value: null
      responses:
        "204":
          description: OK
    delete:
      summary: Remove Supplier Preference
      description: |
        Removes a supplier preference from the shop.
      operationId: removeSupplierPreference
      x-operation-name: DeleteProfileShopSupplierPreference
      tags:
      - supplier_preferences
      security:
      - bearerAuth:
        - user
      parameters:
      - name: supplierPreferenceId
        in: path
        required: true
        schema:
          type: integer
          pattern: \d+
        example: 0
      responses:
        "204":
          description: OK
  /profile/shop/tire-suppliers:
    get:
      summary: Get Tire Supplier Preferences
      operationId: getTireSupplierPreferences
      x-operation-name: GetAllProfileShopTireSupplierPreferences
      tags:
      - supplier_preferences
      security:
      - bearerAuth:
        - user
      responses:
        "200":
          $ref: "#/components/responses/SupplierPreferences"
  /orders:
    get:
      summary: Search Orders
      description: Returns Orders
      operationId: getOrders
      x-operation-name: GetAllOrders
      tags:
      - orders
      security:
      - bearerAuth:
        - user
      parameters:
      - name: storeId
        in: query
        schema:
          type: integer
          pattern: \d+
        example: 1
      - name: fromDate
        in: query
        description: |
          Filter by Payment Date (UTC). For example: "2019-05-01" or "2019-05-01T20:21:04Z".
        schema:
          type: string
          format: date
      - name: toDate
        in: query
        description: |
          Filter by Payment Date (UTC). For example: "2019-05-01" or "2019-05-01T20:21:04Z".
        schema:
          type: string
          format: date
      - name: deliveryDate
        in: query
        description: |
          Filter by Delivery Date (UTC). For example: "2019-05-01".
        schema:
          type: string
          format: date
      - name: partNumber
        in: query
        description: The manufacturer part number.
        schema:
          type: string
        example: 12345
      - name: brandID
        in: query
        schema:
          type: string
        example: ABCD
      - name: poNumber
        in: query
        schema:
          type: string
        example: Some Part of PoNumber
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Order"
  /orders/{orderId}:
    get:
      summary: Get Order
      description: Returns Order
      operationId: getOrder
      x-operation-name: GetOrder
      tags:
      - orders
      security:
      - bearerAuth:
        - user
      parameters:
      - name: orderId
        in: path
        required: true
        schema:
          type: integer
        example: 17564
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Order"
  /partner/orders:
    get:
      summary: Search Orders
      description: Returns Orders by related users/shops
      operationId: getOrdersByPartner
      x-operation-name: GetAllPartnerOrders
      tags:
      - partner-orders
      security:
      - bearerAuth:
        - partner
      parameters:
      - name: shop
        in: query
        schema:
          type: integer
          description: Shop ID
        example: 4
      - name: user
        in: query
        schema:
          type: string
          description: Username
        example: mechanic
      - name: storeId
        in: query
        schema:
          type: integer
          pattern: \d+
        example: 1
      - name: fromDate
        in: query
        description: |
          Filter by Payment Date (UTC). For example: "2019-05-01" or "2019-05-01T20:21:04Z".
        schema:
          type: string
          format: date
      - name: toDate
        in: query
        description: |
          Filter by Payment Date (UTC). For example: "2019-05-01" or "2019-05-01T20:21:04Z".
        schema:
          type: string
          format: date
      - name: deliveryDate
        in: query
        description: |
          Filter by Delivery Date (UTC). For example: "2019-05-01".
        schema:
          type: string
          format: date
      - name: partNumber
        in: query
        schema:
          type: string
        example: 12345
      - name: brandID
        in: query
        schema:
          type: string
        example: ABCD
      - name: poNumber
        in: query
        schema:
          type: string
        example: Some Part of PoNumber
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  allOf:
                  - $ref: "#/components/schemas/Order"
                  - type: object
                    properties:
                      user:
                        $ref: "#/components/schemas/User"
                      shop:
                        $ref: "#/components/schemas/BriefShop"
  /partner/orders/{orderId}:
    get:
      summary: Get Order
      description: Returns Order by related users/shops
      operationId: getOrderByPartner
      x-operation-name: GetPartnerOrder
      tags:
      - partner-orders
      security:
      - bearerAuth:
        - partner
      parameters:
      - name: orderId
        in: path
        required: true
        schema:
          type: integer
        example: 17564
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                allOf:
                - $ref: "#/components/schemas/Order"
                - type: object
                  properties:
                    user:
                      $ref: "#/components/schemas/User"
                    shop:
                      $ref: "#/components/schemas/BriefShop"
  /users:
    get:
      summary: Get User List
      description: |
        Search users by `username`, `email`, `lastName`.

        **Note**. It is allowed to receive only users that are connected to the partner who made the request.
      operationId: searchUsers
      x-operation-name: GetAllUsers
      tags:
      - users
      security:
      - bearerAuth:
        - partner
      parameters:
      - name: username
        in: query
        schema:
          type: string
          minLength: 3
          pattern: ".{3,}"
        example: mechanic
      - name: email
        in: query
        schema:
          type: string
          minLength: 3
          pattern: ".{3,}"
        example: man
      - name: lastName
        in: query
        schema:
          type: string
          minLength: 3
          pattern: ".{3,}"
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                minItems: 0
                items:
                  allOf:
                  - $ref: "#/components/schemas/User"
                  - type: object
                    required:
                    - shops
                    properties:
                      shops:
                        type: array
                        items:
                          $ref: "#/components/schemas/EntireShop"
    post:
      summary: Register User
      description: |
        Register a new user in PartsTech.

        We strongly recommend to change password for the user after that using PartsTech site.

        Registered users will be disabled until they approved their account (An email with activation link will be sent).
      operationId: registerUser
      x-operation-name: RegisterUser
      tags:
      - users
      security:
      - bearerAuth:
        - partner
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - username
              - email
              - password
              - firstName
              - lastName
              - shop
              properties:
                username:
                  type: string
                  minLength: 5
                  maxLength: 255
                email:
                  type: string
                  format: email
                password:
                  type: string
                  minLength: 5
                  maxLength: 255
                firstName:
                  type: string
                  minLength: 1
                lastName:
                  type: string
                  minLength: 1
                shop:
                  type: object
                  required:
                  - name
                  - phone
                  - billingAddress
                  - shippingAddress
                  properties:
                    name:
                      type: string
                      minLength: 1
                    otherBusinessName:
                      type: string
                      nullable: true
                    phone:
                      type: string
                      pattern: "\\(\\d{3}\\)\\s\\d{3}-\\d{4}(\\s?x\\d{1,5})?"
                    cellphone:
                      type: string
                      pattern: "\\(\\d{3}\\)\\s\\d{3}-\\d{4}(\\s?x\\d{1,5})?"
                    billingAddress:
                      $ref: "#/components/schemas/Address"
                    shippingAddress:
                      $ref: "#/components/schemas/Address"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - user
                - messages
                - redirectUrl
                properties:
                  user:
                    allOf:
                    - $ref: "#/components/schemas/User"
                    - type: object
                      required:
                      - shops
                      - apiKey
                      properties:
                        shops:
                          type: array
                          items:
                            $ref: "#/components/schemas/EntireShop"
                        apiKey:
                          type: string
                  redirectUrl:
                    type: string
                    format: url
  /users/{username}:
    get:
      summary: Get User
      description: |
        Returns an user by username. It is allowed to receive only users that are connected to the partner who made the request.
      operationId: getUserByUsername
      x-operation-name: GetUser
      tags:
      - users
      security:
      - bearerAuth:
        - partner
      parameters:
        - name: username
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                allOf:
                - $ref: "#/components/schemas/User"
                - type: object
                  required:
                  - shops
                  properties:
                    shops:
                      type: array
                      items:
                        $ref: "#/components/schemas/EntireShop"
  /shops:
    get:
      summary: Get Shop List
      description: |
        Search shops by `name`, `username` or `email`.

        **Note**. It is allowed to receive only shops that are connected to the partner who made the request.
      operationId: searchShops
      x-operation-name: GetAllShops
      tags:
      - shops
      security:
      - bearerAuth:
        - partner
      parameters:
      - name: name
        in: query
        schema:
          type: string
      - name: username
        in: query
        schema:
          type: string
          minLength: 3
          pattern: ".{3,}"
        example: mechanic
      - name: email
        in: query
        schema:
          type: string
          minLength: 3
          pattern: ".{3,}"
        example: man
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  allOf:
                  - $ref: "#/components/schemas/EntireShop"
                  - type: object
                    required:
                    - users
                    properties:
                      users:
                        type: array
                        items:
                          $ref: "#/components/schemas/User"
  /shops/{shopId}:
    get:
      summary: Get Shop
      description: |
        Return Shop by shopId.

        It is allowed to receive only shops that are connected to the partner who made the request.
      operationId: getShopById
      x-operation-name: GetShop
      tags:
      - shops
      security:
      - bearerAuth:
        - partner
      parameters:
      - name: shopId
        in: path
        required: true
        schema:
          type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                allOf:
                - $ref: "#/components/schemas/EntireShop"
                - type: object
                  required:
                  - users
                  properties:
                    users:
                      type: array
                      items:
                        $ref: "#/components/schemas/User"
  /partner/ex-profile:
    get:
      summary: Get Partner EX Profile with Permissions
      description: |
        Returns Partner EX profile with its type and permissions.

        STATIC shares permissions among all users when they log in under partner in punchout mode or partner API.

        DYNAMIC allows to assignment of permissions individually for each shop.
      operationId: getPartnerExProfile
      x-operation-name: GetPartnerExProfile
      tags:
      - ex-permissions
      security:
      - bearerAuth:
        - partner
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - type
                - permissions
                properties:
                  type:
                    type: string
                    enum:
                    - DYNAMIC
                    - STATIC
                    - RETAIL
                  permissions:
                    type: array
                    items:
                      $ref: "#/components/schemas/ExPermission"
  /shops/ex-permissions/batch:
    post:
      summary: Batch Get Shop EX Permissions
      description: |
        Returns shop EX permissions for available shops out of requested list of shop ids.

        Available only for partners with EX profile with type DYNAMIC.
      operationId: bathGetShopExPermissions
      x-operation-name: QueryShopExPermissions
      tags:
      - ex-permissions
      security:
      - bearerAuth:
        - partner
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - shopIds
              properties:
                shopIds:
                  type: array
                  items:
                    type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  required:
                  - shopId
                  - permissions
                  properties:
                    shopId:
                      type: integer
                    permissions:
                      type: array
                      items:
                        $ref: "#/components/schemas/ExPermission"
  /shops/{shopId}/ex-permissions:
    get:
      summary: Get Shop EX Permissions
      description: |
        Returns shop EX permissions.

        Available only for partners with EX profile with type DYNAMIC.
      operationId: GetShopExPermissions
      x-operation-name: GetShopExPermissions
      tags:
      - ex-permissions
      security:
      - bearerAuth:
        - partner
      parameters:
      - name: shopId
        in: path
        required: true
        schema:
          type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - permissions
                properties:
                  permissions:
                    type: array
                    items:
                      $ref: "#/components/schemas/ExPermission"
    patch:
      summary: Update Shop EX Permissions
      description: |
        Updates only provided in the request shop EX permissions.

        Available only for partners with EX profile with type DYNAMIC.
        Only permissions that are allowed for a partner can be updated.
      operationId: updateShopExPermissions
      x-operation-name: UpdateShopExPermissions
      tags:
      - ex-permissions
      security:
      - bearerAuth:
        - partner
      parameters:
      - name: shopId
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - permissions
              properties:
                permissions:
                  type: array
                  items:
                    type: object
                    required:
                    - id
                    - permission
                    properties:
                      id:
                        type: string
                        enum:
                        - labor
                        - labor_mitchell
                        - schedules
                        - specs
                        - local_inventory
                        description: >-
                          Permission identifier. `labor` covers MOTOR labor (the default labor
                          source); `labor_mitchell` covers Mitchell1 labor.
                      permission:
                        type: boolean
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - permissions
                properties:
                  permissions:
                    type: array
                    items:
                      $ref: "#/components/schemas/ExPermission"
  /local-inventory:
    post:
      summary: Replace local inventory
      description: |
        Replaces current local inventory in PartsTech with a new inventory or creates a new inventory in PartsTech.
      operationId: replaceLocalInventory
      x-operation-name: ReplaceLocalInventory
      tags:
      - local-inventory
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - items
              properties:
                items:
                  type: array
                  items:
                    $ref: "#/components/schemas/LocalInventoryItem"
      responses:
        "200":
          description: OK
        "400":
          $ref: "#/components/responses/InvalidRequest"
    put:
      summary: Update local inventory
      description: |
        Receives changes in local inventory.

        Updates current local inventory with provided changes.
      operationId: updateLocalInventory
      x-operation-name: UpdateLocalInventory
      tags:
      - local-inventory
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - items
              properties:
                items:
                  type: array
                  items:
                    $ref: "#/components/schemas/LocalInventoryItem"
      responses:
        "200":
          description: OK
        "400":
          $ref: "#/components/responses/InvalidRequest"
  /local-inventory/health/summary:
    get:
      summary: Get local inventory mapping report summary
      description: |
        Get current number of items in local inventory, number of mapped and unmapped, number of unmapped items by error.
      operationId: localInventoryMappingReportSummary
      x-operation-name: GetLocalInventoryHealthSummary
      tags:
      - local-inventory
      security:
      - bearerAuth:
        - user
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - total
                - mapped
                - unmapped
                properties:
                  total:
                    description: Number of local inventory items in the system.
                    type: integer
                  mapped:
                    description: Number of local inventory items that were mapped.
                    type: integer
                  unmapped:
                    description: Number of local inventory items that were mapped.
                    type: integer
                  unmappedByError:
                    description: Number of unmapped items by error.
                    type: array
                    items:
                      type: object
                      required:
                      - errorCode
                      - count
                      properties:
                        errorCode:
                          description: |
                            Error code. Describes a reason why items were not mapped.
                            - NO_PARTNER_MAPPING
                            - NO_SUPPLIER_MAPPING
                            - NO_LINE_CODE_MAPPING
                            - NO_BRAND_MAPPING
                            - PART_NOT_FOUND
                            - MULTIPLE_PARTS_FOUND
                            - etc
                          type: string
                        count:
                          description: Number of unmapped items with the error.
                          type: integer
        "403":
          $ref: "#/components/responses/ForbiddenError"
  /local-inventory/health/details:
    get:
      summary: Get local inventory mapping report details
      description: |
        Get a list of local inventory items with status and errors.
      operationId: localInventoryMappingReportDetails
      x-operation-name: GetLocalInventoryHealthDetails
      tags:
      - local-inventory
      security:
      - bearerAuth:
        - user
      parameters:
      - name: status
        in: query
        description: Mapping Status
        required: false
        schema:
          type: string
          enum:
          - MAPPED
          - UNMAPPED
        example: UNMAPPED
      - $ref: "#/components/parameters/page"
      - name: perPage
        in: query
        schema:
          type: integer
          enum:
          - 25
          - 50
          - 100
          - 250
          - 500
        example: 50
        description: "Records per request. Default: 50"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - total
                - items
                properties:
                  total:
                    description: Total number of items
                    type: integer
                  items:
                    description: List of items.
                    type: array
                    items:
                      $ref: "#/components/schemas/LocalInventoryMappingReportItem"
        "403":
          $ref: "#/components/responses/ForbiddenError"
  /local-inventory/search:
    post:
      summary: Search Parts
      description: |
        Search Params:
          - Search by Part Number
          - Non-app Search - search by universal part types and attributes.

            Use part types with application UNIVERSAL or UNIVERSAL_FITTED  (see ["Get/Search Part Types"](#operation/getPartTypes)).
            Check and select required attributes for a part type before sending of search request (see ["Get Part Type Attributes"](#operation/getPartTypeAttributes)).
          - Search by Vehicle - a mix of Vehicle identifier with auxilary param

        Vehicle Identifiers:
          - Vehicle params (year, make, model, etc)
          - Partstech Vehicle ID
          - VIN
          - Plate with State

        Auxilary Params:
          - Part Type IDs
          - Keyword

        See examples of requests.
      tags:
      - local-inventory
      operationId: localInventorySearch
      x-operation-name: QueryLocalInventorySearch
      security:
      - bearerAuth:
        - user
      parameters:
      - $ref: "#/components/parameters/locale"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              properties:
                searchParams:
                  oneOf:
                  - $ref: "#/components/schemas/VehicleSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VehicleSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/VinSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VinSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PlateSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PlateSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartNumberSearchParams"
                  - $ref: "#/components/schemas/NonAppSearchParams"
                filters:
                  type: array
                  minItems: 0
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      values:
                        type: array
                        minItems: 1
                        items:
                          oneOf:
                          - type: integer
                          - type: string
                          - type: boolean
                  example:
                  - name: parts
                    values:
                    - 1688
                    - 2172
                  - name: WarrantyTime
                    values:
                    - 24 Months
                  - name: manufacturers
                    values:
                    - 336
            examples:
              VehiclePartTypeSearch:
                summary: Search by Vehicle and PartTypeIds
                description: Make a search by Vehicle and PartTypeId. `searchParams`
                  accepts only `vehicleParams` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2003
                      makeId: 31
                      modelId: 173
                      subModelId: 20
                      engineId: 177
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 589
                        engineVersionId: 3
                        fuelTypeId: 5
                        cylinderHeadTypeId: 6
                    partTypeIds:
                    - 5132
                    - 10328
                  filters:
                  - name: parts
                    values:
                    - 5132
                    - 10328
                  - name: Bodytype
                    values:
                    - Sedan
                  - name: manufacturers
                    values:
                    - 551
              VehicleKeywordSearch:
                summary: Search by Vehicle and Keyword
                description: Make a search by Vehicle and PartTypeIds. `searchParams`
                  accepts only `vehicleParams` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 21
                      modelId: 104
                      subModelId: 3512
                      engineId: 2062
                      engineParams:
                        engineVinId: 31
                        engineDesignationId: 1
                        engineVersionId: 73
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    keyword: Air Filter
              VehicleIdPartTypeSearch:
                summary: Search by PartsTech Vehicle ID and PartTypeIds
                description: Make a search by PartsTech Vehicle ID and PartTypeIds.
                  `searchParams` accepts only `vehicleId` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    partTypeIds:
                    - 5132
                    - 10328
              VehicleIdKeywordSearch:
                summary: Search by PartsTech Vehicle ID and Keyword
                description: Make a search by PartsTech Vehicle ID and Keyword. `searchParams`
                  accepts only `vehicleId` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    keyword: Air Filter
              VinPartTypeSearch:
                summary: Search by VIN and PartTypeIds
                description: Make a search by VIN and PartTypeIds. `searchParams`
                  accepts only `vin` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vin: somevin
                    partTypeIds:
                    - 1005
                    - 1006
              VinKeywordSearch:
                summary: Search by VIN and Keyword
                description: Make a search by VIN and Keyword. `searchParams` accepts
                  only `vin` and `keyword` parameters.
                value:
                  searchParams:
                    vin: somevin
                    keyword: Air Filter
              PlatePartTypeSearch:
                summary: Search by Plate and PartTypeIds
                description: Make a search by Plate and PartTypeIds. `searchParams`
                  accepts only `plate` and `partTypeIds` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    partTypeIds:
                    - 1005
                    - 1006
              PlateKeywordSearch:
                summary: Search by Plate and Keyword
                description: Make a search by Plate and Keyword. `searchParams` accepts
                  only `plate` and `keyword` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    keyword: Air Filter
              PartNumberSearch:
                summary: Search by PartNumber
                description: Make a search by PartNumber. `searchParams` accepts only
                  `partNumber` parameter.
                value:
                  searchParams:
                    partNumber:
                    - 331
              NonAppSearch:
                summary: Search by universal part type
                description: Make a search by Part type and required attribute.
                value:
                  searchParams:
                    partTypeId: 11393
                    attributes:
                    - name: Color
                      values:
                      - Green
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - parts
                - filters
                properties:
                  parts:
                    type: array
                    minItems: 0
                    items:
                      $ref: "#/components/schemas/LocalInventoryPart"
                  filters:
                    type: array
                    minItems: 0
                    items:
                      type: object
                      required:
                      - name
                      - label
                      - options
                      properties:
                        name:
                          type: string
                          description: A property used in the search request to identify
                            a filter.
                        label:
                          type: string
                          description: An user-friendly description.
                        options:
                          type: array
                          description: Options for the filter.
                          minItems: 1
                          items:
                            type: object
                            required:
                            - label
                            - active
                            - value
                            properties:
                              label:
                                type: string
                                description: An user-friendly description.
                              count:
                                type: integer
                                nullable: true
                                description: A number of parts with this value.
                              active:
                                type: boolean
                                description: Shows if this option affects current
                                  results.
                              value:
                                description: A property used in the search request
                                  to filter results.
                                oneOf:
                                - type: string
                                - type: integer
                                - type: boolean
                    example:
                    - name: WarrantyTime
                      label: Warranty Time
                      options:
                      - label: 24 Months
                        value: 24 Months
                        active: true
                        count: 2
                    - name: manufacturers
                      label: Manufacturer
                      options:
                      - label: Spectra Premium
                        value: 336
                        active: true
                        count: 2
                      - label: Spectra Radiators Size Codes
                        value: 44452
                        active: false
                        count: 2
                    - name: parts
                      label: Part Type
                      options:
                      - label: Radiator
                        value: 2172
                        active: true
                        count: 2
                      - label: Drum Brake Shoe
                        value: 1688
                        active: true
                        count: 0
        "403":
          $ref: "#/components/responses/ForbiddenError"
  /partner/user-connect:
    post:
      summary: Create Connection Form
      description: |
        Provides PartsTech with shop information to create a personalized sign-in or sign-up process to autofill as many sign-up fields as provided in this request.
        When a user completes this process, a separate callback with shop information is sent to the provided callbackUrl.
        The partner application will use this shop information to automatically connect the user's PartsTech account and enable the PartsTech integration.
      operationId: attemptAutoConnect
      x-operation-name: CreatePartnerUserConnection
      tags:
      - auto-connect
      security:
      - bearerAuth:
        - partner
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - email
              - callbackUrl
              - smsUserId
              properties:
                email:
                  type: string
                  example: iron.man@example.com
                callbackUrl:
                  type: string
                  description: The URL for the partner application to receive the
                    shop information callback after the shop signs in or signs up
                    using the connection form.
                  example: http://localhost:80/some-callback-url
                smsUserId:
                  type: string
                  description: |
                    A unique identifier used by the partner application to identify a user.
                    Will be sent to the partner application in the callback data after a shop signs in or signs up using the connection form.
                  example: 767589
                firstName:
                  type: string
                  nullable: true
                  example: Iron
                lastName:
                  type: string
                  nullable: true
                  example: Man
                shop:
                  type: object
                  nullable: true
                  properties:
                    name:
                      type: string
                      description: The name of the shop.
                      nullable: true
                      example: Iron Man Shop
                    type:
                      type: string
                      enum:
                      - GENERAL_REPAIR
                      - TIRE
                      - QUICK_LUBE
                      - HEAVY_DUTY
                      - MOBILE_MECHANIC
                      - NEW_USED_VEHICLE_DEALER
                      - FLEET_REPAIR
                      - PARTS_SUPPLIER
                      - OTHER
                      description: "The type of shop. There are currently nine accepted\
                        \ values for shop type, shown in the enum list."
                      nullable: true
                      example: OTHER
                    phone:
                      type: string
                      description: The phone number of the shop.
                      nullable: true
                      pattern: "\\(\\d{3}\\)\\s\\d{3}-\\d{4}(\\s?x\\d{1,5})?"
                      example: (777) 777-7777 x111
                    website:
                      type: string
                      description: The URL of the shop's website.
                      nullable: true
                    address:
                      type: object
                      nullable: true
                      properties:
                        address1:
                          type: string
                          nullable: true
                          example: 1 Broadway
                        address2:
                          type: string
                          nullable: true
                          example: 14th Floor
                        city:
                          type: string
                          nullable: true
                          example: Cambridge
                        state:
                          type: string
                          nullable: true
                          minLength: 2
                          maxLength: 2
                          pattern: "\\w{2,2}"
                          description: "ISO 3166-2: Second part. Example for US-MA\
                            \ - MA."
                          example: MA
                        zipCode:
                          type: string
                          nullable: true
                          pattern: "(^\\d{5}$)|(^\\d{5}-\\d{4}$)"
                          example: '02142'
                        country:
                          type: string
                          nullable: true
                          minLength: 2
                          maxLength: 2
                          pattern: "\\w{2,2}"
                          description: ISO 3166-1 alpha-2
                          default: US
                          example: US
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - registrationUrl
                - smsUserId
                properties:
                  registrationUrl:
                    type: string
                    description: The URL to open up the registration and connection
                      page for a user.
                  smsUserId:
                    type: string
                    description: A unique identifier used by the partner application
                      to identify a user. Will be sent to the partner application
                      in the callback data after a shop signs in or signs up using
                      the connection form.
  /our-auto-connect-callback:
    post:
      summary: Connection Callback
      description: |
        Provides partners with a shop's information, including Username and API Key, to connect a shop's PartsTech account to the partner application.
        This information is sent to the partner's provided callbackUrl after a shop signs in or signs up using a registrationUrl.
      operationId: connectionCallback
      tags:
      - auto-connect
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - smsUserId
              - action
              - user
              properties:
                smsUserId:
                  type: string
                  description: A unique identifier used by the partner application
                    to identify a user. Will be sent to the partner application in
                    the callback data after a shop signs in or signs up using the
                    connection form.
                action:
                  type: string
                  enum:
                  - CONNECTION
                  description: "Indicates whether the callback contains quote, order,\
                    \ tire comparison quote, or user connection data. Value SUBMIT_QUOTE\
                    \ indicates quote data, and PURCHASE indicates order data. Value\
                    \ TIRE_QUOTE indicates tire comparison quote data, which means\
                    \ that a shop's customer has chosen a tire from PartsTech's tire\
                    \ comparison quote feature. CONNECTION indicates user connection\
                    \ data, which means that the partner should automatically connect\
                    \ the user's PartsTech username and API Key in their system and\
                    \ enable the PartsTech integration for the user."
                user:
                  type: object
                  required:
                  - username
                  - email
                  - enabled
                  - lastLogin
                  - allowOrderEmails
                  - firstName
                  - lastName
                  - demo
                  - apiKey
                  properties:
                    username:
                      type: string
                      example: mechanic
                    email:
                      type: string
                      example: iron.man@example.com
                    enabled:
                      type: boolean
                      example: true
                      description: Shows if user is activated.
                    lastLogin:
                      type: string
                      format: date-time
                      nullable: true
                      description: "Shows date and time of last user login. ISO 8601/RFC\
                        \ 3339, UTC"
                    registrationDate:
                      type: string
                      format: date
                      nullable: true
                      description: Shows date of user registration.
                    allowOrderEmails:
                      type: boolean
                      example: true
                    firstName:
                      type: string
                      example: Iron
                    lastName:
                      type: string
                      example: Man
                    timeZone:
                      type: string
                      example: America/New_York
                      nullable: true
                    demo:
                      type: boolean
                      example: false
                    apiKey:
                      type: string
      responses:
        "200":
          description: OK
        "201":
          description: OK
        "202":
          description: OK
        "204":
          description: OK
  /suppliers:
    get:
      summary: Get Supplier List
      description: |
        Returns available suppliers.
        Results can be filtered by a supplier name.

        **Note** that different users may have a different set of available suppliers.
        It depends on a role of the user or partner, and supplier settings. For example, demo users have an access to demo suppliers additionally.
      operationId: searchSuppliers
      x-operation-name: GetAllSuppliers
      tags:
      - suppliers
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: name
        in: query
        required: false
        schema:
          type: string
          minLength: 3
          pattern: ".{3,}"
        example: Advance
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                minItems: 0
                maxItems: 100
                items:
                  allOf:
                  - $ref: "#/components/schemas/BriefSupplierWithCredentials"
                  - type: object
                    required:
                    - allowReturns
                    - allowStoreSelect
                    - availabilitySelect
                    - postOrderUpdates
                    properties:
                      allowStoreSelect:
                        type: boolean
                        description: "If true, user can select one of the provided\
                          \ availability to add in the cart"
                      availabilitySelect:
                        type: boolean
                        description: "If true, user must select one of the provided\
                          \ availability to add in the cart"
                      postOrderUpdates:
                        type: boolean
                        description: "If true for a supplier, order can be updated\
                          \ after they placed."
                      allowReturns:
                        type: boolean
                      returnPeriod:
                        type: integer
                        nullable: true
                      returnPolicy:
                        type: string
                        nullable: true
                      marketingDescription:
                        type: string
                        nullable: true
                      coreChargePolicy:
                        type: string
                        nullable: true
  /suppliers/{supplierId}:
    get:
      summary: Get Supplier
      description: Returns a single supplier.
      operationId: getSupplier
      x-operation-name: GetSupplier
      tags:
      - suppliers
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: supplierId
        description: PartsTech Id of a supplier.
        in: path
        required: true
        schema:
          type: integer
          pattern: \d+
        example: 1458
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                allOf:
                - $ref: "#/components/schemas/BriefSupplier"
                - type: object
                  required:
                  - allowReturns
                  - allowStoreSelect
                  - availabilitySelect
                  properties:
                    allowStoreSelect:
                      type: boolean
                      description: "If true, user can select one of the provided availability\
                        \ to add in the cart"
                    availabilitySelect:
                      type: boolean
                      description: "If true, user must select one of the provided\
                        \ availability to add in the cart"
                    allowReturns:
                      type: boolean
                    returnPeriod:
                      type: integer
                      nullable: true
                    returnPolicy:
                      type: string
                      nullable: true
                    marketingDescription:
                      type: string
                      nullable: true
                    coreChargePolicy:
                      type: string
                      nullable: true
              examples:
                AdvanceAutoParts:
                  value:
                    id: 1458
                    name: Advance Auto Parts
                    allowStoreSelect: false
                    availabilitySelect: false
                    credentialFormat:
                    - label: Customer
                      internalName: customer
                      type: text
                    - label: SMS Username
                      internalName: username
                      type: text
                    - label: SMS Password
                      internalName: password
                      type: password
                    lockedStore: true
                    allowReturns: true
                    returnPeriod: 30
                    returnPolicy: Some text
                    marketingDescription: Some text
                    coreChargePolicy: Some text
  /stores:
    get:
      summary: Get Store List
      description: |
        Returns available stores by supplier and filter parameters.
        You are available to filter by zipcode, OR state and city.
        - `zipcode` - returns stores by point on map (geocoded by google from zipcode) in selected radius.
        - `state and city` - returns stores by point on map (geocoded by google from state and city) in selected radius.

        Without any filter, it returns store in selected radius from shop's shipping address.
        Default radius: 100
      operationId: searchStores
      x-operation-name: GetAllStores
      tags:
      - suppliers
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: supplierId
        in: query
        required: false
        schema:
          type: integer
        example: 1458
      - name: zip
        in: query
        required: false
        schema:
          type: string
          minLength: 5
          maxLength: 10
          pattern: "(^\\d{5}$)|(^\\d{5}-\\d{4}$)"
        example: 10007
      - name: radius
        in: query
        required: false
        schema:
          type: integer
          enum:
          - 10
          - 25
          - 50
          - 100
          - 250
          - 500
      - name: state
        in: query
        schema:
          type: string
          minLength: 2
          maxLength: 2
          pattern: "\\w{2,2}"
      - name: city
        in: query
        schema:
          type: string
          minLength: 3
          pattern: "\\w{3,}"
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                minItems: 0
                maxItems: 100
                items:
                  $ref: "#/components/schemas/Store"
  /stores/{storeId}:
    get:
      summary: Get Store
      description: Returns a single store.
      operationId: getStore
      x-operation-name: GetStore
      tags:
      - suppliers
      security:
      - bearerAuth:
        - partner
        - user
      parameters:
      - name: storeId
        description: PartsTech Id of a store.
        in: path
        required: true
        schema:
          type: integer
          pattern: \d+
        example: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Store"
  /punchout/cart/custom/create:
    post:
      summary: Create Custom Cart
      description: |
        Creates a new punchout session and forms a cart by adding the same items provided in the list of `orderItemId`, even previously ordered items. A new `orderItemId` is created and assigned to each item added to the new cart. An `orderItemId` can only be used in an order request once, so this method can be used to create a cart for stock ordering through the PartsTech API. Using the `orderItemId` of previously ordered items in inventory, this method can be used to easily add those items to a new cart to be ordered again.

        Returns a `sessionId` and `redirectUrl` to get access to the punchout session through the site.
      operationId: customCartCreate
      x-operation-name: CommandPunchoutCartCustomCreate
      tags:
      - custom-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - orderItems
              properties:
                urls:
                  $ref: "#/components/schemas/URLs"
                additionalInformation:
                  $ref: "#/components/schemas/PunchoutAdditionalInformation"
                orderItems:
                  type: array
                  minItems: 1
                  items:
                    type: object
                    required:
                    - orderItemId
                    - quantity
                    properties:
                      orderItemId:
                        description: "The unique identifier for an item added to a\
                          \ cart. This ID allows PartsTech to reference a specific\
                          \ item in a specific session and its cart details (e.g.\
                          \ PO number, supplier notes, delivery method)."
                        example: 0ze4f01824764a61991b9d090fdc1813
                        type: string
                      quantity:
                        description: The requested quantity for a part.
                        type: integer
                        minimum: 1
                        maximum: 999
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - sessionId
                - redirectUrl
                properties:
                  sessionId:
                    type: string
                    example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
                    description: The unique identifier of a punchout session.
                  redirectUrl:
                    type: string
                    example: http://localhost:80/redirect-url
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - $ref: "#/components/schemas/RequiredAdditionalParametersError"
                - $ref: "#/components/schemas/CartPartNotFoundError"
              examples:
                InvalidRequest:
                  value:
                    error:
                      code: InvalidRequestSyntax
                      message: Cannot parse request. Invalid data format
                    validationErrors:
                    - credentials.user.key - This value should not be blank.
                    - credentials.user.id - This value should be of type string.
                    - credentials.partner - This value should not be blank.
                NotConsistentRequest:
                  value:
                    error:
                      code: NotConsistentRequest
                      message: "OrderItem [some_hash] belongs to store [actual_store_id],\
                        \ but was requested with store [received_store_id]."
                PartNotFound:
                  value:
                    error:
                      code: PartNotFound
                      message: "Some order items were not found, please check each\
                        \ order item response"
                    orderItemErrors:
                    - orderItemId: "[some_hash]"
                      message: Order Item was not found
                    - orderItemId: "[some_hash2]"
                      message: Order Item has been already bought or in progress
                NotUniquePart:
                  value:
                    error:
                      code: NotUniquePart
                      message: "The part [part_number_id] under the store [store_id]\
                        \ was sent twice."
                OutdatedPart:
                  value:
                    error:
                      code: OutdatedPart
                      message: "Order Item [order_item_id] [part_number_id] is not\
                        \ valid for this operation"
  /punchout/cart/custom/order:
    post:
      summary: Order Custom Cart
      description: |
        Places orders for quoted items by `orderItemId`. Quoted items from different sessions can be included in a single request. Each order in the request is associated with a specific store (supplier location) and requires a `storeId`. An order must include a list of items with their respective `orderItemId` and requested `quantity`. Each `orderItemId` can only be used once and the maximum accepted quantity per item is 99.

        It is optional to include supplier `notes` and a `poNumber` in each order. If provided, they will overwrite any supplier notes or PO number previously entered in PartsTech for that store's order. If these fields are omitted, PartsTech will use the supplier notes and PO number from the cart details of the punchout session, if present. Any supplier notes and PO numbers from the cart are sent in the cart callback data to the partner application.

        It is important to provide a `poNumber` for PartsTech to send to suppliers in order requests. While the partner application should send a `poNumber` when creating a session, users can edit the cart's PO fields. If there is no PO number in the cart callback data for a store's quote, the partner application should include a `poNumber` in that store's order request. Otherwise, PartsTech will have to use the PartsTech generated orderId as the PO number in supplier order requests, making it difficult for users to match delivered parts to the correct work order.

        The response includes a list of orders sent to suppliers. It is in the same schema as order data in the cart callback.
      operationId: submitItems
      x-operation-name: CommandPunchoutCartCustomOrder
      tags:
      - custom-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - orders
              properties:
                orders:
                  type: array
                  minItems: 1
                  items:
                    type: object
                    required:
                    - storeId
                    - orderItems
                    properties:
                      storeId:
                        description: PartsTech's ID for a supplier location.
                        type: integer
                        example: 1
                      poNumber:
                        type: string
                        description: "Optional. If a value is included here, any PO\
                          \ number provided earlier in the quoting process for the\
                          \ order will be overwritten."
                        nullable: true
                        example: Some PoNumber
                      notes:
                        type: string
                        description: "Optional. If a value is included here, any supplier\
                          \ notes provided earlier in the quoting process for the\
                          \ order will be overwritten."
                        nullable: true
                        example: Some Notes
                      orderItems:
                        type: array
                        minItems: 1
                        items:
                          type: object
                          required:
                          - orderItemId
                          - quantity
                          properties:
                            orderItemId:
                              description: "The unique identifier for an item added\
                                \ to a cart. This ID allows PartsTech to reference\
                                \ a specific item in a specific session and its cart\
                                \ details (e.g. PO number, supplier notes, delivery\
                                \ method)."
                              type: string
                              example: 0ze4f01824764a61991b9d090fdc1813
                            quantity:
                              description: The requested quantity for a part.
                              type: integer
                              minimum: 1
                              maximum: 999
                              example: 2
                urls:
                  $ref: "#/components/schemas/URLs"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - orders
                properties:
                  orders:
                    type: array
                    items:
                      $ref: "#/components/schemas/PunchoutPurchasedOrder"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - $ref: "#/components/schemas/RequiredAdditionalParametersError"
                - $ref: "#/components/schemas/CartPartNotFoundError"
                - type: object
                  required:
                  - error
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
              examples:
                InvalidRequest:
                  value:
                    error:
                      code: InvalidRequestSyntax
                      message: Cannot parse request. Invalid data format
                    validationErrors:
                    - credentials.user.key - This value should not be blank.
                    - credentials.user.id - This value should be of type string.
                    - credentials.partner - This value should not be blank.
                NotConsistentRequest:
                  value:
                    error:
                      code: NotConsistentRequest
                      message: "OrderItem [some_hash] belongs to store [actual_store_id],\
                        \ but was requested with store [received_store_id]."
                PartNotFound:
                  value:
                    error:
                      code: PartNotFound
                      message: "Some order items were not found, please check each\
                        \ order item response"
                    orderItemErrors:
                    - orderItemId: "[some_hash]"
                      message: Order Item was not found
                    - orderItemId: "[some_hash2]"
                      message: Order Item has been already bought or in progress
                NotUniquePart:
                  value:
                    error:
                      code: NotUniquePart
                      message: "The part [part_number_id] under the store [store_id]\
                        \ was sent twice."
                RequiredAdditionalParameters:
                  value:
                    error:
                      code: RequiredAdditionalParametersError
                      message: Supplier requires additional parameters that should
                        be filled in the cart.
                    sessionId: Session id
                    redirectUrl: http://localhost:80/redirect-url
        "402":
          description: Some orders are not available for purchasing
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/OrderAvailabilityError"
                - $ref: "#/components/schemas/OrderNotPlacedError"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
        "432":
          description: Integration Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationError"
  /punchout/cart/custom/availability:
    post:
      summary: Check Custom Cart Availability
      description: |
        Provides real-time pricing and availability information directly from supplieres for each provided item by `orderItemId`. Pricing and availability can change from the time an item is quoted, to the time it is ordered. This method should be used before attempting to place an order, so users can be notified of any price changes or unavailable items.

        **Note**: While the PartsTech API is optimized to deliver quick responses, this endpoint depends on the response times of suppliers' APIs, which may vary.

        If all items are available in the requested quantities, a successful response with a 200 HTTP status code will be returned. The response will include a list of orders with the current cost of each item. Make sure to check other pricing fields for any changes that would affect the total cost, such as `shippingPrice` or `fet` (if applicable).

        If there are pricing changes, it is recommended to update the necessary values in the work order and inform the user about the changes. The user can decide whether to proceed with the order at the updated total cost or not.

        When one or more items are unavailable for ordering, a response with a 402 HTTP status code will be returned. The response will contain details about the availability error, including which items were unavailable and errors fields specifying the reason for each item.

        In such cases, it is highly recommended to inform the user about the unavailable items and let them decide on the next steps. They may choose to proceed with ordering the available items and return later for the currently unavailable ones when they become available. Alternatively, they can punchout to PartsTech to explore alternative items that are currently available for immediate ordering.
      operationId: checkItemsAvailability
      x-operation-name: QueryPunchoutCartCustomAvailability
      tags:
      - custom-cart
      security:
      - bearerAuth:
        - user
      - apiKeyAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - orderItems
              properties:
                orderItems:
                  type: array
                  minItems: 1
                  items:
                    type: object
                    required:
                    - orderItemId
                    - quantity
                    properties:
                      orderItemId:
                        description: "The unique identifier for an item added to a\
                          \ cart. This ID allows PartsTech to reference a specific\
                          \ item in a specific session and its cart details (e.g.\
                          \ PO number, supplier notes, delivery method)."
                        example: 0ze4f01824764a61991b9d090fdc1813
                        type: string
                      quantity:
                        description: The requested quantity for a part.
                        type: integer
                        minimum: 1
                        maximum: 999
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - orders
                properties:
                  orders:
                    type: array
                    items:
                      $ref: "#/components/schemas/PunchoutOrder"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/InvalidRequestError"
                - $ref: "#/components/schemas/RequiredAdditionalParametersError"
                - $ref: "#/components/schemas/CartPartNotFoundWithOrdersError"
                - type: object
                  required:
                  - error
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
              examples:
                InvalidRequest:
                  value:
                    error:
                      code: InvalidRequestSyntax
                      message: Cannot parse request. Invalid data format
                    validationErrors:
                    - credentials.user.key - This value should not be blank.
                    - credentials.user.id - This value should be of type string.
                    - credentials.partner - This value should not be blank.
                PartNotFound:
                  value:
                    error:
                      code: PartNotFound
                      message: "Some order items were not found, please check each\
                        \ order item response"
                    orderItemsErrors:
                    - orderItemId: "[some_hash]"
                      message: Order item was not found
                    - orderItemId: "[some_hash2]"
                      message: Order item has been already bought or in progress
                    orders:
                    - See orders property in the success response
                NotUniquePart:
                  value:
                    error:
                      code: NotUniquePart
                      message: "The part [part_number_id] under the store [store_id]\
                        \ was sent twice."
                RequiredAdditionalParameters:
                  value:
                    error:
                      code: RequiredAdditionalParametersError
                      message: Supplier requires additional parameters that should
                        be filled in the cart.
                    sessionId: Session id
                    redirectUrl: http://localhost:80/redirect-url
        "402":
          description: Some orders are not available for purchasing
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/OrderAvailabilityError"
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  properties:
                    error:
                      $ref: "#/components/schemas/Error"
                  example:
                    error:
                      code: NotFound
                      message: Session was not found
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LockedSessionError"
        "432":
          description: Integration Error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationError"
  /catalog/search:
    post:
      summary: Search Parts
      deprecated: true
      description: |
        **As of February 28th, 2026, this endpoint will no longer continue to work.**
        **Please contact [PartsTech-Partner-API@oeconnection.com](mailto:PartsTech-Partner-API@oeconnection.com) with any questions.**
        
        Search Params:
          - Search by Part Number
          - Non-app Search - search by universal part types and attributes.
        
            Use part types with application UNIVERSAL or UNIVERSAL_FITTED  (see ["Get/Search Part Types"](#operation/getPartTypes)).
            Check and select required attributes for a part type before sending of search request (see ["Get Part Type Attributes"](#operation/getPartTypeAttributes)).
          - Search by Vehicle - a mix of Vehicle identifier with auxilary param

        Vehicle Identifiers:
          - Vehicle params (year, make, model, etc)
          - Partstech Vehicle ID
          - VIN
          - Plate with State

        Auxilary Params:
          - Part Type IDs
          - Keyword

        See examples of requests.
      tags:
      - search
      operationId: searchParts
      x-operation-name: QueryCatalogSearch
      security:
      - bearerAuth:
        - user
      parameters:
      - $ref: "#/components/parameters/locale"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              properties:
                searchParams:
                  oneOf:
                  - $ref: "#/components/schemas/VehicleSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VehicleSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/VinSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VinSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PlateSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PlateSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartNumberSearchParams"
                  - $ref: "#/components/schemas/NonAppSearchParams"
                filters:
                  type: array
                  minItems: 0
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      values:
                        type: array
                        minItems: 1
                        items:
                          oneOf:
                          - type: integer
                          - type: string
                          - type: boolean
                  example:
                  - name: parts
                    values:
                    - 1688
                    - 2172
                  - name: WarrantyTime
                    values:
                    - 24 Months
                  - name: manufacturers
                    values:
                    - 336
            examples:
              VehiclePartTypeSearch:
                summary: Search by Vehicle and PartTypeIds
                description: Make a search by Vehicle and PartTypeId. `searchParams`
                  accepts only `vehicleParams` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2003
                      makeId: 31
                      modelId: 173
                      subModelId: 20
                      engineId: 177
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 589
                        engineVersionId: 3
                        fuelTypeId: 5
                        cylinderHeadTypeId: 6
                    partTypeIds:
                    - 5132
                    - 10328
                  filters:
                  - name: parts
                    values:
                    - 5132
                    - 10328
                  - name: Bodytype
                    values:
                    - Sedan
                  - name: manufacturers
                    values:
                    - 551
              VehicleKeywordSearch:
                summary: Search by Vehicle and Keyword
                description: Make a search by Vehicle and PartTypeIds. `searchParams`
                  accepts only `vehicleParams` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 21
                      modelId: 104
                      subModelId: 3512
                      engineId: 2062
                      engineParams:
                        engineVinId: 31
                        engineDesignationId: 1
                        engineVersionId: 73
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    keyword: Air Filter
              VehicleIdPartTypeSearch:
                summary: Search by PartsTech Vehicle ID and PartTypeIds
                description: Make a search by PartsTech Vehicle ID and PartTypeIds.
                  `searchParams` accepts only `vehicleId` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    partTypeIds:
                    - 5132
                    - 10328
              VehicleIdKeywordSearch:
                summary: Search by PartsTech Vehicle ID and Keyword
                description: Make a search by PartsTech Vehicle ID and Keyword. `searchParams`
                  accepts only `vehicleId` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    keyword: Air Filter
              VinPartTypeSearch:
                summary: Search by VIN and PartTypeIds
                description: Make a search by VIN and PartTypeIds. `searchParams`
                  accepts only `vin` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vin: somevin
                    partTypeIds:
                    - 1005
                    - 1006
              VinKeywordSearch:
                summary: Search by VIN and Keyword
                description: Make a search by VIN and Keyword. `searchParams` accepts
                  only `vin` and `keyword` parameters.
                value:
                  searchParams:
                    vin: somevin
                    keyword: Air Filter
              PlatePartTypeSearch:
                summary: Search by Plate and PartTypeIds
                description: Make a search by Plate and PartTypeIds. `searchParams`
                  accepts only `plate` and `partTypeIds` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    partTypeIds:
                    - 1005
                    - 1006
              PlateKeywordSearch:
                summary: Search by Plate and Keyword
                description: Make a search by Plate and Keyword. `searchParams` accepts
                  only `plate` and `keyword` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    keyword: Air Filter
              PartNumberSearch:
                summary: Search by PartNumber
                description: Make a search by PartNumber. `searchParams` accepts only
                  `partNumber` parameter.
                value:
                  searchParams:
                    partNumber:
                    - 331
              NonAppSearch:
                summary: Search by universal part type
                description: Make a search by Part type and required attribute.
                value:
                  searchParams:
                    partTypeId: 11393
                    attributes:
                    - name: Color
                      values:
                      - Green
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - parts
                - filters
                properties:
                  parts:
                    type: array
                    minItems: 0
                    items:
                      $ref: "#/components/schemas/CatalogPart"
                  filters:
                    type: array
                    minItems: 0
                    items:
                      type: object
                      required:
                      - name
                      - label
                      - options
                      properties:
                        name:
                          type: string
                          description: A property used in the search request to identify
                            a filter.
                        label:
                          type: string
                          description: An user-friendly description.
                        options:
                          type: array
                          description: Options for the filter.
                          minItems: 1
                          items:
                            type: object
                            required:
                            - label
                            - active
                            - value
                            properties:
                              label:
                                type: string
                                description: An user-friendly description.
                              count:
                                type: integer
                                nullable: true
                                description: A number of parts with this value.
                              active:
                                type: boolean
                                description: Shows if this option affects current
                                  results.
                              value:
                                description: A property used in the search request
                                  to filter results.
                                oneOf:
                                - type: string
                                - type: integer
                                - type: boolean
                    example:
                    - name: WarrantyTime
                      label: Warranty Time
                      options:
                      - label: 24 Months
                        value: 24 Months
                        active: true
                        count: 2
                    - name: manufacturers
                      label: Manufacturer
                      options:
                      - label: Spectra Premium
                        value: 336
                        active: true
                        count: 2
                      - label: Spectra Radiators Size Codes
                        value: 44452
                        active: false
                        count: 2
                    - name: parts
                      label: Part Type
                      options:
                      - label: Radiator
                        value: 2172
                        active: true
                        count: 2
                      - label: Drum Brake Shoe
                        value: 1688
                        active: true
                        count: 0
  /catalog/parts/{partId}:
    get:
      summary: Get Part
      description: Returns part.
      tags:
      - parts
      operationId: getPart
      x-operation-name: GetCatalogPart
      security:
      - bearerAuth:
        - user
      parameters:
      - name: partId
        in: path
        required: true
        schema:
          type: string
          example: BBHK-24CA
      - $ref: "#/components/parameters/locale"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DetailCatalogPart"
    post:
      summary: Get Part (with request body)
      description: |
        Returns part.
        Request Body is not required and helps to get an additional data that may depend on vehicle or partNumber.

        Request Body should be provided in case of non-Partstech catalog parts, e.g. Tires. Please use vehicleID and storeId to get correct detailed information for Tires.
      tags:
      - parts
      operationId: getPartWithRequestBody
      x-operation-name: QueryCatalogPart
      security:
      - bearerAuth:
        - user
      parameters:
      - name: partId
        in: path
        required: true
        schema:
          type: string
          example: BBHK-24CA
      - $ref: "#/components/parameters/locale"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                searchParams:
                  type: object
                  nullable: true
                  oneOf:
                  - $ref: "#/components/schemas/VehicleSearchParams"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
                  - $ref: "#/components/schemas/VinSearchParams"
                  - $ref: "#/components/schemas/PlateSearchParams"
                  - $ref: "#/components/schemas/PartNumberSearchParams"
                storeId:
                  type: integer
                  nullable: true
                lineCardId:
                  type: integer
                  nullable: true
            examples:
              VehicleSearch:
                summary: Search by Vehicle
                description: Make a search by Vehicle. `searchParams` accepts only
                  `vehicleParams`.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2009
                      makeId: 31
                      modelId: 210
                      subModelId: 20
                      engineId: 2548
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 1033
                        engineVersionId: 3
                        fuelTypeId: 5
                        cylinderHeadTypeId: 6
                  storeId: 1
                  lineCardId: 1
              VehicleIdSearch:
                summary: Search by PartsTech Vehicle ID
                description: Make a search by PartsTech Vehicle ID and PartTypeIds.
                  `searchParams` accepts only `vehicleId`.
                value:
                  searchParams:
                    vehicleId: 189326
              VinSearch:
                summary: Search by VIN
                description: Make a search by VIN and PartTypeIds. `searchParams`
                  accepts only `vin`.
                value:
                  searchParams:
                    vin: somevin
              PlateSearch:
                summary: Search by Plate
                description: Make a search by Plate. `searchParams` accepts only `plate`.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
              PartNumberSearch:
                summary: Search by PartNumber
                description: Make a search by PartNumber. `searchParams` accepts only
                  `partNumber` parameter.
                value:
                  searchParams:
                    partNumber:
                    - 12345
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/DetailCatalogPart"
                - $ref: "#/components/schemas/DetailQuotedPart"
  /catalog/parts/{partId}/interchanges:
    get:
      summary: Get Interchanges
      deprecated: true
      description: |
        **As of February 28th, 2026, this endpoint will no longer continue to work.**
        **Please contact [PartsTech-Partner-API@oeconnection.com](mailto:PartsTech-Partner-API@oeconnection.com) with any questions.**
        
        Returns interchanges for part
      tags:
      - parts
      operationId: getPartInterchanges
      x-operation-name: GetCatalogPartInterchanges
      security:
      - bearerAuth:
        - user
      parameters:
      - name: partId
        in: path
        required: true
        schema:
          type: string
          example: ABCD-12345
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                minItems: 0
                items:
                  type: object
                  required:
                  - type
                  - partNumber
                  - brand
                  properties:
                    type:
                      type: string
                      enum:
                      - INTCH
                      - SUPERSEDE
                    partNumber:
                      type: string
                      example: 12345
                    brand:
                      $ref: "#/components/schemas/Brand"
  /catalog/parts/{partId}/validate-fitment:
    post:
      summary: Part Fitment Validation
      description: Part fitment validation
      tags:
      - parts
      operationId: validateFitmentForPart
      x-operation-name: QueryCatalogPartFitmentValidation
      security:
      - bearerAuth:
        - user
      parameters:
      - name: partId
        in: path
        required: true
        schema:
          type: string
          example: ABCD-12345
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              properties:
                searchParams:
                  oneOf:
                  - $ref: "#/components/schemas/VehicleSearchParams"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
                  - $ref: "#/components/schemas/VinSearchParams"
                  - $ref: "#/components/schemas/PlateSearchParams"
                storeId:
                  description: PartsTech Store ID.
                  type: integer
                  nullable: true
                lineCardId:
                  description: PartsTech LineCard ID.
                  type: integer
                  nullable: true
            examples:
              VehiclePartTypeSearch:
                summary: Search by Vehicle
                description: Make a search by Vehicle. `searchParams` accepts only
                  `vehicleParams`.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 21
                      modelId: 104
                      subModelId: 3512
                      engineId: 2062
                      engineParams:
                        engineVinId: 31
                        engineDesignationId: 1
                        engineVersionId: 73
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
              VehicleIdPartTypeSearch:
                summary: Search by PartsTech Vehicle ID
                description: Make a search by PartsTech Vehicle ID and PartTypeIds.
                  `searchParams` accepts only `vehicleId`.
                value:
                  searchParams:
                    vehicleId: 287296
              VinPartTypeSearch:
                summary: Search by VIN
                description: Make a search by VIN and PartTypeIds. `searchParams`
                  accepts only `vin`.
                value:
                  searchParams:
                    vin: somevin
              PlatePartTypeSearch:
                summary: Search by Plate
                description: Make a search by Plate. `searchParams` accepts only `plate`.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ResponseVehicle"
        "204":
          description: No content. Fitment was not found.
  /catalog/quote:
    post:
      summary: Request Quote
      description: |
        Search Params:
          - Search by Part Number
          - Search by Tire Size - width, height, rim
          - Non-app Search - search by universal part types and attributes.

            Use part types with application UNIVERSAL or UNIVERSAL_FITTED  (see ["Get/Search Part Types"](#operation/getPartTypes)).
            Check and select required attributes for a part type before sending of search request (see ["Get Part Type Attributes"](#operation/getPartTypeAttributes)).
          - Search by Vehicle - a mix of Vehicle identifier with auxilary param

        Vehicle Identifiers:
          - Vehicle params (year, make, model, etc)
          - Partstech Vehicle ID
          - VIN
          - Plate with State

        Auxilary Params:
          - Part Type IDs
          - Keyword
          - Tire ID
          - Tire Size

        See examples of requests.
      tags:
      - quoting
      operationId: requestQuote
      x-operation-name: QueryCatalogQuote
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - storeId
              properties:
                searchParams:
                  oneOf:
                  - $ref: "#/components/schemas/VehicleSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VehicleSearchParamsByTireId"
                  - $ref: "#/components/schemas/VehicleSearchParamsByTireSize"
                  - $ref: "#/components/schemas/VehicleSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByTireId"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByTireSize"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/VinSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VinSearchParamsByTireId"
                  - $ref: "#/components/schemas/VinSearchParamsByTireSize"
                  - $ref: "#/components/schemas/VinSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PlateSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PlateSearchParamsByTireId"
                  - $ref: "#/components/schemas/PlateSearchParamsByTireSize"
                  - $ref: "#/components/schemas/PlateSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartNumberSearchParams"
                  - $ref: "#/components/schemas/TireSizeSearchParams"
                  - $ref: "#/components/schemas/NonAppSearchParams"
                storeId:
                  type: integer
                filters:
                  type: array
                  minItems: 0
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      values:
                        type: array
                        minItems: 1
                        items:
                          oneOf:
                          - type: integer
                          - type: string
                          - type: boolean
                  example:
                  - name: parts
                    values:
                    - 1688
                    - 2172
                  - name: WarrantyTime
                    values:
                    - 24 Months
                  - name: manufacturers
                    values:
                    - 336
            examples:
              VehiclePartTypeSearch:
                summary: Search by Vehicle and PartTypeIds
                description: Make a search by Vehicle and PartTypeId. `searchParams`
                  accepts only `vehicleParams` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2003
                      makeId: 31
                      modelId: 173
                      subModelId: 20
                      engineId: 177
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 589
                        engineVersionId: 3
                        fuelTypeId: 5
                        cylinderHeadTypeId: 6
                    partTypeIds:
                    - 5132
                    - 10328
                  storeId: 1
                  filters:
                  - name: parts
                    values:
                    - 5132
                    - 10328
                  - name: Bodytype
                    values:
                    - Sedan
                  - name: manufacturers
                    values:
                    - 551
              VehicleKeywordSearch:
                summary: Search by Vehicle and Keyword
                description: Make a search by Vehicle and Keyword. `searchParams`
                  accepts only `vehicleParams` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 21
                      modelId: 104
                      subModelId: 3512
                      engineId: 2062
                      engineParams:
                        engineVinId: 31
                        engineDesignationId: 1
                        engineVersionId: 73
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    keyword: Air Filter
                  storeId: 1
              VehicleTireSearch:
                summary: Search by Vehicle and Tire
                description: Make a search by Vehicle and Tire. `searchParams` accepts
                  only `vehicleParams` and `tireId` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2015
                      makeId: 31
                      modelId: 165
                      subModelId: 20
                      engineId: 2122
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 4498
                        engineVersionId: 3
                        fuelTypeId: 5
                        cylinderHeadTypeId: 6
                    tireId: 128890
                  storeId: 228621
              VehicleTireSizeSearch:
                summary: Search by Vehicle and Tire Size
                description: "Make a search by Vehicle and Tire Size. `searchParams`\
                  \ accepts only `vehicleParams`, `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 76
                      modelId: 1026
                      subModelId: 3571
                      engineId: 2578
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 4833
                        engineVersionId: 3
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 228621
              VehicleIdPartTypeSearch:
                summary: Search by PartsTech Vehicle ID and PartTypeIds
                description: Make a search by PartsTech Vehicle ID and PartTypeIds.
                  `searchParams` accepts only `vehicleId` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleId: 4930
                    partTypeIds:
                    - 5132
                    - 10328
                  storeId: 1
              VehicleIdKeywordSearch:
                summary: Search by PartsTech Vehicle ID and Keyword
                description: Make a search by PartsTech Vehicle ID and Keyword. `searchParams`
                  accepts only `vehicleId` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    keyword: Air Filter
                  storeId: 1
              VehicleIdTireSearch:
                summary: Search by PartsTech Vehicle ID and Tire
                description: Make a search by PartsTech Vehicle ID and Tire. `searchParams`
                  accepts only `vehicleId` and `tireId` parameters.
                value:
                  searchParams:
                    vehicleId: 545494
                    tireId: 128890
                  storeId: 228621
              VehicleIdTireSizeSearch:
                summary: Search by PartsTech Vehicle ID and Tire Size
                description: "Make a search by PartsTech Vehicle ID and Tire Size.\
                  \ `searchParams` accepts only `vehicleId`, `width`, `height` and\
                  \ `rim` parameters."
                value:
                  searchParams:
                    vehicleId: 586988
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 228621
              VinPartTypeSearch:
                summary: Search by VIN and PartTypeIds
                description: Make a search by VIN and PartTypeIds. `searchParams`
                  accepts only `vin` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vin: somevin
                    partTypeIds:
                    - 1005
                    - 1006
                  storeId: 1
              VinKeywordSearch:
                summary: Search by VIN and Keyword
                description: Make a search by Plate and Keyword. `searchParams` accepts
                  only `vin` and `keyword` parameters.
                value:
                  searchParams:
                    vin: somevin
                    keyword: Air Filter
                  storeId: 1
              VinTireSearch:
                summary: Search by VIN and Tire
                description: Make a search by Plate and Tire. `searchParams` accepts
                  only `vin` and `tireId` parameters.
                value:
                  searchParams:
                    vin: somevin
                    tireId: 87709
                  storeId: 228621
              VinTireSizeSearch:
                summary: Search by VIN and Tire Size
                description: "Make a search by Plate and Tire Size. `searchParams`\
                  \ accepts only `vin`, `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    vin: somevin
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 228621
              PlatePartTypeSearch:
                summary: Search by Plate and PartTypeIds
                description: Make a search by Plate and PartTypeIds. `searchParams`
                  accepts only `plate` and `partTypeIds` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    partTypeIds:
                    - 1005
                    - 1006
                  storeId: 1
              PlateKeywordSearch:
                summary: Search by Plate and Keyword
                description: Make a search by Plate and Keyword. `searchParams` accepts
                  only `plate` and `keyword` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    keyword: Air Filter
                  storeId: 1
              PlateTireSearch:
                summary: Search by Plate and Tire
                description: Make a search by Plate and Tire. `searchParams` accepts
                  only `plate` and `tireId` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    tireId: 87709
                  storeId: 1
              PlateTireSizeSearch:
                summary: Search by Plate and Tire Size
                description: "Make a search by Plate and Tire Size. `searchParams`\
                  \ accepts only `plate`, `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 1
              PartNumberSearch:
                summary: Search by PartNumber
                description: Make a search by PartNumber. `searchParams` accepts only
                  `partNumber` parameter.
                value:
                  searchParams:
                    partNumber:
                    - 12345
                  storeId: 1
              TireSearch:
                summary: Search by Tire size
                value:
                  searchParams:
                    width: 225
                    height: 40
                    rim: 18
                  storeId: 228621
              NonAppSearch:
                summary: Search by universal part type
                description: Make a search by Part type and required attribute.
                value:
                  searchParams:
                    partTypeId: 11393
                    attributes:
                    - name: Color
                      values:
                      - Green
                  storeId: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - parts
                - filters
                properties:
                  parts:
                    type: array
                    minItems: 0
                    items:
                      $ref: "#/components/schemas/QuotedPart"
                  filters:
                    type: array
                    minItems: 0
                    items:
                      type: object
                      required:
                      - name
                      - label
                      - options
                      properties:
                        name:
                          type: string
                          description: A property used in the search request to identify
                            a filter.
                        label:
                          type: string
                          description: An user-friendly description.
                        options:
                          type: array
                          description: Options for the filter.
                          minItems: 1
                          items:
                            type: object
                            required:
                            - label
                            - active
                            - value
                            properties:
                              label:
                                type: string
                                description: An user-friendly description.
                              count:
                                type: integer
                                nullable: true
                                description: A number of parts with this value.
                              active:
                                type: boolean
                                description: Shows if this option affects current
                                  results.
                              value:
                                description: A property used in the search request
                                  to filter results.
                                oneOf:
                                - type: string
                                - type: integer
                                - type: boolean
                    example:
                    - name: WarrantyTime
                      label: Warranty Time
                      options:
                      - label: 24 Months
                        value: 24 Months
                        active: true
                        count: 2
                    - name: manufacturers
                      label: Manufacturer
                      options:
                      - label: Spectra Premium
                        value: 336
                        active: true
                        count: 2
                      - label: Spectra Radiators Size Codes
                        value: 44452
                        active: false
                        count: 2
                    - name: parts
                      label: Part Type
                      options:
                      - label: Radiator
                        value: 2172
                        active: true
                        count: 2
                      - label: Drum Brake Shoe
                        value: 1688
                        active: true
                        count: 0
                  errors:
                    type: array
                    nullable: true
                    items:
                      type: string
                    example:
                    - Looks like Autozone doesn't recognize this vehicle
  /catalog/line-card-search:
    post:
      summary: Search by store using line card
      description: |
        Search Params:
          - Search by Part Number
          - Search by Tire Size - width, height, rim
          - Non-app Search - search by universal part types and attributes.

            Use part types with application UNIVERSAL or UNIVERSAL_FITTED  (see ["Get/Search Part Types"](#operation/getPartTypes)).
            Check and select required attributes for a part type before sending of search request (see ["Get Part Type Attributes"](#operation/getPartTypeAttributes)).
          - Search by Vehicle - a mix of Vehicle identifier with auxilary param

        Vehicle Identifiers:
          - Vehicle params (year, make, model, etc)
          - Partstech Vehicle ID
          - VIN
          - Plate with State

        Auxilary Params:
          - Part Type IDs
          - Keyword

        See examples of requests.
      tags:
      - quoting
      operationId: lineCardSearch
      x-operation-name: QueryCatalogLineCardSearch
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - storeId
              properties:
                searchParams:
                  oneOf:
                  - $ref: "#/components/schemas/VehicleSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VehicleSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/VinSearchParamsByKeyword"
                  - $ref: "#/components/schemas/VinSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PlateSearchParamsByKeyword"
                  - $ref: "#/components/schemas/PlateSearchParamsByPartTypes"
                  - $ref: "#/components/schemas/PartNumberSearchParams"
                  - $ref: "#/components/schemas/NonAppSearchParams"
                storeId:
                  type: integer
                filters:
                  type: array
                  minItems: 0
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      values:
                        type: array
                        minItems: 1
                        items:
                          oneOf:
                          - type: integer
                          - type: string
                          - type: boolean
                  example:
                  - name: parts
                    values:
                    - 1688
                    - 2172
                  - name: WarrantyTime
                    values:
                    - 24 Months
                  - name: manufacturers
                    values:
                    - 336
            examples:
              VehiclePartTypeSearch:
                summary: Search by Vehicle and PartTypeIds
                description: Make a search by Vehicle and PartTypeId. `searchParams`
                  accepts only `vehicleParams` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2003
                      makeId: 31
                      modelId: 173
                      subModelId: 20
                      engineId: 177
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 589
                        engineVersionId: 3
                        fuelTypeId: 5
                        cylinderHeadTypeId: 6
                    partTypeIds:
                    - 5132
                    - 10328
                  storeId: 1
                  filters:
                  - name: parts
                    values:
                    - 5132
                    - 10328
                  - name: Bodytype
                    values:
                    - Sedan
                  - name: manufacturers
                    values:
                    - 551
              VehicleKeywordSearch:
                summary: Search by Vehicle and Keyword
                description: Make a search by Vehicle and Keyword. `searchParams`
                  accepts only `vehicleParams` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 21
                      modelId: 104
                      subModelId: 3512
                      engineId: 2062
                      engineParams:
                        engineVinId: 31
                        engineDesignationId: 1
                        engineVersionId: 73
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    keyword: Air Filter
                  storeId: 1
              VehicleTireSearch:
                summary: Search by Vehicle and Tire
                description: Make a search by Vehicle and Tire. `searchParams` accepts
                  only `vehicleParams` and `tireId` parameters.
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2015
                      makeId: 31
                      modelId: 165
                      subModelId: 20
                      engineId: 2122
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 4498
                        engineVersionId: 3
                        fuelTypeId: 5
                        cylinderHeadTypeId: 6
                    tireId: 128890
                  storeId: 228621
              VehicleTireSizeSearch:
                summary: Search by Vehicle and Tire Size
                description: "Make a search by Vehicle and Tire Size. `searchParams`\
                  \ accepts only `vehicleParams`, `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    vehicleParams:
                      yearId: 2014
                      makeId: 76
                      modelId: 1026
                      subModelId: 3571
                      engineId: 2578
                      engineParams:
                        engineVinId: 1
                        engineDesignationId: 4833
                        engineVersionId: 3
                        fuelTypeId: 14
                        cylinderHeadTypeId: 6
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 228621
              VehicleIdPartTypeSearch:
                summary: Search by PartsTech Vehicle ID and PartTypeIds
                description: Make a search by PartsTech Vehicle ID and PartTypeIds.
                  `searchParams` accepts only `vehicleId` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vehicleId: 4930
                    partTypeIds:
                    - 5132
                    - 10328
                  storeId: 1
              VehicleIdKeywordSearch:
                summary: Search by PartsTech Vehicle ID and Keyword
                description: Make a search by PartsTech Vehicle ID and Keyword. `searchParams`
                  accepts only `vehicleId` and `keyword` parameters.
                value:
                  searchParams:
                    vehicleId: 287296
                    keyword: Air Filter
                  storeId: 1
              VehicleIdTireSearch:
                summary: Search by PartsTech Vehicle ID and Tire
                description: Make a search by PartsTech Vehicle ID and Tire. `searchParams`
                  accepts only `vehicleId` and `tireId` parameters.
                value:
                  searchParams:
                    vehicleId: 545494
                    tireId: 128890
                  storeId: 228621
              VehicleIdTireSizeSearch:
                summary: Search by PartsTech Vehicle ID and Tire Size
                description: "Make a search by PartsTech Vehicle ID and Tire Size.\
                  \ `searchParams` accepts only `vehicleId`, `width`, `height` and\
                  \ `rim` parameters."
                value:
                  searchParams:
                    vehicleId: 586988
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 228621
              VinPartTypeSearch:
                summary: Search by VIN and PartTypeIds
                description: Make a search by VIN and PartTypeIds. `searchParams`
                  accepts only `vin` and `partTypeIds` parameters.
                value:
                  searchParams:
                    vin: somevin
                    partTypeIds:
                    - 1005
                    - 1006
                  storeId: 1
              VinKeywordSearch:
                summary: Search by VIN and Keyword
                description: Make a search by Plate and Keyword. `searchParams` accepts
                  only `vin` and `keyword` parameters.
                value:
                  searchParams:
                    vin: somevin
                    keyword: Air Filter
                  storeId: 1
              VinTireSearch:
                summary: Search by VIN and Tire
                description: Make a search by Plate and Tire. `searchParams` accepts
                  only `vin` and `tireId` parameters.
                value:
                  searchParams:
                    vin: somevin
                    tireId: 87709
                  storeId: 228621
              VinTireSizeSearch:
                summary: Search by VIN and Tire Size
                description: "Make a search by Plate and Tire Size. `searchParams`\
                  \ accepts only `vin`, `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    vin: somevin
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 228621
              PlatePartTypeSearch:
                summary: Search by Plate and PartTypeIds
                description: Make a search by Plate and PartTypeIds. `searchParams`
                  accepts only `plate` and `partTypeIds` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    partTypeIds:
                    - 1005
                    - 1006
                  storeId: 1
              PlateKeywordSearch:
                summary: Search by Plate and Keyword
                description: Make a search by Plate and Keyword. `searchParams` accepts
                  only `plate` and `keyword` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    keyword: Air Filter
                  storeId: 1
              PlateTireSearch:
                summary: Search by Plate and Tire
                description: Make a search by Plate and Tire. `searchParams` accepts
                  only `plate` and `tireId` parameters.
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    tireId: 87709
                  storeId: 1
              PlateTireSizeSearch:
                summary: Search by Plate and Tire Size
                description: "Make a search by Plate and Tire Size. `searchParams`\
                  \ accepts only `plate`, `width`, `height` and `rim` parameters."
                value:
                  searchParams:
                    plate:
                      plate: Some Plate
                      state: CT
                    width: 40
                    height: 14.5
                    rim: 18
                  storeId: 1
              PartNumberSearch:
                summary: Search by PartNumber
                description: Make a search by PartNumber. `searchParams` accepts only
                  `partNumber` parameter.
                value:
                  searchParams:
                    partNumber:
                    - 12345
                  storeId: 1
              TireSearch:
                summary: Search by Tire size
                value:
                  searchParams:
                    width: 225
                    height: 40
                    rim: 18
                  storeId: 228621
              NonAppSearch:
                summary: Search by universal part type
                description: Make a search by Part type and required attribute.
                value:
                  searchParams:
                    partTypeId: 11393
                    attributes:
                    - name: Color
                      values:
                      - Green
                  storeId: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - parts
                - filters
                properties:
                  parts:
                    type: array
                    minItems: 0
                    items:
                      $ref: "#/components/schemas/LineCardPart"
                  filters:
                    type: array
                    minItems: 0
                    items:
                      type: object
                      required:
                      - name
                      - label
                      - options
                      properties:
                        name:
                          type: string
                          description: A property used in the search request to identify
                            a filter.
                        label:
                          type: string
                          description: An user-friendly description.
                        options:
                          type: array
                          description: Options for the filter.
                          minItems: 1
                          items:
                            type: object
                            required:
                            - label
                            - active
                            - value
                            properties:
                              label:
                                type: string
                                description: An user-friendly description.
                              count:
                                type: integer
                                nullable: true
                                description: A number of parts with this value.
                              active:
                                type: boolean
                                description: Shows if this option affects current
                                  results.
                              value:
                                description: A property used in the search request
                                  to filter results.
                                oneOf:
                                - type: string
                                - type: integer
                                - type: boolean
                    example:
                    - name: WarrantyTime
                      label: Warranty Time
                      options:
                      - label: 24 Months
                        value: 24 Months
                        active: true
                        count: 2
                    - name: manufacturers
                      label: Manufacturer
                      options:
                      - label: Spectra Premium
                        value: 336
                        active: true
                        count: 2
                      - label: Spectra Radiators Size Codes
                        value: 44452
                        active: false
                        count: 2
                    - name: parts
                      label: Part Type
                      options:
                      - label: Radiator
                        value: 2172
                        active: true
                        count: 2
                      - label: Drum Brake Shoe
                        value: 1688
                        active: true
                        count: 0
  /taxonomy/labor:
    post:
      summary: Get Labor
      description: |
        Returns Labor Groups or Labor Operations.
        - to get Labor Groups - send only `searchParams` with `vehicleParams` or `vin`.
        - to get Labor Operations - send `searchParams` with `vehicleParams` or `vin` and add `laborParams`.

        The method is not available for all users.
      tags:
      - motor-labor
      operationId: getLabor
      x-operation-name: QueryTaxonomyLabor
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: "#/components/schemas/LaborGroupsRequest"
              - $ref: "#/components/schemas/LaborOperationsRequest"
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                oneOf:
                - $ref: "#/components/schemas/LaborGroupsResponse"
                - $ref: "#/components/schemas/LaborOperationsResponse"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /taxonomy/labor/details:
    post:
      summary: Get Labor Details By Operation ID
      description: |
        Returns labor details for a specific operation ID
      tags:
      - motor-labor
      operationId: getLaborDetails
      x-operation-name: QueryTaxonomyLaborDetails
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - operationId
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                operationId:
                  type: number
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Operation"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /taxonomy/jobs:
    get:
      summary: Get list of jobs
      description: |
        Returns list of popular and custom jobs

        `name`, `types`, `direction`, `page`, `perPage` query parameters are optional.
      operationId: getJobs
      x-operation-name: GetAllTaxonomyJobs
      tags:
      - jobs
      security:
      - bearerAuth:
        - user
      parameters:
      - name: name
        in: query
        required: false
        description: Filter by name
        schema:
          type: string
        example: null
      - name: types
        in: query
        required: true
        description: Comma separated list of job types
        schema:
          type: string
          enum:
          - FREE
          - POPULAR
          - CUSTOM
      - name: active
        in: query
        required: false
        description: "Filter by ACTIVE/INACTIVE status, keep empty for all"
        schema:
          type: boolean
      - $ref: "#/components/parameters/direction"
      - $ref: "#/components/parameters/page"
      - $ref: "#/components/parameters/perPage"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  required:
                  - id
                  - status
                  - type
                  - name
                  - tasks
                  properties:
                    id:
                      type: number
                    status:
                      type: string
                      enum:
                      - ACTIVE
                      - INACTIVE
                    type:
                      type: string
                      enum:
                      - FREE
                      - POPULAR
                      - CUSTOM
                    name:
                      type: string
                    components:
                      oneOf:
                      - $ref: "#/components/schemas/PartTypeTaskResponse"
                      discriminator:
                        propertyName: type
  /maintenance-schedules/indicators:
    post:
      summary: Get Maintenance Schedules Indicators
      description: |
        Returns list of service indicators that correspond to the maintenance schedule
      operationId: maintenanceSchedulesIndicators
      x-operation-name: QueryMaintenanceSchedulesIndicators
      tags:
      - motor-maintenance-schedules
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - severity
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                severity:
                  $ref: "#/components/schemas/Severity"
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                type: object
                required:
                - indicators
                properties:
                  indicators:
                    type: array
                    items:
                      type: string
                    example:
                    - Service 1
                    - Service 2
                    - Service 3
                    - Service 4
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /maintenance-schedules/indicators/details:
    post:
      summary: Get Maintenance Schedules Details By Indicator
      description: |
        Returns maintenance schedule details for a specific indicator
      operationId: maintenanceSchedulesDetailsByIndicator
      x-operation-name: QueryMaintenanceSchedulesIndicatorsDetails
      tags:
      - motor-maintenance-schedules
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - severity
              - indicatorName
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                severity:
                  $ref: "#/components/schemas/Severity"
                indicatorName:
                  type: string
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MaintenanceSchedulesDetails"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /maintenance-schedules/intervals:
    post:
      summary: Get Maintenance Schedules Intervals
      description: |
        Returns list of service intervals that correspond to the maintenance schedule
      operationId: maintenanceSchedulesIntervals
      x-operation-name: QueryMaintenanceSchedulesIntervals
      tags:
      - motor-maintenance-schedules
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - severity
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                severity:
                  $ref: "#/components/schemas/Severity"
                intervalType:
                  $ref: "#/components/schemas/IntervalType"
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                type: object
                title: Intervals
                required:
                - intervals
                properties:
                  intervals:
                    type: array
                    items:
                      type: string
                    example:
                    - 9300
                    - 10000
                    - 18600
                    - 19000
                  intervalType:
                    $ref: "#/components/schemas/IntervalType"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /maintenance-schedules/intervals/details:
    post:
      summary: Get Maintenance Schedules Details By Interval
      description: |
        Returns maintenance schedule details for a specific interval
      operationId: maintenanceSchedulesDetailsByInterval
      x-operation-name: QueryMaintenanceSchedulesIntervalsDetails
      tags:
      - motor-maintenance-schedules
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - severity
              - intervalValue
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                severity:
                  $ref: "#/components/schemas/Severity"
                intervalType:
                  $ref: "#/components/schemas/IntervalType"
                intervalValue:
                  type: number
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MaintenanceSchedulesDetails"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /maintenance-schedules/details:
    post:
      summary: Get Maintenance Schedules Details By Application ID
      description: |
        Returns maintenance schedule details for a specific application ID
      operationId: maintenanceSchedulesDetails
      x-operation-name: QueryMaintenanceSchedulesDetails
      tags:
      - motor-maintenance-schedules
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - applicationId
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                applicationId:
                  type: number
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MaintenanceSchedulesApplication"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /fluids/summary:
    post:
      summary: Get Fluids Summary
      description: |
        Returns all fluid capacities and details for a specific vehicle
      operationId: fluidsSummary
      x-operation-name: QueryFluidsSummary
      tags:
      - motor-fluids
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                include:
                  type: object
                  properties:
                    capacities:
                      type: boolean
                      default: true
                    details:
                      type: boolean
                      default: true
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                type: object
                required:
                - applications
                properties:
                  applications:
                    type: array
                    items:
                      $ref: "#/components/schemas/FluidsApplication"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /fluids/details:
    post:
      summary: Get Fluids Details By Application ID
      description: |
        Returns all fluid capacities and details for a specific application ID
      operationId: fluidsDetails
      x-operation-name: QueryFluidsDetails
      tags:
      - motor-fluids
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - applicationId
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                applicationId:
                  type: number
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FluidsApplication"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /specifications/content-silos:
    post:
      summary: Get Specifications Content Silos
      description: |
        Returns list of content silos for a specific vehicle
      operationId: contentSilos
      x-operation-name: QuerySpecificationsContentSilos
      tags:
      - motor-specifications
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                type: object
                required:
                - contentSilos
                properties:
                  contentSilos:
                    type: array
                    items:
                      type: object
                      required:
                      - id
                      - name
                      properties:
                        id:
                          type: integer
                        name:
                          type: string
                      example:
                        id: 31
                        name: Oil Lamp Reset Procedures
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /specifications/summary:
    post:
      summary: Get Specifications Summary
      description: |
        Returns all specifications details for a specific content silo
      operationId: specificationsSummary
      x-operation-name: QuerySpecificationsSummary
      tags:
      - motor-specifications
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - contentSiloId
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                contentSiloId:
                  type: integer
                include:
                  type: object
                  properties:
                    details:
                      type: boolean
                      default: true
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                type: object
                required:
                - applications
                properties:
                  applications:
                    type: array
                    items:
                      $ref: "#/components/schemas/SpecificationDetails"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /specifications/details:
    post:
      summary: Get Specification Details By Application ID
      description: |
        Returns specification details for a specific application ID
      operationId: specificationsDetails
      x-operation-name: QuerySpecificationsDetails
      tags:
      - motor-specifications
      security:
      - bearerAuth:
        - user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              - applicationId
              properties:
                searchParams:
                  $ref: "#/components/schemas/SearchParams"
                applicationId:
                  type: integer
      responses:
        "200":
          description: OK
          headers:
            Link:
              $ref: "#/components/headers/MotorComplianceLink"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpecificationDetails"
        "400":
          $ref: "#/components/responses/UnsupportedVehicle"
        "404":
          $ref: "#/components/responses/VehicleNotFound"
  /mitchell1/vehicles:
    post:
      summary: Get Vehicle ID
      description: The Mitchell1 Vehicle ID is required to request Mitchell1 labor
        information.
      operationId: GetMitchell1VehicleId
      x-operation-name: QueryMitchell1Vehicles
      tags:
      - mitchell1
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - searchParams
              properties:
                searchParams:
                  oneOf:
                  - $ref: "#/components/schemas/VehicleSearchParams"
                  - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
                  - $ref: "#/components/schemas/VinSearchParams"
                  - $ref: "#/components/schemas/PlateSearchParams"
      responses:
        "200":
          description: A list of Mitchell1 vehicles
          content:
            application/json:
              schema:
                type: object
                required:
                - vehicles
                properties:
                  vehicles:
                    type: array
                    items:
                      $ref: "#/components/schemas/M1Vehicle"
  /mitchell1/labor/groups:
    post:
      summary: Get Labor Groups
      description: Returns list of Mitchell1 Labor Groups.
      operationId: GetGroups
      x-operation-name: QueryMitchell1LaborGroups
      tags:
      - mitchell1-labor
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - m1VehicleId
              properties:
                m1VehicleId:
                  type: string
      responses:
        "200":
          description: List of Mitchell1 labor groups
          content:
            application/json:
              schema:
                type: object
                required:
                - groups
                properties:
                  groups:
                    type: array
                    items:
                      type: string
  /mitchell1/labor/subgroups:
    post:
      summary: Get Labor SubGroups
      description: Returns list of Mitchell1 Labor SubGroups.
      operationId: GetSubGroups
      x-operation-name: QueryMitchell1LaborSubgroups
      tags:
      - mitchell1-labor
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - m1VehicleId
              - group
              properties:
                m1VehicleId:
                  type: string
                group:
                  type: string
      responses:
        "200":
          description: List of Mitchell1 labor sub groups
          content:
            application/json:
              schema:
                type: object
                required:
                - subgroups
                properties:
                  subgroups:
                    type: array
                    items:
                      type: string
  /mitchell1/labor/procedures:
    post:
      summary: Get Labor Procedures Summary
      description: Returns list of Mitchell1 Labor Procedures.
      operationId: GetProceduresSummary
      x-operation-name: QueryMitchell1LaborProcedures
      tags:
      - mitchell1-labor
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - m1VehicleId
              - group
              - subgroup
              properties:
                m1VehicleId:
                  type: string
                group:
                  type: string
                subgroup:
                  type: string
      responses:
        "200":
          description: List of Mitchell1 labor procedures
          content:
            application/json:
              schema:
                type: object
                required:
                - proceduresSummaries
                properties:
                  proceduresSummaries:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProcedureSummary"
  /mitchell1/labor/search:
    post:
      summary: Get Labor Procedures Summary By Search
      description: Returns list of Mitchell1 Labor Procedures by search string.
      operationId: SearchProceduresSummary
      x-operation-name: SearchMitchell1LaborProcedures
      tags:
      - mitchell1-labor
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - m1VehicleId
              - search
              properties:
                m1VehicleId:
                  type: string
                search:
                  nullable: true
                  type: string
      responses:
        "200":
          description: List of matching labor procedures
          content:
            application/json:
              schema:
                type: object
                required:
                - proceduresSummaries
                properties:
                  proceduresSummaries:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProcedureSummary"
  /mitchell1/labor/details:
    post:
      summary: Get Labor Details
      description: Returns Labor Details for a given Labor Procedure.
      operationId: GetProcedure
      x-operation-name: QueryMitchell1LaborDetails
      tags:
      - mitchell1-labor
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - m1VehicleId
              - group
              - subgroup
              - component
              - operation
              properties:
                m1VehicleId:
                  type: string
                group:
                  type: string
                subgroup:
                  type: string
                component:
                  type: string
                operation:
                  type: string
      responses:
        "200":
          description: Labor procedure detail
          content:
            application/json:
              schema:
                type: object
                required:
                - procedure
                properties:
                  procedure:
                    $ref: "#/components/schemas/Procedure"
  /catalog/tires/sizes:
    get:
      summary: Get tire sizes.
      description: Returns tire sizes.
      tags:
      - tires
      operationId: tireSizes
      x-operation-name: GetAllCatalogTireSizes
      security:
      - bearerAuth:
        - user
      parameters:
      - name: width
        schema:
          type: number
          format: float
        in: query
        required: false
      - name: height
        schema:
          type: number
          format: float
        in: query
        required: false
      - name: rim
        schema:
          type: number
          format: float
        in: query
        required: false
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    width:
                      type: number
                      format: float
                    height:
                      type: number
                      format: float
                    rim:
                      type: number
                      format: float
  /catalog/tires/{vehicleId}:
    get:
      summary: Get Tire sizes list by vehicle.
      description: Returns Tire sizes list by vehicle.
      tags:
      - tires
      operationId: tiresSizesByVehicle
      x-operation-name: GetAllCatalogTireSizesByVehicle
      security:
      - bearerAuth:
        - user
      parameters:
      - name: vehicleId
        in: path
        description: Vehicle ID
        required: true
        schema:
          type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    name:
                      type: string
components:
  schemas:
    IdentityKey:
      type: object
      description: User or Partner ID and API Key
      required:
      - id
      - key
      properties:
        id:
          type: string
          description: User or Partner ID
          example: username
        key:
          type: string
          description: User or Partner API key
          example: APIkey
    UserCredentials:
      type: object
      description: User And Partner Auth Credentials
      required:
      - user
      - partner
      properties:
        user:
          $ref: "#/components/schemas/IdentityKey"
        partner:
          $ref: "#/components/schemas/IdentityKey"
      example:
        user:
          id: partstech_user
          key: User API key
        partner:
          id: partstech_partner
          key: Partner API key
    PartnerCredentials:
      type: object
      description: Partner Auth Credentials
      required:
      - partner
      properties:
        partner:
          $ref: "#/components/schemas/IdentityKey"
      example:
        partner:
          id: partstech_partner
          key: Partner API key
    URLs:
      type: object
      properties:
        callbackUrl:
          description: "The URL for the partner app to receive quote data when the\
            \ user clicks Submit Quote. If not provided, the Submit Quote button will\
            \ be removed from the cart."
          type: string
          format: url
          nullable: true
          example: http://localhost:80/some-callback-url
        callbackOrderUrl:
          description: "The URL for the partner app to receive order data when the\
            \ user clicks Buy Now. If not provided, the Buy Now button will be removed\
            \ from the cart."
          type: string
          format: url
          nullable: true
          example: http://localhost:80/some-callback-order-url
        returnUrl:
          description: The URL loaded after a cart button is clicked.
          type: string
          format: url
          nullable: true
          example: http://localhost:80/some-return-url
    PunchoutAdditionalInformation:
      type: object
      nullable: true
      properties:
        mileage:
          type: integer
          nullable: true
          example: 15000
    QuoteSettings:
      type: object
      nullable: true
      properties:
        poNumber:
          description: The value that is automatically placed in the PO field in the
            cart. Typically the Estimate or Repair Order number at the time of session
            creation.
          type: string
          nullable: true
    PunchoutOrder:
      type: object
      required:
      - supplier
      - store
      - delivery
      - buyerShop
      - tax
      - totalPrice
      - totalDiscount
      - coreCharge
      - fet
      - shippingPrice
      - paymentType
      - parts
      properties:
        supplier:
          $ref: "#/components/schemas/CartSearchSupplier"
        store:
          oneOf:
          - $ref: "#/components/schemas/OrderStore"
          - $ref: "#/components/schemas/PaidOrderStore"
        delivery:
          description: Delivery details
          type: object
          required:
          - price
          properties:
            name:
              type: string
              nullable: true
              example: hotshot
              description: Type of delivery
            price:
              type: number
              format: float
              example: 1.24
              description: Cost of delivery
        buyerShop:
          $ref: "#/components/schemas/Address"
        tax:
          type: number
          format: float
          example: 9.01
          description: "Sales tax, if applicable. Typically shops are tax-exempt."
        totalPrice:
          type: number
          format: float
          example: 25
          description: "Total price charged to the user for an order, includes discounts\
            \ and core charge if applicable."
        totalDiscount:
          type: number
          format: float
          example: 5
          description: Total discounts for an order
        coreCharge:
          type: number
          format: float
          example: 12
          description: A fee for certain part types that is returned to the purchaser
            when the old part that is being replaced is returned to the store.
        fet:
          type: number
          description: The Federal Excise Tax (FET). The tax imposed by the federal
            government on tires used on the road with a maximum load capacity greater
            then 3500 pounds. Only 100% accurate FET values are present in this field.
          format: float
          example: 1.2
        shippingPrice:
          type: number
          format: float
          example: 1.24
          description: Cost of delivery.
        paymentType:
          type: string
          enum:
          - CreditCard
          - Wholesale
        parts:
          type: array
          items:
            $ref: "#/components/schemas/PunchoutOrderPart"
        poNumber:
          type: string
          nullable: true
          example: 2743
          description: The purchase order number
        notes:
          type: string
          nullable: true
          example: Notes
          description: Supplier notes
    PunchoutPurchasedOrder:
      allOf:
      - type: object
        required:
        - id
        - orderUrl
        properties:
          id:
            description: The PartsTech ID for the order.
            type: integer
            example: 128577
          orderUrl:
            type: string
            example: https://app.partstech.com/some-invoice-url
            description: The URL of the PartsTech order details page.
      - $ref: "#/components/schemas/PunchoutOrder"
    PunchoutOrderPart:
      type: object
      required:
      - orderItemId
      - partId
      - quantity
      - price
      - partName
      - partNumber
      - partstechCatalogURL
      - availability
      - bundled
      - brand
      properties:
        orderItemId:
          type: string
          example: 0ze4f01824764a61991b9d090fdc1813
          description: "The unique identifier for an item added to a cart. This ID\
            \ allows PartsTech to reference a specific item in a specific session\
            \ and its cart details (e.g. PO number, supplier notes, delivery method)."
        partId:
          type: string
          example: ABCD-12345
          description: PartsTech's ID for a part. Consists of `brandId`-`partNumber`.
        lineCardId:
          type: string
          nullable: true
          example: 123
          description: PartsTech's ID for a line code. Makes part selection much more
            accurate when provided in requests to create a cart or search the PartsTech
            Catalog.
        quantity:
          type: integer
          example: 2
          description: The requested quantity for a part.
        price:
          $ref: "#/components/schemas/PartPrice"
        partName:
          type: string
          example: Motorcraft Engine Oil Filter
          description: The name of the part. Part name is typically the brand name
            + the part type name. For tires it is typically the brand name + model.
            There is a shop setting that can be enabled to remove the brand name from
            this field for all parts (tires excluded).
        partNumber:
          type: string
          example: 12345
          description: The manufacturer part number.
        variationId:
          type: string
          nullable: true
          deprecated: true
        imageUrl:
          type: string
          format: url
          nullable: true
          description: The URL of the part image that PartsTech uses for the part.
          example: https://image.partstech.com/d1/images/e4/11/71/w110_e411711499973c7640e852e84ed20fca0cd5c9d2.png
        partstechCatalogURL:
          type: string
          format: url
          description: The URL of the part's description on PartsTech.
          example: https://punchout.partstech.com/Motorcraft-Engine-Oil-Filter/details/BBRH-FL-500-S?part_term=5340
        availability:
          type: boolean
          example: true
          description: Returns true if the part is available at the time of quoting.
        backOrder:
          type: boolean
          example: true
          description: Returns true if the requested quantity is more than the available
            quantity and the remaining quantity will be back ordered.
        bundled:
          type: boolean
          example: true
          description: Returns true if the part is included in a bundled deal with
            one or more other parts in the order.
        vehicleId:
          type: integer
          nullable: true
          description: PartsTech's ID for a vehicle.
        vehicleName:
          type: string
          nullable: true
          description: "Name of the vehicle selected for fitment during the PartsTech\
            \ session. Typically consists of year, make, model, and engine."
        brand:
          $ref: "#/components/schemas/Brand"
        taxonomy:
          $ref: "#/components/schemas/ResponseTaxonomy"
        partCategory:
          $ref: "#/components/schemas/PartCategory"
        tireSize:
          type: string
          nullable: true
          deprecated: true
        searchedAsPartNumber:
          type: string
          nullable: true
        rewards:
          $ref: "#/components/schemas/Rewards"
        selectedLaborItems:
          type: array
          nullable: true
          description: |
            Labor items that were selected by user.

            Labor items may be attached to items and cart/punchout session.

            Selected labor items are not used (they will not be copied or returned) in next methods:
            - [Create Custom Cart](#operation/customCartCreate)
            - [Order Custom Cart](#operation/submitItems)
            - [Check Custom Cart Availability](#operation/checkItemsAvailability)
          items:
            $ref: "#/components/schemas/PunchoutLaborItem"
        storesAvailability:
          type: array
          nullable: true
          items:
            type: object
            minProperties: 2
            required:
            - quantity
            properties:
              specificName:
                type: string
                example: In network
              store:
                $ref: "#/components/schemas/BriefStore"
              quantity:
                type: integer
                example: 3
              main:
                type: boolean
                example: true
        attributes:
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/Attribute"
        deliveryNotes:
          type: array
          items:
            $ref: "#/components/schemas/DeliveryNote"
        itemizedQuote:
          $ref: "#/components/schemas/ItemizedItemQuote"
    ResponsePartLabor:
      title: Labor for Parts
      type: object
      required:
      - name
      - type
      - serviceType
      - laborTimeInterval
      - notes
      - taxonomy
      - additional
      - all
      - base
      - skill
      properties:
        name:
          type: string
          example: "Wheel Hub And Bearing Assembly R&R Service (Front), One Side"
        type:
          type: string
          example: null
        serviceType:
          type: string
          example: Service
        laborTimeInterval:
          type: string
          example: Hours
        notes:
          type: string
          example: "Includes: The removal of component and all necessary components\
            \ for access. Does not include: System diagnosis, testing, wheel alignment,\
            \ or a vehicle road test."
        taxonomy:
          type: object
          required:
          - action
          - name
          properties:
            taxonomyId:
              type: integer
              nullable: true
              example: 11507
            action:
              type: string
              example: ""
            name:
              type: string
              example: Wheel Hub And Bearing Assembly R&R
        additional:
          type: object
          required:
          - laborTime
          - laborTimeDescription
          - warrantyLaborTime
          properties:
            laborTime:
              type: number
              format: float
              example: 0
            laborTimeDescription:
              type: string
              example: ""
            warrantyLaborTime:
              type: number
              format: float
              example: 0
        all:
          type: object
          required:
          - laborTime
          - laborTimeDescription
          - warrantyLaborTime
          properties:
            laborTime:
              type: number
              format: float
              example: 0
            laborTimeDescription:
              type: string
              example: ""
            warrantyLaborTime:
              type: number
              format: float
              example: 0
        base:
          type: object
          required:
          - laborTime
          - laborTimeAverage
          - laborTimeDescription
          - warrantyLaborTime
          properties:
            laborTime:
              type: number
              format: float
              example: 1.3
            laborTimeAverage:
              type: number
              format: float
              example: 0
            laborTimeDescription:
              type: string
              example: One Side
            warrantyLaborTime:
              type: number
              format: float
              example: 0
        skill:
          type: object
          required:
          - code
          - description
          - name
          properties:
            code:
              type: string
              example: g
            description:
              type: string
              example: "Requires a person with limited skills and wherever simpler\
                \ measuring devices are used for proper repair (Feeler Gauge, Belt\
                \ Tensioner Gauge,  etc). This person must have a thorough working\
                \ knowledge of the component being serviced."
            name:
              type: string
              example: General
        position:
          type: object
          nullable: true
          required:
          - name
          - pcdbPositionID
          properties:
            name:
              type: string
              example: Front
            pcdbPositionID:
              type: integer
              example: 22
        attributes:
          type: array
          nullable: true
          items:
            type: object
            required:
            - id
            - name
            properties:
              id:
                type: integer
                example: 6
              name:
                type: string
                example: BrakeID
              text:
                type: string
                nullable: true
                example: "Brake: Disc/Disc/4-Wheel ABS"
    CartLocalInventoryItem:
      type: object
      required:
      - itemId
      - inventoryUID
      - partId
      - quantity
      - price
      - partName
      - partNumber
      - availability
      - brand
      properties:
        itemId:
          type: string
          example: 0ze4f01824764a61991b9d090fdc1813
          description: |
            The unique identifier for an item added to a cart.
            This ID allows PartsTech to reference a specific item in a specific session and its cart details (e.g. PO number, supplier notes, delivery method)."
        inventoryUID:
          type: string
          example: 123123123
          description: ID of item in local inventory.
        partId:
          type: string
          example: ABCD-12345
          description: PartsTech's ID for a part. Consists of `brandId`-`partNumber`.
        quantity:
          type: integer
          example: 2
          description: The requested quantity for a part.
        price:
          $ref: "#/components/schemas/PartPrice"
        partName:
          type: string
          example: Motorcraft Engine Oil Filter
          description: The name of the part. Part name is typically the brand name
            + the part type name. For tires it is typically the brand name + model.
            There is a shop setting that can be enabled to remove the brand name from
            this field for all parts (tires excluded).
        partNumber:
          type: string
          example: 12345
          description: The manufacturer part number.
        imageUrl:
          type: string
          format: url
          nullable: true
          description: The URL of the part image that PartsTech uses for the part.
          example: https://image.partstech.com/d1/images/e4/11/71/w110_e411711499973c7640e852e84ed20fca0cd5c9d2.png
        partstechCatalogURL:
          nullable: true
          type: string
          format: url
          description: The URL of the part's description on PartsTech.
          example: https://punchout.partstech.com/Motorcraft-Engine-Oil-Filter/details/BBRH-FL-500-S?part_term=5340
        availability:
          type: boolean
          example: true
          description: Returns true if the part is available at the time of quoting.
        vehicleId:
          type: integer
          nullable: true
          description: PartsTech's ID for a vehicle.
        vehicleName:
          type: string
          nullable: true
          description: "Name of the vehicle selected for fitment during the PartsTech\
            \ session. Typically consists of year, make, model, and engine."
        brand:
          $ref: "#/components/schemas/Brand"
        taxonomy:
          $ref: "#/components/schemas/ResponseTaxonomy"
        partCategory:
          $ref: "#/components/schemas/PartCategory"
        searchedAsPartNumber:
          type: string
          nullable: true
        attributes:
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/Attribute"
    PunchoutCartResponse:
      type: object
      required:
      - sessionId
      - orders
      properties:
        sessionId:
          type: string
          example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
          description: The unique identifier of a punchout session.
        orders:
          type: array
          items:
            $ref: "#/components/schemas/PunchoutOrder"
        localInventoryItems:
          type: array
          items:
            $ref: "#/components/schemas/CartLocalInventoryItem"
        redirectUrl:
          type: string
          example: https://app.partstech.com/api-search/your_partnerId/your_test_userId/1ag3d2b5240e4jcbbe3ee9c49c929fe4/
        selectedLaborItems:
          type: array
          nullable: true
          description: |
            Labor items that were selected by user.

            Labor items may be attached to items and cart/punchout session.

            Selected labor items are not used (they will not be copied or returned) in next methods:
            - [Create Custom Cart](#operation/customCartCreate)
            - [Order Custom Cart](#operation/submitItems)
            - [Check Custom Cart Availability](#operation/checkItemsAvailability)
          items:
            $ref: "#/components/schemas/PunchoutLaborItem"
    PunchoutPurchasedCartResponse:
      type: object
      required:
      - sessionId
      - orders
      properties:
        sessionId:
          type: string
          example: 1ag3d2b5240e4jcbbe3ee9c49c929fe4
          description: The unique identifier of a punchout session.
        orders:
          type: array
          items:
            $ref: "#/components/schemas/PunchoutPurchasedOrder"
        localInventoryItems:
          type: array
          items:
            $ref: "#/components/schemas/CartLocalInventoryItem"
        redirectUrl:
          type: string
          example: https://app.partstech.com/api-search/your_partnerId/your_test_userId/1ag3d2b5240e4jcbbe3ee9c49c929fe4/
        selectedLaborItems:
          type: array
          nullable: true
          description: |
            Labor items that were selected by user.

            Labor items may be attached to items and cart/punchout session.

            Selected labor items are not used (they will not be copied or returned) in next methods:
            - [Create Custom Cart](#operation/customCartCreate)
            - [Order Custom Cart](#operation/submitItems)
            - [Check Custom Cart Availability](#operation/checkItemsAvailability)
          items:
            $ref: "#/components/schemas/PunchoutLaborItem"
    PunchoutLaborItem:
      type: object
      required:
      - laborItemId
      - source
      - name
      - notes
      - skill
      - requiredSkill
      - hours
      - price
      - maintenance
      properties:
        laborItemId:
          type: string
        source:
          type: string
          enum:
          - MOTOR
          - MITCHELL
          - CUSTOM
          example: MOTOR
          description: "Source of labor application. Motor, mitchell APIs or manually\
            \ entered data."
        name:
          type: string
          description: Name of labor application
        notes:
          type: string
          nullable: true
          description: Nots for labor application
        skill:
          type: string
          description: Required skill
        requiredSkill:
          type: object
          description: Required skill
          required:
          - code
          - name
          - description
          properties:
            code:
              type: string
            name:
              type: string
            description:
              type: string
        hours:
          type: number
          format: float
          description: Required hours
        price:
          type: number
          format: float
          nullable: true
          description: Hours * labor rate
        vehicleId:
          type: integer
          nullable: true
          description: PartsTech's ID for a vehicle.
        partTypeId:
          type: integer
          nullable: true
          description: The ID of a part type from the Autocare Association's PCdb.
        taxonomy:
          type: object
          description: Motor Taxonomy
          nullable: true
          required:
          - name
          - action
          properties:
            taxonomyId:
              type: integer
              nullable: true
            name:
              type: string
            action:
              type: string
        maintenance:
          type: object
          description: Additional maintenance schedules data
          nullable: true
          required:
          - severity
          properties:
            severity:
              type: string
              enum:
              - Severe
              - Normal
              nullable: false
          oneOf:
          - type: object
            properties:
              interval:
                type: object
                required:
                - interval
                - type
                properties:
                  value:
                    type: integer
                    example: 10000
                    nullable: false
                  type:
                    type: string
                    enum:
                    - Miles
                    - Months
                    nullable: false
          - type: object
            properties:
              indicator:
                type: object
                description: Maintenance based on an indicator
                required:
                - name
                properties:
                  name:
                    type: string
                    nullable: false
                    example: Service 1
    ItemizedQuote:
      type: object
      nullable: true
      required:
      - quantity
      - tax
      - lines
      properties:
        quantity:
          type: integer
        tax:
          type: number
          format: float
        lines:
          type: array
          items:
            $ref: "#/components/schemas/ItemizedQuotePricingLine"
    ItemizedItemQuote:
      type: object
      nullable: true
      required:
      - tax
      - lines
      properties:
        tax:
          type: number
          format: float
        lines:
          type: array
          items:
            $ref: "#/components/schemas/ItemizedQuotePricingLine"
    ItemizedQuotePricingLine:
      type: object
      required:
      - name
      - type
      - price
      - taxed
      properties:
        name:
          type: string
        type:
          type: string
          enum:
          - TIRES
          - LABOR
          - DISPOSAL
          - ADDON
          - FEE
          - DISCOUNT
          description: Do allow to receive extra types
        price:
          type: number
          format: float
        perTirePrice:
          type: number
          format: float
          nullable: true
        taxed:
          type: boolean
    KeywordSearchParams:
      type: object
      required:
      - keyword
      properties:
        keyword:
          type: string
          example: Air Filter
    TireIdSearchParams:
      type: object
      required:
      - tireId
      properties:
        tireId:
          type: string
          description: "See [Tire Sizes by vehicle](#operation/tiresSizesByVehicle)"
          example: 1
    PartTypesSearchParams:
      type: object
      required:
      - partTypeIds
      properties:
        partTypeIds:
          type: array
          minItems: 1
          maxItems: 50
          uniqueItems: true
          items:
            type: integer
          example:
          - 1004
          - 1006
          description: The ID of a part type from the Autocare Association's PCdb.
    TireSizeSearchParams:
      type: object
      required:
      - width
      - height
      - rim
      properties:
        width:
          type: number
          format: float
          description: "See [Tire Sizes](#operation/tireSizes)"
        height:
          type: number
          format: float
          description: "See [Tire Sizes](#operation/tireSizes)"
        rim:
          type: number
          format: float
          description: "See [Tire Sizes](#operation/tireSizes)"
    PunchoutVehicleSearchParams:
      description: |
        A search parameters for the search by vehicle parameters.
        It consists on Vehicle arameters and Part Types or Keyword.

        [Search](#tag/search) require Vehicle arameters and one of another properties - Part Types or Keyword.

        [Create Quote](#operation/createQuote) requires only Vehicle parameters. Part Types or Keyword is optional.
      type: object
      minProperties: 1
      maxProperties: 2
      properties:
        vehicleParams:
          $ref: "#/components/schemas/VehicleParams"
    PunchoutVehicleSearchParamsByKeyword:
      allOf:
      - $ref: "#/components/schemas/PunchoutVehicleSearchParams"
      - $ref: "#/components/schemas/KeywordSearchParams"
    PunchoutVehicleSearchParamsByTireId:
      allOf:
      - $ref: "#/components/schemas/PunchoutVehicleSearchParams"
      - $ref: "#/components/schemas/TireIdSearchParams"
    PunchoutVehicleSearchParamsByTireSize:
      allOf:
      - $ref: "#/components/schemas/PunchoutVehicleSearchParams"
      - $ref: "#/components/schemas/TireSizeSearchParams"
    PunchoutVehicleSearchParamsByPartTypes:
      allOf:
      - $ref: "#/components/schemas/PunchoutVehicleSearchParams"
      - $ref: "#/components/schemas/PartTypesSearchParams"
    VehicleSearchParams:
      description: |
        A search parameters for the search by vehicle parameters.
        It consists on Vehicle arameters and Part Types or Keyword.

        [Search](#tag/search) require Vehicle arameters and one of another properties - Part Types or Keyword.

        [Create Quote](#operation/createQuote) requires only Vehicle parameters. Part Types or Keyword is optional.
      type: object
      minProperties: 1
      maxProperties: 2
      required:
      - vehicleParams
      properties:
        vehicleParams:
          $ref: "#/components/schemas/VehicleParams"
    VehicleSearchParamsByKeyword:
      allOf:
      - $ref: "#/components/schemas/VehicleSearchParams"
      - $ref: "#/components/schemas/KeywordSearchParams"
    VehicleSearchParamsByTireId:
      allOf:
      - $ref: "#/components/schemas/VehicleSearchParams"
      - $ref: "#/components/schemas/TireIdSearchParams"
    VehicleSearchParamsByTireSize:
      allOf:
      - $ref: "#/components/schemas/VehicleSearchParams"
      - $ref: "#/components/schemas/TireSizeSearchParams"
    VehicleSearchParamsByPartTypes:
      allOf:
      - $ref: "#/components/schemas/VehicleSearchParams"
      - $ref: "#/components/schemas/PartTypesSearchParams"
    PartsTechVehicleIdSearchParams:
      description: |
        A search parameters for the search by PartsTech Vehicle ID.
        It consists on Vehicle ID and Part Types or Keyword.
      type: object
      minProperties: 1
      maxProperties: 2
      required:
      - vehicleId
      properties:
        vehicleId:
          type: integer
          example: 1
          description: PartsTech's ID for a vehicle.
    PartsTechVehicleIdSearchParamsByKeyword:
      allOf:
      - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
      - $ref: "#/components/schemas/KeywordSearchParams"
    PartsTechVehicleIdSearchParamsByTireId:
      allOf:
      - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
      - $ref: "#/components/schemas/TireIdSearchParams"
    PartsTechVehicleIdSearchParamsByTireSize:
      allOf:
      - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
      - $ref: "#/components/schemas/TireSizeSearchParams"
    PartsTechVehicleIdSearchParamsByPartTypes:
      allOf:
      - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
      - $ref: "#/components/schemas/PartTypesSearchParams"
    VinSearchParams:
      description: |
        A search parameters for the search by vin.
        It consists on VIN and Part Types or Keyword.

        [Search](#tag/search) require VIN and one of another properties - Part Types or Keyword.

        [Create Quote](#operation/createQuote) requires only VIN. Part Types or Keyword is optional.
      type: object
      minProperties: 1
      maxProperties: 2
      required:
      - vin
      properties:
        vin:
          type: string
          example: SomeVIN
    VinSearchParamsByKeyword:
      allOf:
      - $ref: "#/components/schemas/VinSearchParams"
      - $ref: "#/components/schemas/KeywordSearchParams"
    VinSearchParamsByTireId:
      allOf:
      - $ref: "#/components/schemas/VinSearchParams"
      - $ref: "#/components/schemas/TireIdSearchParams"
    VinSearchParamsByTireSize:
      allOf:
      - $ref: "#/components/schemas/VinSearchParams"
      - $ref: "#/components/schemas/TireSizeSearchParams"
    VinSearchParamsByPartTypes:
      allOf:
      - $ref: "#/components/schemas/VinSearchParams"
      - $ref: "#/components/schemas/PartTypesSearchParams"
    PlateSearchParams:
      description: |
        A search parameters for the search by Plate.
        It consists on Plate and Part Types or Keyword.

        [Search](#tag/search) require Plate and one of another properties - Part Types or Keyword.

        [Create Quote](#operation/createQuote) requires only Plate. Part Types or Keyword is optional.
      type: object
      minProperties: 1
      maxProperties: 2
      required:
      - plate
      properties:
        plate:
          type: object
          required:
          - state
          - plate
          properties:
            state:
              description: "ISO 3166-2: Second part. Example for US-MA - MA."
              type: string
              minLength: 2
              maxLength: 2
              pattern: "\\w{2,2}"
              example: MA
            plate:
              type: string
              example: SomePlate
    PlateSearchParamsByKeyword:
      allOf:
      - $ref: "#/components/schemas/PlateSearchParams"
      - $ref: "#/components/schemas/KeywordSearchParams"
    PlateSearchParamsByTireId:
      allOf:
      - $ref: "#/components/schemas/PlateSearchParams"
      - $ref: "#/components/schemas/TireIdSearchParams"
    PlateSearchParamsByTireSize:
      allOf:
      - $ref: "#/components/schemas/PlateSearchParams"
      - $ref: "#/components/schemas/TireSizeSearchParams"
    PlateSearchParamsByPartTypes:
      allOf:
      - $ref: "#/components/schemas/PlateSearchParams"
      - $ref: "#/components/schemas/PartTypesSearchParams"
    PartNumberSearchParams:
      description: |
        A search parameters for the search by PartNumber.
        It consists on only PartNumber.

        Now it has limits of 1 PartNumber in a request.
      type: object
      required:
      - partNumber
      properties:
        partNumber:
          type: array
          minItems: 1
          maxItems: 1
          uniqueItems: true
          description: The manufacturer part number.
          items:
            type: string
          example:
          - 12345
    NonAppSearchParams:
      description: |
        Parameters for the search by universal part types.

        Use part types with application `UNIVERSAL` or `UNIVERSAL_FITTED` (see ["Get/Search Part Types"](#operation/getPartTypes)).
        Check and select `required` attributes for a part type before sending of search request (see ["Get Part Type Attributes"](#operation/getPartTypeAttributes)).
      type: object
      required:
      - partTypeId
      - attributes
      properties:
        partTypeId:
          type: integer
          description: The ID of a part type from the Autocare Association's PCdb.
        attributes:
          type: array
          items:
            type: object
            required:
            - name
            - values
            properties:
              name:
                type: string
              values:
                type: array
                items:
                  type: string
    SearchParams:
      type: object
      oneOf:
      - $ref: "#/components/schemas/VehicleSearchParams"
      - $ref: "#/components/schemas/VinSearchParams"
      - $ref: "#/components/schemas/PlateSearchParams"
      - $ref: "#/components/schemas/PartNumberSearchParams"
    VehicleParamsByEngineConfigId:
      title: Vehicle params with engineConfigId
      description: |
        Vehicle parameters with Engine Config ID.

        EngineID and other Engine parameters will be defined by Engine Config ID.
      type: object
      required:
      - yearId
      - makeId
      - modelId
      - subModelId
      - engineConfigId
      properties:
        yearId:
          type: integer
          example: 2015
        makeId:
          type: integer
          example: 65
        modelId:
          type: integer
          example: 123
        subModelId:
          type: integer
          example: 234
        engineConfigId:
          type: integer
          example: 34
    VehicleParamsByEngineIdAndEngineParams:
      title: Vehicle params with engineId and engine params
      description: |
        Vehicle parameters with Engine ID and Engine parameters.
      type: object
      required:
      - yearId
      - makeId
      - modelId
      - subModelId
      - engineId
      - engineParams
      properties:
        yearId:
          type: integer
          example: 2015
        makeId:
          type: integer
          example: 65
        modelId:
          type: integer
          example: 123
        subModelId:
          type: integer
          example: 234
        engineId:
          type: integer
          example: 12344
        engineParams:
          $ref: "#/components/schemas/EngineParams"
    VehicleParams:
      oneOf:
      - $ref: "#/components/schemas/VehicleParamsByEngineIdAndEngineParams"
      - $ref: "#/components/schemas/VehicleParamsByEngineConfigId"
    PunchoutVehicleParamsByEngineConfigId:
      title: Punchout vehicle params with engineConfigId
      description: |
        Punchout vehicle parameters with Engine Config ID.

        EngineID and other Engine parameters will be defined by Engine Config ID.
      type: object
      properties:
        yearId:
          type: integer
          nullable: true
          example: 2015
        makeId:
          type: integer
          nullable: true
          example: 65
        modelId:
          type: integer
          nullable: true
          example: 123
        subModelId:
          type: integer
          nullable: true
          example: 234
        engineConfigId:
          type: integer
          nullable: true
          example: 34
    PunchoutVehicleParamsByEngineIdAndEngineParams:
      title: Punchout vehicle params with engineId and engine params
      description: |
        Punchout vehicle parameters with Engine ID and Engine parameters.
      type: object
      properties:
        yearId:
          type: integer
          nullable: true
          example: 2015
        makeId:
          type: integer
          nullable: true
          example: 65
        modelId:
          type: integer
          nullable: true
          example: 123
        subModelId:
          type: integer
          nullable: true
          example: 234
        engineId:
          type: integer
          nullable: true
          example: 12344
        engineParams:
          nullable: true
          type: object
          anyOf:
          - $ref: "#/components/schemas/EngineParams"
    PunchoutVehicleParams:
      type: object
      oneOf:
      - $ref: "#/components/schemas/PunchoutVehicleParamsByEngineIdAndEngineParams"
      - $ref: "#/components/schemas/PunchoutVehicleParamsByEngineConfigId"
    EngineParams:
      title: Engine params
      type: object
      required:
      - engineVinId
      - engineDesignationId
      - engineVersionId
      - fuelTypeId
      - cylinderHeadTypeId
      properties:
        engineVinId:
          type: integer
          example: 134
        engineDesignationId:
          type: integer
          example: 344
        engineVersionId:
          type: integer
          example: 342
        fuelTypeId:
          type: integer
          example: 54
        cylinderHeadTypeId:
          type: integer
          example: 25243
    Attribute:
      type: object
      properties:
        name:
          type: string
        label:
          type: string
        value:
          type: string
        type:
          type: string
          enum:
          - Vehicle
          - Part
          - Both
        dbInfo:
          nullable: true
          type: object
          required:
          - dbName
          - tableName
          - idFieldName
          - idValue
          properties:
            dbName:
              type: string
            tableName:
              type: string
            idFieldName:
              type: string
            idValue:
              type: string
    Order:
      type: object
      required:
      - id
      - supplier
      - store
      - shippingAddress
      - delivery
      - tax
      - totalPrice
      - totalDiscount
      - coreCharge
      - fet
      - shippingPrice
      - paymentType
      - orderUrl
      - status
      - parts
      properties:
        id:
          type: integer
        supplier:
          $ref: "#/components/schemas/BriefSupplier"
        store:
          $ref: "#/components/schemas/PaidOrderStore"
        shippingAddress:
          $ref: "#/components/schemas/Address"
        delivery:
          type: object
          required:
          - name
          - price
          - status
          properties:
            name:
              type: string
              nullable: true
              example: hotshot
            price:
              type: number
              format: float
              example: 1.24
            status:
              description: Status of delivery. Enum values can be changed.
              type: string
              enum:
              - Order not placed
              - Order placed
              - Acknowledged
              - Received
              - Shipping
              - Shipped
              - Completed
              - Cancelled
              - Returned
            date:
              description: "Delivery Date, ISO 8601/RFC 3339, UTC"
              type: string
              nullable: true
              format: date-time
        tax:
          type: number
          format: float
          example: 9.01
        totalPrice:
          type: number
          format: float
          example: 25
        totalDiscount:
          type: number
          format: float
          example: 2
        coreCharge:
          type: number
          format: float
          example: 12
        fet:
          type: number
          description: The Federal Excise Tax (FET)
          format: float
          example: 1.2
        shippingPrice:
          type: number
          format: number
          example: 1.24
        paymentType:
          type: string
          nullable: true
          enum:
          - CreditCard
          - Wholesale
        poNumber:
          type: string
          nullable: true
          example: PoNumber
        invoiceNumbers:
          type: array
          items:
            type: string
          example:
          - 123123
          - dsfssre
        notes:
          type: string
          nullable: true
          example: Notes
        orderUrl:
          type: string
          example: https://app.partstech.com/some-invoice-url
        paymentDate:
          type: string
          format: date-time
          nullable: true
          description: "ISO 8601/RFC 3339, UTC"
        status:
          type: string
          enum:
          - In Progress
          - Completed
          - Returned
          - Failed
        rewards:
          $ref: "#/components/schemas/Rewards"
        parts:
          type: array
          items:
            $ref: "#/components/schemas/PurchasedPart"
    PurchasedPart:
      type: object
      required:
      - partId
      - partNumber
      - partName
      - quantity
      - price
      - partstechCatalogURL
      - brand
      properties:
        partId:
          type: string
          example: ABCD-12345
        lineCardId:
          type: integer
          nullable: true
          description: |
            PartsTech's ID for a line code. Makes part selection much more
            accurate when provided in requests to create a cart or search the PartsTech
            Catalog.
        partNumber:
          type: string
          example: 12345
          description: The manufacturer part number.
        partName:
          type: string
          example: Motorcraft Engine Oil Filter
          description: |
            The name of the part. 
            Part name is typically the brand name + the part type name.
            For tires it is typically the brand name + model.
            There is a shop setting that can be enabled to remove the brand name from this field
            for all parts (tires excluded).
        quantity:
          type: integer
          example: 2
        quantityDelivered:
          type: integer
          example: 2
        price:
          $ref: "#/components/schemas/PartPrice"
        deliveryStatus:
          type: string
          enum:
          - New
          - Not Shipped
          - Shipped
          - Delivered
          - Cancel Requested
          - Cancel Approved
          - Cancelled
          - Return Initiated
          - Return Approved
          - Returned
          example: Shipped
        imageUrl:
          type: string
          format: url
          nullable: true
          description: The URL of the part image that PartsTech uses for the part.
          example: https://image.partstech.com/d1/images/e4/11/71/w110_e411711499973c7640e852e84ed20fca0cd5c9d2.png
        partstechCatalogURL:
          type: string
          format: url
          description: The URL of the part's description on PartsTech.
          example: https://punchout.partstech.com/Motorcraft-Engine-Oil-Filter/details/BBRH-FL-500-S?part_term=5340
        vehicleId:
          type: integer
          nullable: true
          description: PartsTech's ID for a vehicle.
        vehicleName:
          type: string
          nullable: true
          description: |
            Name of the vehicle selected for fitment during the PartsTech session. 
            Typically consists of year, make, model, and engine.
        brand:
          $ref: "#/components/schemas/Brand"
        taxonomy:
          $ref: "#/components/schemas/ResponseTaxonomy"
        partCategory:
          $ref: "#/components/schemas/PartCategory"
        searchedAsPartNumber:
          type: string
          nullable: true
        bundled:
          type: boolean
          example: true
          description: Returns true if the part is included in a bundled deal with one or more other parts in the order.
    Address:
      type: object
      description: Address of the user's shop
      required:
      - address1
      - city
      - state
      - zipCode
      properties:
        address1:
          type: string
          example: 1 Broadway
        address2:
          type: string
          nullable: true
          example: 14th Floor
        city:
          type: string
          example: Cambridge
        state:
          description: "ISO 3166-2: Second part. Example for US-MA - MA."
          type: string
          minLength: 2
          maxLength: 2
          pattern: "\\w{2,2}"
          example: MA
        zipCode:
          type: string
          pattern: "(^\\d{5}$)|(^\\d{5}-\\d{4}$)"
          example: '02142'
        country:
          description: ISO 3166-1 alpha-2
          type: string
          minLength: 2
          maxLength: 2
          pattern: "\\w{2,2}"
          default: US
          example: US
    User:
      type: object
      required:
      - username
      - email
      - enabled
      - lastLogin
      - allowOrderEmails
      - firstName
      - lastName
      - demo
      properties:
        username:
          type: string
          example: mechanic
        email:
          type: string
          example: iron-man@gmail.com
        enabled:
          type: boolean
          example: true
          description: Shows if user is activated.
        lastLogin:
          type: string
          format: date-time
          nullable: true
          description: "Shows date and time of last user login. ISO 8601/RFC 3339,\
            \ UTC"
        registrationDate:
          type: string
          format: date
          nullable: true
          description: Shows date of user registration.
        allowOrderEmails:
          type: boolean
          example: true
        firstName:
          type: string
          example: Iron
        lastName:
          type: string
          example: Man
        timeZone:
          type: string
          example: America/New_York
          nullable: true
        demo:
          type: boolean
          example: false
    BriefShop:
      type: object
      required:
      - id
      - name
      - phone
      - demo
      properties:
        id:
          type: integer
          example: 1
          description: PartsTech ID of a shop.
        name:
          type: string
          example: Mechanic Shop
        phone:
          type: string
          example: (777) 777-7777 x111
        cellphone:
          type: string
          nullable: true
          example: (777) 777-7777 x111
        demo:
          type: boolean
          example: false
    EntireShop:
      allOf:
      - $ref: "#/components/schemas/BriefShop"
      - type: object
        required:
        - pickUpRadius
        - shippingAddress
        - billingAddress
        properties:
          pickUpRadius:
            type: integer
            minimum: 0
            example: 25
          otherBusinessName:
            type: string
            nullable: true
          shippingAddress:
            $ref: "#/components/schemas/Address"
          billingAddress:
            $ref: "#/components/schemas/Address"
    ExPermission:
      type: object
      required:
      - id
      - name
      - permission
      properties:
        id:
          type: string
          enum:
          - labor
          - labor_mitchell
          - schedules
          - specs
          - local_inventory
          description: >-
            Permission identifier. `labor` covers MOTOR labor (the default labor source);
            `labor_mitchell` covers Mitchell1 labor.
        name:
          type: string
        permission:
          type: boolean
    BriefSupplier:
      type: object
      required:
      - id
      - name
      properties:
        id:
          type: integer
          example: 1458
          description: PartsTech's ID for a supplier.
        name:
          type: string
          example: Advance Auto Parts
          description: The name of a supplier.
    CartSearchSupplier:
      allOf:
      - $ref: "#/components/schemas/BriefSupplier"
      - type: object
        required:
        - allowStoreSelect
        - availabilitySelect
        properties:
          allowStoreSelect:
            type: boolean
            description: "If true for a supplier, users have the option to select\
              \ a specfic store when sourcing parts."
          availabilitySelect:
            type: boolean
            description: "If true for a supplier, users are required to select a specific\
              \ store when sourcing parts."
          postOrderUpdates:
            type: boolean
            description: "If true for a supplier, order can be updated after they\
              \ placed."
    BriefSupplierWithCredentials:
      allOf:
      - $ref: "#/components/schemas/BriefSupplier"
      - type: object
        required:
        - lockedStore
        properties:
          credentialsFormat:
            $ref: "#/components/schemas/SupplierPreferenceCredentialsFormat"
          lockedStore:
            type: boolean
            description: |
              If true: It will try to assign itself a store to the supplier preference of a shop
    BriefStore:
      type: object
      required:
      - id
      - name
      properties:
        id:
          type: integer
          example: 1
          description: PartsTech's ID for a store.
        name:
          type: integer
          example: "5904 - Springfield, MA"
          description: The name of a store
    PreferredStore:
      allOf:
      - $ref: "#/components/schemas/BriefStore"
      - type: object
        required:
        - sellerId
        properties:
          sellerId:
            type: string
            nullable: true
            example: asdasdb
    OrderStore:
      description: Store Data for Unpaid Orders
      allOf:
      - $ref: "#/components/schemas/BriefStore"
      - type: object
        required:
        - address
        properties:
          address:
            $ref: "#/components/schemas/Address"
    PaidOrderStore:
      description: Store Data for Paid Orders
      allOf:
      - $ref: "#/components/schemas/OrderStore"
      - type: object
        required:
        - sellerId
        properties:
          sellerId:
            type: string
            nullable: true
    Store:
      allOf:
      - $ref: "#/components/schemas/BriefStore"
      - type: object
        required:
        - address
        - pickUp
        - hotshot
        - dropship
        properties:
          address:
            $ref: "#/components/schemas/Address"
          pickUp:
            type: boolean
            example: true
          hotshot:
            type: integer
            example: 25
          dropship:
            type: boolean
            example: true
          distance:
            type: integer
            nullable: true
            description: A distance to the selected address/zip or to the shipping
              address of an user
          shippingMethods:
            type: array
            items:
              $ref: "#/components/schemas/ShippingMethod"
          supplier:
            $ref: "#/components/schemas/BriefSupplierWithCredentials"
    ShippingMethod:
      type: string
      enum:
        - USPS
        - UPS
        - FedEx
      example:
        - USPS
        - UPS
        - FedEx
    SupplierPreferenceCredentialsResponse:
      type: object
      description: Credential
      required:
      - label
      - internalName
      - value
      - type
      properties:
        label:
          type: string
          description: User-friendly label for the credential.
        internalName:
          type: string
          description: Internal name of the credential in Partstech.
        value:
          type: string
        type:
          type: string
          description: Type of the credential. Text or Password.
    SupplierPreferenceCredentialsRequest:
      type: array
      items:
        type: object
        description: Supplier preference credential request
        required:
        - name
        - value
        properties:
          name:
            type: string
          value:
            type: string
    SupplierPreferenceCredentialsFormat:
      description: |
        **Note** that different suppliers have a different format of the credentials.
        And a number of the credentials is not stagnant.
        Another formats can be added during new supplier integrations.

        `label` User-friendly label for property.

        `internalName` Property name in `SupplierPreferenceCredentials` object.

        `type` Field type.
      type: array
      nullable: true
      items:
        type: object
        required:
        - label
        - internalName
        - type
        properties:
          label:
            type: string
            description: User-friendly label for property.
            example: null
          internalName:
            type: string
            description: Property name in `SupplierPreferenceCredentials` object
            example: null
          type:
            type: string
            description: Field type
            example: null
      example:
      - label: Customer
        internalName: customer
        type: text
      - label: SMS Username
        internalName: username
        type: text
      - label: SMS Password
        internalName: password
        type: password
    Brand:
      type: object
      description: Contains brand information about a part.
      required:
      - brandID
      - brandName
      properties:
        brandID:
          type: string
          example: BBCM
          description: The ID of a brand from the Autocare Association.
        brandName:
          type: string
          example: Alba
          description: The name of a brand.
        id:
          description: PartsTech's ID for a brand.
          type: integer
          example: 1
          nullable: true
        displayName:
          type: string
          nullable: true
          example: Alba
        lineCode:
          type: string
          nullable: true
      example:
        brandID: BBHK
        brandName: Bosch
        id: 551
        displayName: Bosch
    ResponsePartType:
      type: object
      required:
      - partTypeId
      - partTypeName
      - description
      - application
      properties:
        partTypeId:
          type: integer
          description: The ID of a part type from the Autocare Association's PCdb..
        partTypeName:
          type: string
          description: The name of a part type.
        description:
          type: string
          nullable: true
        application:
          type: string
          description: |
            Determines whether it can be used without vehicle params in the search.
            UNIVERSAL can be used without vehicle params.
            FITTED requires vehicle.
            UNIVERSAL_FITTED can be with or without vehicle params.
          enum:
          - FITTED
          - UNIVERSAL
          - UNIVERSAL_FITTED
      example:
        partTypeId: 53431
        partTypeName: Voltage Regulator Screw
        description: Mounting screw for the voltage regulator.
        application: FITTED
    ResponsePartTypeAttribute:
      type: object
      required:
      - name
      - values
      - required
      properties:
        name:
          type: string
        values:
          type: array
          items:
            type: string
        required:
          type: boolean
    ResponseVehicle:
      type: object
      nullable: true
      required:
      - baseVehicleId
      - yearId
      - makeId
      - makeName
      - modelId
      - modelName
      - subModelId
      - subModelName
      - engineId
      - vehicleName
      - vehicleId
      - engineParams
      - engineName
      - regions
      - deprecated
      properties:
        baseVehicleId:
          type: integer
          example: 475485
        yearId:
          type: integer
          example: 2012
        makeId:
          type: integer
          example: 2
        makeName:
          type: string
          example: Porsche
        modelId:
          type: integer
          example: 10
        modelName:
          type: string
          example: 911
        subModelId:
          type: integer
          example: 55
        subModelName:
          type: string
          example: Carrera
        engineId:
          type: integer
          example: 2568
        vehicleName:
          type: string
          example: 2012 Porsche 911 Carrera 3.6L H6  DOHC
          description: "Name of the vehicle selected for fitment during the PartsTech\
            \ session. Typically consists of year, make, model, and engine."
        vehicleId:
          description: PartsTech's ID for a vehicle.
          type: integer
          example: 258298
        engineParams:
          $ref: "#/components/schemas/EngineParams"
        engineName:
          type: string
          example: 3.6L H6  DOHC
        region:
          type: string
          description: ISO 3166-1 alpha-2
          nullable: true
          example: US
          deprecated: true
        regions:
          $ref: "#/components/schemas/Regions"
        deprecated:
          type: boolean
          example: false
    ResponseTaxonomy:
      type: object
      nullable: true
      description: |
        Part taxonomy has three levels of classification. 
        Category, subcategory, and part type. 
        Category is the most broad and each category contains subcategories.
        Each subcategory contains part types. 
        Part type is the most specific classification for a part. 
        For example, the taxonomy for brake pads are the following
        \- Category = Brake - Subcategory = Disc Pads and Brake Shoes - Part Type = Disc Brake Pad Set.
      required:
      - partTypeId
      properties:
        partTypeId:
          type: integer
          example: 14216
          description: The ID of a part type from the Autocare Association's PCdb.
        partTypeName:
          type: string
          nullable: true
          example: Air Filter Set
          description: The name of a part type.
        partTypeDescription:
          type: string
          nullable: true
          example: Initial fill additive for turbochargers.
          description: The description of a part type.
        categoryId:
          type: integer
          nullable: true
          example: 12
          description: The ID of a part category from the Autocare Association's PCdb.
            Category is the highest level of part taxonomy.
        categoryName:
          type: string
          nullable: true
          example: Air and Fuel Delivery
          description: The name of a category.
        subCategoryId:
          type: integer
          example: 153
          description: The ID of a subcategory from the Autocare Association's PCdb.
        subCategoryName:
          type: string
          nullable: true
          example: Filters
          description: The name of a subcategory.
      example:
        partTypeId: 8852
        partTypeName: Windshield Wiper Blade
        categoryId: 22
        categoryName: Wiper and Washer
        subCategoryId: 236
        subCategoryName: "Windshield Wiper Arm, Blade, and Related Components"
    Rewards:
      type: array
      minItems: 0
      nullable: true
      items:
        type: object
        properties:
          program:
            type: string
            nullable: true
          points:
            type: integer
            nullable: true
          bonusPoints:
            type: integer
            nullable: true
    PartPrice:
      type: object
      required:
      - cost
      - core
      - fet
      properties:
        list:
          type: number
          format: float
          nullable: true
          example: 1.2
          description: Not all parts will have a list price. This property will contain
            the null value for parts without a list price.
        price:
          type: number
          format: float
          example: 1.6
          description: "Total price charged to the user for an item, includes discounts\
            \ and core charge if applicable."
        cost:
          type: number
          format: float
          example: 1.24
          description: Cost of an item for the user including any discounts. Excludes
            any core charges.
        core:
          type: number
          format: float
          example: 0.4
          description: A fee for certain part types that is returned to the purchaser
            when the old part that is being replaced is returned to the store.
        fet:
          type: number
          description: The Federal Excise Tax (FET) applies to tires used on the road
            with a maximum load capacity greater than 3500 pounds. This tax is charged
            to the purchaser of the tire from the tire supplier. Only 100% accurate
            FET values are sent through the PartsTech API.
          format: float
          nullable: true
          example: 1.2
        retail:
          type: number
          description: The price to charge customers. PartsTech calculates this price
            by taking the ``cost`` and then applying the appropriate mark up from
            the user's retail pricing configuration. This property will be null if
            there is no applicable mark up to the item or if the user has not set
            up their retail pricing configuration.
          nullable: true
          format: float
          example: 2
        discount:
          type: number
          description: The discount for an item. There can be a discount when an item
            is quoted or purchased as part of a bundled deal from participating suppliers.
          nullable: true
          format: float
          example: 0.2
        map:
          type: number
          description: Minimum Advertised Price
          nullable: true
          format: float
          example: 1.9
    PartCategory:
      type: string
      enum:
      - Maintenance
      - Service
      - Consumable
      nullable: true
    Regions:
      description: Array of country codes ISO 3166-1 alpha-2
      type: array
      items:
        type: string
      example:
      - US
      - CA
    DeliveryNote:
      type: object
      required:
      - label
      - text
      - date
      properties:
        label:
          type: string
          nullable: true
        text:
          type: string
          nullable: true
    LocalInventoryItem:
      type: object
      required:
      - inventoryUID
      - partNumber
      - onHand
      - partPrice
      - partCost
      properties:
        inventoryUID:
          type: string
          description: Unique ID of item in SMS.
        partNumber:
          type: string
        brandAAIAId:
          type: string
          nullable: true
          description: The ID of a brand from the Autocare Association. Can be got
            from brand object.
        brandUID:
          type: integer
          nullable: true
          description: The ID of a brand in SMS.
        brandName:
          type: string
          nullable: true
          description: The name of a brand in SMS.
        lineCode:
          type: string
          nullable: true
        partDescription:
          type: string
          nullable: true
        supplierId:
          type: integer
          nullable: true
          description: Supplier ID in PartsTech.
        supplierUID:
          type: string
          nullable: true
          description: Supplier ID in SMS.
        supplierName:
          type: string
          nullable: true
          description: Supplier Name in SMS.
        categoryUID:
          type: string
          nullable: true
        categoryName:
          type: string
          nullable: true
        onHand:
          type: integer
          minimum: 0
          description: Current quantity in inventory.
        partPrice:
          type: number
          format: float
          description: Price for customer.
        partCost:
          type: number
          format: float
          description: Price for shop.
    LocalInventoryMappingReportItem:
      type: object
      required:
      - inventoryUID
      - partNumber
      - onHand
      - partPrice
      - partCost
      - status
      properties:
        inventoryUID:
          description: Unique ID of item in SMS.
          type: string
        partNumber:
          type: string
        brandAAIAID:
          description: The ID of a brand from the Autocare Association. Can be got
            from brand object.
          type: string
          nullable: true
        onHand:
          description: Current quantity in inventory.
          type: integer
        partPrice:
          description: Price for customer.
          type: number
          format: float
        partCost:
          description: Price for shop.
          type: number
          format: float
        status:
          type: string
          enum:
          - MAPPED
          - UNMAPPED
        error:
          description: Mapping error details.
          type: object
          nullable: true
          required:
          - errorCode
          - message
          properties:
            errorCode:
              description: |
                Error code. Describes a reason why items were not mapped.
                - NO_PARTNER_MAPPING
                - NO_SUPPLIER_MAPPING
                - NO_LINE_CODE_MAPPING
                - NO_BRAND_MAPPING
                - PART_NOT_FOUND
                - MULTIPLE_PARTS_FOUND
                - etc
              type: string
            message:
              type: string
    LocalInventoryPart:
      type: object
      required:
      - inventoryUID
      - partId
      - partNumber
      - partName
      - brand
      - quantity
      properties:
        inventoryUID:
          type: string
          description: ID of part in local inventory.
        partId:
          type: string
          example: BBHK-24CA
          description: PartsTech's ID for a part. Consists of brandId-partNumber.
        partNumber:
          type: string
          example: 24CA
          description: The manufacturer part number.
        partName:
          type: string
          example: Bosch Windshield Wiper Blade
          description: The name of the part. Part name is typically the brand name
            + the part type name. For tires it is typically the brand name + model.
            There is a shop setting that can be enabled to remove the brand name from
            this field for all parts (tires excluded).
        brand:
          $ref: "#/components/schemas/Brand"
        vehicleId:
          type: integer
          nullable: true
          description: PartsTech's ID for a vehicle.
        vehicleName:
          type: string
          nullable: true
          description: "Name of the vehicle selected for fitment during the PartsTech\
            \ session. Typically consists of year, make, model, and engine."
        images:
          type: array
          minItems: 0
          items:
            type: object
            required:
            - preview
            - full
            - medium
            properties:
              preview:
                type: string
              full:
                type: string
              medium:
                type: string
          example:
          - preview: some_url
            full: some_url
            medium: some_url
          - preview: some_url
            full: some_url
            medium: some_url
        taxonomy:
          $ref: "#/components/schemas/ResponseTaxonomy"
        partCategory:
          $ref: "#/components/schemas/PartCategory"
        supplier:
          $ref: "#/components/schemas/BriefSupplier"
        quantity:
          type: integer
          description: Current quantity in inventory.
        price:
          $ref: "#/components/schemas/PartPrice"
        attributes:
          type: array
          minItems: 0
          items:
            $ref: "#/components/schemas/Attribute"
          example:
          - name: ItemQuantity
            label: Item Qty/Size/Weight
            value: 1 Each
            type: Part
          - name: Position
            label: Position
            value: Front Left
            type: Part
            dbInfo:
              dbName: pcdb
              tableName: positions
              idFieldName: Position
              idValue: PositionID
          - name: Qty
            label: Quantity per vehicle
            value: 1
            type: Both
        variations:
          type: array
          minItems: 0
          items:
            type: object
            properties:
              variationId:
                type: string
              notes:
                type: array
                minItems: 0
                items:
                  type: array
                  minItems: 1
                  items:
                    type: string
                  example: {}
              partName:
                type: string
                nullable: true
                example: Bosch Windshield Wiper Blade
              attributes:
                type: array
                minItems: 0
                items:
                  $ref: "#/components/schemas/Attribute"
                example:
                - name: ItemQuantity
                  label: Item Qty/Size/Weight
                  value: 1 Each
                  type: Part
          example:
          - variationId: E1fHKgzpPvO
            partName: Bosch Clear Advantage
            notes: {}
            attributes:
            - name: Position
              label: Position
              value: Front Left
              type: Part
              dbInfo:
                dbName: pcdb
                tableName: positions
                idFieldName: Position
                idValue: PositionID
            - name: Bodytype
              label: Body
              value: Sedan
              type: Both
              dbInfo:
                dbName: vcdb
                tableName: bodytype
                idFieldName: BodyTypeName
                idValue: BodyTypeID
            - name: Qty
              label: Quantity per vehicle
              value: 1
              type: Both
          - variationId: 3fh7cCVNQOX
            partName: Bosch Clear Advantage
            notes:
            - - Remove plastic guide from wiper arm
            attributes:
            - name: Position
              label: Position
              value: Front Left
              type: Part
              dbInfo:
                dbName: pcdb
                tableName: positions
                idFieldName: Position
                idValue: PositionID
            - name: Bodytype
              label: Body
              value: Coupe
              type: Both
              dbInfo:
                dbName: vcdb
                tableName: bodytype
                idFieldName: BodyTypeName
                idValue: BodyTypeID
            - name: Qty
              label: Quantity per vehicle
              value: 1
              type: Both
          - variationId: Iwf0SBSW8u4
            partName: Bosch Clear Advantage
            notes:
            - - Remove plastic guide from wiper arm
            attributes:
            - name: Position
              label: Position
              value: Front Left
              type: Part
              dbInfo:
                dbName: pcdb
                tableName: positions
                idFieldName: Position
                idValue: PositionID
            - name: Bodytype
              label: Body
              value: Convertible
              type: Both
              dbInfo:
                dbName: vcdb
                tableName: bodytype
                idFieldName: BodyTypeName
                idValue: BodyTypeID
            - name: Qty
              label: Quantity per vehicle
              value: 1
              type: Both
        notes:
          type: array
          minItems: 0
          items:
            type: array
            minItems: 1
            items:
              type: string
          example:
          - - Optional Ceramic
            - Includes Hardware Installation Kit
        originalPart:
          type: object
          nullable: true
          required:
          - partNumber
          properties:
            typeOfOrigination:
              type: string
              enum:
              - Alternate
              - Interchange
              - Supersession
            partId:
              type: string
              nullable: true
              example: ABCD-12345
            partNumber:
              type: string
              example: 12345
            brand:
              $ref: "#/components/schemas/Brand"
    Error:
      title: Error Definition
      type: object
      required:
      - code
      - message
      properties:
        code:
          type: string
          nullable: true
        message:
          type: string
          nullable: true
    OrderAvailabilityError:
      description: Some orders are not available for purchasing
      type: object
      required:
      - error
      properties:
        error:
          $ref: "#/components/schemas/Error"
        errorDetails:
          type: array
          items:
            type: object
            required:
            - supplier
            - store
            properties:
              supplier:
                $ref: "#/components/schemas/BriefSupplier"
              store:
                $ref: "#/components/schemas/BriefStore"
              errors:
                type: array
                items:
                  type: string
              parts:
                type: array
                items:
                  type: object
                  required:
                  - orderItemId
                  - partId
                  - quantity
                  properties:
                    orderItemId:
                      type: string
                      description: "The unique identifier for an item added to a cart.\
                        \ This ID allows PartsTech to reference a specific item in\
                        \ a specific session and its cart details (e.g. PO number,\
                        \ supplier notes, delivery method)."
                    partId:
                      type: string
                    quantity:
                      type: integer
                    errors:
                      type: array
                      items:
                        type: string
        localInventoryItemErrors:
          type: array
          items:
            type: object
            required:
            - itemId
            - inventoryUID
            - partId
            - quantity
            - errors
            properties:
              itemId:
                type: string
                example: 0ze4f01824764a61991b9d090fdc1813
                description: |
                  The unique identifier for an item added to a cart.
                  This ID allows PartsTech to reference a specific item in a specific session and its cart details (e.g. PO number, supplier notes, delivery method)."
              inventoryUID:
                type: string
                example: 123123123
                description: ID of item in local inventory.
              partId:
                type: string
                example: ABCD-12345
                description: PartsTech's ID for a part. Consists of `brandId`-`partNumber`.
              quantity:
                type: integer
                example: 2
                description: The requested quantity for a part.
              errors:
                type: array
                description: List of errors.
                items:
                  type: string
      example:
        error:
          code: OrderAvailabilityError
          message: Some orders are not available for purchasing
    OrderNotPlacedError:
      description: The Order(s) cannot be placed due to required credit card transaction
      type: object
      required:
      - error
      properties:
        error:
          $ref: "#/components/schemas/Error"
        sessionId:
          type: string
          nullable: true
          description: The identifier of a punchout session.
        redirectUrl:
          type: string
          format: url
          nullable: true
      example:
        error:
          code: OrderNotPlacedError
          message: Order cannot be placed without going through the cart. One of the
            suppliers requires credit card transaction.
        sessionId: Session id
        redirectUrl: http://localhost:80/redirect-url
    RequiredAdditionalParametersError:
      description: Supplier requires additional parameters that should be filled in
        the cart.
      type: object
      required:
      - error
      properties:
        error:
          $ref: "#/components/schemas/Error"
        sessionId:
          type: string
          nullable: true
          description: The identifier of a punchout session.
        redirectUrl:
          type: string
          format: url
          nullable: true
      example:
        error:
          code: RequiredAdditionalParametersError
          message: Supplier requires additional parameters that should be filled in
            the cart.
        sessionId: Session id
        redirectUrl: http://localhost:80/redirect-url
    CartPartNotFoundError:
      description: "Some order items were not found, please check each order item\
        \ response"
      type: object
      required:
      - error
      - orderItemsErrors
      properties:
        error:
          $ref: "#/components/schemas/Error"
        orderItemsErrors:
          type: array
          items:
            type: object
            required:
            - orderItemId
            - message
            properties:
              orderItemId:
                type: string
                description: "The unique identifier for an item added to a cart. This\
                  \ ID allows PartsTech to reference a specific item in a specific\
                  \ session and its cart details (e.g. PO number, supplier notes,\
                  \ delivery method)."
              message:
                type: string
    CartPartNotFoundWithOrdersError:
      description: "Some order items were not found, please check each order item\
        \ response"
      type: object
      required:
      - error
      - orderItemsErrors
      properties:
        error:
          $ref: "#/components/schemas/Error"
        orderItemsErrors:
          type: array
          items:
            type: object
            required:
            - orderItemId
            - message
            properties:
              orderItemId:
                type: string
                description: "The unique identifier for an item added to a cart. This\
                  \ ID allows PartsTech to reference a specific item in a specific\
                  \ session and its cart details (e.g. PO number, supplier notes,\
                  \ delivery method)."
              message:
                type: string
        orders:
          type: array
          items:
            $ref: "#/components/schemas/PunchoutPurchasedOrder"
    LockedSessionError:
      description: Another current action blocks executing
      type: object
      properties:
        error:
          $ref: "#/components/schemas/Error"
      example:
        error:
          code: LockedSession
          message: One of cart operations in progress
    InvalidRequestError:
      description: Malformed request. The request body is not parse-able or with invalid
        content.
      type: object
      required:
      - error
      properties:
        error:
          $ref: "#/components/schemas/Error"
        validationErrors:
          type: array
          items:
            type: string
      example:
        error:
          code: InvalidRequestSyntax
          message: Cannot parse request. Invalid data format
        validationErrors:
        - credentials.user.key - This value should not be blank.
        - credentials.user.id - This value should be of type string.
        - credentials.partner - This value should not be blank.
    IntegrationError:
      description: Integration Error
      type: object
      required:
      - error
      properties:
        error:
          $ref: "#/components/schemas/Error"
        errorDetails:
          type: array
          items:
            type: object
            required:
            - supplier
            properties:
              supplier:
                $ref: "#/components/schemas/BriefSupplier"
              errors:
                type: array
                items:
                  type: string
      example:
        error:
          code: IntegrationError
          message: Some supplier integrations didn't respond. Please check error details.
        errorDetails:
        - supplier:
            id: 1
            name: Supplier
          errors:
          - Integration is not responding
    EmptyCartError:
      type: object
      properties:
        error:
          $ref: "#/components/schemas/Error"
      example:
        error:
          code: EmptyCartError
          message: Can`t process cart. Cart is empty
    ExpandedTaxonomyLaborParams:
      type: object
      required:
      - systemId
      - groupId
      - subGroupIds
      properties:
        systemId:
          type: integer
          example: 3
        groupId:
          type: integer
          example: 5
        subGroupIds:
          type: array
          minItems: 1
          maxItems: 10
          items:
            type: integer
          example:
          - 1
          - 6
          - 7
          - 10
    TaxonomyLaborParams:
      type: object
      required:
      - taxonomyIds
      properties:
        taxonomyIds:
          type: array
          minItems: 1
          maxItems: 10
          items:
            type: integer
          example:
          - 1
          - 5
          - 7
          - 8
    PartTypeLaborParams:
      type: object
      required:
      - partTypeIds
      properties:
        partTypeIds:
          type: array
          minItems: 1
          maxItems: 10
          items:
            type: integer
          example:
          - 1852
    SearchLaborParams:
      type: object
      required:
      - searchTerm
      properties:
        searchTerm:
          type: string
          minLength: 3
    LaborGroupsRequest:
      type: object
      required:
      - searchParams
      properties:
        searchParams:
          oneOf:
          - $ref: "#/components/schemas/VehicleSearchParams"
          - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
          - $ref: "#/components/schemas/VinSearchParams"
          - $ref: "#/components/schemas/PlateSearchParams"
    LaborOperationsRequest:
      type: object
      required:
      - searchParams
      - laborParams
      properties:
        searchParams:
          oneOf:
          - $ref: "#/components/schemas/VehicleSearchParams"
          - $ref: "#/components/schemas/PartsTechVehicleIdSearchParams"
          - $ref: "#/components/schemas/VinSearchParams"
          - $ref: "#/components/schemas/PlateSearchParams"
        laborParams:
          oneOf:
          - $ref: "#/components/schemas/ExpandedTaxonomyLaborParams"
          - $ref: "#/components/schemas/TaxonomyLaborParams"
          - $ref: "#/components/schemas/PartTypeLaborParams"
          - $ref: "#/components/schemas/SearchLaborParams"
    LaborGroupsResponse:
      type: array
      items:
        type: object
        required:
        - systemId
        - name
        properties:
          systemId:
            type: integer
          name:
            type: string
          groups:
            type: array
            items:
              type: object
              required:
              - groupId
              - name
              properties:
                groupId:
                  type: integer
                name:
                  type: string
                subGroups:
                  type: array
                  items:
                    type: object
                    required:
                    - subGroupId
                    - name
                    properties:
                      subGroupId:
                        type: integer
                      name:
                        type: string
    LaborOperationsResponse:
      type: array
      minItems: 0
      items:
        type: object
        required:
        - id
        - name
        properties:
          id:
            type: integer
          name:
            type: string
          operations:
            type: array
            items:
              $ref: "#/components/schemas/Operation"
    Operation:
      type: object
      required:
      - id
      - name
      - laborTimeInterval
      - additional
      - all
      - base
      - isMatch
      properties:
        id:
          type: integer
        taxonomyId:
          type: integer
          nullable: true
        name:
          type: string
        partTerminologies:
          type: array
          items:
            type: object
            required:
            - id
            - name
            properties:
              id:
                type: integer
              name:
                type: string
        laborTimeInterval:
          type: string
        additional:
          type: object
          required:
          - laborTime
          - laborTimeDescription
          - warrantyLaborTime
          properties:
            laborTime:
              type: number
              format: float
            laborTimeDescription:
              type: string
            warrantyLaborTime:
              type: number
              format: float
        all:
          type: object
          required:
          - laborTime
          - laborTimeDescription
          - warrantyLaborTime
          properties:
            laborTime:
              type: number
              format: float
            laborTimeDescription:
              type: string
            warrantyLaborTime:
              type: number
              format: float
        base:
          type: object
          required:
          - laborTime
          - laborTimeAverage
          - laborTimeDescription
          - warrantyLaborTime
          properties:
            laborTime:
              type: number
              format: float
            laborTimeAverage:
              type: number
              format: float
            laborTimeDescription:
              type: string
            warrantyLaborTime:
              type: number
              format: float
        attributes:
          type: array
          nullable: true
          items:
            type: object
            required:
            - id
            - name
            properties:
              id:
                type: integer
              name:
                type: string
              text:
                type: string
                nullable: true
        position:
          type: object
          nullable: true
          required:
          - name
          - pcdbPositionID
          properties:
            name:
              type: string
            pcdbPositionID:
              type: integer
        isMatch:
          type: boolean
          description: Indicates whether the operation matches the request criteria.
    CatalogPart:
      type: object
      required:
      - partId
      - partNumber
      - partName
      - brand
      - partsTechCatalogURL
      properties:
        partId:
          type: string
          example: BBHK-24CA
        partNumber:
          type: string
          example: 24CA
        partName:
          type: string
          example: Bosch Windshield Wiper Blade
        brand:
          $ref: "#/components/schemas/Brand"
        images:
          type: array
          minItems: 0
          items:
            type: object
            required:
            - preview
            - full
            - medium
            properties:
              preview:
                type: string
              full:
                type: string
              medium:
                type: string
          example:
          - preview: some_url
            full: some_url
            medium: some_url
          - preview: some_url
            full: some_url
            medium: some_url
        partsTechCatalogURL:
          type: string
          example: https://app.partstech.com/Bosch-Windshield-Wiper-Blade/details/BBHK-24CA?part_term=8852
        taxonomy:
          $ref: "#/components/schemas/ResponseTaxonomy"
        partCategory:
          $ref: "#/components/schemas/PartCategory"
        vehicleId:
          type: integer
          nullable: true
          example: 189326
        vehicleName:
          type: string
          nullable: true
          example: 2009 BMW M3 Base 4.0L V8 DOHC S65B40A
        attributes:
          type: array
          minItems: 0
          items:
            $ref: "#/components/schemas/Attribute"
          example:
          - name: ItemQuantity
            label: Item Qty/Size/Weight
            value: 1 Each
            type: Part
          - name: Position
            label: Position
            value: Front Left
            type: Part
            dbInfo:
              dbName: pcdb
              tableName: positions
              idFieldName: Position
              idValue: PositionID
          - name: Qty
            label: Quantity per vehicle
            value: 1
            type: Both
        variations:
          type: array
          minItems: 0
          items:
            type: object
            properties:
              variationId:
                type: string
              notes:
                type: array
                minItems: 0
                items:
                  type: array
                  minItems: 1
                  items:
                    type: string
                  example: {}
              partName:
                type: string
                nullable: true
                example: Bosch Windshield Wiper Blade
              attributes:
                type: array
                minItems: 0
                items:
                  $ref: "#/components/schemas/Attribute"
                example:
                - name: ItemQuantity
                  label: Item Qty/Size/Weight
                  value: 1 Each
                  type: Part
          example:
          - variationId: E1fHKgzpPvO
            partName: Bosch Clear Advantage
            notes: {}
            attributes:
            - name: Position
              label: Position
              value: Front Left
              type: Part
              dbInfo:
                dbName: pcdb
                tableName: positions
                idFieldName: Position
                idValue: PositionID
            - name: Bodytype
              label: Body
              value: Sedan
              type: Both
              dbInfo:
                dbName: vcdb
                tableName: bodytype
                idFieldName: BodyTypeName
                idValue: BodyTypeID
            - name: Qty
              label: Quantity per vehicle
              value: 1
              type: Both
          - variationId: 3fh7cCVNQOX
            partName: Bosch Clear Advantage
            notes:
            - - Remove plastic guide from wiper arm
            attributes:
            - name: Position
              label: Position
              value: Front Left
              type: Part
              dbInfo:
                dbName: pcdb
                tableName: positions
                idFieldName: Position
                idValue: PositionID
            - name: Bodytype
              label: Body
              value: Coupe
              type: Both
              dbInfo:
                dbName: vcdb
                tableName: bodytype
                idFieldName: BodyTypeName
                idValue: BodyTypeID
            - name: Qty
              label: Quantity per vehicle
              value: 1
              type: Both
          - variationId: Iwf0SBSW8u4
            partName: Bosch Clear Advantage
            notes:
            - - Remove plastic guide from wiper arm
            attributes:
            - name: Position
              label: Position
              value: Front Left
              type: Part
              dbInfo:
                dbName: pcdb
                tableName: positions
                idFieldName: Position
                idValue: PositionID
            - name: Bodytype
              label: Body
              value: Convertible
              type: Both
              dbInfo:
                dbName: vcdb
                tableName: bodytype
                idFieldName: BodyTypeName
                idValue: BodyTypeID
            - name: Qty
              label: Quantity per vehicle
              value: 1
              type: Both
        notes:
          type: array
          minItems: 0
          items:
            type: array
            minItems: 1
            items:
              type: string
          example:
          - - Optional Ceramic
            - Includes Hardware Installation Kit
        originalPart:
          type: object
          nullable: true
          required:
          - partNumber
          properties:
            typeOfOrigination:
              type: string
              enum:
              - Alternate
              - Interchange
              - Supersession
            partId:
              type: string
              nullable: true
              example: ABCD-12345
            partNumber:
              type: string
              example: 12345
            brand:
              $ref: "#/components/schemas/Brand"
        rewards:
          type: array
          minItems: 0
          items:
            $ref: "#/components/schemas/Rewards"
          example:
          - program: extra Loyalty Program
            points: 10
            bonusPoints: 1
    QuotedPart:
      allOf:
      - $ref: "#/components/schemas/QuoteParams"
      - $ref: "#/components/schemas/CatalogPart"
      - $ref: "#/components/schemas/LaborPartParams"
    DetailCatalogPart:
      allOf:
      - $ref: "#/components/schemas/CatalogPart"
      - $ref: "#/components/schemas/DetailPartParams"
      - $ref: "#/components/schemas/LaborPartParams"
    DetailQuotedPart:
      allOf:
      - $ref: "#/components/schemas/CatalogPart"
      - $ref: "#/components/schemas/DetailPartParams"
      - $ref: "#/components/schemas/QuoteParams"
      - $ref: "#/components/schemas/LaborPartParams"
    QuoteParams:
      type: object
      required:
      - status
      - supplier
      - store
      - lineCardId
      - price
      properties:
        status:
          type: string
          enum:
          - IN_STOCK
          - OUT_OF_STOCK
          - SPECIAL_ORDER
          - BACK_ORDER
          - CHECK_AVAILABILITY
          description: |
            CHECK_AVAILABILITY - Part availability can be received only through ["Get Part (with request body)"](#operation/getPartWithRequestBody) with `storeId` provided. This applies to certain Tire suppliers that require branch selection.
        supplier:
          $ref: "#/components/schemas/CartSearchSupplier"
        store:
          $ref: "#/components/schemas/BriefStore"
        lineCardId:
          type: integer
          example: 123
        price:
          $ref: "#/components/schemas/PartPrice"
        quantity:
          type: integer
        backOrder:
          type: boolean
        storesAvailability:
          type: array
          minItems: 0
          items:
            type: object
            minProperties: 2
            required:
            - specificName
            - quantity
            properties:
              specificName:
                type: string
                example: In network
              store:
                $ref: "#/components/schemas/BriefStore"
              quantity:
                type: integer
                example: 3
              main:
                type: boolean
                example: true
        deliveryNotes:
          type: array
          items:
            $ref: "#/components/schemas/DeliveryNote"
    LineCardPart:
      allOf:
      - $ref: "#/components/schemas/CatalogPart"
      - $ref: "#/components/schemas/LineCardPartParams"
    LineCardPartParams:
      type: object
      required:
      - supplier
      - store
      - lineCardId
      properties:
        supplier:
          $ref: "#/components/schemas/CartSearchSupplier"
        store:
          $ref: "#/components/schemas/BriefStore"
        lineCardId:
          type: integer
          example: 123
    DetailPartParams:
      type: object
      properties:
        description:
          type: string
          nullable: true
          example: Bosch Clear Advantage Wiper Blade
        descriptions:
          type: array
          minItems: 0
          items:
            type: object
            required:
            - code
            - label
            - values
            properties:
              code:
                type: string
              label:
                type: string
              values:
                type: array
                minItems: 1
                items:
                  type: string
          example:
          - code: DEF
            label: Part Description
            values:
            - Windshield Wiper Blade
          - code: FAB
            label: Features and Benefits
            values:
            - A patented beam design to resist ice and snow build up for use in extreme
              cold
          - code: FAB
            label: Features and Benefits
            values:
            - An aerodynamic wind spoiler to create a downward force which ensures
              consistent wiping at high speeds
          - code: MKT
            label: Marketing Description
            values:
            - "The Bosch Clear Advantage wiper blade program, a beam technology that\
              \ delivers high wiping quality for all weather performance"
        marketCopyDescriptions:
          type: array
          minItems: 0
          items:
            type: string
          example:
          - New line of specialty disc brake pads
          - Niche vehicle applications
          - Specialty friction offers supreme quality and superior engineering
          - This premium line of specialty friction offers supreme quality and superior
            engineering to meet the stringent demands of these niche vehicle applications.
        otherMarketCopyDescriptions:
          type: array
          minItems: 0
          items:
            type: object
            required:
            - code
            - label
            - values
            properties:
              code:
                type: string
              label:
                type: string
                nullable: true
              values:
                type: array
                minItems: 1
                items:
                  type: string
          example:
          - code: PSG
            label: Product Sub Group Description
            values:
            - Mounting bracket is included where applicable for a hassle-free installation.
            - New bleeder screws provide trouble-free bleeding and a positive seal.
            - New washers are included where applicable for a proper seal.
            - A plastic cap plug protects every brake port thread to ensure trouble-free
              installation.
        partPackage:
          type: object
          nullable: true
          required:
          - dimensionsUOM
          - dimensions
          properties:
            dimensionsUOM:
              type: string
              nullable: true
            dimensions:
              type: object
              required:
              - height
              - width
              - length
              properties:
                height:
                  type: number
                  format: float
                  nullable: true
                width:
                  type: number
                  format: float
                  nullable: true
                length:
                  type: number
                  format: float
                  nullable: true
            weightsUOM:
              type: string
              nullable: true
            weights:
              type: number
              format: float
              nullable: true
          example:
            dimensionsUOM: IN
            dimensions:
              height: 0.79
              width: 2.68
              length: 30.94
            weightsUOM: PG
            weights: 0.34
        extendedInformation:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              value:
                oneOf:
                - type: string
                - type: integer
                - type: boolean
          example:
          - label: Life Cycle Status Code
            value: Released
          - label: National Popularity Code
            value: Next 20% of Product Group Sales Value
          - label: Maximum Cases per Pallet Layer
            value: 91
          - label: Pallet Layer Maximum
            value: 1
        productAttributes:
          type: array
          minItems: 0
          items:
            type: object
            required:
            - id
            - value
            properties:
              id:
                type: string
              value:
                type: string
              uom:
                deprecated: true
                type: string
                nullable: true
          example:
          - id: Length
            value: 24
            uom: IN
          - id: Blade Material
            value: Natural Rubber
          - id: Frame Color
            value: Black
          - id: Frame Material
            value: Steel
        assets:
          type: object
          nullable: true
          required:
          - diagrams
          - attachments
          - videos
          properties:
            diagrams:
              type: array
              minItems: 0
              items:
                type: object
                required:
                - name
                - url
                properties:
                  name:
                    type: string
                  url:
                    type: string
                    format: url
            attachments:
              type: array
              minItems: 0
              items:
                type: object
                required:
                - url
                - filename
                properties:
                  url:
                    type: string
                    format: url
                  filename:
                    type: string
            videos:
              type: array
              minItems: 0
              items:
                type: object
                required:
                - preview
                - mediumPreview
                - url
                properties:
                  preview:
                    type: string
                  mediumPreview:
                    type: string
                  url:
                    type: string
                    format: url
        warnings:
          type: array
          minItems: 0
          items:
            type: object
            properties:
              type:
                type: string
                nullable: true
              value:
                type: string
                nullable: true
          example:
          - type: Prop65
            value: "This product can expose you to chemicals including silica, which\
              \ is known to the state of California to cause cancer, and lead, which\
              \ is known to the State of California to cause birth defects or other\
              \ reproductive harm. For more information go to www.P65Warnings.ca.gov."
        companyCopyright:
          type: string
          nullable: true
          example: Some Text
    LaborPartParams:
      type: object
      properties:
        labor:
          type: array
          minItems: 0
          items:
            $ref: "#/components/schemas/ResponsePartLabor"
    Severity:
      type: string
      enum:
      - Severe
      - Normal
      nullable: false
    IntervalType:
      type: string
      enum:
      - Miles
      - Months
      default: Months
      nullable: false
    MaintenanceSchedulesDetails:
      type: object
      title: Maintenance Schedules details
      description: |
        Maintenance Schedules details.
      required:
      - applications
      properties:
        applications:
          type: array
          minItems: 0
          items:
            $ref: "#/components/schemas/MaintenanceSchedulesApplication"
    MaintenanceSchedulesApplication:
      type: object
      required:
      - applicationId
      - name
      - notes
      - attributes
      - all
      - base
      - additional
      - skill
      properties:
        applicationId:
          type: integer
          format: int32
          description: Motor application ID.
        name:
          type: string
          description: The name of the maintenance task.
        description:
          type: string
          description: A detailed description of the maintenance task.
          nullable: true
        notes:
          type: array
          items:
            type: string
          description: Any additional notes or remarks for the maintenance task.
        additional:
          $ref: "#/components/schemas/LaborTime"
        all:
          $ref: "#/components/schemas/LaborTime"
        base:
          $ref: "#/components/schemas/LaborTime"
        skill:
          type: object
          required:
          - code
          - description
          - name
          properties:
            code:
              type: string
              description: Literal skill name.
            description:
              type: string
              description: Skill description.
            name:
              type: string
              description: Skill name.
        position:
          type: object
          nullable: true
          required:
          - name
          - pcdbPositionID
          properties:
            name:
              type: string
            pcdbPositionID:
              type: integer
        taxonomy:
          type: object
          required:
          - id
          - name
          - action
          properties:
            id:
              type: integer
            name:
              type: string
            action:
              type: string
        attributes:
          type: array
          nullable: true
          items:
            type: object
            required:
            - id
            - name
            properties:
              id:
                type: integer
                description: PCDB identifier
              name:
                type: string
                description: PCDB name
              text:
                type: string
                nullable: true
                description: Full part name
    LaborTime:
      type: object
      required:
      - laborTime
      - warrantyLaborTime
      properties:
        laborTime:
          type: number
          format: float
          description: MOTOR estimated time to perform the operation
        laborTimeAverage:
          type: number
          format: float
          description: Average labor time for the operation across all vehicles
        laborTimeDescription:
          type: string
        warrantyLaborTime:
          type: number
          format: float
          description: OEM warranty time for performing the operation
    FluidsApplication:
      type: object
      required:
      - applicationId
      - name
      - attributes
      - taxonomy
      properties:
        applicationId:
          type: integer
          format: int32
          description: The application ID of an application record.
        name:
          type: string
          description: The name of application.
        description:
          type: string
          description: The description of application.
          nullable: true
        position:
          type: object
          nullable: true
          required:
          - name
          - pcdbPositionID
          properties:
            name:
              type: string
            pcdbPositionID:
              type: integer
        taxonomy:
          type: object
          required:
          - id
          - name
          - action
          properties:
            id:
              type: integer
            name:
              type: string
            action:
              type: string
        attributes:
          type: array
          items:
            type: object
            required:
            - id
            - name
            properties:
              id:
                type: integer
                description: PCDB identifier
              name:
                type: string
                description: PCDB name
              text:
                type: string
                nullable: true
                description: Full part name
        items:
          type: array
          items:
            $ref: "#/components/schemas/FluidsDetailsItem"
          description: Items that belong to this fluid detail.
        capacities:
          type: array
          items:
            $ref: "#/components/schemas/Capacity"
          description: Capacities associated with this fluid.
    FluidsDetailsItem:
      type: object
      required:
      - grade
      - gradePreference
      - maxCapacity
      - unitOfMeasure
      properties:
        grade:
          $ref: "#/components/schemas/Grade"
        gradePreference:
          type: integer
          format: int32
          description: Preference for this grade.
        maxCapacity:
          type: integer
          format: int32
          description: Maximum capacity of this item.
        partNumber:
          type: string
          description: Part number of this item.
          nullable: true
        specStandard:
          type: string
          description: "Specification standard, if any."
          nullable: true
        tempRange:
          type: string
          description: "Temperature range, if applicable."
          nullable: true
        tradeName:
          type: string
          description: Trade name of the item.
          nullable: true
        unitOfMeasure:
          type: string
          description: Unit of measurement.
        viscosity:
          type: string
          description: Viscosity of the item.
          nullable: true
        formulation:
          type: string
          description: Formulation.
          nullable: true
        notes:
          type: array
          items:
            type: string
          description: Notes related to this details.
    Grade:
      type: object
      description: The grade of the item.
      required:
      - code
      - description
      properties:
        code:
          type: string
          description: The code representing the grade.
        description:
          type: string
          description: Description of the grade.
    Capacity:
      type: object
      required:
      - name
      - items
      properties:
        name:
          type: string
          description: The name of the capacity.
        items:
          type: array
          items:
            $ref: "#/components/schemas/CapacityItem"
          description: Items related to this capacity.
    CapacityItem:
      type: object
      required:
      - unitOfMeasure
      - extendedParameters
      - notes
      properties:
        unitOfMeasure:
          type: string
          description: Unit of measurement for this capacity.
        extendedParameters:
          type: array
          items:
            $ref: "#/components/schemas/ExtendedParameter"
          description: Extended parameters for more details.
        notes:
          type: array
          items:
            type: string
          description: Notes related to this item.
        value:
          type: number
          format: float
          description: The value of this capacity item.
          nullable: true
        maxValue:
          type: number
          format: float
          description: "Maximum value, if applicable."
          nullable: true
        minValue:
          type: number
          format: float
          description: "Minimum value, if applicable."
          nullable: true
    ExtendedParameter:
      type: object
      required:
      - name
      - value
      properties:
        name:
          type: string
          description: The name of the parameter.
        value:
          type: string
          description: The value of the parameter.
    SpecificationDetails:
      type: object
      required:
      - applicationId
      - name
      - attributes
      - taxonomy
      properties:
        applicationId:
          type: integer
          format: int32
          description: The application ID of an application record.
        name:
          type: string
          description: The name of application.
        description:
          type: string
          nullable: true
          description: The description of application.
        notes:
          type: array
          items:
            type: string
        diagrams:
          type: array
          items:
            type: string
        specificationDetailItems:
          type: array
          items:
            type: object
            required:
            - unitOfMeasure
            - notes
            - extendedParameters
            properties:
              value:
                type: string
                nullable: true
              maxValue:
                type: string
                nullable: true
              minValue:
                type: string
                nullable: true
              unitOfMeasure:
                type: string
              notes:
                type: array
                items:
                  type: string
              extendedParameters:
                type: array
                items:
                  type: object
                  required:
                  - name
                  - value
                  properties:
                    name:
                      type: string
                      description: The name of the parameter.
                    value:
                      type: string
                      description: The value of the parameter.
        serviceProcedures:
          type: array
          items:
            type: object
            properties:
              diagrams:
                type: array
                items:
                  type: string
              data:
                type: string
                nullable: true
        attributes:
          type: array
          nullable: true
          items:
            type: object
            required:
            - id
            - name
            properties:
              id:
                type: integer
                description: PCDB identifier
              name:
                type: string
                description: PCDB name
              text:
                type: string
                nullable: true
                description: Full part name
        position:
          type: object
          nullable: true
          required:
          - name
          - pcdbPositionID
          properties:
            name:
              type: string
            pcdbPositionID:
              type: integer
        taxonomy:
          type: object
          required:
          - id
          - name
          - action
          properties:
            id:
              type: integer
            name:
              type: string
            action:
              type: string
    M1Vehicle:
      type: object
      properties:
        id:
          type: integer
          format: int32
        m1VehicleId:
          type: string
        make:
          type: string
        model:
          type: string
        submodel:
          type: string
        engine:
          type: string
        fuelType:
          type: string
        engineCode:
          type: string
        bodyStyle:
          type: string
        driveType:
          type: string
        transferCaseType:
          type: string
        transmissionControlType:
          type: string
        transmissionCode:
          type: string
        country:
          type: string
    ProcedureSummary:
      type: object
      properties:
        component:
          type: string
        operation:
          type: string
        group:
          type: string
        subgroup:
          type: string
    Procedure:
      type: object
      properties:
        group:
          type: string
          description: The group the labor procedure in.
        subgroup:
          type: string
          description: The subgroup the labor procedure in.
        component:
          type: string
          description: The component of the labor procedure.
        operation:
          type: string
          description: The operation of the labor procedure.
        skillLevel:
          type: string
          description: "Technical skill level. Nothing is returned, if there is no\
            \ technician skill level information."
        applicationGroups:
          type: array
          items:
            $ref: "#/components/schemas/ApplicationGroup"
          description: Group of elements associated with different vehicle applications.
    ApplicationGroup:
      type: object
      properties:
        applicationGroupName:
          type: string
          description: Name of Application Group. Not all Application Groups will
            have a name.
        procedureNote:
          type: string
          description: "A note about the labor procedure. Nothing is returned, if\
            \ there isn't a procedure note."
        items:
          type: array
          items:
            $ref: "#/components/schemas/Item"
          description: List of different vehicle application items.
        additionalProcedures:
          type: array
          items:
            $ref: "#/components/schemas/ProcedureInformation"
          description: List of additionalProcedures.
        combinationProcedures:
          type: array
          items:
            $ref: "#/components/schemas/ProcedureInformation"
          description: List of combination labor procedures.
    Item:
      type: object
      properties:
        vehicleApplication:
          type: string
          description: Vehicle application information (such as submodel or engine
            displacement).
        additionalApplication:
          type: string
          description: Additional application information (such as positions of features).
        applicationNote:
          type: string
          description: A note about the application.
        warrantyTime:
          type: number
          format: float
          example: 0
          description: Warranty Labor time provided by manufacturer.
        standardTime:
          type: number
          format: float
          example: 0
          description: Standard labor time.
        key:
          type: string
          description: Item hash key.
    ProcedureInformation:
      type: object
      properties:
        component:
          type: string
          description: The component of the labor procedure.
        operation:
          type: string
          description: The operation of the labor procedure.
        skillLevel:
          type: string
          description: Technical skill level.
        procedureNote:
          type: string
          description: A note about the labor procedure.
        items:
          type: array
          items:
            $ref: "#/components/schemas/Item"
          description: List of different vehicle application items.
    PartTypeTaskResponse:
      type: object
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - PART_TYPE
        partType:
          $ref: "#/components/schemas/ResponsePartType"
        positions:
          description: List of positions assigned for the part type.
          type: array
          items:
            type: string
  responses:
    InvalidRequest:
      description: Malformed request. The request body is not parse-able or with invalid
        content.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/InvalidRequestError"
    InternalServerError:
      description: Internal Server Error.
      content:
        application/json:
          schema:
            type: object
            required:
            - error
            properties:
              error:
                $ref: "#/components/schemas/Error"
            example:
              error:
                code: InternalError
                message: Internal error
    DataAvailabilityError:
      description: Some of provided parameters are not available
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                $ref: "#/components/schemas/Error"
            example:
              error:
                code: StoresAvailabilityError
                message: "Stores #1, 10, 253 are not available"
    VinDecodeError:
      description: VinDecodeError
      content:
        application/json:
          schema:
            type: object
            required:
            - error
            properties:
              error:
                $ref: "#/components/schemas/Error"
            example:
              error:
                code: VinDecodeError
                message: We cannot identify your vin number
    PlateDecodeError:
      description: PlateDecodeError
      content:
        application/json:
          schema:
            type: object
            required:
            - error
            properties:
              error:
                $ref: "#/components/schemas/Error"
            example:
              error:
                code: PlateDecodeError
                message: We cannot identify your license plate number
    InvalidAddressError:
      description: Address is invalid
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                $ref: "#/components/schemas/Error"
            example:
              error:
                code: InvalidAddressError
                message: Invalid state
    Tokens:
      description: OK
      content:
        application/json:
          schema:
            type: object
            required:
            - tokenType
            - accessToken
            - expiresIn
            - partner
            properties:
              tokenType:
                type: string
                enum:
                - bearer
              accessToken:
                type: string
                description: A valid JSON Web Token
                example: some JWT token
              refreshToken:
                type: string
                deprecated: true
                nullable: true
                example: some JWT token
              expiresIn:
                type: integer
                format: int64
                description: "Time until `accessToken` expires, 60 minutes."
                example: 10947234663
              username:
                type: string
                description: The Username/UserId of the user provided in the request.
                  Present when `user` access type is requested.
                example: partstech_user
              partner:
                type: string
                description: The Partner Id of the partner provided in the request.
                example: partstech_partner
    AuthenticationFailed:
      description: Unauthorized. The request requires user or partner credentials
        or bearer token. Also used for invalid credentials or bearer token.
      content:
        application/json:
          schema:
            type: object
            required:
            - error
            properties:
              error:
                title: Error details
                type: object
                required:
                - code
                - message
                properties:
                  code:
                    type: string
                  message:
                    type: string
          examples:
            ExpiredToken:
              value:
                error:
                  code: InvalidToken
                  message: Provided token is expired
            InvalidToken:
              value:
                error:
                  code: InvalidToken
                  message: Provided token is invalid
            UserAuthenticationFailed:
              value:
                error:
                  code: UserAuthenticationFailed
                  message: Incorrect user id or user key
            PartnerAuthenticationFailed:
              value:
                error:
                  code: PartnerAuthenticationFailed
                  message: Incorrect partner id or partner key
    InvalidToken:
      description: Invalid Token.
      content:
        application/json:
          schema:
            type: object
            required:
            - error
            properties:
              error:
                title: Error details
                type: object
                required:
                - code
                - message
                properties:
                  code:
                    type: string
                    enum:
                    - InvalidToken
                    - ExpiredToken
                  message:
                    type: string
            example:
              error:
                code: InvalidToken
                message: Invalid token was provided
    ForbiddenError:
      description: Forbidden. Also used for unauthorized requests such as improper
        credentials scopes or permissions issues.
      content:
        application/json:
          schema:
            type: object
            required:
            - error
            properties:
              error:
                title: Error details
                type: object
                required:
                - code
                - message
                properties:
                  code:
                    type: string
                  message:
                    type: string
          examples:
            NotAvailableMethod:
              value:
                error:
                  code: NotAvailableMethod
                  message: Method is not available
            HaveNotPermission:
              value:
                error:
                  code: HaveNotPermission
                  message: Invalid credentials were provided
            UserIsNotActivated:
              value:
                error:
                  code: UserIsNotActivated
                  message: User is not activated. Please verify your email by clicking
                    a link in the email from PartsTech that was sent to you.
            DisabledApiUsage:
              value:
                error:
                  code: DisabledApiUsage
                  message: User did not approve api usage or disable it
            IncorrectMode:
              value:
                error:
                  code: IncorrectMode
                  message: Incorrect user for test mode
    SupplierPreferences:
      description: OK
      content:
        application/json:
          schema:
            type: array
            minItems: 0
            items:
              type: object
              required:
              - id
              - supplier
              - store
              - credentials
              - status
              - statusDescription
              - priority
              properties:
                id:
                  type: integer
                supplier:
                  $ref: "#/components/schemas/BriefSupplier"
                store:
                  $ref: "#/components/schemas/PreferredStore"
                credentials:
                  type: array
                  items:
                    $ref: "#/components/schemas/SupplierPreferenceCredentialsResponse"
                status:
                  type: string
                  enum:
                  - Processing
                  - Approved
                  - Not Approved
                  - Help Requested
                  - Pending
                  - Ready For Review
                  - Supplier Approval Needed
                statusDescription:
                  type: string
                priority:
                  description: Maximum value depends on a user made a request
                  type: integer
                  minimum: 0
                  maximum: 5
          example:
          - id: 1878
            supplier:
              id: 1458
              name: Advance Auto Parts
            store:
              id: 1
              name: "5904 - Springfield, MA"
              sellerId: ashdkjas
            credentials:
            - label: Customer Number
              internalName: customer
              value: value
              type: text
            - label: SMS Username
              internalName: username
              value: value
              type: text
            - label: SMS Password
              internalName: password
              value: value
              type: password
            status: Approved
            statusDescription: Your configuration is complete.
            priority: 1
          - id: 8765
            supplier:
              id: 1458
              name: Advance Auto Parts
            credentials:
            - label: Customer Number
              internalName: customer
              value: null
              type: text
            - label: SMS Username
              internalName: username
              value: null
              type: text
            - label: SMS Password
              internalName: password
              value: null
              type: password
            status: Processing
            statusDescription: Your account information is being reviewed by PartsTech.
            priority: 2
          - id: 18765
            supplier:
              id: 2501
              name: AutoZone
            store:
              id: 1121
              name: "5254 - Waltham, MA"
              sellerId: null
            credentials:
            - label: Autozone PIN
              internalName: customerNumber
              value: value
              type: text
            status: Approved
            statusDescription: Your configuration is complete.
            priority: 3
          - id: 87654
            supplier:
              id: 15021
              name: Motor Distribution
            store:
              id: 63248
              name: "Bayshore, NY"
              sellerId: null
            credentials: {}
            status: Approved
            statusDescription: Your configuration is complete.
            priority: 4
    ProfileShopResponse:
      description: OK
      content:
        application/json:
          schema:
            allOf:
            - $ref: "#/components/schemas/EntireShop"
            - type: object
              required:
              - users
              properties:
                users:
                  type: array
                  minItems: 1
                  items:
                    $ref: "#/components/schemas/User"
    UnsupportedVehicle:
      description: Bad Request
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    nullable: false
                  message:
                    type: string
                    nullable: false
            example:
              error:
                code: UnsupportedVehicle
                message: MOTOR does not currently support data for Canadian vehicles.
    VehicleNotFound:
      description: Not Found
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    nullable: false
                  message:
                    type: string
                    nullable: false
            example:
              error:
                code: NotFound
                message: Vehicle was not found
  headers:
    MotorComplianceLink:
      description: |
        Labor, maintenance schedules, fluids, and specifications data provided by MOTOR.
        Link to MOTOR's OEM Compliance Requirements documentation.
      schema:
        type: string
        example: '<https://www.motor.com/oem-compliance-requirements/>; rel="compliance"'
  parameters:
    page:
      name: page
      in: query
      schema:
        type: integer
        minimum: 1
      x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
      example: 2
    perPage:
      name: perPage
      in: query
      schema:
        type: integer
        enum:
        - 10
        - 25
        - 50
        - 100
      x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
      example: 50
      description: "Records per request. Default: 50"
    year:
      name: year
      in: query
      description: Year
      schema:
        type: integer
        minLength: 4
        maxLength: 4
        pattern: "\\d{4,4}"
      required: false
      x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
      example: 2017
    make:
      name: make
      in: query
      description: Make ID
      schema:
        type: integer
        pattern: \d+
      required: false
      x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
      example: 21
    model:
      name: model
      in: query
      description: Model ID
      schema:
        type: integer
        pattern: \d+
      required: false
      x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
      example: 105
    submodel:
      name: submodel
      in: query
      description: Submodel ID
      schema:
        type: integer
        nullable: true
        pattern: \d+
      required: false
      x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
      example: 113
    engine:
      name: engine
      in: query
      description: Base Engine ID
      schema:
        type: integer
        pattern: \d+
      required: false
      x-serializer-class: com.partstech.partnerapi.serialization.NullableInt
      example: 5486
    region:
      name: region
      in: query
      description: Region
      schema:
        type: string
        enum:
        - US
        - CA
        - MX
      required: false
      example: US
    locale:
      name: locale
      in: query
      description: "Locale, default en_US"
      schema:
        type: string
        nullable: true
        enum:
        - en_US
        - es_MX
      required: false
      example: null
    direction:
      name: direction
      in: query
      description: Direction
      schema:
        type: string
        enum:
        - ASC
        - DESC
        default: ASC
      required: false
      example: ASC
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |
        Get access to data while protecting your account credentials.
        Token (a JWT token) are also a safer and more secure way to give you access.

        It provides two ways of access:
         - `user` - Give an access to user methods.
         - `partner` - Give an acess to partner methods.

        To use this way you need:
        1. Get an access token. See ["Authentication and Access"](#operation/getAcessToken).
        2. Add a header in the request
        ```
        Authorization: Bearer <accessToken>
        ```
        3. Refresh tokens, when it expires, using `refreshToken`. See ["Authentication and Access"](#operation/refreshAccessToken). **Deprecated**.
        Generate a new token after an expiration of previous instead of refreshing .
    apiKeyAuth:
      type: apiKey
      in: header
      name: credentials
      description: |
        It is a deprecated way to get access to the methods, used only in the methods, that were in the previous version.

        It provides two ways of an access:
         - `user` - Give access to user methods.
         - `partner` - Give acess to partner methods.

        To use this way you need to add credentials in the request body, where it is allowed, in a next format:
         - for user methods:
        ```
        "credentials": {
            "user": {
              "id": "username",
              "key": "APIKey"
            },
            "partner": {
              "id": "username",
              "key": "APIKey"
            }
        }
        ```
         - for partner methods:
        ```
        "credentials": {
            "partner": {
              "id": "username",
              "key": "APIKey"
            }
        }
        ```

        For example content of method [`Submit Cart`](#operation/submitCart) will be modified:
        ```
        {
          "sessionId": "123asjkdhyr34234"
        }
        ```

        ```
        {
          "sessionId": "123asjkdhyr34234",
          "credentials": {
            "user": {
              "id": "mechanic",
              "key": "Mechanic's API key"
            },
            "partner": {
              "id": "partner name",
              "key": "partner's API key"
            }
          }
        }
        ```
