GET /api/v1/projects/{name}
Path parameters
string
required
The unique name of the project.
Response
Returns aProject object with the full spec and status.
string
required
Always
"caravanserai/v1".string
required
Always
"Project".object
required
object
Desired state declared by the user.
Show properties
Show properties
object[]
required
Ordered list of container definitions. Each service maps to one Docker container.
Show services[]
Show services[]
string
required
Service name. Used as the DNS hostname inside the shared bridge network.
string
required
Docker image reference, e.g.
"nginx:alpine" or "postgres:15".object[]
object[]
object[]
HTTP ingress routing rules.
Show ingress[]
Show ingress[]
string
required
Unique name for this ingress rule.
string
Hostname for the ingress rule. If the value contains a dot it is used verbatim; otherwise the final hostname is assembled as
{host}.{environment}.{baseDomain}.object
required
string
RFC 3339 timestamp. When set, the GC controller deletes the project after this time. Useful for ephemeral preview environments.
object
Runtime state written by the controller manager and the agent.
Show properties
Show properties
string
Current lifecycle phase:
Pending, Scheduled, Running, Failed, Terminating, or Terminated.string
Name of the node assigned by the scheduler. Empty while
Pending.object[]
Granular observable states.
Show conditions[]
Show conditions[]
string
required
Machine-readable identifier. Common values:
Phase, TerminatingAt, NotReadyAt.string
required
One of
True, False, or Unknown.string
CamelCase word summarising why the condition has this status (e.g.
"AgentReady", "NodeNotReady").string
Human-readable explanation.
string
RFC 3339 timestamp of when this condition was last sampled.
string
RFC 3339 timestamp of when the status last changed.
Examples
curl http://localhost:8080/api/v1/projects/wordpress
{
"apiVersion": "caravanserai/v1",
"kind": "Project",
"metadata": {
"name": "wordpress",
"createdAt": "2025-04-06T09:00:00Z",
"updatedAt": "2025-04-06T09:00:10Z"
},
"spec": {
"services": [
{
"name": "db",
"image": "mysql:8",
"env": [
{ "name": "MYSQL_ROOT_PASSWORD", "value": "secret" },
{ "name": "MYSQL_DATABASE", "value": "wp" }
],
"volumeMounts": [
{ "name": "mysql-data", "mountPath": "/var/lib/mysql" }
]
},
{
"name": "app",
"image": "wordpress:latest",
"env": [
{ "name": "WORDPRESS_DB_HOST", "value": "db" },
{ "name": "WORDPRESS_DB_PASSWORD", "value": "secret" },
{ "name": "WORDPRESS_DB_NAME", "value": "wp" }
]
}
],
"volumes": [
{ "name": "mysql-data", "type": "Ephemeral" }
]
},
"status": {
"phase": "Running",
"nodeRef": "worker-01",
"conditions": [
{
"type": "Phase",
"status": "True",
"reason": "AgentReady",
"message": "All containers are running",
"lastTransitionTime": "2025-04-06T09:00:10Z"
}
]
}
}
{
"title": "Not Found",
"detail": "project not found: wordpress",
"status": 404,
"type": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404"
}