Skip to main content
GET
Summarize Stories

Authorizations

Authorization
string
header
required

GDELT Cloud API key. Send as Authorization: Bearer gdelt_sk_....

Query Parameters

date_start
string<date>

EVENT TIME — inclusive start of the window by when it HAPPENED (YYYY-MM-DD). Windows are capped at 30 inclusive days. Use consecutive date chunks; calendar months can exceed the cap. Follow the endpoint's pagination guidance within each chunk. Also accepts: start_date. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

date_end
string<date>

EVENT TIME — inclusive end of the window by when it HAPPENED (YYYY-MM-DD). Also accepts: end_date. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

days
string

Calendar-date window ending today, in days (max 30). window=7d and days=7 are equivalent. When omitted, a request without entity filters uses the last 24 hours; entity filters use 30 days. Read meta.query_window for the actual bounds. There is no equivalent numeric default: sending days explicitly selects calendar dates and removes the implicit observed-time bound. Pass days explicitly, or date_start/date_end, whenever the window matters. Also accepts: window. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

limit
integer
default:50

Maximum number of BUCKETS returned (not rows). Default 50, max 500. There is no cursor on this endpoint, so a result at the limit may be truncated — widen the limit or narrow the window. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

Required range: 1 <= x <= 500
group_by
enum<string>
default:date

The dimension to aggregate over. Country buckets overlap when country_attribution=all; use group_by=date for distinct totals. Full value list: https://docs.gdeltcloud.com/reference/enums#story_group_by

Available options:
date,
country,
region,
continent,
category,
subcategory
country_attribution
enum<string>
default:primary

For group_by=country: primary preserves one primary country per Story; all counts each Story under every authoritative country attribution or linked Event location/actor origin, using the same country_match and other filters as the Stories list. Explicit geographic filters also restrict the emitted country buckets. Buckets overlap and must not be summed as a global total. Other groupings ignore this option. Full value list: https://docs.gdeltcloud.com/reference/enums#story_country_attribution

Available options:
primary,
all
country
string

Country filter. Accepts ISO-3, ISO-2, FIPS or an English name; comma-separate for OR. Matches the event's own location OR either actor's origin country by default, so a result can include events that happened elsewhere — set country_match to narrow it to location only. The definition in force is echoed as applied_filters.country_match. A Story also matches on its OWN attributed country, so Stories with no coded Event are reachable — over 2026-08-14..16 that took the reachable set from 5,386 to 24,207 of 25,463 Stories. Combining country with an Event-scoped filter (event_category, subcategory, admin1, bbox, domain, civilian_targeting) keeps the Event-only definition, because those ask about the Story's Events. Attribution begins 2026-07; earlier windows are Event-derived only. Also accepts: country_iso3. Matched case-insensitively. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Reference: https://docs.gdeltcloud.com/reference/enums#country

region
enum<string>

Geographic region expanded to its member ISO-3 countries; applied through the same country matching rules. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Full value list: https://docs.gdeltcloud.com/reference/enums#region

Available options:
Middle East,
Northern Africa,
Western Africa,
Eastern Africa,
Middle Africa,
Southern Africa,
Eastern Europe,
South Asia,
Southeast Asia,
East Asia,
Central Asia,
Northern America,
Central America,
Caribbean
continent
enum<string>

Continent expanded to its member ISO-3 countries; applied through the same country matching rules. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Full value list: https://docs.gdeltcloud.com/reference/enums#continent

Available options:
Africa,
Asia,
Europe,
North America,
South America,
Oceania
admin1
string

State or province (admin1), not a city. Discover valid values with GET /api/v2/geo/admin1?country=. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Reference: https://docs.gdeltcloud.com/reference/enums#admin1

entity
string

Restrict to an entity's resolved coverage. Accepts a spine id (e_…), a news id (wiki:…) or a name, resolved through the shared arbiter so the same handle means the same entity on every endpoint. Accepts up to 25 comma-separated handles, which are UNIONED: a row is returned if ANY handle matches, never only the rows matching all of them. Every handle resolves through that same arbiter, so a handle means the same entity alone or in a list. A handle that resolves to nothing contributes nothing — it never widens the result — and is named in applied_filters.entity_handles_unresolved. More than 25 handles is refused with 400 MULTIPLE_ENTITY_HANDLES rather than truncated. Also accepts: entity_id, entities. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Full value list: https://docs.gdeltcloud.com/reference/enums#entity_handle

category
enum<string>[]

Event category — an ACLED event type or a CAMEO+ domain. Comma-separate for OR. Validated together with subcategory: an impossible pair returns 400, never an empty 200. On Stories this filters the LINKED EVENTS. Passing a Story cluster label here (for example cameoplus_political) is a legacy alias for story_category and is applied as one — a materially different filter, so prefer story_category for a Story label and keep category for linked-event taxonomy. applied_filters reports which one received it. Also accepts: categories. Matched case-insensitively. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Full value list: https://docs.gdeltcloud.com/reference/enums#event_category

Available options:
Battles,
Protests,
Riots,
Explosions/Remote violence,
Violence against civilians,
Strategic developments,
POLITICAL,
CRIME,
ECONOMIC,
CORPORATE,
TECHNOLOGY,
INFRASTRUCTURE,
ENVIRONMENT,
HEALTH,
DEMOGRAPHIC,
INFORMATION
subcategory
string

Sub-event type (Conflict) or CAMEO+ leaf code. Comma-separate multiple values for OR. Scoped by category — sending it alone is 400 SUBCATEGORY_REQUIRES_CATEGORY and a pair that cannot exist is 400 INVALID_SUBCATEGORY_FOR_CATEGORY with the accepted values, so a bad value is never an empty 200 (both verified 2026-08-13). The taxonomy is closed and published in full, but PUBLICATION IS NOT COVERAGE — a defined code can carry zero events in any given window, and a few carry zero in most windows (Sexual violence is the measured example: its definition boundary sends nearly all such reporting to Attack). Before building a monitor on one code, measure it: GET /api/v2/events/summary?group_by=subcategory returns the codes that actually carry events in your window, with counts. An empty 200 here means no coverage for that combination, never zero real-world activity. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Reference: https://docs.gdeltcloud.com/reference/taxonomy-complete

search_mode
enum<string>

Explicit lexical required with search. Full value list: https://docs.gdeltcloud.com/reference/enums#reporting_summary_search_mode

Available options:
lexical

Case-insensitive literal phrase in Event title/summary or Story title. Also accepts: q.

story_category
enum<string>[]

Story-level topic, comma-separated for OR. Distinct from the EVENT taxonomy that category filters. Full value list: https://docs.gdeltcloud.com/reference/enums#story_category

Available options:
conflict_security,
cameoplus_political,
cameoplus_crime,
cameoplus_economic,
cameoplus_corporate,
cameoplus_technology,
cameoplus_infrastructure,
cameoplus_environment,
cameoplus_health,
cameoplus_demographic,
cameoplus_information,
CONFLICT,
CORPORATE,
CRIME,
DEMOGRAPHIC,
ECONOMIC,
ENVIRONMENT,
HEALTH,
INFORMATION,
INFRASTRUCTURE,
POLITICAL,
TECHNOLOGY
has_events
boolean

Restrict to Stories with at least one linked Event. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

has_fatalities
boolean

Restrict to Stories whose linked events carry fatalities. CONFLICT FAMILY ONLY. fatalities is an ACLED-family observable; the CAMEO+ family has no fatality field, so its events carry fatalities: null (never a fabricated 0) and can never satisfy true. Over 2026-08-06..13 that was 92.5% of all events, including every ENVIRONMENT, INFRASTRUCTURE and HEALTH event — so a disaster or industrial death toll is NOT in this filter, and the total it sums is the armed-conflict toll, not a global one. false is not the complement: it returns both a conflict event coded with a real 0 and every event that has no fatality observable at all, so it means "not known to be lethal", never "known to be non-lethal". Stories publish no metric filters, so for a cross-family severity screen query /api/v2/events — which does — and follow story_refs back. Read fatalities off each linked event to tell a measured 0 from an absent observable. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

civilian_targeting
boolean

Restrict to Stories with civilian-targeting events. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

article_count_min
number

Lower bound on the number of source articles behind a Story. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

Required range: x >= 1
article_count_max
number

Upper bound on the number of source articles behind a Story. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

Required range: x >= 1
languages
string

Coverage-language filter (ISO 639-1/2) on the underlying articles. Also accepts: language. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply. Reference: https://docs.gdeltcloud.com/reference/enums#coverage_language

observed_start
string

Inclusive UTC date or instant: Event coded_at or Story updated_at. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

observed_end
string

Exclusive UTC date or instant: Event coded_at or Story updated_at. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

country_match
enum<string>
default:location_or_actor_origin

Which definition of "in this country" the country / region / continent filters use. Applies to region and continent too, since both expand into the same country set. Note that group_by=country buckets on the event's own location, while the default match also admits actor origin — so a filtered total and the bucket for that same country can differ. Pass country_match=location when you need the two to agree. Full value list: https://docs.gdeltcloud.com/reference/enums#country_match

Available options:
location_or_actor_origin,
location
bbox
string

Bounding box lat_min,lon_min,lat_max,lon_max. Note: validation is owned by the endpoint service because it depends on composed or cross-parameter state; the published error semantics above still apply.

entity_match
enum<string>
default:coverage

Coverage matching: Stories mentioning or linking the entity and the Events those Stories carry. The default and only supported policy; it does not establish actor participation or material involvement. Full value list: https://docs.gdeltcloud.com/reference/enums#entity_match

Available options:
coverage
entity_family
enum<string>
default:expand

Which canonical ids the handle stands for. expand (default) also matches the sibling ids the entity arbiter has already merged into the same real-world entity — a Wikipedia identity minted twice under different URL spellings, for instance — and echoes the union back as applied_filters.entity_ids_expanded. exact restricts to the one canonical id the handle resolves to, reproducing the pre-2026-08-25 counts. Full value list: https://docs.gdeltcloud.com/reference/enums#entity_family

Available options:
expand,
exact
target_type
enum<string>

Typed selected root for a shared connected scope: entity or facility. Requires target_ids. Full value list: https://docs.gdeltcloud.com/reference/enums#target_type

Available options:
entity,
facility
target_ids
string

Comma-separated stable IDs of the target_type kind (up to 25); roots are unioned. Requires target_type. Cannot be combined with entity. Use either the legacy entity filter or a typed target scope.

direct matches the selected target. connected includes verified controlled subsidiaries for entities, or identified facility owners and authoritative parent paths for facilities. Requires target_type and target_ids. Full value list: https://docs.gdeltcloud.com/reference/enums#related_scope

Available options:
direct,
connected
office
string

Restrict to the OFFICE-HOLDERS of a political office: the Wikidata QID of the office (Q…) or the p_… id /api/v2/offices serves. Resolves to every holder whose published term overlaps the window (or office_as_of, when sent), then scopes exactly as entity=<those holders> would — a row is returned if ANY holder matches, and it is UNIONED with entity= when both are sent. A name is refused with 400; resolve it with GET /api/v2/offices?q= first. A roster of more than 1,000 holders inside the window is refused with 400 OFFICE_SCOPE_TOO_LARGE, never truncated. Holders reach the news layer only through a Wikipedia identity, so applied_filters.office_holders discloses how many of the roster are bridged_to_news versus unbridged — an unbridged holder carries no key coverage matching can match on and contributes no rows, so the counts are a FLOOR on the office's real coverage rather than a measurement of it. Each matched row carries entity_link.via: "office" with entity_link.entity naming the HOLDER (a spine id), not the office. Full value list: https://docs.gdeltcloud.com/reference/enums#office_id

office_as_of
string<date>

VALID TIME for office= — scope to whoever held the office ON this date (YYYY-MM-DD) rather than to everyone whose term overlaps the window. This is the publisher's start/end clock, not what we knew then: it is NOT the knowledge-time as_of and is not gated by it. Office-holders with no published start date cannot be placed on a date and are excluded (counted in applied_filters.office_holders.undated_excluded), never fabricated. Ignored without office.

Response

Story summary buckets

success
enum<boolean>
Available options:
true
data
object[]
meta
object

Where these rows came from and how current they are. Present on every response, including empty ones.

applied_filters
object

The filters this response was computed with, echoed from the request as the server read them.