Skip to main content
This page covers the conventions shared across every v2 endpoint. For the controlled vocabularies you pass as parameters, see Taxonomy & Codes; for copy-paste recipes, see the Cookbook.

Authentication

Every /api/v2/* request authenticates with a Bearer API key:
Manage keys in the GDELT Cloud dashboard under Settings → API Keys. See Authentication for session vs. key auth and plan access.

Result coverage

Event, Story, and Entity list endpoints default to the exact past 24 hours while preserving broad discovery coverage, so you can find useful records before narrowing with structured filters. Confidence tuning is handled internally. Detail endpoints remain exhaustive by ID: GET /api/v2/events/{event_id} and GET /api/v2/stories/{story_id} resolve known records directly. Explicit date_start/date_end windows filter by event/story date and may not exceed 30 days.

Geography

Use plain-English country names in calls; ISO-3 and legacy FIPS aliases are accepted, but responses normalize country output to the plain-English name.
region and continent expand to ISO-3 country lists on the backend. Event queries match those countries against Event location plus actor-origin countries; Story queries use the same expansion through linked-Event location only. admin1 is optional and filters only the event/story location. The geo object is the primary event/story location. For Events, when a broad geo filter matches actor-origin geography instead, geo_context.actor_origin_countries shows why the record matched. For Stories, geo_context.actor_origin_countries is returned for context but does not drive the geo filter. See Taxonomy & Codes → Geography for the full continent and region enums.

Bounding box

Use bbox for sub-country filters such as straits, ports, basins, border zones, or any custom viewport. It is a comma-separated string in latitude-first order:
lat must be in [-90, 90] and lon in [-180, 180]. The filter applies to the Event’s primary geo.latitude/geo.longitude (and to linked-Event locations for Stories). Records without geocoded coordinates are excluded from bbox queries. bbox is supported on /api/v2/events, /api/v2/events/summary, /api/v2/stories, and /api/v2/stories/summary. /api/v2/energy/assets accepts the same lat-first bbox plus a separate near=lat,lon,radius_km proximity filter.
The preview Maritime endpoints use a longitude-first bbox (minLon,minLat,maxLon,maxLat) — the opposite axis order from Events/Stories/Energy. Watch the order when crossing surfaces.

Response objects

List endpoints return a success envelope with data and pagination; detail endpoints return a single data object; summary endpoints return group_by and grouped data buckets.

Event card

Returned by GET /api/v2/events and GET /api/v2/events/{event_id}.

Story card

Returned by GET /api/v2/stories and GET /api/v2/stories/{story_id}.

Summary buckets

The Event summary bucket and Story summary bucket are returned by GET /api/v2/events/summary and GET /api/v2/stories/summary. Buckets carry simple counts plus nested aggregate statistics (metrics / metric_stats) for the inputs behind significance: Goldstein scale/severity, CAMEO+ magnitude/systemic/propagation/market, confidence, article evidence, and fatality counts/rates.
Story summary buckets use the same envelope and add story_count, stories_with_events, story_only_count, linked-event counts, avg_recency_score, and nested metrics.linked_events. linked_event_count is the number of Story-to-Event links, not a second Event total — use event_count from Event summaries for distinct Events. Summary endpoints do not accept search.

Articles, entities, admin1, and errors

Story article rows include source domain, domain_avatar_url, image_url (when available), rank, and role. Entity cards are canonical, deduplicated by Wikipedia URL — multiple raw-name variants (“Trump” + “Donald Trump”) collapse to one card; only People and Organizations with linked Wikipedia pages are surfaced. The id is a universal canonical id — an e_… id when the entity exists in the cross-source reference spine (the same id GET /api/v2/search returns), otherwise a wiki:… id for the news-only tail. Either form round-trips on every entity-taking endpoint (/events?entity=, /entity-tone, /share-of-voice, /gov/awards?entity=, entity detail), so you can chain calls without remapping. The Wikipedia URL is still returned as the wikipedia_url field.
Raw per-article mention counts and entity salience scores are not part of the v2 entity contract. GDELT Cloud surfaces aggregated Story, Article, and Event counts as the canonical activity signals.
GET /api/v2/geo/admin1 returns a per-country list:
Standard error responses carry error, a stable code, and details with accepted_values, nearest_values when practical, and a corrected example so agents can retry without guessing:
subcategory requires its parent category; for CAMEO+ categories, prefer stable event codes such as TE01 over label text. The legacy event_family and domain parameters are still accepted but deprecated — category implies Conflict vs. CAMEO+.

Entity aliases and resolution

GDELT Cloud resolves observed names — reordered names, initials, acronyms, common abbreviations — to a single canonical entity through a proprietary resolution layer. Wikipedia-linked entities carry stable canonical identifiers. Newly observed candidates enter the registry as needs_review and are promoted to active once they meet confidence criteria, so workflows can distinguish “known entity with no score yet” from “entity not found.”

Finding an entity when you don’t know the exact name

This is the fuzzy “find the entity” step — start here whenever you have a (possibly misspelled or abbreviated) name rather than an id. scope chooses which registries to search:
  • scope=media (default) — news-resolved entities only (people & organizations seen in coverage).
  • scope=reference — the structured registry only (GEM energy owners, SEC/EDGAR filers, restricted-party list entries, China financiers).
  • scope=all — everything: news + GEM + SEC/EDGAR + lists + China, deduplicated and ranked.
It returns ranked candidates (entity_id, display name, type, country, match reason, score). Resolve once, then fan out across the event, energy, screening, and filings surfaces using the shared entity_id. The matching index covers the full registry even for entities with no Wikipedia page yet.

Ranking

The default sort is sort=significance. Event significance is a family-scoped weighted blend, renormalized so every event family spans a true 0–1: each event’s raw total is divided by the maximum its own family can reach (Conflict 1.00, CAMEO+ POLITICAL 0.90, other CAMEO+ domains 0.65). When magnitude is unmeasured, both its term and its 0.20 weight are dropped for that event. The four CAMEO+ inputs are rubric scores produced by fixed published formulas — ordinal ranking signals, not measurements, probabilities, or predicted price moves (see Event metric filters). goldstein_scale is the signed −10…+10 scale; goldstein_severity is abs(goldstein_scale) and exists as an aggregate/statistical helper for significance inputs. Story significance combines linked-Event significance, capped article count, and recency. Use sort=recent when freshness matters more than significance. goldstein_scale is exposed as one canonical public Event metric — present for all Conflict Events and CAMEO+ POLITICAL Events, null for non-political CAMEO+ domains where it is not meaningful.