NODED.CLOUD/Developers/Customer API

Provision cloud servers from your own code with our VPS API.

The NODED.CLOUD Customer API is REST over HTTPS with JSON in and out. Order VPS and dedicated servers, pass cloud-init at order time, capture images and pay from credit, all from a script. Bind a key to one project and your staging jobs can never touch production. It is a public beta: stable enough to build on, but endpoints and response shapes may still change.

v1public betafbk_bearer keys · 5 scopesOpenAPI3.0 spec€0for API access
staging key vs production
1$ curl -sH "Authorization: Bearer $STAGING" $API/vps
2› 3 servers · "project": { "slug": "staging" }
3$ curl -sX DELETE -H "…$STAGING" $API/vps/<prod-id>
4✗ 404 NOT_FOUND · not in this key’s project
5✓ still one invoice · one credit balance
projectsidempotentcloud-init
01 · Quickstart

Two calls to your first answer.

Create a key in the client panel under Profile → API Keys. It is shown once, so put it in your secret store before you close the dialog.

Send it as Authorization: Bearer fbk_… to https://my.noded.cloud/api/v1. Every response is JSON in a { success, data } envelope.

Make GET / your first call. It tells you who the key belongs to, which scopes it carries and which project it is bound to, so a misconfigured deploy fails at start-up instead of halfway through.

# 1 · who is this key? (the right first call)
curl -s https://my.noded.cloud/api/v1/ \
  -H "Authorization: Bearer fbk_…"

# → { "success": true, "data": { "version": "1",
#      "key": { "scopes": ["read", "services"], "project": null },
#      "rate_limit": { "limit": 1000, "remaining": 999, … } } }

# 2 · list your VPS
curl -s https://my.noded.cloud/api/v1/vps \
  -H "Authorization: Bearer fbk_…"
02 · Projects

Production and staging, never in the same blast radius.

The expensive accident in a shared account is the cleanup job that ran with the wrong credentials. Projects make it structurally impossible.

Group your services into projects: production, staging, one per client, whatever your environments are. Then bind a key to one project when you create it. That key sees and changes only its own project, so a staging pipeline cannot list, reboot or delete a production server, whatever it decides is an orphan.

Billing does not split. The account still gets one invoice and one credit balance, however many projects you run.

In scope
Services, orders, custom images and SSH keys
Binding
Chosen when the key is created, in Profile → API Keys
Outside it
Invisible to the key: a production server does not exist from staging’s point of view
03 · Server provisioning

Order a cloud server once, even when CI retries.

Flaky runners, timeouts and your own bugs all retry. The API is built so a retry is safe.

Idempotency-Key on orders

Send your own key with POST /orders. Retry the same create and you get the original order back instead of a second server.

cloud-init at order time

Pass first-boot user-data (a script or a #cloud-config document) and SSH keys in the order itself, so the server comes up already configured.

Availability per location

Ask whether a product can be built right now, and where, before you place the order.

Hourly or monthly

Hourly services are charged hourly from your credit. Monthly orders create an invoice or proforma that you pay from credit with one more call.

# can this product be built right now, and where?
curl -s https://my.noded.cloud/api/v1/products/<id>/availability \
  -H "Authorization: Bearer fbk_…"

# order it, once, with first-boot config
curl -s https://my.noded.cloud/api/v1/orders \
  -H "Authorization: Bearer fbk_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ci-run-4821" \
  -d '{
    "productId": "<id from GET /products>",
    "billingCycle": "hourly",
    "hostname": "runner-4821.example.com",
    "configOptions": {
      "os_image_id": "<id from GET /products/{id}>",
      "user_data": "#cloud-config\npackages: [docker.io]",
      "ssh_key_ids": ["<id from GET /ssh-keys>"]
    }
  }'

# same Idempotency-Key again → the same order back, never a second one
04 · Endpoints

Real paths, no hand-waving.

A slice of the 92 operations. The full reference is in the rendered docs and the OpenAPI 3.0 spec.
All paths are relative to https://my.noded.cloud/api/v1
Account & projects
GET
/
Who this key belongs to: user, scopes, bound project and rate-limit state.
GET
/projects
Your projects, for example production and staging.
GET
/account/usage
This month’s hourly charges. Balance and transactions sit next to it.
Catalogue & orders
GET
/locations
Where you can deploy.
GET
/products/{id}/availability
Can this product be built right now, and in which location.
POST
/orders
Order hourly or monthly, with an Idempotency-Key, cloud-init user-data and SSH keys.
VPS
GET
/vps
List your VPS. IP list and stats per server.
POST
/vps/{id}/reboot
Power control: start, stop, shutdown and reboot.
POST
/vps/{id}/reinstall
Rebuild the server from an OS image.
POST
/vps/{id}/password
Reset the root password.
DELETE
/vps/{id}
Delete the VPS.
Images & keys
POST
/vps/{id}/capture
Capture a configured VPS as a custom image.
POST
/custom-images
Register your own qcow2 or raw disk image. List and delete them too.
POST
/ssh-keys
Add an SSH key. List and delete them too.
Dedicated servers
GET
/dedicated/{id}/provision-status
Where the install is.
GET
/dedicated/{id}/traffic
Traffic. IP list and stats sit alongside.
Services & billing
POST
/services/{id}/upgrades
Move to a bigger plan. Add-ons such as extra IPs go through /options.
POST
/invoices/{id}/pay
Pay an invoice from credit. Proformas work the same way.
05 · Guard rails

Limits you can read before you hit them.

Least privilege on every key, published rate limits, and errors your code can branch on.
Scopes
read, services, orders, billing, destructive. Chosen at creation, never widened later
Per key
Optional IP allowlist and expiry
Team keys
Limited by the member’s own permissions, checked again on every request
Rate limit
1,000 requests per hour per key by default, in X-RateLimit-* headers, Retry-After on 429
Cool-downs
Per server: power 10/min, reinstall 1 per 5 min, password reset 1 per 10 min. Orders 30 per 15 min

Refusals carry a machine-readable code, for example RATE_LIMITED, PAYMENT_REQUIRED or CONFLICT.

HTTP/1.1 429 Too Many Requests
Retry-After: 1834
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0

{ "success": false, "code": "RATE_LIMITED", "error": "…" }
06 · Docs for humans and agents

No official SDKs. A contract and a guide instead.

We would rather say it plainly: there are no official SDKs and no Terraform provider. What you get is an OpenAPI 3.0 contract to generate a client from, and a plain-Markdown guide written so that coding assistants and AI agents can read it and drive the API correctly.

# hand the guide to your coding assistant or agent
curl -s https://my.noded.cloud/api/v1/guide.md -o NODED_API.md

# or generate a typed client from the contract
curl -s https://my.noded.cloud/api/v1/openapi.json -o openapi.json
07 · Which API?

Your own servers, or your customers’?

Two APIs on the same panel. Pick by whose servers you are managing.
CUSTOMER API

Automate your own account

Everything on this page: order, run and pay for your own servers from scripts, CI and agents.

  • AuthBearer fbk_…
  • KeysProfile → API Keys
  • Isolationproject-bound keys
  • Statuspublic beta
Open the docs
vs
RESELLER API

Sell servers under your brand

For platforms that sell VPS and dedicated servers to their own customers, at wholesale, under their own name.

  • AuthBearer rsk_… + HMAC
  • Keyscustomer-bound
  • Eventssigned webhooks
  • Accessby application
See the Reseller API
08 · FAQ

Things people ask.

Quick answers to the questions we get most. Need more? Talk to us.
Q.01
Does API access cost anything?
No. API access costs nothing extra; you pay only for the services you order. Hourly services are charged hourly from your account credit. Other orders create an invoice or proforma that you pay from credit through the API; it is settled automatically only when auto-pay from credit is enabled for your account.
Q.02
Is the API stable enough to build on?
It is a public beta, version 1. In the guide’s own words it is stable enough to build on, but endpoints and response shapes may still change. Branch on the machine-readable error code rather than the message, and keep an eye on the guide.
Q.03
Where do I create an API key?
In the client panel under Profile → API Keys. You pick the scopes (read, services, orders, billing, destructive) and, optionally, an IP allowlist, an expiry and a project. The key is shown once. Scopes are never widened later, and keys are created and revoked only in the panel, never through the API.
Q.04
Is there a Terraform provider or an official SDK?
No, neither exists. What does exist is an OpenAPI 3.0 spec you can generate a client from, and a plain-Markdown guide written so that coding assistants and AI agents can read it and call the API correctly.
Q.05
Can I test without spending money?
There is no sandbox or test mode: an order is a real order. Use hourly billing for throwaway servers, delete them when you are done, and send an Idempotency-Key with every order so a retried test never buys twice.
Q.06
Can team members have their own keys?
Yes. A team member’s key is limited by that member’s own account permissions, and those permissions are checked again on every request, so a key can never do more than the person who created it.
Make the first call

Get a key and ask it who it is.

Profile → API Keys in the client panel. Pick the smallest scopes that do the job, bind it to a project, and start with GET /.