Skip to content
runmesh
Menu
Low ask / GPU·hr…

Docs

Quickstart

runmesh is one marketplace for GPU machines across providers. People use the website; programs and agents use the REST API or the MCP server. All three see the same live offers and prices.

Launching is invite-only for now

Searching the market is public. Launching works for invited accounts with credit; everyone else gets not_allowlisted. Card top-ups open soon.

Keys

Programs and agents authenticate with an agent key — create one under Console → Keys. Each key has its own lifetime budget and hourly cap and can be read-only. Send it as Authorization: Bearer bk_live_…. Keys can’t add credit, create keys or use admin endpoints.

REST API

Base URL https://runmesh.ai/api/v1. JSON in and out; errors follow RFC 7807 with a machine-readable code.

Search offers — public, no key

curl "https://runmesh.ai/api/v1/offers?gpu=RTX%204090&min_gpus=2&max_price_per_gpu=0.6&sort=price"

Returns offers[], total and facets (counts per GPU model, region and host tier, computed over everything except the facet's own filter). Prices are per hour for a 40 GB disk.

Launch a machine

K="Authorization: Bearer $RUNMESH_KEY"

# 1. your SSH public key (once)
curl -X POST https://runmesh.ai/api/v1/ssh-keys -H "$K" \
  -d "{\"name\":\"laptop\",\"public_key\":\"$(cat ~/.ssh/id_ed25519.pub)\"}"

# 2. hold the price for 120 s — disk is part of the price
curl -X POST https://runmesh.ai/api/v1/quotes -H "$K" -d '{"offer_id":"m_4be1c09a7f3d21e6b8a0","disk_gb":40}'

# 3. launch (retry with the same Idempotency-Key is safe)
curl -X POST https://runmesh.ai/api/v1/leases -H "$K" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"quote_id":"q_…","image":"ubuntu:22.04","ssh_key_ids":["key_…"],"ttl_hours":2,"max_spend_usd":5}'

# 4. poll until "state":"running", then use "ssh.command"
curl https://runmesh.ai/api/v1/leases/ls_… -H "$K"

# 5. stop (billing stops now)
curl -X DELETE https://runmesh.ai/api/v1/leases/ls_… -H "$K"

Also: GET /leases, POST /leases/{id}/extend {"hours":2}, GET /account, GET /account/ledger, GET /images/templates.

Error codes: insufficient_funds, budget_exceeded, cap_exceeded, offer_gone, quote_expired, quote_mismatch, image_invalid, no_ssh_key, not_allowlisted, key_cannot_launch, kill_switch, rate_limited.

Offer filters

gpu Comma list of exact models, e.g. RTX 4090,H100 SXM
min_gpus / max_gpus GPUs per machine
min_vram GB per GPU
max_price · max_price_per_gpu USD per hour
region · country NA, EU, AS, OC, SA, AF · ISO-2 codes
host_tier community, secure, datacenter
min_reliability · min_inet_down · min_cuda 0–1 · Mbps · e.g. 12.4
q Free text over model, country, CPU
sort price, price_per_gpu, vram, gpus, reliability, perf_per_dollar, inet_down — prefix - for descending
limit · offset Default 100, max 500

MCP

Streamable-HTTP MCP server at https://runmesh.ai/mcp, authenticated with an agent key. In Claude Code:

claude mcp add --transport http runmesh https://runmesh.ai/mcp \
  --header "Authorization: Bearer bk_live_…"

Any other MCP client:

{
  "mcpServers": {
    "runmesh": {
      "type": "http",
      "url": "https://runmesh.ai/mcp",
      "headers": { "Authorization": "Bearer bk_live_…" }
    }
  }
}

Tools: gpu_search_offers, gpu_get_offer, gpu_list_images, gpu_quote, gpu_launch, gpu_get_lease, gpu_list_leases, gpu_extend, gpu_stop, gpu_balance, gpu_topup_link. See For agents.

Billing model

  • Prepaid USD credit via Stripe. No post-paid usage.
  • Launching places a hold of about an hour plus boot time; it refills while you run and is released when you stop.
  • Metering is per second from provider allocation to termination. Machines that never start are refunded.
  • The hourly price is locked at launch.