Opal Categories API

## Overview Categories are in a tree: a given category has zero or more ancestors and zero or more descendants. The tree is built by recursively following `parent_category` relationships. Currently our trees are at most two nodes deep (that is, a root with zero or more leaves), but clients **MUST** be able to handle trees of any depth. ### Category type and custom fields Categories can be associated with [Category Types](/api/documentation/v3#tag/Category-Types), determining which [Custom Fields](/api/documentation/v3#tag/Custom-Fields) are available to [Blocks](/api/documentation/v3#tag/Blocks) in the category. If the category has a relationship with a deactivated category type it is considered to have no category type. ### Effective category type The effective category type allows the category to inherit a category type relationship. *Note:* The following description of the algorithm is informational: clients that want the effective category type **MUST** use the `effective_category_type_id` property in the category resource object’s `meta` information, and **MUST NOT** manually compute the value using this algorithm, as the exact behavior may change without warning. If the given category has a relationship with an active (not deactivated, not deleted) category type that is the effective category type. If the given category does *not* have a relationship with an active category type, any ancestors that have a relationship with an active category type are selected, and the nearest ancestor (the ancestor with the largest `depth`) provides the effective category type. If the given category has no ancestors, or none of its ancestors have a relationship with an active category type, *and* the view *does* have a relationship to an active category type, the view’s category type is the effective category type. If none of the above conditions are met, the category does not have an effective category type. *Note*: The behavior doesn’t change based on where the given category is in the tree — the logic is the same for the root, leaves, and everything in-between. This is why the following table refers to ‘parent’ and ‘grandparent’, rather than using tree terminology. In the following * ‘✓’ means the column’s entry is associated to an active category type * the parent and grandparent demonstrate inheritance behavior if the given category has ancestors with an associated active category type | view | grandparent category | parent category | given category | effective category type comes from… | | :----: | :--------------------: | :---------------: | :--------------: | -------------------- | | | | | ✓ | given | | | | ✓ | ✓ | given | | | ✓ | | ✓ | given | | ✓ | | | ✓ | given | | | | ✓ | | parent | | | ✓ | ✓ | | parent | |✓ | | ✓ | | parent | | | ✓ | | | grandparent | | ✓ | ✓ | | | grandparent | | ✓ | | | | view | | | | | | 🚫 (no category type) |

Operations 4

POST /loupe/v3/categories Create a new Category #
GET /loupe/v3/categories/{category_id} Get a Category by the given ID #
PATCH /loupe/v3/categories/{category_id} Update an existing Category #
DELETE /loupe/v3/categories/{category_id} Delete a Category by the given ID #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/opal-categories-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

opal-categories-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 3.0.0
  title: Opal API (⚠️ WIP) Categories API
  license:
    name: Opal API License
    url: https://www.workwithopal.com/api-license
  description: The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
servers:
- url: https://login.ouropal.com
tags:


# --- truncated at 32 KB (363 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/opal/refs/heads/main/openapi/opal-categories-api-openapi.yml