Docs
Open the console →
API reference

API reference: Blueprint catalog

Cushy blueprint-catalog API: list the managed + own-org catalog, create/update/delete your organization's own blueprints, and import a definition from a connected repo.

Your organization's own blueprints, alongside the read-only platform-managed catalog (synced by staff from a Git source of native .tf blueprint folders — see Build your own Terraform blueprint). Reads are open to members; writes need mutate_infra. Platform rows and cross-org ids answer 404 on mutation.

GET/api/blueprintsSession or Bearer

List the catalog visible to your org: platform-managed blueprints plus your own. Own rows include the definition; the response also carries the native .tf file rendering for the catalog view.

Example response
json
{ "blueprints": [ { "id": 4, "blueprintId": "custom/org/team-s3-bucket", "slug": "team-s3-bucket",
  "title": "Team S3 bucket", "provider": "AWS", "tfType": "aws_s3_bucket", "enabled": true, "own": true } ] }
Errors
StatusWhen
401Not signed in.
POST/api/blueprintsmutate_infra

Create an own-org blueprint from { slug, title, description, provider, resourceType, tfType, fields, module } — or import one from a connected repo with { fromRepo: { connectionId, path } } (the path may point at a native .tf blueprint file or folder; legacy .tf.json/.json still parse). Validation rejects terraform/provider/backend blocks in the module.

Example request
json
{
  "slug": "acme-bucket",
  "title": "Acme logging bucket",
  "provider": "AWS",
  "resourceType": "storage",
  "tfType": "aws_s3_bucket",
  "fields": [ { "key": "name", "label": "Name", "type": "string", "required": true } ],
  "module": { "resource": { "aws_s3_bucket": { "this": { "bucket": "${var.name}" } } } }
}
// or import the definition from a connected repo:
// { "fromRepo": { "connectionId": 3, "path": "blueprints/acme-bucket" } }
Example response
json
{ "blueprint": { "id": "custom/org/acme-bucket", "slug": "acme-bucket", "title": "Acme logging bucket",
  "provider": "AWS", "tier": "custom", "enabled": true } }
Errors
StatusWhen
400Validation failed (the error names the field/block).
403Role lacks mutate_infra.
409Duplicate slug in your catalog.

PATCH /api/blueprints/{id} updates or toggles { enabled }; DELETE /api/blueprints/{id} removes an own blueprint. The deployable union (built-ins + enabled platform + enabled own) is what `GET /api/terraform/blueprints` returns.