Skip to main content

Cloider REST API overview

The Cloider REST API is the HTTP interface behind the dashboard, the cloider CLI, the Terraform provider and the MCP server. Everything those tools do, you can do with plain HTTPS requests that send and receive JSON: create a Kubernetes cluster, deploy an app, resize a database, upload a file to a bucket or add a DNS record.

This page explains the conventions every endpoint follows, walks you through a first request, and lists every endpoint with a link to its reference page.

At a glance​

Base URLhttps://cloider.com/api
ProtocolHTTPS only. JSON request and response bodies, with a few plain text and streaming exceptions listed below
AuthenticationAn API token in the Authorization: Bearer cldr_... header. See Authentication
Token scopeOne account per token, with Read or Read & Write access
Resource idsShort opaque ids such as k3x9p (hashed_id), domain names for domains, numeric ids for DNS records
ErrorsJSON {"errors": {"field": ["message"]}, "data": null}, with general messages under _. See Errors
Rate limits10 requests a second and 100 requests a minute per client. See Rate limits
Long running workCreate, pause, resume, restore and delete answer at once; poll the resource's /status endpoint until it settles
VersioningOne unversioned API. The CLI, Terraform provider and dashboard use the same routes you do

Who should use the API?​

Use the REST API when you write your own integration: an internal tool, a deployment script in a language without a Cloider SDK, a chatbot, or a CI system where installing the CLI isn't practical. Every request is an ordinary HTTPS call, so any language with an HTTP client works.

If one of the higher level tools fits, it is usually less work:

ToolWhen it is the better choice
CLIShell scripts and CI jobs. It resolves names to ids, waits for operations and retries rate limits for you
TerraformDeclaring clusters, databases, buckets, registries, domains and DNS as code that is reviewed and applied
MCP serverLetting an AI agent such as Claude or Cursor manage your resources

All of them call the endpoints documented here, so anything you learn on these pages applies to them too.

Base URL​

Every endpoint lives under one base URL:

https://cloider.com/api

The paths in this reference are relative to it. GET /clusters means:

curl https://cloider.com/api/clusters \
-H "Authorization: Bearer $CLOIDER_TOKEN"

There is no version segment in the path and no regional endpoint. Object storage, the container registry and your databases have endpoints of their own (an S3 endpoint per bucket region, registry.cloider.com, a host per database), and the API tells you what they are in each resource's response.

Make your first request​

The quickest way to check that your token works is GET /whoami, which tells you who the token acts as and in which account.

1. Create an API token​

Open Access Control in the dashboard, go to the API Tokens tab and create a token. Pick Read for a token that only looks, or Read & Write for one that can change things. The token is shown once, so copy it right away. API tokens walks through it with screenshots.

2. Keep the token in an environment variable​

export CLOIDER_TOKEN=cldr_xxxxxxxxxxxxxxxxxxxxxxxx

CLOIDER_TOKEN is the variable every example in these docs uses, and the one the CLI reads, so the same variable serves both.

3. Call /whoami​

curl https://cloider.com/api/whoami \
-H "Authorization: Bearer $CLOIDER_TOKEN"
Response
{
"user": {
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"picture": "",
"plan": "Paid",
"trial_end_date": null,
"suspended": false
},
"account": {
"first_name": "Acme",
"last_name": "Inc",
"email": "ops@example.com",
"picture": "",
"plan": "Paid",
"trial_end_date": null,
"suspended": false
},
"role": "Admin",
"token": {
"hashed_id": "q2m7c",
"description": "Deploy script",
"read_only": false,
"creator": {
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"picture": ""
},
"last_used_at": "2026-10-19T08:41:12.311207Z",
"created_at": "2026-10-02T14:03:55.120941Z"
}
}

user is the member who created the token, account is the account the token works in, and role is that member's current role there (Owner, Admin or Restricted). A read only token always reports Restricted. If you get 401 instead, the token is wrong or was revoked; see Authentication.

4. List something​

With the token working, list the account's Kubernetes clusters:

curl https://cloider.com/api/clusters \
-H "Authorization: Bearer $CLOIDER_TOKEN"
Response
[
{
"hashed_id": "k3x9p",
"cluster_name": "staging",
"cluster_label": "staging",
"cluster_version": "1.34",
"is_ha": false,
"status": "Ready",
"created_at": "2026-10-12T10:22:41.502113Z"
}
]

The hashed_id is what every other cluster endpoint takes in its path, for example GET /clusters/k3x9p/status.

Request conventions​

Headers​

HeaderWhenValue
AuthorizationEvery request except GET /pricingBearer cldr_...
Content-TypeRequests with a JSON body (POST, PUT, some DELETE)application/json
AcceptStreaming endpointstext/event-stream (optional, the stream is sent either way)
Last-Event-IDReconnecting to a build log streamThe id of the last event you received

Request bodies​

Write endpoints take a JSON object. Field names are snake_case, the same names the API uses in its responses (cluster_name, database_plan, read_only). A field you leave out takes its zero value: an empty string, 0, false or an empty list. The reference page of each endpoint marks which fields are required and what the defaults are.

A few DELETE endpoints take a JSON body too, for example DELETE /apps/:hashed_id takes the free subdomains to delete with the app. Most HTTP clients support a body on DELETE; with curl, pass -d as usual.

Query parameters​

Filters, pagination and a few ids travel in the query string, for example GET /buckets/k3x9p/objects?prefix=images/ or GET /database/password?id=d7f2m. URL encode values that contain /, spaces or other reserved characters (curl -G --data-urlencode does this for you).

CORS​

The API sends permissive CORS headers, so a browser can call it from any origin. That doesn't make it a good idea to put a token in a public web page: anyone who opens the page can read the token. Call the API from a server, a script or CI, and keep tokens in secrets.

How resources are identified​

Most resources have a short, opaque id called hashed_id, made of lower case letters and digits (for example k3x9p). It is in every list and create response, and it is what the path parameters named :hashed_id expect. The API does not look resources up by name: pass the id. The CLI and Terraform accept names because they list the resources first and pick the matching id for you.

ResourceIdentified in paths byExample
Clusters, databases, apps, bucketshashed_id/clusters/k3x9p, /apps/a8q2w
Bucket keys, registry tokens, targetshashed_id/bucket-keys/b5n1t
Registry projectshashed_id/registry/projects/r4c8z
App buildsthe build's hashed_id, under the app/apps/a8q2w/builds/u9e3k/logs
Git connectionsthe installation's hashed_id/git/github/installations/g2h6v/repos
Support tickets and attachmentshashed_id, in upper case/support/tickets/K7Q2M
Domainsthe domain name itself/domains/example.com
DNS recordsthe record's numeric id/dns-records/1042
Registry immutability rules, retention runs and tasksthe numeric id from their list endpoint/registry/projects/r4c8z/retention/runs/57
Uploaded app sourcethe source_token the upload returned/apps/source/<token>

Three database endpoints take the id in the query string instead of the path: GET /database/password?id=..., GET /database/cert?id=... and GET /database/backups?id=....

Names, labels and ids​

Clusters, databases and apps also have a name you choose and a label that is unique in the account. Names don't have to be unique: if the account already has a cluster named staging, a second one gets the label staging-1. The dashboard and CLI show the label; the API returns both (cluster_name and cluster_label, database_name and database_label, app_name and app_label). Only the hashed_id is guaranteed never to change.

Response conventions​

Successful responses​

A successful response is the resource itself, not wrapped in an envelope. A list endpoint answers with a JSON array, a single resource with a JSON object:

[{"hashed_id": "k3x9p", "cluster_name": "staging", "status": "Ready"}]

Some write endpoints answer with the updated list of things you just changed (for example changing a bucket key returns every key of the account), so you can refresh a view without a second request. Each endpoint's page shows its exact response.

A list that has nothing in it is [], never null, and a JSON object with no keys is {}.

Plain text responses​

A handful of endpoints answer with plain text because that is what you want to save or compare:

EndpointBody
GET /clusters/:hashed_id/status (and the same for databases, buckets, registry projects, apps)The status word, for example Ready
GET /clusters/:hashed_id/kubeconfigThe kubeconfig YAML file
GET /database/passwordThe database password
GET /database/certThe CA certificate in PEM format
GET /apps/:hashed_id/builds/:build_hashed_id/logsThe build log

Streaming responses​

Logs are streamed as server-sent events (text/event-stream): GET /apps/:hashed_id/logs/stream for a running app and GET /apps/:hashed_id/builds/:build_hashed_id/logs/stream for a build. The exec endpoints (POST /clusters/:hashed_id/exec and the database and app equivalents) also answer with an event stream. Read them with curl -N so curl doesn't buffer the output. Apps and App builds show the event format.

Redirects and presigned URLs​

Large files never pass through the API. To upload or download a bucket object, an app's source archive or a support attachment, the API hands you a short lived presigned URL on the storage service, and you send the bytes there directly. Most endpoints return the URL in their JSON answer; the support attachment download answers with a 302 redirect to it instead, so pass -L to curl to follow it. The flows are described step by step on Bucket objects, Apps and Support.

Field types​

JSON typeUsed forExample
stringids, names, statuses, enums"hashed_id": "k3x9p", "status": "Ready"
string, RFC 3339 timestampcreated_at, updated_at, last_used_at and other times"2026-10-12T10:22:41.502113Z"
string, month namethe month of a bill or of usage figures"month": "October 2026"
numbersizes in bytes, ports, counts, amounts of money"size_bytes": 1048576, "total_cost": 4.27
booleanflags"read_only": true
nullan optional value that isn't set"last_used_at": null

Timestamps carry fractional seconds and a time zone offset, so parse them with an RFC 3339 parser rather than a fixed format. Days in usage figures are timestamps at midnight, for example "date": "2026-10-19T00:00:00Z". Amounts of money are plain JSON numbers in the account's billing currency.

Statuses​

Resources that take time to provision have a status. Clusters, databases and apps share these values:

StatusMeaning
Creating, StartingBeing provisioned or started
ReadyRunning and usable
Pausing, PausedBeing stopped, or stopped with its data kept
UpgradingA change, such as a database resize, is being applied
Terminating, TerminatedBeing deleted, or deleted
FailedProvisioning or an operation failed

Apps and their builds use a few more (Pending, Queued, Building, Deploying, Superseded, Canceled). Status values lists every status of every product.

Long running operations​

Creating, pausing, resuming, restoring and deleting a resource takes from seconds to minutes. These endpoints don't wait: they accept the request, start the work and answer right away, usually with the resource in a transitional status such as Creating or Pausing. You then poll the resource's status endpoint until it reaches the status you want.

Wait for a new cluster to become Ready
until [ "$(curl -s https://cloider.com/api/clusters/k3x9p/status \
-H "Authorization: Bearer $CLOIDER_TOKEN")" = "Ready" ]; do
sleep 5
done
echo "Cluster is ready"

Poll every few seconds, not in a tight loop: every poll counts against the rate limit. Stop when the status is Failed too. The CLI's --wait flag does exactly this.

OperationEndpoint to pollDone when
Create or resume a clusterGET /clusters/:hashed_id/statusReady
Pause a clusterGET /clusters/:hashed_id/statusPaused
Create, resume, resize or restore a databaseGET /databases/:hashed_id/statusReady
Create a bucketGET /buckets/:hashed_id/statusReady
Create a registry projectGET /registry/projects/:hashed_id/statusReady
Deploy an appGET /apps/:hashed_id/builds (the build's status)Ready or Failed
Delete a cluster, database or appits status endpointTerminated
Delete a bucket or registry projectits status endpoint404

Retries and idempotency​

The API has no idempotency keys, so a request that is sent twice runs twice. Follow these rules, which are the ones the CLI applies:

  • Reads (GET) are always safe to retry, including after a timeout or a 502, 503 or 504.
  • A 429 Too Many Requests means the request was turned away before it reached the API, so it is safe to retry any request after waiting. See Rate limits.
  • Writes (POST, PUT, DELETE) that timed out or failed with a 5xx may have gone through. Read the resource back before you try again. A second POST /clusters with the same name, for example, creates a second cluster labelled staging-1 rather than failing.
  • PUT endpoints replace a setting with the value you send (trusted sources, environment variables, lifecycle and CORS rules), so sending the same body again leaves the same result.

Roles and permissions​

A token can never do more than the member who created it can do in the account, and its access is checked on every request. If the member is removed or deactivated, their tokens stop working at once; if they are made Restricted, their tokens become read only. Authentication has the details, and Accounts and roles explains the roles.

What the API doesn't cover​

  • Signing in and connecting git providers. Signing in to the dashboard and connecting GitHub, GitLab or Bitbucket happen in the browser, so an API token can't do them. Once a provider is connected, Cloider picks up its pushes by itself.
  • Members and API tokens. Inviting and removing members, changing their roles, and creating, changing or deleting API tokens are done in the dashboard only, so a leaked token can't hand out more access. You can list members and tokens, and a token can revoke itself. See Authentication.
  • The workloads themselves. Inside a Kubernetes cluster you use the standard Kubernetes API with the cluster's kubeconfig; inside a bucket, any S3 client; inside the registry, docker; inside a database, its own client. The Cloider API manages the resources, not what runs in them.

Endpoint index​

Every endpoint you can call with an API token, grouped as in the sidebar. The Access column says what can call it: Read works with any token, Write needs a Read & Write token, and Public needs no token.

Account​

Account endpoints: who you are, options, pricing, usage, billing, members and API tokens.

MethodPathWhat it doesAccess
GET/whoamiWho the token acts as, in which account, with which roleRead
GET/dashboardThe number of clusters in the accountRead
GET/optionsCluster versions, database engines and plans, subdomain roots, nameserversRead
GET/pricingCurrent prices of every productPublic
GET/usageMonth to date usage and cost of every resourceRead
GET/billingMonthly billsRead
GET/membersMembers of the accountRead
GET/api-tokensList API tokensRead
DELETE/api-tokens/currentRevoke the token that makes the requestRead

Kubernetes clusters​

Cluster endpoints.

MethodPathWhat it doesAccess
GET/clustersList clustersRead
POST/clustersCreate a clusterWrite
GET/clusters/:hashed_id/statusA cluster's status, as plain textRead
GET/clusters/:hashed_id/kubeconfigDownload the kubeconfigRead
POST/clusters/:hashed_id/pausePause a clusterWrite
POST/clusters/:hashed_id/resumeResume a paused clusterWrite
DELETE/clusters/:hashed_idDelete a clusterWrite
GET/clusters/servicesServices in the account's clusters, for targetsRead
GET/clusters/:hashed_id/terminalOpen a web terminalWrite
POST/clusters/:hashed_id/execRun one kubectl or helm commandWrite

Databases​

Database endpoints.

MethodPathWhat it doesAccess
GET/databasesList databasesRead
POST/databasesCreate a databaseWrite
GET/databases/:hashed_idA database with its connection detailsRead
GET/databases/:hashed_id/statusA database's status, as plain textRead
GET/database/password?id=The database password, as plain textRead
GET/database/cert?id=The CA certificate, as PEMRead
GET/database/backups?id=List backupsRead
GET/databases/:hashed_id/pitr-windowThe point-in-time windowRead
POST/databases/:hashed_id/restoreRestore a backupWrite
POST/databases/:hashed_id/pausePause a databaseWrite
POST/databases/:hashed_id/resumeResume a paused databaseWrite
DELETE/databases/:hashed_idDelete a databaseWrite
PUT/databases/:hashed_id/planResize to another planWrite
PUT/databases/:hashed_id/labelRename (change the label)Write
PUT/databases/:hashed_id/sslTurn SSL on or offWrite
PUT/databases/:hashed_id/trusted-sourcesReplace the trusted sourcesWrite
GET/databases/:hashed_id/insightsCPU, memory, storage and connection insightsRead
GET/databases/:hashed_id/terminalOpen a web terminalWrite
POST/databases/:hashed_id/terminal/wakeStart the terminal's client environmentWrite
POST/databases/:hashed_id/terminal/heartbeatKeep the terminal awakeWrite
POST/databases/:hashed_id/execRun one query or commandWrite

Object storage​

Bucket endpoints, bucket object endpoints and bucket key endpoints.

MethodPathWhat it doesAccess
GET/bucketsList bucketsRead
POST/bucketsCreate a bucketWrite
GET/buckets/regionsRegions a bucket can be created inRead
GET/buckets/:hashed_idA bucketRead
DELETE/buckets/:hashed_idDelete a bucketWrite
GET/buckets/:hashed_id/statusA bucket's status, as plain textRead
GET/buckets/:hashed_id/usageA bucket's usage and costRead
PUT/buckets/:hashed_id/visibilityMake a bucket public or privateWrite
PUT/buckets/:hashed_id/policySet a bucket policyWrite
DELETE/buckets/:hashed_id/policyRemove the bucket policyWrite
GET/buckets/:hashed_id/versioningVersioning statusRead
PUT/buckets/:hashed_id/versioningTurn versioning on or offWrite
GET/buckets/:hashed_id/lifecycleLifecycle rulesRead
PUT/buckets/:hashed_id/lifecycleReplace the lifecycle rulesWrite
GET/buckets/:hashed_id/corsCORS rulesRead
PUT/buckets/:hashed_id/corsReplace the CORS rulesWrite
GET/buckets/:hashed_id/objectsList folders and filesRead
POST/buckets/:hashed_id/objects/uploadGet presigned upload URLsWrite
GET/buckets/:hashed_id/objects/downloadGet a presigned download URL for a fileRead
POST/buckets/:hashed_id/objects/deleteDelete files and foldersWrite
POST/buckets/:hashed_id/foldersCreate a folderWrite
GET/buckets/:hashed_id/objects/versionsVersions of a fileRead
GET/buckets/:hashed_id/objects/deletedDeleted files that can be restoredRead
POST/buckets/:hashed_id/objects/restoreRestore a deleted file or an old versionWrite
POST/buckets/:hashed_id/objects/versions/deleteDelete versions of a file for goodWrite
GET/bucket-keysList S3 access keysRead
POST/bucket-keysCreate an S3 access keyWrite
PUT/bucket-keys/:hashed_idChange a key's name, buckets or accessWrite
DELETE/bucket-keys/:hashed_idDelete a keyWrite

Container registry​

Registry endpoints and registry token endpoints.

MethodPathWhat it doesAccess
GET/registry/projectsList registry projectsRead
POST/registry/projectsCreate a projectWrite
GET/registry/projects/optionsRegistry host and storage limitsRead
GET/registry/projects/:hashed_idA projectRead
DELETE/registry/projects/:hashed_idDelete a projectWrite
GET/registry/projects/:hashed_id/statusA project's status, as plain textRead
GET/registry/projects/:hashed_id/usageA project's usage and costRead
GET/registry/projects/:hashed_id/summaryLive repository count and storage usedRead
PUT/registry/projects/:hashed_id/settingsChange visibility and storage limitWrite
PUT/registry/projects/:hashed_id/immutable-tagsTurn immutable tags on or offWrite
GET/registry/projects/:hashed_id/repositoriesList repositoriesRead
POST/registry/projects/:hashed_id/repositories/deleteDelete a repositoryWrite
GET/registry/projects/:hashed_id/artifactsList images in a repositoryRead
POST/registry/projects/:hashed_id/artifacts/deleteDelete an imageWrite
POST/registry/projects/:hashed_id/tags/deleteRemove a tagWrite
GET/registry/projects/:hashed_id/retentionRetention rules and scheduleRead
PUT/registry/projects/:hashed_id/retention/rulesReplace the retention rulesWrite
PUT/registry/projects/:hashed_id/retention/scheduleSet the retention scheduleWrite
GET/registry/projects/:hashed_id/retention/runsList retention runsRead
POST/registry/projects/:hashed_id/retention/runsStart a retention run or dry runWrite
GET/registry/projects/:hashed_id/retention/runs/:run_idA run's tasksRead
GET/registry/projects/:hashed_id/retention/runs/:run_id/tasks/:task_idWhat a task kept and deletedRead
GET/registry/projects/:hashed_id/immutabilityList immutability rulesRead
POST/registry/projects/:hashed_id/immutabilityAdd an immutability ruleWrite
PUT/registry/projects/:hashed_id/immutability/:rule_idChange a ruleWrite
DELETE/registry/projects/:hashed_id/immutability/:rule_idDelete a ruleWrite
GET/registry/tokensList registry tokensRead
POST/registry/tokensCreate a registry tokenWrite
PUT/registry/tokens/:hashed_idChange a registry tokenWrite
DELETE/registry/tokens/:hashed_idDelete a registry tokenWrite

Apps​

App endpoints, app build endpoints and git endpoints.

MethodPathWhat it doesAccess
GET/appsList appsRead
POST/apps/sourceGet a presigned URL to upload source codeWrite
GET/apps/source/:tokenDetection result for uploaded sourceRead
POST/apps/source/:token/detectStart detecting the language and portWrite
POST/apps/source/githubImport source from a GitHub repositoryWrite
POST/apps/source/gitlabImport source from a GitLab projectWrite
POST/apps/source/bitbucketImport source from a Bitbucket repositoryWrite
POST/appsCreate an appWrite
GET/apps/:hashed_idAn appRead
GET/apps/:hashed_id/statusAn app's status, as plain textRead
GET/apps/:hashed_id/usageAn app's usage and costRead
POST/apps/:hashed_id/pausePause an appWrite
POST/apps/:hashed_id/resumeResume a paused appWrite
DELETE/apps/:hashed_idDelete an appWrite
PUT/apps/:hashed_id/settingsChange port or start commandWrite
PUT/apps/:hashed_id/gitChange branch or auto deployWrite
GET/apps/:hashed_id/envList runtime environment variablesRead
PUT/apps/:hashed_id/envReplace runtime environment variablesWrite
GET/apps/:hashed_id/env/valueReveal one secret variableRead
GET/apps/:hashed_id/build-envList build environment variablesRead
PUT/apps/:hashed_id/build-envReplace build environment variablesWrite
GET/apps/:hashed_id/build-env/valueReveal one secret build variableRead
GET/apps/:hashed_id/build-argsList Dockerfile build argumentsRead
PUT/apps/:hashed_id/build-argsReplace Dockerfile build argumentsWrite
GET/apps/:hashed_id/build-args/valueReveal one secret build argumentRead
GET/apps/:hashed_id/logs/streamStream the app's logsRead
GET/apps/:hashed_id/terminalOpen a web terminalWrite
POST/apps/:hashed_id/terminal/wakeStart the terminal's shell environmentWrite
POST/apps/:hashed_id/terminal/heartbeatKeep the terminal awakeWrite
POST/apps/:hashed_id/execRun one command in the appWrite
GET/apps/:hashed_id/buildsList buildsRead
POST/apps/:hashed_id/buildsStart a build from new uploaded sourceWrite
POST/apps/:hashed_id/builds/gitBuild the latest commit of the app's branchWrite
POST/apps/:hashed_id/builds/:build_hashed_id/uploadedConfirm the source upload, starting the buildWrite
POST/apps/:hashed_id/builds/:build_hashed_id/retryRetry a buildWrite
GET/apps/:hashed_id/builds/:build_hashed_id/logsA build's log, as plain textRead
GET/apps/:hashed_id/builds/:build_hashed_id/logs/streamStream a build's logRead
GET/git/github/installationsGitHub connectionsRead
GET/git/github/installations/:installation_hashed_id/reposRepositories of a GitHub connectionRead
GET/git/github/installations/:installation_hashed_id/branchesBranches of a GitHub repositoryRead
DELETE/git/github/installations/:installation_hashed_idDisconnect GitHubWrite
GET/git/gitlab/installationsGitLab connectionsRead
GET/git/gitlab/installations/:installation_hashed_id/reposProjects of a GitLab connectionRead
GET/git/gitlab/installations/:installation_hashed_id/branchesBranches of a GitLab projectRead
DELETE/git/gitlab/installations/:installation_hashed_idDisconnect GitLabWrite
GET/git/bitbucket/installationsBitbucket connectionsRead
GET/git/bitbucket/installations/:installation_hashed_id/reposRepositories of a Bitbucket connectionRead
GET/git/bitbucket/installations/:installation_hashed_id/branchesBranches of a Bitbucket repositoryRead
DELETE/git/bitbucket/installations/:installation_hashed_idDisconnect BitbucketWrite

Domains and DNS​

Domain endpoints, DNS record endpoints and target endpoints.

MethodPathWhat it doesAccess
GET/domainsList domainsRead
POST/domainsAdd a custom domain or claim a free subdomainWrite
GET/domains/availabilityCheck whether a free subdomain is availableRead
GET/domains/:domain_nameA domainRead
DELETE/domains/:domain_nameDelete a domainWrite
GET/domains/:domain_name/dns-recordsList a domain's DNS recordsRead
POST/domains/:domain_name/dns-recordsAdd a DNS recordWrite
GET/dns-records/:record_idA DNS recordRead
PUT/dns-records/:record_idChange a DNS recordWrite
DELETE/dns-records/:record_idDelete a DNS recordWrite
GET/targetsList targetsRead
POST/targetsRoute a domain path to an app or cluster serviceWrite
PUT/targets/:hashed_idChange a targetWrite
DELETE/targets/:hashed_idDelete a targetWrite

Support​

Support endpoints.

MethodPathWhat it doesAccess
GET/supportList support ticketsRead
GET/support/tickets/:hashed_idA ticket with its repliesRead
POST/support/ticketsOpen a ticketWrite
POST/support/tickets/:hashed_id/replyReply to a ticketWrite
POST/support/attachments-uploadedConfirm attachment uploadsWrite
GET/support/attachments/:hashed_idDownload an attachment (redirect)Read

Frequently asked questions​

Frequently asked questions

What is the base URL of the Cloider API?

The base URL is https://cloider.com/api. Every path in the API reference is relative to it, so GET /clusters is https://cloider.com/api/clusters. There is no version segment and no regional endpoint.

How do I authenticate to the Cloider API?

Create an API token in the dashboard under Access Control, API Tokens, and send it in the Authorization header as Bearer cldr_... on every request. Tokens are either Read or Read & Write and belong to one account.

Does the Cloider API accept resource names?

No. Endpoints take the resource id (hashed_id) in the path, except domains, which are addressed by their domain name, and DNS records, which have a numeric id. List the resources to find an id. The CLI and Terraform accept names because they do this lookup for you.

Is there an OpenAPI or Swagger file?

No machine readable specification is published. These pages document every endpoint with its parameters, request body, response and errors. The Go types in the open source Terraform provider mirror the response shapes if you want to generate a client.

How do I know when a cluster or database is ready?

Create requests answer at once. Poll GET /clusters/{id}/status or GET /databases/{id}/status every few seconds until the plain text answer is Ready, and stop on Failed.

Can I call the Cloider API from a browser?

The API allows cross origin requests, so it works from browser code. Never ship a token in a public page, though: anyone could read it. Call the API from a server, script or CI job.

Are the CLI and Terraform provider using the same API?

Yes. The cloider CLI, the MCP server, the Terraform provider and the dashboard call the same endpoints documented here. Run any CLI command with --debug to see the requests it makes.