{"openapi":"3.1.0","info":{"title":"Constellation Control Plane API","version":"0.1.0","description":"Operator API for immutable Services, runtime Placements, and coordinated Product Releases."},"servers":[{"url":"https://api.constellationdb.dev/api/v1"}],"paths":{"/products/{productSlug}/services":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}}],"get":{"operationId":"listServices","responses":{"200":{"description":"JSON response"}}},"post":{"operationId":"createService","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OciServiceSpec"}}}},"responses":{"201":{"description":"JSON response"}}}},"/products/{productSlug}/services/{serviceName}/revisions":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"serviceName","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}}],"post":{"operationId":"publishServiceRevision","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OciServiceSpec"}}}},"responses":{"201":{"description":"JSON response"}}}},"/products/{productSlug}/services/{serviceName}/builds":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"serviceName","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}}],"get":{"operationId":"listNextJsBuilds","responses":{"200":{"description":"JSON response"}}},"post":{"operationId":"createNextJsBuild","description":"Builds one exact public GitHub commit with the platform-owned Next.js adapter, then publishes and places the content-addressed native Web revision.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["environmentSlug","gitRepositoryUrl","gitCommitSha"],"properties":{"environmentSlug":{"type":"string"},"gitRepositoryUrl":{"type":"string","format":"uri","pattern":"^https://github[.]com/"},"gitCommitSha":{"type":"string","pattern":"^[a-f0-9]{40}$"},"applicationPath":{"type":"string","default":"."}}}}}},"responses":{"202":{"description":"JSON response"}}}},"/products/{productSlug}/services/managed":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}}],"post":{"operationId":"createManagedService","description":"Creates a pinned Valkey Cache or RustFS Storage service. Generated Storage credentials are returned once.","responses":{"201":{"description":"JSON response"}}}},"/products/{productSlug}/services/{serviceName}/placements":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"serviceName","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}}],"get":{"operationId":"listServicePlacements","responses":{"200":{"description":"JSON response"}}},"post":{"operationId":"createServicePlacement","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["environmentSlug"],"properties":{"environmentSlug":{"type":"string"}}}}}},"responses":{"201":{"description":"JSON response"}}}},"/products/{productSlug}/services/{serviceName}/placements/{placementId}/lifecycle":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"serviceName","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"placementId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"queuePlacementLifecycle","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["action"],"properties":{"action":{"enum":["start","stop","restart","delete"]}}}}}},"responses":{"202":{"description":"JSON response"}}}},"/products/{productSlug}/services/{serviceName}/placements/{placementId}/ingress":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"serviceName","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"placementId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"publishServiceIngress","description":"Idempotently retries the managed constellationcdn.com hostname, DNS, and outbound Environment tunnel route for a running public Web placement.","responses":{"200":{"description":"JSON response"}}},"delete":{"operationId":"removeServiceIngress","description":"Idempotently removes the managed hostname and rebuilds the shared Environment tunnel route set without the placement.","responses":{"200":{"description":"JSON response"}}}},"/products/{productSlug}/releases":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}}],"get":{"operationId":"listProductReleases","responses":{"200":{"description":"JSON response"}}},"post":{"operationId":"createProductRelease","responses":{"201":{"description":"JSON response"}}}},"/products/{productSlug}/releases/{releaseName}/promote":{"parameters":[{"name":"productSlug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,62}$"}},{"name":"releaseName","in":"path","required":true,"schema":{"type":"string"}}],"post":{"operationId":"promoteProductRelease","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["environmentSlug"],"properties":{"environmentSlug":{"type":"string"}}}}}},"responses":{"200":{"description":"JSON response"}}}}},"components":{"securitySchemes":{},"schemas":{"OciServiceSpec":{"type":"object","additionalProperties":false,"required":["schemaVersion","name","serviceType","image","trustLevel","ports","resources","bindings"],"properties":{"schemaVersion":{"const":1},"name":{"type":"string"},"serviceType":{"enum":["web","db","worker","cache","storage","jobs","functions","cron","flags"]},"image":{"type":"string","description":"Canonical digest-pinned OCI reference"},"trustLevel":{"enum":["first_class","verified_oci","unverified_oci"]},"ports":{"type":"array","maxItems":16},"resources":{"type":"object"},"healthCheck":{"type":"object"},"bindings":{"type":"array"},"environment":{"type":"object","maxProperties":64,"additionalProperties":{"type":"string"}},"secretEnvironment":{"type":"array","maxItems":64,"description":"Opaque managed-secret references; plaintext is never part of a revision."},"volume":{"type":"object"}}}}}}