7.0 KiB
Config Profiles API
Config profile management endpoints for customizing tool instances.
Authentication
All endpoints require authentication (session cookie).
GET /config-profiles
Description: List all config profiles for the current user.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
tool_type_id |
string |
No | Filter by tool type compatibility (currently returns all profiles) |
Response
Success (200 OK)
{
"profiles": [
{
"id": "uuid",
"user_id": "uuid",
"name": "my-profile",
"description": "My custom profile",
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
]
}
POST /config-profiles
Description: Create a new config profile.
Request
Request Body
{
"name": "my-profile",
"description": "My custom profile"
}
| Field | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Unique profile name (max 255 chars) |
description |
string |
No | Optional description |
Response
Success (201 Created)
Returns created profile.
Error (409 Conflict)
{
"detail": "config profile with name 'my-profile' already exists"
}
Error (422 Unprocessable Entity)
{
"detail": "Profile name cannot be empty"
}
GET /config-profiles/{profile_id}
Description: Get a config profile with its includes and mounts.
Response
Success (200 OK)
{
"id": "uuid",
"user_id": "uuid",
"name": "my-profile",
"description": "My custom profile",
"includes": [
{
"id": "uuid",
"profile_id": "uuid",
"included_profile_id": "uuid",
"included_profile_name": "base-profile",
"order_index": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
],
"mounts": [
{
"id": "uuid",
"profile_id": "uuid",
"target_path": "/etc/config",
"mode": "rw",
"files": {"test.txt": "hello"},
"order_index": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
],
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
PUT /config-profiles/{profile_id}
Description: Update a config profile.
Request
Request Body
{
"name": "updated-name",
"description": "Updated description"
}
Response
Success (200 OK)
Returns updated profile.
DELETE /config-profiles/{profile_id}
Description: Delete a config profile and all its includes and mounts.
Response
Success (204 No Content)
GET /config-profiles/defaults
Description: Get the current user's default profile assignments per tool type.
Response
Success (200 OK)
{
"default_profiles": {
"code-server": "profile-uuid-1",
"jupyter-notebook": "profile-uuid-2"
}
}
PUT /config-profiles/defaults
Description: Set the current user's default profile assignments per tool type.
Request
Request Body
{
"default_profiles": {
"code-server": "profile-uuid-1",
"jupyter-notebook": "profile-uuid-2"
}
}
| Field | Type | Required | Description |
|---|---|---|---|
default_profiles |
object |
Yes | Mapping of tool_type_id to profile_id |
Response
Success (200 OK)
Returns updated default profiles.
Error (404 Not Found)
{
"detail": "profile {profile_id} not found"
}
GET /config-profiles/defaults/{tool_type_id}
Description: Get the default profile ID for a specific tool type.
Response
Success (200 OK)
{
"tool_type_id": "code-server",
"profile_id": "profile-uuid-1"
}
GET /config-profiles/{profile_id}/includes
Description: List all includes for a config profile.
Response
Success (200 OK)
{
"includes": [
{
"id": "uuid",
"profile_id": "uuid",
"included_profile_id": "uuid",
"included_profile_name": "base-profile",
"order_index": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
]
}
POST /config-profiles/{profile_id}/includes
Description: Add an include to a config profile.
Request
Request Body
{
"included_profile_id": "uuid",
"order_index": 0
}
| Field | Type | Required | Description |
|---|---|---|---|
included_profile_id |
string |
Yes | UUID of the profile to include |
order_index |
integer |
No | Order for include resolution (default: 0) |
Response
Success (201 Created)
Returns created include.
Error (400 Bad Request)
{
"detail": "a profile cannot include itself"
}
{
"detail": "adding this include would create a circular reference"
}
PUT /config-profiles/{profile_id}/includes/{include_id}
Description: Update the order index of a profile include.
Request
Request Body
{
"order_index": 5
}
Response
Success (200 OK)
Returns updated include.
DELETE /config-profiles/{profile_id}/includes/{include_id}
Description: Remove an include from a config profile.
Response
Success (204 No Content)
GET /config-profiles/{profile_id}/mounts
Description: List all mounts for a config profile.
Response
Success (200 OK)
{
"mounts": [
{
"id": "uuid",
"profile_id": "uuid",
"target_path": "/etc/config",
"mode": "rw",
"files": {"test.txt": "hello"},
"order_index": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
]
}
POST /config-profiles/{profile_id}/mounts
Description: Add a mount to a config profile.
Request
Request Body
{
"target_path": "/etc/config",
"mode": "rw",
"files": {"test.txt": "hello"},
"order_index": 0
}
| Field | Type | Required | Description |
|---|---|---|---|
target_path |
string |
Yes | Absolute target path (must start with /) |
mode |
string |
No | Mount mode: "rw" or "ro" (default: "rw") |
files |
object |
No | Files as {path: content} |
order_index |
integer |
No | Order for mount resolution (default: 0) |
Response
Success (201 Created)
Returns created mount.
Error (422 Unprocessable Entity)
{
"detail": "Target path must be absolute (start with /)"
}
PUT /config-profiles/{profile_id}/mounts/{mount_id}
Description: Update a mount in a config profile.
Request
Request Body
{
"target_path": "/new/path",
"files": {"test.txt": "updated"},
"order_index": 2
}
Response
Success (200 OK)
Returns updated mount.
DELETE /config-profiles/{profile_id}/mounts/{mount_id}
Description: Remove a mount from a config profile.