API reference

HTTP API

RESTful. JSON in, JSON out. All requests need an Authorization: Bearer <token> header. Rate limit: 600 req/min per token.

Authentication

Every API request needs a bearer token. Generate one in your dashboard under API keys. Tokens are scoped — read-only, deploy-only, or full-access — and can be restricted by IP CIDR.

user@nodara ~ zsh
 ~ curl -H "Authorization: Bearer nk_live_..." \
     https://api.nodara.host/v1/instances
{
  "data": [
    { "id": "nv-8f2a10c3", "status": "running", ... },
  ],
  "meta": { "count": 1 }
}

Endpoints

Everything is under https://api.nodara.host.

methodpathpurpose
GET/v1/instancesList instances in your account.
POST/v1/instancesCreate (rent) a new instance.
GET/v1/instances/:idRetrieve a single instance.
PATCH/v1/instances/:idUpdate instance metadata or plan.
DELETE/v1/instances/:idDestroy an instance.
POST/v1/instances/:id/actions/rebootSoft reboot.
POST/v1/instances/:id/actions/reinstallReinstall from image.
GET/v1/snapshotsList all snapshots.
POST/v1/snapshotsCreate a snapshot from an instance.
POST/v1/snapshots/:id/actions/restoreRestore a snapshot to an instance.
GET/v1/regionsList available regions.
GET/v1/plansList all plans and current pricing.
GET/v1/billing/balanceFetch current account balance.
GET/v1/billing/invoicesList invoices, most recent first.

Error shape

All errors return a JSON body with error.code and error.message. HTTP status maps to error category: 4xx is your fault, 5xx is ours.

user@nodara ~ zsh
HTTP/2 422 Unprocessable Entity
content-type: application/json

{
  "error": {
    "code": "region_unavailable",
    "message": "fra1 has no gp-h200 offers right now",
    "request_id": "req_01k8n2fj9zc7x2"
  }
}

Versioning

The current API version is v1. We commit to twelve months of support after any breaking change is announced in the changelog. Minor additive changes (new endpoints, new optional fields) can happen any time and don't require a version bump.