> ## Documentation Index
> Fetch the complete documentation index at: https://cloro.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Inline products

> Schema for individual product references embedded inline in the Google AI Mode response text, including titles, prices, merchants, and offer links.

This section documents the **inline products** data returned by the [Google AI Mode endpoint](/api-reference/endpoint/monitor-aimode). Inline products are part of the AI Mode response — no separate API call is needed.

## Example request

Inline products are intent-detected: send a prompt that surfaces individual product mentions in the AI response. No flag is required.

```json theme={null}
{
  "prompt": "what are the best wireless headphones for travel",
  "country": "US"
}
```

This produces a response containing the `inlineProducts` array documented below.

## Overview

Inline product cards found within the AI response text. Unlike [shopping cards](/api-reference/endpoint/aimode/shopping-cards) — which group multiple products into a dedicated carousel — inline products are stand-alone product references embedded directly in the AI's prose. Both arrays may coexist in a single response.

<Frame caption="Inline products in AI Mode">
  <img src="https://mintcdn.com/cloro/Qv2xgJAgMecwTTRq/images/aimode/inline-products.webp?fit=max&auto=format&n=Qv2xgJAgMecwTTRq&q=85&s=c8c4c7cf7b5923f1f91861a925d3b180" alt="Inline products in AI Mode" width="1400" height="1138" data-path="images/aimode/inline-products.webp" />
</Frame>

## Inline product structure

| Field         | Type    | Description                                                                                                                                                                            |
| ------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `title`       | string  | Product title                                                                                                                                                                          |
| `position`    | integer | 1-indexed rank across the `inlineProducts` array in DOM/render order. Always emitted.                                                                                                  |
| `price`       | object  | Structured pricing — see [price object](#price-and-oldprice) for the shape                                                                                                             |
| `oldPrice`    | object  | Original price before discount (same shape as `price`)                                                                                                                                 |
| `store`       | string  | Merchant/store name (e.g. `"Amazon"`, `"Mercado Livre"`)                                                                                                                               |
| `thumbnail`   | string  | Product image URL. May be a `https://` URL or a `data:image/jpeg;base64,...` blob injected by Google's client JS. Omitted when the page was captured before Google's image loader ran. |
| `productLink` | string  | Direct product URL                                                                                                                                                                     |

### `price` and `oldPrice`

| Field      | Type           | Description                                                                                                        |
| ---------- | -------------- | ------------------------------------------------------------------------------------------------------------------ |
| `value`    | number \| null | Parsed numeric price. `null` when the visible text can't be unambiguously parsed.                                  |
| `currency` | string \| null | Currency symbol (e.g. `"$"`, `"£"`, `"R$"`, `"€"`). `null` when no symbol was found.                               |
| `raw`      | string         | Visible card text verbatim (e.g. `"$329.99"`, `"R$ 4,40/mês"`). Always present when the parser had any input text. |

The `raw` field captures the price string exactly as Google rendered it, which lets you handle three cases consumers tend to care about:

* **Parseable** — `{value, currency, raw}` all populated. Use `value` for math/aggregation.
* **Installment** — Brazilian and other locales render monthly-payment offers like `R$ 4,40/mês`. We emit `{raw}` only (no `value`) because shipping `4.40` as the product price would be wrong. Fall back to `raw` for display.
* **Unparseable / locale-ambiguous** — e.g. `"Free"`, `"€1.234"` in an unknown locale context. We emit whatever was extractable (often just `raw`) so you can render the card text without losing the signal.

## Response example

```json theme={null}
{
  "success": true,
  "result": {
    "text": "Based on expert reviews, here are the top wireless headphones for travel...",
    "inlineProducts": [
      {
        "title": "Sony WH-1000XM5",
        "position": 1,
        "price": {
          "value": 298.0,
          "currency": "$",
          "raw": "$298.00"
        },
        "oldPrice": {
          "value": 399.99,
          "currency": "$",
          "raw": "$399.99"
        },
        "store": "Amazon",
        "thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/...",
        "productLink": "https://www.google.com/shopping/product/example"
      },
      {
        "title": "Short Floral Estampa Floral - Compre Já",
        "position": 2,
        "price": {
          "raw": "R$ 4,40/mês"
        },
        "store": "Mercado Livre",
        "productLink": "https://www.google.com/shopping/product/example2"
      }
    ]
  }
}
```
