---
title: "Et Al Australia Agent Guide"
description: "How to find and open Et Al Australia products on this AI storefront: the endpoints, the discovery documents, and optional registration for a higher rate limit."
canonical: https://ai.etal-australia.com/agents.md
last-updated: 2026-09-11
---

# Et Al Australia — Agent Guide

Read-only product catalog for **Et Al Australia**. Product page paths mirror the main storefront.

- **AI storefront:** https://ai.etal-australia.com
- **Main storefront:** https://etal-australia.com

## When to use this storefront

Use the AI storefront to search the merchant catalog, compare candidates, retrieve structured product details, and open an AI-readable product page.

Use the main storefront when a user needs to complete checkout, manage an account or order, contact the merchant, or confirm purchase-time terms.

The catalog endpoints documented here are public, read-only, unauthenticated `GET` requests; the MCP and A2A endpoints under Discovery take JSON-RPC `POST` requests; the registration endpoints under "Registering for a higher rate limit" take `POST` requests and are the only ones that ever carry an Authorization header. This storefront does not accept writes or complete checkout. Registration is optional and only raises the rate limit on the agent endpoints.

Start here:

- Discover or search products: `GET https://ai.etal-australia.com/products.json`
- Read the returned `storefront_url` for the canonical AI product page.
- Send a user to the merchant purchase page: `GET https://ai.etal-australia.com/redirect?product_id={catalog_id}`

Endpoint templates use `{placeholder}` syntax. Replace resource identifiers such as `{handle}`, `{catalog_id}`, and `{product-path}` with values returned by the catalog. `{query}` is user or agent input; URL-encode it before making a request.

## Domain swap

The fastest path to a product: take a main-storefront product URL and replace the host with the AI storefront host. The path is identical on both sites.

| | URL |
|---|---|
| Main site | `https://etal-australia.com{product-path}` |
| AI storefront | `https://ai.etal-australia.com{product-path}` |

Example:

- `https://etal-australia.com/products/em26-1711rg`
- `https://ai.etal-australia.com/products/em26-1711rg`

## Endpoints

All endpoints in this section are unauthenticated `GET` requests.

### Product pages

- HTML (mirrored path): `GET https://ai.etal-australia.com{product-path}`
- HTML (by handle): `GET https://ai.etal-australia.com/products/{handle}`
- HTML (by id): `GET https://ai.etal-australia.com/products/{catalog_id}`
- JSON: `GET https://ai.etal-australia.com/products/{catalog_id}.json` — `/products/{handle}.json` also works
- Product details may include `product_guide`: an evidence-backed buying guide with `useCases` (`bestFor`, `notBestFor`) and same-brand `comparisons.productComparison` with a cited summary per product. Every `sourceIds` value resolves in `product_guide.sources`.

### Products & search

- List all: `GET https://ai.etal-australia.com/products.json`
- Search: `GET https://ai.etal-australia.com/products.json?q={query}` — title, description, and handle
- By handle: `GET https://ai.etal-australia.com/products.json?handle={handle}`

Each product in list/search responses includes `catalog_id`, `handle`, `storefront_path`, and `storefront_url`. Prefer `storefront_url` when present — it is the canonical AI product page link.

### Bulk catalog retrieval

- Use the paginated product API: `GET https://ai.etal-australia.com/products.json`, increasing `offset` by `limit` while `has_more` is true.
- Bulk feed files are not published here. Do not guess a feed path from a template.

### Collections

- HTML index: `GET https://ai.etal-australia.com/collections`
- HTML detail: `GET https://ai.etal-australia.com/collections/{handle}`
- JSON list: `GET https://ai.etal-australia.com/collections.json`
- JSON detail: follow the exact `json_url` returned by the collection list. It is the `.json` sibling of the canonical HTML path, including arbitrarily nested mirrored paths.
- Stable handle API: `GET https://ai.etal-australia.com/api/collections/{handle}`
- Shopify JSON detail: `GET https://ai.etal-australia.com/collections/{handle}.json`
Collection list items include `canonical_url`, `json_url`, and `api_url`; prefer `json_url` for the exact machine-readable counterpart of a page.

### Discovery

- This guide: `https://ai.etal-australia.com/agents.md` (also at `https://ai.etal-australia.com/agents.txt`)
- Agent manifest: `https://ai.etal-australia.com/.well-known/agent.json`
- OpenAPI spec: `https://ai.etal-australia.com/.well-known/openapi.json`
- Markdown homepage: `https://ai.etal-australia.com/index.md`
- MCP server card: `https://ai.etal-australia.com/mcp/server-card` (Streamable HTTP server: `POST https://ai.etal-australia.com/mcp`)
- A2A agent card: `https://ai.etal-australia.com/.well-known/agent-card.json` (JSON-RPC agent: `POST https://ai.etal-australia.com/a2a`)
- Agent skills: `https://ai.etal-australia.com/.well-known/agent-skills/index.json`
- Sitemap: `https://ai.etal-australia.com/sitemap.xml`
- Collection sitemap: `https://ai.etal-australia.com/sitemap-collections.xml`

## Registering for a higher rate limit

Everything stays available anonymously at up to 100 requests per minute per address; a registered agent is metered by its own client at up to 600 requests per minute on the agent endpoints. Registration is optional and changes nothing else: the same read-only operations, the same data. One address may hold several registered clients under a ceiling of 1200 requests per minute.

The registered allowance applies to the agent endpoints: the agent search API (`/api/agent/search-products`), the MCP endpoint (`/mcp`), the A2A endpoint (`/a2a`), and the discovery documents. The catalog JSON routes (`/products.json`, the product detail JSON, and the merchant facts JSON) are anonymous only and keep the anonymous limit.

1. **Request a registration token:** `POST https://ai.etal-australia.com/api/agent/registration-token` with no body. The response carries `registration_token` (single use, valid for 600 seconds, from the network that requested it; at most 5 per minute and 20 per day per network) and spells out the next two requests.
2. **Register a client:** `POST https://ai.etal-australia.com/api/auth/oauth2/register` with `Authorization: Bearer <registration_token>` and a JSON body declaring `client_name`, `grant_types: ["client_credentials"]`, `response_types: []`, and `token_endpoint_auth_method: "client_secret_basic"` (RFC 7591). The answer includes `client_id` and a `client_secret` that is shown once. To authenticate with a key instead of a secret, send `token_endpoint_auth_method: "private_key_jwt"` and a `jwks` value. Contact details in the request are discarded.
   Alternatively, skip this step with a Client ID Metadata Document: if your `client_id` is an HTTPS URL to a JSON document that declares `grant_types: ["client_credentials"]`, `token_endpoint_auth_method: "private_key_jwt"`, and your `jwks`, the first token request registers it.
   Or do steps 1 and 2 in one call (auth.md): `POST https://ai.etal-australia.com/api/agent/auth` with `{"type": "anonymous"}` answers with the same `client_id` and once-shown `client_secret`; `https://ai.etal-australia.com/auth.md` describes it.
3. **Mint an access token:** `POST https://ai.etal-australia.com/api/auth/oauth2/token` (form-encoded) with `grant_type=client_credentials`, `scope=storefront.read`, and `resource=https://ai.etal-australia.com`, authenticated with HTTP Basic (`client_id:client_secret`) or a `private_key_jwt` client assertion. `resource` is required and must be this storefront's origin. Tokens last 600 seconds; there are no refresh tokens, so request a new one when one expires.
4. **Call the agent endpoints** with `Authorization: Bearer <access_token>`. A token that is invalid, expired, or issued for another storefront is refused with 401 and a `WWW-Authenticate` challenge; a request without a token is never challenged.

- Scope: `storefront.read` (read-only; the only scope offered).
- Authorization server metadata (RFC 8414): `https://ai.etal-australia.com/.well-known/oauth-authorization-server`
- Protected resource metadata (RFC 9728): `https://ai.etal-australia.com/.well-known/oauth-protected-resource`
- Signing keys: `https://ai.etal-australia.com/api/auth/jwks`
- A client that mints no token for 30 days is treated as abandoned and may be disabled; if a token request is refused with `invalid_client`, register again.

## Policies

- [Privacy policy](https://etal-australia.com/policies/privacy-policy)
- [Terms of service](https://etal-australia.com/policies/terms-of-service)
- [Refund policy](https://etal-australia.com/policies/refund-policy)

## Example

Find and open a product:

```
GET https://ai.etal-australia.com/products.json?q=ROPEGRAIN%20DRAPE%20PANT%20RG
→ read "catalog_id" (or "storefront_url") from the best match

GET https://ai.etal-australia.com/products/{catalog_id}.json
→ full structured product data

GET https://ai.etal-australia.com{storefront_path}
→ enriched HTML product page
```
