Joy Services
All systems operational Sign in
JoyDevelopers

Everything the console does, the API does.

REST API v1 at /api/v1 with Bearer tokens and scopes, covering quotes, deployments, power actions, reinstalls, password resets, snapshots, live stats, billing, invoices, tickets and status. Tokens are shown once, stored hashed, and can carry an expiry and an IP allow-list.

Bearer tokens with scopes600 requests / min / tokenQuote before you deployJSON status feed at /status.json
01 Two calls
Quote, then deploy

Know the price. Then watch it boot.

POST /api/v1/quote
# price a shape before deploying — same numbers as the deploy page
curl -s https://joy.services/api/v1/quote \
  -H "Authorization: Bearer $JOY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"region":"mumbai","plan":"small","os":"ubuntu-24.04","cycle":"monthly"}'

# → {"monthly":10.47,"hourly":0.014,"currency":"USD","total":10.47}
POST /api/v1/instances → GET /api/v1/jobs/{id}
# create returns a job id; poll it until the instance is running
curl -s -X POST https://joy.services/api/v1/instances \
  -H "Authorization: Bearer $JOY_TOKEN" \
  -d '{"region":"mumbai","plan":"small","os":"ubuntu-24.04","cycle":"hourly","hostname":"web-1"}'
# → {"job":"job_8f3a…","instance":"inst_51c2…"}

curl -s https://joy.services/api/v1/jobs/job_8f3a… -H "Authorization: Bearer $JOY_TOKEN"
# → {"status":"running","steps":["clone","configure","boot","agent","network","ready"],"current":"agent"}
02 Tokens, scopes, limits
Account → API

Scoped tokens, honest limits.

ScopeGrants
readList instances, read stats, invoices, tickets, status
orders.writeQuotes and new deployments
instances.writePower actions, reinstalls, password resets, snapshots, resizes
billing.readWallet, invoices and payments
*Everything the account can do
LimitValue
Requests600 per minute per token (429 with Retry-After beyond that)
Deployments10 per hour per account
Power actions10 per minute per instance
Password resets3 per 10 minutes
03 Around the API
TEAM

Team access with 2FA

Invite colleagues under Account → Security → Team; each signs in with their own credentials and TOTP. Access is scoped and revocable.

AUDIT

Every action logged

What was created, changed, billed or deleted, by whom and when, including staff actions, in your audit log.

STATUS

Machine-readable status

/status.json carries component health per region, refreshed every 30 seconds, for your own dashboards and alerts.

WEBHOOKS

Job and event delivery

Deployment steps, power events and billing events posted to your endpoint; poll GET /api/v1/jobs/{id} where you prefer.

04 Questions
How do I create a token?

Under Account → API in the console. Tokens are shown once, stored hashed, carry scopes (read, orders.write, instances.write, billing.read or *), can have an expiry and an IP allow-list.

Can I get a price before deploying?

POST /api/v1/quote returns monthly, hourly and total prices in your currency for any region, plan or custom shape and cycle, the same numbers the deploy page shows.

How do I track a deployment?

Create returns a job id; poll GET /api/v1/jobs/{id} for the steps (clone → configure → boot → agent → network → ready) and read credentials from the instance once it is running.

Next step

Script it once. Run it in every region.