Skip to main content

Addons

Create and manage add-ons: managed databases, caches, message queues and vector stores that run on the platform for your apps, workspaces and workflows. See Managed Add-ons for what each type offers.

All endpoints require authentication with the X-API-Key header. Each endpoint lists the scope it needs:

ScopeGrants
addons:readList and read add-ons, their types, status, credentials, metrics, logs, schedule, backups and restores
addons:writeCreate, rename, delete, back up, restore, share, connect to apps, and set schedules and backup settings
addons:deployStart, stop, restart and recover

Base URL: https://<your-instance>/api/v1


Addon Object​

{
"_id": "addon-kheofh2erh",
"label": "orders-cache",
"type": "redis",
"description": "Session and cart cache",
"version": "7.4",
"status": "running",
"errorMessage": null,
"cpu": "0.5",
"memory": "1GB",
"disk": "1GB",
"deploymentMode": "single",
"clusterConfig": null,
"connectionInfo": {
"host": "<internal-host>",
"internalHost": "<internal-host>",
"port": 6379,
"username": "user_4s8cc3jc"
},
"connectedApps": [],
"backupConfig": { "enabled": true, "schedule": "daily", "retention": 7, "nextBackup": "2026-09-24T02:44:00Z", "lastBackup": "2026-09-23T02:44:05Z" },
"backups": [
{
"backupId": "backup-20260923024400-a1b2c3",
"trigger": "scheduled",
"status": "succeeded",
"startedAt": "2026-09-23T02:44:00Z",
"completedAt": "2026-09-23T02:44:05Z",
"sizeBytes": 18432,
"objectCount": 1,
"location": "s3://<backup-storage>/.../backup-20260923024400-a1b2c3/"
}
],
"scheduleConfig": {
"enabled": false,
"timezone": "America/New_York",
"startTime": "09:00",
"stopTime": "17:00",
"daysOfWeek": [1, 2, 3, 4, 5],
"skipHolidays": false,
"holidayCalendar": "none"
},
"permissions": { "isPublic": false, "allowedUsers": [] },
"owner": "okRpaKPh8B9asdKb2",
"organizationId": "org-acme-1a2b3c",
"createdAt": "2026-09-23T02:44:18.660Z",
"updatedAt": "2026-09-23T02:47:40.201Z"
}
FieldDescription
_idAdd-on ID (addon- followed by 10 characters)
labelDisplay name, unique within your organization
typeOne of the types from GET /addon-types
statusSee Statuses
errorMessageWhy the add-on is in error (or why a start was refused); null otherwise
platformUpdatePendingtrue while the running add-on has probe or server-setting changes from a platform update that its next start or restart applies; absent otherwise. See Platform Updates
cpu, memory, diskCurrent size (per node for a cluster). Change it with PATCH /addons/:id
gpu, gpuTypeGPU count and type, present only when requested at creation
deploymentModesingle or cluster
connectionInfoNon-secret connection details. The password and connection string are never included; read them from /credentials
connectedAppsIDs of apps the add-on is connected to
backupConfigBackup settings: enabled, schedule, retention; nextBackup (next automatic run) and lastBackup (last successful backup)
backupsBackup history, newest kept up to retention: backupId, trigger (manual or scheduled), status (starting, in_progress, succeeded, failed, skipped), startedAt, completedAt, sizeBytes, location, and error or reason when it did not succeed
restoresRestore history: restoreId, backupId (the backup restored), status (starting, in_progress, succeeded, failed), startedAt, completedAt, and error when it failed
scheduleConfigAutomatic start/stop window, present once a schedule has been saved
permissionsisPublic (everyone in the organization may use it) and allowedUsers (user IDs who may use and manage it)

Statuses​

StatusMeaning
requestedCreated; its deploy has not been accepted yet
deployingBeing created, or started and not yet accepting connections
startingA start or restart was accepted and the add-on is coming up
runningAccepting connections
stoppingA stop was accepted
stoppedNot running. Data is kept
errorDeployment or runtime failure; errorMessage says why. Use recover
pending_deleteDeletion accepted; the add-on disappears once its resources are removed

The platform keeps status current from the add-on's live state (checked every few seconds), so a list or get always reflects what the add-on is doing without calling /status.


GET /api/v1/addon-types​

List the add-on types you can create, with what each is for.

Scope: addons:read

Response 200 OK​

{
"data": [
{
"type": "postgres",
"label": "PostgreSQL",
"kind": "relational database",
"useCase": "Tables with fixed columns, joins, SQL queries, transactions and reporting - structured/tabular data.",
"supportsCluster": false
},
{
"type": "mongodb",
"label": "MongoDB",
"kind": "document store",
"useCase": "Save records whole with no fixed columns/schema - good for varied, evolving, or nested data and \"just save whatever comes in\".",
"supportsCluster": true
}
],
"meta": { "requestId": "..." }
}

The types are mongodb, postgres, mysql, redis, rabbitmq, neo4j, milvus, greenplum, surrealdb, kafka and mqtt. Use postgres, not postgresql.


GET /api/v1/addons/sizing-options​

List the node sizes an add-on can be placed on, smallest first. This is the list the Create Add-on and Resize forms use to show the largest size you can enter.

An add-on runs on the smallest node that fits its CPU and memory plus its small platform containers (a metrics container on every add-on, and for Milvus its etcd, MinIO and auth containers). A size larger than the biggest node is refused. A cluster add-on uses one node per data node. What an add-on costs is shown in FinOps only.

Scope: addons:read

Response 200 OK​

{
"data": [
{ "name": "small", "cpuMillicores": 1800, "memoryMi": 3072 },
{ "name": "medium", "cpuMillicores": 3500, "memoryMi": 7168 },
{ "name": "large", "cpuMillicores": 7000, "memoryMi": 15360 }
],
"meta": { "requestId": "..." }
}
FieldMeaning
nameNode size, as chosen for the add-on pool in Compute settings
cpuMillicores, memoryMiWhat the node can give to workloads

GET /api/v1/addons​

List the add-ons you can use: your own, those shared with you, and those shared with your whole organization.

Scope: addons:read

Query Parameters​

ParameterTypeDefaultDescription
qstringCase-insensitive match on label, description or type
typestringFilter by type, e.g. postgres
statusstringFilter by status, e.g. running
limitnumber50Page size
cursorstringmeta.nextCursor of the previous page; omit for the first page

Response 200 OK​

{
"data": [ { "_id": "addon-kheofh2erh", "label": "orders-cache", "type": "redis", "status": "running", "...": "..." } ],
"meta": { "total": 1, "limit": 50, "nextCursor": null, "requestId": "..." }
}

Each item is an Addon Object. The total is also returned in the X-Total-Count header.


POST /api/v1/addons​

Create an add-on. The response returns as soon as the add-on is recorded; it is requested until its deploy is accepted, then deploys in the background with status deploying. Poll GET /addons/:id until status is running before connecting.

The add-on runs at exactly the cpu, memory and disk given: there are no tiers, presets or defaults. It is placed on the smallest node that fits it; GET /addons/sizing-options lists those nodes. Creation is refused only when a budget that covers it is spent to its pause limit or, with billing on, the organization has no credits left; nothing is estimated. When a budget blocks it, the request fails with 402 and the budget's reason, and nothing is created. If a budget blocks the deployment after creation, the add-on is left stopped with the reason in errorMessage.

Scope: addons:write

Request Body​

FieldTypeRequiredDescription
labelstringYesDisplay name, unique within your organization
typestringYesAdd-on type from GET /addon-types
cpustringYesvCPU per node, e.g. "0.25", "1", "500m"
memorystringYesMemory per node, e.g. "2GB", "512MB"; a bare number is GB. At least the type's minimum
diskstringYesPersistent storage per node, e.g. "10GB"; a bare number is GB
descriptionstringNoFree text
versionstringNoEngine version, e.g. "18" for PostgreSQL. Omit for the type's default. See each type's page for versions
deploymentModestringNosingle (default) or cluster. Cluster mode is available for mongodb, milvus (version 2.6 or later) and greenplum
clusterConfigobjectNoWith cluster: dataNodes (3-10), replicationFactor (1-10; for Milvus, the number of in-memory copies of each loaded collection), arbiterEnabled (MongoDB), coordinatorNodes (Greenplum, 1-5)
gpustringNoNumber of GPUs, e.g. "1"
gpuTypestringNoGPU type when gpu is set, e.g. "nvidia-t4"
backupConfigobjectNoenabled (boolean), schedule (hourly, daily, weekly, monthly), retention (number of backups to keep)
curl -X POST "https://<your-instance>/api/v1/addons" \
-H "X-API-Key: $STRONGLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"label": "orders-db", "type": "postgres", "cpu": "1", "memory": "2GB", "disk": "20GB", "version": "18"}'

Response 201 Created​

The new addon, status requested (its credentials are not in it).

Errors​

StatusCodeWhen
400validation-errorA required field is missing, the type is not supported (the message lists the valid types), cluster mode was requested for a type (or Milvus version) that does not support it, or the size is not positive, below the type's minimum memory, or larger than the biggest node your organization's add-on pool provides
402payment-requiredA budget blocks the launch; the message is the budget's reason
403forbiddenYou do not belong to an organization
409duplicateAn add-on with this label already exists in your organization

GET /api/v1/addons/:id​

Get one add-on.

Scope: addons:read

Response 200 OK​

{ "data": <Addon Object>, "meta": {...} }. Returns 404 if the add-on does not exist or you cannot use it.


PATCH /api/v1/addons/:id​

Rename an add-on, change its description, or resize it.

A resize applies to the running add-on (per node for a cluster):

  • CPU and memory: the add-on restarts onto the new size and is briefly unavailable while it does; its data is kept. It runs at exactly the size given. Memory must be at least the type's minimum (64 MB for MQTT, 256 MB for Redis and SurrealDB, 512 MB for PostgreSQL and RabbitMQ, 768 MB for MySQL, 1 GB for MongoDB, Neo4j, Milvus, Greenplum and Kafka).
  • Disk: the data volume grows while the add-on keeps running. Disk can only grow; a smaller value is refused.

A resize is checked against your budgets like a start. A stopped add-on can be resized; it starts at the new size.

Scope: addons:write. You must own the add-on or be one of its allowed users.

Request Body​

FieldTypeDescription
labelstringNew display name, unique within your organization
descriptionstringNew description
cpustringNew CPU cores, e.g. "1" or "500m"
memorystringNew memory, e.g. "2GB"
diskstringNew disk, e.g. "20GB"; at least the current size
curl -X PATCH "https://<your-instance>/api/v1/addons/addon-kheofh2erh" \
-H "X-API-Key: $STRONGLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cpu": "1", "memory": "2GB", "disk": "20GB"}'

Response 200 OK​

The updated Addon Object, with the new size recorded.

Errors​

StatusCodeWhen
400validation-errorAn unsupported field, memory below the type's minimum, or a smaller disk
402payment-requiredA budget blocks the new size
409duplicateThe label is already in use in your organization

DELETE /api/v1/addons/:id​

Delete an add-on and all of its data. This cannot be undone. Take a backup first if you need the data.

The add-on moves to pending_delete and disappears once its resources are removed. The platform finishes a delete it has accepted even if your connection drops; a delete never reverts on its own. If the platform later finds the add-on in use, the delete is refused and the add-on returns to its previous status with the reason in errorMessage.

Scope: addons:write. You must own the add-on or be one of its allowed users.

Response 204 No Content​

Errors​

StatusCodeWhen
422resource-in-useThe add-on is connected to an app, bound by a feature store, attached to an agent, or used by a workflow node. The message names them; remove those references first

POST /api/v1/addons/:id/start​

Start a stopped add-on. The status moves to starting, then running when it accepts connections.

Starting is checked against your budgets: when a budget blocks it the request fails with 402 and the add-on stays stopped.

Scope: addons:deploy

Response 200 OK​

The add-on, as GET /addons/:id shows it, with its status now.


POST /api/v1/addons/:id/stop​

Stop a running add-on. Its data is kept and it can be started again. A stopped add-on does not accept connections.

Scope: addons:deploy

Response 200 OK​

The add-on, as GET /addons/:id shows it, with its status now.


POST /api/v1/addons/:id/restart​

Restart an add-on. Checked against your budgets like start.

Scope: addons:deploy

Response 200 OK​

The add-on, as GET /addons/:id shows it, with its status now.


POST /api/v1/addons/:id/recover​

Redeploy an add-on that is in error. If the add-on is already running, nothing changes. The add-on's data volume is kept; the add-on is redeployed with the same credentials.

Scope: addons:deploy

Response 200 OK​

The add-on, as GET /addons/:id shows it, with its status now.


GET /api/v1/addons/:id/status​

Check the add-on's live state and update its stored status.

Scope: addons:read

Response 200 OK​

{
"data": {
"status": "running",
"message": null,
"details": { "status": "running", "replicas": 1, "readyReplicas": 1, "...": "..." }
},
"meta": { "requestId": "..." }
}

message explains a non-running state, for example that the add-on is still starting up.


GET /api/v1/addons/:id/credentials​

Get the decrypted connection details. Available to the owner and to anyone the add-on is shared with.

Called from a workspace (with the workspace's own token, as the SDK and CLI in it do), the add-on must be attached to that workspace: a workspace reaches only the services it is attached to, so for any other add-on the call is refused with 409 and says to add the add-on to the workspace's services and restart it.

Scope: addons:read

Response 200 OK​

{
"data": {
"host": "<internal-host>",
"internalHost": "<internal-host>",
"port": 5432,
"username": "user_a1b2c3d4",
"password": "<password>",
"database": "defaultdb",
"connectionString": "postgresql://user_a1b2c3d4:<password>@<internal-host>:5432/defaultdb"
},
"meta": { "requestId": "..." }
}
  • The host is a private address reachable from apps, workspaces and workflows on the platform, not from the internet.
  • database is null for types without a database (Redis, RabbitMQ, Neo4j, Milvus, SurrealDB, Kafka, MQTT).
  • connectionString is the same string apps receive in STRONGLY_SERVICES. It is null until the add-on's first deployment has been accepted.
TypeconnectionString format
postgrespostgresql://<user>:<password>@<host>:5432/defaultdb
mysqlmysql://<user>:<password>@<host>:3306/defaultdb
greenplumpostgresql://<user>:<password>@<host>:5432/gpadmin
mongodbmongodb://<user>:<password>@<host>:27017/admin
redisredis://:<password>@<host>:6379/0
rabbitmqamqp://<user>:<password>@<host>:5672/
neo4jbolt://neo4j:<password>@<host>:7687
milvus<host>:19530 (sign in with the username and password)
surrealdbws://<user>:<password>@<host>:8000/rpc
kafka<host>:9092 (the bootstrap address; sign in with SASL/PLAIN as the username and password)
mqttmqtt://<user>:<password>@<host>:1883

GET /api/v1/addons/:id/metrics​

Measure the running add-on now. The request takes about 6 seconds: throughput and connection counts are sampled over a 5-second window.

Scope: addons:read

Response 200 OK​

{
"data": {
"cpu": { "usageMillicores": 7.8, "limitMillicores": 300, "percent": 2.6 },
"memory": { "usageBytes": 3502080, "limitBytes": 916455424, "percent": 0.4 },
"disk": { "usedBytes": 24576, "capacityBytes": 1020702720, "percent": 0 },
"network": { "receiveBytesPerSecond": 2480.6, "transmitBytesPerSecond": 1310.2, "totalBytesPerSecond": 3790.8, "windowSeconds": 5 },
"connections": { "current": 1, "openedPerMinute": 12, "windowSeconds": 5 },
"responseTime": { "avgMs": 0.9, "minMs": 0.7, "maxMs": 1.2, "samples": 5, "operation": "PING" },
"health": {
"state": "healthy",
"readyInstances": 1,
"totalInstances": 1,
"restarts": 0,
"runningSince": "2026-09-23T03:21:40+00:00",
"uptimeSeconds": 2520,
"instances": [
{ "name": "addon-kheofh2erh-sts-0", "component": "redis", "phase": "Running", "ready": true, "restarts": 0, "startedAt": "2026-09-23T03:21:40+00:00", "waitingReason": null }
]
},
"measuredAt": "2026-09-23T04:03:40.331446+00:00"
},
"meta": { "requestId": "..." }
}
FieldMeaning
cpu, memoryCurrent use against the add-on's size, and the percentage
diskSpace used on the add-on's volume against its capacity
networkTraffic in and out, in bytes per second, over the sampling window. Light traffic such as health checks shows as a small non-zero rate
connections.currentClient connections open now
connections.opened_per_minuteEvery inbound connection the add-on accepted, as a per-minute rate, including the platform's health checks
responseTimeRound-trip time of an authenticated native request from the platform to the add-on (for example a PING), averaged over 5 requests on one session
health.statehealthy (all instances ready), degraded (some ready) or unhealthy (none ready)
health.uptime_secondsHow long at least one serving instance has run without interruption
health.instancesEach instance with its phase, readiness, restart count and, when waiting, the reason

Errors​

StatusWhen
409The add-on is not running
500A measurement failed; the message says which

GET /api/v1/addons/:id/logs​

Get the add-on's log lines, oldest first: its whole log since it started, or the most recent lines. Once a stopped add-on has shut down, the list is empty.

Scope: addons:read

Query Parameters​

ParameterTypeDefaultDescription
linesnumberwhole logNumber of most recent lines
skipNewestnumber0How many of the newest lines to skip. With lines, returns the page before them: read a long log from its end with lines=100, then skipNewest=100, skipNewest=200, and so on
sincestringISO 8601 timestamp; only lines logged at or after it
containerstringContainer name, for add-ons that run more than one (Milvus)

Response 200 OK​

{
"data": [
{ "timestamp": "2026-09-23T02:44:34.593556310Z", "level": "info", "message": "1:M 23 Sep 2026 02:44:34.592 * Server initialized" },
{ "timestamp": "2026-09-23T02:44:34.593802462Z", "level": "info", "message": "1:M 23 Sep 2026 02:44:34.593 * Ready to accept connections tcp" }
],
"meta": { "requestId": "..." }
}

An invalid lines or since, or a container name the add-on does not have, returns 400.


POST /api/v1/addons/:id/backups​

Start a backup of the add-on now. The request returns the backup once it has started; it runs in the background and its outcome (succeeded with its size, or failed with the error) appears in the add-on's backups list. See Backups for what each type's backup contains.

Scope: addons:write

Response 201 Created​

The backup it started, as it appears in the add-on's backups list: status is starting, then in_progress, then succeeded (with sizeBytes) or failed (with error).

{
"data": { "backupId": "backup-20260923031500-d4e5f6", "trigger": "manual", "status": "starting", "startedAt": "2026-09-23T03:15:00Z" },
"meta": { "requestId": "..." }
}

Errors​

StatusWhen
422The add-on is not running, or a backup or restore of it is already in progress (action-in-progress)
500The backup could not be started; the message says why

GET /api/v1/addons/:id/backups​

The add-on's backup settings, its backups and its restores, newest first, and what a restore of this add-on's type does.

Scope: addons:read

Response 200 OK​

{
"data": {
"addonId": "addon-kheofh2erh",
"backupConfig": { "enabled": true, "schedule": "daily", "retention": 7, "nextBackup": "2026-10-05T02:44:00Z", "lastBackup": "2026-10-04T02:44:05Z" },
"backups": [
{
"backupId": "backup-20261004024400-a1b2c3",
"trigger": "scheduled",
"status": "succeeded",
"startedAt": "2026-10-04T02:44:00Z",
"completedAt": "2026-10-04T02:44:05Z",
"sizeBytes": 18432,
"objectCount": 1,
"location": "s3://<backup-storage>/.../backup-20261004024400-a1b2c3/"
}
],
"restores": [
{
"restoreId": "restore-20261004120000-d4e5f6",
"backupId": "backup-20261004024400-a1b2c3",
"status": "succeeded",
"startedAt": "2026-10-04T12:00:00Z",
"completedAt": "2026-10-04T12:00:21Z"
}
],
"restoreEffect": "Every key is removed, then the keys in the backup are loaded with their expiry times; until the restore finishes, reads miss keys."
},
"meta": { "requestId": "..." }
}
FieldDescription
backupsEach backup: backupId, trigger (manual or scheduled), status (starting, in_progress, succeeded, failed, skipped), startedAt, completedAt, sizeBytes, location, error (why it failed), reason (why a scheduled run was skipped), detail (why a running backup is waiting)
restoresEach restore: restoreId, backupId, status (starting, in_progress, succeeded, failed), startedAt, completedAt, error (the step that failed and its output), detail (why a running restore is waiting)
restoreEffectWhat a restore replaces, and what a connected app sees while it runs

POST /api/v1/addons/:addonId/backups/:id/restore​

Restore one of the add-on's succeeded backups (:id is its backupId) into the same add-on. Everything the add-on holds is replaced by what the backup holds: data written after the backup was taken is lost. The add-on keeps running while it restores; restoreEffect in GET /addons/:id/backups says what connected apps see. The request returns when the restore has started; follow it in the restores list. See Restoring a backup.

Scope: addons:write

Response 202 Accepted​

The restore it started, as it appears in the add-on's restores list; follow its status there.

{
"data": { "restoreId": "restore-20261004120000-d4e5f6", "backupId": "backup-20261004110000-a1b2c3", "status": "starting", "startedAt": "2026-10-04T12:00:00Z" },
"meta": { "requestId": "..." }
}

Errors​

StatusWhen
400The id is not a backup id
422The add-on is not running, the backup is not a succeeded backup of this add-on, or a backup or restore of it is already in progress (action-in-progress)
500The restore could not be started; the message says why

PUT /api/v1/addons/:id/backup-config​

Save the add-on's backup settings. While enabled, a backup runs every schedule interval, the first one interval after the schedule is enabled or changed. Retention applies to all backups, manual and scheduled, whether or not automatic backups are enabled.

Scope: addons:write

Request Body​

FieldTypeRequiredDescription
enabledbooleanYesTurn automatic backups on or off
schedulestringYeshourly, daily, weekly or monthly
retentionnumberYesNumber of successful backups to keep (whole number, at least 1); older ones are deleted

Response 200 OK​

The add-on, as GET /addons/:id shows it, with its new backupConfig.


POST /api/v1/addons/:id/connections​

Connect an add-on to an app. The app receives the add-on's connection details in its STRONGLY_SERVICES environment variable the next time it is deployed. You need to be able to use the add-on and edit the app.

Scope: addons:write | Body: { "appId": "app_abc123" }

Response 201 Created​

The add-on, as GET /addons/:id shows it, the app now in its connectedApps.


DELETE /api/v1/addons/:addonId/connections/:id​

Disconnect an add-on from an app (:id is the app's id). Also removes a connection to an app that no longer exists.

Scope: addons:write

Response 200 OK​

{ "data": { "success": true }, "meta": { "requestId": "..." } }

Sharing​

Who can reach a addon is the platform's one sharing shape: its owner, its members (role editor can use and change it, user can only use it) and its visibility (public: every user can find and use it; in a multi-tenant deployment, every user of its organization). Changing it stays with its owner and editors.

MethodPathDoesScope
GET/api/v1/addons/:id/permissionsOwner, members (userId, role) and visibilityaddons:read
POST/api/v1/addons/:id/permissions/membersShare with a user: { "userId", "role": "editor" | "user" }addons:write
DELETE/api/v1/addons/:addonId/permissions/members/:userIdStop sharing with a useraddons:write
PATCH/api/v1/addons/:id/permissions{ "visibility": "public" | "private" }addons:write

Each, except a member's removal (204), answers the permissions as they are now:

{
"data": {
"resourceId": "<addon id>",
"owner": "<user id>",
"members": [{ "userId": "<user id>", "role": "user" }],
"visibility": "private"
},
"meta": { "requestId": "req_abc123" }
}

GET /api/v1/addons/:id/schedule​

Get the add-on's automatic start/stop window. If none has been saved, returns the disabled default shown below.

Scope: addons:read

Response 200 OK​

{
"data": {
"addonId": "addon-kheofh2erh",
"scheduleConfig": {
"enabled": false,
"timezone": "UTC",
"startTime": "08:00",
"stopTime": "18:00",
"daysOfWeek": [1, 2, 3, 4, 5],
"skipHolidays": false,
"holidayCalendar": "none"
}
},
"meta": { "requestId": "..." }
}

PUT /api/v1/addons/:id/schedule​

Set the add-on's automatic start/stop window. While enabled, the add-on is started at startTime and stopped at stopTime on the selected days, in the given timezone.

Scope: addons:write

Request Body​

FieldTypeRequiredDescription
enabledbooleanYesTurn the schedule on or off
timezonestringYesIANA timezone, e.g. America/New_York
startTimestringYesHH:MM, 24-hour
stopTimestringYesHH:MM, 24-hour
daysOfWeeknumber[]Yes1 (Monday) to 7 (Sunday)
skipHolidaysbooleanNoStay stopped on holidays of holidayCalendar
holidayCalendarstringNous, uk or none

Response 200 OK​

The schedule, as GET /addons/:id/schedule shows it.

{
"data": {
"addonId": "kheofh2erh",
"scheduleConfig": { "enabled": true, "timezone": "America/New_York", "startTime": "08:00", "stopTime": "18:00", "daysOfWeek": [1, 2, 3, 4, 5], "skipHolidays": false, "holidayCalendar": "none" }
},
"meta": { "requestId": "..." }
}

Error Responses​

{
"type": "urn:strongly:problem:validation-error",
"title": "Validation failed",
"status": 400,
"detail": "Unsupported addon type \"postgresql\". Valid types: mongodb, postgres, mysql, redis, rabbitmq, neo4j, milvus, greenplum, surrealdb, kafka, mqtt",
"code": "validation-error",
"requestId": "..."
}
StatusCodeDescription
400validation-errorInvalid body or parameters
401unauthorizedMissing or invalid API key
402payment-requiredA budget or credit limit blocks the launch
403scope-required / forbiddenThe key lacks the scope, or you lack access to the add-on or app
404not-foundThe add-on (or app) does not exist or you cannot use it
409duplicateThe label is already in use in your organization
422resource-in-useDelete refused because something still uses the add-on
429rate-limitedRate limit exceeded
500internal-errorThe platform could not complete the operation