Skip to content
SyncMyShop

PunchOut

BigCommerce PunchOut

BigCommerce has no PunchOut of its own, but it has the one piece most platforms lack: the Customer Login API signs a customer in from outside with a signed token. Contract prices come from price lists per customer group, and the PunchOut endpoint, the cart transfer and the order intake are built around the store. We build them on your existing BigCommerce store and run the connection.

What moves between the procurement system and BigCommerce

A PunchOut connection on BigCommerce has the same flows as on any store. BigCommerce keeps the catalog, the prices and the orders; the PunchOut documents run in the integration.

Flow Direction Where it runs
Setup request and response procurement system to the integration outside BigCommerce, in the integration
Sign-in as the buyer integration to the storefront Customer Login API, a JWT at /login/token/{token}
Shopping at contract prices in the storefront price list of the buyer's customer group
Cart transfer storefront to the procurement system, through the browser a theme button and the integration
Purchase order procurement system to the integration to BigCommerce Orders API v2
Confirmation, ship notice, invoice BigCommerce or your ERP to the procurement system the integration, as cXML

Facts on this page were checked against BigCommerce's developer documentation and help center on October 3, 2026. The documents themselves are on cXML PunchOut and OCI PunchOut.

What BigCommerce offers and what is built around it

Need What BigCommerce has What is built
Endpoint for a setup request nothing the integration receives and answers it
Sign-in without a form Customer Login API with a signed JWT the integration signs the token when the start URL is opened
Prices per buying organization price lists per customer group (Performance plan); group discounts (Growth and up) one group and price list per buyer, filled from the ERP
Cart data Storefront Carts API GET /api/storefront/carts a theme button that sends the cart to the integration
Cart in cXML or OCI nothing the integration builds the PunchOutOrderMessage or the NEW_ITEM form
Order with a PO number poNumber in B2B Edition; staff_notes otherwise the integration maps the OrderRequest to it

Signing the buyer in

The Customer Login API signs a customer in when the browser opens /login/token/{token}, where the token is a JWT signed with the API account's client secret. Its payload carries iss (the client ID), iat, a unique jti, operation customer_login, the store_hash, the customer_id and an optional redirect_to, the page to open after sign-in. Three rules from BigCommerce's documentation shape the PunchOut start:

  1. The iat claim is valid for 30 seconds. The token cannot be put in the setup response, because the procurement system may open the start URL minutes later. The start URL points to the integration, which signs the token at the moment the browser arrives and redirects at once.
  2. The access point URL works once. A refresh of the page, or a second tab with the same URL, gets no session.
  3. BigCommerce keeps one active storefront session per customer account. A new sign-in, by any method, ends the other sessions of that customer.
Signing a PunchOut buyer in to BigCommerce with the Customer Login API The browser opens the start URL at the integration, which signs a JWT for the customer and redirects to /login/token on the store within 30 seconds. BigCommerce signs the customer in with the price list of their customer group. A second sign-in on the same customer account ends this session. Browser buyer Integration start URL BigCommerce storefront The setup response gave the procurement system a one-time start URL. GET /punchout/start?sid=9f2c41d8 JWT: customer_id 57, iat now 302 /login/token/{jwt} GET /login/token/{jwt} Valid once, and only within 30 seconds of iat signed in, price list of the group A second sign-in on customer 57, from any method, rotates the session and ends this one.
BigCommerce signs the buyer in from a token. The token is valid once, for 30 seconds.

The third rule decides the account structure. If the three buyers of Bakker Installatie B.V. share customer 57, a buyer who opens a PunchOut session at 09:03 is signed out when a colleague starts one at 09:10, and the first cart is no longer theirs. The integration creates one BigCommerce customer per person named in the setup request, all in the customer group of Bakker Installatie, so they share prices and keep their own sessions.

Prices per buying organization

Plan Customer groups Price lists
Below Growth no no
Growth and Scale yes, with category, product and storewide discounts no
Performance yes yes, a price per variant for a group

A customer belongs to one customer group. On the Performance plan the group of Bakker Installatie gets a price list with item 10482 at 9.60 USD where the catalog price is 12.50; a variant the price list leaves out falls back to the catalog price. Price lists and group discounts cannot be combined on one group.

The price list is filled from the ERP. The batch endpoint takes up to 1,000 price records per call, so 4,000 contract prices for one buyer is 4,000 / 1,000 = 4 calls. For 40 buyers that is 160 calls. BigCommerce's rate-limit page gives the Plus and Standard plans 150 requests per 30 seconds, shared by every app on the store, so 160 calls take two windows, about a minute. BigCommerce's help center notes that pricing changes can take up to 10 minutes to show on the storefront. Price changes are therefore scheduled outside the buyer's working hours, so a buyer in a session does not see one price in the catalog and another in the order.

From the BigCommerce cart to the PunchOut cart

The checkout button is replaced by a transfer button in a PunchOut session. The theme reads the cart from GET /api/storefront/carts, which returns the line items with decimal prices. The cart of Bakker Installatie B.V., first line shown:

{
  "currency": { "code": "USD" },
  "isTaxIncluded": false,
  "cartAmount": 1468.75,
  "lineItems": {
    "physicalItems": [
      {
        "sku": "10482",
        "name": "Duplex receptacle 20 A, white",
        "quantity": 120,
        "listPrice": 9.6,
        "salePrice": 9.6,
        "extendedSalePrice": 1152
      }
    ]
  }
}

What the integration does with it:

  1. salePrice becomes UnitPrice: 9.6 is written as 9.60. extendedSalePrice is the line value, 120 x 9.60 = 1,152.00.
  2. isTaxIncluded false means the amounts exclude tax, as the cXML Total does: 1,152.00 + 298.00 + 18.75 = 1,468.75.
  3. sku becomes SupplierPartID or NEW_ITEM-VENDORMAT. For a product with variants it is the variant SKU, which is the part number the buyer has to receive.
  4. BigCommerce has no unit field. UnitOfMeasure and the classification come from product metafields, filled once per product.

The purchase order back into BigCommerce

The OrderRequest arrives at the integration, which answers it from its queue and creates the order with POST /v2/orders:

OrderRequest BigCommerce order
orderID 4500001234 B2B Edition poNumber; otherwise staff_notes
procurement system external_source, for example "PunchOut (Coupa)"
buyer identity in From customer_id of a customer in the group of Bakker Installatie
ItemOut lines products with the variant and the price from the cart
ShipTo, BillTo shipping_addresses, billing_address
payment terms payment_method, for example "Manual"

Each order costs a few calls of the store's quota, 150 per 30 seconds on Standard and Plus, and the quota is shared with every other app. When the store answers 429, the integration reads X-Rate-Limit-Time-Reset-Ms and retries after that wait; the procurement system already has its answer, so it never sees the delay. How backoff works is in API throttling and backoff.

When it goes wrong

What happens Cause Handling
Buyer lands on the login page the JWT was older than 30 seconds, or the URL was opened twice token signed at the moment of redirect
A buyer is signed out mid-session a colleague signed in on the same customer one customer per person in the setup request
Catalog price 12.50 in the cart the customer is not in the group with the price list, or the store is below Performance group and price list per buyer, plan checked first
Old price for 10 minutes after a change storefront pricing delay price changes published outside working hours
Order creation fails with 429 quota of 150 per 30 seconds shared with other apps queue, retry after X-Rate-Limit-Time-Reset-Ms
Cart refused for its unit no unit metafield on the product fixed unit code per product

The same pieces on other platforms: Shopify, Magento and WooCommerce. What a store needs in full is on the PunchOut hub. Tell us which procurement system your customer uses.

Frequently asked questions

Which BigCommerce plan do I need for PunchOut?

The session and the cart work on any plan. Contract prices per buyer are the deciding part: customer groups need the Growth plan or higher, and price lists, which hold a price per variant for a group, need the Performance plan. Below that, prices per buyer come from customer group discounts, which are percentages on categories, products or the whole store.

Can several buyers at one customer share one BigCommerce account?

No. BigCommerce keeps one active storefront session per customer account, and every new sign-in ends the others. Two buyers at Bakker Installatie on the same account sign each other out. The integration links each person in the setup request to their own BigCommerce customer in the same customer group, so they share the prices and not the session.

Does B2B Edition add PunchOut?

B2B Edition adds company accounts, quotes, invoices on net terms and a buyer portal, and its Orders API can store a PO number on an order. The PunchOut session itself, the setup request, the cXML or OCI cart and the order intake from the procurement system, is not part of it and is built as on a store without B2B Edition.

Can the procurement system show my BigCommerce store in a frame?

On BigCommerce's Cornerstone demo storefront, checked on October 3, 2026, the pages carry no X-Frame-Options header and the session cookie is set with SameSite=None, so a frame can load and keep the session. A store can still add its own security headers; the integration checks the live headers of the PunchOut pages before the first test with the buyer.

Where does the PO number go on a BigCommerce order?

With B2B Edition, in the poNumber of the order through its Orders API. Without it, the integration creates the order through POST /v2/orders with the PO number in staff_notes and sets external_source to identify the procurement system, and the PO number travels to the ERP with the order.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com