Docs Reference
API reference
The 46 endpoints of https://app.dawnrose.ai/v1. Send a token as Authorization: Bearer drt_… and JSON bodies with Content-Type: application/json; see API and SDK for tokens, errors and a walkthrough. This page is generated from the server, like the OpenAPI spec.
Ids start with their kind: prj_ projects, env_ environments, svc_ services, dep_ deployments. Each endpoint shows its TypeScript SDK method; the Python, Go, Ruby and PHP SDKs use the same names in their own style, such as services.deploy_files in Python and Services.DeployFiles in Go.
Account
Who the token belongs to and which workspaces it reaches.
Request
curl -X GET https://app.dawnrose.ai/v1/me \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"user": {
"id": "string",
"email": "string",
"name": "string"
},
"workspaces": [
{
"id": "string",
"name": "string",
"slug": "string",
"role": "string",
"plan": "string"
}
]
}Projects
Projects hold environments, and environments hold services.
GET /v1/projects
List projects
Parameters
| Name | Type | Description |
|---|---|---|
orgId | string | Only this workspace |
Returns Project[]. SDK: dawnrose.projects.list()
Request
curl -X GET https://app.dawnrose.ai/v1/projects \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
{
"id": "string",
"orgId": "string",
"name": "string",
"description": "string",
"region": "string",
"restricted": false,
"environments": [
{
"id": "string",
"name": "string"
}
],
"createdAt": "string"
}
]POST /v1/projects
Create a project
Comes with a production environment. Not available to project tokens.
JSON body
| Name | Type | Description |
|---|---|---|
name | stringrequired | Up to 100 characters |
description | string | Up to 2000 characters |
region | string | Region id, e.g. eu-central; the platform’s default when left out |
orgId | string | Workspace; default your first |
Returns Project. SDK: dawnrose.projects.create()
Request
curl -X POST https://app.dawnrose.ai/v1/projects \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"description": "string",
"region": "string",
"orgId": "string"
}'Response
{
"id": "string",
"orgId": "string",
"name": "string",
"description": "string",
"region": "string",
"restricted": false,
"environments": [
{
"id": "string",
"name": "string"
}
],
"createdAt": "string"
}GET /v1/projects/{id}
Get a project with its services
Returns the project, its environments, and the services of one environment (production unless env is given).
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
env | string | Environment id or name |
Returns object. SDK: dawnrose.projects.get()
Request
curl -X GET https://app.dawnrose.ai/v1/projects/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"project": "string",
"environment": "string",
"environments": [
"string"
],
"services": [
"string"
]
}PATCH /v1/projects/{id}
Rename or describe a project
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
name | string | Up to 100 characters |
description | string | Up to 2000 characters |
Returns Project. SDK: dawnrose.projects.update()
Request
curl -X PATCH https://app.dawnrose.ai/v1/projects/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"description": "string"
}'Response
{
"id": "string",
"orgId": "string",
"name": "string",
"description": "string",
"region": "string",
"restricted": false,
"environments": [
{
"id": "string",
"name": "string"
}
],
"createdAt": "string"
}DELETE /v1/projects/{id}
Delete a project and everything in it
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns object. SDK: dawnrose.projects.delete()
Request
curl -X DELETE https://app.dawnrose.ai/v1/projects/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"deleted": "string"
}Environments
Isolated copies of a project’s services, each with its own variables, domains and private network.
POST /v1/projects/{id}/environments
Create an environment
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
name | stringrequired | Lowercased to letters, digits and dashes, up to 32 characters |
from | string | Copy the services of this environment |
Returns Environment. SDK: dawnrose.environments.create()
Request
curl -X POST https://app.dawnrose.ai/v1/projects/{id}/environments \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"from": "string"
}'Response
{
"id": "string",
"projectId": "string",
"name": "string",
"kind": "string",
"createdAt": "string"
}PATCH /v1/environments/{id}
Rename an environment
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
name | stringrequired | Lowercased to letters, digits and dashes, up to 32 characters |
Returns Environment. SDK: dawnrose.environments.rename()
Request
curl -X PATCH https://app.dawnrose.ai/v1/environments/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'Response
{
"id": "string",
"projectId": "string",
"name": "string",
"kind": "string",
"createdAt": "string"
}DELETE /v1/environments/{id}
Delete an environment and its services
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns object. SDK: dawnrose.environments.delete()
Request
curl -X DELETE https://app.dawnrose.ai/v1/environments/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"deleted": "string"
}GET /v1/environments/{id}/logs
Runtime logs of every service in the environment
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
filter | string | Filter expression, e.g. @level:error; @service:name narrows to one service |
tail | integer | Last N lines, 1-3000; default 300 |
Returns LogLine[]. SDK: dawnrose.environments.logs()
Request
curl -X GET https://app.dawnrose.ai/v1/environments/{id}/logs \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
{
"ts": "string",
"message": "string",
"level": "string",
"stream": "string",
"replica": "string"
}
]POST /v1/environments/{id}/deploy
Deploy every service with pending changes
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
message | string | Shown with the deployment, up to 1000 characters |
Returns object. SDK: dawnrose.environments.deployChanges()
Request
curl -X POST https://app.dawnrose.ai/v1/environments/{id}/deploy \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "string"
}'Response
{
"deployments": [
"string"
]
}Services
A service runs one image: from a Docker image, a GitHub repository, or code you send.
POST /v1/environments/{id}/services
Create a service
With an image or a repo, the first deploy starts at once (deployment in the response). Without a source, send code with the files or upload endpoints. generateDomain gives it a public *.up.dawnrose.ai URL.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
name | string | Up to 60 characters; taken from the source when left out |
source | object | Where the code comes from. Leave it out to send code later with the files or upload endpoints. |
variables | { [name]: string } | Name to value. Values may reference other services: ${{ Postgres.DATABASE_URL }} |
build | object | How the service is built |
deploy | object | How the service runs |
volume | object | A persistent volume |
generateDomain | boolean | Give it a public URL on the platform domain |
deployNow | boolean | Default true when there is a source |
Returns Service. SDK: dawnrose.services.create()
Request
curl -X POST https://app.dawnrose.ai/v1/environments/{id}/services \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"source": {
"image": "string",
"repo": "string",
"branch": "string",
"rootDir": "string",
"registryUsername": "string",
"registryPassword": "string"
},
"variables": {
"name": "string"
},
"build": {
"builder": "auto",
"dockerfilePath": "string",
"buildCommand": "string",
"installCommand": "string",
"watchPaths": [
"string"
]
},
"deploy": {
"startCommand": "string",
"preDeployCommand": "string",
"port": 0,
"replicas": 0,
"restartPolicy": "ON_FAILURE",
"healthcheckPath": "string",
"healthcheckTimeout": 0,
"cronSchedule": "string"
},
"volume": {
"mountPath": "string",
"sizeGb": 0
},
"generateDomain": false,
"deployNow": false
}'Response
{
"id": "string",
"name": "string",
"state": "string",
"url": "string",
"privateDomain": "string",
"source": {
"type": "none",
"image": "string",
"repo": "string",
"branch": "string"
},
"domains": [
"string"
],
"activeDeployment": "string"
}GET /v1/services/{id}
Get a service: state, URL, domains and deployments
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Service. SDK: dawnrose.services.get()
Request
curl -X GET https://app.dawnrose.ai/v1/services/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"name": "string",
"state": "string",
"url": "string",
"privateDomain": "string",
"source": {
"type": "none",
"image": "string",
"repo": "string",
"branch": "string"
},
"domains": [
"string"
],
"activeDeployment": "string"
}PATCH /v1/services/{id}
Change a service
Changes are staged; deploy to apply them.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
name | string | Up to 60 characters |
source | object | Where the code comes from. Leave it out to send code later with the files or upload endpoints. |
build | object | How the service is built |
deploy | object | How the service runs |
autoDeploy | boolean | Deploy on git push |
Returns Service. SDK: dawnrose.services.update()
Request
curl -X PATCH https://app.dawnrose.ai/v1/services/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"source": {
"image": "string",
"repo": "string",
"branch": "string",
"rootDir": "string",
"registryUsername": "string",
"registryPassword": "string"
},
"build": {
"builder": "auto",
"dockerfilePath": "string",
"buildCommand": "string",
"installCommand": "string",
"watchPaths": [
"string"
]
},
"deploy": {
"startCommand": "string",
"preDeployCommand": "string",
"port": 0,
"replicas": 0,
"restartPolicy": "ON_FAILURE",
"healthcheckPath": "string",
"healthcheckTimeout": 0,
"cronSchedule": "string"
},
"autoDeploy": false
}'Response
{
"id": "string",
"name": "string",
"state": "string",
"url": "string",
"privateDomain": "string",
"source": {
"type": "none",
"image": "string",
"repo": "string",
"branch": "string"
},
"domains": [
"string"
],
"activeDeployment": "string"
}DELETE /v1/services/{id}
Delete a service
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns object. SDK: dawnrose.services.delete()
Request
curl -X DELETE https://app.dawnrose.ai/v1/services/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"deleted": "string"
}POST /v1/services/{id}/deploy
Deploy the service from its source
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
message | string | Shown with the deployment, up to 1000 characters |
Returns Deployment. SDK: dawnrose.services.deploy()
Request
curl -X POST https://app.dawnrose.ai/v1/services/{id}/deploy \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "string"
}'Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}POST /v1/services/{id}/restart
Restart the running deployment
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns any. SDK: dawnrose.services.restart()
Request
curl -X POST https://app.dawnrose.ai/v1/services/{id}/restart \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
"string"GET /v1/services/{id}/deployments
List deployments, newest first
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
limit | integer | 1-200; default 30 |
Returns Deployment[]. SDK: dawnrose.services.deployments()
Request
curl -X GET https://app.dawnrose.ai/v1/services/{id}/deployments \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}
]GET /v1/services/{id}/logs
Runtime logs
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
tail | integer | Last N lines, 1-5000; default 500 |
since | string | ISO timestamp |
filter | string | Filter expression, e.g. @level:error -healthcheck |
deploymentId | string | Only this deployment (dep_…) |
Returns LogLine[]. SDK: dawnrose.services.logs()
Request
curl -X GET https://app.dawnrose.ai/v1/services/{id}/logs \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
{
"ts": "string",
"message": "string",
"level": "string",
"stream": "string",
"replica": "string"
}
]GET /v1/services/{id}/metrics
CPU, memory, network and HTTP metrics
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
minutes | integer | Window, up to 43,200 (30 days); default 60. HTTP stats cover at most 24 hours |
Returns any. SDK: dawnrose.services.metrics()
Request
curl -X GET https://app.dawnrose.ai/v1/services/{id}/metrics \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
"string"POST /v1/services/{id}/exec
Run a command in the service
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
command | stringrequired | Shell command, up to 64 KB |
timeoutSec | integer | 1-600; default 60 |
Returns object. SDK: dawnrose.services.exec()
Request
curl -X POST https://app.dawnrose.ai/v1/services/{id}/exec \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"command": "string",
"timeoutSec": 0
}'Response
{
"exitCode": 0,
"output": "string",
"timedOut": false
}POST /v1/services/{id}/http
Send an HTTP request to the service over the private network
Works without a public domain. The body is cut at 20 KB.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
method | string | Letters only, default GET |
path | string | Default / |
headers | { [name]: string } | Request headers |
body | string | Request body as text |
port | integer | 1-65535; default the port the app listens on |
Returns object. SDK: dawnrose.services.request()
Request
curl -X POST https://app.dawnrose.ai/v1/services/{id}/http \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"method": "string",
"path": "string",
"headers": {
"name": "string"
},
"body": "string",
"port": 0
}'Response
{
"status": 0,
"headers": {
"name": "string"
},
"body": "string"
}Code
Send code and Dawnrose builds and deploys it: files as JSON, or a .tar.gz archive.
POST /v1/services/{id}/files
Deploy code sent as files
Builds and deploys exactly these files, like a git push without git. Up to 20 MB in total; send larger sources as an archive with upload.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
files | object[]required | At most 10,000 files and 20 MB in all; relative paths up to 1024 characters and 40 levels deep |
message | string | Shown with the deployment, up to 1000 characters |
Returns Deployment. SDK: dawnrose.services.deployFiles()
Request
curl -X POST https://app.dawnrose.ai/v1/services/{id}/files \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"files": [
{
"path": "string",
"content": "string",
"encoding": "utf8"
}
],
"message": "string"
}'Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}POST /v1/services/{id}/upload
Deploy a .tar.gz archive
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
message | string | Shown with the deployment, up to 1000 characters |
Body
application/gzip: A gzipped tar of the app’s directory, up to 500 MB
Returns Deployment. SDK: dawnrose.services.upload()
Request
curl -X POST https://app.dawnrose.ai/v1/services/{id}/upload \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}Deployments
Every build and rollout. Wait on one to know when your code is live.
GET /v1/deployments/{id}
Get a deployment
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Deployment. SDK: dawnrose.deployments.get()
Request
curl -X GET https://app.dawnrose.ai/v1/deployments/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}GET /v1/deployments/{id}/wait
Wait until a deployment finishes
Returns as soon as it is no longer queued, building or deploying, or when the timeout runs out.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
timeout | integer | Seconds, default 600, at most 1800 |
Returns Deployment. SDK: dawnrose.deployments.wait()
Request
curl -X GET https://app.dawnrose.ai/v1/deployments/{id}/wait \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}GET /v1/deployments/{id}/logs
Build and deploy logs
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
phase | "build" | "deploy" | Both when left out |
tail | integer | Last N lines, 1-20,000; default 5000 |
Returns any[]. SDK: dawnrose.deployments.logs()
Request
curl -X GET https://app.dawnrose.ai/v1/deployments/{id}/logs \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
"string"
]POST /v1/deployments/{id}/cancel
Cancel a deployment in progress
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Deployment. SDK: dawnrose.deployments.cancel()
Request
curl -X POST https://app.dawnrose.ai/v1/deployments/{id}/cancel \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}POST /v1/deployments/{id}/redeploy
Deploy the same source again
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Deployment. SDK: dawnrose.deployments.redeploy()
Request
curl -X POST https://app.dawnrose.ai/v1/deployments/{id}/redeploy \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}POST /v1/deployments/{id}/rollback
Roll back to this deployment’s image
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Deployment. SDK: dawnrose.deployments.rollback()
Request
curl -X POST https://app.dawnrose.ai/v1/deployments/{id}/rollback \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"serviceId": "string",
"status": "QUEUED",
"trigger": "string",
"message": "string",
"commitSha": "string",
"image": "string",
"port": 0
}Variables
Service and shared variables. Values can reference other services: ${{ Postgres.DATABASE_URL }}.
GET /v1/services/{id}/variables
A service’s variables
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
resolved | "1" | Include resolved values |
Returns Variables. SDK: dawnrose.variables.list()
Request
curl -X GET https://app.dawnrose.ai/v1/services/{id}/variables \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"variables": [
{
"key": "string",
"value": "string",
"sealed": false
}
]
}PATCH /v1/services/{id}/variables
Set or delete a service’s variables
Staged until the next deploy.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
variables | { [name]: string | null } | Set these; null deletes |
raw | string | .env text, as an alternative to variables |
replace | boolean | Delete every variable not in this request |
sealed | string[] | Names whose values can never be read back |
Returns VariablesChanged. SDK: dawnrose.variables.set()
Request
curl -X PATCH https://app.dawnrose.ai/v1/services/{id}/variables \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"variables": {
"name": "string"
},
"raw": "string",
"replace": false,
"sealed": [
"string"
]
}'Response
{
"changed": [
"string"
],
"removed": [
"string"
],
"hint": "string"
}Domains
Generated *.up.dawnrose.ai domains and your own, with automatic TLS.
GET /v1/services/{id}/domains
A service’s domains
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Domain[]. SDK: dawnrose.domains.list()
Request
curl -X GET https://app.dawnrose.ai/v1/services/{id}/domains \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
{
"id": "string",
"serviceId": "string",
"hostname": "string",
"url": "string",
"kind": "generated",
"targetPort": 0,
"verified": false,
"tlsStatus": "string"
}
]POST /v1/services/{id}/domains
Generate a domain, or add your own
Without hostname, generates a domain on up.dawnrose.ai. With hostname, adds a custom domain; the response lists the DNS records to create.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
hostname | string | Your domain, e.g. app.example.com; leave out to generate one |
targetPort | integer | Container port, 1-65535; default the port the app listens on |
Returns Domain. SDK: dawnrose.domains.add()
Request
curl -X POST https://app.dawnrose.ai/v1/services/{id}/domains \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hostname": "string",
"targetPort": 0
}'Response
{
"id": "string",
"serviceId": "string",
"hostname": "string",
"url": "string",
"kind": "generated",
"targetPort": 0,
"verified": false,
"tlsStatus": "string"
}POST /v1/domains/{id}/verify
Check a custom domain’s DNS now
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Domain. SDK: dawnrose.domains.verify()
Request
curl -X POST https://app.dawnrose.ai/v1/domains/{id}/verify \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"id": "string",
"serviceId": "string",
"hostname": "string",
"url": "string",
"kind": "generated",
"targetPort": 0,
"verified": false,
"tlsStatus": "string"
}DELETE /v1/domains/{id}
Remove a domain
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns any. SDK: dawnrose.domains.delete()
Request
curl -X DELETE https://app.dawnrose.ai/v1/domains/{id} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
"string"Functions
A service from one TypeScript or Python file: an HTTP handler, or a job on a cron schedule.
POST /v1/environments/{id}/functions
Create a function from one file
Deploys at once. The file is a small server that listens on $PORT; leave out code to start from a working example. With schedule, it runs as a job on that cron schedule and exits.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
name | string | Service name; function, or job with a schedule, when left out |
runtime | "typescript" | "python" | Default typescript |
code | string | Default: a starter handler |
schedule | string | null | 5-field UTC crontab; runs as a job instead of serving HTTP |
Returns any. SDK: dawnrose.functions.create()
Request
curl -X POST https://app.dawnrose.ai/v1/environments/{id}/functions \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"runtime": "typescript",
"code": "string",
"schedule": "string"
}'Response
"string"GET /v1/services/{id}/function
A function’s code
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Function. SDK: dawnrose.functions.get()
Request
curl -X GET https://app.dawnrose.ai/v1/services/{id}/function \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"serviceId": "string",
"name": "string",
"runtime": "typescript",
"file": "string",
"code": "string",
"schedule": "string",
"updatedAt": "string"
}PUT /v1/services/{id}/function
Replace a function’s code and deploy it
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
code | stringrequired | The whole new file, up to 256 KB |
schedule | string | null | 5-field UTC crontab; null or an empty string removes it |
Returns any. SDK: dawnrose.functions.update()
Request
curl -X PUT https://app.dawnrose.ai/v1/services/{id}/function \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "string",
"schedule": "string"
}'Response
"string"Templates
Databases and apps that deploy in one call.
GET /v1/templates
List templates
Parameters
| Name | Type | Description |
|---|---|---|
q | string | Matches id, name, description, tags and category; all when left out |
Returns Template[]. SDK: dawnrose.templates.list()
Request
curl -X GET https://app.dawnrose.ai/v1/templates \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
{
"id": "string",
"name": "string",
"description": "string",
"category": "string",
"tags": [
"string"
],
"services": [
{
"name": "string"
}
]
}
]POST /v1/environments/{id}/templates/{templateId}
Deploy a template into an environment
postgres, mysql, redis, mongo, n8n, drizzle-studio and the rest of GET /templates. Variables override the template’s per service.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
templateId | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
variables | { [name]: { [name]: string } } | Service name to the variables to set on it |
deploy | boolean | Default true; false only creates the services |
serviceName | string | Name for the service of a single-service template |
Returns object. SDK: dawnrose.templates.deploy()
Request
curl -X POST https://app.dawnrose.ai/v1/environments/{id}/templates/{templateId} \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"variables": {
"name": {
"name": "string"
}
},
"deploy": false,
"serviceName": "string"
}'Response
{
"template": "string",
"services": [
"string"
],
"deployments": [
"string"
]
}Tokens
Project tokens: limited to one project, for code that creates and deploys services there.
GET /v1/projects/{id}/tokens
List a project’s tokens
Needs admin on the project.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
Returns Token[]. SDK: dawnrose.tokens.list()
Request
curl -X GET https://app.dawnrose.ai/v1/projects/{id}/tokens \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
[
{
"id": "string",
"name": "string",
"prefix": "string",
"projectId": "string",
"lastUsedAt": "string",
"createdAt": "string"
}
]POST /v1/projects/{id}/tokens
Create a project token
The token reaches only this project and acts with your permissions there. Not available to project tokens.
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
JSON body
| Name | Type | Description |
|---|---|---|
name | string | Up to 100 characters |
Returns CreatedToken. SDK: dawnrose.tokens.create()
Request
curl -X POST https://app.dawnrose.ai/v1/projects/{id}/tokens \
-H "Authorization: Bearer $DAWNROSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'Response
{
"id": "string",
"name": "string",
"token": "string",
"prefix": "string",
"projectId": "string"
}DELETE /v1/projects/{id}/tokens/{tokenId}
Revoke a project token
Parameters
| Name | Type | Description |
|---|---|---|
id | stringrequired | In the path. |
tokenId | stringrequired | In the path. |
Returns object. SDK: dawnrose.tokens.delete()
Request
curl -X DELETE https://app.dawnrose.ai/v1/projects/{id}/tokens/{tokenId} \
-H "Authorization: Bearer $DAWNROSE_TOKEN"Response
{
"deleted": "string"
}Objects
The main fields of what the endpoints return. Responses can carry more fields than listed.
Me
| Name | Type | Description |
|---|---|---|
user | object | Who the token belongs to |
workspaces | object[] | Workspaces the token reaches, with your role and their plan |
Environment
| Name | Type | Description |
|---|---|---|
id | string | env_… |
projectId | string | prj_… |
name | string | e.g. production or staging |
kind | string | production, custom or pr |
createdAt | string | ISO timestamp |
Project
| Name | Type | Description |
|---|---|---|
id | string | prj_… |
orgId | string | The workspace (org_…) |
name | string | Up to 100 characters |
description | string | Up to 2000 characters |
region | string | Region id |
restricted | boolean | Only people added to the project can see it |
environments | object[] | Its environments |
createdAt | string | ISO timestamp |
updatedAt | string | ISO timestamp |
Deployment
| Name | Type | Description |
|---|---|---|
id | string | dep_… |
serviceId | string | svc_… |
status | "QUEUED" | "INITIALIZING" | "BUILDING" | "DEPLOYING" | "SUCCESS" | "FAILED" | "CRASHED" | "SLEEPING" | "REMOVING" | "REMOVED" | "CANCELLED" | "SKIPPED" | Where it is: in progress, live, stopped or over |
trigger | string | What started it, e.g. manual, mcp, webhook, upload, rollback, redeploy, changes or pr |
message | string | The deploy or commit message |
commitSha | string | null | The commit built, for repository sources |
image | string | null | The image it runs, once built |
port | number | null | The port traffic goes to |
error | string | null | Why it failed |
createdAt | string | ISO timestamp |
finishedAt | string | null | When it went live or stopped; ISO timestamp |
Domain
| Name | Type | Description |
|---|---|---|
id | string | dom_… |
serviceId | string | svc_… |
hostname | string | e.g. app.example.com |
url | string | https:// and the hostname |
kind | "generated" | "custom" | generated on the platform domain, or your own |
targetPort | number | null | Container port; null means the port the app listens on |
verified | boolean | Ownership proven; generated domains always are |
tlsStatus | string | pending, active or error |
Service
| Name | Type | Description |
|---|---|---|
id | string | svc_… |
name | string | Unique in its environment |
state | string | online, deploying, building, crashed, failed, sleeping, cron or idle |
url | string | null | The public URL, once the service has a domain |
privateDomain | string | Reachable from the other services in the environment |
source | object | Where its code comes from |
domains | any[] | Its domains, as Domain objects |
activeDeployment | any | null | The deployment serving traffic |
latestDeployment | any | null | The newest deployment, which may still be in progress |
createdAt | string | ISO timestamp |
Variables
| Name | Type | Description |
|---|---|---|
variables | object[] | Each name with its value; the value is null when sealed |
VariablesChanged
| Name | Type | Description |
|---|---|---|
changed | string[] | Names set |
removed | string[] | Names deleted |
hint | string | What to do next, usually deploy |
LogLine
| Name | Type | Description |
|---|---|---|
ts | string | ISO timestamp |
message | string | The line as the app wrote it |
level | string | debug, info, warn or error |
stream | string | stdout or stderr |
replica | string | The replica that wrote it |
Function
| Name | Type | Description |
|---|---|---|
serviceId | string | svc_… |
name | string | The function’s service name |
runtime | "typescript" | "python" | typescript runs on Node 22 |
file | string | index.ts or main.py |
code | string | The whole file |
schedule | string | null | Its crontab; null for an HTTP function |
updatedAt | string | ISO timestamp |
Template
| Name | Type | Description |
|---|---|---|
id | string | Pass it to templates.deploy |
name | string | Display name |
description | string | What it is, in a sentence |
category | string | e.g. database |
tags | string[] | Words it is found by |
services | object[] | The services it creates |
Token
| Name | Type | Description |
|---|---|---|
id | string | tok_… |
name | string | The name you gave it |
prefix | string | The token’s first characters, to tell it apart |
projectId | string | null | The one project it reaches |
lastUsedAt | string | null | ISO timestamp; null if never used |
createdAt | string | ISO timestamp |
CreatedToken
| Name | Type | Description |
|---|---|---|
id | string | tok_… |
name | string | The name you gave it |
token | string | Shown once |
prefix | string | The token’s first characters, to tell it apart |
projectId | string | null | The one project it reaches |