Skip to content

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

json
{
  "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"
}
FieldTypeDescription
projectIdUUIDUnique project identifier
accountIdUUIDID of the owning account
namestringHuman-readable project name
slugstringURL-safe identifier (lowercase alphanumeric and hyphens)
createdAtISO 8601 datetimeWhen the project was created
updatedAtISO 8601 datetimeWhen the project was last updated

List Projects

Returns all projects belonging to the authenticated account.

GET /api/admin/projects

Auth: Authorization: Bearer <token>

Response: 200 OK

json
[
  {
    "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:

bash
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:

ParameterTypeDescription
projectIdUUIDProject ID

Responses:

StatusDescription
200Project found — returns Project object
404Project not found

Example:

bash
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:

ParameterTypeDescription
slugstringProject slug

Responses:

StatusDescription
200Project found — returns Project object
404Project not found

Example:

bash
curl https://app.skystate.io/api/admin/projects/by-slug/my-app \
  -H "Authorization: Bearer <token>"

Create Project

POST /api/admin/projects

Auth: Authorization: Bearer <token>

Request body:

json
{
  "name": "My App",
  "slug": "my-app"
}
FieldTypeRequiredDescription
namestringYesHuman-readable project name
slugstringYesURL-safe identifier

Responses:

StatusBodyDescription
201{ "projectId": "<uuid>" }Project created
400ErrorValidation error (e.g. invalid slug)
402LimitResponseProject limit reached for current tier
404ErrorAccount not found

LimitResponse (402):

json
{
  "resource": "projects",
  "current": 3,
  "limit": 3,
  "tier": "free",
  "upgradeTier": "hobby",
  "checkoutUrl": "/upgrade",
  "code": "LIMIT_PROJECTS"
}

Example:

bash
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:

ParameterTypeDescription
projectIdUUIDProject ID

Request body:

json
{
  "name": "New Name"
}

Responses:

StatusDescription
204Updated
404Project not found

Example:

bash
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:

ParameterTypeDescription
projectIdUUIDProject ID

Responses:

StatusDescription
204Deleted
404Project not found

Example:

bash
curl -X DELETE https://app.skystate.io/api/admin/projects/550e8400-e29b-41d4-a716-446655440000 \
  -H "Authorization: Bearer <token>"

Tier Limits

TierMax projects
free3
hobby7
pro15

Built with VitePress