Files
headquarter/docs/api/config-profiles.md
T
2026-06-03 08:51:02 +00:00

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.

Response

Success (204 No Content)