API guide
Everything in i3deploy — deploys, projects, services, and releases — is available over a plain
REST API at https://backend.i3deploy.com. This page covers auth and the key endpoints; for the
full interactive reference, see:
- Swagger UI — browse every endpoint, try requests from the browser.
- Redoc — the same schema as a static, readable reference doc.
Auth
Every request needs an API key, sent as a bearer token:
curl https://backend.i3deploy.com/v1/deploys \
-H "Authorization: Bearer $I3DEPLOY_API_KEY"
Create a key from the API Keys page in the app (app.i3deploy.com → your org → API Keys).
The key is shown once at creation time — copy it somewhere safe.
Keys are org-scoped, not user-scoped: whichever organization the key belongs to is the only one it can read or write. There's no separate "project" or "service" scope — one key covers every project and service in the org, so one key per CI system or integration is usually enough.
Key endpoints
POST /v1/deploys — start a deploy
curl -X POST https://backend.i3deploy.com/v1/deploys \
-H "Authorization: Bearer $I3DEPLOY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"service":"web","env":"production","version":"1.4.2","commit_sha":"abc123"}'
See the Quickstart for the full start/finish flow and the vendored
i3deploy.sh script.
GET /v1/projects — list projects, POST to create one
curl -X POST https://backend.i3deploy.com/v1/projects \
-H "Authorization: Bearer $I3DEPLOY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"slug":"marketing-site","title":"Marketing site"}'
GET /v1/services — list services, POST to create one
curl -X POST https://backend.i3deploy.com/v1/services \
-H "Authorization: Bearer $I3DEPLOY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"slug":"web","project":"marketing-site","display_name":"Web"}'
POST /v1/service-releases — record a service's changelog
curl -X POST https://backend.i3deploy.com/v1/service-releases \
-H "Authorization: Bearer $I3DEPLOY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"service":"web","version":"1.4.2","commit_sha":"abc123","changelog_markdown":"- Fixed the checkout redirect loop"}'
POST /v1/project-releases — bundle service releases into a project release
curl -X POST https://backend.i3deploy.com/v1/project-releases \
-H "Authorization: Bearer $I3DEPLOY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"project":"marketing-site","title":"2.4","version_numeric":"2.4.0","markdown_users":"Fixed checkout","service_releases":[{"service":"web","version":"1.4.2"}]}'
See Cutting releases for the full ServiceRelease/ProjectRelease model and field shapes.
GET /v1/api-keys — list your org's keys, POST to mint one
Key management is one level up from everything else: it's only available to a logged-in user
account (never another API key — a limited key can't mint itself a broader one), and it takes an
organization query param to pick which org's keys you're managing:
curl -X POST "https://backend.i3deploy.com/v1/api-keys?organization=acme-inc" \
-H "Cookie: <your session cookie>" \
-H "Content-Type: application/json" \
-d '{"name":"ci-pipeline"}'
In practice you'll do this from the API Keys page in the app rather than curl. The response
includes the raw secret — that's the only time it's ever returned. Store it now; every later
GET on this endpoint omits it.
GET /v1/organizations — the orgs your key (or account) can see
curl https://backend.i3deploy.com/v1/organizations \
-H "Authorization: Bearer $I3DEPLOY_API_KEY"
POST to this endpoint creates a new organization, but only for a logged-in user account, not an
API key — it's tied to per-user ownership limits, so create new orgs from the app UI instead of
CI.
Everything else
The list above covers what most integrations need. For the full set of endpoints, request/response shapes, and fields, use the Swagger UI or Redoc — both are generated straight from the live schema, so they never drift from what the server actually accepts.