---
title: "Get a time series"
method: GET
path: "/api/v1/series"
---

# Get a time series

`GET /api/v1/series`

## Request

- Base URL: `https://invokely.ai`
- URL: `https://invokely.ai/api/v1/series`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`
  - none

Get the time series of an indicator for one place, oldest to newest, from one source so the points are comparable.
Use it for trends: "evolution of the CPI by month", "population of Mataró since 2015".
Example: {"indicator": "cpi_annual_change", "place": "España", "from": "2023-01"}.
Returns {indicator, place, frequency, points: [[period, value], ...], total_points, truncated?, flags?: {period: status}, gaps?, gap_notes?, source, other_frequencies?, longer_history?, note?, projections_available?}. gaps lists periods the source did not publish; gap_notes gives the publisher's reason when known.
Projections (for example population to 2050) are never mixed into points. Pass include_projections: true to get them in a separate projections block {label, vintage, points, source}; always say a projected figure is a projection.
Every plan gets the full history. One call returns up to 5,000 points: the latest ones, or the first ones from "from" when you pass it. truncated says when the series was cut; pass from and to to page through it.
transform works as in get_value, on every point: {"indicator": "registered_unemployment", "place": "España", "from": "2023-01", "transform": "yoy"}, {"indicator": "unemployment_rate", "place": "Texas", "transform": "rolling_mean", "window": 3}. points hold the results; point_inputs[period] lists the [role, period, value] inputs of each point; transform.inputs names the series behind each role with its source; transform.gaps lists the periods that could not be computed and why. Not combinable with include_projections.
With as_of the points are the series as Invokely held it then, plus vintages {period: {version, known_since}}, revised_later {period: current value} for points changed since, vintage_coverage_starts and not_on_record (periods whose value then was not kept). Projections are never returned with as_of.

## Query parameters

- `indicator` string, required
- `place` string, required
- `from` string
- `to` string
- `frequency` 'year' | 'half' | 'quarter' | 'month'
- `country` string
- `locale` 'en' | 'es'
- `include_projections` boolean
- `transform` 'pct_change' | 'yoy' | 'diff' | 'yoy_diff' | 'index' | 'rolling_mean' | 'per_capita' | 'per_1000' | 'per_100k' | 'real' | 'share_of_parent'
- `base` string
- `window` integer
- `citation_style` 'apa' | 'mla' | 'chicago' | 'harvard' | 'bibtex' | 'ris' | 'all'
- `as_of` string

## Response `200`

Success. The body is {"data": ...}; the remaining allowance is in the x-invokely-remaining header.

- Data
  - `data` unknown, required

## Other responses

- `400`: Invalid argument (INVALID_ARGUMENT).
- `401`: The API key or token is invalid or revoked (UNAUTHORIZED).
- `402`: Allowance used up (QUOTA_EXHAUSTED), or the plan does not include the REST API (PLAN_REQUIRED: Free keys; use the MCP server or upgrade to Builder).
- `404`: Unknown indicator or place, or no data (INDICATOR_NOT_FOUND, PLACE_NOT_FOUND, AMBIGUOUS_PLACE, NO_DATA). hint and suggestions say what to try next.
- `429`: Rate limited (RATE_LIMITED). Retry after retry_after_seconds.

---

[API](https://skmtc.dev/invokely/apis/invokely-statistics-api.md) · [All operations](https://skmtc.dev/invokely/apis/invokely-statistics-api/llms.txt) · [OpenAPI document](https://skmtc.dev/invokely/apis/invokely-statistics-api/revisions/3b0f775bccb6?raw)
