API Reference

Domains

A domain is a subject grouping over agents — for example Communication or Personal Growth. Domains carry a model portfolio (the models agents in the domain may use) and are the unit that workspaces map to.

Domains are either system domains, shared across the deployment, or domains you create, which are private to you. Listing returns your own domains and, by default, the system ones. You can create, rename, and delete your own domains; system domains are managed for you.

Separately, you can override which domain a tool belongs to for your own account. These tool overrides are per-user and never affect anyone else.

The domain object

A domain and its grouping metadata.

Attributes

  • id string

    Unique identifier, a UUID.

  • name string

    Display name.

  • slug string

    URL-safe identifier.

  • description nullable string

    Free-text summary.

  • owner_user_id nullable integer

    The owning user, or null for a system domain.

  • is_system boolean

    Whether this is a system domain.

  • regulated boolean

    Whether agents in the domain are treated as operating in a regulated context.

  • context_instructions nullable string

    Optional guidance applied to agents in the domain.

  • created_at string

    Creation timestamp, ISO 8601.

  • updated_at string

    Last-update timestamp, ISO 8601.

The domain object
{
  "id": "b7d34a10-2f6c-4c1e-9a3e-7e2f5c8d1a90",
  "name": "Communication",
  "slug": "communication",
  "description": "Agents for PR and communication tasks.",
  "owner_user_id": null,
  "is_system": true,
  "regulated": false,
  "context_instructions": null,
  "created_at": "2026-09-01T09:30:00",
  "updated_at": "2026-09-01T09:30:00"
}

List domains

GET /agent-hub-api/api/domains

Returns the domains visible to the caller.

Returns the domains you own together with the system domains. Set include_system to false to return only your own domains.

Authentication
Bearer token How it works

Query parameters

  • include_system boolean

    Whether to include system domains alongside your own.

    Defaults to true.

Returns

Returns a list of domain objects under data.

Request
curl "$VDF_BASE_URL/agent-hub-api/api/domains" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN"
Response 200
{
  "success": true,
  "data": [
    {
      "id": "b7d34a10-2f6c-4c1e-9a3e-7e2f5c8d1a90",
      "name": "Communication",
      "slug": "communication",
      "description": "Agents for PR and communication tasks.",
      "owner_user_id": null,
      "is_system": true,
      "regulated": false,
      "created_at": "2026-09-01T09:30:00",
      "updated_at": "2026-09-01T09:30:00"
    }
  ]
}

Create a domain

POST /agent-hub-api/api/domains

Creates a domain that you own.

Creates a domain owned by the caller. name is required; a slug is derived from it when omitted. The slug must be unique among your own domains.

Authentication
Bearer token How it works

Body parameters application/json

  • name string Required

    Display name.

  • slug string

    URL-safe identifier. Derived from name when omitted.

  • description string

    Free-text summary.

Returns

Returns the created domain object under data.

Errors

  • 400 name is missing, or a domain with this slug already exists in your scope.
  • 401 The request carries no usable user identity.
Request
curl -X POST "$VDF_BASE_URL/agent-hub-api/api/domains" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Investor Relations",
    "description": "Agents for investor communications."
  }'
Response 201
{
  "success": true,
  "data": {
    "id": "c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f",
    "name": "Investor Relations",
    "slug": "investor-relations",
    "description": "Agents for investor communications.",
    "owner_user_id": 42,
    "is_system": false,
    "regulated": false,
    "created_at": "2026-09-02T11:15:00",
    "updated_at": "2026-09-02T11:15:00"
  }
}

Retrieve a domain

GET /agent-hub-api/api/domains/{domain_id}

Returns a single domain by its identifier.

Authentication
Bearer token How it works

Path parameters

  • domain_id string Required

    The domain identifier (UUID).

Returns

Returns the domain object under data.

Errors

  • 401 The request carries no usable user identity.
  • 404 No domain with this identifier exists.
Request
curl "$VDF_BASE_URL/agent-hub-api/api/domains/b7d34a10-2f6c-4c1e-9a3e-7e2f5c8d1a90" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN"
Response 200
{
  "success": true,
  "data": {
    "id": "b7d34a10-2f6c-4c1e-9a3e-7e2f5c8d1a90",
    "name": "Communication",
    "slug": "communication",
    "description": "Agents for PR and communication tasks.",
    "owner_user_id": null,
    "is_system": true,
    "regulated": false,
    "created_at": "2026-09-01T09:30:00",
    "updated_at": "2026-09-01T09:30:00"
  }
}

Update a domain

PUT /agent-hub-api/api/domains/{domain_id}

Renames or re-describes a domain you own. Changing the name or slug re-derives the slug, which must stay unique in your scope. Only the owner may update a domain; anything else returns 404.

Authentication
Bearer token How it works

Path parameters

  • domain_id string Required

    The domain identifier (UUID).

Body parameters application/json

  • name string

    New display name.

  • slug string

    New URL-safe identifier.

  • description string

    New free-text summary.

Returns

Returns the updated domain object under data.

Errors

  • 401 The request carries no usable user identity.
  • 404 No domain with this identifier is owned by the caller, or the update is not allowed.
Request
curl -X PUT "$VDF_BASE_URL/agent-hub-api/api/domains/c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Agents for investor and analyst communications."
  }'
Response 200
{
  "success": true,
  "data": {
    "id": "c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f",
    "name": "Investor Relations",
    "slug": "investor-relations",
    "description": "Agents for investor and analyst communications.",
    "owner_user_id": 42,
    "is_system": false,
    "regulated": false,
    "updated_at": "2026-09-02T12:00:00"
  }
}

Delete a domain

DEL /agent-hub-api/api/domains/{domain_id}

Deletes an empty domain you own.

Deletes a domain you own, provided no agents still belong to it. Only the owner may delete a domain, and a domain that still has agents cannot be deleted.

Authentication
Bearer token How it works

Path parameters

  • domain_id string Required

    The domain identifier (UUID).

Returns

Returns success: true and a confirmation message once the domain is deleted.

Errors

  • 400 The domain is not owned by the caller, still has agents, or cannot be deleted.
  • 401 The request carries no usable user identity.
Request
curl -X DELETE "$VDF_BASE_URL/agent-hub-api/api/domains/c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN"
Response 200
{
  "success": true,
  "message": "Domain deleted"
}

Set domain models

PUT /agent-hub-api/api/domains/{domain_id}/models

Replaces a domain's model portfolio.

Replaces the set of models associated with a domain you own. Every name is validated against your model catalogue; an unknown model fails the whole request. Passing an empty list clears the portfolio.

Authentication
Bearer token How it works

Path parameters

  • domain_id string Required

    The domain identifier (UUID).

Body parameters application/json

  • model_names array of strings

    The model identifiers to associate with the domain. An empty list clears the portfolio.

Returns

Returns the resulting domain-model associations under data.

Errors

  • 400 model_names is not a list, or a model is not in your catalogue.
  • 401 The request carries no usable user identity.
Request
curl -X PUT "$VDF_BASE_URL/agent-hub-api/api/domains/c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f/models" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model_names": [
      "llama-3.3-70b-instruct"
    ]
  }'
Response 200
{
  "success": true,
  "data": [
    {
      "id": "d0e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f",
      "domain_id": "c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f",
      "model_name": "llama-3.3-70b-instruct"
    }
  ]
}

Assign a tool to a domain

PUT /agent-hub-api/api/domains/{domain_id}/tools/{tool_name}

Overrides, for the caller, which domain a tool belongs to.

Sets a per-user override so that, for you, the named tool is filed under the given domain. The override applies only to your account. The target domain must be one you can use — a system domain or one you own.

Authentication
Bearer token How it works

Path parameters

  • domain_id string Required

    The domain identifier (UUID) to file the tool under.

  • tool_name string Required

    The tool to override.

Returns

Returns the resulting override under data.

Errors

  • 400 The tool or domain does not exist, or the domain is not usable by the caller.
  • 401 The request carries no usable user identity.
Request
curl -X PUT "$VDF_BASE_URL/agent-hub-api/api/domains/c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f/tools/web_search" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN"
Response 200
{
  "success": true,
  "data": {
    "id": "e1f2a3b4-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
    "owner_user_id": 42,
    "tool_name": "web_search",
    "domain_id": "c9e1f2a3-4b5c-4d6e-8f90-1a2b3c4d5e6f",
    "domain_slug": "investor-relations"
  }
}

Clear a tool's domain override

DEL /agent-hub-api/api/domains/tools/{tool_name}/override

Removes the caller's domain override for a tool.

Removes your per-user domain override for the named tool, so it reverts to its default domain for you.

Authentication
Bearer token How it works

Path parameters

  • tool_name string Required

    The tool whose override should be removed.

Returns

Returns success: true and a confirmation message once the override is cleared.

Errors

  • 401 The request carries no usable user identity.
  • 404 No override exists for this tool.
Request
curl -X DELETE "$VDF_BASE_URL/agent-hub-api/api/domains/tools/web_search/override" \
  -H "Authorization: Bearer $VDF_ACCESS_TOKEN"
Response 200
{
  "success": true,
  "message": "Tool domain override cleared"
}