Platforms & Integrators
Add port-level congestion & momentum to your TMS/BI with stable SLAs. One schema, reproducible methods, audit-friendly freshness.

Pain
- DIY port definitions cause inconsistency across regions.
- Coverage gaps and stale snapshots break SLAs.
- CSV/JSON mismatch and missing strong ETag/304.
How we help
- Unified schema & comparable metrics across ports.
- Freshness SLO (p95 ≤ 2h) with traceable timestamps.
- Resale-friendly licensing and partner support.
Result KPIs
- Faster time-to-market (weeks → days).
- Contractual SLO with monitoring & alerts.
- Lower maintenance cost vs. DIY pipelines.
A partner story
A TMS vendor serving forwarders needed reliable port congestion across APAC, EU, and NA. Their DIY scrapers produced inconsistent “wait time” fields and frequent outages. PortPulse replaced ad-hoc ingest with a contract-first API: the same definitions for avg_wait_hours, congestion_score, and dwell across ports, backed by freshness SLO and strong caching. The integration went live in days—partners now ship a single widget across regions with unified thresholds and alerts.
curl -H "X-API-Key: DEMO_KEY" \ "https://api.useportpulse.com/v1/ports/USLAX/trend?days=30&fields=date,avg_wait_hours,congestion_score"
JSON and CSV return the same definitions. CSV ships strong ETag for conditional GETs (304).

Integration pattern — server fetch
Use conditional requests with ETag to keep pulls fast and cost-efficient.
GET /v1/ports/SGSIN/snapshot If-None-Match: "etag-from-last-call" 200 OK ETag: "abc123" as_of: "2025-09-08T12:00:00Z" ... 304 Not Modified (no body)
Integration pattern — widget config
Cross-port thresholds with a normalized congestion_score make alerts consistent.
{
"ports": ["USLAX","NLRTM","SGSIN"],
"window": "30d",
"fields": ["date","avg_wait_hours","congestion_score"],
"alert": { "threshold": 0.65, "consecutive_days": 5 }
}API endpoints (v1)
- GET /v1/health
- GET /v1/meta/sources
- GET /v1/ports/{code}/overview
- GET /v1/ports/{code}/trend
- GET /v1/ports/{code}/snapshot
- GET /v1/ports/{code}/dwell
- GET /v1/ports/{code}/alerts
- GET /v1/hs/{code}/imports (beta)
Contract-first design: v1 is frozen; breaking changes go to v1beta with a ≥90-day deprecation window.
Comparable by design
Definitions for avg_wait_hours, queue_length, berth_efficiency, and a normalized congestion_score. No more apples-to-oranges across regions.
Transparent SLO
Freshness p95 ≤ 2h, edge p95 < 300ms with ≥60% cache-hit target. Timestamps and ETags exposed for audit.
Partner-friendly
Redistribution terms, staged rollouts, sandbox keys, and assisted QA to speed up your GTM.
Ready to integrate?
Start a 14-day evaluation (up to 5 ports) or talk to us about bundle/redistribution terms.
FAQ
Can we redistribute the data in our product?
Yes. We offer partner licensing for redistribution. Talk to us for bundle pricing and SLO alignment.
How do you measure freshness?
Each response includes as_of / last_updated. Our SLO targets freshness p95 ≤ 2h across ports, with monitoring and alerts.
Do JSON and CSV match exactly?
Yes. CSV is a first-class contract with strong ETag/304 support for cache-friendly pulls.