- Generated structured Events:
conflictandcameoplus. - Generated clustered Stories.
- Generated metrics for Events and Stories.
- Entity discovery and entity-to-Story/Event linking.
- Global Energy Monitor energy asset search, summaries, maps, and detail records.
scope, detail, geo_scope, event_readiness, cluster_certainty, language, quad_class, or raw total_events.
Authentication
Use the same API key format as v1:Geography
Use plain English country names in docs and examples: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 country-list 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, use geo_context.actor_origin_countries to see why the record matched. For Stories, geo_context.actor_origin_countries is returned for context but does not drive the Story geo filter.
Bounding box
Usebbox for sub-country geographic filters such as straits, ports, basins, border zones, or any custom viewport. The parameter is a comma-separated string in latitude-first order:
lat must be in [-90, 90] and lon in [-180, 180]. The filter is applied to the Event’s primary geo.latitude / geo.longitude (and to the location of linked Events 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. The energy endpoint /api/v2/energy/assets accepts the same lat_min,lon_min,lat_max,lon_max bbox form on asset coordinates, plus a separate near=lat,lon,radius_km proximity filter.
Use bbox when a country filter is too coarse — for example, the Bab-el-Mandeb strait spans Djibouti, Eritrea, and Yemen, but the operational area is a tight rectangle:
bbox can be combined with country, region, continent, admin1, category, subcategory, has_fatalities, civilian_targeting, search, and sort. The deprecated event_family and domain parameters are still accepted for compatibility. When combined with a country filter, records must match both. A pure-bbox query (no country) is typically faster than country-only because the ClickHouse storage layout prunes by coordinate range before applying other predicates.
Discover valid admin1 values one country at a time:
Response Objects
List endpoints return a success envelope withdata and pagination; detail endpoints return a single data object; summary endpoints return group_by and grouped data buckets. Energy map endpoints return a map mode plus map-ready aggregate or fine-grained rows.
Result Coverage
Event, Story, and Entity list endpoints default to the exact past 24 hours while preserving broad discovery coverage so developers and agents can discover useful records before narrowing with structured filters. Confidence tuning is handled internally by the API. Detail endpoints remain exhaustive by ID:GET /api/v2/events/{event_id} and GET /api/v2/stories/{story_id} resolve known records directly.
Event card
Returned byGET /api/v2/events and GET /api/v2/events/{event_id}.
| Field | Description |
|---|---|
id | Stable v2 Event identifier. |
url, primary_story_url | Public GDELT Cloud Story URL for citation when the Event has a linked Story. |
family | conflict or cameoplus. |
title, summary | Generated Event headline and concise summary. |
event_date | Event date in YYYY-MM-DD. |
category, subcategory | Product taxonomy fields. Conflict Events use event types such as Battles, Protests, or Riots as category, then sub-event types such as Armed clash or Peaceful protest as subcategory; CAMEO+ Events use domains as category and stable event codes such as TE01 or IN03 as subcategory. Responses display canonical codebook labels such as TE01 · AI Capability Event. |
domain | CAMEO+ domain, or CONFLICT for conflict Events. |
event_code | Source event id, CAMEO+ event code, or null. |
geo | Primary Event location. |
geo_context | Explains broad geography matches, especially actor-origin matches. |
actors | Event actors with name, normalized country, and role. |
metrics | Event significance and generated metric inputs. |
has_fatalities, fatalities | Fatality flag and count. |
civilian_targeting, civilian_targeting_label | Conflict-only ACLED civilian-targeting flag and label. true means civilians were coded as the primary target. |
story_refs | Linked Story references with public URLs. |
entity_refs | Linked Entities with names, types, and Wikipedia URLs when available. |
top_articles | Top 3 inline source articles. Use the Story articles endpoint for full article lists. |
Story card
Returned byGET /api/v2/stories and GET /api/v2/stories/{story_id}.
| Field | Description |
|---|---|
id | Stable v2 Story cluster identifier. |
url | Public GDELT Cloud Story URL for citation. |
title, story_date | Cluster headline and cluster date. |
category, subcategory | Story category and linked-Event subcategory context when available. |
geo | Primary geography inferred through linked Events. |
geo_context | Location country plus actor-origin countries from linked Events. |
metrics | Story significance, article volume, linked Event count, and max linked Event significance. |
has_events, linked_events | Whether structured Events link to the Story, plus up to 10 linked Event refs. |
has_fatalities, fatalities | Whether linked Events include fatalities, plus total linked fatalities. |
entity_refs | Linked Entities with names, types, and Wikipedia URLs when available. |
top_articles | Top 3 inline source articles for evidence preview. |
Event summary bucket and Story summary bucket
Returned byGET /api/v2/events/summary and GET /api/v2/stories/summary.
| Field | Description |
|---|---|
key | Bucket value for the selected group_by. Country keys are normalized to plain English names. |
group_by | Concrete grouping label returned by the API. |
event_count, story_count | Number of Events or Stories in the bucket. |
conflict_event_count, cameoplus_event_count | Event-family counts for Event summaries. |
article_count, avg_article_count, min_article_count, max_article_count | Total, average, min, and max article evidence volume. |
fatality_event_count, stories_with_fatalities, fatalities, fatality_event_rate, fatality_story_rate | Fatality coverage fields. |
country_count, region_count | Distinct geography counts represented in the bucket. |
avg_*, max_*, min_* | Flat aggregate fields retained for simple clients. |
metrics | Nested aggregate statistics for significance and its input metrics. |
metric_stats | Alias of metrics for clients that prefer explicit statistical naming. |
story_count, stories_with_events, story_only_count, linked_event_count, min_linked_event_count, avg_linked_event_count, max_linked_event_count, avg_recency_score, and nested metrics.linked_events for linked Event significance, Goldstein, CAMEO+, confidence, and market-sensitivity aggregates. linked_event_count is the number of Story-to-Event links in the Story bucket, not a second Event total; use event_count from Event summaries for distinct Events.
Articles, Entities, Admin1, And Errors
Story article responses: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. Internally we still use mention counts for ranking, but they are not shipped.
GET /api/v2/geo/admin1 returns:
accepted_values, nearest_values when practical, and a corrected example so agents can retry the next call without guessing. subcategory requires its parent category; for CAMEO+ categories, prefer stable event codes such as TE01 over label text. event_family is deprecated because category implies Conflict vs CAMEO+.
Events
List Events
date_start,date_end:YYYY-MM-DDcountry,region,continent,admin1bbox:lat_min,lon_min,lat_max,lon_max— sub-country viewport filter on Eventgeo.latitude/geo.longitude. See the Bounding box section.category,subcategory;categoryaccepts a single value or comma-separated values such asProtests,TECHNOLOGY.subcategoryrequirescategoryand must belong to at least one selected category. Use ACLED sub-event labels for Conflict categories and stable CAMEO+ event codes such asTE01for CAMEO+ categories.event_family: deprecated legacy filter (conflictorcameoplus). Prefercategory, which implies the family.domain: deprecated legacy CAMEO+ filter. Prefercategory.has_fatalities:trueorfalsecivilian_targeting:trueorfalsefor Conflict Events where civilians are the primary target- Metric filters: append
_minor_maxtosignificance,confidence,goldstein_scale,goldstein_severity,magnitude,systemic_importance,propagation_potential, ormarket_sensitivity search: free textsort:significanceorrecentinclude_images:truedefault, orfalseto skip article sharing-image and Entity-thumbnail enrichmentlimit,cursor
id, url, primary_story_url, family, title, summary, image_url, event_date, category fields, normalized geo with admin1, geo_context, actors, metrics, fatality fields, civilian-targeting fields, linked Stories, linked Entities, and top_articles.
Events default to the past 24 hours. Start with date/geography/category filters, then narrow with subcategory, has_fatalities, civilian_targeting, semantic search, or sort=recent as needed. Explicit date_start/date_end windows filter by event date and may not exceed 30 days.
Metric filters use canonical response-field names. significance and confidence apply across Event families; magnitude, systemic_importance, propagation_potential, and market_sensitivity only match CAMEO+ Events with those scores; goldstein_scale and goldstein_severity match Conflict Events and CAMEO+ POLITICAL Events where Goldstein is meaningful. goldstein_severity is absolute intensity, not signed valence.
Country, region, and continent filters match Events by either event location country or actor-origin country. Use geo.location_country and geo_context.actor_origin_countries to label results as location matches, actor matches, or both in dashboards.
Use url or primary_story_url as the public GDELT Cloud citation when present. story_refs[].url points to the linked public Story page.
top_articles is always limited to the top 3 inline articles. Inline article records include domain, domain_avatar_url, and image_url when the GDELT GKG sharing-image layer has a current article image. Linked Entity refs include Wikipedia thumbnail-derived image_url / avatar_url when available.
Fetch Event
Event Summary
group_by=date|country|region|continent|category|subcategory. Summary buckets include the simple counts plus aggregate metric statistics for the generated inputs behind Event significance: Goldstein scale/severity, CAMEO+ magnitude, systemic importance, propagation potential, market sensitivity, confidence, article evidence, and fatality counts/rates. group_by=subcategory returns observed category-scoped buckets and counts: for example, category=Battles&group_by=subcategory returns ACLED sub-event buckets such as Government regains territory, which can then be passed to /api/v2/events?category=Battles&subcategory=Government%20regains%20territory to fetch instances. Use group_by=date for time-series charts; each bucket is one chronological observation, and clients should plot enough recent history to make the current day legible rather than fabricating two-point sparklines.
Event summaries use the same broad result coverage as Event lists. Summary endpoints do not accept search. Use the list endpoint for semantic retrieval, then call the summary endpoint with structured filters.
Event summary accepts the same metric _min / _max filters as Event list, and applies them before aggregation.
Example:
Stories
List Stories
date_start,date_endcountry,region,continent,admin1bbox:lat_min,lon_min,lat_max,lon_max— sub-country viewport filter applied through linked-Event location. See the Bounding box section.category,subcategory;subcategoryrequirescategoryand must belong to at least one selected linked-Event category.domainandevent_categoryremain accepted as deprecated aliases for older linked-Event filters.has_events—truenarrows to Stories with at least one linked Event.false(default) returns all Stories.has_fatalitiesnarrows to Stories with linked fatal Events.civilian_targetingnarrows by linked Conflict Events where civilians are the primary target.article_count_min,article_count_maxsearchsort:significanceorrecentinclude_images:truedefault, orfalseto skip article sharing-image and Entity-thumbnail enrichmentlimit,cursor
id, url, title, image_url, story_date, category fields, normalized geo with admin1, geo_context, metrics, linked Event refs, Entity refs, fatality flags, and top_articles.
Stories default to the exact past 24 hours by cluster update time while preserving broad discovery coverage across narrative clusters, with duplicate-family handling applied where needed before pagination or aggregation. Explicit date windows may not exceed 30 days.
Use category when you want Stories whose linked Events match a Conflict event type such as Battles or Protests, or a CAMEO+ domain such as POLITICAL or CRIME; pair category=Protests with subcategories such as Peaceful protest. story_category remains available for legacy Story cluster categories such as conflict_security. event_category is a deprecated alias for Story linked-Event filters.
Use url as the public GDELT Cloud citation for the cluster. Use top_articles as direct source evidence. Article records include domain, domain_avatar_url, and image_url when available; Story and Event cards promote the first available article image to card-level image_url. Entity refs include Wikipedia thumbnail-derived image_url / avatar_url when available.
Fetch Story
Fetch Story Articles
domain, domain_avatar_url, and image_url when available.
Story Summary
group_by=date|country|region|continent|category|subcategory. Summary buckets include Story counts plus aggregate statistics for Story significance inputs: article volume, linked Event counts and metrics, linked Event Goldstein/CAMEO+ aggregates, recency, and fatalities. Story summaries use the same broad coverage behavior and duplicate-family handling as Story lists. Use category/subcategory to summarize Stories through linked Event taxonomy, and story_category only for legacy Story cluster categories. When group_by=category or group_by=subcategory, Story summary buckets are based on linked Event taxonomy and therefore count event-linked coverage; narrative-only Stories remain included in date/geography summaries when no linked-Event filter requires otherwise. Use group_by=date for coverage-trend plots and for Brief signal benchmark history.
Summary endpoints do not accept search. Use the list endpoint for semantic retrieval, then call the summary endpoint with structured filters.
Entities
url values when a GDELT Cloud entity page can be constructed, plus linked Story/Event refs. Entity search covers people and organizations, defaults to the exact past 24 hours by linked evidence time, and accepts the same 30-day maximum date window. When a Wikipedia match has a thumbnail, responses include image_url, avatar_url, and a compact wikipedia object so clients and Briefs can render recognizable people and organizations without reimplementing Entity-page enrichment.
Entity endpoints accept include_images=false to skip Wikipedia thumbnail enrichment.
Entity list filters include search, type=person|organization, category, subcategory, has_fatalities, civilian_targeting, sort, limit, and cursor. Entity taxonomy filters operate on linked Story/Event evidence. subcategory requires category; event_family and domain remain accepted as deprecated compatibility filters, but new integrations should use category.
Briefs
A Monitoring Brief is a short, source-backed intelligence memo answering four questions — What changed? Why does it matter? What evidence supports it? What should I watch next? — quantified against a baseline window and grounded in clickable GDELT Cloud Events, Stories, and Entities.Briefs is a plan-gated add-on. These endpoints require a plan with Briefs access (
can_use_briefs). Requests on a plan without it return 403 with {"code": "BRIEF_ACCESS_DENIED"}. Each plan includes a fixed number of Brief runs per billing period; once exhausted, requests return 403 with {"code": "BRIEF_LIMIT_REACHED"} until you add more. See your plan on the pricing page. Brief runs are metered separately and do not consume your plan’s query-unit (QU) quota.Create Brief
202 Accepted — a Brief takes ~5–10 minutes to generate, so poll GET /api/v2/briefs/{id} for status and content. The request body is JSON:
scope_text(required): one or two plain sentences describing what to monitor — the situation, where it is, who/what is affected, and the decision it informs (8–2400 chars).time_window: recent window the Brief analyses — one of6h,24h,72h,7d,30d. Default24h.baseline_window: earlier comparison window for change detection — one of7d,14d,30d. Default chosen fromtime_window.audience: framing and length —executive(default),analyst, oroperator.depth: density —skim,standard(default), ordetailed.countries: optional ISO-3 country codes to scope the Brief, e.g.["YEM","SAU"].regions,locations: optional plain-English geographies.- Sharpen retrieval (all optional — they narrow and focus what the agent gathers):
search_topics— free-text focus terms or phrases (e.g.["port congestion","tanker insurance"]);actorsandentities— named actors, people, or organizations to emphasize (e.g.["Houthi","Maersk"]);sectors— business or mission sectors (e.g.["shipping","energy"]);assets— named facilities or infrastructure. public_link: whentrue, also mint a public, shareable report URL (defaultfalse/ private).title: optional; auto-generated fromscope_textwhen omitted.brief_type: optional; defaults tomonitoring_brief, the only generally-available Brief type.
202 with id, status (queued), brief_type, title, created_at, web_url, public_url (when public_link=true), and a message.
List Briefs
{ "briefs": [...] } — each entry has id, title, brief_type, status, created_at, updated_at, error_message, public_url, and web_url. Still-running Briefs are reconciled before the list is returned so statuses are current.
Fetch Brief
status, the original input, the structured document (the Monitoring Brief content schema — bottom line, what-changed, key developments, evidence, watch items, negative findings, confidence), citations, the evidence appendix (the full tool-call ledger), and report URLs. A still-running Brief is reconciled first so the status and content are current.
Status values: queued → generating → building → ready, or failed (with error_message).
Ranking
The default sort issort=significance.
Event significance combines Goldstein severity where meaningful, CAMEO+ magnitude/systemic/propagation/market metrics where present, fatality presence for Conflict Events, article evidence volume, and confidence.
The Event significance formula is:
Goldstein severity 25% + CAMEO+ magnitude 20% + systemic importance 15% + propagation potential 10% + market sensitivity 10% + fatalities 10% + article evidence 5% + confidence 5%.
goldstein_scale is the signed -10 to +10 scale. goldstein_severity is abs(goldstein_scale) and exists only as an aggregate/statistical helper for significance inputs.
Story significance combines linked Event significance, capped article count, and recency. Use sort=recent when freshness is more important than significance.
goldstein_scale is public:
- Present for all Conflict Events.
- Present for CAMEO+
POLITICALEvents. - Null for non-political CAMEO+ domains where the metric is not meaningful.
- Exposed as one canonical public Event metric. Family-specific physical source columns remain internal implementation details.
Recommended Usage Cookbook
Use Events when you need structured incidents, actors, event category/subcategory, fatalities, Goldstein scale, or event-level metrics. Use Stories when you need a clustered narrative with top article evidence. Use summaries for dashboard totals and trend charts, then drill down into Events or Stories with the same filters. Prefer these defaults:- Use
limit=10for exploratory/API Playground requests, then raise it when you need more rows. - Use
sort=significancefor monitoring and dashboards. - Use
sort=recentwhen freshness matters more than importance. - Use plain English geography in docs and apps, for example
country=United States. - When writing code, pass query parameters through your HTTP client’s
paramsoption orURLSearchParamsinstead of hand-building URLs. Spaces do not need manual%20handling in code: clients encodeUnited Statescorrectly, and the API decodes both%20and+in query strings. - Omit dates for the past 24 hours. When you pass
date_startanddate_endexplicitly, they filter by event or story date and the window must be 30 days or less. - Start broad, then narrow with geography, category, subcategory, date windows, and semantic
search. - Use
searchfor true semantic retrieval on list endpoints only: v2 embeds the query text, applies the structured filters as the candidate set, and ranks records by cosine similarity against stored Event or Story embeddings. Summary endpoints do not acceptsearch. - Use
admin1only after discovering valid values through/api/v2/geo/admin1?country=.... - Treat inline
top_articlesas evidence preview only; use/api/v2/stories/{story_id}/articlesfor the full paginated source list.
Country, Region, Or Continent Monitoring
Infrastructure Events
Use CAMEO+category=INFRASTRUCTURE as the canonical pattern:
Semantic Event Search
Protests Today Or Recently
For a current list:New Data Center Projects In Asia
Use Stories first because this is a narrative discovery task. Keeparticle_count_min=1 for emerging project discovery; raise it only when you want more source volume.
Fatal Conflict Monitoring
Admin1 Drilldown
Bounding Box Drilldown
Whencountry or admin1 is too coarse — straits, ports, basins, border zones, custom viewports — filter directly on Event coordinates with bbox=lat_min,lon_min,lat_max,lon_max:
country when you want events in a specific area of a specific country:

