PartsTech Punchout Cart API

Cart with Punchout

Business capability
Procure-to-Pay Operations Management BC-500.40

Operations 4

POST /punchout/cart/create Create Cart #
POST /punchout/cart/update Update Cart #
POST /punchout/cart/add-part Add Part #
POST /punchout/cart/remove-parts Remove Parts #

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-punchout-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-punchout-cart-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 2.021.1
  title: PartsTech Punchout 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: punchout-cart
  description: Cart with Punchout
  x-displayName: Cart with Punchout
paths:
  /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
                              - 'null'
                              example: 123
                            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
                              - 'null'
                              default: null
                            partTypeId:
                              description: The ID of a part type from the Autocare Association's PCdb.
                              type:
                              - integer
                              - 'null'
                              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
                              - 'null'
                      poNumber:
                        type:
                        - string
                        - 'null'
                        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
                        - 'null'
                        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/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/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
                      - 'null'
                      example: 123
                    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
                      - 'null'
                      example: 2
                    partTypeId:
                      description: The ID of a part type from the Autocare Association's PCdb.
                      type:
                      - integer
                      - 'null'
                      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
                      - 'null'
      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'
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
    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
    ItemizedItemQuote:
      type:
      - object
      - 'null'
      required:
      - tax
      - lines
      properties:
        tax:
          type: number
          format: float
        lines:
          type: array
          items:
            $ref: '#/components/schemas/ItemizedQuotePricingLine'
    Rewards:
      type:
      - array
      - 'null'
      minItems: 0
      items:
        type: object
        properties:
          program:
            type:
            - string
            - 'null'
          points:
            type:
            - integer
            - 'null'
          bonusPoints:
            type:
            - integer
            - 'null'
    Attribute:
      type: object
      properties:
        name:
          type: string
        label:
          type: string
        value:
          type: string
        type:
          type: string
          enum:
          - Vehicle
          - Part
          - Both
        dbInfo:
          type:
          - object
          - 'null'
          required:
          - dbName
          - tableName
          - idFieldName
          - idValue
          properties:
            dbName:
              type: string
            tableName:
              type: string
            idFieldName:
              type: string
            idValue:
              type: string
    PartCategory:
      type:
      - string
      - 'null'
      enum:
      - Maintenance
      - Service
      - Consumable
    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
              - 'null'
              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
          - 'null'
          example: 2743
          description: The purchase order number
        notes:
          type:
          - string
          - 'null'
          example: Notes
          description: Supplier notes
    DeliveryNote:
      type: object
      required:
      - label
      - text
      - date
      properties:
        label:
          type:
          - string
          - 'null'
        text:
          type:
          - string
          - 'null'
    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
    EmptyCartError:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/Error'
      example:
        error:
          code: EmptyCartError
          message: Can`t process cart. Cart is empty
    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
          - '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'
    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.
    InvalidRequestError:
      description: Malformed request. The request body is not parse-able or with invalid content.
      type: object
      required:
      - error
      properties:
        error:
          $ref: '#/components/schemas/Er

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