Base URL
Your deployment’s domain. There is no hosted multi-tenant StarForge — each installation is its own server, and your administrator gives you the address. The same host serves the console, the API, and (behind/docs) this site.
All API paths begin with /api/, with two deliberate exceptions:
Versioning
Two version numbers answer two different questions.string
The JobSpec dialect this control plane speaks, currently
forge/v2. A CLI that speaks a different
dialect cannot submit here at all. Read it from GET /api/version.string
The build of
starforge-console that is running. Useful in a bug report; not something to branch on.Requests and responses
- Request and response bodies are JSON, UTF-8. Send
Content-Type: application/json. - Timestamps are ISO 8601 with an explicit offset:
2026-08-31T09:14:22+00:00. - Log and metric streams are Server-Sent Events, not JSON — those endpoints say so.
- Uploads use a signed-URL handshake rather than posting bytes through the control plane. Ask for a URL, PUT to it, then register what you uploaded.
Lists
List endpoints takelimit and offset and return the rows directly. There is no cursor and no
envelope.
Rate limits
Applied per-IP on the endpoints where abuse is cheap: 10 login attempts per minute, 20 device-code polls per minute. Exceeding one returns429. The rest of the API is not rate limited by the
control plane; a deployment behind a gateway may add its own.
Where to go next
Authentication
Get a token, keep it fresh, and pick the right kind for what you are building.
Errors
The error shape, and what the common rejections actually mean.
Reporting from training code
The contract a training job speaks to get curves into the console.
Python SDK
starforge.report — three functions, no framework assumptions.