Public API V2 - Changelog
All changes in this release are additive and backward-compatible. Existing integrations continue to work without changes.
Shipment Commodities: create, update and delete
You can now manage the commodities on an existing shipment directly. Before this release, commodities could only be set when the shipment was created.
What changed
- New:
POST /PublicApi/Shipping/v2/ShipmentCommodity(Create Shipment Commodity) adds a commodity to an existing shipment.- Required fields:
shipmentId,handlingQuantity,packagingType,weightTotal. - Optional fields:
piecesTotal,length,width,height,description,freightClass,nmfc,additionalMarkings,hazardousMaterial,unNumber,packingGroup,hazardClasses,addOverLengthAccessorial. - Returns the created commodity.
- Required fields:
- New:
PUT /PublicApi/Shipping/v2/ShipmentCommodity/{shipmentCommodityId}(Update Shipment Commodity) updates an existing commodity.- This is a partial update. Only the fields you send are changed. A field that you omit or send as
nullkeeps its current value, so this endpoint cannot clear a field. - Returns the updated commodity.
- This is a partial update. Only the fields you send are changed. A field that you omit or send as
- New:
DELETE /PublicApi/Shipping/v2/ShipmentCommodity(Delete Shipment Commodities) removes one or more commodities from a shipment.- Send the IDs in
shipmentCommodityIds. - All IDs must belong to the same shipment, and at least one commodity must remain on the shipment.
- If any ID is not found, nothing is deleted and the response is
404, listing the IDs that were not found.
- Send the IDs in
What did not change
- Creating a shipment with its commodities works exactly as before.
- The commodity reference-number endpoints (
/ShipmentCommodity/ReferenceNumbers) and the stop-to-commodity association endpoint (/ShipmentStopCommodity) are unchanged.
Do I need to do anything?
No. These are new, opt-in endpoints.
Modified dates on shipments and carriers
Shipment and carrier responses now include a modifiedDate field: an ISO 8601 date-time showing when the record was last changed. Use it to detect changes and skip records you have already processed.
What changed
modifiedDate was added to:
- Shipments: Get Shipment (
GET /PublicApi/Shipping/v2/Shipments/{shipmentId}), the shipment returned by the Tracking endpoints (Update Shipment Tracking, Update Tracking by Reference Number, Update Stop Dates and POD), and the ShipmentCreate / ShipmentUpdate webhook payloads. - Nested objects on shipments: the carrier details and the payer organization.
- Carriers: Create Carrier, Update Carrier, Get Carrier by LSP Carrier ID, by Carrier Master ID and by DOT number, and the CarrierCreate / CarrierUpdate webhook payloads.
- Shipment location updates: the ShipmentLocationUpdate webhook payload (see below).
What did not change
- No existing fields were removed or renamed.
- Request bodies are unchanged.
modifiedDateis response-only.
Do I need to do anything?
No. If your JSON parser rejects unknown fields, allow the new modifiedDate property.
Update Shipment Buy Rate: response now documented
PUT /PublicApi/Shipping/v2/CarrierCharges (Update Shipment Buy Rate) now documents its response: the shipment's pricing details after the update.
What changed
The response includes:
shipmentId,payerOrganization,payerOrganizationIdtotalBuyandtotalSellvendors: each vendor'svendorId,name,vendorTypeandtransitType, plus achargeslist. Each charge haschargeType,accessorialType,accessorialId,accessorialName,buy,buyCalculationType,sellandsellCalculationType.
What did not change
- The request body is unchanged.
Do I need to do anything?
No. You can now read the updated totals from the response instead of making a separate call to Get Pricing Details.
Webhooks: three new example payloads
Three more webhooks now have example-payload endpoints, so you can fetch a sample body before you subscribe. Like the existing examples, they return sample data only.
What changed
- New:
GET /PublicApi/v2/WebHooksDemo/ShipmentStatusUpdatereturns an example ShipmentStatusUpdate payload. It has the same shape as the Get Shipment response. - New:
GET /PublicApi/v2/WebHooksDemo/ShipmentLocationUpdatereturns an example ShipmentLocationUpdate payload:shipmentId,latitude,longitude,locationString,lastLocationUpdate,statusandmodifiedDate. - New:
GET /PublicApi/v2/WebHooksDemo/CommissionBillCreatereturns an example CommissionBillCreate payload. It has the same shape as a shipment commission.
What did not change
- The existing example endpoints (ShipmentCreate, ShipmentUpdate, InvoiceCreate, InvoiceCreateWithShipment, BillCreate) are unchanged.
Do I need to do anything?
No. These are reference endpoints for building and testing webhook receivers.
Endpoint names and descriptions cleaned up
Several endpoints have clearer names and descriptions in the API reference. Routes, parameters, request bodies and responses did not change, so existing calls work exactly as before.
What changed
| Endpoint | Was | Now |
|---|---|---|
POST /PublicApi/Accounting/v2/AdvancePayments | Create Advanced Payment | Create Advance Payment |
PUT /PublicApi/Shipping/v2/Tracking | Update Tracking | Update Shipment Tracking |
PUT /PublicApi/Shipping/v2/Tracking/ReferenceNumbers | Update Shipment Reference Numbers | Update Tracking by Reference Number |
POST /PublicApi/Shipping/v2/Alerts/Resolved | Update Shipment Alert | Resolve Shipment Alert |
POST /PublicApi/Shipping/v2/AssignmentResolve | Update Staff Assignment | Resolve Staff Assignment |
POST and PUT /PublicApi/Shipping/v2/ShipmentCommodity/ReferenceNumbers | Create Reference Numbers | Create Commodity Reference Numbers |
GET /PublicApi/Carrier/v2/Insurance/Attachments/{carrierInsuranceId} | By Carrier Insurance Id | By LSP Carrier Insurance Id |
Descriptions were also corrected:
- The Sync endpoints for Bills, Commissions and Invoices (
PUT .../Bills/Sync,.../Commissions/Sync,.../Invoices/Sync) now say what they do: update the external sync status of a bill, commission bill or invoice. The Invoices one was previously described as "Create Invoice and apply to Invoice." - Get Carrier Insurance Attachments by ID now says that
carrierInsuranceIdis the LSP Carrier Insurance Id, not the LSP Carrier Id. - Typos fixed in Find Customers by Reference, Create Shipment Commissions, Update Shipment Commission and Get Carrier Insurance Attachment by ID.
Do I need to do anything?
No, unless you generate client code from the spec and key off the endpoint summaries. Operation IDs are unchanged.
