Hubfly spaceDocs
Console

API

Hubfly space REST API

Every action in the console, the CLI and both SDKs goes through this API. It is a plain JSON over HTTPS interface with bearer-token authentication and no client library required.

Base URL and versioning

All endpoints live under a single host and are versioned in the path. The current version is v1, and it will not change shape underneath you: additive changes ship as new fields and new endpoints, and anything breaking would land on a new version prefix.

https://api.hubfly.space/api/v1

There is no sandbox

Every request runs against production data on your real account. Test with a throwaway project, and issue tokens with only the scopes the job needs. Seeauthentication for how to scope one.

Building a multi-tenant product?

Use developer sub-accounts to create isolated customer wallets, projects, resources, and machine identities. Tenant keys use ordinary resource paths; platform keys target a tenant with X-HubFly-Subaccount.

Making a request

Authenticate with a bearer token in the Authorization header. Requests with a body send JSON and set Content-Type: application/json.

curl
curl https://api.hubfly.space/api/v1/projects \
  -H "Authorization: Bearer $HUBFLY_TOKEN"
curl — with a body
curl -X POST https://api.hubfly.space/api/v1/projects/create \
  -H "Authorization: Bearer $HUBFLY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "frontend-service", "region": "us-east-1"}'

Response envelope

Successful responses wrap the payload in data and carry request metadata inmeta. The resource is never at the top level, so parsing code can be uniform across endpoints.

JSON
{
  "data": {
    "id": "proj_8f3a1d9",
    "name": "frontend-service",
    "region": "us-east-1",
    "createdAt": "2026-07-20T11:04:52.000Z"
  },
  "meta": {
    "requestId": "req_2c91ba4"
  }
}

Failures use the same envelope with an error object in place of the data:

JSON
{
  "error": {
    "code": "project_not_found",
    "message": "Project not found"
  },
  "meta": {
    "requestId": "req_2c91ba4"
  }
}

Errors and status codes lists what each status means and which failures are worth retrying.

Resource groups

The API exposes 294 endpoints, grouped by the resource they act on. Each group below maps to a section in the endpoint explorer.

GroupPath prefixEndpointsCovers
Projects & Workloads/api/v1/projects185Deployments, containers, volumes, load balancers, GPU, hibernation, and environment variables
Organizations & Teams/api/v1/organizations37Organization management, team members, semesters, budgets, and access groups
Authentication/api/v1/auth20User login, registration, sessions, API tokens, and password management
CLI & Automated Deployments/api/v1/cli15CLI authentication, container deployment sessions, and build status
Developer Sub-accounts/api/v1/subaccounts11Isolated customer tenants, wallets, machine credentials, and lifecycle controls
GitHub Integration/api/v1/github5Branch listing, repository sync, and GitHub access
Domains & DNS/api/v1/domains4Custom domain registration, DNS verification, and domain removal
GPU Computing/api/v1/gpu4GPU instance provisioning, status, and compute resources
Platform Credentials/api/v1/platform3Parent-scoped service credentials for managing and operating sub-accounts
Courses & Assignments/api/v1/courses3Course management and assignment administration
Billing & Subscriptions/api/v1/billing2Checkout sessions and subscription details
System Status/api/v1/system2System health check and status telemetry
Marketplace/api/v1/marketplace1One-click app templates and marketplace listings
Infrastructure Regions/api/v1/regions1Available deployment regions and data centers
App Templates/api/v1/templates1Pre-configured application templates

Conventions

Identifiers

IDs are opaque prefixed strings — proj_, cnt_,vol_, lb_, sub_. Treat them as strings: do not parse them, and do not assume a length.

Timestamps

All timestamps are ISO 8601 in UTC, for example2026-07-20T11:04:52.000Z. There is no local-time variant.

Verbs in paths

Mutating endpoints spell the action out in the path — /projects/create,/projects/:projectId/delete — rather than relying on the HTTP method alone. The method still matters, but the path tells you what a request does at a glance in a log.

Partial updates

Update endpoints replace the collection they are given rather than merging into it. Firewall rules and environment variables in particular are set wholesale: read the current value, modify it, and send the complete list back.

Where to go next

Something unclear or out of date? Emailsupport@hubfly.spaceBack to top