---
title: "Search the Hub-Equity concept catalog"
method: GET
path: "/api/v1/concepts/search"
tags: ["Concepts"]
---

# Search the Hub-Equity concept catalog

`GET /api/v1/concepts/search`

## Request

- Base URL: `https://api.hub-equity.com`
- URL: `https://api.hub-equity.com/api/v1/concepts/search`
- Auth: HTTP bearer

Search the Hub-Equity concept catalog (canonical hubs across income statement, balance sheet, cash flow, ratio, metadata). Searches hub codes, labels and descriptions only.

Search is a case-insensitive substring match over `name_en`, `description` and `code`. Filters:
- `q` — search string (optional ; when omitted, returns the catalog ordered by category × code).
- `category` — restrict to one Hub category (`income_statement`, `balance_sheet`, `cash_flow`, `ratio`, `metadata`, `equity_info`).
- `limit` 1-200, default 50 ; `offset` for pagination.

A Free key is enough.

## Query parameters

- `q` string, nullable: Search string (case-insensitive substring match).
- `taxonomy` string, nullable: Taxonomy filter. Only `hub` (the default) is accepted; any other value returns 422.
- `category` string, nullable: Hub category restriction.
- `page` integer, nullable: Page number (1-based). Public idiom; overrides offset. Ignored when cursor is set.
- `per_page` integer, nullable: Results per page (1-200). Overrides limit.
- `limit` integer
- `offset` integer
- `cursor` string, nullable: Opaque cursor returned in `next_cursor` of the previous page. Mutually exclusive with `offset`/`page` — when provided, `offset`/`page` are ignored. Preferred over page/offset past page 200 (index-seek vs row-scan ; recommended for any client iterating the full catalog).

## Response `200`

Concept search results.

- ApiResponseConceptSearchResponse
  - `success` boolean, required
  - `data` ConceptSearchResponse: Container for /concepts/search results.
    - `query` string, nullable
    - `total` integer, required
    - `results` ConceptSummary[]
      - `code` string, required
      - `name_en` string, required
      - `name_fr` string, nullable
      - `category` string, required
      - `subcategory` string, nullable
      - `data_type` string, nullable
      - `is_derived` boolean
      - `taxonomy_scope` string[], nullable
      - `description_excerpt` string, nullable
    - `applied_filters` object
    - `next_cursor` string, nullable
    - `has_more` boolean
  - `error` ApiError: API error details.
    - `code` string, required
    - `message` string, required
    - `details` object, nullable
  - `meta` ApiMeta: API response metadata. Pagination fields (``page`` / ``per_page`` / ``total``) are populated on collection endpoints only. They are omitted from the payload on single-resource endpoints.
    - `timestamp` string, date-time
    - `request_id` string, nullable
    - `page` integer, nullable
    - `per_page` integer, nullable
    - `total` integer, nullable
  - `links` ApiLinks: HATEOAS-style pagination cursors. Host-relative path + query links for a collection page. Present on collection endpoints, ``null`` fields where a page doesn't exist (``next`` on the last page, ``prev`` on the first). The whole ``links`` object is omitted from single-resource responses (see ``ApiResponse`` serializer).
    - `self` string, nullable
    - `first` string, nullable
    - `prev` string, nullable
    - `next` string, nullable
    - `last` string, nullable

## Other responses

- `422`: Validation error (invalid taxonomy/category).

---

[API](https://skmtc.dev/hub-equity/apis/hub-equity-api.md) · [All operations](https://skmtc.dev/hub-equity/apis/hub-equity-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hub-equity/apis/hub-equity-api/revisions/e8eeda5dc13e?raw)
