Web Hooks

Stop polling. Start responding. Know when orders, shipments, and business events happen without repeatedly calling ScanSource APIs.

Web Hooks allow ScanSource to notify your application when something changes, so your team can automate updates, customer communications, and business workflows in near real time.

Start here · Sign in · APIs

Partner language that resonates: Stop asking if something changed. Let ScanSource tell you when it changes.

Delivery event formats

ScanSource Web Hooks are delivered using Azure Event Grid. Each card below is one event type with key fields and an example payload.

ScanSource.SalesOrder.Status

Fired when an order status changes.

Key fields

Data fields: CustomerNumber · BusinessUnit · OrderNumber · OrderType · Status · PONumber · POType · EndUserPONumber · OrderReferenceNumber · CiscoIdentifier

Example payload

[
{
"Id": "ed66c57a-8d89-4907-afc0-8b9ece7f762a",
"Subject": "1000016536",
"EventType": "ScanSource.SalesOrder.Status",
"Data": {
"CustomerNumber": "1000016536",
"BusinessUnit": "1700",
"OrderNumber": "0016165237",
"OrderType": "ZOR",
"Status": "On Hold",
"PONumber": "po123456789",
"POType": "API",
"EndUserPONumber": null,
"OrderReferenceNumber": null,
"CiscoIdentifier": null
},
"dataVersion": "",
"metadataVersion": "1",
"EventTime": "2020-11-05T21:15:32.6997917Z",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>"
}
]

ScanSource.Product.ATP

Inventory available-to-promise changes.

Key fields

Data fields: Id · ManufacturerPartNumber · VendorName · QuantityAvailable

Example payload

[
{
"id": "61888e8d-1ce5-4858-832c-de6481a35448",
"subject": "Product: NN3820-AC= Updated",
"data": {
"Id": "c30fbe89-bc1a-4092-898d-cf8602f1badb",
"ManufacturerPartNumber": "NN3820-AC=",
"VendorName": "ORACLE AMERICA INC",
"QuantityAvailable": 0.0
},
"eventType": "ScanSource.Product.ATP",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2020-11-18T21:46:07.8453997Z",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>"
},
{
"id": "d4c7ef28-e5b9-4eaa-8942-87b9ed64fd63",
"subject": "Product: NN3820-PS-AC Updated",
"data": {
"Id": "3ef42549-1eb2-4ccc-a591-6fce031c0b12",
"ManufacturerPartNumber": "NN3820-PS-AC",
"VendorName": "ORACLE AMERICA INC",
"QuantityAvailable": 0.0
},
"eventType": "ScanSource.Product.ATP",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2020-11-18T21:46:07.8454168Z",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>"
},
{
"id": "f2ec923a-efc4-4eeb-9077-8da2ba3c0c7f",
"subject": "Product: NN3820-PS-AC= Updated",
"data": {
"Id": "07afadba-de58-451e-a7ce-70b1c6bd3d7b",
"ManufacturerPartNumber": "NN3820-PS-AC=",
"VendorName": "ORACLE AMERICA INC",
"QuantityAvailable": 0.0
},
"eventType": "ScanSource.Product.ATP",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2020-11-18T21:46:07.8454186Z",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>"
}
]

ScanSource.Invoice.Create

Triggered when new invoices are created.

Key fields

Data fields: Id · CustomerNumber · InvoiceNumber · PONumber · SalesOrderNumber · InvoiceType · OrderReferenceNumber

Example payload

[
{
"id": "67decfdf-92ae-448c-9a61-8ab99531519e",
"subject": "Invoice: 9910632229 Created",
"data": {
"Id": "b3c47ea9-2a3f-43c5-9a64-1178ae0d4811",
"CustomerNumber": "1000016536",
"InvoiceNumber": "9910632229",
"PONumber": "TEST_ZPOC3",
"SalesOrderNumber": "9990000120",
"InvoiceType": "ZF2"
},
"eventType": "ScanSource.Invoice.Create",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2024-02-22T18:41:19.5140731Z",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>"
},
{
"id": "03b43a0b-c195-4efd-88de-df89a81fb909",
"subject": "Invoice: 9910632277 Created",
"data": {
"Id": "6e344273-fa78-4a41-87bd-4a2b9839af33",
"CustomerNumber": "1000016536",
"InvoiceNumber": "9910632277",
"PONumber": "TEST_ZPOC4",
"SalesOrderNumber": "9990000135",
"InvoiceType": "ZF2",
"OrderReferenceNumber": "TEMP"
},
"eventType": "ScanSource.Invoice.Create",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2024-02-24T14:11:37.6986646Z",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>"
}
]

ScanSource.Shipping.Date.Update

Triggered when shipment / estimated ship date information updates.

Key fields

Data fields: CustomerNumber · Id · SalesOrders[] (BusinessUnit, SalesOrderNumber, SalesOrderStatus, PONumber, POType, EndUserPo, ReferenceNumber, ShippingAddress, EnteredBy, Lines[])

Example payload

EnteredBy, ReferenceNumber, and ShippingAddress on SalesOrders can be null. Treat nulls as possible across payloads.

[
{
"id": "6c09c20f-9b1e-401c-90f2-96f3c5acf0da",
"subject": "Estimated Ship Date for 1000099969",
"data": {
"CustomerNumber": "1000099969",
"SalesOrders": [
{
"BusinessUnit": "1700",
"SalesOrderNumber": "0019521023",
"SalesOrderStatus": "On Hold",
"PONumber": "KUMC FORECAST FOR JUNE",
"POType": "MAN",
"EndUserPo": null,
"ReferenceNumber": null,
"ShippingAddress": {
"Name": "My Corp.",
"Attn": null,
"Street1": "ATTN: ACCOUNTS PAYABLE",
"Street2": "290 EVERGREEN AVE",
"City": "SOMERSET",
"State": "NJ",
"PostalCode": "08873",
"Country": "US"
},
"EnteredBy": null,
"Lines": [
{
"POLineNumber": "0",
"ItemNumber": "HSM-PC45D000000201",
"ProductMfrPart": "PC45D000000201",
"CustomerPartNumber": null,
"ItemCatCode": "ZTAN",
"BackOrdered": 100,
"Shipped": 0,
"ShippingData": [
{
"Confirmed": 91,
"EstimatedShipDate": "2024-11-26T00:00:00"
}
],
"PreviousShippingData": [
{
"Confirmed": 91,
"EstimatedShipDate": "2024-11-20T00:00:00"
}
]
}
]
}
],
"Id": "1058372a-705b-4f2b-981a-be4c59818d53"
},
"eventType": "ScanSource.Shipping.Date.Update",
"dataVersion": "2.0",
"metadataVersion": "1",
"eventTime": "2024-11-22T07:50:07.8660102Z",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>"
}
]

Why Web Hooks matter

Without Web Hooks: your application keeps calling GET order status (and similar) to learn whether anything changed.

With Web Hooks: ScanSource sends an event when something important happens. Your endpoint reacts once — fewer API calls, less polling code, faster updates.

Explore and get started

Customer shipment updates

When a shipment leaves the warehouse: ScanSource → Shipment event → Customer portal → Tracking email sent. No polling required.

Keep Salesforce up to date

When an order status changes: ScanSource → Web Hook → Salesforce opportunity. Account teams see the latest status automatically.

ERP automation

When an invoice becomes available: ScanSource → Invoice event → NetSuite → Accounts payable workflow.

Ecommerce automation

When inventory changes: ScanSource → Inventory / ATP event → Storefront update. Reduce overselling and improve CX.

How Web Hooks work

1. Create a Web Hook subscription (request via ScanSource after your endpoint is ready).

2. Provide an HTTPS endpoint that your application owns.

3. ScanSource sends a validation event to prove the endpoint is reachable.

4. Your endpoint returns the required validation response (see Validation explained).

5. ScanSource begins sending business events for the types you subscribed to.

6. Your application processes events — update CRM/ERP, notify customers, refresh storefronts, and more.

Ready to implement?

1. Build and secure your HTTPS endpoint (validation + event handling).

2. Confirm validation returns validationResponse with HTTP 200.

3. Email b2brequest@scansource.com with customer number, event types, and endpoint URL.

4. Process business events into CRM, ERP, ecommerce, or customer notifications.

Still choosing a path? See Popular platforms for credential-first connectors, or APIs for on-demand GET patterns.

Important: you must own the endpoint

Web Hooks do not update your systems automatically. Your application must expose an endpoint capable of receiving and processing events.

What ScanSource provides

Event delivery · Event payloads · Subscription management · Retry behavior (via Azure Event Grid delivery).

What you must provide

Public HTTPS endpoint · Endpoint security · Validation response handling · Event processing logic.

Validation explained

At the time of event subscription creation/update, Event Grid posts a subscription validation event to the target endpoint.

The eventType property of the event is Microsoft.EventGrid.SubscriptionValidationEvent.

The data property includes a validationCode property with a randomly generated string (for example, "validationCode: acb13…").

The array contains only the validation event. Other events are sent in a separate request after you echo back the validation code.

Example SubscriptionValidationEvent

[
{
"id": "99bf9326-1be6-4823-b697-46b67b940e9b",
"topic": "/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.EventGrid/topics/<resource>",
"subject": "",
"data": {
"validationCode": "48416BE1-F393-4C3D-BF04-394651361699",
"validationUrl": "https://rp-eastus.eventgrid.azure.net:553/eventsubscriptions/{yourSubscriptionName}/validate?id=48416BE1-F393-4C3D-BF04-394651361699&t=2020-11-05T16:16:45.3056626Z&apiVersion=2020-04-01-preview&token=..."
},
"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
"eventTime": "2020-11-05T16:16:45.3056626Z",
"metadataVersion": "1",
"dataVersion": "2"
}
]

To prove endpoint ownership, echo back the validation code in the validationResponse property:

{
"validationResponse": "48416BE1-F393-4C3D-BF04-394651361699"
}

You must return an HTTP 200 OK response status code for a successful subscription response. The response must be within 30 seconds. If the operation does not finish within 30 seconds, it may be canceled and reattempted after 5 seconds. If all attempts fail, it is treated as a validation handshake error.

If the validation response is not returned correctly: subscription status = Validation Failed, and business events will not be delivered.

Do I need Web Hooks?

Use Web Hooks when

You want near real-time updates · automated workflows · customer notifications · CRM/ERP integration · fewer API calls.

Use GET APIs when

Looking up information on demand · searching products · retrieving order history · ad hoc reporting.

Most partners use both

Example: GET product pricing + Web Hook shipment updates + GET order details. Web Hooks notify; GET APIs retrieve the full picture.

Request a Web Hook subscription

When you have implemented the validation handshake and can process event payloads, notify ScanSource to create or update your subscription.

Email b2brequest@scansource.com with your customer number, which event type(s) you need (for example Sales Order Status, ATP, Invoice Create, Shipping Date Update), and your HTTPS endpoint URL.

APIs · Popular platforms · Start here

Success codes

Event Grid considers only the following HTTP response codes as successful deliveries. All other status codes are considered failed deliveries and will be retried or dead lettered as appropriate. Upon receiving a successful status code, Event Grid considers delivery complete.

200 OK

201 Created

202 Accepted

203 Non-Authoritative Information

204 No Content

Return a success code quickly; do heavy processing asynchronously when possible.