Visma and UPS integration
Visma handles your purchasing, inventory, and financial records. UPS ships the goods and tracks them across the network. Connecting the two keeps your purchase orders, shipments, and delivery status in one place. When a purchase receipt ships via UPS, the tracking number and events flow back into Visma automatically, and shipping costs post to your purchase order. The finance team sees the real status of inbound goods without manual lookups.
What moves between them
The main flow runs from Visma into UPS and back. When a purchase order ships, ml-connector reads the purchase receipt from Visma and sends shipment details to UPS for rating and tracking setup. Tracking numbers returned by UPS are written back to the purchase order in Visma. As shipments move through the UPS network, Track Alert sends events to ml-connector, which writes them into Visma's purchasing audit trail. If Track Alert expires, ml-connector renews the 14-day subscription automatically. Address validation happens on write to UPS so invalid addresses are caught before a shipment is created.
How ml-connector handles it
ml-connector stores both credential sets encrypted and presents Visma's tenant ID and UPS account number on every request. It manages two authentication cycles: Visma tokens are refreshed when a call returns 401, and UPS tokens are refreshed before the 4-hour expiry to avoid hitting the 250-per-day request cap. On the Visma side, purchase orders are read via delta poll using lastModifiedDateTime, and the integration also listens for webhooks in case they are enabled at the company level, though webhooks are one-time delivery with no retry guarantee. On the UPS side, Track Alert subscriptions are created with a 14-day validity and tracked by expiry date; when a subscription is within 2 days of expiry, ml-connector automatically renews it and updates the tracking number list. If a Track Alert renewal fails, the integration falls back to polling Quantum View feeds. Every shipment and tracking event carries a full audit trail and can be replayed if a downstream write to Visma fails. Rate limits are respected with exponential backoff.
A real-world example
A mid-sized electronics distributor uses Visma for purchasing, inventory, and accounts payable, and ships customer orders and supplier inbound goods via UPS. Before the integration, the warehouse team looked up tracking numbers manually in UPS and typed them into Visma purchase orders, and the operations team checked UPS status separately to flag delayed inbound shipments. With Visma and UPS connected, tracking numbers appear in Visma automatically when a shipment is tendered to UPS, and the operations team sees real-time delivery status in their familiar Visma interface without switching to UPS. Month-end close includes the actual cost of UPS shipments applied to inventory purchases, and there is no rework on shipment status reconciliation.
What you can do
- Create shipments in UPS directly from Visma purchase orders and return tracking numbers to the purchase order record.
- Validate addresses against UPS before creating a shipment so invalid addresses are caught early.
- Receive shipment tracking events via UPS Track Alert and write them into Visma's purchasing audit trail without manual intervention.
- Renew Track Alert subscriptions automatically when they approach the 14-day expiry to maintain continuous tracking visibility.
- Bridge Visma OAuth 2.0 tokens and UPS Account Number authentication so both systems remain in sync on every request.
Questions
- How does the integration handle the 14-day expiry on UPS Track Alert subscriptions?
- ml-connector monitors the expiry date of each Track Alert subscription and automatically renews it before the 14 days elapse. If a renewal fails, the integration falls back to polling Quantum View feeds to maintain tracking visibility. The expiry date and renewal status are logged in the audit trail.
- What happens if a Visma webhook for purchase order changes is not delivered?
- Since Visma webhooks are one-time delivery with no automatic retry, ml-connector also polls purchase orders using the lastModifiedDateTime query parameter to catch changes that may have been missed. The combination of webhooks and polling ensures that no purchase order update is lost.
- Does the integration handle UPS address validation before creating a shipment?
- Yes. ml-connector validates the delivery address against UPS before creating the shipment. If the address is invalid or incomplete, the validation fails and the shipment is not created in UPS, preventing costly errors. The validation result is logged in Visma so the warehouse team can correct the address.
Related integrations
More Visma integrations
Other systems that connect to UPS
Connect Visma and UPS
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started