---
title: "Search and list capabilities (public, no key)"
method: GET
path: "/api/v1/capabilities"
tags: ["Capabilities"]
---

# Search and list capabilities (public, no key)

`GET /api/v1/capabilities`

## Request

- Base URL: `https://api.daystruct.ai`
- URL: `https://api.daystruct.ai/api/v1/capabilities`
- Auth: one of:
  - none
  - HTTP bearer

Anonymous catalog search: no account, API key, MCP connection or credits. Example: GET /api/v1/capabilities?q=scan+a+repository+for+secrets&view=compact. meta carries total, offset, limit, nextOffset, a ready next URL and freshness {source, generatedAt, catalogUpdatedAt, maxAgeSeconds}; responses revalidate on every request (Cache-Control: public, no-cache, must-revalidate). Follow meta.next until it is null to read all entries. When nothing matches strongly, data is empty, meta.match_quality is no_strong_match and meta.nearest lists the closest capabilities. Each compact row carries reference (stable handle or ID), id, displayName, summary, category, useCases, tags, deliveryType, version, digest, publishedAt, updatedAt, availability, language, runsIn, compatibility, a limitation, licensing {status, basis}, priceCredits with priceUnit, access {discover, next}, next, profile (JSON), page (HTML) and evidence links; the profile holds the full record. Acquisition, downloads, execution and account operations need a scoped key and are named in access.next; searching never charges. Clients without a key share a per-IP request quota; 429 responses carry Retry-After. Published capabilities carry a stable public handle (@owner/slug), an internal cap_ ID and a routing ID; declared-but-unpublished capabilities are listed too, marked published: false. Public, no key. Filter with ?q=. Each source-package row carries a concise licensing summary: declaredLicense is what the publisher wrote, publicationStatus is what the policy found when the release published, and status is how it reads under the policy in force now. These are reported separately on purpose and are evidence against a configured policy, not legal advice; full receipts live on the capability profile. Licensing filters are optional, and a filtered response withholds entries that carry no licensing evidence rather than passing them through.

## Query parameters

- `q` string
- `view` 'full' | 'compact'
- `limit` integer
- `offset` integer
- `category` string
- `delivery` string
- `licenseStatus` string
- `licenseSpdx` string
- `licenseEvidence` string
- `licensePolicyState` string
- `licenseUnresolved` 'none'
- `licenseReciprocal` 'exclude' | 'only'
- `bundleMembers` 'all_validated'

## Response `200`

Ranked capability page with pagination and freshness meta

## Other responses

- `400`: invalid_pagination
- `429`: Request quota exceeded; see Retry-After

---

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