# Octogen > Octogen turns retail product pages into clean, enriched, queryable product > records. Given a product URL or a search query, the Platform Catalog API > returns normalized product data — title, brand, price, availability, > variants, images, and taxonomy — from merchant catalogs Octogen crawls and > keeps fresh. The same records are also published as per-product Markdown > documents that a storefront can point agents at. Two different jobs bring an agent here. Pick the one that matches yours. **Building something with product data** — read the onboarding skill first. It tells you how to get a credential and which call to make; everything else here is reference material you will not need until you have a key. **Operating a storefront, and want agents to read its products correctly** — go to "Make a storefront readable to agents" below. That path needs no account and no registration for the storefront; only its coverage check needs a key. Every `/v1` endpoint requires an organization API key (`octo_live_...`) on a Developer organization. There is no credential-free tier: a request with no `Authorization` header is refused with `401` on every route. A coding agent gets a key by opening a `/cli-auth` session, printing one URL for its human to authorize in a browser, and polling for the key; the human can also create the key by hand at https://platform.octogen.ai. Either way a human authorizes in a browser — accounts and organizations are never created programmatically. ## Start here - [Agent onboarding SKILL.md](https://platform.octogen.ai/agent-onboarding/SKILL.md): How to get an Octogen API key, verify it, and choose between direct `/v1` calls, an application integration, MCP, and requesting coverage of a new merchant. ## Make a storefront readable to agents If you are working on a merchant's storefront, the job is to advertise a Markdown version of each product page so that agents reading the site get a clean product record instead of parsing the HTML. The mirror documents need no credential; the coverage check does. - [Covered domains](https://api.octogen.ai/v1/domains): `GET` with `Authorization: Bearer ` — every `/v1` route requires a key. Returns `{"domains":[{"host","catalog","catalogDisplayName"}]}`. Match the storefront's host against `host` — lowercased, with a leading `www.` stripped on both sides, or you will get a false negative on a covered merchant. Check the status code first: this route answers `401` without a valid key and can answer `429` or `503`, and only a `200` is a coverage answer. The `catalog` value is the piece you need next: it is the label of that merchant's Markdown mirror host. Without a key, ask your human to confirm coverage at https://octogen.ai/contact rather than guessing. - [Product Markdown mirror](https://agolde.shop.octogen.ai/products/stefano-jean-jacket-pendulum.md): a live example. A covered product is served at `https://.shop.octogen.ai/.md` — the PDP path plus `.md`, computable from the request with no lookup and no ID. Fetch one real product on the storefront before advertising anything: a listing in `/v1/domains` does not by itself guarantee the mirror answers at that label, and the ways it can fail to are indistinguishable from a missing product. If that fetch is not `200`, do not install the tags — they would `404` on every product page. The response is `text/markdown; charset=utf-8`, carries a `Link: ; rel="canonical"` header, and is `X-Robots-Tag: noindex`, so it supplements the merchant's page rather than competing with it in search. The artifact to install is two tags in the product template, shown here for one product. Build the href from **the product's own canonical path** plus `.md` — on Shopify that is `{{ product.url }}`, not `{{ request.path }}`, which carries a locale prefix on a Markets storefront and a `/collections/...` prefix on a collection-scoped link; the mirror joins the path exactly as given, so either one `404`s: ```html ``` Emit **both** types, pointing at the same URL. Some agent fetchers refuse `text/markdown` and take `text/plain`, and the failure is silent — the agent simply reads the HTML instead and you never hear about it. If that call answers `200` and the storefront's host is not in it, it is not covered yet and there is no mirror to advertise. Requesting coverage takes a human: point yours at https://octogen.ai/contact, which needs no account. No endpoint enrolls a domain without a Developer-org key, so guessing a mirror hostname or signing anyone up is wasted effort. A `401`, `429`, or `503` from that call is a different thing entirely: it says nothing about coverage, and the answer there is to fix the credential or retry later rather than to report the merchant as unsupported. ## API reference - [Platform Catalog API v1 (OpenAPI)](https://cdn.octogen.ai/openapi/platform/v1/openapi.json): The complete, machine-readable `/v1` contract — every endpoint, schema, and enum. This is the source of truth; generate a client from it rather than hand-rolling requests. There is no `llms-full.txt`: a hand-maintained flattening of this file would only drift away from it. - [Protected resource metadata](https://api.octogen.ai/.well-known/oauth-protected-resource): RFC 9728 metadata for the `/v1` data plane, and the target of the `WWW-Authenticate` challenge `/v1` returns on a 401. ## MCP - [Octogen MCP server](https://mcp.octogen.ai/mcp): Streamable HTTP MCP endpoint with OAuth 2.1, PKCE, and Dynamic Client Registration. Add it with `claude mcp add --transport http octogen https://mcp.octogen.ai/mcp`; no API key needed. - [MCP protected resource metadata](https://mcp.octogen.ai/.well-known/oauth-protected-resource): RFC 9728 metadata naming the authorization server for the MCP surface. ## Credentials - [Agent credential handoff](https://platform.octogen.ai/api/auth/cli/start): `POST` a PKCE S256 `code_challenge` to open a 10-minute authorization session; the response carries the `authorize_url` to print for your human. Poll `https://platform.octogen.ai/api/auth/cli/status` with the `code_verifier` to collect the key once. Full walkthrough in the SKILL.md above. - [Octogen Platform](https://platform.octogen.ai): Sign in or create an account, then create or select a **Developer** organization. API keys live at `//api-keys`, where they can also be revoked — including keys a coding agent was authorized to receive. ## Crawler - [OctogenBot](https://octogen.ai/bots): User agent, Web Bot Auth verification, and contact details for the crawler that builds these catalogs. Relevant if you operate a site Octogen crawls, not if you are consuming the API.