The catalog API
Read the template catalog from a program — listings, one template, its releases, and the manifest an instance installs.
Everything on the catalog is readable as JSON, with no key and from any origin:
https://cubeship.dev/api/v1The address is permanent: a route under /v1 never changes meaning.
Responses are cached for a minute, and the catalog itself changes at
most every five.
List templates
curl -s "https://cubeship.dev/api/v1/templates?sort=stars&limit=10"| Parameter | Meaning |
|---|---|
q | Matches the repository name or description. |
tag | One of the repository's topics. |
sort | recent (the default, newest release first) or stars. |
limit | 1 to 48, 24 by default. |
cursor | The previous page's next_cursor. |
{
"templates": [
{
"owner": "cubeshipd",
"name": "cubeship-umami-template",
"title": "Umami",
"description": "Privacy-focused web analytics, with its Postgres",
"url": "https://github.com/cubeshipd/cubeship-umami-template",
"stars": 12,
"tags": ["analytics"],
"avatar_url": "https://avatars.githubusercontent.com/u/1",
"icon_url": "https://cubeship.dev/api/v1/icons/1/3f2c9e1.png",
"verified": true,
"release": {
"tag": "v1.0.0",
"name": "v1.0.0",
"url": "https://github.com/cubeshipd/cubeship-umami-template/releases/tag/v1.0.0",
"commit": "3f2c9e1…",
"published_at": "2026-09-13T03:09:09Z"
}
}
],
"next_cursor": null
}verified is true for a template published by an owner the catalog
vouches for: cubeshipd and
lucasaarch.
One template
curl -s https://cubeship.dev/api/v1/templates/cubeshipd/cubeship-umami-templateThe listing's fields, plus readme, source (the template.yaml as
written), source_url (that file on GitHub at the release's commit) and
manifest — the file normalized:
names filled in, defaults applied, internal hostnames spelled out.
The manifest alone
curl -s "https://cubeship.dev/api/v1/templates/cubeshipd/cubeship-umami-template/manifest?release=v1.0.0"Without release, the listed one. This is what an instance reads.
Releases
curl -s https://cubeship.dev/api/v1/templates/cubeshipd/cubeship-umami-template/releasesEvery release the catalog read, newest first, each with status —
accepted or rejected — and problems, the
diagnostics that refused it or the advice
that did not.
Tags and icons
GET /v1/tags is every topic a listed template carries.
GET /v1/icons/{repository}/{commit}.png is what icon_url points at,
cached forever: the commit is in the address.
Errors
{ "error": { "code": "not_found", "message": "no template is listed at that address" } }invalid_query (400), not_found (404) or unavailable (503).