Developers

Tireless API

The dashboard’s day-to-day surface — virtual servers, tools, ports, monitoring, marketplace browsing — over plain HTTPS. One key, ordinary JSON, no SDK required.

Getting started

  1. 1

    Create a key

    On the dashboard API page, create a key. It starts with tl_ and is shown exactly once — store it like a password. You can revoke it there at any time.

  2. 2

    Send it with every request

    Put the key in an Authorization header: Bearer tl_… — that is the only authentication step. There are no OAuth dances or signing schemes.

  3. 3

    Speak JSON to one base URL

    Every endpoint lives under https://app.tirelesscode.com/api. Requests and responses are ordinary JSON over HTTPS.

Authentication

Create your first key on the dashboard API page. One naming note before the examples: the dashboard calls your computer a virtual server, and the API’s resource name for a virtual server is workspace. That is why every path below says /workspaces.

Quick start — list your virtual servers
curl https://app.tirelesscode.com/api/workspaces \
  -H "Authorization: Bearer tl_YOUR_KEY"

A 200 response with a workspaces array means your key works.

The endpoints you’ll actually use

These are the calls day-to-day scripts and agents actually make — drawn from the same allow-list the agent connector uses. Every request needs the Authorization header, and {id}is a virtual server’s UUID from the list endpoint.

Virtual servers

GET/api/workspaces

List every virtual server you can access, with state and health.

POST/api/workspaces

Create a virtual server. Returns a checkout link when the size is not covered by a subscription yet.

GET/api/workspaces/{id}

Full detail for one virtual server: state, detected ports, links, and the latest heartbeat.

POST/api/workspaces/{id}/actions

Restart, pause (action name “suspend”), or resume a virtual server. Resizing is dashboard-only — keys get a 403.

Ports & sharing

POST/api/workspaces/{id}/shares

Turn public sharing of an HTTP port on or off.

POST/api/workspaces/{id}/exposures

Open or close the game server port (allow-listed TCP ports only).

GET/api/me/exposures

Everything currently open to the internet, across all your virtual servers.

Tools & installs

GET/api/recipes

The catalog of tools Tireless can install, with parameters and requirements.

GET/api/workspaces/{id}/installs

Installs on one virtual server, newest first. Secret parameters come back masked.

POST/api/workspaces/{id}/installs

Install a tool from the catalog on a running virtual server.

POST/api/workspaces/{id}/installs/{installId}/cancel

Cancel a queued or running install.

POST/api/workspaces/{id}/installs/{installId}/uninstall

Uninstall a tool that supports uninstalling.

GET/api/workspaces/{id}/installs/{installId}/log

The tail of an install’s log output.

Marketplace

Browsing is fully available over the API. Renting a listing completes in the browser.

GET/api/marketplace/listings

Browse every published Marketplace listing.

GET/api/marketplace/listings/{slug}

One listing in full: description, included tools, sizes, and media.

Files

POST/api/workspaces/{id}/files/list

List directories on the virtual server. Send an etag per directory to skip unchanged ones.

POST/api/workspaces/{id}/files/mkdir

Create a folder.

POST/api/workspaces/{id}/files/rename

Move or rename a file or folder.

POST/api/workspaces/{id}/files/delete

Delete a file or folder (recursive deletes must be explicit).

POST/api/workspaces/{id}/files/uploads

Request pre-signed upload URLs for a batch of files.

POST/api/workspaces/{id}/files/uploads/{sessionId}/complete

Finish an upload session so the files land on the server.

Monitoring

GET/api/workspaces/{id}/health

The current health score, the bottleneck, and a recommendation.

GET/api/workspaces/{id}/metrics

CPU, memory, disk, and network history (?range=24h or 7d).

GET/api/workspaces/{id}/heartbeats

Fine-grained resource samples from the last three hours.

GET/api/workspaces/{id}/backups

Recent backups with sizes and expiry dates.

GET/api/workspaces/{id}/events

The audit trail: what happened on the server and who did it.

GET/api/workspaces/{id}/stream

Server-sent events — a live stream that emits on every state change.

GET/api/events

Account-wide server-sent events — one stream that emits whenever any of your virtual servers changes state.

POST/api/workspaces/{id}/connect

Optional telemetry ping that records a client connecting to the server.

Account & context

GET/api/me/entitlements

What your subscription allows you to create right now.

GET/api/me/ssh-keys

Your SSH public keys — read-only. Adding or removing keys happens in the dashboard.

GET/api/me/ssh-setup

Ready-made SSH and editor connection commands for every region.

GET/api/plans

Available computer sizes and their specs.

GET/api/regions

Active regions and the sizes they support.

Worked examples

List virtual servers

The response includes every virtual server your account can access, each with its current state and latest health score.

Request
curl https://app.tirelesscode.com/api/workspaces \
  -H "Authorization: Bearer tl_YOUR_KEY"
Response — 200 (abridged)
{
  "workspaces": [
    {
      "id": "0b6f3d2e-8a41-4c2f-9d15-6e7a1b2c3d4e",
      "name": "side-project",
      "regionId": "eu-central",
      "planId": "pro",
      "desiredState": "ready",
      "observedState": "ready",
      "health": { "score": 92, "band": "healthy" },
      "ownerName": "Ada"
    }
  ]
}

Create a virtual server

Name, region, and size are required. When the size is already covered by a subscription the build is queued immediately; otherwise the response carries a checkoutUrl to complete in the browser.

Request
curl -X POST https://app.tirelesscode.com/api/workspaces \
  -H "Authorization: Bearer tl_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "side-project", "region_id": "eu-central", "tier": "starter"}'
Response — 201 (abridged)
{
  "workspace": {
    "id": "0b6f3d2e-8a41-4c2f-9d15-6e7a1b2c3d4e",
    "name": "side-project",
    "desiredState": "ready",
    "observedState": "requested"
  },
  "enqueued": true,
  "jobId": "a3d51c77-4b2e-4f8a-9c60-1e2f3a4b5c6d"
}

Restart a virtual server

Lifecycle changes go through the actions endpoint. The same call with “suspend” pauses the server and “resume” wakes it. Resizing changes what you pay, so it stays in the dashboard — the API answers 403.

Request
curl -X POST https://app.tirelesscode.com/api/workspaces/{id}/actions \
  -H "Authorization: Bearer tl_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action": "restart"}'
Response — 200
{
  "ok": true,
  "desiredState": "ready",
  "jobId": "f9e8d7c6-b5a4-4321-9876-543210fedcba"
}

Install a tool

Pick a recipe id from the catalog and install it on a running server. Watch the install’s status flip from queued to succeeded via the installs list or the log endpoint.

Request
curl -X POST https://app.tirelesscode.com/api/workspaces/{id}/installs \
  -H "Authorization: Bearer tl_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"recipe_id": "google-chrome"}'
Response — 201 (abridged)
{
  "install": {
    "id": "7c1d2e3f-4a5b-6c7d-8e9f-0a1b2c3d4e5f",
    "recipeId": "google-chrome",
    "version": "1.0.0",
    "mode": "install",
    "status": "queued",
    "requestedAt": "2026-07-18T09:30:00.000Z"
  },
  "revealedParams": {}
}

What keys can’t do

Some things stay in the dashboard on purpose: a leaked key must not be able to spend your money or destroy your servers. A key can never charge your card, change what you pay — resizing included — delete a virtual server, or touch account security, SSH keys, or the keys themselves. Purchases and plan changes finish in the browser. These are dashboard-only, and the API answers 403 no matter what key you send:

  • Billing and subscriptions
  • Resizing virtual servers — it changes what you pay
  • Deleting virtual servers
  • Account security settings
  • Adding or removing SSH keys
  • Admin surfaces
  • Referrals and payouts
  • Managing API keys themselves

Rate limits

Mutating endpoints and sensitive reads are rate limited. When you exceed a limit, the API answers 429 with a Retry-Afterheader telling you how long to wait. Defaults are generous for scripts — just don’t design tight polling loops around mutations.

Errors

Every error has the same JSON shape: a stable machine-readable code, a human-readable message, and optional details.

{
  "error": "not_found",
  "message": "no such virtual server",
  "details": null
}

AI agents (MCP)

Your agent already speaks this API.

The Tireless MCP gives Claude Code, Codex, Cursor, and Antigravity tools that use this exact same API with the same permissions — nothing more. Whatever a key can do here, your agent can do from a chat. Pick your agent for its install command:

Install the MCP plugin
claude plugin marketplace add Tireless-Coder/agent && claude plugin install tireless@tireless

Every tool the MCP gives your agent

Not just the highlights — this is the complete surface. You never call these yourself; your agent picks the right one for what you ask.

Connect & diagnose

tireless_connect_workspace

Sets everything up end to end — helper app, sign-in, SSH, clipboard — and connects to a server.

tireless_status

Checks the connection: sign-in state, helper health, and your servers' states.

tireless_login

Signs in to Tireless — you approve once in your browser, no tokens in the chat.

tireless_doctor

Runs the full diagnostic chain and returns a concrete fix for each failure.

tireless_clipboard_status

Checks the image-paste bridge between this computer and your server.

Your virtual servers

tireless_list_workspaces

Lists your virtual servers with plan and running state.

tireless_get_workspace

Full detail for one server: state, deep links, detected ports and shares.

tireless_workspace_action

Restarts, pauses, or resumes a server. Deleting is dashboard-only.

tireless_create_workspace

Creates a new server — always shows the plan and price first, and only proceeds after you approve.

tireless_watch_state

Waits until a server reaches a state (usually ready), reporting progress.

tireless_workspace_health

Health score plus CPU, memory, disk, and network charts for the last day or week.

Open & share

tireless_open_editor

Opens a server in Claude Code, VS Code, Cursor, or the browser terminal and desktop.

tireless_share_port

Makes a dev-server port publicly previewable — or takes the preview offline again.

tireless_game_port

Opens or closes a raw game-server port to the internet (like Minecraft's 25565).

tireless_exposure_overview

Everything of yours that's reachable from the internet right now, in one view.

Apps & marketplace

tireless_recipes_catalog

Browses the catalog of apps that can be installed on a server.

tireless_install_app

Installs an app on a server, handing you any generated passwords right away.

tireless_install_status

Install history for a server, with the log tail for any single install.

tireless_marketplace_browse

Browses marketplace listings. Renting happens on the dashboard, never from the agent.

tireless_marketplace_listing

Full detail for one marketplace listing — tiers, prices, included tools.

The connector is open source on GitHub

No connector? This entire reference is also one self-contained markdown document at https://tirelesscode.com/docs/api.md — fetch it, or paste it straight into your agent’s context.

Tireless is an independent product and is not affiliated with or endorsed by Anthropic.

FAQ

Do API keys expire?

No. A key stays valid until you revoke it on the dashboard API page. Revoking takes effect immediately.

What can an API key access?

Your account, with the same permissions as the agent connector: virtual servers, ports, tools, files, monitoring, and Marketplace browsing. It can never charge your card, change what you pay, delete a virtual server, or alter account security — purchases and plan changes finish in the browser.

I lost my key. Can I see it again?

No. The full key is shown exactly once, when you create it. If you lose it, revoke it on the dashboard and create a new one.

Can I rent Marketplace servers through the API?

Browsing, yes — every published listing is readable over the API. Renting is browser-only: a key cannot start or complete a checkout.

Is there an SDK?

Not yet — the API is plain HTTPS and JSON on purpose, so any language with an HTTP client already works. The curl examples on this page translate directly.

How many keys can I create?

Up to 20 per account. Use a separate key per script or machine, so you can revoke one without breaking the rest.

Your cloud computer, one HTTPS call away.

Create a key on your dashboard and make your first request in the next minute. No Tireless computer yet? Start there.