Skip to main content
This page answers one question: how do I pull global incidents and risk signals into an internal app? World Monitor exposes them through a REST API, an MCP server, official SDKs and signed alert webhooks. Plans are self-serve. You sign up and create a key at worldmonitor.app/pro, with no sales call. There is no single “incident” endpoint today. Incidents come from the feeds below, each with its own record shape and retention. Pick the feed by the job: REST calls go to https://api.worldmonitor.app with an X-WorldMonitor-Key: wm_... header. See Authentication for keys and Rate limits for per-plan quotas.

The record each feed returns

Field names below are the JSON names the routes return. Unrest, news and history records link to the original report when the producer had one; UCDP events name their original source in text.

UCDP event (list-ucdp-events)

Unrest event (list-unrest-events)

A GDELT-derived row is a media signal, not a verified event. The route serves it with confidence: CONFIDENCE_LEVEL_LOW, an unspecified type and severity, and a summary that says the local event is not verified.

News cluster (get_news_clusters, MCP)

A cluster groups headlines from different outlets that report the same story. The REST digest returns the underlying headlines rather than clusters. Each item has title, source, link, publishedAt, threat, location and locationName when a place was extracted, importanceScore, corroborationCount and credibilityScore.

History record (get-intel-timeline, search-intel-history)

History records carry a country but no coordinates.

Filters

The UCDP and unrest list routes return the current snapshot without cursor pagination. The history timeline returns an opaque nextCursor. Pass it as cursor with the same domain, country and time filters to read the next page. Continue until nextCursor is empty, even when records is empty. A bounded country scan can return an empty page before older matches. partial: true means more history may remain. History reads set upstreamUnavailable: true when the store could not be reached. An empty list in that case is a failed read, not a quiet period. Retry the same request after recovery. Invalid cursors return HTTP 400. Restart from the first page if a cursor is rejected. Pages read the current store, so retain fixed time bounds for an export and de-duplicate records by id.

Retention: how far back each feed goes

Checked against the code on October 17, 2026. To keep a longer record, poll the feeds and store the items yourself. De-duplicate history records on id, and unrest and UCDP rows on their producer id. A news cluster id can change when an earlier headline joins the cluster, so do not use it as a durable key.

Webhooks for new items

Alert rules push matching events to a webhook as they happen, or as daily, twice-daily or weekly digests. A rule filters by event type, severity (all, high, critical) and country. Each delivery is signed with HMAC-SHA256 in X-WM-Signature. You set up the webhook and rules in the dashboard’s notification settings, signed in with a paid plan. A real-time delivery carries eventType, severity, timestamp and a payload whose fields depend on the event type. Treat every payload field as optional. News alerts (rss_alert) carry title, source, link, publishedAt, importanceScore and corroborationCount. Conflict alerts (conflict_escalation) carry title and source, plus countryCode when the country resolved, and no link. Payloads carry no stable event id and no coordinates. The notifications reference has the envelope and a verification example.

Code

Python, with the official SDK:
The Go (client.Get, client.CallTool) and Ruby (client.get, client.call_tool) SDKs expose the same calls. From a shell, the npm CLI does the same:

Plans and price

These plans are self-serve with published prices on the pricing page. Checkout runs in the browser; you do not need to talk to sales.

Before you build

  • World Monitor aggregates published reports. It does not verify events on the ground, and a GDELT-derived row is a media signal.
  • Not every upstream source has completed a terms review. Check reuse terms before you redistribute data. The free get_sources MCP tool lists each outlet’s tier and review status.
  • There is no published availability SLA.
  • The timeline pages through the existing 180-day store. Country playback is tracked in issue #4276, and additional event domains in issue #5745. Longer retention needs evidence of buyer demand and storage cost.