> For the complete documentation index, see [llms.txt](https://docs.peakcommerce.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.peakcommerce.com/developers/api-groups/discovery.md).

# Discovery

The **Discovery API** is the read-only "what does this tenant support, and what can be sold here?" surface. Three endpoints answer three questions:

* `GET /capabilities` — which payment methods, currencies, and gateway integrations is the merchant set up for?
* `GET /catalog` — which products and payment pages are live, with their lifecycle rules and pricing indicators?
* `GET /manifest` — what is the full set of v1 operations available to the calling API key?

These endpoints are designed for client bootstrapping: a storefront, mobile app, or partner portal calls them once on load to render the right buttons, currency pickers, and CTA copy without having to encode tenant-specific assumptions.

All three require the `read` scope. Responses are deterministic per tenant + API key and are safe to cache for the duration of the session.

## Endpoints

### `GET /api/v1/capabilities`

{% openapi src="<https://api.peakcommerce.com/api/v1/openapi.json>" path="/capabilities" method="get" %}
<https://api.peakcommerce.com/api/v1/openapi.json>
{% endopenapi %}

Returns the merchant capability set: enabled `paymentMethods` (`card`, `ach`, `sepa`, `paypal`, …), supported `currencies`, and the active billing-adapter integration metadata (provider name, whether it supports refunds, whether it supports off-session charges). Use it to drive the payment-page UI without hardcoding "we support card and ACH".

Requires the `read` scope.

### `GET /api/v1/catalog`

{% openapi src="<https://api.peakcommerce.com/api/v1/openapi.json>" path="/catalog" method="get" %}
<https://api.peakcommerce.com/api/v1/openapi.json>
{% endopenapi %}

Returns the live catalog: every active product enriched with the lifecycle rules that govern it (cancellation rule, plan-change rule, applicable add-ons), pricing indicators (`hasVariablePricing`, `hasTieredPricing`), and the list of payment pages (CMS slugs) that can sell them.

This is the right call to power a storefront or pricing page; for transactional reads (resolve a single price), use [`GET /pricing/resolve`](/developers/api-groups/pricing.md). For catalog editing the admin surface, use the internal catalog routes, not this endpoint.

Requires the `read` scope.

### `GET /api/v1/manifest`

{% openapi src="<https://api.peakcommerce.com/api/v1/openapi.json>" path="/manifest" method="get" %}
<https://api.peakcommerce.com/api/v1/openapi.json>
{% endopenapi %}

Returns the full v1 operation manifest as it would apply to the calling API key — operation id, HTTP method + path, the scope it requires, and whether it is currently enabled for this tenant (some operations are gated by the active billing adapter or by a feature flag).

Useful for SDK / CLI clients that need to discover the supported surface dynamically rather than ship a baked-in OpenAPI spec.

Requires the `read` scope.

> **Rate limiting (Phase 1a — shadow mode).** Every `/api/v1/*` request is observed by the per-tenant governance middleware (mounted after API-key authentication). Phase 1a is shadow-only: no `429` responses are returned, and rate-limit / concurrency response headers are off by default. Aggregate counts are available to platform admins at `GET /api/admin/governance/stats`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.peakcommerce.com/developers/api-groups/discovery.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
