API Reference

All paid endpoints use MPP on Tempo. Send an unauthenticated request, receive a 402, sign with your wallet, retry. Free endpoints use a zero-amount proof credential for identity.

Catalog

GET /v1/catalog/sizes free

Available server sizes with per-minute and hourly rates, specs, and create fees.

GET /v1/catalog/regions free

Available regions: nyc1 (New York), sfo3 (San Francisco), ams3 (Amsterdam).

GET /v1/catalog/images free

Available OS images: Ubuntu 24.04 LTS, Debian 12.

GET /v1/catalog/snapshot-pricing free

Current rate for extending a snapshot's retention past the free 72h window: $0.00267 per GB per day (≈ $0.08/GB/month), floored at $0.01 per call. Returns the rate, minimum charge, free retention window, and max days per extend call.

Servers

POST /v1/servers create fee + compute

Create a new server. Charge: create fee + (hourly rate × minutes / 60).

paramtypedescription
size *stringsmall, medium, or large
region *stringnyc1, sfo3, or ams3
imagestringOS image slug default: ubuntu-24-04-x64
minutesintegerPrepaid minutes default: 1
ssh_key_idsstring[]Key IDs to install
snapshot_idstringRestore from snapshot. Fails with 400 before charge if the snapshot's disk size exceeds the target tier's disk.
user_datastringcloud-init script run as root on first boot (max 64 KB). Stored in DigitalOcean metadata — don't embed secrets you wouldn't trust the infra provider with.
Returns: id, status, paid_until, minutes_purchased, total_charged
GET /v1/servers free (proof)

List your active servers. Requires wallet identity via proof credential.

GET /v1/servers/:id free (proof)

Server details including IP, root password, remaining time, and status.

Returns: id, ip, root_password, remaining_minutes, remaining_hours, status, paid_until
POST /v1/servers/:id/extend hourly × min / 60

Add prepaid time. Minimum charge $0.01.

paramtypedescription
minutes *integerMinutes to add
Returns: id, paid_until, minutes_added, charged
POST /v1/servers/:id/snapshot $0.01

Live-snapshot a running server without destroying it. Returns 202 immediately with a snapshot id; the DO-side snapshot completes in the background. Resulting snapshot has 72h free retention — extend via POST /v1/snapshots/:id/extend.

paramtypedescription
namestringOptional display name for the snapshot
Returns: id (snap_...), status, expires_in_hours, message
DELETE /v1/servers/:id free (proof)

Destroy server. Automatically snapshots before destroying. Snapshot retained 72h free; extend via POST /v1/snapshots/:id/extend to keep it longer.

Returns: deleted, snapshot { id, expires_in_hours }
POST /v1/servers/:id/reboot $0.005

Reboot server.

POST /v1/servers/:id/power $0.005

Power on or off.

paramtypedescription
action *stringon or off

Snapshots

Every snapshot (from DELETE /v1/servers/:id or POST /v1/servers/:id/snapshot) gets a free 72-hour retention window. To keep it longer, call /extend with a number of days. See snapshot pricing.

GET /v1/snapshots free (proof)

List your non-expired snapshots. Each row includes size_gb, expires_at, and remaining_days so you can decide whether to extend.

GET /v1/snapshots/:id free (proof)

Snapshot detail: source server, size_gb, region, expires_at, remaining_days, created_at.

POST /v1/snapshots/:id/extend size_gb × days × $0.00267

Extend retention by N days. Charge is floored at $0.01 per call. New expiry is max(now, current_expires_at) + days — stacking extensions never shrinks remaining life.

paramtypedescription
days *integerDays to add (1–365)
Returns: id, expires_at, remaining_days, days_added, charged
DELETE /v1/snapshots/:id free (proof)

Delete a snapshot early. No refund for unused retention days.

SSH Keys

POST /v1/keys $0.001

Register an SSH public key.

paramtypedescription
name *stringDisplay name
public_key *stringFull public key (e.g. ssh-ed25519 AAAA...)
Returns: id, name, fingerprint
GET /v1/keys free (proof)

List your registered SSH keys.

DELETE /v1/keys/:id free (proof)

Remove an SSH key.