PartsTech Custom Cart API

Custom Cart

Business capability
Purchase Order Management BC-500.30

Operations 3

POST /punchout/cart/custom/create Create Custom Cart #
POST /punchout/cart/custom/order Order Custom Cart #
POST /punchout/cart/custom/availability Check Custom Cart Availability #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/partstech-custom-cart-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

partstech-custom-cart-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 2.021.1
  title: PartsTech Custom Cart API
  description: '# Rate Limiting


    Requests can be limited by user requests, by private partner requests and by all requests with partner''s credentials.'
  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
paths:
  /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
                        - 'null'
                        description: Optional. If a value is included here, any PO number provided earlier in the quoting process for the order will be overwritten.
                        example: Some PoNumber
                      notes:
                        type:
                        - string
                        - 'null'
                        description: Optional. If a value is included here, any supplier notes provided earlier in the quoting process for the order will be overwritten.
                        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'
components:
  schemas:
    PaidOrderStore:
      description: Store Data for Paid Orders
      allOf:
      - $ref: '#/components/schemas/OrderStore'
      - type: object
        required:
        - sellerId
        properties:
          sellerId:
            type:
            - string
            - 'null'
    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
          - 'null'
          example: 1
        displayName:
          type:
          - string
          - 'null'
          example: Alba
        lineCode:
          type:
          - string
          - 'null'
      example:
        brandID: BBHK
        brandName: Bosch
        id: 551
        displayName: Bosch
    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
    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
          - 'null'
          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
          - 'null'
          deprecated: true
        imageUrl:
          type:
          - string
          - 'null'
          format: url
          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
          - 'null'
          description: PartsTech's ID for a vehicle.
        vehicleName:
          type:
          - string
          - 'null'
          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
          - 'null'
          deprecated: true
        searchedAsPartNumber:
          type:
          - string
          - 'null'
        rewards:
          $ref: '#/components/schemas/Rewards'
        selectedLaborItems:
          type:
          - array
          - 'null'
          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
          - 'null'
          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
          - 'null'
          items:
            $ref: '#/components/schemas/Attribute'
        deliveryNotes:
          type: array
          items:
            $ref: '#/components/schemas/DeliveryNote'
        itemizedQuote:
          $ref: '#/components/schemas/ItemizedItemQuote'
    PartPrice:
      type: object
      required:
      - cost
      - core
      - fet
      properties:
        list:
          type:
          - number
          - 'null'
          format: float
          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
          - 'null'
          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
          example: 1.2
        retail:
          type:
          - number
          - 'null'
          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.
          format: float
          example: 2
        discount:
          type:
          - number
          - 'null'
          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.
          format: float
          example: 0.2
        map:
          type:
          - number
          - 'null'
          description: Minimum Advertised Price
          format: float
          example: 1.9
    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
          - 'null'
          description: The identifier of a punchout session.
        redirectUrl:
          type:
          - string
          - 'null'
          format: url
      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
    It

# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/partstech/refs/heads/main/openapi/partstech-custom-cart-api-openapi.yml