Documentation
Four calls from nothing to a registered domain.
This page is the whole surface at a glance. The generated schema is at openapi.json, the version written for a model to read at inference time is at /.well-known/llms.txt, and the same nouns are exposed as MCP tools.
Quickstart
# 1 — get a token. no auth required for this call. $ curl -sX POST https://api.slipdock.ai/v1/workspaces \ -H 'content-type: application/json' \ -d '{"owner_email":"you@example.com","label":"my agent"}' {"workspace_id":"ws_7f3a","token":"sk_live_...","plan":"free"} $ export AUTH="authorization: Bearer sk_live_..." # 2 — everything free needs no further ceremony. $ curl -s "https://api.slipdock.ai/v1/domains/search?q=example&tlds=com,dev" $ curl -s https://api.slipdock.ai/v1/repos -H "$AUTH" -d '{"name":"my-app"}' # 3 — anything that costs money returns 402 and a next_action. $ curl -s https://api.slipdock.ai/v1/domains/register -H "$AUTH" \ -H 'idempotency-key: reg-example-com-1' \ -d '{"domain":"example.com","years":1}' {"error":"payment_required", "next_action":{"type":"await_payment", "poll":"/v1/orders/o_1f2e", "pay_link_sent_to":"y***@example.com"}} # 4 — poll every 2-5s. do not poll faster. $ curl -s https://api.slipdock.ai/v1/orders/o_1f2e -H "$AUTH" {"state":"complete","resources":[{"kind":"domain","name":"example.com"}]}
Authentication
One credential for everything. Authorization: Bearer sk_live_…
on the REST API, and the same token as the git password (with the workspace id
as the username) when you push. There is no second set of credentials to
manage, and no OAuth dance, because there is no browser in this flow.
The token is scoped to one workspace. Tokens are shown once, at creation. If you lose it, the workspace owner can be emailed — you cannot recover it yourself, which is the point.
Endpoints
workspace + auth
| Method | Path | What it does |
|---|---|---|
| POST | /v1/workspaces | Create a workspace and return a scoped token. No auth. |
| GET | /v1/workspaces/me | Who am I, plan, wallet, limits. |
| GET | /v1/events | Audit timeline the agent can read. |
domains
| Method | Path | What it does |
|---|---|---|
| GET | /v1/domains/search?q=&tlds= | Availability and a firm price per TLD. |
| POST | /v1/domains/register | Create an order. Costs money — returns 402 or completes from the wallet. |
| GET | /v1/domains | What this workspace owns. |
| GET | /v1/domains/{domain} | One domain, with expiry and renewal state. |
dns — free
| Method | Path | What it does |
|---|---|---|
| GET | /v1/dns/{zone}/records | Read the zone. |
| POST | /v1/dns/{zone}/records | Create a record. |
| DELETE | /v1/dns/{zone}/records | Delete a record. |
| POST | /v1/dns/{zone}/point-at-app | Wire a zone at an app in one call. |
code + hosting
| Method | Path | What it does |
|---|---|---|
| POST | /v1/repos | Claim a free private git repository. |
| GET | /v1/repos | Repos and their latest commit. |
| POST | /v1/apps | Build and deploy from a repo. |
| GET | /v1/apps | Deployed apps and their URLs. |
| POST | /v1/static | Publish a static site. |
money
| Method | Path | What it does |
|---|---|---|
| GET | /v1/wallet | Balance, cap, ledger, runway. |
| POST | /v1/wallet/topup | Ask the human for credit. Emails a link. |
| GET | /v1/orders/{id} | Poll an order. |
| GET | /v1/plan | Quota usage and limits. |
| GET | /v1/subscriptions | Recurring services and runway_days. |
| DELETE | /v1/subscriptions/{id} | Cancel a recurring service. |
The error contract
Every non-2xx response has the same shape, and the important part is
next_action. An agent should branch on it rather than on the
status code or on prose.
{
"error": "payment_required",
"message": "This order needs the workspace owner to approve payment.",
"next_action": {
"type": "await_payment",
"poll": "/v1/orders/o_123",
"pay_link_sent_to": "o***@example.com",
"expires_at": "2026-08-02T18:00:00Z"
}
}| next_action.type | What the agent should do |
|---|---|
| await_payment | A human has been emailed. Poll the order and tell your user. |
| await_owner | Something needs the workspace owner that is not a payment. |
| retry | Transient. Try the same call again after a short delay. |
| retry_with | Fixable. The object names the field to change. |
| search_alternatives | The name is gone. Suggest others; search is free. |
| create_workspace | No valid token. Start at POST /v1/workspaces. |
| upgrade_plan | A quota is exhausted and the plan throttles rather than bills. |
| request_topup | The wallet cannot cover this. POST /v1/wallet/topup. |
| overage_billed | Over the allowance; the excess draws from the wallet. |
| contact_support | We got it wrong. Do not retry in a loop. |
| done | Nothing further is required. |
402 is not a failure. It is the normal first-purchase path. The correct agent behaviour is to tell the user "I have emailed you a link to approve $X" and keep polling.
Idempotency
Send an Idempotency-Key header on any POST. Repeating a
register call with the same key returns the same order instead of buying
twice. Registration additionally defaults to keying on the domain name, so an
accidental retry is safe even if you forget the header — the failure mode of
an agent retry loop should not be two domains.
Shipping code without a container image
You do not need Docker, a registry, or a build pipeline. Claim a repo, push
source, and Slipdock builds and deploys it. git push is the one
transport every coding agent already has.
$ curl -s https://api.slipdock.ai/v1/repos -H "$AUTH" -d '{"name":"my-app"}' {"clone_url":"https://git.slipdock.ai/ws_7f3a/my-app.git"} $ git init -b main && git add -A && git commit -m "initial" $ git remote add slipdock https://ws_7f3a:$SLIPDOCK_TOKEN@git.slipdock.ai/ws_7f3a/my-app.git $ git push -u slipdock main → buildpack build → deployed → https://my-app.slipdock.app
The repo is private, and it is a plain git remote. Clone it and host it elsewhere whenever you like — any design that makes leaving hard would be a bug, not a moat.
MCP server
The same nouns as tools, for agents that speak the Model Context Protocol: slipdock_setup, search_domains, register_domain, check_order, create_repo, check_plan, list_domains, wallet_status, request_topup.
Manners
- Search is cached and cheap, but upstream registries rate-limit us and we pass that on. Do not loop it hundreds of times.
- Poll orders every 2–5 seconds. Faster gets you throttled and finds out nothing sooner.
- Prices are firm and renewals equal registration, so you can quote your user confidently without a second call.
- Watch
runway_daysand warn your user before something stops. Telling someone "your site goes down in 11 days unless you add credit" is the kind of thing they hired an agent for.
Also useful
- The page written for a model, not a humanSecond person, imperative, copy-pasteable. Point your agent here.
- Failure-moment answersWhat to do when a CAPTCHA, a card wall or a 402 stops you.
- PricingEvery number, including our own margin.
- What is actually builtThe honest list, including what does not work yet.