On this page

REST · v1Developer documentation

Cloud API documentation, built for fast implementation

Understand the platform, authenticate in minutes, explore every endpoint, and start building — all from one structured, scannable reference.

  • Clear structure
  • Fast onboarding
  • Practical reference
request-flow

01Overview

One API for compute, storage, and events.

The platform exposes cloud infrastructure as a single, versioned REST API. Provision resources, move data, and react to changes with predictable requests and consistent JSON responses.

Core capabilities

  • Resource provisioning

    POST /v1/instances

    Create, scale, and retire compute instances with idempotent requests and region-aware defaults.

  • Object storage

    PUT /v1/buckets/{id}

    Store and retrieve files of any size with signed URLs, lifecycle rules, and versioning.

  • Events & webhooks

    GET /v1/events

    Subscribe to state changes and receive signed webhook deliveries with automatic retries.

  • Usage & access control

    GET /v1/usage

    Scope keys per project, audit every call, and monitor consumption against your quotas.

02 · Authentication

Authenticate every request

Cloud API uses project-scoped API keys sent as Bearer tokens over HTTPS — four steps and you are ready to call any endpoint.

  1. Create an API key

    In the dashboard, open Settings → API keys and generate a key for your project. Choose the narrowest scope your integration needs.

  2. Store it as a secret

    Save the key in an environment variable such as CLOUD_API_KEY. Keys are shown once — copy it before closing the dialog.

  3. Send it as a Bearer token

    Add the Authorization: Bearer <key> header to every request. Plain HTTP requests are rejected.

  4. Verify the response

    A 200 confirms access. A 401 means the key is missing or invalid; 403 means it lacks the required scope.

GET
Example · authenticated request
# Store your key once
export CLOUD_API_KEY="ck_live_••••••••"

curl https://api.cloudapi.dev/v1/projects \
  -H "Authorization: Bearer $CLOUD_API_KEY" \
  -H "Content-Type: application/json"

Response

HTTP/1.1 200 OK
{
  "data": [{ "id": "prj_42", "name": "payments" }],
  "request_id": "req_8f2a91c"
}
200
Authenticated
401
Missing / invalid key
403
Insufficient scope

03 / Reference

Endpoints

Every resource follows the same REST conventions: predictable paths, JSON bodies, cursor pagination and standard HTTP status codes. Scan by group, then open an example when you need the exact shape.

Base URL
https://api.cloudapi.dev
Format
JSON
Version
v1

Projects

/v1/projects

Top-level container for deployments, keys and usage.

  • GET
    /v1/projects

    List all projects in the authenticated workspace, newest first.

    Query
    limit, cursor
    Returns
    200 · Project[]
    Example response
    {
      "data": [
        { "id": "prj_8f2k1", "name": "checkout-api", "region": "eu-west-1" }
      ],
      "next_cursor": "eyJvZmZzZXQiOjIwfQ"
    }
  • POST
    /v1/projects

    Create a project in a specific region. Names must be unique per workspace.

    Body
    name*, region*
    Returns
    201 · Project
  • GET
    /v1/projects/{project_id}

    Retrieve a single project with its region, status and created timestamp.

    Returns
    200 · Project · 404
  • PATCH
    /v1/projects/{project_id}

    Partially update a project. Omitted fields are left unchanged.

    Body
    name, labels
    Returns
    200 · Project
  • DELETE
    /v1/projects/{project_id}

    Permanently delete a project and revoke all of its keys. Irreversible.

    Returns
    204 · No content

Deployments

/v1/deployments

Asynchronous: poll status or subscribe to events.

  • POST
    /v1/projects/{project_id}/deployments

    Queue a new deployment from a build artifact. Safe to retry with an idempotency key.

    Header
    Idempotency-Key
    Body
    artifact_url*, env
    Returns
    202 · Deployment
    Example request
    curl -X POST https://api.cloudapi.dev/v1/projects/prj_8f2k1/deployments \
      -H "Authorization: Bearer $CLOUD_API_KEY" \
      -H "Idempotency-Key: 5c1e-deploy-42" \
      -d '{ "artifact_url": "s3://builds/app-1.4.2.tar", "env": "production" }'
  • GET
    /v1/deployments/{deployment_id}

    Fetch deployment status and timing. Poll no faster than once every 2 seconds.

    Status
    queued | running | succeeded | failed
  • POST
    /v1/deployments/{deployment_id}/rollback

    Roll back to the previous successful deployment in the same environment.

    Returns
    202 · Deployment · 409

API keys

/v1/keys
  • GET/v1/keys

    List keys with prefix, scopes and last-used time. Secrets are never returned.

  • POST/v1/keys

    Create a scoped key. The secret is shown once — store it immediately.

    Body  name*, scopes[]

  • DELETE/v1/keys/{key_id}

    Revoke a key. Requests using it fail with 401 within seconds.

Usage & events

/v1/usage
  • GET/v1/usage

    Aggregated request counts and compute minutes per project, grouped by day.

    Query  from*, to* (ISO 8601), project_id

  • GET/v1/events

    Audit and lifecycle events, retained for 30 days. Paginate with cursor.

Rate limits: 600 requests/min per key. Check X-RateLimit-Remaining and back off on 429.

All endpoints require a bearer token. Review authentication

Common questions

Reference / FAQ

Frequently asked questions

Short answers to the questions that most often block an integration. Each answer links back to the relevant part of the reference.

How do I make my first API call?

Create a project in the console, generate an API key, and send a request to GET /v1/health. A 200 response confirms your key and network path are working. See Overview for base URLs per region.

How should I store and send credentials?

Send tokens in the Authorization: Bearer <token> header. Keep API keys server-side only, never in client bundles. OAuth access tokens expire after 3600 seconds; on a 401, refresh once and retry. Details in Authentication.

How are endpoints versioned?

The major version is part of the path, for example /v1/projects. Additive changes ship within a version; breaking changes only arrive in a new major version. Deprecated endpoints return a Sunset header at least 12 months before removal. See Endpoints.

What does an error response look like?

Errors return JSON with code, message, and request_id. Treat 4xx as client errors to fix, not retry. On 429, wait for the Retry-After value. Retry 5xx with exponential backoff, capped at five attempts.

What support response times can I expect?

Free plans are supported through the docs and community forum. Paid plans include email support with a first response within one business day; Enterprise adds a 1-hour response for production incidents. Always include the request_id from the failing call.

Still blocked? Check the endpoint reference or reach the team.

Start building