API

The control-plane API manages instances, team and billing. It is not the API inside your running instance — that is documented separately in the product.

Base URL and authentication

https://app.thalamusaicloud.com/v1

Requests authenticate with the session cookie set at sign-in. The cookie is host-only and HttpOnly, so it is not readable from script and is never sent to your instance's subdomain.

Machine access

Long-lived API tokens are not available yet. If you need automated access, tell us what you are automating — it shapes what the tokens should be scoped to.

Instances

MethodPathDoes
GET/v1/tenantsList your instances
POST/v1/tenantsCreate one and queue provisioning
GET/v1/tenants/:idOne instance, with recent jobs
DELETE/v1/tenants/:idQueue destruction
GET/v1/jobs/:idProvisioning steps and events

Creating an instance

POST /v1/tenants
Content-Type: application/json
Idempotency-Key: your-unique-key

{
  "name": "Production",
  "subdomain": "acme-prod",
  "region": "us-east-1",
  "planId": "team"
}
Send an idempotency key

Provisioning takes minutes, so a client timeout is normal rather than exceptional. With a key, retrying returns 200 and the original job. Without one we fall back to your organisation plus the subdomain, which protects the common case but not a retry with different parameters.

Team

MethodPathDoes
GET/v1/membersMembers and pending invitations
POST/v1/members/inviteInvite someone
DELETE/v1/members/invite/:idRevoke an invitation

Billing

MethodPathDoes
GET/v1/billingSubscription state and invoices
GET/v1/billing/usagePeak usage and expected true-up

Errors

Errors are JSON, and every response carries a request id.

{
  "error": "subdomain_taken",
  "message": "That subdomain is already in use. Choose another.",
  "requestId": "5f3c1e2a-..."
}

Quote the requestId when contacting support — it identifies the exact request in our logs.

StatusMeaning
400The request is malformed or a value is invalid
401Not signed in, or the session expired
403Signed in, but your role does not allow it
404Does not exist, or is not yours
409Conflicts with something that already exists

A resource belonging to another organisation returns 404 rather than 403, so the API does not confirm that it exists.