Create a key
Developer → API keys → Create. Keys look like mp_live_… and carry the scopes they are allowed to use.
API docs
OpenAI-shaped REST API at /api/v1. Bearer key, JSON in, JSON out — billed from the same credit balance as chat.
Developer → API keys → Create. Keys look like mp_live_… and carry the scopes they are allowed to use.
Point your client at https://fastmoved.com/api/v1. Anything that speaks OpenAI usually only needs the base URL swapped.
POST a model plus messages and read the reply. Each key gets 60 requests per minute.
Authentication
Every request carries an Authorization header. Missing, malformed or revoked keys return 401 INVALID_API_KEY.
Authorization: Bearer mp_live_…
Scopes
Endpoints
Four routes cover the whole public surface.
Generate a completion (non-streaming).
model* · messages* · temperature 0–2 · max_tokens 1–32000 (default 2048)
List enabled models with vision / reasoning flags.
No parameters
List saved Studio artifacts.
?project=<id> to filter by project
Trigger a workflow run. Responds 201 with the run.
JSON object matching the workflow inputs
Copy-paste samples
curl https://fastmoved.com/api/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-terra",
"messages": [{ "role": "user", "content": "Ship faster." }],
"max_tokens": 512
}'import requests
res = requests.post(
"https://fastmoved.com/api/v1/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "gpt-5.6-terra",
"messages": [{"role": "user", "content": "Ship faster."}],
"max_tokens": 512,
},
timeout=120,
)
print(res.json()["choices"][0]["message"]["content"])const res = await fetch("https://fastmoved.com/api/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gpt-5.6-terra",
messages: [{ role: "user", content: "Ship faster." }],
max_tokens: 512,
}),
});
const json = await res.json();
console.log(json.choices[0].message.content);Every failure is JSON shaped { error: { code, message } }.
Missing or revoked Bearer key.
Body failed validation — check required fields and ranges.
Unknown or disabled model id. See GET /v1/models.
Over 60 requests per minute on one key. Back off and retry.
The upstream model failed. Retry — unused reservation is released.
Chat usage reserves credits upfront from token estimates, then settles on reported usage — cached input counts at 10% weight. Per-model rates are on Pricing; one balance pays for chat and API alike.