ml-connector
DeltekUPS

Deltek and UPS integration

Deltek Vantagepoint runs projects, finance, and the firm records for clients and vendors. UPS handles shipping labels, rates, address validation, and package tracking. Connecting the two lets you create UPS shipments from the firm and project data already in Deltek and bring tracking numbers and delivery status back without re-keying. ml-connector reads firm addresses and project references from Deltek, validates them with UPS, books the shipment, and records the result against the right project. It handles the very different APIs on each side and keeps the flow moving on the schedule and events you set.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, employees, projects, opportunities, and activities through Hub REST APIs, plus AP invoices, AR invoices, journal entries, and other accounting transactions through its accounting transaction APIs. Calls go to a tenant-specific URL such as https://acme.deltekfirst.com/acme/api/ and use OAuth 2.0, with the server-to-server password grant requiring the Allow Password Grant Type setting to be enabled. Webhooks exist only as workflow-triggered callbacks configured per workflow, with no HMAC signature, so most reads are done by polling with page-based pagination. There is no native idempotency header, so duplicate prevention is the caller's job.

How UPS works

UPS is a carrier and logistics platform, not a finance system, so it has no vendor, GL account, purchase order, or invoice objects, and it offers no billing or invoice download API. It exposes shipment label creation, rating, tracking, address validation, time in transit, and pickup scheduling through REST APIs, all using OAuth 2.0 client credentials with a six-digit account number passed as x-merchant-id for negotiated rates. The token lasts about four hours and must be cached, since UPS allows only around 250 token requests per day. UPS can push delivery scan events through the Track Alert subscription, authenticated by a shared credential header rather than a signature.

What moves between them

The flow runs from Deltek into UPS for shipment creation and from UPS back into Deltek for tracking and charges. ml-connector reads ship-to addresses from Deltek firms and the related project number, validates each address with UPS Address Validation, creates the UPS shipment label, and writes the tracking number, service level, and shipping charge from the response back onto the matching Deltek project or firm as an activity. As packages move, UPS Track Alert webhook events and a scheduled tracking poll update delivery status on the same Deltek record. Because UPS has no invoice API, ml-connector records the shipment charge returned at label time rather than reconciling against a downstream UPS bill.

How ml-connector handles it

ml-connector stores both credential sets encrypted and bridges the two token models, getting a Deltek password-grant bearer token against the tenant URL and refreshing it on a 401, while caching the UPS client-credentials token for its roughly four-hour life so it never approaches the 250-token daily ceiling. Deltek firm addresses are run through UPS Address Validation first, since residential versus commercial classification changes the rate, then the shipment is created with the account number supplied as x-merchant-id for negotiated rates. UPS shipment creation is not idempotent, so each label job carries a stable jobId to stop duplicate shipments on retry, and the returned tracking number is checked against existing Deltek activities before a new one is written. Delivery status arrives two ways: a UPS Track Alert subscription pushes scan events to a webhook validated by the shared credential header, and a scheduled poll backfills anything missed, which matters because Track Alert subscriptions expire after 14 days and must be renewed for shipments still in transit. UPS rate limits return HTTP 429 with no retry-after header, so ml-connector backs off and retries with a full audit trail and replay on every record.

A real-world example

A 200-person architecture and engineering firm runs Deltek Vantagepoint for projects, billing, and its client and vendor firm records, and ships drawing sets, material samples, and signed deliverables to job sites by UPS. Before the integration, staff re-typed client site addresses from Deltek into the UPS dashboard for every shipment, then pasted tracking numbers back into project notes by hand and fielded calls asking where a package was. With Deltek and UPS connected, a shipment is created straight from the project's firm address after a validation check, the tracking number and delivery status land on the project automatically, and the team can see what shipped and whether it arrived without leaving Deltek.

What you can do

  • Create UPS shipment labels directly from Deltek firm addresses and project references with no re-keying.
  • Validate every ship-to address with UPS before booking so residential and commercial rates are correct.
  • Write UPS tracking numbers, service level, and shipping charges back onto the matching Deltek project or firm.
  • Update delivery status on the Deltek record from UPS Track Alert webhooks and a scheduled tracking poll.
  • Bridge the Deltek password-grant token and the cached UPS client-credentials token, with retries and a full audit trail.

Questions

Can this integration pull UPS invoices into Deltek for AP processing?
No. UPS does not expose a billing or invoice download API, so there is no UPS bill to pull. ml-connector records the shipping charge that UPS returns when the label is created and posts it against the Deltek project, but full invoice reconciliation would still rely on the UPS Billing Center.
How does data move between Deltek and UPS?
Ship-to addresses and project references move from Deltek into UPS to create shipments, and tracking numbers, delivery status, and charges move from UPS back into Deltek as project activities. Deltek firm and project data is the source of truth for who and where, and UPS owns the shipping and tracking detail. UPS holds no financial records, so ml-connector never writes ledger entries to UPS.
How does the integration get delivery updates if UPS does not sign its webhooks?
UPS pushes scan events through a Track Alert subscription and authenticates each delivery by echoing a secret credential in the webhook header rather than an HMAC signature. ml-connector validates that credential on every inbound event and also runs a scheduled tracking poll as a backstop. This matters because Track Alert subscriptions expire after 14 days, so the connector renews them for packages still in transit.

Related integrations

Connect Deltek and UPS

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started