One version of a template
const url = 'https://api.sloose.com/orgs/org_9f3c/templates/b3f1c8a2/versions/3';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.sloose.com/orgs/org_9f3c/templates/b3f1c8a2/versions/3 \ --header 'Authorization: Bearer <token>'What that version held — its recipe, migrated to the current schema version on read, who made it and the import it was saved from — however old it is: an import that copied a version long ago reads that one by its number, where paging the history newest first might never reach it (#1065 review). The template is seen as GET …/templates/{id} sees it: shared with the org, or the caller’s own.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The org id the session was issued for. A token for one org can never read another.
Example
org_9f3cThe org id the session was issued for. A token for one org can never read another.
The template id.
Example
b3f1c8a2The template id.
The version’s number: 1 for the first.
Example
3The version’s number: 1 for the first.
Responses
Section titled “Responses”The version.
object
object
The recipe at this version, migrated to the current schema version on read. Null when it could not be migrated.
Why config could not be migrated, when it could not.
The configuration version the recipe was built against, as its save REPORTED it (#616): an agent’s save over MCP stamps the version it checked the recipe against, and a repository’s push the version it wrote (none when another write landed while it wrote the configuration, which it checks before its templates; one landing while the templates are saved is outside that check, and the stamp stays, #650); any other save, the registryVersion it sent — a label the server stores for any version the org has reached, not one it checked. null when the save said none.
Who made it: a person, a person’s API token, an agent over MCP, or a configuration repo’s push. History, not a lock — only managedBy on the template refuses changes.
The person, or the person a token or an agent acted for.
Their name, or their address when they have cleared it — including somebody who has since left the org. A deleted person reads as one.
The import it was saved from. Null for a version that came from no import, or once that import has gone.
Example
{ "version": { "madeBy": "user" }}No bearer, or one that is expired, revoked or no longer resolves to a member.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}The bearer’s role is too low, or it was issued for a different org.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}No such template, or version (code: VERSION_NOT_FOUND) — a number the template has not reached, or not a number, or it is not visible to this session.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}