{"openapi":"3.1.0","info":{"title":"NexNode Reseller API","version":"1.1.0","contact":{"email":null,"name":"NexNode support","url":null},"description":"JSON API for NexNode resellers: browse the catalogue, buy servers from your wallet, operate them, and get told when things happen. The guide and the full reference are at [/docs](/docs).\n\n## Authentication\n\nNexNode support issues your key and shows it once. We keep only a hash of it, so a lost key cannot be recovered: ask support for a new one and the old one stops working at once.\n\nSend the key on every request, in either header. `GET /health` is the only route that works without one, and `GET /account` shows the first characters of the key you are using.\n\nThe base URL is `https://api.nexnode.cloud/api/v1`. From inside Iran, `https://api.nexnode.ir/api/v1` reaches the same API and the same account.\n\n```text headers\nX-API-Token: sk_...\nAuthorization: Bearer sk_...\n```\n"},"paths":{"/api/dollar":{"get":{"parameters":[],"responses":{},"description":"","summary":"Get the current dollar price","operationId":"get_api_get_dollar_price"}},"/api/v1/account":{"get":{"parameters":[],"responses":{"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/AccountData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"AccountResponse","type":"object"}}},"description":"``GET /account``: who the key belongs to and its limits."}},"description":"\nThe account behind the key, the key's hint and issue date, and the\nlimits that apply. The key itself is never returned.","summary":"Account","tags":["Account"],"operationId":"get_account"}},"/api/v1/account/balance":{"get":{"parameters":[],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/AccountBalanceData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"AccountBalanceResponse","type":"object"}}},"description":"Wallet snapshot for ``GET /account/balance``."}},"description":"\nWallet balance, debt, money reserved by pending orders, and the\nestimated hours until renewals exhaust the balance.","summary":"Account balance","tags":["Account"],"operationId":"get_balance"}},"/api/v1/account/payments":{"get":{"parameters":[{"name":"limit","in":"query","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Limit"},"description":"Page size (1-500). Omit for everything."},{"name":"offset","in":"query","schema":{"default":0,"title":"Offset","type":"integer"}}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PaymentItem"},"title":"Data","type":"array"},"meta":{"anyOf":[{"$ref":"#/components/schemas/PageMeta"},{"type":"null"}],"default":null},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"PaymentListResponse","type":"object"}}},"description":"Top-ups credited to the wallet, newest first, for ``GET /account/payments``."}},"description":"\nTop-ups credited to the wallet, newest first.","summary":"Payments","tags":["Account"],"operationId":"get_payments"}},"/api/v1/account/webhook":{"delete":{"parameters":[],"responses":{"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/WebhookData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"WebhookResponse","type":"object"}}},"description":"WebhookResponse(data: 'WebhookData', success: 'Literal[True]' = True)"}},"description":"","summary":"Remove the webhook","tags":["Webhooks"],"operationId":"delete_webhook"},"get":{"parameters":[],"responses":{"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/WebhookData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"WebhookResponse","type":"object"}}},"description":"WebhookResponse(data: 'WebhookData', success: 'Literal[True]' = True)"}},"description":"\nThe registered URL (the secret is never returned) and the event names.","summary":"Webhook settings","tags":["Webhooks"],"operationId":"get_webhook"},"put":{"parameters":[],"responses":{"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/WebhookData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"WebhookResponse","type":"object"}}},"description":"WebhookResponse(data: 'WebhookData', success: 'Literal[True]' = True)"}},"description":"\nOne HTTPS URL per account. Deliveries are signed with ``secret``; see\nthe docs for the signature scheme. Replaces any previous registration.","summary":"Register a webhook","tags":["Webhooks"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"url":{"description":"HTTPS endpoint that receives every event for this account.","examples":["https://example.com/nexnode/webhook"],"title":"Url","type":"string"},"secret":{"description":"16 to 256 characters; used to sign deliveries (HMAC-SHA256). Never returned.","examples":["a-long-random-string-you-generate"],"title":"Secret","type":"string"}},"required":["url","secret"],"title":"WebhookRequest","type":"object"}}}},"operationId":"put_webhook"}},"/api/v1/account/webhook/test":{"post":{"parameters":[],"responses":{"503":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/WebhookTestData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"WebhookTestResponse","type":"object"}}},"description":"WebhookTestResponse(data: 'WebhookTestData', success: 'Literal[True]' = True)"}},"description":"\nDelivered once, without retries, and the endpoint's HTTP status is reported back.","summary":"Send a test event","tags":["Webhooks"],"operationId":"post_webhook_test"}},"/api/v1/catalog/apps":{"get":{"parameters":[{"name":"lang","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lang"},"description":"``fa`` (default) or ``en`` for names and descriptions. ``Accept-Language`` is honoured too."},{"name":"server_id","in":"query","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Server Id"},"description":"With ``template_id``: only apps that plan + template can run."},{"name":"template_id","in":"query","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Template Id"}}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AppSummary"},"title":"Data","type":"array"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"AppListResponse","type":"object"}}},"description":"``GET /catalog/apps``: one-click apps, optionally filtered to a plan + template."}},"description":"\nThe whole catalogue, or with ``server_id`` and ``template_id`` only\nthe apps that plan and template can run. Empty when apps are not\nopen to this account.","summary":"One-click apps","tags":["Catalogue"],"operationId":"get_apps"}},"/api/v1/catalog/servers":{"get":{"parameters":[{"name":"lang","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lang"},"description":"``fa`` (default) or ``en`` for names and descriptions. ``Accept-Language`` is honoured too."},{"name":"limit","in":"query","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Limit"},"description":"Page size (1-500). Omit for everything."},{"name":"offset","in":"query","schema":{"default":0,"title":"Offset","type":"integer"}},{"name":"datacenter_id","in":"query","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"examples":[1],"title":"Datacenter Id"}},{"name":"country_code","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"examples":["DE"],"title":"Country Code"},"description":"ISO country code filter."},{"name":"term","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"examples":["hourly"],"title":"Term"},"description":"Only `hourly` is accepted."}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CatalogServerSummary"},"title":"Data","type":"array"},"meta":{"anyOf":[{"$ref":"#/components/schemas/PageMeta"},{"type":"null"}],"default":null},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"CatalogServerListResponse","type":"object"}}},"description":"CatalogServerListResponse(data: 'list[CatalogServerSummary]', meta: 'PageMeta | None' = None, success: 'Literal[True]' = True)"}},"description":"\nEvery orderable plan with hourly prices, templates, features and the\nactions its instances support. Filter by ``datacenter_id`` and ``country_code``.","summary":"Server catalog","tags":["Catalogue"],"operationId":"get_plans"}},"/api/v1/catalog/servers/{server_id}":{"get":{"parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"lang","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lang"},"description":"``fa`` (default) or ``en`` for names and descriptions. ``Accept-Language`` is honoured too."}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/CatalogServerSummary"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"CatalogServerResponse","type":"object"}}},"description":"CatalogServerResponse(data: 'CatalogServerSummary', success: 'Literal[True]' = True)"}},"description":"","summary":"One catalog server","tags":["Catalogue"],"operationId":"get_plan"}},"/api/v1/datacenters":{"get":{"parameters":[{"name":"lang","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lang"},"description":"``fa`` (default) or ``en`` for names and descriptions. ``Accept-Language`` is honoured too."}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DatacenterSummary"},"title":"Data","type":"array"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"DatacenterListResponse","type":"object"}}},"description":"``GET /datacenters``: datacenters this account may order from."}},"description":"\nDatacenters the account may order from (account restrictions applied).\nOne whose ``status`` is not ``available`` takes no orders for now.","summary":"List datacenters","tags":["Catalogue"],"operationId":"get_datacenters"}},"/api/v1/health":{"get":{"parameters":[],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/HealthData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"HealthResponse","type":"object"}}},"description":"HealthResponse(data: 'HealthData', success: 'Literal[True]' = True)"}},"description":"\nNo authentication. Same JSON envelope as other routes.","summary":"Health check","tags":["System"],"security":[],"operationId":"get_health"}},"/api/v1/instances":{"get":{"parameters":[{"name":"limit","in":"query","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Limit"},"description":"Page size (1-500). Omit for everything."},{"name":"offset","in":"query","schema":{"default":0,"title":"Offset","type":"integer"}},{"name":"only_active","in":"query","schema":{"default":true,"title":"Only Active","type":"boolean"},"description":"False includes canceled and expired instances."}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserInstanceSummary"},"title":"Data","type":"array"},"meta":{"anyOf":[{"$ref":"#/components/schemas/PageMeta"},{"type":"null"}],"default":null},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"UserInstanceListResponse","type":"object"}}},"description":"UserInstanceListResponse(data: 'list[UserInstanceSummary]', meta: 'PageMeta | None' = None, success: 'Literal[True]' = True)"}},"description":"\nActive servers by default; ``only_active=false`` includes canceled\nand expired ones. Newest first.","summary":"List instances","tags":["Instances"],"operationId":"get_instances"},"post":{"parameters":[],"responses":{"502":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"422":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"409":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"402":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"201":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/CreateOrderData"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Meta"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"CreateOrderResponse","type":"object"}}},"description":"CreateOrderResponse(data: 'CreateOrderData', meta: 'Annotated[dict[str, Any] | None, Field(default=None)]' = None, success: 'Literal[True]' = True)"}},"description":"\nStarts a deploy and returns an order id to poll. Send an\n``Idempotency-Key`` header: a retry with the same key and body\nreturns the original order instead of creating a second server.","summary":"Create instance","tags":["Instances"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"server_id":{"description":"Catalog server id from ``GET /catalog/servers``.","examples":[42],"title":"Server Id","type":"integer"},"template_id":{"description":"OS template id for the chosen server. Ignored when ``snapshot_id`` is set: the snapshot's OS is used.","examples":[7],"title":"Template Id","type":"integer"},"term":{"description":"Billing term. Only `hourly` is currently supported.","examples":["hourly"],"title":"Term","type":"string"},"snapshot_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Build the server from one of your snapshots instead of a template. The snapshot must be ``available`` and compatible with the plan (same datacenter, disk at least the snapshot's, same architecture, and the snapshot's location unless the datacenter's snapshot config has ``cross_location``). ``apps`` cannot be combined with it.","examples":[15],"title":"Snapshot Id"},"active_features":{"description":"Feature ids to enable (``features[].id`` from ``GET /catalog/servers``). Features whose ``required_for_os_types`` includes the template's OS are enabled and billed even if omitted.","examples":[["12","14"]],"items":{"type":"string"},"title":"Active Features","type":"array"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional hostname (RFC 1123 labels, max 63 chars). Generated when omitted.","examples":["api-node-01.example"],"title":"Hostname"},"apps":{"description":"One-click apps (ids from ``GET /catalog/apps``) to install once the server is up. Dependencies are added automatically.","examples":[["docker","n8n"]],"items":{"type":"string"},"title":"Apps","type":"array"},"app_inputs":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"description":"Per-app inputs, ``{app_id: {KEY: value}}``. Every input is optional and has a documented default.","examples":[{"n8n":{"DOMAIN":"n8n.example.com"}}],"title":"App Inputs","type":"object"}},"required":["server_id","template_id","term"],"title":"CreateInstanceRequest","type":"object"}}}},"operationId":"post_instance"}},"/api/v1/instances/{instance_id}":{"delete":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"500":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/DeleteInstanceData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"DeleteInstanceResponse","type":"object"}}},"description":"DeleteInstanceResponse(data: 'DeleteInstanceData', success: 'Literal[True]' = True)"}},"description":"\nCancels the instance: billing stops and the provider-side deletion\nis queued. Returns once the instance is inactive. Idempotent.","summary":"Delete instance","tags":["Instances"],"operationId":"delete_instance"},"get":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"refresh","in":"query","schema":{"default":false,"title":"Refresh","type":"boolean"},"description":"Ask the provider for the current usage first (slower)."}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/UserInstanceDetail"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"UserInstanceDetailResponse","type":"object"}}},"description":"UserInstanceDetailResponse(data: 'UserInstanceDetail', success: 'Literal[True]' = True)"}},"description":"\nFull detail including credentials, traffic and queued apps.\n``refresh=true`` asks the provider for the live status first.","summary":"Get instance","tags":["Instances"],"operationId":"get_instance"},"patch":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"409":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/UserInstanceDetail"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"UserInstanceDetailResponse","type":"object"}}},"description":"UserInstanceDetailResponse(data: 'UserInstanceDetail', success: 'Literal[True]' = True)"}},"description":"\nRename, set a note, or switch auto-renew. Returns the updated instance.","summary":"Update instance","tags":["Instances"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name (max 64 chars).","examples":["web-01"],"title":"Name"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Free-form note (max 512 chars).","examples":["Customer 4411, production"],"title":"Note"},"renew":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Auto-renew. False lets the instance expire at ``renewal_due``.","examples":[true],"title":"Renew"}},"title":"InstanceUpdateRequest","type":"object"}}}},"operationId":"patch_instance"}},"/api/v1/instances/{instance_id}/actions":{"post":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"503":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"502":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"409":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"402":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ActionResultData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"ActionResponse","type":"object"}}},"description":"ActionResponse(data: 'ActionResultData', success: 'Literal[True]' = True)"}},"description":"\n``power_on``, ``power_off``, ``reboot``, ``rebuild`` (``template_id``,\noptional ``apps``), ``reset_password``, ``change_ip``, ``console``.\n``actions`` on the instance says which ones this plan supports.\nWhere the instance's ``ip_change_cost`` is not 0, ``change_ip`` gives\na clean address, is charged, and needs ``accept_cost``.","summary":"Instance actions","tags":["Instances"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"action":{"description":"One of: power_on, power_off, reboot, rebuild, reset_password, change_ip, console, resize, update_metadata.","examples":["reboot"],"title":"Action","type":"string"},"template_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Required for ``rebuild``.","examples":[7],"title":"Template Id"},"server_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Required for ``resize``: the target plan, one of ``GET /instances/{id}/resize-options``.","examples":[43],"title":"Server Id"},"accept_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"``change_ip`` on an instance whose ``ip_change_cost`` is not 0: the price you agree to, at least ``ip_change_cost``. Without it the call answers ``409 cost_unconfirmed`` and changes nothing.","examples":[0.5],"title":"Accept Cost"},"apps":{"description":"``rebuild`` only: apps to install on the new disk.","items":{"type":"string"},"title":"Apps","type":"array"},"app_inputs":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"description":"``rebuild`` only.","title":"App Inputs","type":"object"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"``update_metadata`` only (prefer PATCH).","title":"Name"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"``update_metadata`` only (prefer PATCH).","title":"Note"}},"required":["action"],"title":"InstanceActionRequest","type":"object"}}}},"operationId":"post_instance_actions"}},"/api/v1/instances/{instance_id}/apps":{"get":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/AppInstallListData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"AppInstallListResponse","type":"object"}}},"description":"AppInstallListResponse(data: 'AppInstallListData', success: 'Literal[True]' = True)"}},"description":"\nEvery queued, running, finished or failed one-click install on the\ninstance, newest first, with its stage and log tail.","summary":"App installs","tags":["Apps"],"operationId":"get_instance_apps"},"post":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"503":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"409":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"202":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/InstallAppsData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"InstallAppsResponse","type":"object"}}},"description":"InstallAppsResponse(data: 'InstallAppsData', success: 'Literal[True]' = True)"}},"description":"\nQueue one-click apps on a running instance. The stored root password\nmust still be valid; a changed one fails the install with\n``auth_failed`` (see ``GET /instances/{id}/apps``).","summary":"Install apps","tags":["Apps"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"apps":{"description":"App ids to install; dependencies are added automatically.","examples":[["n8n"]],"items":{"type":"string"},"title":"Apps","type":"array"},"app_inputs":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"description":"Per-app inputs, ``{app_id: {KEY: value}}``. Every input is optional.","examples":[{"n8n":{"DOMAIN":"n8n.example.com"}}],"title":"App Inputs","type":"object"}},"required":["apps"],"title":"InstallAppsRequest","type":"object"}}}},"operationId":"post_instance_apps"}},"/api/v1/instances/{instance_id}/resize-options":{"get":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/ResizeOptionsData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"ResizeOptionsResponse","type":"object"}}},"description":"ResizeOptionsResponse(data: 'ResizeOptionsData', success: 'Literal[True]' = True)"}},"description":"\nThe plans this instance can move to (bigger in every dimension,\nsame location), each with what it costs now and per term after.\nEmpty when the plan cannot be resized.","summary":"Resize options","tags":["Instances"],"operationId":"get_instance_resize_options"}},"/api/v1/instances/{instance_id}/snapshots":{"get":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SnapshotData"},"title":"Data","type":"array"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"SnapshotListResponse","type":"object"}}},"description":"SnapshotListResponse(data: 'list[SnapshotData]', success: 'Literal[True]' = True)"}},"description":"\nThe snapshots taken from this instance. ``meta.settings`` carries\nthe datacenter's price per GB, term length and per-instance cap.","summary":"Instance snapshots","tags":["Snapshots"],"operationId":"get_instance_snapshots"},"post":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"502":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"409":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"402":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"202":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/SnapshotData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"SnapshotResponse","type":"object"}}},"description":"SnapshotResponse(data: 'SnapshotData', success: 'Literal[True]' = True)"}},"description":"\nStarts a snapshot of the instance; the server stays online.\nReturns the snapshot in ``creating``; poll ``GET /snapshots/{id}``\nuntil it is ``available``. The first term is charged then, from\nthe real size.","summary":"Create snapshot","tags":["Snapshots"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name (max 64 chars). Defaults to the instance name and the time.","examples":["before-upgrade"],"title":"Name"}},"title":"CreateSnapshotRequest","type":"object"}}}},"operationId":"post_instance_snapshots"}},"/api/v1/instances/{instance_id}/traffic":{"get":{"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"refresh","in":"query","schema":{"default":false,"title":"Refresh","type":"boolean"},"description":"Ask the provider for the current usage first (slower)."}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/InstanceTraffic"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"TrafficResponse","type":"object"}}},"description":"TrafficResponse(data: 'InstanceTraffic', success: 'Literal[True]' = True)"}},"description":"\nIncluded, used and overage GB for the current cycle. ``refresh=true``\nasks the provider for the current counter first.","summary":"Traffic usage","tags":["Instances"],"operationId":"get_instance_traffic"}},"/api/v1/locations":{"get":{"parameters":[{"name":"lang","in":"query","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lang"},"description":"``fa`` (default) or ``en`` for names and descriptions. ``Accept-Language`` is honoured too."},{"name":"datacenter_id","in":"query","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"examples":[1],"title":"Datacenter Id"}}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LocationSummary"},"title":"Data","type":"array"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"LocationListResponse","type":"object"}}},"description":"LocationListResponse(data: 'list[LocationSummary]', success: 'Literal[True]' = True)"}},"description":"\nOptional filter: ``datacenter_id``.","summary":"List locations","tags":["Catalogue"],"operationId":"get_locations"}},"/api/v1/orders":{"get":{"parameters":[],"responses":{"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/OrderStatusData"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Meta"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"OrderStatusResponse","type":"object"}}},"description":"OrderStatusResponse(data: 'OrderStatusData', meta: 'Annotated[dict[str, Any] | None, Field(default=None)]' = None, success: 'Literal[True]' = True)"}},"description":"\nThis account's API orders still pending or finished in the last 24 hours, newest first.","summary":"List orders","tags":["Orders"],"operationId":"get_orders"}},"/api/v1/orders/{order_id}":{"get":{"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"429":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"RateLimitErrorResponse","type":"object"}}},"description":"429 response when a per-route rate limit is exceeded (see ``Retry-After``)."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/OrderStatusData"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Meta"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"OrderStatusResponse","type":"object"}}},"description":"OrderStatusResponse(data: 'OrderStatusData', meta: 'Annotated[dict[str, Any] | None, Field(default=None)]' = None, success: 'Literal[True]' = True)"}},"description":"\nPoll while ``status`` is ``pending``; when ``deployed``, ``server`` is the\nfull instance. Terminal orders stay readable for 24 hours, then 404.","summary":"Order status","tags":["Orders"],"operationId":"get_order"}},"/api/v1/quote":{"post":{"parameters":[],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/QuoteData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"QuoteResponse","type":"object"}}},"description":"QuoteResponse(data: 'QuoteData', success: 'Literal[True]' = True)"}},"description":"\nThe exact first charge for a plan, features and template, and\nwhether the wallet (minus reserved pending orders) covers it.","summary":"Price quote","tags":["Catalogue"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"server_id":{"title":"Server Id","type":"integer"},"term":{"default":"hourly","examples":["hourly"],"title":"Term","type":"string"},"template_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Apply the same forced-feature rules as a deploy (a Windows template always bills IPv4).","title":"Template Id"},"active_features":{"items":{"type":"string"},"title":"Active Features","type":"array"}},"required":["server_id"],"title":"QuoteRequest","type":"object"}}}},"operationId":"post_quote"}},"/api/v1/snapshots":{"get":{"parameters":[{"name":"include_inactive","in":"query","schema":{"default":false,"title":"Include Inactive","type":"boolean"},"description":"Also list deleted, expired and failed snapshots."}],"responses":{"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SnapshotData"},"title":"Data","type":"array"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"SnapshotListResponse","type":"object"}}},"description":"SnapshotListResponse(data: 'list[SnapshotData]', success: 'Literal[True]' = True)"}},"description":"\nEvery snapshot you own, newest first, including those whose\ninstance is already gone (they can still be cloned).","summary":"List snapshots","tags":["Snapshots"],"operationId":"get_snapshots"}},"/api/v1/snapshots/{snapshot_id}":{"delete":{"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"502":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"409":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/SnapshotData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"SnapshotResponse","type":"object"}}},"description":"SnapshotResponse(data: 'SnapshotData', success: 'Literal[True]' = True)"}},"description":"\nDeletes it at the provider and stops its billing. Not refunded.","summary":"Delete snapshot","tags":["Snapshots"],"operationId":"delete_snapshot"},"get":{"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/SnapshotData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"SnapshotResponse","type":"object"}}},"description":"SnapshotResponse(data: 'SnapshotData', success: 'Literal[True]' = True)"}},"description":"","summary":"Snapshot detail","tags":["Snapshots"],"operationId":"get_snapshot"},"patch":{"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/SnapshotData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"SnapshotResponse","type":"object"}}},"description":"SnapshotResponse(data: 'SnapshotData', success: 'Literal[True]' = True)"}},"description":"\nRename or set a note.","summary":"Update snapshot","tags":["Snapshots"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name (max 64 chars).","examples":["before-upgrade"],"title":"Name"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Free-form note (max 512 chars). Empty string clears it.","examples":["Taken before the 2.0 release"],"title":"Note"}},"title":"SnapshotUpdateRequest","type":"object"}}}},"operationId":"patch_snapshot"}},"/api/v1/snapshots/{snapshot_id}/restore":{"post":{"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"502":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"409":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"404":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"403":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"401":{"content":{"application/json":{"schema":{"properties":{"error":{"$ref":"#/components/schemas/ApiErrorBody"},"success":{"const":false,"default":false,"title":"Success","type":"boolean"}},"required":["error"],"title":"ApiErrorResponse","type":"object"}}},"description":"Standard JSON error envelope."},"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/SnapshotData"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"}},"required":["data"],"title":"SnapshotResponse","type":"object"}}},"description":"SnapshotResponse(data: 'SnapshotData', success: 'Literal[True]' = True)"}},"description":"\nPuts the snapshot back onto the instance it came from, in place.\nThe instance is powered off during the restore and keeps its\naddresses; its disk and credentials become what the snapshot\nholds. Anything changed since the snapshot is lost.","summary":"Restore snapshot","tags":["Snapshots"],"operationId":"post_snapshot_restore"}}},"components":{"schemas":{"ApiErrorBody":{"properties":{"code":{"description":"Stable error code for clients.","examples":["unauthorized","validation_error","not_found"],"title":"Code","type":"string"},"message":{"description":"Human-readable message.","examples":["Invalid API token"],"title":"Message","type":"string"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Same value as the X-Request-ID response header; quote it in support requests.","title":"Request Id"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Support reference of a failure the provider caused (``provider_error``, ``deploy_rejected``): the code the bot and the panel show the customer; quote it to support.","examples":["NX-7K3F2M"],"title":"Reference"},"details":{"anyOf":[{},{"type":"null"}],"default":null,"description":"Optional structured details.","title":"Details"}},"required":["code","message"],"title":"ApiErrorBody","type":"object"},"AccountData":{"properties":{"id":{"description":"Account id.","title":"Id","type":"integer"},"api_key_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First characters of the key in use; the key itself is never returned.","examples":["sk_Ab12Cd34"],"title":"Api Key Hint"},"api_key_created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Created At"},"webhook_configured":{"title":"Webhook Configured","type":"boolean"},"server_limit":{"description":"Maximum active instances.","title":"Server Limit","type":"integer"},"api_order_limit":{"description":"Maximum orders provisioning at once.","title":"Api Order Limit","type":"integer"},"language":{"title":"Language","type":"string"}},"required":["id","api_key_hint","api_key_created_at","webhook_configured","server_limit","api_order_limit","language"],"title":"AccountData","type":"object"},"AccountBalanceData":{"properties":{"balance":{"description":"Current wallet balance (USD).","examples":[100.5],"title":"Balance","type":"number"},"debt":{"description":"Outstanding debt (USD).","examples":[0.0],"title":"Debt","type":"number"},"reserved":{"description":"Sum of prices of this account's orders still provisioning; counted against the balance for new orders.","examples":[4.5],"title":"Reserved","type":"number"},"available":{"description":"``balance - reserved``: what a new order can draw on.","examples":[96.0],"title":"Available","type":"number"},"hours_until_balance_zero":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Estimated hours until renewal charges exhaust the balance (same simulation as the bot); null if there are no renewable servers or the time cannot be estimated.","examples":[48.25,null],"title":"Hours Until Balance Zero"},"active_instances":{"default":0,"examples":[3],"title":"Active Instances","type":"integer"},"pending_orders":{"default":0,"examples":[1],"title":"Pending Orders","type":"integer"}},"required":["balance","debt","reserved","available"],"title":"AccountBalanceData","type":"object"},"PageMeta":{"properties":{"total":{"description":"Total items matching, ignoring paging.","examples":[42],"title":"Total","type":"integer"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"examples":[50],"title":"Limit"},"offset":{"default":0,"examples":[0],"title":"Offset","type":"integer"}},"required":["total"],"title":"PageMeta","type":"object"},"PaymentItem":{"properties":{"id":{"title":"Id","type":"integer"},"amount":{"description":"Credited amount (USD).","title":"Amount","type":"number"},"payment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"examples":["crypto","bank"],"title":"Payment Type"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp.","title":"Paid At"}},"required":["id","amount","payment_type","paid_at"],"title":"PaymentItem","type":"object"},"WebhookData":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"configured":{"title":"Configured","type":"boolean"},"events":{"description":"Event names this API can send.","items":{"type":"string"},"title":"Events","type":"array"}},"required":["url","configured","events"],"title":"WebhookData","type":"object"},"WebhookTestData":{"properties":{"delivered":{"title":"Delivered","type":"boolean"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"HTTP status the endpoint answered with, if it answered.","title":"Status"}},"required":["delivered","status"],"title":"WebhookTestData","type":"object"},"AppInputSummary":{"properties":{"key":{"title":"Key","type":"string"},"label":{"title":"Label","type":"string"},"kind":{"title":"Kind","type":"string"},"required":{"const":false,"default":false,"title":"Required","type":"boolean"},"default":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Default"},"help":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Help"}},"required":["key","label","kind"],"title":"AppInputSummary","type":"object"},"AppSummary":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"category":{"title":"Category","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"requires":{"items":{"type":"string"},"title":"Requires","type":"array"},"conflicts":{"items":{"type":"string"},"title":"Conflicts","type":"array"},"ports":{"items":{"type":"string"},"title":"Ports","type":"array"},"min_memory_mb":{"title":"Min Memory Mb","type":"integer"},"min_disk_gb":{"title":"Min Disk Gb","type":"integer"},"os_families":{"items":{"type":"string"},"title":"Os Families","type":"array"},"inputs":{"items":{"$ref":"#/components/schemas/AppInputSummary"},"title":"Inputs","type":"array"}},"required":["id","name","category","description","requires","conflicts","ports","min_memory_mb","min_disk_gb","os_families","inputs"],"title":"AppSummary","type":"object"},"CatalogServerSummary":{"properties":{"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"type":{"title":"Type","type":"string"},"cpu":{"title":"Cpu","type":"integer"},"memory":{"description":"GB","title":"Memory","type":"integer"},"disk":{"description":"GB","title":"Disk","type":"integer"},"term_filter":{"description":"Billing term the prices and features are for. Only ``hourly`` is offered.","examples":["hourly"],"title":"Term Filter","type":"string"},"prices":{"items":{"additionalProperties":true,"type":"object"},"title":"Prices","type":"array"},"creation_fee":{"description":"One-time fee added to the first charge; 0 when none.","title":"Creation Fee","type":"number"},"templates":{"items":{"additionalProperties":true,"type":"object"},"title":"Templates","type":"array"},"features":{"items":{"additionalProperties":true,"type":"object"},"title":"Features","type":"array"},"actions":{"description":"Provider actions instances of this plan support.","items":{"type":"string"},"title":"Actions","type":"array"},"datacenter":{"anyOf":[{"$ref":"#/components/schemas/DatacenterSummary"},{"type":"null"}],"default":null},"location":{"anyOf":[{"$ref":"#/components/schemas/LocationSummary"},{"type":"null"}],"default":null},"traffic":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Traffic"}},"required":["id","name","type","cpu","memory","disk","term_filter","prices","creation_fee","templates","features","actions"],"title":"CatalogServerSummary","type":"object"},"DatacenterSummary":{"properties":{"id":{"examples":[1],"title":"Id","type":"integer"},"name":{"examples":["EU Central"],"title":"Name","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"examples":["Example DC"],"title":"Description"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"examples":["available"],"title":"Status"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"terms":{"description":"Enabled billing terms.","items":{"additionalProperties":true,"type":"object"},"title":"Terms","type":"array"},"require_kyc":{"default":false,"title":"Require Kyc","type":"boolean"}},"required":["id","name"],"title":"DatacenterSummary","type":"object"},"LocationSummary":{"properties":{"id":{"title":"Id","type":"integer"},"datacenter_id":{"title":"Datacenter Id","type":"integer"},"name":{"title":"Name","type":"string"},"country":{"title":"Country","type":"string"},"country_code":{"examples":["DE"],"title":"Country Code","type":"string"},"flag":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Flag"},"active":{"default":true,"title":"Active","type":"boolean"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Status"}},"required":["id","datacenter_id","name","country","country_code"],"title":"LocationSummary","type":"object"},"HealthData":{"properties":{"status":{"examples":["ok"],"title":"Status","type":"string"},"api":{"examples":["reseller_v1"],"title":"Api","type":"string"}},"required":["status","api"],"title":"HealthData","type":"object"},"UserInstanceSummary":{"properties":{"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"``online`` / ``offline`` / provider-specific; refreshed on GET /instances/{id}.","title":"Status"},"active":{"title":"Active","type":"boolean"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"server_product_id":{"title":"Server Product Id","type":"integer"},"ipv4":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ipv4"},"ipv6":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ipv6"},"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Term"},"renewal_due":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Renewal Due"},"renew":{"default":true,"title":"Renew","type":"boolean"},"locked":{"default":false,"title":"Locked","type":"boolean"},"lock_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lock Reason"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Created At"},"expired_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Expired At"},"datacenter_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Datacenter Id"},"location_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Location Id"},"template_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Template Id"},"costs":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Extra recurring costs (USD per term).","title":"Costs"},"paid_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Total charged so far (USD).","title":"Paid Amount"},"actions":{"items":{"type":"string"},"title":"Actions","type":"array"},"snapshots":{"default":false,"description":"Whether snapshots can be taken of this instance (``/instances/{id}/snapshots``).","title":"Snapshots","type":"boolean"}},"required":["id","name","status","active","hostname","server_product_id"],"title":"UserInstanceSummary","type":"object"},"CreateOrderData":{"properties":{"order_id":{"description":"Poll ``GET /orders/{order_id}`` until ``status`` leaves ``pending``.","examples":[9001],"title":"Order Id","type":"integer"},"price":{"description":"What this order charges when it completes.","title":"Price","type":"number"},"apps":{"description":"Apps queued for install, in install order.","items":{"type":"string"},"title":"Apps","type":"array"}},"required":["order_id","price","apps"],"title":"CreateOrderData","type":"object"},"DeleteInstanceData":{"properties":{"id":{"title":"Id","type":"integer"},"status":{"const":"canceled","description":"The instance is inactive and its deletion is queued at the provider.","title":"Status","type":"string"},"active":{"const":false,"default":false,"title":"Active","type":"boolean"}},"required":["id","status"],"title":"DeleteInstanceData","type":"object"},"Credentials":{"properties":{"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"SSH or RDP port.","title":"Port"},"ipv4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ipv4"},"ipv6":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ipv6"},"pending":{"description":"True while the provider has not delivered a password or an address yet.","title":"Pending","type":"boolean"}},"required":["username","password","port","ipv4","ipv6","pending"],"title":"Credentials","type":"object"},"InstanceTraffic":{"properties":{"enabled":{"title":"Enabled","type":"boolean"},"included":{"description":"GB per 30 days; 0 means unlimited.","title":"Included","type":"integer"},"used":{"title":"Used","type":"integer"},"overage":{"title":"Overage","type":"integer"},"allow_overage":{"title":"Allow Overage","type":"boolean"},"cycle_start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cycle Start Date"}},"required":["enabled","included","used","overage","allow_overage","cycle_start_date"],"title":"InstanceTraffic","type":"object"},"UserInstanceDetail":{"properties":{"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"``online`` / ``offline`` / provider-specific; refreshed on GET /instances/{id}.","title":"Status"},"active":{"title":"Active","type":"boolean"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"server_product_id":{"title":"Server Product Id","type":"integer"},"ipv4":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ipv4"},"ipv6":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ipv6"},"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Term"},"renewal_due":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Renewal Due"},"renew":{"default":true,"title":"Renew","type":"boolean"},"locked":{"default":false,"title":"Locked","type":"boolean"},"lock_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lock Reason"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Created At"},"expired_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Expired At"},"datacenter_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Datacenter Id"},"location_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Location Id"},"template_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Template Id"},"costs":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Extra recurring costs (USD per term).","title":"Costs"},"paid_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Total charged so far (USD).","title":"Paid Amount"},"actions":{"items":{"type":"string"},"title":"Actions","type":"array"},"snapshots":{"default":false,"description":"Whether snapshots can be taken of this instance (``/instances/{id}/snapshots``).","title":"Snapshots","type":"boolean"},"server_product":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Server Product"},"location":{"anyOf":[{"$ref":"#/components/schemas/LocationSummary"},{"type":"null"}],"default":null},"datacenter":{"anyOf":[{"$ref":"#/components/schemas/DatacenterSummary"},{"type":"null"}],"default":null},"template":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Template"},"traffic":{"anyOf":[{"$ref":"#/components/schemas/InstanceTraffic"},{"type":"null"}],"default":null},"credentials":{"anyOf":[{"$ref":"#/components/schemas/Credentials"},{"type":"null"}],"default":null},"apps":{"items":{"additionalProperties":true,"type":"object"},"title":"Apps","type":"array"},"ip_change_cost":{"default":0.0,"description":"USD charged for one ``change_ip`` on this instance; ``0`` where the change is free. Where it is set, the new address is a clean one, there is no wait between changes, and the action must carry ``accept_cost``.","title":"Ip Change Cost","type":"number"}},"required":["id","name","status","active","hostname","server_product_id"],"title":"UserInstanceDetail","type":"object"},"ActionResultData":{"properties":{"action":{"title":"Action","type":"string"},"success":{"const":true,"default":true,"title":"Success","type":"boolean"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"``reset_password``: the new password.","title":"Password"},"ipv4":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"``change_ip``: the new address.","title":"Ipv4"},"clean":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"``change_ip`` where it is paid for: whether the new address came from the clean pool. ``false`` means none was ready, the instance got an ordinary one and nothing was charged; the next free one waits out the window.","title":"Clean"},"debt":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"``change_ip``: USD booked as debt because the wallet no longer covered the price once the address was changed.","title":"Debt"},"console_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"``console``: short-lived URL.","title":"Console Url"},"console_password":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Console Password"},"queued_apps":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"``rebuild``: apps queued for the new disk.","title":"Queued Apps"},"charged":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"``resize``: USD charged now for the rest of the current term. ``change_ip`` where it is paid for: USD charged for the new address.","title":"Charged"},"server_product_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"``resize``: the plan the instance is on now.","title":"Server Product Id"}},"required":["action"],"title":"ActionResultData","type":"object"},"AppInstallItem":{"properties":{"app_id":{"title":"App Id","type":"string"},"name":{"title":"Name","type":"string"},"status":{"description":"queued / installing / installed / failed","title":"Status","type":"string"},"stage":{"description":"waiting / preparing / running / done / failed / auth_failed","title":"Stage","type":"string"},"attempts":{"title":"Attempts","type":"integer"},"result":{"additionalProperties":true,"description":"What the install reported (URLs, generated credentials).","title":"Result","type":"object"},"error":{"title":"Error","type":"string"},"log_tail":{"description":"Tail of the install log; the only place a failure explains itself.","title":"Log Tail","type":"string"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"}},"required":["app_id","name","status","stage","attempts","result","error","log_tail","started_at","finished_at"],"title":"AppInstallItem","type":"object"},"AppInstallListData":{"properties":{"server_id":{"title":"Server Id","type":"integer"},"supported":{"title":"Supported","type":"boolean"},"installs":{"items":{"$ref":"#/components/schemas/AppInstallItem"},"title":"Installs","type":"array"}},"required":["server_id","supported","installs"],"title":"AppInstallListData","type":"object"},"InstallAppsData":{"properties":{"server_id":{"title":"Server Id","type":"integer"},"queued":{"items":{"type":"string"},"title":"Queued","type":"array"}},"required":["server_id","queued"],"title":"InstallAppsData","type":"object"},"ResizeOptionData":{"properties":{"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"type":{"title":"Type","type":"string"},"cpu":{"title":"Cpu","type":"integer"},"memory":{"title":"Memory","type":"number"},"disk":{"title":"Disk","type":"integer"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Plan price on the instance's own billing term.","title":"Price"},"term":{"title":"Term","type":"string"},"charge_now":{"description":"USD charged at once: the price difference prorated over what is left of the current term.","title":"Charge Now","type":"number"},"new_cost":{"description":"What the instance will cost per term from the next renewal, features included.","title":"New Cost","type":"number"}},"required":["id","name","type","cpu","memory","disk","price","term","charge_now","new_cost"],"title":"ResizeOptionData","type":"object"},"ResizeOptionsData":{"properties":{"instance_id":{"title":"Instance Id","type":"integer"},"current_server_product_id":{"title":"Current Server Product Id","type":"integer"},"term":{"title":"Term","type":"string"},"options":{"items":{"$ref":"#/components/schemas/ResizeOptionData"},"title":"Options","type":"array"}},"required":["instance_id","current_server_product_id","term","options"],"title":"ResizeOptionsData","type":"object"},"SnapshotData":{"properties":{"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"status":{"description":"creating, available, restoring, failed, expired or deleted.","title":"Status","type":"string"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Note"},"locked":{"default":false,"title":"Locked","type":"boolean"},"lock_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"``unpaid`` when the balance was short at renewal; the snapshot cannot be used until it is paid.","title":"Lock Reason"},"size_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Size Gb"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"USD per hour, fixed from the real size when the snapshot became available. Accrued every hour and charged to the wallet once the accrued amount reaches a tenth of a cent.","title":"Price"},"price_monthly":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The hourly rate over a month, for display.","title":"Price Monthly"},"term":{"const":"hourly","default":"hourly","title":"Term","type":"string"},"accrued":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"USD accrued on the snapshot and not yet charged.","title":"Accrued"},"renewal_due":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Start of the next hour to be accounted.","title":"Renewal Due"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Created At"},"available_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Available At"},"expired_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Expired At"},"instance_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"The instance it was taken from; null once that instance is gone.","title":"Instance Id"},"datacenter_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Datacenter Id"},"location_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Location Id"},"template_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Template Id"},"server_product_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Server Product Id"},"os_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Os Type"},"source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Source Name"},"features":{"description":"Names of the features the instance had when the snapshot was taken (its IPv4 add-on, a licence, an extra disk). A clone carries them where its plan offers them, unless the request names its own ``active_features``.","items":{"type":"string"},"title":"Features","type":"array"},"local":{"default":false,"description":"True when the snapshot lives on the instance's own disk (a restore point that is deleted with the instance).","title":"Local","type":"boolean"},"restore":{"default":true,"description":"Whether ``POST /snapshots/{id}/restore`` is available on this datacenter. False where only cloning is possible.","title":"Restore","type":"boolean"},"paid_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Paid Amount"}},"required":["id","name","status"],"title":"SnapshotData","type":"object"},"OrderStatusData":{"properties":{"order_id":{"title":"Order Id","type":"integer"},"status":{"enum":["pending","deployed","timed_out"],"title":"Status","type":"string"},"success":{"description":"True only when ``status`` is ``deployed``.","title":"Success","type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Created At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Finished At"},"server":{"anyOf":[{"$ref":"#/components/schemas/UserInstanceDetail"},{"type":"null"}],"default":null},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"On ``timed_out``: the support reference to quote; the same code the customer sees in Telegram.","title":"Reference"}},"required":["order_id","status","success"],"title":"OrderStatusData","type":"object"},"QuoteData":{"properties":{"server_id":{"title":"Server Id","type":"integer"},"term":{"title":"Term","type":"string"},"active_features":{"description":"Echoed back; forced features may add ids you did not send.","items":{"type":"string"},"title":"Active Features","type":"array"},"cost":{"description":"First charge: one term plus the creation fee.","title":"Cost","type":"number"},"creation_fee":{"title":"Creation Fee","type":"number"},"recurring":{"description":"Charged per term after the first.","title":"Recurring","type":"number"},"balance":{"title":"Balance","type":"number"},"reserved":{"title":"Reserved","type":"number"},"sufficient_balance":{"title":"Sufficient Balance","type":"boolean"},"difference":{"description":"How much is missing when ``sufficient_balance`` is false.","title":"Difference","type":"number"}},"required":["server_id","term","active_features","cost","creation_fee","recurring","balance","reserved","sufficient_balance","difference"],"title":"QuoteData","type":"object"}},"securitySchemes":{"ApiToken":{"name":"X-API-Token","in":"header","type":"apiKey"},"BearerAuth":{"scheme":"bearer","bearerFormat":"opaque","type":"http"}}},"tags":[{"name":"Catalogue","description":"Plans, datacenters, locations and one-click apps this account may order, and the exact price of a configuration. Prices are hourly USD."},{"name":"Instances","description":"Servers you own: order one, read it with its credentials, rename it, run power and rebuild actions, resize it, delete it."},{"name":"Orders","description":"Deploys in flight. An order becomes an instance when the datacenter finishes building it."},{"name":"Apps","description":"One-click applications installed over SSH after the server is up."},{"name":"Snapshots","description":"Point-in-time images of an instance, billed hourly by size: restore in place, delete, or order new instances from one (`POST /instances` with `snapshot_id`)."},{"name":"Webhooks","description":"One signed HTTPS endpoint per account, and the events it receives. How to check the signature is under Webhooks in the guide."},{"name":"Account","description":"Who the key belongs to, wallet balance, reserved funds and payments."},{"name":"System","description":"Health check. No authentication."}],"security":[{"ApiToken":[]},{"BearerAuth":[]}],"servers":[{"url":"https://api.nexnode.cloud/api/v1","description":"Cloudflare (worldwide)"},{"url":"https://api.nexnode.ir/api/v1","description":"ArvanCloud (inside Iran)"}],"x-tagGroups":[{"name":"Servers","tags":["Catalogue","Instances","Orders","Apps","Snapshots"]},{"name":"Account","tags":["Webhooks","Account","System"]}],"webhooks":{"ping":{"post":{"summary":"ping","description":"Sent by `POST /account/webhook/test`.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"ping"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"account_id":{"type":"integer"}},"required":["account_id"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"ping","created_at":"2026-09-10T10:00:00+00:00","data":{"account_id":123456}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"order.deployed":{"post":{"summary":"order.deployed","description":"A `POST /instances` order finished and the instance exists. `instance_id` is the id for every `/instances` call.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"order.deployed"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"order_id":{"type":"integer"},"status":{"type":"string","const":"deployed"},"instance_id":{"type":"integer"},"server_id":{"type":"integer","description":"Catalogue plan id."},"price":{"type":"number","description":"What the order charged (USD)."}},"required":["order_id","status","instance_id","server_id","price"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"order.deployed","created_at":"2026-09-10T10:00:00+00:00","data":{"order_id":9001,"status":"deployed","instance_id":123,"server_id":42,"price":0.0097}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"order.timed_out":{"post":{"summary":"order.timed_out","description":"The provider did not finish within the order window; nothing was created or charged.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"order.timed_out"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"order_id":{"type":"integer"},"status":{"type":"string","const":"timed_out"},"instance_id":{"type":"null"},"server_id":{"type":"integer"},"price":{"type":"number"}},"required":["order_id","status","instance_id","server_id","price"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"order.timed_out","created_at":"2026-09-10T10:00:00+00:00","data":{"order_id":9002,"status":"timed_out","instance_id":null,"server_id":42,"price":0.0097}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"instance.canceled":{"post":{"summary":"instance.canceled","description":"The instance was canceled. `reason` is `api` for your own `DELETE`, `system` for expiry, unpaid debt, abuse or an admin.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"instance.canceled"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"instance_id":{"type":"integer"},"status":{"type":"string","description":"Why, as stored on the instance.","examples":["Canceled via API","Expired"]},"reason":{"type":"string","enum":["api","system"]}},"required":["instance_id","status","reason"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"instance.canceled","created_at":"2026-09-10T10:00:00+00:00","data":{"instance_id":123,"status":"Expired","reason":"system"}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"instance.password_reset":{"post":{"summary":"instance.password_reset","description":"The root password was reset through the API. Read it from `GET /instances/{id}`; it is not in the webhook.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"instance.password_reset"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"instance_id":{"type":"integer"}},"required":["instance_id"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"instance.password_reset","created_at":"2026-09-10T10:00:00+00:00","data":{"instance_id":123}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"instance.ip_changed":{"post":{"summary":"instance.ip_changed","description":"The IPv4 address was changed through the API.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"instance.ip_changed"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"instance_id":{"type":"integer"},"ipv4":{"type":"string"}},"required":["instance_id","ipv4"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"instance.ip_changed","created_at":"2026-09-10T10:00:00+00:00","data":{"instance_id":123,"ipv4":"203.0.113.7"}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"instance.resized":{"post":{"summary":"instance.resized","description":"The instance was moved to another plan through the API. `charged` is what was taken now for the rest of the current term.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"instance.resized"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"instance_id":{"type":"integer"},"server_id":{"type":"integer","description":"The new catalog server id."},"charged":{"type":"number"}},"required":["instance_id","server_id","charged"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"instance.resized","created_at":"2026-09-10T10:00:00+00:00","data":{"instance_id":123,"server_id":43,"charged":0.005}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"snapshot.created":{"post":{"summary":"snapshot.created","description":"A snapshot was requested through the API. It starts in `creating`; poll `GET /snapshots/{id}` until it is `available`.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"snapshot.created"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"snapshot_id":{"type":"integer"},"instance_id":{"type":"integer"}},"required":["snapshot_id","instance_id"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"snapshot.created","created_at":"2026-09-10T10:00:00+00:00","data":{"snapshot_id":15,"instance_id":123}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"snapshot.restored":{"post":{"summary":"snapshot.restored","description":"A snapshot was restored onto its instance through the API.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"snapshot.restored"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"snapshot_id":{"type":"integer"},"instance_id":{"type":"integer"}},"required":["snapshot_id","instance_id"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"snapshot.restored","created_at":"2026-09-10T10:00:00+00:00","data":{"snapshot_id":15,"instance_id":123}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"snapshot.deleted":{"post":{"summary":"snapshot.deleted","description":"A snapshot was deleted through the API.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"snapshot.deleted"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"snapshot_id":{"type":"integer"}},"required":["snapshot_id"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"snapshot.deleted","created_at":"2026-09-10T10:00:00+00:00","data":{"snapshot_id":15}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}},"balance.low":{"post":{"summary":"balance.low","description":"Sent at 24, 12, 6, 2 and 1 hours before renewals exhaust the wallet.","tags":["Webhooks"],"parameters":[{"in":"header","name":"X-Nexnode-Event","required":true,"schema":{"type":"string"},"description":"Event name."},{"in":"header","name":"X-Nexnode-Delivery","required":true,"schema":{"type":"string","format":"uuid"},"description":"Delivery id; retries reuse it."},{"in":"header","name":"X-Nexnode-Signature","required":true,"schema":{"type":"string"},"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256>`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event","created_at","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Delivery id (same as `X-Nexnode-Delivery`)."},"event":{"type":"string","const":"balance.low"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"balance":{"type":"number"},"hours_until_balance_zero":{"type":"number"}},"required":["balance","hours_until_balance_zero"]}}},"example":{"id":"6f1c2a1e-4b7d-4c2e-9f3a-2d1b3c4d5e6f","event":"balance.low","created_at":"2026-09-10T10:00:00+00:00","data":{"balance":0.31,"hours_until_balance_zero":11.5}}}}},"responses":{"2XX":{"description":"Acknowledged. Anything else is retried."}}}}}}
