Ouro storefronts expose machine-readable interfaces so agents and aggregators can search a seller's catalogue, read item detail and consume product feeds without scraping HTML.
Start at the API catalog, published per RFC 9727:
GET https://ouro.direct/.well-known/api-catalog
Accept: application/linkset+json
It returns a linkset naming each API, its OpenAPI description
(service-desc), its documentation (service-doc),
its discovery manifest (service-meta) and a health endpoint
(status).
APIs live on storefront subdomains, not on this one.
Each seller gets {slug}.ouro.direct, and that host serves
their catalogue. ouro.direct is the marketing site; it
publishes the catalog but answers no API requests itself.
Ouro storefronts implement the Universal Commerce Protocol shopping service over REST. Each storefront declares what it supports at its own discovery manifest:
GET https://retrowhale.ouro.direct/.well-known/ucp
The manifest's services["dev.ucp.shopping"][].endpoint is the
base URL for calls. Read it rather than assuming the path — the UCP
specification requires the endpoint to come from the manifest, and
hard-coding it will break when a storefront moves.
| Capability | Operation | Purpose |
|---|---|---|
catalog.search |
POST {endpoint}/catalog/search |
Search a storefront's live listings |
catalog.lookup |
POST {endpoint}/catalog/lookup |
Fetch one or more items by identifier |
Operations the UCP specification defines but an Ouro storefront does not currently declare — carts, checkout sessions and orders — are not available. Read the manifest to see what a given storefront supports; it is the authoritative list, and it is generated from what the store has actually enabled rather than from this page.
The full OpenAPI 3.1 description is published by UCP, not by Ouro:
https://ucp.dev/2026-04-08/services/shopping/rest.openapi.json
Note that UCP requires a UCP-Agent header on every request,
carrying your own discovery profile URI:
UCP-Agent: profile="https://youragent.example/.well-known/ucp"
Every storefront publishes its live catalogue as a feed. These are plain files, not APIs — no authentication, no query parameters:
| Path | Format |
|---|---|
/feed.xml |
RSS 2.0 with Google Merchant g: extensions |
/meta-feed.xml |
Same catalogue, Meta catalog conventions |
For example retrowhale.ouro.direct/feed.xml. Items with no image are omitted, so a feed can carry fewer items than the storefront shows.
Ouro is a re-commerce platform, so condition is part of the item identity rather than a footnote. Listings carry a condition — typically Loose, CIB (complete in box), Case only or Manual only — and a plain description of what is included. Two listings of the same title at different conditions are different products at different prices.
Discovery documents and feeds are cached and cheap to serve. Catalogue
endpoints are rate limited per storefront. Identify yourself with a
descriptive User-Agent, honour Cache-Control,
and prefer the feed over polling search when you want the whole
catalogue — it is one request instead of hundreds.
Each storefront host answers a health check:
GET https://retrowhale.ouro.direct/health
Questions about integrating, or an API you need that is not listed here: get in touch.