> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenomist.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Point-in-Time History

> See a token's unlock schedule as it was known at any past date, and every version behind it.

Point-in-time data is a token's unlock schedule as it stood at a past date, built only from the project decisions that were public by that date. Point-in-Time (PIT) History serves this data: ask what a token's unlock schedule looked like at a past date, and what changed since. Use it to backtest without look-ahead bias, audit how a schedule evolved, or trace a release back to the vote or announcement that created it.

For the method behind it and a worked example, see [Point-in-time data](https://docs.tokenomist.ai/methodology/point-in-time.md).

## Endpoints

| Endpoint | Returns |
| - | - |
| [`GET /v5/point-in-time/token-versions/{tokenId}`](https://docs.tokenomist.ai/api-documents/point-in-time/versions) | Every project version of the token: when it was in force, what changed, and the sources |
| [`GET /v5/point-in-time/allocations/{tokenId}`](https://docs.tokenomist.ai/api-documents/point-in-time/allocations) | The allocation table as known at a date, with unlocked and locked amounts as of that date |
| [`GET /v5/point-in-time/daily-emission/{tokenId}`](https://docs.tokenomist.ai/api-documents/point-in-time/daily-emission) | The daily emission series (cliffs and linear releases) as known at a date |
| [`GET /v5/point-in-time/unlock/events/{tokenId}`](https://docs.tokenomist.ai/api-documents/point-in-time/unlock-events) | Cliff unlock events as known at a date |

The allocations, daily emission and unlock events endpoints return the numbers of their [v5 counterparts](https://docs.tokenomist.ai/api-documents/unlock-events/v5.md), computed from the version you select. They add a version selector, report the version that answered in `metadata.version`, and leave out USD fields. Each page lists its differences from v5.

Point-in-Time History serves the tokens in [Token List v5](https://docs.tokenomist.ai/api-documents/token-list/v5.md). A token that is not in that list answers `404 TOKEN_NOT_FOUND` for every `asOf`, even if it was listed in the past.

## Project versions

Each project decision (a new release, a cancelled one, a re-dated one) adds a project version, starting when the decision became public. `asOf` picks the project version in force at T, which answers "what could the market know about upcoming unlocks at T".

The [versions endpoint](https://docs.tokenomist.ai/api-documents/point-in-time/versions.md) lists a token's project versions. Each one serves the latest data Tokenomist published for that version, including our later corrections.

Tokenomist often publishes a change months after the project announced it. The project timeline dates each decision to its public announcement, so your backtest sees the decision when the market could, not when we recorded it.

The project timeline starts at the token's first version in our records, not at its launch date.

### Our fixes never open a project version

Tokenomist sometimes corrects data that was public all along, such as a date, an amount or a precision. These corrections never open a project version. Each correction is folded into the project version it follows.

### Version ids

| Id format | Example |
| - | - |
| `{tokenId}-p-{id}` | `eigenlayer-p-6703562619635290c11ad65a` |

Ids are permanent, so store `id` as returned and do not build it yourself. The data behind an id can still change when a correction is folded into the version or its decision is dated. You may store responses for your own permitted use; stored copies remain licensed and subject to the [Terms of Service](https://tokenomist.ai/terms). The prefix is Tokenomist's own token id. It is usually the same as the `tokenId` in the path, but for a few tokens it differs: `galxe` versions are `project-galaxy-p-…` and `woo` versions are `woo-network-p-…`. Send them back unchanged as `versionId` on the same token.

`historyOrder` is the position within the timeline (1 = oldest). It can shift when an earlier version is added later, so do not use it as a key.

## Choose a version

The allocations, daily emission and unlock events endpoints accept the same selector.

| Parameter | Type | Description |
| - | - | - |
| `asOf` | string | Decision time T, as an RFC 3339 datetime or `YYYY-MM-DD` (00:00:00 UTC that day). Returns the project version in force at T. Defaults to now. |
| `versionId` | string | A project version `id` from the [versions endpoint](https://docs.tokenomist.ai/api-documents/point-in-time/versions.md). Returns that version. |

* Omit both to get the current version evaluated now.
* Send `asOf` or `versionId`, not both. A request with both answers `422 INVALID_PARAMETER`.
* A `versionId` is evaluated at the version's start, or at the start of your plan's range if that is later.
* To compare how every version saw the same events, call an endpoint once per `versionId` from the versions endpoint.
* `asOf` and `versionId` are case-sensitive, and each can be sent only once.

### Applied version

Every response from the allocations, daily emission and unlock events endpoints reports which version answered it:

```json theme={null}
"metadata": {
  "queryDate": "2026-10-29T06:24:37Z",
  "asOf": "2025-01-01T00:00:00Z",
  "version": {
    "id": "eigenlayer-p-6703562619635290c11ad65a",
    "historyOrder": 4,
    "validFrom": "2024-10-04T04:52:36Z",
    "validFromBasis": "url",
    "validUntil": null,
    "previousVersionId": "eigenlayer-p-66fa656ce4a4901842303dd6",
    "status": "current"
  },
  "credit": { "used": 213, "limit": 1000, "resetAt": "2026-11-01T00:00:00Z" }
}
```

## Known at T vs happened by T

* **Amounts are evaluated at `asOf`.** Unlocked and locked supply reflect the UTC day of T, not today. Amounts are daily, so a release dated later on that same UTC day already counts as unlocked.
* **Future releases are still returned.** Releases after T were the forecast at T, so they are included. Compare their dates with `metadata.asOf`.
* **Committed claims are filtered.** Only claims with a timestamp on or before `asOf` are returned.
* **`maxSupply` is not versioned yet.** History responses return the token's max supply today, as v5 does, whatever the `asOf`.
* **USD fields are not returned**, because historical prices after T would leak hindsight.

## How a project version is dated

A project version starts on its announcement date when one is recorded, otherwise on its first publish on Tokenomist. `validFromBasis` tells you how the start date was established.

| Basis | Meaning |
| - | - |
| `stated_in_document` | The vote or announcement states the time, for example a Snapshot vote close |
| `onchain` | A governance proposal's voting end on chain |
| `url` | The time encoded in the announcement's link |
| `archive_first_seen` | The first web archive capture of the announcement (an upper bound) |
| `first_published` | No dated announcement, so the start is the version's first publish on Tokenomist (public no later than then) |

An announcement can be dated earlier than the version before it. Versions keep their `historyOrder`, and the version in force at T is the one with the highest `historyOrder` that started on or before T. Such a version can end (`validUntil`, the next version's start) before its own `validFrom`; no `asOf` selects it, but its `versionId` does.

## Sources

Public sources are returned in full in `changeReferences`. A non-public source, such as a confirmation a project team sent us directly, is returned only as `{ "name": "Private source", "private": true }`. `sourceDate` is present only when the date is stated in the source, on chain or archive-dated.

## Errors

Errors use the v5 envelope with an added `errorCode`.

```json theme={null}
{
  "metadata": { "queryDate": "2026-10-29T06:25:03Z" },
  "status": false,
  "statusCode": 403,
  "errorCode": "PLAN_NOT_ELIGIBLE",
  "errorMessage": "'asOf' is outside your plan's range: the available range is 2023-10-29T00:00:00Z - 2026-10-29T06:25:03Z",
  "earliestValidDate": "2023-10-29T00:00:00Z"
}
```

| Status | `errorCode` | When |
| - | - | - |
| 401 | none | No `x-api-key` header |
| 400 | `INVALID_AS_OF` | `asOf` is not a valid date, or is in the future |
| 400 | `INVALID_PARAMETER` | Another parameter is invalid, for example `start`, `end`, `page` or `pageSize` |
| 403 | none | An unknown key or a plan without API access (`You are not authorized to access this resource`), or your plan does not include this endpoint (`Forbidden`) |
| 403 | `PLAN_NOT_ELIGIBLE` | Your plan does not include the version selector on this endpoint, or `asOf` or `versionId` is outside your plan's range |
| 404 | `TOKEN_NOT_FOUND` | The `tokenId` is unknown or not in Token List v5 |
| 404 | `NO_VERSION_AT_AS_OF` | No project version was in force at `asOf` |
| 404 | `VERSION_NOT_FOUND` | `versionId` does not belong to this token |
| 404 | `NOT_FOUND` | Allocations: the token has no standard allocation |
| 422 | `INVALID_PARAMETER` | `asOf` and `versionId` were sent together, `start` / `end` is outside your plan's window, or `standardAllocation` has an unknown value |
| 429 | none | Rate limit or credit quota, as in v5. See [Rate limits, quotas & errors](https://docs.tokenomist.ai/api-documents/rate-limits.md). |
| 500 | `INTERNAL_ERROR` | An unexpected error. Retry later. |
| 503 | `SERVICE_UNAVAILABLE` | Version data is temporarily unavailable. Retry shortly. Uses no credit. |

`NO_VERSION_AT_AS_OF` and an `asOf` or `versionId` outside your plan's range also return `earliestValidDate`: the first instant that selects a version. Send it back as `asOf` to get that version. It is absent when no later version exists.

## Access and credits

Your plan decides which point-in-time endpoints you can call, and how far back `asOf` and `versionId` can reach, counted from the start of today (UTC). The `start` / `end` window on daily emission and unlock events also follows your plan, as in v5, and is counted from today, not from `asOf`: an older `asOf` does not move it, so days before the window are not returned whatever version you select. Each successful request uses one credit, as in v5. Errors, `503` included, use none. [Contact us](mailto:consulting@tokenomist.ai) for plan details.

## Next steps

> [card] [List versions](https://docs.tokenomist.ai/api-documents/point-in-time/versions.md)
>
> Start here to get version ids and dates for a token.

> [card] [Unlock events as of a date](https://docs.tokenomist.ai/api-documents/point-in-time/unlock-events.md)
>
> Backtest cliff unlocks as they were known at a date.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.