> ## 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.

# Token versions

> List every project version of a token's unlock schedule

Returns every project version of a token, oldest first by `historyOrder`. Use the ids from this endpoint as `versionId` on the other [Point-in-Time History](https://docs.tokenomist.ai/api-documents/point-in-time/overview.md) endpoints.

* Each version carries `validFrom`, `validFromBasis`, `validUntil`, `disclosedAt` and `previousVersionId`.
* Tokenomist's own corrections are not listed separately. Each one is folded into the project version it follows, which then serves the corrected data.
* `start` and `end` filter on the UTC day of `validFrom`, both days included.
* `change.category` is `baseline` on the first version and `project_decision` on later ones.
* `metadata` holds the query date, credit and pagination only. This endpoint takes no `asOf` or `versionId`.

```python list_versions.py theme={null}
import requests

response = requests.get(
    "https://api.tokenomist.ai/v5/point-in-time/token-versions/eigenlayer",
    headers={"x-api-key": "YOUR_API_KEY"},
    timeout=30,
)
body = response.json()
if not body.get("status"):
    raise RuntimeError(f"{body.get('errorCode')}: {body.get('errorMessage')}")

for version in body["data"]:
    print(version["historyOrder"], version["id"], version["validFrom"], version["change"]["title"])
```

Example version:

```json theme={null}
{
  "id": "eigenlayer-p-664afd685bc38ff465ce3bf7",
  "tokenId": "eigenlayer",
  "historyOrder": 1,
  "status": "previous",
  "validFrom": "2024-04-29T17:24:21Z",
  "validFromBasis": "stated_in_document",
  "validUntil": "2024-09-04T16:55:06Z",
  "disclosedAt": "2024-04-29T17:24:21Z",
  "previousVersionId": null,
  "change": {
    "category": "baseline",
    "title": "Launch tokenomics",
    "description": "Baseline: first published schedule.",
    "basis": "project_disclosure"
  },
  "changeReferences": [
    {
      "name": "Introducing EIGEN token",
      "url": "https://blog.eigenfoundation.org/announcement/",
      "sourceType": "official_blog"
    }
  ],
  "listedMethod": "INTERNAL",
  "dataSource": "Whitepaper"
}
```


## OpenAPI

````yaml GET /v5/point-in-time/token-versions/{tokenId}
openapi: 3.0.3
info:
  title: Tokenomist API
  description: >-
    Comprehensive time series data for crypto token unlocks, emissions,
    allocations, fundraising, burns, and buybacks.
  version: 1.0.0
servers:
  - url: https://api.tokenomist.ai
security:
  - apiKey: []
paths:
  /v5/point-in-time/token-versions/{tokenId}:
    get:
      tags:
        - Point-in-Time History
      summary: Token versions
      description: >-
        Every project version of a token's unlock schedule: when each was in
        force, what changed, and the sources behind it, sorted by `historyOrder`
        ascending. Corrections are folded into the project version they follow.
      operationId: getPointInTimeTokenVersionsV5
      parameters:
        - $ref: '#/components/parameters/HistoryTokenId'
        - name: start
          in: query
          required: false
          description: >-
            Return versions whose `validFrom` falls on or after this UTC day
            (YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: end
          in: query
          required: false
          description: >-
            Return versions whose `validFrom` falls on or before this UTC day
            (YYYY-MM-DD).
          schema:
            type: string
            format: date
        - $ref: '#/components/parameters/HistoryPage'
        - $ref: '#/components/parameters/HistoryPageSize'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    $ref: '#/components/schemas/PaginatedMetadata'
                  status:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/HistoryVersion'
        '400':
          $ref: '#/components/responses/HistoryError'
        '403':
          $ref: '#/components/responses/HistoryError'
        '404':
          $ref: '#/components/responses/HistoryError'
        '429':
          $ref: '#/components/responses/HistoryError'
        '503':
          $ref: '#/components/responses/HistoryError'
components:
  parameters:
    HistoryTokenId:
      name: tokenId
      in: path
      required: true
      description: >-
        Token identifier (slug), as in Token List v5. A token not in that list
        answers 404 `TOKEN_NOT_FOUND`.
      schema:
        type: string
      example: eigenlayer
    HistoryPage:
      name: page
      in: query
      required: false
      description: Page number (1-indexed). 0 or omitted means 1.
      schema:
        type: integer
        minimum: 0
    HistoryPageSize:
      name: pageSize
      in: query
      required: false
      description: Number of items per page. 0 or omitted means 20.
      schema:
        type: integer
        minimum: 0
  schemas:
    PaginatedMetadata:
      type: object
      properties:
        queryDate:
          type: string
          format: date-time
          description: Timestamp of the query
          example: '2026-01-08T10:13:58Z'
        credit:
          $ref: '#/components/schemas/Credit'
        page:
          type: integer
          description: Current page number (1-based). 1 on an empty result.
          example: 1
        pageSize:
          type: integer
          description: Rows per page (20 by default).
          example: 50
        totalPages:
          type: integer
          description: Number of pages for this query (1 on an empty result).
          example: 10
        total:
          type: integer
          description: Number of rows across all pages. Left out when the result is empty.
          example: 487
    HistoryVersion:
      type: object
      description: A project version
      properties:
        id:
          type: string
          description: >-
            Permanent version id: `{tokenId}-p-{id}`. The prefix is Tokenomist's
            own token id, usually the path `tokenId` (not for every token, for
            example `galxe` versions start with `project-galaxy`). Store it as
            returned.
          example: eigenlayer-p-664afd685bc38ff465ce3bf7
        tokenId:
          type: string
          description: >-
            The tokenId you requested (slug). The prefix of id is Tokenomist's
            own token id and can differ.
          example: eigenlayer
        historyOrder:
          type: integer
          description: >-
            Position on the project timeline (1 = oldest). It can shift when an
            earlier version is added later.
          example: 1
        status:
          type: string
          description: >-
            Relative to now, not asOf. current: the latest project version of a
            token that is live today. previous: any other version.
          enum:
            - current
            - previous
          example: previous
        validFrom:
          type: string
          format: date-time
          description: >-
            When the version came into force: its announcement date, else its
            first publish on Tokenomist
          example: '2024-04-29T17:24:21Z'
        validFromBasis:
          $ref: '#/components/schemas/HistoryValidFromBasis'
        validUntil:
          type: string
          format: date-time
          nullable: true
          description: >-
            The next project version's start. Null for the latest version. It
            can be before `validFrom` when the next version's announcement is
            dated earlier.
          example: '2024-09-04T16:55:06Z'
        disclosedAt:
          type: string
          format: date-time
          description: When the decision became public (the same instant as `validFrom`)
          example: '2024-04-29T17:24:21Z'
        previousVersionId:
          type: string
          nullable: true
          description: The previous project version
          example: null
        change:
          $ref: '#/components/schemas/HistoryChange'
        changeReferences:
          type: array
          description: >-
            Sources for the change. A private source appears only as {"name":
            "Private source", "private": true}.
          items:
            $ref: '#/components/schemas/HistoryChangeReference'
        listedMethod:
          type: string
          description: >-
            How the data was listed: INTERNAL (Tokenomist research from official
            sources or on-chain data), AI (AI-listed) or EXTERNAL (submitted by
            the project). Left out when the version's content is unknown.
          enum:
            - INTERNAL
            - AI
            - EXTERNAL
          example: INTERNAL
        dataSource:
          type: string
          description: >-
            Where the version's schedule comes from: Whitepaper, Onchain,
            AI-Listing, Self-Listed or TokenUnlocks. Empty when unknown.
          example: Whitepaper
    Credit:
      type: object
      description: >-
        Optional quota state for the calling account, returned on most
        authenticated responses (both success and error). Treat it as optional:
        it may be absent on unauthenticated requests, demo/playground responses,
        and briefly right after a monthly reset. `used` is near-real-time and
        may lag the true count by a request or two.
      properties:
        used:
          type: integer
          description: >-
            Successful requests (status below 400) made by your account, across
            all its keys, since the start of the month; errors use no credit.
            May lag by a request or two.
          example: 213
        limit:
          type: integer
          description: The plan's request quota for the window.
          example: 1000
        resetAt:
          type: string
          format: date-time
          description: 'When the quota resets: the 1st of next month, 00:00 UTC (RFC 3339).'
          example: '2026-08-01T00:00:00Z'
    HistoryValidFromBasis:
      type: string
      description: >-
        How a project version's start date was established.
        `stated_in_document`: the vote or announcement states the time.
        `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 (an upper bound). `first_published`: no dated
        announcement, so the start is the first publish on Tokenomist (public no
        later than then).
      enum:
        - stated_in_document
        - onchain
        - url
        - archive_first_seen
        - first_published
      example: stated_in_document
    HistoryChange:
      type: object
      description: What changed in this project version compared with the previous one
      properties:
        category:
          type: string
          enum:
            - baseline
            - project_decision
          description: '`baseline` on the first version, `project_decision` on later ones'
          example: project_decision
        title:
          type: string
          description: Short title of the change, from the version's changelog.
          nullable: true
          example: >-
            Updated TBD Allocation Stakedrops with Stakedrop Season 2 release
            log
        description:
          type: string
          nullable: true
          description: What changed in the releases
          example: Added 1 release. (Stakedrops)
        basis:
          type: string
          enum:
            - project_disclosure
          description: '`project_disclosure`: a dated public decision'
          example: project_disclosure
    HistoryChangeReference:
      type: object
      description: >-
        A source behind the change. Public sources are returned in full. A
        non-public source is returned only as `{ "name": "Private source",
        "private": true }`.
      properties:
        name:
          type: string
          description: Title of the source.
          example: Introducing EIGEN token
        url:
          type: string
          description: Link to the source. Left out when unknown.
          example: https://blog.eigenfoundation.org/announcement/
        sourceType:
          type: string
          description: >-
            Kind of source, for example whitepaper, tokenomics_doc,
            official_blog, official_social, governance_forum or governance_vote.
            Left out when unknown.
          example: official_blog
        sourceDate:
          type: string
          format: date-time
          description: >-
            Present only where the date is stated in the source, on chain or
            archive-dated
          example: '2024-04-29T17:24:21Z'
        private:
          type: boolean
          description: Present and true for a non-public source
          example: true
    HistoryError:
      type: object
      properties:
        metadata:
          type: object
          properties:
            queryDate:
              type: string
              format: date-time
              example: '2026-10-29T06:25:07Z'
            credit:
              $ref: '#/components/schemas/Credit'
        status:
          type: boolean
          example: false
        statusCode:
          type: integer
          example: 404
        errorCode:
          type: string
          enum:
            - INVALID_AS_OF
            - INVALID_PARAMETER
            - PLAN_NOT_ELIGIBLE
            - TOKEN_NOT_FOUND
            - NO_VERSION_AT_AS_OF
            - VERSION_NOT_FOUND
            - NOT_FOUND
            - SERVICE_UNAVAILABLE
            - INTERNAL_ERROR
          example: TOKEN_NOT_FOUND
        errorMessage:
          type: string
          example: Token not found
        earliestValidDate:
          type: string
          format: date-time
          description: >-
            With `NO_VERSION_AT_AS_OF`, or `PLAN_NOT_ELIGIBLE` for an `asOf` or
            `versionId` outside your plan's range: the first instant that
            selects a version. Send it back as `asOf`. Absent when no later
            version exists.
          example: '2023-10-29T00:00:00Z'
  responses:
    HistoryError:
      description: >-
        Error. `400 INVALID_AS_OF`: `asOf` is invalid or in the future. `400
        INVALID_PARAMETER`: another parameter is invalid. `403
        PLAN_NOT_ELIGIBLE`: your plan does not include the version selector on
        this endpoint, or `asOf` / `versionId` is outside your plan's range (a
        403 without `errorCode` means your plan does not include the endpoint).
        `404 TOKEN_NOT_FOUND`, `404 NO_VERSION_AT_AS_OF` (no project version in
        force at `asOf`), `404 VERSION_NOT_FOUND` (`versionId` does not belong
        to this token). `422 INVALID_PARAMETER`: `asOf` and `versionId`
        together, or `start` / `end` outside your plan's window. `429` (no
        `errorCode`): rate limit or monthly credit quota, as in v5. `503
        SERVICE_UNAVAILABLE`: retry shortly. Errors use no credit.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/HistoryError'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Your Tokenomist API key

````

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