Published Versions
List every published version of a Spec via GET /v1/specs/{id}/versions: immutable version numbers, sha256 content hashes, and which version is live now.
Every publish appends an immutable version to the Spec's history — version rows are never edited or deleted, and numbers only ascend. This endpoint lists them newest first; it is where a Spec's "v3" actually lives. The response is deliberately identity-only: version number, content hash, timestamp, and the materialization flag. The Spec document's content — rules, prompts, samples, gate configuration — is not exposed anywhere on the public API.
content_hash is the sha256 of the canonical JSON serialization of the Spec document, so it is a stable fingerprint of the configuration itself: identical hashes mean identical Specs wherever they appear. Publishing a document identical to the current head is a no-op that appends nothing, which is why consecutive versions always differ — and why the hash works as a cheap drift check: record the hash your integration was validated against and compare it on a schedule.
is_materialized flags the version whose configuration is actually live on the schema — the one a new pipeline run executes. It normally sits on the newest version, but publishing and materializing are separate steps, so the flag can rest on an older version while the head waits to converge. The Spec summary reports the same state as version versus materialized_version on [List Specs](list-specs).
GET /v1/schemas/{id}/versions, which reads the unrelated legacy schema-version counter. A Spec-authored schema never advances that counter, so that endpoint is normally empty for these schemas./v1/specs/{id}/versionsPath parameters
List versions
curl -H "Authorization: Bearer $TALONIC_API_KEY" \
"https://api.talonic.com/v1/specs/e2144027-39c0-44e8-a196-72be1e360749/versions"Response
Response fields
Response
{
"data": [
{ "version": 3, "content_hash": "9f2c…", "created_at": "2026-04-25T14:30:00.000Z", "is_materialized": true },
{ "version": 2, "content_hash": "41ab…", "created_at": "2026-04-22T10:05:00.000Z", "is_materialized": false },
{ "version": 1, "content_hash": "c7d0…", "created_at": "2026-04-20T09:12:00.000Z", "is_materialized": false }
]
}Exactly one version is normally flagged is_materialized. If none is, the Spec has been published but never converged onto a schema.
To see what a version change actually did to execution, pair this history with the structure reads: GET /v1/specs/{id} compiles the current rail into phases, and GET /v1/pipelines/{id}?include=phases returns the plan a specific run froze at creation. A run that predates the newest publish shows the older plan — the version timestamps here tell you which runs straddle a configuration change.