---
title: "Distributor connections"
description: "Connect Ingram Micro, TD SYNNEX, CDW, and Pax8 so orders, shipments, serial numbers, and bills flow into Outpost, and turn on live ordering when you are ready."
url: "https://support.outpostplatform.com/procurement/distributors/"
product: "depot"
type: "how-to"
status: "draft"
ai_summary: "Connections to Ingram Micro, TD SYNNEX, CDW (PunchOut), Pax8, and StreamOne with a vault credential and vendor settings. Live ordering is off until turned on with a second factor; each submit needs the total confirmed and is never placed twice. Status and serials sync every 15 minutes, bills every 6 hours. Webhooks, sync now, per-vendor setup."
availability:
  plans: ["home-lab", "essentials", "enterprise", "msp"]
  permission: "integrations:admin"
  preview: false
source: "https://gitlab.com/outpostplatform/docs/-/edit/main/src/content/docs/procurement/distributors.md"
license: "CC BY 4.0"
---

# Distributor connections

A distributor connection links Outpost to a distributor's own systems. Orders
you approve can be submitted to the distributor, and its order status,
tracking, serial numbers, backorders, and bills come back without anyone
re-typing them. Pax8 and StreamOne connections bring in subscriptions. This
page covers what each connection does, how to set one up, and the safeguards
on live ordering.

:::caution
These are the first release of each distributor integration. Test each
connection, and submit a small order with someone watching the distributor's
own portal, before you rely on it for routine ordering.
:::

## What each connection does

| Connection | Orders | Status, tracking, and serials | Bills | Catalog | Vendor webhook |
| --- | --- | --- | --- | --- | --- |
| **Ingram Micro** | Submitted | Pulled every 15 minutes | Pulled every 6 hours | Daily | Yes |
| **TD SYNNEX** (Digital Bridge) | Submitted | Pulled every 15 minutes | Pulled every 6 hours | Daily | Yes |
| **CDW** | Built in PunchOut, then submitted | Pushed by CDW | Entered by hand | None | Yes |
| **Pax8** | Subscription orders | Subscriptions daily | Pulled every 6 hours | None | Yes |
| **StreamOne** (TD SYNNEX StreamOne Ion) | Subscription orders | Subscriptions daily | From a billing report | None | No |

For Pax8 and StreamOne subscriptions, see
[Subscriptions and reconciliation](/procurement/subscriptions/).

## Before you begin

- Managing connections needs `integrations:admin`. People with
  `procurement:read` can see them.
- Turning on live ordering needs a second factor on your account: a passkey or
  an authenticator app. See
  [Secure your console account](/depot/account-security/#turn-on-two-factor-authentication).
- Get API access from the distributor, and store it in the vault as a
  credential. The credential's **Username** holds the client ID or account
  ID, and its secret holds the client secret, shared secret, or token. See
  [Credentials vault](/documentation/credentials-vault/).

## Add a connection

1. Select **Settings** > **Integrations** > **Distributors**, then **Add
   connection**.
2. Choose the **Vendor**, and enter a **Name**, such as Ingram main account.
3. In **Credential**, choose the vault credential. Outpost opens it only when
   it calls the vendor, and records its use in the audit log once a day.
4. Under **Vendor settings**, select **Add a setting** for each value the
   vendor needs, listed under each vendor below. Settings are account values,
   never a password.
5. Leave **Enabled (sync catalog, order status and invoices)** selected.
6. Select **Add connection**.
7. Open the connection and select **Test connection**.

Live ordering is off on a new connection. A connection's bills need a
supplier to be from, so Outpost links one: a supplier already named after the
vendor, or a new one. The connection page shows it under **Bills from**. To
order through the connection, the supplier's **Distributor connection** names
it. See [Purchase orders](/procurement/purchase-orders/#add-a-supplier).

## Turn on live ordering

Live ordering is what lets an approved purchase order be submitted as a real
order. Three safeguards stand between a purchase order and the distributor:

1. **Live ordering is off per connection** until an administrator turns it on.
2. **Each submission needs an explicit confirmation** of the expected total,
   by someone with `procurement:approve`. If the total changes after they
   open the dialog, the submission is refused.
3. **An order is never placed twice.** Before submitting, Outpost asks the
   distributor whether it already has an order with the purchase order's
   number, and records that order instead of placing another.

To turn it on:

1. Open the connection, and in the **Danger zone** card select **Turn live
   ordering on**.
2. Confirm it is you with a passkey, an authenticator code, or a recovery
   code. See [Confirm it is you](/depot/account-security/#confirm-it-is-you).

The card shows who turned it on and when. **Turn live ordering off** needs no
second factor, so anyone who manages the connection can stop ordering at once.
API keys and Pioneer AI can never turn live ordering on.

Live ordering gates every connection. On Ingram Micro, TD SYNNEX, and CDW it
gates purchase order submissions. On Pax8 and StreamOne it gates subscription
changes, which also need their own confirmation. See
[Subscriptions and reconciliation](/procurement/subscriptions/#change-a-subscription).

## What submitting does

When someone selects **Place the order** on a purchase order, the order is
queued, and Outpost submits it within a minute:

- The distributor's order carries your purchase order number, the ship-to
  address of the stock location, or of the client's site on a drop ship, and
  each line's supplier SKU or manufacturer part number.
- The `purchase_order.submitted` webhook event is sent when the order is
  submitted, and `purchase_order.accepted` when the distributor accepts it.
- The purchase order's **Submission** shows **Accepted by distributor** with
  the distributor's order number, or **Rejected by distributor** or
  **Submission failed** with the reason. A refused or failed submission
  returns the order to **Approved**. A temporary error is retried, up to 5
  attempts.
- From then on, status syncs record shipments with their carrier, tracking,
  and serial numbers, mark backordered lines, and cancel lines the
  distributor canceled. Reported serial numbers are filled in on the receive
  page. A purchase order whose every line the distributor canceled is
  canceled.

Each stock location you order into needs a ship-to address. See
[Inventory](/procurement/inventory/#set-up-locations).

## Sync and status

Outpost syncs each enabled connection on its own schedule. Under **Sync**,
**Last sync by kind** shows **Catalog**, **Order status**, **Invoices**, and,
for Pax8 and StreamOne, **Subscriptions**. Select **Sync now** to queue one
pass of that kind at once.

**Last error** says what went wrong on the last call, such as **The vendor
refused the credential.** or **The connection settings are wrong or
incomplete.** The **Distributors** list shows each connection's **Live
ordering**, **Last sync**, and **Last error**.

Bills pulled from a distributor arrive as supplier bills and are matched at
once. See [Supplier bills](/procurement/supplier-bills/#bills-from-a-distributor).

## Set up the vendor webhook

A webhook lets the distributor tell Outpost the moment an order or
subscription changes, instead of waiting for the next sync.

1. Open the connection and select **Set up webhook**.
2. Confirm. Outpost shows the **Webhook URL** and **Signing secret** once.
3. Copy both into the distributor's webhook settings, as described for each
   vendor below, then select **I have copied it**.

**Rotate webhook** makes a new URL and secret. The old ones stop working right
away, so update the distributor at the same time. Outpost never trusts what a
webhook says. It treats each one as a hint and fetches the change from the
distributor itself.

## Ingram Micro

| Item | Value |
| --- | --- |
| Credential | **Username**: the Ingram Micro API client ID. Secret: its client secret. |
| `customerNumber` | Your Ingram Micro customer number. Required. |
| `countryCode` | Your Ingram Micro country, two letters. `US` when not set. |
| `senderId` | Optional. The sender ID Ingram Micro gave you. |
| Webhook | Enter the URL and secret in Ingram Micro's webhook settings. Ingram Micro signs each call with the secret. |

## TD SYNNEX

The **TD SYNNEX** connection is TD SYNNEX Digital Bridge, for hardware.

| Item | Value |
| --- | --- |
| Credential | **Username**: the Digital Bridge client ID. Secret: its client secret. |
| `accountNumber` | Your TD SYNNEX account number. |
| `region` | Your TD SYNNEX region. `US` when not set. |
| Webhook | Enter the URL and secret in Digital Bridge's webhook settings. Each call is signed with a timestamp, and calls more than 5 minutes old are refused. |

## CDW

CDW connects through cXML. You build the cart on CDW's own site with
PunchOut, and the cart comes back to Outpost as a draft purchase order.

| Item | Value |
| --- | --- |
| Credential | Secret: the cXML shared secret CDW issued. |
| `fromIdentity` | The buyer identity CDW issued you. Required. |
| `fromDomain`, `toDomain`, `toIdentity` | The credential domains and CDW's identity, if CDW gave you values other than `NetworkID`, `DUNS`, and `CDW`. |
| `deploymentMode` | `production`, or `test` for CDW's test environment. |
| `billToAddressId` | Optional. CDW's bill-to address ID for your account. |
| Webhook | Give CDW the URL as the address for order confirmations and ship notices, and the secret as the shared secret CDW sends with them. |

CDW does not offer an order lookup, catalog, or invoice download through
cXML:

- Order status arrives only by CDW's push, so set up the webhook.
- Enter CDW's bills by hand. See [Supplier bills](/procurement/supplier-bills/#enter-a-bill).
- A resubmitted order carries the same cXML identifiers, so CDW recognizes it
  as the same order.

### Build an order in PunchOut

1. On a new purchase order, find the **Find at distributors** panel.
2. Select **Shop at** followed by the CDW connection's name. CDW's store opens
   in a new tab.
3. Build the cart and check out there.

The cart comes back as a draft purchase order, marked **Built in the
distributor's PunchOut catalog.**, and opens in the console. Review, approve,
and submit it like any other. Starting PunchOut needs `procurement:write`.

## Pax8

| Item | Value |
| --- | --- |
| Credential | **Username**: the Pax8 API client ID. Secret: its client secret. |
| Settings | None. |
| Webhook | In Pax8's webhook settings, enter the URL, and the secret as the authorization value. Pax8 does not sign webhooks, so Outpost compares that value. |

Map each Pax8 company to its client on the connection's **Company map**
before subscriptions are billed. See
[Subscriptions and reconciliation](/procurement/subscriptions/#map-companies-to-clients).

## StreamOne

The **StreamOne** connection is TD SYNNEX StreamOne Ion, for subscriptions.

| Item | Value |
| --- | --- |
| Credential | **Username**: your StreamOne Ion account ID. Secret: a refresh token from StreamOne Ion. |
| `accountId` | Optional. The account ID, when it is not the credential's **Username**. |
| `billingReportId` | The StreamOne Ion billing report that bills are read from. Without it, no bills are pulled. |
| Webhook | StreamOne Ion has none. Subscriptions sync daily, and **Sync now** syncs at once. |

A StreamOne Ion refresh token works once. Each time Outpost uses it,
StreamOne issues a new one, and Outpost saves it into the vault credential.
Do not use the same token anywhere else, or the connection stops working.

## Find and compare at distributors

- **Find at distributors**, on a purchase order you are writing, searches the
  catalogs synced from your connections by SKU, manufacturer part number,
  UPC, or description. **Add** puts a result on the order as a line with the
  distributor's SKU and cost. Costs and stock are as of the last catalog
  sync. See [Purchase orders](/procurement/purchase-orders/#raise-a-purchase-order).
- **Compare prices**, on a stock item, asks every enabled distributor
  connection at once for its live cost and availability, using the item's
  part number, UPC, and supplier SKUs. The cheapest answer is marked
  **Lowest**, and a distributor that does not answer in time is named. It
  needs `procurement:read`, and the item needs a part number, UPC, or
  supplier SKU to ask about. Live checks are rate limited, so wait a minute
  if Outpost says there were too many.

## Delete a connection

Select **Delete connection** in the **Danger zone**. Deleting removes the
connection and its synced catalog. It is refused while suppliers, orders, or
subscriptions still use it. Turn the connection off instead.

## Verify

- **Test connection** succeeds, and **Last error** shows **None**.
- After **Sync now** for **Order status**, **Last run** shows the time.

## Next steps

- [Purchase orders](/procurement/purchase-orders/)
- [Subscriptions and reconciliation](/procurement/subscriptions/)
