Cloud API Docsv2 referenceAPI v1 · REST · JSON
Integrate the Cloud API with clear, working references.
Authenticate, call endpoints, and handle responses — organized so you can go from overview to a first successful request without guesswork.
One API to provision, secure, and observe cloud resources.
A versioned REST interface with predictable JSON, scoped credentials, and copy-ready examples for every call.
- 01Platform
Create and manage projects, compute instances, storage buckets, and event streams through a single base URL.
- 02Authentication
API keys for servers and OAuth 2.0 tokens for user-facing apps, each scoped per project.
Go to Authentication - 03Endpoints
Grouped by resource —
Go to Endpoints/projects,/instances,/storage,/events— with methods, parameters, and status codes. - 04Examples
Every endpoint ships a curl request and a full JSON response you can copy straight into your client.
- 05FAQ
Rate limits, error handling, pagination, and versioning answered in one place.
Go to FAQ
02 · Getting access
Authentication#
Every call to the Cloud API is authorized with a short-lived bearer token issued from your API credentials. Set it up once, then reuse the same header on every endpoint.
Create API credentials
In the dashboard, open Settings → API Keys and generate a
client_idandclient_secret. Create separate pairs for sandbox and production.Exchange them for an access token
Send your credentials to
POST /oauth/tokenwithgrant_type=client_credentials. Tokens are valid for 3600 seconds; request a new one beforeexpires_inelapses.Authorize each request
Add the token to the
Authorizationheader asBearer <token>. Missing or expired tokens return 401 Unauthorized.Keep secrets server-side
Never ship a
client_secretin browser or mobile code, and never commit it to version control. Rotate keys immediately if one is exposed.
# 1. Request an access token
curl -X POST https://api.cloudapi.dev/oauth/token \
-d grant_type=client_credentials \
-d client_id=$CLOUD_API_CLIENT_ID \
-d client_secret=$CLOUD_API_CLIENT_SECRET
# 2. Call any endpoint with the token
curl https://api.cloudapi.dev/v1/projects \
-H "Authorization: Bearer $CLOUD_API_TOKEN" \
-H "Content-Type: application/json"
# 200 OK
{ "data": [ ... ], "request_id": "req_8f2c41" }Authenticated? You can now call any endpoint.
Next: EndpointsReference · 03
Endpoints
The API is organized into four resource groups. Every path is versioned, returns JSON, and follows the same pagination, error, and authentication conventions.
- Base URL
https://api.cloudapi.dev/v1- Format
- application/json
- #
Projects
Create and manage the top-level containers that own every other resource.
GET/v1/projectsNote: Paginated with
cursorandlimit; returns 20 items by default. - #
Deployments
Ship, roll back, and inspect service releases within a project.
POST/v1/projects/{id}/deploymentsNote: Send an
Idempotency-Keyheader so retries never create duplicate releases. - #
Storage
Upload, list, and retrieve objects in managed buckets.
PUT/v1/buckets/{bucket}/objects/{key}Note: Objects larger than 100 MB should use the multipart upload flow.
- #
Webhooks
Subscribe to platform events and receive them at your own URL.
POST/v1/webhooksNote: Verify the
X-Signatureheader on every delivery before processing.
Every endpoint requires a bearer token.Review AuthenticationCommon questions
Reference · FAQ
Common integration blockers#
Short, practical answers to the issues developers hit most often during integration.
5 answers
01Why do my requests return 401 Unauthorized?
Send your key in the Authorization: Bearer <API_KEY> header — never as a query parameter. Confirm the key matches the environment you are calling (test keys fail against live), and refresh expired access tokens before retrying.
02What are the rate limits, and what happens when I exceed them?
Each key allows 600 requests per minute by default. Over the limit you receive 429 with a Retry-After header. Track X-RateLimit-Remaining and back off exponentially instead of retrying immediately.
03How is the API versioned?
The major version lives in the path, e.g. /v2/. Within a version we only ship additive changes — new fields and endpoints. Breaking changes arrive in a new major version, with at least 12 months of notice via the Sunset header.
04How should my client handle errors?
Every error returns JSON with error.code, error.message, and request_id. Treat 4xx as client errors: fix the request rather than retrying (except 429). Retry 5xx with backoff, and send an Idempotency-Key on writes so retries are safe.
05Something still fails. Where do I start troubleshooting?
- a.Capture the
X-Request-Idfrom the failing response. - b.Reproduce the call with
curl -vand compare it against the endpoint examples. - c.Still blocked? Contact support with the request ID, timestamp, and endpoint path.
Didn't find your answer? Jump back to the reference.