Skip to main content

Catalogs & Spaces

Partition your Hrida AI Studio instance into isolated, access-controlled AI environments for different business units, clients, or teams.

A Catalog is an isolated AI environment with its own LLM provider configuration, its own set of Spaces, and its own access rules. A Space is a collaborative workspace inside a catalog — it has members, roles, and can override the catalog's LLM settings for even more fine-grained control.

This two-level hierarchy — Catalog → Spaces — lets you run a single Hrida AI Studio instance that simultaneously serves multiple business units or client organizations, each with their own models, API keys, and users, without any cross-contamination.

Enterprise feature

Catalogs are typically enabled for enterprise deployments with multiple departments or client tenants. Contact your admin if you don't see the Catalogs section.

Not the same as API Builder's Catalogs & Spaces

API Builder has its own, completely separate "API Catalog → API Space" hierarchy (see API Catalogs, Spaces & Roles) used only to govern API definitions. It shares a name and a two-level shape with this feature by convention, nothing else — membership in one grants no access in the other.


Architecture​

Instance
└─ Catalog A (e.g., "Finance Department")
├─ LLM Provider: Azure OpenAI (Finance subscription key)
├─ Space: "Quarterly Reports" — members: finance team
│ └─ LLM override: GPT-4o (higher tier)
└─ Space: "Helpdesk" — members: support staff
└─ Catalog B (e.g., "Engineering")
├─ LLM Provider: Anthropic (Engineering API key)
└─ Space: "Code Review" — members: all engineers

Catalogs​

A catalog defines the top-level isolation boundary. Admins create and configure catalogs; non-admin users only see catalogs where they have at least one space membership.

Catalog settings​

FieldDescription
NameHuman-readable label for the catalog
SlugURL-safe unique identifier (e.g., finance-dept) — immutable after creation
LLM ProvidersOne or more LLM provider configs scoped to this catalog (API keys stored encrypted at rest)
Execution envOptional environment variables injected at runtime for tools run inside this catalog

LLM provider configuration​

Each catalog can have its own set of LLM provider entries. API keys are encrypted with the instance's HRIDAAI_SECRET_KEY before storage — plaintext keys never persist to the database.

Supported provider types mirror the instance-level provider list: OpenAI-compatible, Anthropic, Azure OpenAI, Ollama, and any custom endpoint.


Spaces​

A space is a collaborative area inside a catalog. Every space has:

  • Members — users assigned to the space with a specific role
  • LLM override — optional per-space model and provider override that takes precedence over the catalog default
  • Node LLM config — fine-grained per-workflow-node configuration for spaces that run agent workflows

Space roles​

RoleAccess
viewerRead access to resources inside the space
editorCreate and edit resources
adminFull control including member management

Adding members​

Space admins can add members from the space settings panel. Members must already have a Hrida AI Studio user account.


LLM Provider Resolution​

Every feature that calls an LLM — Agent Builder workflow nodes, the Agent Skill Test panel, the Inbox "ask agent" action — resolves which provider, model, and API key to use through the same four-level priority chain:

1. Node        node.config.llm            per-node override in a workflow graph
2. Space space llm override scoped to one Space
3. Catalog catalog.llm_providers[] the catalog's default provider
4. Global Admin → Models connections instance-wide fallback

Each level only applies if the one above it doesn't specify a value — a node with no LLM override falls through to its space, which falls through to its catalog's default provider, which falls through to the global connections configured in Admin → Models. Resolution stops at the first level that supplies a provider.

The global tier requires both a catalog and a space

Catalog- and space-level resolution only runs when a resource (a skill, a workflow node, etc.) is actually scoped to a catalog and a space. A resource with no catalog/space association (for example, an Agent Skill created outside an active space) skips straight to the global tier — there is no catalog/space context to resolve against.

Checking what will actually resolve​

Rather than guessing, fetch the effective config directly:

GET /api/v1/catalogs/{catalog_id}/spaces/{space_id}/llm-config/effective

The response includes a resolution_source map telling you exactly which tier supplied the provider and model — "node", "space", "catalog", or "global" — so you can see why a particular provider was chosen without reverse-engineering the chain by hand.

Troubleshooting "No LLM provider configured"​

This error means none of the four tiers resolved to a provider. Checklist:

  1. Does the resource (skill, workflow) have a catalog_id/space_id? If not, only the global tier is checked.
  2. If it does, does that catalog have at least one entry in LLM Providers, and is one marked default?
  3. Does the space override point at a provider that still exists on the catalog?
  4. If none of the above apply, does Admin → Models have at least one enabled connection?

Access Control​

WhoWhat they see
Instance adminAll catalogs and all spaces
Catalog adminAll spaces in their catalog
Space memberOnly the spaces they belong to
No membershipThe catalog is invisible

API​

Catalog endpoints​

MethodPathDescription
GET/api/v1/catalogs/List accessible catalogs
POST/api/v1/catalogs/Create a catalog (admin only)
GET/api/v1/catalogs/{id}Get catalog details
PATCH/api/v1/catalogs/{id}Update a catalog (admin only)
DELETE/api/v1/catalogs/{id}Delete a catalog (admin only)

Space endpoints​

MethodPathDescription
GET/api/v1/catalogs/{id}/spacesList spaces in a catalog
POST/api/v1/catalogs/{id}/spacesCreate a space
GET/api/v1/catalogs/{id}/spaces/{sid}Get space details
PATCH/api/v1/catalogs/{id}/spaces/{sid}Update a space
DELETE/api/v1/catalogs/{id}/spaces/{sid}Delete a space
GET/api/v1/catalogs/{id}/spaces/{sid}/membersList space members
POST/api/v1/catalogs/{id}/spaces/{sid}/membersAdd a member
PATCH/api/v1/catalogs/{id}/spaces/{sid}/members/{uid}Update member role
DELETE/api/v1/catalogs/{id}/spaces/{sid}/members/{uid}Remove a member

LLM configuration​

MethodPathDescription
GET/api/v1/catalogs/{id}/llm-providersList LLM providers configured on a catalog
PUT/api/v1/catalogs/{id}/llm-providersReplace the catalog's LLM providers (at most one is_default)
GET/api/v1/catalogs/{id}/spaces/{sid}/llm-configGet the space-level LLM override
PUT/api/v1/catalogs/{id}/spaces/{sid}/llm-configSet the space-level LLM override
GET/api/v1/catalogs/{id}/spaces/{sid}/llm-config/effectiveResolve the full node → space → catalog → global chain; response includes resolution_source

Security notes​

  • LLM provider API keys are encrypted at rest using Fernet encryption keyed from HRIDAAI_SECRET_KEY. They are never returned in plaintext through the API — the response redacts each key to has_api_key: true.
  • The slug of a catalog is immutable after creation to avoid breaking references.
  • Deleting a catalog removes all its spaces and member assignments. This action is irreversible.
Hrida.ai is proprietary software of Zlabs Innovation. See the license for terms. © 2026 Zlabs Innovation.