Improved

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.
  • 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 null keeps its current value, so this endpoint cannot clear a field.
    • Returns the updated commodity.
  • 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.

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. modifiedDate is 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, payerOrganizationId
  • totalBuy and totalSell
  • vendors: each vendor's vendorId, name, vendorType and transitType, plus a charges list. Each charge has chargeType, accessorialType, accessorialId, accessorialName, buy, buyCalculationType, sell and sellCalculationType.

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/ShipmentStatusUpdate returns an example ShipmentStatusUpdate payload. It has the same shape as the Get Shipment response.
  • New: GET /PublicApi/v2/WebHooksDemo/ShipmentLocationUpdate returns an example ShipmentLocationUpdate payload: shipmentId, latitude, longitude, locationString, lastLocationUpdate, status and modifiedDate.
  • New: GET /PublicApi/v2/WebHooksDemo/CommissionBillCreate returns 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

EndpointWasNow
POST /PublicApi/Accounting/v2/AdvancePaymentsCreate Advanced PaymentCreate Advance Payment
PUT /PublicApi/Shipping/v2/TrackingUpdate TrackingUpdate Shipment Tracking
PUT /PublicApi/Shipping/v2/Tracking/ReferenceNumbersUpdate Shipment Reference NumbersUpdate Tracking by Reference Number
POST /PublicApi/Shipping/v2/Alerts/ResolvedUpdate Shipment AlertResolve Shipment Alert
POST /PublicApi/Shipping/v2/AssignmentResolveUpdate Staff AssignmentResolve Staff Assignment
POST and PUT /PublicApi/Shipping/v2/ShipmentCommodity/ReferenceNumbersCreate Reference NumbersCreate Commodity Reference Numbers
GET /PublicApi/Carrier/v2/Insurance/Attachments/{carrierInsuranceId}By Carrier Insurance IdBy 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 carrierInsuranceId is 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.