Events

Read curated, scored crypto events. Filter by coin, category, date range, or impact. Every event has an editorial title, date, linked coins, and (on Pro+) source proof and an impact score.

Endpoints

GET/v2/events

List events

Returns a paginated list of upcoming events. Default sort is date asc (soonest first). The coins, categories, and date filters compose with AND.

Parameters

FieldInTypeRequiredDescription
coinsquerystringnoComma-separated coin **slugs** (e.g. `bitcoin,ethereum`). Tickers are accepted but **strongly discouraged**; symbols collide across coins (e.g. `UNI` resolves to several different projects). Use `GET /v2/coins` to look up canonical slugs.
categoriesquerystringnoComma-separated category ids. Case-insensitive. Standard+ only; Free requests using this filter return 403. Use `GET /v2/categories` to look up the canonical id list.
fromqueryiso8601noInclusive lower bound on `date`. Default = today. Values before the plan's historical window are clamped to that window.
toqueryiso8601noInclusive upper bound on `date`. Default = today + tier upcoming window (e.g. 7 days on Free, 90 days on Standard, full on Pro+).
keywordquerystringnoFree-text search across event title and description. Case-insensitive substring match.
impactMinquerynumbernoLower bound on the precise impact score (0.0–10.0). Elite+ only; lower tiers receive 403.
sortByquerystringnoSort order. Default `date_asc` (soonest first). `impact_desc` is Elite+ only; lower tiers receive 403.Default date_asc·Enum: date_asc · date_desc · created_desc · created_desc_and_updated_desc · impact_desc
limitqueryintegernoPage size (1–100).Default 20
cursorquerystringnoOpaque pagination cursor returned in the previous response's `meta.cursor`.

Response item

FieldTypeDescription
idstringStable event identifier.
slugstringURL-safe slug used on the public site.
titlestringEditorial title: neutral, factual, no marketing copy.
descriptionstringOne-paragraph summary of what the event is and what's at stake. Null on Free; available on Standard+.
dateiso8601Event start date in ISO-8601. **Do NOT render this directly when `isEstimated` is true** (see below). Use it for sorting / filtering / machine logic.
dateEndiso8601Range end date. Empty string on single-day events. Non-empty marks this as a multi-day window.
dateTypestringOne of `date` · `month` · `quarter`. Indicates how the date was sourced. Range events use `date` with a non-empty `dateEnd`. Drives display reconstruction when `isEstimated` is true.
isEstimatedboolean**True when the date is a hedge or a window-end.** `month` / `quarter` events auto-imply true; for `date` it depends on the source's wording (e.g. "around 15 May", "expected by Q2"). When true, treat `date` as imprecise and use `displayedDate` to render to users.
displayedDatestringPre-formatted human-readable date string (e.g. `Q2 2026`, `By 30 May`, `Aug 2026`, `01 Jun → 03 Jun`). Use this on user-facing UI; fall back to constructing your own from `dateType` + `date` + `dateEnd` + `isEstimated` only if you need a different format.
categoriesstring[]Editorial categories from the canonical taxonomy (e.g. `Release`, `Regulation`, `Fork/Swap`). Omitted on Free; available on Standard+.
coinsarray<CoinRef>Coins linked to this event.
impactstringEditorial impact. `null` on Free / Standard. On **Pro**, one of `Low` · `Mid` · `High` · `Critical`. On **Elite+**, a precise score 0.0–10.0 (returned as a JSON number).
impactSummarystringOne-sentence editorial summary for the impact score (Pro+).
sourceUrlstringURL of the original announcement (Pro+).
snapshotUrlstringScreenshot proof of the source at the time of curation (Pro+).
lastVerifiedAtiso8601When editorial last re-verified this event (Pro+).
createdAtiso8601When the event was first added to the catalog.
updatedAtiso8601When the event was last modified.

CoinRef

FieldTypeDescription
slugstringStable coin identifier. URL-safe; never changes.
symbolstringTrading ticker, serialized in lowercase.
namestringDisplay name (e.g. `Bitcoin`).

PaginationMeta

FieldTypeDescription
totalintegerTotal number of records matching the filters.
limitintegerPage size that was applied.
cursorstringOpaque cursor; pass to the next request as `cursor` to fetch the next page. Null on the last page.

List wrapper

FieldTypeDescription
dataarray<Event>Page of events.
metaobject<PaginationMeta>Pagination metadata.

Request

curl -X GET "https://api.coinmarketcal.com/v2/events?impactMin=7.5" \
  -H "x-api-key: $COINMARKETCAL_API_KEY" \
  -H "Accept: application/json"

Example response

{
  "data": [
    {
      "id": "48291",
      "slug": "ethereum-pectra-upgrade",
      "title": "Ethereum Pectra Upgrade",
      "description": "The Pectra upgrade activates on Ethereum mainnet, bundling EIP-7702 account abstraction, validator-consolidation changes, and increased blob throughput for rollups.",
      "date": "2026-05-06T12:00:00Z",
      "dateEnd": "",
      "dateType": "date",
      "isEstimated": false,
      "displayedDate": "06 May 2026",
      "categories": [
        "Release"
      ],
      "coins": [
        {
          "slug": "ethereum",
          "symbol": "eth",
          "name": "Ethereum"
        }
      ],
      "impact": 8.5,
      "impactSummary": "Pectra directly touches wallet UX, rollup economics, and validator income across the Ethereum ecosystem.",
      "sourceUrl": "https://blog.ethereum.org/2026/02/12/pectra-mainnet-activation",
      "snapshotUrl": "https://d32bfp67k1q0s7.cloudfront.net/eth-pectra.png",
      "lastVerifiedAt": "2026-04-19T09:00:00Z",
      "createdAt": "2026-02-12T14:22:00Z",
      "updatedAt": "2026-04-19T09:00:00Z"
    }
  ],
  "meta": {
    "total": 1247,
    "limit": 20,
    "cursor": "eyJvZmZzZXQiOjIwfQ"
  }
}

Try it

Loading your keys…

Live request. Counts against your plan's rate limit.

https://api.coinmarketcal.com/v2/events

GET/v2/events/cancellations

List permanently removed events

Returns removal records ordered by cancelledAt, then id. Available to every API V2 tier. Poll regularly and never leave more than 90 days between successful requests, even when webhooks are enabled.

Parameters

FieldInTypeRequiredDescription
sincequeryiso8601noInclusive cancellation-time lower bound. Accepts RFC3339 or `YYYY-MM-DD`; defaults to 90 days ago.Default 90 days ago
limitqueryintegernoPage size (1–100).Default 100
cursorquerystringnoOpaque pagination cursor returned in the previous response's `meta.cursor`.

Response item

FieldTypeDescription
idstringStable numeric event id, serialized as a string for API consistency.
cancelledAtiso8601When the event was permanently removed.

PaginationMeta

FieldTypeDescription
totalintegerTotal number of records matching the filters.
limitintegerPage size that was applied.
cursorstringOpaque cursor; pass to the next request as `cursor` to fetch the next page. Null on the last page.

List wrapper

FieldTypeDescription
dataarray<EventCancellation>Page of permanent-removal records.
metaobject<PaginationMeta>Pagination metadata.

Request

curl -X GET "https://api.coinmarketcal.com/v2/events/cancellations" \
  -H "x-api-key: $COINMARKETCAL_API_KEY" \
  -H "Accept: application/json"

Example response

{
  "data": [
    {
      "id": "48291",
      "cancelledAt": "2026-07-16T10:32:00Z"
    }
  ],
  "meta": {
    "total": 1,
    "limit": 100,
    "cursor": null
  }
}

Try it

Loading your keys…

Live request. Counts against your plan's rate limit.

https://api.coinmarketcal.com/v2/events/cancellations

GET/v2/events/{id}

Fetch a single event

Returns the full event payload by id. Tier-gated fields follow the caller's plan. A recently removed event returns 410 Gone with its id and cancelledAt. An unknown, temporarily unpublished, or out-of-window event returns 404.

Parameters

FieldInTypeRequiredDescription
idpathstringyesThe event id, as returned by `GET /v2/events`.

Response

FieldTypeDescription
idstringStable event identifier.
slugstringURL-safe slug used on the public site.
titlestringEditorial title: neutral, factual, no marketing copy.
descriptionstringOne-paragraph summary of what the event is and what's at stake. Null on Free; available on Standard+.
dateiso8601Event start date in ISO-8601. **Do NOT render this directly when `isEstimated` is true** (see below). Use it for sorting / filtering / machine logic.
dateEndiso8601Range end date. Empty string on single-day events. Non-empty marks this as a multi-day window.
dateTypestringOne of `date` · `month` · `quarter`. Indicates how the date was sourced. Range events use `date` with a non-empty `dateEnd`. Drives display reconstruction when `isEstimated` is true.
isEstimatedboolean**True when the date is a hedge or a window-end.** `month` / `quarter` events auto-imply true; for `date` it depends on the source's wording (e.g. "around 15 May", "expected by Q2"). When true, treat `date` as imprecise and use `displayedDate` to render to users.
displayedDatestringPre-formatted human-readable date string (e.g. `Q2 2026`, `By 30 May`, `Aug 2026`, `01 Jun → 03 Jun`). Use this on user-facing UI; fall back to constructing your own from `dateType` + `date` + `dateEnd` + `isEstimated` only if you need a different format.
categoriesstring[]Editorial categories from the canonical taxonomy (e.g. `Release`, `Regulation`, `Fork/Swap`). Omitted on Free; available on Standard+.
coinsarray<CoinRef>Coins linked to this event.
impactstringEditorial impact. `null` on Free / Standard. On **Pro**, one of `Low` · `Mid` · `High` · `Critical`. On **Elite+**, a precise score 0.0–10.0 (returned as a JSON number).
impactSummarystringOne-sentence editorial summary for the impact score (Pro+).
sourceUrlstringURL of the original announcement (Pro+).
snapshotUrlstringScreenshot proof of the source at the time of curation (Pro+).
lastVerifiedAtiso8601When editorial last re-verified this event (Pro+).
createdAtiso8601When the event was first added to the catalog.
updatedAtiso8601When the event was last modified.

CoinRef

FieldTypeDescription
slugstringStable coin identifier. URL-safe; never changes.
symbolstringTrading ticker, serialized in lowercase.
namestringDisplay name (e.g. `Bitcoin`).

Request

curl -X GET "https://api.coinmarketcal.com/v2/events/{id}" \
  -H "x-api-key: $COINMARKETCAL_API_KEY" \
  -H "Accept: application/json"

Example response

{
  "id": "48291",
  "slug": "ethereum-pectra-upgrade",
  "title": "Ethereum Pectra Upgrade",
  "description": "The Pectra upgrade activates on Ethereum mainnet, bundling EIP-7702 account abstraction, validator-consolidation changes, and increased blob throughput for rollups.",
  "date": "2026-05-06T12:00:00Z",
  "dateEnd": "",
  "dateType": "date",
  "isEstimated": false,
  "displayedDate": "06 May 2026",
  "categories": [
    "Release"
  ],
  "coins": [
    {
      "slug": "ethereum",
      "symbol": "eth",
      "name": "Ethereum"
    }
  ],
  "impact": 8.5,
  "impactSummary": "Pectra directly touches wallet UX, rollup economics, and validator income across the Ethereum ecosystem.",
  "sourceUrl": "https://blog.ethereum.org/2026/02/12/pectra-mainnet-activation",
  "snapshotUrl": "https://d32bfp67k1q0s7.cloudfront.net/eth-pectra.png",
  "lastVerifiedAt": "2026-04-19T09:00:00Z",
  "createdAt": "2026-02-12T14:22:00Z",
  "updatedAt": "2026-04-19T09:00:00Z"
}

Try it

Loading your keys…

Live request. Counts against your plan's rate limit.

https://api.coinmarketcal.com/v2/events/{id}