Addons
Manage managed add-on services such as databases (MongoDB, PostgreSQL, MySQL), caches (Redis), and message brokers. Provision, connect, back up, and monitor add-ons programmatically.
All endpoints require a valid API key with the appropriate addons:* scope.
Base URL: https://<your-instance>/api/v1
Addon Object
{
"id": "addon_abc123",
"label": "Production PostgreSQL",
"type": "postgresql",
"status": "running",
"description": "Primary relational database for user data",
"version": "15.4",
"environment": "production",
"tier": "standard",
"cpu": "1",
"memory": "2Gi",
"disk": "20Gi",
"organizationId": "org_xyz789",
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"config": {
"maxConnections": 200,
"sharedBuffers": "512MB"
},
"createdAt": "2025-01-10T08:00:00Z",
"updatedAt": "2025-01-18T16:30:00Z"
}
GET /api/v1/addons
List all add-ons accessible to the authenticated user.
Scope: addons:read
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
search | string | No | — | Search by label or description |
type | string | No | — | Filter by type: postgresql, mongodb, mysql, redis, rabbitmq |
status | string | No | — | Filter by status: pending, running, stopped, failed |
environment | string | No | — | Filter by environment: development, staging, production |
limit | integer | No | 20 | Maximum number of results to return (1-100) |
offset | integer | No | 0 | Number of results to skip for pagination |
sort | string | No | createdAt:desc | Sort field and direction, e.g. label:asc, type:asc |
Response 200 OK
{
"data": [
{
"id": "addon_abc123",
"label": "Production PostgreSQL",
"type": "postgresql",
"status": "running",
"description": "Primary relational database for user data",
"version": "15.4",
"environment": "production",
"tier": "standard",
"cpu": "1",
"memory": "2Gi",
"disk": "20Gi",
"organizationId": "org_xyz789",
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"config": {},
"createdAt": "2025-01-10T08:00:00Z",
"updatedAt": "2025-01-18T16:30:00Z"
}
],
"pagination": {
"total": 8,
"limit": 20,
"offset": 0,
"hasMore": false
}
}
POST /api/v1/addons
Provision a new managed add-on.
Scope: addons:write
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
label | string | Yes | Human-readable name for the add-on |
type | string | Yes | Service type: postgresql, mongodb, mysql, redis, rabbitmq |
cpu | string | Yes | CPU allocation, e.g. "500m", "1", "2" |
memory | string | Yes | Memory allocation, e.g. "1Gi", "4Gi" |
disk | string | Yes | Persistent disk size, e.g. "10Gi", "100Gi" |
description | string | No | Description of the add-on purpose |
version | string | No | Specific service version (defaults to latest stable) |
environment | string | No | Target environment: development, staging, production |
tier | string | No | Service tier: starter, standard, premium (default: starter) |
config | object | No | Service-specific configuration overrides |
{
"label": "Analytics MongoDB",
"type": "mongodb",
"cpu": "1",
"memory": "2Gi",
"disk": "50Gi",
"description": "MongoDB instance for analytics pipeline",
"version": "7.0",
"environment": "production",
"tier": "standard",
"config": {
"replicaSet": true
}
}
Response 201 Created
{
"id": "addon_def456",
"label": "Analytics MongoDB",
"type": "mongodb",
"status": "pending",
"description": "MongoDB instance for analytics pipeline",
"version": "7.0",
"environment": "production",
"tier": "standard",
"cpu": "1",
"memory": "2Gi",
"disk": "50Gi",
"organizationId": "org_xyz789",
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"config": {
"replicaSet": true
},
"createdAt": "2025-02-01T09:00:00Z",
"updatedAt": "2025-02-01T09:00:00Z"
}
GET /api/v1/addons/:id
Retrieve a single add-on by its ID.
Scope: addons:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
Returns the full Addon object.
PUT /api/v1/addons/:id
Update an existing add-on. Only provided fields are updated. Some fields (e.g., type) cannot be changed after creation.
Scope: addons:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
label | string | No | Updated label |
description | string | No | Updated description |
cpu | string | No | Updated CPU allocation |
memory | string | No | Updated memory allocation |
disk | string | No | Updated disk size (can only increase) |
version | string | No | Target version for upgrade |
tier | string | No | Updated service tier |
config | object | No | Updated service configuration |
{
"cpu": "2",
"memory": "4Gi",
"tier": "premium",
"config": {
"maxConnections": 500
}
}
Response 200 OK
Returns the updated Addon object.
DELETE /api/v1/addons/:id
Permanently delete an add-on and all associated data. This action is irreversible.
Scope: addons:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 204 No Content
No response body.
POST /api/v1/addons/:id/start
Start a stopped add-on.
Scope: addons:deploy
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"message": "Addon starting",
"addonId": "addon_abc123",
"status": "starting"
}
POST /api/v1/addons/:id/stop
Stop a running add-on. Connected applications will lose access.
Scope: addons:deploy
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"message": "Addon stopping",
"addonId": "addon_abc123",
"status": "stopping"
}
POST /api/v1/addons/:id/restart
Restart the add-on service.
Scope: addons:deploy
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"message": "Addon restarting",
"addonId": "addon_abc123",
"status": "restarting"
}
POST /api/v1/addons/:id/recover
Attempt to recover a failed add-on. Performs health checks and restarts the underlying service.
Scope: addons:deploy
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"message": "Recovery initiated",
"addonId": "addon_abc123",
"status": "recovering"
}
GET /api/v1/addons/:id/status
Get the real-time runtime status of an add-on.
Scope: addons:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"state": "running",
"message": "All checks passing",
"uptime": "5d 12h 34m",
"connections": 42,
"health": {
"status": "healthy",
"lastCheck": "2025-01-20T14:22:00Z"
}
}
GET /api/v1/addons/:id/credentials
Retrieve connection credentials for the add-on. Credentials are only available when the add-on is in a running state.
Scope: addons:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"host": "addon-abc123.internal.strongly.ai",
"port": 5432,
"username": "app_user",
"password": "generated-secure-password",
"database": "app_db",
"connectionString": "postgresql://app_user:generated-secure-password@addon-abc123.internal.strongly.ai:5432/app_db"
}
GET /api/v1/addons/:id/metrics
Retrieve current resource utilization metrics for the add-on.
Scope: addons:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"cpu": {
"usage": "350m",
"limit": "1",
"percentage": 35.0
},
"memory": {
"usage": "1.2Gi",
"limit": "2Gi",
"percentage": 60.0
},
"disk": {
"usage": "8.5Gi",
"limit": "20Gi",
"percentage": 42.5
},
"connections": {
"active": 42,
"max": 200
},
"timestamp": "2025-01-20T14:22:00Z"
}
GET /api/v1/addons/:id/logs
Retrieve recent logs from the add-on service.
Scope: addons:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
lines | integer | No | 100 | Number of log lines to return |
since | string | No | — | Return logs after this ISO 8601 timestamp |
container | string | No | — | Target a specific container by name |
Response 200 OK
2025-01-20T14:22:01Z [INFO] PostgreSQL 15.4 started on port 5432
2025-01-20T14:22:02Z [INFO] Accepting connections
2025-01-20T14:22:10Z [INFO] Checkpoint complete: wrote 128 buffers
2025-01-20T14:23:00Z [INFO] Connection from 10.0.1.45:52340
POST /api/v1/addons/:id/backup
Create an on-demand backup of the add-on data.
Scope: addons:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Response 200 OK
{
"message": "Backup initiated",
"backupId": "backup_001",
"addonId": "addon_abc123",
"status": "in_progress",
"startedAt": "2025-01-20T15:00:00Z"
}
PUT /api/v1/addons/:id/backup-config
Configure automated backup schedule and retention policy.
Scope: addons:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | No | Enable or disable automated backups |
schedule | string | No | Cron expression for backup schedule, e.g. "0 2 * * *" (daily at 2 AM) |
retention | integer | No | Number of backups to retain |
{
"enabled": true,
"schedule": "0 2 * * *",
"retention": 14
}
Response 200 OK
{
"addonId": "addon_abc123",
"backupConfig": {
"enabled": true,
"schedule": "0 2 * * *",
"retention": 14,
"lastBackup": "2025-01-20T02:00:00Z",
"nextBackup": "2025-01-21T02:00:00Z"
}
}
POST /api/v1/addons/:id/connect/:appId
Connect an add-on to an application. The add-on credentials are injected into the app's STRONGLY_SERVICES environment variable.
Scope: addons:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
appId | string | Yes | The application ID to connect to |
Response 200 OK
{
"message": "Addon connected to app",
"addonId": "addon_abc123",
"appId": "app_def456",
"connectionStatus": "active"
}
DELETE /api/v1/addons/:id/connect/:appId
Disconnect an add-on from an application. The credentials are removed from the app's environment.
Scope: addons:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
appId | string | Yes | The application ID to disconnect from |
Response 200 OK
{
"message": "Addon disconnected from app",
"addonId": "addon_abc123",
"appId": "app_def456",
"connectionStatus": "disconnected"
}
PUT /api/v1/addons/:id/permissions
Update access permissions for the add-on.
Scope: addons:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The add-on ID |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
isPublic | boolean | No | If true, all organization members can access this add-on |
allowedUsers | array | No | List of user IDs granted access (ignored if isPublic is true) |
{
"isPublic": false,
"allowedUsers": ["user_002", "user_003", "user_004"]
}
Response 200 OK
{
"addonId": "addon_abc123",
"permissions": {
"isPublic": false,
"allowedUsers": ["user_002", "user_003", "user_004"]
}
}
Error Responses
All endpoints may return the following error responses:
| Status | Description |
|---|---|
400 Bad Request | Invalid request body or parameters |
401 Unauthorized | Missing or invalid API key |
403 Forbidden | Insufficient scope for the requested operation |
404 Not Found | Add-on not found or not accessible |
409 Conflict | Add-on label already exists or conflicting state transition |
422 Unprocessable Entity | Validation error on request body |
429 Too Many Requests | Rate limit exceeded |
500 Internal Server Error | Unexpected server error |
{
"error": {
"code": "invalid_state",
"message": "Cannot start addon: current status is 'running'",
"status": 409
}
}