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/eventsList events - GET
/v2/events/cancellationsList permanently removed events - GET
/v2/events/{id}Fetch a single event
/v2/eventsList 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
| Field | In | Type | Required | Description |
|---|---|---|---|---|
| coins | query | string | no | Comma-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. |
| categories | query | string | no | Comma-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. |
| from | query | iso8601 | no | Inclusive lower bound on `date`. Default = today. Values before the plan's historical window are clamped to that window. |
| to | query | iso8601 | no | Inclusive upper bound on `date`. Default = today + tier upcoming window (e.g. 7 days on Free, 90 days on Standard, full on Pro+). |
| keyword | query | string | no | Free-text search across event title and description. Case-insensitive substring match. |
| impactMin | query | number | no | Lower bound on the precise impact score (0.0–10.0). Elite+ only; lower tiers receive 403. |
| sortBy | query | string | no | Sort 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 |
| limit | query | integer | no | Page size (1–100).Default 20 |
| cursor | query | string | no | Opaque pagination cursor returned in the previous response's `meta.cursor`. |
◆ Response item
| Field | Type | Description |
|---|---|---|
| id | string | Stable event identifier. |
| slug | string | URL-safe slug used on the public site. |
| title | string | Editorial title: neutral, factual, no marketing copy. |
| description | string | One-paragraph summary of what the event is and what's at stake. Null on Free; available on Standard+. |
| date | iso8601 | Event start date in ISO-8601. **Do NOT render this directly when `isEstimated` is true** (see below). Use it for sorting / filtering / machine logic. |
| dateEnd | iso8601 | Range end date. Empty string on single-day events. Non-empty marks this as a multi-day window. |
| dateType | string | One 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. |
| isEstimated | boolean | **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. |
| displayedDate | string | Pre-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. |
| categories | string[] | Editorial categories from the canonical taxonomy (e.g. `Release`, `Regulation`, `Fork/Swap`). Omitted on Free; available on Standard+. |
| coins | array<CoinRef> | Coins linked to this event. |
| impact | string | Editorial 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). |
| impactSummary | string | One-sentence editorial summary for the impact score (Pro+). |
| sourceUrl | string | URL of the original announcement (Pro+). |
| snapshotUrl | string | Screenshot proof of the source at the time of curation (Pro+). |
| lastVerifiedAt | iso8601 | When editorial last re-verified this event (Pro+). |
| createdAt | iso8601 | When the event was first added to the catalog. |
| updatedAt | iso8601 | When the event was last modified. |
◆ CoinRef
| Field | Type | Description |
|---|---|---|
| slug | string | Stable coin identifier. URL-safe; never changes. |
| symbol | string | Trading ticker, serialized in lowercase. |
| name | string | Display name (e.g. `Bitcoin`). |
◆ PaginationMeta
| Field | Type | Description |
|---|---|---|
| total | integer | Total number of records matching the filters. |
| limit | integer | Page size that was applied. |
| cursor | string | Opaque cursor; pass to the next request as `cursor` to fetch the next page. Null on the last page. |
◆ List wrapper
| Field | Type | Description |
|---|---|---|
| data | array<Event> | Page of events. |
| meta | object<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…
→ https://api.coinmarketcal.com/v2/events
/v2/events/cancellationsList 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
| Field | In | Type | Required | Description |
|---|---|---|---|---|
| since | query | iso8601 | no | Inclusive cancellation-time lower bound. Accepts RFC3339 or `YYYY-MM-DD`; defaults to 90 days ago.Default 90 days ago |
| limit | query | integer | no | Page size (1–100).Default 100 |
| cursor | query | string | no | Opaque pagination cursor returned in the previous response's `meta.cursor`. |
◆ Response item
| Field | Type | Description |
|---|---|---|
| id | string | Stable numeric event id, serialized as a string for API consistency. |
| cancelledAt | iso8601 | When the event was permanently removed. |
◆ PaginationMeta
| Field | Type | Description |
|---|---|---|
| total | integer | Total number of records matching the filters. |
| limit | integer | Page size that was applied. |
| cursor | string | Opaque cursor; pass to the next request as `cursor` to fetch the next page. Null on the last page. |
◆ List wrapper
| Field | Type | Description |
|---|---|---|
| data | array<EventCancellation> | Page of permanent-removal records. |
| meta | object<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…
→ https://api.coinmarketcal.com/v2/events/cancellations
/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
| Field | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | yes | The event id, as returned by `GET /v2/events`. |
◆ Response
| Field | Type | Description |
|---|---|---|
| id | string | Stable event identifier. |
| slug | string | URL-safe slug used on the public site. |
| title | string | Editorial title: neutral, factual, no marketing copy. |
| description | string | One-paragraph summary of what the event is and what's at stake. Null on Free; available on Standard+. |
| date | iso8601 | Event start date in ISO-8601. **Do NOT render this directly when `isEstimated` is true** (see below). Use it for sorting / filtering / machine logic. |
| dateEnd | iso8601 | Range end date. Empty string on single-day events. Non-empty marks this as a multi-day window. |
| dateType | string | One 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. |
| isEstimated | boolean | **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. |
| displayedDate | string | Pre-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. |
| categories | string[] | Editorial categories from the canonical taxonomy (e.g. `Release`, `Regulation`, `Fork/Swap`). Omitted on Free; available on Standard+. |
| coins | array<CoinRef> | Coins linked to this event. |
| impact | string | Editorial 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). |
| impactSummary | string | One-sentence editorial summary for the impact score (Pro+). |
| sourceUrl | string | URL of the original announcement (Pro+). |
| snapshotUrl | string | Screenshot proof of the source at the time of curation (Pro+). |
| lastVerifiedAt | iso8601 | When editorial last re-verified this event (Pro+). |
| createdAt | iso8601 | When the event was first added to the catalog. |
| updatedAt | iso8601 | When the event was last modified. |
◆ CoinRef
| Field | Type | Description |
|---|---|---|
| slug | string | Stable coin identifier. URL-safe; never changes. |
| symbol | string | Trading ticker, serialized in lowercase. |
| name | string | Display 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…
→ https://api.coinmarketcal.com/v2/events/{id}