On this page

Chart Annotations API

Regions

The base URL depends on your project's data residency. In all examples on this page, use the default base URL unless your project uses Amplitude's EU data center—in that case use the EU base URL in this table.

Requests go to https://amplitude.com (default) or https://analytics.eu.amplitude.com (EU). The https://analytics.amplitude.com hostname is the Analytics web app (browser UI); use the hosts in this table for REST requests, not analytics.amplitude.com.

Annotation categories

Manage annotation categories to organize your annotations. Create categories, update their names, and assign them to annotations.

Create an annotation category

bash
curl --location --request POST 'https://amplitude.com/api/3/annotation-categories' \
--header 'Authorization: Basic {api-key}:{secret-key}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "category": "Releases"
}'

Body parameters

Response

json
{
  "data": {
    "id": 6789,
    "name": "Releases"
  }
}

Error responses

  • 400 - Invalid field
  • 409 - Category already exists

Get all annotation categories

bash
curl --location --request GET 'https://amplitude.com/api/3/annotation-categories' \
-u '{api-key}:{secret-key}'

Query parameters

Response

json
{
  "data": [
    {
      "id": 12345,
      "name": "Alerts"
    },
    {
      "id": 6789,
      "name": "Releases"
    }
  ]
}

Error responses

  • 400 - Invalid category
  • 404 - Category not found

Get an annotation category by ID

bash
curl --location --request GET 'https://amplitude.com/api/3/annotation-categories/:category_id' \
-u '{api-key}:{secret-key}'

Path parameters

Response

json
{
  "data": {
    "id": 12345,
    "name": "Alerts"
  }
}

Error responses

  • 400 - Invalid category ID
  • 404 - Category not found

Update an annotation category

bash
curl --location --request PUT 'https://amplitude.com/api/3/annotation-categories/:category_id' \
--header 'Authorization: Basic {api-key}:{secret-key}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "category": "Updated Category Name"
}'

Path parameters

Body parameters

Response

json
{
  "data": {
    "id": 569,
    "category": "Updated category name"
  }
}

Error responses

  • 400 - Invalid category ID
  • 404 - Category not found
  • 409 - Category already exists

Delete an annotation category

bash
curl --location --request DELETE 'https://amplitude.com/api/3/annotation-categories/:category_id' \
-u '{api-key}:{secret-key}'

Path parameters

Response

json
{
  "success": true
}

Error responses

  • 400 - Invalid category ID
  • 404 - Category not found

Bulk update annotation categories

Assign a category to multiple annotations at once.

bash
curl --location --request PUT 'https://amplitude.com/api/3/annotation-categories/bulk/:category_id' \
--header 'Authorization: Basic {api-key}:{secret-key}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "annotation_ids": [12345, 67890, 11111]
}'

Path parameters

Body parameters

Response

json
{
    "data": [
        {
            "id": 12345,
            "start": "2025-12-18T15:00:00+00:00",
            "label": "test",
            "details": null,
            "category": {
                "id": 12345,
                "category": "Alerts"
            },
            "end": null,
            "chart_id": null
        },

    ]
}

Error responses

  • 400 - Invalid category ID
  • 400 - Invalid annotation IDs
  • 400 - One or more invalid annotation ID
  • 404 - Category not found

Annotations

Create, retrieve, update, and delete chart annotations. Annotations can span single dates or time ranges with hourly granularity.

Create an annotation

bash
curl --location --request POST 'https://amplitude.com/api/3/annotations' \
--header 'Authorization: Basic {api-key}:{secret-key}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "label": "Feature X Release",
  "start": "2025-11-01T07:00:00+00:00",
  "category": "Releases",
  "chart_id": "abc123",
  "details": "This marks the release of feature X",
  "end": "2025-11-10T07:00:00+01:00"
}'

Body parameters

Response

json
{
  "data": {
    "id": 12345,
    "start": "2025-11-01T07:00:00+00:00",
    "details": "This marks the release of feature X",
    "category": {
      "id": 45678,
      "name": "Releases"
    },
    "end": "2025-11-10T07:00:00+01:00",
    "label": "Feature X Release",
    "chart_id": null
  }
}

Error responses

  • 400 - Invalid field
  • 404 - Category not found

Get all annotations

Retrieves all chart annotations in your project. Supports filtering by category, chart, and date range.

bash
curl --location --request GET 'https://amplitude.com/api/3/annotations?category=Releases&start=2025-11-01T07:00:00+00:00&end=2025-11-30T07:00:00+00:00' \
-u '{api-key}:{secret-key}'

Query parameters

Response

json
{
  "data": [
    {
      "id": 12345,
      "start": "2025-11-01T07:00:00+00:00",
      "details": "This marks the release of feature X",
      "category": {
        "id": 45678,
        "name": "Releases"
      },
      "end": "2025-11-10T07:00:00+01:00",
      "label": "Feature X Release",
      "chart_id": null
    }
  ]
}

Error responses

  • 400 - Invalid request
  • 409 - Conflict

Get a single annotation

Retrieves a single chart annotation by ID.

bash
curl --location --request GET 'https://amplitude.com/api/3/annotations/:annotation_id' \
-u '{api-key}:{secret-key}'

Path parameters

Response

json
{
  "data": {
    "id": 12345,
    "start": "2025-11-01T07:00:00+00:00",
    "details": "This marks the release of feature X",
    "category": {
      "id": 45678,
      "name": "Releases"
    },
    "end": "2025-11-10T07:00:00+01:00",
    "label": "Feature X Release",
    "chart_id": null
  }
}

Error responses

  • 400 - Invalid annotation ID
  • 404 - Annotation not found

Update an annotation

Updates a specific annotation. Supports partial updates. Only the fields you specify in the request body are updated.

bash
curl --location --request PUT 'https://amplitude.com/api/3/annotations/:annotation_id' \
--header 'Authorization: Basic {api-key}:{secret-key}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "label": "Updated Feature X Release",
  "end": "2025-11-15T07:00:00+01:00"
}'

Path parameters

Body parameters

Response

json
{
  "data": {
    "id": 12345,
    "start": "2025-11-01T07:00:00+00:00",
    "details": "This marks the release of feature X",
    "category": {
      "id": 45678,
      "name": "Releases"
    },
    "end": "2025-11-15T07:00:00+01:00",
    "label": "Updated Feature X Release",
    "chart_id": null
  }
}

Error responses

  • 400 - Invalid field
  • 404 - Annotation not found
  • 404 - Category not found

Delete an annotation

bash
curl --location --request DELETE 'https://amplitude.com/api/3/annotations/:annotation_id' \
-u '{api-key}:{secret-key}'

Path parameters

Response

json
{
  "success": true
}

Error responses

  • 400 - Invalid annotation ID
  • 404 - Annotation not found

Was this helpful?