---
title: "Search a bounded local index of public x402 catalogues (free)"
method: GET
path: "/v1/service-search"
tags: ["Discovery"]
---

# Search a bounded local index of public x402 catalogues (free)

`GET /v1/service-search`

## Request

- Base URL: `https://agent.connskill.com` (the document declares no server; this is the origin it was published from)
- URL: `https://agent.connskill.com/v1/service-search`
- Auth: none required

Search terms and filters stay local. Results cover only the cached subset of the configured CONNSKILL Directory and CDP Bazaar. Inspect coverage.sources for partial, stale or unavailable sources. No availability, compliance, savings or comparable-price guarantee.

## Query parameters

- `q` string
- `category` string
- `network` string
- `limit` integer
- `offset` integer

## Response `200`

Free search result; inspect explicit source coverage even when no matches were found.

- object
  - `schema` 'connskill-service-search/1', required
  - `requiresPayment` unknown, required
  - `generatedAt` string, required
  - `query` object, required
    - `q` string, required
    - `category` string, required
    - `network` string, required
  - `sort` 'local_text_relevance', required
  - `limit` integer, required
  - `offset` integer, required
  - `matchingIndexedServices` integer, required
  - `hasMore` boolean, required
  - `coverage` object, required
    - `scope` 'configured_public_catalogues_only', required
    - `exhaustiveMarket` unknown, required
    - `partial` boolean, required
    - `querySentToSources` unknown, required
    - `sources` object[], required
      - `id` string, required
      - `name` string, required
      - `url` string, required
      - `freshness` 'fresh' | 'stale' | 'unavailable', required
      - `coverage` 'complete' | 'partial' | 'unknown', required
      - `reason` string, nullable, required
      - `fetchedAt` string, nullable, required
      - `lastAttemptAt` string, nullable, required
      - `ageMs` integer, nullable, required
      - `indexedRows` integer, required
      - `validRows` integer, required
      - `invalidRows` integer, required
      - `reportedTotal` integer, nullable, required
      - `pages` object[], required
        - `url` string, required
        - `offset` integer, required
        - `retrievedAt` string, required
        - `fingerprint` string, required
        - `rows` integer, required
        - `bytes` integer, required
      - `pageLimit` integer, required
  - `notices` string[], required
  - `items` object[], required
    - `id` string, required
    - `originalUrl` string, required
    - `serviceName` string, required
    - `serviceNameBasis` 'source_declared' | 'endpoint_path', required
    - `provider` object, required
      - `name` string, required
      - `hostname` string, required
      - `nameBasis` 'source_declared' | 'endpoint_hostname', required
      - `websites` string[], required
    - `categories` string[], required
    - `networks` string[], required
    - `score` integer, required
    - `observationCount` integer, required
    - `observationsTruncated` boolean, required
    - `observations` object[], required
      - `sourceId` string, required
      - `sourceName` string, required
      - `sourceUrl` string, required
      - `retrievedAt` string, required
      - `pageFingerprint` string, required
      - `rowIndex` integer, required
      - `originalUrl` string, required
      - `providerName` string, nullable, required
      - `providerNameBasis` 'source_declared' | 'endpoint_hostname', required
      - `website` string, nullable, required
      - `serviceName` string, nullable, required
      - `description` string, nullable, required
      - `descriptionBasis` 'unverified_source_statement', required
      - `categories` string[], required
      - `networks` string[], required
      - `method` string, nullable, required
      - `sourceUpdatedAt` string, nullable, required
      - `prices` object[], required
        - `amountRaw` string, nullable, required
        - `asset` string, nullable, required
        - `network` string, nullable, required
        - `scheme` string, nullable, required
        - `amountUnit` 'asset_base_unit' | 'unknown', required
        - `billingUnit` 'unknown', required
        - `displayHint` string, nullable, required
        - `comparable` unknown, required
        - `sourceId` string, required
        - `sourceUrl` string, required
        - `field` string, required
    - `comparison` object, required
      - `priceComparable` unknown, required
      - `reason` 'billing_unit_or_equivalent_scope_unverified', required
      - `availability` 'unknown', required
      - `compliance` 'unknown', required

## Other responses

- `400`: Invalid, duplicate or unsupported query parameter, or GET body.
- `405`: Only GET is supported.
- `503`: No usable source snapshot or internal search unavailable; no payment is required.

---

[API](https://skmtc.dev/connskill/apis/connskill-growth-services.md) · [All operations](https://skmtc.dev/connskill/apis/connskill-growth-services/llms.txt) · [OpenAPI document](https://skmtc.dev/connskill/apis/connskill-growth-services/revisions/aae873ea0805?raw)
