Projects
Projects are the top-level container for remote configuration. Each project belongs to one account and has a name and a URL-safe slug. Configuration is stored per project per environment.
All project endpoints are under /api/admin/projects and require a valid GitHub OAuth Bearer token.
Object: Project
{
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "My App",
"slug": "my-app",
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}| Field | Type | Description |
|---|---|---|
projectId | UUID | Unique project identifier |
accountId | UUID | ID of the owning account |
name | string | Human-readable project name |
slug | string | URL-safe identifier (lowercase alphanumeric and hyphens) |
createdAt | ISO 8601 datetime | When the project was created |
updatedAt | ISO 8601 datetime | When the project was last updated |
List Projects
Returns all projects belonging to the authenticated account.
GET /api/admin/projectsAuth: Authorization: Bearer <token>
Response: 200 OK
[
{
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "My App",
"slug": "my-app",
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}
]Example:
curl https://app.skystate.io/api/admin/projects \
-H "Authorization: Bearer <token>"Get Project by ID
GET /api/admin/projects/{projectId}Auth: Authorization: Bearer <token>
Path parameters:
| Parameter | Type | Description |
|---|---|---|
projectId | UUID | Project ID |
Responses:
| Status | Description |
|---|---|
200 | Project found — returns Project object |
404 | Project not found |
Example:
curl https://app.skystate.io/api/admin/projects/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer <token>"Get Project by Slug
GET /api/admin/projects/by-slug/{slug}Auth: Authorization: Bearer <token>
Path parameters:
| Parameter | Type | Description |
|---|---|---|
slug | string | Project slug |
Responses:
| Status | Description |
|---|---|
200 | Project found — returns Project object |
404 | Project not found |
Example:
curl https://app.skystate.io/api/admin/projects/by-slug/my-app \
-H "Authorization: Bearer <token>"Create Project
POST /api/admin/projectsAuth: Authorization: Bearer <token>
Request body:
{
"name": "My App",
"slug": "my-app"
}| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human-readable project name |
slug | string | Yes | URL-safe identifier |
Responses:
| Status | Body | Description |
|---|---|---|
201 | { "projectId": "<uuid>" } | Project created |
400 | Error | Validation error (e.g. invalid slug) |
402 | LimitResponse | Project limit reached for current tier |
404 | Error | Account not found |
LimitResponse (402):
{
"resource": "projects",
"current": 3,
"limit": 3,
"tier": "free",
"upgradeTier": "hobby",
"checkoutUrl": "/upgrade",
"code": "LIMIT_PROJECTS"
}Example:
curl -X POST https://app.skystate.io/api/admin/projects \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"My App","slug":"my-app"}'Update Project
Updates the project's display name. The slug cannot be changed after creation.
PUT /api/admin/projects/{projectId}Auth: Authorization: Bearer <token>
Path parameters:
| Parameter | Type | Description |
|---|---|---|
projectId | UUID | Project ID |
Request body:
{
"name": "New Name"
}Responses:
| Status | Description |
|---|---|
204 | Updated |
404 | Project not found |
Example:
curl -X PUT https://app.skystate.io/api/admin/projects/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name":"New Name"}'Delete Project
Permanently deletes the project and all its configuration history.
DELETE /api/admin/projects/{projectId}Auth: Authorization: Bearer <token>
Path parameters:
| Parameter | Type | Description |
|---|---|---|
projectId | UUID | Project ID |
Responses:
| Status | Description |
|---|---|
204 | Deleted |
404 | Project not found |
Example:
curl -X DELETE https://app.skystate.io/api/admin/projects/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer <token>"Tier Limits
| Tier | Max projects |
|---|---|
free | 3 |
hobby | 7 |
pro | 15 |