Control plane API · v1

Build and operate one coordinated product.

Immutable OCI service revisions become audited placements on enrolled Environments. Cache, Storage, Web, and Worker workloads share one bounded runtime contract.

Operator endpoints

GET/projects/{productSlug}/services

List logical services and their head revisions.

POST/projects/{productSlug}/services

Create a service and immutable revision 1.

POST/projects/{productSlug}/services/managed

Create pinned Valkey Cache or RustFS Storage.

GET · POST/projects/{productSlug}/services/{serviceName}/builds

Inspect or queue an immutable Next.js commit build.

POST/projects/{productSlug}/services/{serviceName}/revisions

Publish an immutable revision.

GET · POST/projects/{productSlug}/services/{serviceName}/placements

Inspect or create runtime placements.

POST/projects/{productSlug}/services/{serviceName}/placements/{placementId}/lifecycle

Queue start, stop, restart, or delete.

POST · DELETE/projects/{productSlug}/services/{serviceName}/placements/{placementId}/ingress

Publish, retry, or remove managed Web ingress.

GET · POST/projects/{productSlug}/releases

List or create coordinated releases.

POST/projects/{productSlug}/releases/{releaseName}/promote

Promote a release to an Environment.

Security boundary

The Environment agent makes outbound requests only. The local privileged runner accepts typed operations with digest-pinned images, bounded resources, loopback host ports, private Product networks, and no remote shell surface.

Authentication

Operator APIs currently use the signed Constellation browser session. Read operations require an enabled operator; mutations require the platform administrator role.

View the complete Markdown quick reference
# Constellation Control Plane API

Base URL: https://api.constellationdb.dev/api/v1
OpenAPI: https://api.constellationdb.dev/openapi.json

Constellation turns immutable service revisions into audited placements on enrolled Environments. Native Next.js revisions reference framework-aware Web artifacts; generic services reference digest-pinned OCI images. The Environment agent is outbound-only; the privileged runner accepts typed, bounded operations and never arbitrary shell commands.

## Authentication

Operator endpoints currently use the signed Constellation browser session cookie. Read operations require an enabled operator account. Mutations require the platform_admin role. Agent endpoints use enrolled agent credentials and are intentionally omitted from this operator quick reference.

## Operator endpoints

- GET /products/{productSlug}/services — list logical services and head revisions
- POST /products/{productSlug}/services — create a service and immutable revision 1
- POST /products/{productSlug}/services/managed — create pinned Valkey Cache or RustFS Storage; Storage credentials are returned once
- GET /products/{productSlug}/services/{serviceName}/builds — list immutable Web builds
- POST /products/{productSlug}/services/{serviceName}/builds — build an exact Git commit into a native Web artifact, publish its revision, and queue its Environment placement
- POST /products/{productSlug}/services/{serviceName}/revisions — publish a new immutable revision
- GET /products/{productSlug}/services/{serviceName}/placements — list runtime placements
- POST /products/{productSlug}/services/{serviceName}/placements — place the current head revision on an Environment
- POST /products/{productSlug}/services/{serviceName}/placements/{placementId}/lifecycle — queue start, stop, restart, or delete
- POST or DELETE /products/{productSlug}/services/{serviceName}/placements/{placementId}/ingress — retry publication or remove managed Web ingress
- GET /products/{productSlug}/releases — list coordinated Product Releases
- POST /products/{productSlug}/releases — create an immutable coordinated release
- POST /products/{productSlug}/releases/{releaseName}/promote — point an Environment at a release

## Examples

List services with an authenticated session cookie:

```sh
curl --fail-with-body --silent --show-error \
  'https://api.constellationdb.dev/api/v1/products/constellation/services' \
  --cookie cookies.txt
```

Create a private Valkey placement from an existing managed Cache service:

```sh
curl --fail-with-body --silent --show-error \
  -X POST 'https://api.constellationdb.dev/api/v1/products/constellation/services/primary-cache/placements' \
  -H 'content-type: application/json' \
  --cookie cookies.txt \
  --data '{"environmentSlug":"primary-east"}'
```

Queue a bounded lifecycle operation:

```sh
curl --fail-with-body --silent --show-error \
  -X POST 'https://api.constellationdb.dev/api/v1/products/constellation/services/primary-cache/placements/{placementId}/lifecycle' \
  -H 'content-type: application/json' \
  --cookie cookies.txt \
  --data '{"action":"restart"}'
```

## Response contract

Successful mutations return JSON and use 201 for created resources or 202 for queued work. Errors use `{"error":{"code":"...","message":"...","requestId":"..."}}`. Keep the requestId when reporting a failed request.