Pilot pricing in Lagos: servers from ₦10 an hour, Spaces from ₦6,750 a month →
Docs menu

Docs / Reference

API

10 minute read

A REST API with JSON over HTTPS. Every console action has an endpoint, and every call lands in the audit log with the key that made it.

1. Create an API key

Open API, CLI & Terraform → New API key. Give it a name, a role and an expiry. The key is shown once; store it in a secret manager.

A key belongs to the organisation and carries one role, like a teammate would. Keys can't create keys or change team access.

Terminal
export SIMPLICLOUD_TOKEN="sc_live_…"
export ORG="korafoods"
Give CI keys the Developer role and an expiry. Use Viewer for dashboards and monitoring tools that only read.

2. Make a request

Every URL starts with https://console.simplicloud.ai/api/v1/orgs/$ORG, where $ORG is your organisation's slug. Send the key as a bearer token.

Terminal
curl https://console.simplicloud.ai/api/v1/orgs/$ORG/servers \
-H "Authorization: Bearer $SIMPLICLOUD_TOKEN"
{
"data": [
{ "id": "ops-box", "status": "running", "plan": "s2",
"region": "los1", "private_ip": "172.30.4.10", "ssh_port": 20009 }
],
"next_cursor": null
}
  • Send JSON with Content-Type: application/json.
  • Times are ISO 8601 in UTC, like 2026-11-14T09:30:00Z.
  • Prices are whole naira, before VAT.
  • Add ?project=staging to work outside the Production project.

3. Endpoints

The main resources. Each also supports GET /<resource>/{id} to read one item.

MethodPathWhat it does
GET/serversList servers
POST/serversCreate a server: name, plan, image, ssh_keys
PATCH/servers/{id}Resize or turn backups on: plan, backups
POST/servers/{id}/actionsPower: {"type":"reboot"}, power_off, power_on
DELETE/servers/{id}Delete a server
GET, POST/appsList or create apps: name, repo, branch, plan
POST/apps/{id}/deploysStart a deploy
PUT/apps/{id}/env/{key}Set an environment variable
GET, POST/databasesList or create databases: engine, version, plan
GET, POST/databases/{id}/usersList or add database users
GET, POST/bucketsList or create Spaces buckets: name, acl
GET, POST/volumesList or create volumes: name, size_gb, server
GET, POST/snapshotsList or take snapshots
GET, POST/domainsList or add domains
GET, POST/domains/{domain}/recordsList or add DNS records: type, name, value, ttl
GET/billing/walletBalance and estimated days left
GET/billing/invoicesMonthly VAT invoices

4. Create things

A database and a DNS record, for example:

Terminal
curl -X POST https://console.simplicloud.ai/api/v1/orgs/$ORG/databases \
-H "Authorization: Bearer $SIMPLICLOUD_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"orders-db","engine":"postgresql","version":"16","plan":"standard"}'
curl -X POST https://console.simplicloud.ai/api/v1/orgs/$ORG/domains/korafoods.ng/records \
-H "Authorization: Bearer $SIMPLICLOUD_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"CNAME","name":"www","value":"storefront.apps.simplicloud.ai","ttl":3600}'

Creating something slow, like a server or database, returns 202 Accepted with "status": "creating". Poll the item until it is running.

5. Pagination

List endpoints return up to 20 items. Ask for up to 100 with limit, and pass next_cursor from the last response as cursor to get the next page. When next_cursor is null, you have everything.

Terminal
curl "https://console.simplicloud.ai/api/v1/orgs/$ORG/snapshots?limit=100&cursor=c_8f2a19" \
-H "Authorization: Bearer $SIMPLICLOUD_TOKEN"

6. Errors and limits

Errors come back with a status code and a JSON body you can show to people:

Response
HTTP/1.1 402 Payment Required
{
"error": {
"code": "insufficient_funds",
"message": "Your wallet balance is too low to create this server. Top up to continue."
}
}
StatusCodeWhen
400invalid_requestA field is missing or wrong. error.field names it.
401unauthorizedThe key is missing, wrong, expired or revoked.
402insufficient_fundsThe wallet can't cover the new resource.
403forbiddenThe key's role doesn't allow this action.
404not_foundNo such item in this organisation and project.
409conflictThe name is taken, or the item is busy with another change.
429rate_limitedMore than 600 requests a minute for this key. Wait for Retry-After seconds.
5xxserver_errorOur fault. Retry with backoff; the request ID is in X-Request-Id.
Was this page helpful?

Related guides

API · Docs · SimpliCloud