The Apps API lets you create and list applications in your Stormkit account. It is useful for automating app provisioning and for discovering appId values that are required by other API endpoints.
Creates a new application and links it to a source-code repository.
Base URL: https://api.stormkit.io
Authentication: Team-level or user-level API key passed as the Authorization header. To generate one: Profile → Account → API Keys or Team → Settings. When using a user-level key, include teamId in the request body to specify which team the application belongs to.
| Field | Type | Required | Description |
|---|---|---|---|
teamId |
string | No | ID of the team to create the application under. Required when using a user-level API key; ignored when using a team-level key (the team is derived from the key). |
repo |
string | No | Repository path in owner/slug format (e.g. acme/my-app). Omit to create a bare application. |
provider |
string | No | Source-code provider. One of github, gitlab, bitbucket. Required when repo is set. |
displayName |
string | No | Human-readable application name. Must contain only alphanumeric characters, hyphens, and underscores, with no consecutive hyphens. Auto-generated when omitted. |
| Field | Type | Description |
|---|---|---|
app |
App |
The newly created application. |
App object:
| Field | Type | Description |
|---|---|---|
id |
string | Unique application ID. |
displayName |
string | Human-readable name of the application. |
repo |
string | Repository path (e.g. github/acme/my-app). Empty when isBare is true. |
isBare |
boolean | true when no repository is linked. |
userId |
string | ID of the user who owns the application. |
teamId |
string | ID of the team the application belongs to. |
defaultEnvId |
string | ID of the default environment. Use this as envId in environment-scoped endpoints. |
createdAt |
string | Unix timestamp (seconds) when the application was created. |
| Status | Condition |
|---|---|
400 |
Invalid displayName (regex mismatch or reserved word), or unsupported provider. |
403 |
Missing/invalid API key, or the key scope is below team level. |
500 |
Internal server error. |
# Create an app linked to a GitHub repository
curl -X POST \
-H 'Authorization: <team_api_key>' \
-H 'Content-Type: application/json' \
-d '{"repo":"acme/my-app","provider":"github"}' \
'https://api.stormkit.io/v1/app'
# Create a bare application (no repository) with a custom display name
curl -X POST \
-H 'Authorization: <team_api_key>' \
-H 'Content-Type: application/json' \
-d '{"displayName":"my-bare-app"}' \
'https://api.stormkit.io/v1/app'
// Example response
{
"app": {
"id": "1510",
"displayName": "my-app",
"repo": "github/acme/my-app",
"isBare": false,
"userId": "42",
"teamId": "7",
"defaultEnvId": "305",
"createdAt": "1742723400"
}
}
GET /v1/app with the returned id to poll for the defaultEnvId once the first environment has been provisioned.Returns a paginated list of applications belonging to the authenticated user.
Base URL: https://api.stormkit.io
Authentication: User or Team level API key passed as the Authorization header (no Bearer prefix required). To generate one: Profile → Account → API Keys.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
teamId |
number | Yes | — | ID of the team to scope results to. The API key owner must be a member. |
from |
number | No | 0 |
Pagination offset. Must be ≥ 0. |
repo |
string | No | — | Exact case-insensitive match on the repository path (e.g. github/org/repo). |
displayName |
string | No | — | Exact case-insensitive match on the application display name. |
repoanddisplayNamecan be combined and are applied as AND conditions.
| Field | Type | Description |
|---|---|---|
apps |
App[] |
Array of application objects for the current page. |
hasNextPage |
boolean | true when more results exist. To fetch the next page, add from=<current_offset + len(apps)>. |
App object:
| Field | Type | Description |
|---|---|---|
id |
string | Unique application ID. Use this as appId in other endpoints. |
displayName |
string | Human-readable name of the application. |
repo |
string | Repository path (e.g. github/org/repo). Empty when isBare is true. |
isBare |
boolean | true when no repository is linked. |
userId |
string | ID of the user who owns the application. |
teamId |
string | ID of the team the application belongs to. |
defaultEnvId |
string | ID of the default environment. Use this as envId in environment-scoped endpoints. |
createdAt |
string | Unix timestamp (seconds) when the application was created. |
| Status | Condition |
|---|---|
400 |
Missing or invalid parameter (e.g. teamId omitted, non-integer). |
403 |
Missing/invalid API key, or user is not a member of the given team. |
500 |
Internal server error. |
The page size is fixed at 20 items. To iterate all pages:
from=0.hasNextPage is true, set from = from + len(apps) and repeat.hasNextPage is false.# First page
curl -X GET \
-H 'Authorization: <api_key>' \
'https://api.stormkit.io/v1/apps?teamId=7'
# Second page
curl -X GET \
-H 'Authorization: <api_key>' \
'https://api.stormkit.io/v1/apps?teamId=7&from=20'
# Exact match by repository
curl -X GET \
-H 'Authorization: <api_key>' \
'https://api.stormkit.io/v1/apps?teamId=7&repo=github/acme/my-app'
# Exact match by display name
curl -X GET \
-H 'Authorization: <api_key>' \
'https://api.stormkit.io/v1/apps?teamId=7&displayName=my-app-abc123'
// Example response
{
"apps": [
{
"id": "1510",
"displayName": "my-app-abc123",
"repo": "github/acme/my-app",
"isBare": false,
"userId": "42",
"teamId": "7",
"defaultEnvId": "305",
"createdAt": "1700489144"
}
],
"hasNextPage": false
}
Returns a single application. This is also an alias for GET /v1/app with an app-level API key.
Base URL: https://api.stormkit.io
Authentication: App-level, user-level, or team-level API key passed as the Authorization header. When using a user or team-level key, provide the application ID in the request path (for example, GET /v1/app/{appId}), and the authenticated principal must be a member of the team that owns the application. For backwards compatibility, the server also accepts appId as a query parameter.
| Field | Type | Description |
|---|---|---|
app |
App |
The application object. |
App object:
| Field | Type | Description |
|---|---|---|
id |
string | Unique application ID. |
displayName |
string | Human-readable name of the application. |
repo |
string | Repository path (e.g. github/org/repo). Empty when isBare is true. |
isBare |
boolean | true when no repository is linked. |
userId |
string | ID of the user who owns the application. |
teamId |
string | ID of the team the application belongs to. |
defaultEnvId |
string | ID of the default environment. Use this as envId in environment-scoped endpoints. |
createdAt |
string | Unix timestamp (seconds) when the application was created. |
| Status | Condition |
|---|---|
403 |
Missing/invalid API key, or the authenticated principal is not a team member. |
404 |
No application found with the given ID. |
500 |
Internal server error. |
# Using an app-level key (appId is derived from the token)
curl -X GET \
-H 'Authorization: <app_api_key>' \
-H 'Content-type: application/json' \
'https://api.stormkit.io/v1/app'
# Using a user or team-level key (appId must be provided in the URL)
curl -X GET \
-H 'Authorization: <user_or_team_api_key>' \
-H 'Content-Type: application/json' \
'https://api.stormkit.io/v1/app/1510'
// Example response
{
"app": {
"id": "1510",
"displayName": "my-app-abc123",
"repo": "github/acme/my-app",
"isBare": false,
"userId": "42",
"teamId": "7",
"defaultEnvId": "305",
"createdAt": "1700489144"
}
}
Returns the runtime configuration for published deployment matching a given hostname. This endpoint is primarily used to debug the application config.
Base URL: https://api.stormkit.io
Authentication: App-level API key passed as the Authorization header. To generate one: Your App → Your Environment → Config → Other → API Keys (app scope).
| Parameter | Type | Required | Description |
|---|---|---|---|
hostName |
string | Yes | The hostname of the deployed application (e.g. my-app.stormkit.io). |
Returns an array of configuration objects for all matching published deployments.
| Field | Type | Description |
|---|---|---|
configs |
Config[] |
Array of runtime configuration objects. |
Config object:
| Field | Type | Description |
|---|---|---|
deploymentId |
string | ID of the published deployment. |
appId |
string | ID of the application. |
envId |
string | ID of the environment. |
percentage |
number | Traffic percentage routed to this deployment (0–100). |
apiPathPrefix |
string | URL path prefix under which serverless API functions are served. |
domains |
string[] |
Custom domains associated with this deployment. null if none are configured. |
staticFiles |
object | Map of URL paths to static file metadata. |
envVariables |
object | Map of environment variable names to their values injected at runtime. |
updatedAt |
string | Unix timestamp (seconds) of the last configuration update. null if not set. |
| Status | Condition |
|---|---|
204 |
No published deployment found for the hostname. |
403 |
Missing or invalid API key. |
500 |
Internal server error. |
curl -X GET \
-H 'Authorization: <app_api_key>' \
'https://api.stormkit.io/v1/app/config?hostName=my-app.stormkit.io'
// Example response
{
"configs": [
{
"deploymentId": "8241",
"appId": "1510",
"envId": "305",
"percentage": 100,
"apiPathPrefix": "/api",
"domains": null,
"staticFiles": {
"/index": {
"fileName": "index",
"headers": {
"content-type": "text/html; charset=utf-8"
}
}
},
"envVariables": {
"NODE_ENV": "production",
"SK_APP_ID": "1510",
"SK_ENV": "production"
},
"updatedAt": null
}
]
}