Review build Not the live site — unlaunched products, unfinished copy, no prices. comsky.ai →
Comsky Cloud
Sign in Try Cloud free
DEVELOPERS · 112 ENDPOINTS · 21 GROUPS

Every console action has an endpoint.

The API is not a subset bolted on afterwards — it is a second front door onto the same service layer the console calls. If you can do it by clicking, you can do it with a token: deploy, resize, rebuild, snapshot, forward a port, schedule a shutdown, open a ticket against a specific instance. One hundred and twelve endpoints across twenty-one groups, at cmp.api.comsky.ai/v1.

DEPLOY AN INSTANCEPOST /V1/INSTANCES · 202 ACCEPTED
$ curl -X POST https://cmp.api.comsky.ai/v1/instances \
  -H "Authorization: Bearer csk_live_…" \
  -H "Idempotency-Key: 7c1f-deploy-web-03" \
  -H "Content-Type: application/json" \
  -d '{
      "name": "comsky-web-03",
      "zone": "ZONE01",
      "cores": 2, "ramGb": 4, "ssdGb": 80,
      "billing": "committed"
    }'
HTTP/1.1 202 Accepted
{
  "taskId": "tsk_01JQ7…",
  "status": "provisioning",
  "instanceId": "ins_01JQ7…",
  "monthly": 1340.00, "taxable": 1135.59, "gst": 204.41,
  "dueNow": 670.00, "anchor": "2026-10-05"
}

Long operations answer 202 with a task handle you poll, rather than holding a connection open for a minute. The money in the response is the same arithmetic the pricing page publishes — the API does not quote you a different number than the website. See the formula →

The guarantee that matters

The spec cannot drift, because it is not written by hand.

Most published API documents are a second artefact maintained beside the server, and they rot — quietly, in the one field you needed. Ours cannot, because the router and the OpenAPI document are generated from the same route table at build time.

ONE ROUTE TABLE, TWO OUTPUTSGENERATED AT BUILD
routes.ts  —  path, method, scopes, request schema, response schema
    ├─→ the HTTP router the server actually runs
    └─→ the OpenAPI document the reference renders
// an endpoint that is not in the table is not served and is not documented.
// a field renamed in the table is renamed in both, in the same commit.
// there is no third place where the two could disagree.

Generated, not maintained

The reference is read straight from the OpenAPI document, and the document is read straight from the route table the server boots with. Nobody remembers to update the docs, because nobody can forget.

Scoped, narrow keys

A key carries only the scopes you grant it, and can be pinned to named instances. A key for your deploy pipeline does not have to be a key that can delete your database box.

Safe retries

Every state-changing call takes an Idempotency-Key. Replay the same key and you get the same result rather than a second instance — which is what makes it safe to retry from a queue.

Published rate limits

Limits are per key and stated up front, so you can size a batch job against them instead of discovering them at three in the morning. Long operations return 202 plus a task handle you poll.

What you can reach

A representative slice, and then all twenty-one groups.

Each row below is something you can also do by clicking. That is the test we hold the API to — not “does it expose the main objects”, but “is there a console action that has no endpoint”.

REFERENCE · SELECTED ENDPOINTS112 OF 112 · BASE CMP.API.COMSKY.AI/V1
POST /v1/instances Deploy an instance from a shape and a template
GET /v1/instances List every instance on the account, with state and rate
POST /v1/instances/{id}/resize/quote Price a resize before you commit to it
POST /v1/instances/{id}/resize Change vCPU, memory or SSD on a running instance
POST /v1/instances/{id}/rebuild Reinstall from a template in place
POST /v1/instances/{id}/console Mint a one-time web console URL
DELETE /v1/instances/{id} Move the instance to the recycle bin
POST /v1/instances/{id}/restore Bring it back out of the recycle bin
GET /v1/instances/{id}/metrics CPU, memory, disk and network — current or historical
POST /v1/schedules A cron expression in your own timezone for power actions
POST /v1/webhooks Register an endpoint and subscribe to event types
POST /v1/webhooks/{id}/deliveries/{did}/retry Retry a delivery that failed
Twelve of one hundred and twelve. The rest render from the same document. 21 GROUPS
InstancesRecycle binVolumesSnapshotsTemplatesISOsSSH keysNetworksVPCsPublic IPsPort forwardingFirewallLoad balancersVPNObject storageMetricsAlertsWebhooksSchedulesTicketsAPI keys
Tokens

A key, a header, a call — and a scope you chose.

Create a key under Account → API keys, grant it only the scopes it needs, and optionally pin it to named instances. Then it is one bearer header. There is no signing ceremony and no session to keep alive.

API KEYS · SCOPES AND PINNINGACCOUNT → API KEYS
deploy-pipelineinstances:write · templates:read · keys:readACTIVE
monitoring-readonlymetrics:read · alerts:read — pinned to comsky-db-01, comsky-web-01ACTIVE
nightly-snapshotssnapshots:write · volumes:read — pinned to comsky-db-01ACTIVE
old-laptop-keyrevoked 12 Sept 2026 — every call on it refused sinceREVOKED
Account-wide API switch ON — TURN OFF TO REFUSE EVERY CALL ON EVERY KEY
Request log · last 7 days4,182 calls · 0 rate-limited

The kill switch is not a revocation

API access can be switched off for the whole account from the portal. Every call on every key is refused while it is off, and nothing is revoked — so turning it back on does not mean reissuing keys to four services at midnight.

You can read your own traffic

Your request history and a usage summary over the last N days are themselves endpoints. When something is calling more than you expected, you can find out which key it was without asking us.

No billing surface at all

The API cannot top up the wallet, cannot change a payment method and cannot spend money you have not already deposited. The worst a leaked key can do is provision against a prepaid balance you control — and you can stop that in one switch.

Webhooks

Signed, logged, retryable — and readable after the fact.

Polling is fine for a task handle and wrong for everything else. Register an endpoint, subscribe to the event types you care about, and check the delivery log when your receiver was down.

WEBHOOK DELIVERYEVENT INSTANCE.STATE_CHANGED
POST https://ops.example.in/hooks/comsky
X-Comsky-Signature: t=1758326400,v1=9f2c…
{
  "event": "instance.state_changed",
  "instanceId": "ins_01JQ7…",
  "name": "comsky-staging",
  "from": "running", "to": "stopped",
  "cause": "schedule", "scheduleId": "sch_01JP2…",
  "occurredAt": "2026-09-20T19:00:00+05:30"
}
Attempt 1 · 19:00:02 IST502 — receiver down
Attempt 2 · retried by hand from the console200 OK

Signed, so you can verify it was us

Each delivery carries a signature over the timestamp and the body. Rotate the signing secret from the console when you need to, without tearing down the subscription.

A delivery log you can read

Every attempt is listed with the response your endpoint gave. When a receiver was down for an hour, you can see exactly what it missed rather than guessing.

Retry, by hand or by rule

A failed delivery can be retried from the console or over the API. Threshold alerts on instance metrics fire the same way, with a log of the events each rule has raised.

Everything else the surface carries

The parts that never made it onto a marketing page.

Compute

  • Deploy, resize, rebuild, reboot, stop and start
  • Quote a resize before committing to it
  • One-time web console URLs
  • Recycle bin: restore, or expunge with the disks
  • Scheduled power actions on a cron expression, in your own timezone, returning the next few firings

Storage

  • Additional data volumes — create, attach, grow, detach, delete
  • A quote endpoint before you create one
  • Volume snapshots and whole-instance snapshots, each revertible
  • Create a new volume from a snapshot
  • S3-compatible buckets with their own access key and secret

Networking

  • The isolated network and its virtual router
  • Public IPs, static NAT and port forwarding
  • Firewall and egress policy
  • Load balancers with health-checked targets
  • VPCs with tiers and per-tier ACLs — note a routed VPC type has no port forwarding, static NAT, load balancer or VPN

Observability

  • Current metrics and 14 days of history
  • CPU, memory, disk and network, sampled every 60 seconds
  • Power state polled separately every 45 seconds
  • Threshold alert rules, and the events they raised
  • Email or webhook notification

Automation & account

  • Idempotency-Key on every state-changing call
  • 202 plus a task handle for long operations
  • Signed webhooks with delivery log and retry
  • Your own request history and usage summary
  • A dependency-free TypeScript SDK, if you would rather not write the curl

Support

  • Open a ticket over the API
  • Pin a ticket to a specific instance
  • So an alert in your monitoring can open a ticket in ours
  • Read the thread back the same way
  • P1 acknowledged in one hour, 24×7

Object storage, additional volumes and VPCs are reachable over the API and are not yet sold as their own products. We would rather tell you they exist than let you find them in the reference and wonder why nobody mentioned it.

Questions

About building against it.

Where is the base URL and how do I authenticate?

Everything lives under https://cmp.api.comsky.ai/v1 and authenticates with a bearer token you create under Account → API keys. One header, no signing ceremony, no session to refresh.

Is the whole console available, or a subset?

The whole surface. One hundred and twelve endpoints across twenty-one groups, covering provisioning, storage, networking, monitoring, automation and support. The API and the console call the same service layer; neither is a wrapper over the other.

How do I know the documentation matches the server?

Because neither is written by hand. The route table declares the path, the method, the scopes and the request and response schemas; the HTTP router and the OpenAPI document are both generated from it. An endpoint that is not in the table is neither served nor documented.

Is it safe to retry a failed call?

Yes, if you send an Idempotency-Key — and every state-changing endpoint accepts one. Replaying the same key returns the original result instead of creating a second resource, which is what makes it safe to drive from a job queue.

Can a leaked key cost me money?

Only up to the prepaid balance already in your wallet. The API has no billing surface: it cannot top up, cannot change a payment method and cannot invoice you. Scope keys narrowly, pin them to named instances, and use the account-wide switch to refuse every call at once while you sort it out.

Can I deploy a GPU instance over the API?

No. POST /v1/instances takes cores, ramGb and ssdGb. There is no accelerator field because there is no GPU product yet — the GPU page says exactly where that stands.

Is there an SDK, or a Terraform provider?

There is a dependency-free TypeScript SDK. A Terraform provider is the kind of thing people build on top of an API this shape, and several have asked — but we do not publish one today and will not imply otherwise.

What are the rate limits?

Published per key, so you can size a batch against them rather than discovering them in production. Long-running operations answer 202 with a task handle you poll, which keeps a big provisioning run from burning limit on held connections.

Can I turn the API off entirely?

Yes, account-wide, from the portal. Every call on every key is refused while it is off and nothing is revoked, so turning it back on does not mean reissuing keys across your estate.

Start with Comsky Cloud.
Grow into the ecosystem.

One account opens every Comsky product — and one invoice covers them, however many you run.