Dunvale
Documentation

Build with Dunvale cited logistics data.

REST API, RSS, JSON-LD, source manifests, report feeds, transaction keys, and authenticated machine surfaces. Public discovery is open; metered access centers on scoped evidence requests, map snapshots, source-currentness readbacks, reusable account keys, and a calculator that prices Dunvale against self-parsing cost.

REST APIAgentsRSSJSON-LDx402
API documentation workspace with abstract map, source, and request panels

API integration surface

Contracts, pricing, citations, and source freshness stay discoverable before implementation.

Step 1

Quickstart

The fastest path is the public API and discovery files: no authentication, ideal for evaluating Dunvale source coverage, API-readable metadata, and pricing readiness.

curl https://api.dunvale.com/health
curl https://api.dunvale.com/public/snapshot
curl 'https://api.dunvale.com/public/reports?type=morning_briefing&limit=5'

Border Pulse commercial coverage

Source-policy coverage for border teams

Border Pulse

Coverage options

4

Listed service

1

Custom quote

2

Planned

1

Pricing

Laredo has a listed monthly service. Otay Mesa and Detroit/Windsor are available for custom quotes.

Next step

Use the API for public evaluation or contact Dunvale for account setup.

Commercial controls

Account delivery, access keys, billing, alerts, and automated workflows require approved setup.

Coverage detail

Laredo Border Pulse

commercial ready; listed price; $199/month; 14 facts.

Source-fact-ready detail and disclosed gap context available through the public API.

Otay Mesa / San Diego planned coverage

custom review ready; not yet priced; 16 facts.

Source-fact-ready detail and disclosed gap context available through the public API.

Otay Mesa custom coverage review

custom review available; custom quote; 16 facts.

Source-fact-ready detail and disclosed gap context available through the public API.

Detroit / Windsor custom coverage review

custom review available; custom quote; 21 facts.

Source-fact-ready detail and disclosed gap context available through the public API.

Market context

4 operating context families from 268 reports.

wait-volatility-ops, risk-overlay-weather-aviation, trade-compliance-evidence, data-gap-transparency

wait volatility ops

2 reviewed examples available for commercial scoping.

npm run validate:report-derived-facts

risk overlay weather aviation

2 reviewed examples available for commercial scoping.

npm run validate:report-derived-facts

trade compliance evidence

1 reviewed examples available for commercial scoping.

npm run validate:report-derived-facts

data gap transparency

1 reviewed examples available for commercial scoping.

npm run validate:report-derived-facts

Laredo Border Pulse

API detail available for account and agent workflows.

Otay Mesa / San Diego planned coverage

API detail available for account and agent workflows.

Otay Mesa custom coverage review

API detail available for account and agent workflows.

Detroit / Windsor custom coverage review

API detail available for account and agent workflows.

For programmatic access to published wait rows, source status, evidence retrieval, exports, entitled report surfaces, and private delivery, use a scoped API key. Standard agent evidence and map packets are priced at $0.0059 when metered access is enabled. Check sourceClaimAudit before source-level currentness or quality claims; raw-current, non-live, stale, no-row, planned, future, parser-policy-missing, parser-lagged, degraded-run, and embedding-backlog rows stay context-only unless returned packet evidence proves exact claim use.

curl https://api.dunvale.com/v1/border/laredo_world_trade/current \
  -H "Authorization: Bearer dnv_live_..."
Step 2

Authentication

Authenticated endpoints require a bearer token in the Authorization header. Keys are stored securely, scoped to a tier and account, and rotated by request.

Authorization: Bearer dnv_live_abc123...

Public endpoints under /public/* need no auth and are rate-limited per IP. The /health and /public/about endpoints are intentionally unrestricted so monitoring tools and AI agents can introspect the service freely.

Access control

API key types

Dunvale supports long-lived account keys for customers and partner systems, plus transaction-scoped keys for metered one-off API sessions, exports, and machine settlement flows. Both use the same bearer header, so clients do not need separate integration code.

TypeUseControls
accountCustomer integrations, partner agents, dashboards, TMS toolsTier, daily limit, optional endpoint prefixes, manual rotation
transactionOne x402 settlement, one delegated tool session, one export, or one short-lived agent runExpiry, max uses, endpoint prefixes, billing or x402 reference
operatorApproved Dunvale operations workflowsEnterprise tier, operator owned, revocable
# account key
Authorization: Bearer dnv_live_partner_...

# transaction-scoped key
Authorization: Bearer dnv_txn_one-shot-map_...
ResourceStarting priceUse
Capability probeFreeDiscover modes, corpora, and endpoint shape
Evidence retrieval$0.0059Structured citations and freshness for one scoped question
Map snapshot$0.0059Source-fact-ready waits/alerts plus caveated raw map context for a bbox, zoom, corridor, or global view
Grounded answer$0.0059Evidence retrieval plus model-generated answer
Report/export packet$0.0059Larger report or structured export payload
Step 3

Rate limits

PlanPublic requestsAPI key requestsBurst
Anonymous60 / minute / IPPublic only
Self-serve / Pro key60 / minute / IP600 / minute / keyDaily limit if set on key
Commercial60 / minute / IPNo per-minute limiterContract / key policy
Transaction key60 / minute / IPTier-derivedExpires, max uses, and scoped paths
Enterprise60 / minute / IPNo per-minute limiterNegotiated SLA

Rate limit headers are returned on every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Access model

Free vs metered access

Dunvale separates public discovery from metered operational access. Public pages and free feeds are built for evaluation, search, and AI discovery. Metered access starts with evidence transactions and expands into account scopes, private RSS, authenticated API access, structured data delivery, webhooks, historical licensing, and custom agent access.

TierAccessLimitsReports
FreePublic web, free reports, public RSS, manifest, OpenAPI, search/chat samples, x402 readinessPublic rate limited by IP. No private /v1 API key.Public morning briefing, report snippets, source catalog, discovery files, and limited map.
Agent transactionToken-efficient evidence packets, caveated map snapshots, grounded answers, and exports for autonomous agents$0.0059 per standard metered resource. Use x402, transaction keys, account credits, or trials for settlement.Scoped JSON evidence with citations, freshness, confidence, and settlement metadata.
ProSelf-serve agent keys, transaction access, one operating evidence scope, private RSS, and email alertsPrivate RSS token, Agent Basic key, and 24h Transaction Key access.Account-scoped morning/midday intelligence, one operating scope, macro access where entitled.
CommercialTeam evidence scopes, authenticated REST API, webhooks, structured JSON, and represented regions with source-claim caveatsTiered API key with commercial rate limits and webhook delivery.All Pro access plus sector reports, team feeds, exports, and API snapshots.
EnterpriseCustom corridors, private entities, custom feeds, high-volume API, dedicated agent namespaceNegotiated API volume, SLA, custom data delivery, admin operations access where authorized.Custom regional, sector, commodity, and scope-aware briefings plus historical licensing.
Agent x402Low-friction machine settlement rail for metered evidence resourcesUse bundled USDC x402 or account credits for sub-cent discovery transactions; use account keys, credit packs, or invoices for larger volume.Same evidence resources as transaction keys, metered per resource.
Reference

Public endpoints

Public endpoints power the website and the email/RSS distribution. They're free to call, CORS-enabled for dunvale.com and any subdomain, and require no authentication.

GET/healthService health and source freshness
GET/public/aboutMachine-readable product manifest for API clients
GET/public/briefingsList recent daily briefings
GET/public/briefings/:dateFetch a daily briefing by date
GET/public/briefings/feed.xmlRSS feed for daily briefings
GET/public/snapshotCaveated public snapshot with source-claim guidance
GET/public/reportsList logistics reports (filter by type, scope, date)
GET/public/reports/:type/:dateSingle national-scope report
GET/public/reports/:type/:scope/:dateRegional or per-port scoped report
GET/public/reports/feed.xmlAggregate RSS feed for public report discovery
GET/public/reports/:type/feed.xmlRSS feed per report type
GET/public/feedsJSON catalog of free and token-entitled RSS feeds
GET/public/anomalies/recentRecent wait-spike review events
GET/public/searchFull-text and regex search across reports, raw policy documents, and retired/raw community diagnostics with evidence-policy caveats
GET/public/search/statusSearch index coverage and freshness status
GET/public/border-pulse/packagesBorder Pulse commercial coverage options
GET/public/border-pulse/buyer-packets/laredoLaredo service detail with sample delivery shapes and policy context
GET/public/border-pulse/report-derived-facts/operator-reviewReport context for wait volatility, risk overlays, trade compliance, and data gaps
GET/public/border-pulse/package-intent-preview/schemaBorder Pulse service interest schema
GET/public/border-pulse/packages/:packageIdBorder Pulse detail service setup endpoint
POST/public/border-pulse/packages/:packageId/intent-previewBorder Pulse intent service setup endpoint
GET/public/border-pulse/packages/:packageId/handoff-templateBorder Pulse handoff service setup endpoint
POST/public/border-pulse/packages/:packageId/acceptance-previewBorder Pulse acceptance service setup endpoint
POST/public/border-pulse/packages/:packageId/source-gap-acceptance-previewBorder Pulse source gap service setup endpoint
POST/public/border-pulse/packages/:packageId/quote-previewBorder Pulse quote service setup endpoint
POST/public/border-pulse/packages/:packageId/delivery-previewBorder Pulse delivery service setup endpoint
POST/public/border-pulse/packages/:packageId/entitlement-previewBorder Pulse entitlement service setup endpoint
POST/public/border-pulse/packages/:packageId/activation-previewBorder Pulse activation service setup endpoint
GET/public/border-pulse/packages/:packageId/operator-summaryBorder Pulse operator summary service setup endpoint
GET/public/border-pulse/sample-payloadsReviewed Laredo sample replay plus priority custom-review request shapes
GET/public/border-pulse/source-packs/otayOtay Mesa coverage detail
GET/public/border-pulse/source-packs/detroitDetroit/Windsor coverage detail
GET/public/border-pulse/source-packs/detroit/michigan-road-source-discoveryDetroit/Michigan road-source discovery summary
GET/public/border-pulse/source-packs/detroit/michigan-road-field-profileDetroit/Michigan road field profile
GET/public/border-pulse/source-packs/detroit/michigan-road-parser-probeFixture-only Detroit/Michigan road parser probe
GET/public/border-pulse/source-packs/detroit/michigan-road-source-decisionDetroit/Michigan road-source decision metadata
GET/public/border-pulse/source-packs/detroit/michigan-road-source-registry-previewDetroit/Michigan source-registry metadata
GET/public/border-pulse/source-packs/detroit/michigan-road-registry-mapping-replayDetroit/Michigan registry-mapping replay metadata
GET/public/border-pulse/watch-scope-builder/schemaLaredo watch-scope builder schema
POST/public/border-pulse/watch-scope-builder/previewLaredo watch-scope planning request
POST/public/chatQuestion answering across published reports with cited context
GET/public/chat/statusChat readiness and feature status
POST/public/subscribeSubscribe to email reports
GET/public/billing/configPublished billing configuration and enabled plans
GET/public/billing/x402/statusMachine settlement readiness and x402 availability
GET/public/agents/resourcesAgent resource catalog with prices, freshness, evidence contract, and x402/account-key status
GET/public/agents/demo-keyDisabled-by-default demo agent-key policy with TTL, max-use, allowed prefixes, optional company/userRef hint, and no MAC tracking
POST/public/agents/demo-keyWhen enabled, mint a short-lived transaction key scoped to /v1/agents and /v1/packets
GET/public/calculator/configParser-cost assumptions with calculatorClaimPolicy planning-context caveats
POST/public/calculator/estimateServer-side parser-cost estimate; not source evidence or source freshness proof
POST/public/calculator/leadLead capture with calculatorClaimPolicy; lead status is not source evidence
GET/public/x402/agents/statusDirect USDC x402 readiness for agent evidence requests
POST/public/x402/agents/requestDirect x402 metered evidence retrieval for programmatic clients
POST/public/billing/checkoutCreate account billing sessions where enabled
Reference

REST API (/v1)

The authenticated /v1 namespace is the primary integration surface for autonomous agents, TMS systems, customer portals, alerting pipelines, and private copilots.

GET/v1/border/all/currentLatest published CBP/CBSA crossing rows with source timestamps; not broad claim evidence without packet/source policy
GET/v1/border/:portId/currentLatest published lane-level wait rows for one crossing; not broad claim evidence without packet/source policy
GET/v1/border/:portId/lanesRecent lane-level observations for one crossing
GET/v1/border/:portId/weatherCurrent weather and next 24 hourly forecast rows for one crossing; forecast rows must stay labeled and claim use needs source policy
GET/v1/border/:portId/alertsActive weather alerts affecting one crossing; claim use needs alert validity windows and source policy
GET/v1/trade/policy/recentRecent raw-current trade policy documents; not normalized policy source facts
GET/v1/trade/policy/searchFull-text search across the raw-current trade policy document archive
GET/v1/community/reportsRetired/raw-stale community diagnostics filtered by port and confidence; not live evidence
GET/v1/community/sentimentRetired/raw-stale community sentiment diagnostics for a crossing; not live evidence
GET/v1/portsBorder port reference metadata and coordinates
GET/v1/ports/:portIdSingle port metadata, optionally with inline geometry
GET/v1/ports/:portId/geometryGeoJSON geometry for plazas, lanes, booths, and paths
GET/v1/ports/withinViewport query for ports inside a bounding box
GET/v1/ports/locateNearest-port lookup from latitude and longitude
GET/v1/sourcesSource health with sourceClaimAudit, claimBearing, claimGuidance, claimWarnings, sourceFactHealth, parser claim-policy coverage, future-row counts, embedding backlog guidance, and row-level warnings for context-only/drift rows

Example response:

{
  "portId": "laredo_world_trade",
  "updatedAt": "2026-04-12T10:15:40Z",
  "lanes": [
    {
      "laneType": "commercial_fast",
      "waitMinutes": 25,
      "lanesOpen": 6,
      "capturedAt": "2026-04-12T10:15:00Z",
      "source": "cbp_bwt"
    },
    {
      "laneType": "commercial_standard",
      "waitMinutes": 90,
      "lanesOpen": 4,
      "capturedAt": "2026-04-12T10:15:00Z",
      "source": "cbp_bwt"
    }
  ]
}
Reference

Map API (/v1/map)

The /v1/map namespace powers the interactive /map surface for agent snapshots and account-scoped exceptions. It combines source-fact-ready border waits, road events, NWS alerts, and weather context with raw-current aircraft, river-gauge, and vessel map context, plus NEXRAD radar, cloud formations, rail, sea chart overlays, and GPS interference on one WebGL canvas. Every signal is addressable via these three endpoints so agents and dashboards can consume the same state the frontend renders without treating raw map rows as claim-bearing evidence.

GET/v1/map/snapshotOne payload for the /map view. Dense vessel and road-event layers support bbox=minLon,minLat,maxLon,maxLat plus zoom query params for viewport filtering and clustering.
GET/v1/map/port/:portId/detailPort drilldown: 24h wait sparkline, latest wait-spike row per lane, outlook preview rows, active weather alerts
POST/v1/map/askOperator-context answer over bounded map summary; success and errors return map-ask claim policy, and raw-current/stale/no-row/planned map rows stay context unless source_ref, sourceClaimAudit, and /v1/sources policy allow broader claims

Snapshot example:

curl https://api.dunvale.com/v1/map/snapshot \
  -H "Authorization: Bearer YOUR_API_KEY" | jq '{
  generatedAt,
  viewport,
  ports:    (.ports | length),
  aircraft: (.aircraft | length),
  vessels:  .stats.vesselCount,
  vesselClusters: (.vesselClusters | length),
  roadEvents: .stats.trafficEventCount,
  roadClusters: (.trafficEventClusters | length),
  alerts:   (.alerts | length),
  gauges:   (.gauges | length)
}'
# =>
# {
#   "generatedAt": "2026-04-13T18:42:00Z",
#   "viewport": { "bbox": null, "zoom": null, "denseLayerMode": "clustered" },
#   "ports":    82,
#   "aircraft": 312,
#   "vessels":  2070,
#   "vesselClusters": 118,
#   "roadEvents": 1629,
#   "roadClusters": 94,
#   "alerts":   17,
#   "gauges":   15
# }

Viewport-filtered dense layer example:

curl "https://api.dunvale.com/v1/map/snapshot?bbox=-123,37,-121,39&zoom=9" \
  -H "Authorization: Bearer YOUR_API_KEY" | jq '{
  mode: .viewport.denseLayerMode,
  vessels: (.vessels | length),
  roadEvents: (.trafficEvents | length)
}'

Port drilldown example:

curl https://api.dunvale.com/v1/map/port/laredo_world_trade/detail \
  -H "Authorization: Bearer YOUR_API_KEY"
# =>
# {
#   "portId": "laredo_world_trade",
#   "sparkline":   [ { "hour": "...", "avgWait": 42, "sampleCount": 8 }, ... ],
#   "anomalies":   [ { "laneType": "commercial", "severity": "elevated", "zscore": 2.1, ... } ],
#   "predictions": [ { "horizonHours": 2, "predictedWait": 55, "confidenceLow": 40, "confidenceHigh": 70, ... } ],
#   "alerts":      [ { "alertId": "...", "event": "Wind Advisory", "severity": "Moderate", ... } ]
# }

Ask the AI assistant:

curl -X POST https://api.dunvale.com/v1/map/ask \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Which crossings have the worst waits right now, and is weather a factor?",
    "context": { "counts": { "ports": 82, "alerts": 17 }, "topEvents": [...] }
  }'
# => { "answer": "Three southwest crossings are currently elevated..." }
Distribution

RSS feeds

Dunvale publishes an aggregate reports feed, a daily briefings feed, and one RSS feed per report type. Free reports stay public; entitled subscribers can use feed tokens to unlock report types and scopes.

https://api.dunvale.com/public/reports/feed.xml
https://api.dunvale.com/public/briefings/feed.xml
https://api.dunvale.com/public/feeds
https://api.dunvale.com/public/reports/morning_briefing/feed.xml
https://api.dunvale.com/public/reports/macro_weekly/feed.xml
https://api.dunvale.com/public/reports/sector_report/feed.xml
https://api.dunvale.com/public/reports/regional/feed.xml

# entitled subscriber example
https://api.dunvale.com/public/reports/feed.xml?token=dnv_feed_...
Discoverability

JSON-LD structured data

Every report page on dunvale.com embeds schema.org/Article JSON-LD with linked Dataset and DataFeed nodes. Search engines and AI crawlers can map a Dunvale report to its underlying data lineage without scraping. The /public/about endpoint exposes the same product manifest in machine-readable form.

AI Agents

Agent access

Dunvale exposes tool-shaped REST resources, manifests, OpenAPI, RSS, JSON-LD, account-generated keys, demo-key policy discovery, and transaction-key flows for agent workflows today. x402 should become the low-friction settlement rail for standard $0.0059 metered resources. Models should query cited reports, published border wait context, and source status rather than scrape UI text. See the agents page for the full integration story.

Reference

Errors

StatusMeaning
200Success
400Bad request — invalid parameter format
401Missing, invalid, inactive, or expired API key
402Metered access challenge for an evidence resource; response includes settlement metadata and retry instructions when enabled
403API key valid but tier or endpoint scope insufficient for this resource
404Resource not found (e.g., unknown port_id)
429Rate limit, daily limit, or transaction max-use limit exceeded
500Server error — retry with exponential backoff
503Upstream data source degraded — see /health

Need agent access?

Create a local account for Agent Basic and 24h Transaction keys, or use Commercial/Enterprise for higher-volume packages.