# Get offer details

Read a listing’s purchase URL, seller, price, coupon terms and stated product information.

## What this endpoint does

Endpoint

```
POST https://mcp.gaisho.co/v1/tools/get_offer
```

Inspect the actual listing the shopper may buy. Use it to connect a price to the right seller and purchase URL, and to read what that listing says about specifications, package contents, coupon conditions and purchase terms.

- Check which seller and URL belong to an offer in a product shortlist.
- Investigate warranty, dimensions, ingredients or included accessories.
- Read available shipping and return information before recommending a listing.

## Before you call

- Supply offer_ids returned by search_products, get_product or find_deals. A product ID is not a substitute for an offer ID.
- Request one to eight listings per call. Keep the IDs and their originating products together in your application.
- Some find_deals options have a purchase URL but no stored offer_id. Do not invent an ID for those options; follow the returned URL.

Send a JSON object as the request body and authenticate with Authorization: Bearer <API key>. Amounts are in USD unless the result explicitly says otherwise.

## Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| offer_ids | string[] | Required | Offer IDs returned by search, product details or comparisons. 1–8 items. |

## Example request

Set GAISHO_API_KEY in your server or local environment. These examples use a JSON POST request; Python uses the standard library and JavaScript uses Node.js fetch. The 60-second client timeout in Python and JavaScript is configurable, not a service latency guarantee.

cURL

```
curl --fail-with-body 'https://mcp.gaisho.co/v1/tools/get_offer' \
  -H "Authorization: Bearer $GAISHO_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{
  "offer_ids": [
    "OFFER_ID_FROM_SEARCH"
  ]
}'
```

Python

```
import json
import os
import urllib.error
import urllib.request

arguments = json.loads(r'''{
  "offer_ids": [
    "OFFER_ID_FROM_SEARCH"
  ]
}''')
request = urllib.request.Request(
    "https://mcp.gaisho.co/v1/tools/get_offer",
    data=json.dumps(arguments).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + os.environ["GAISHO_API_KEY"],
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=60) as response:
        payload = json.load(response)
    print(json.dumps(payload, indent=2))
except urllib.error.HTTPError as error:
    print(error.read().decode("utf-8"))
    raise
```

JavaScript

```
// Node.js 18+; keep this code and the key on your server.
const response = await fetch("https://mcp.gaisho.co/v1/tools/get_offer", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GAISHO_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "offer_ids": [
    "OFFER_ID_FROM_SEARCH"
  ]
}),
  signal: AbortSignal.timeout(60_000),
});
const body = await response.text();
if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${body}`);
}
const payload = JSON.parse(body);
console.log(payload);
```

## Common request patterns

### Inspect two purchase options

Each entry identifies an individual listing, even if both sell the same product.

JSON request body

```
{
  "offer_ids": [
    "OFFER_ID_FROM_SEARCH",
    "SECOND_OFFER_ID_FROM_SEARCH"
  ]
}
```

## Response fields

The HTTP response contains tool and summary. Product information is carried in summary text; there is no separate structured result array. Treat its wording as readable content, not a fixed column schema.

| Field | Type | Description |
| --- | --- | --- |
| tool | string | The tool called: get_offer. |
| summary | string | Details of the requested listings, including purchase links and seller information. |

## Example response

Examples are illustrative and may omit optional detail fields. Prices are not live quotes; identifiers and example.com URLs are placeholders to replace, not usable product records.

HTTP 200 · illustrative, shortened

```
{
  "tool": "get_offer",
  "summary": "Offer: OFFER_ID_FROM_SEARCH\nExample cordless vacuum — $179.99\nSeller: Example Store\nPurchase link: https://example.com/vacuum\nListing states: one vacuum, charger and crevice tool.\nReturns: see the retailer’s stated terms."
}
```

## How to read the result

- summary is a text report about the requested listings. It contains the available purchase, seller and listing details rather than a separate offers array.
- Coupon conditions belong to a specific offer. Check eligibility and whether a discount is already included before using the quoted amount.
- A listing may omit shipping, warranty or return details. Missing information does not establish free shipping, a warranty or a right to return.

## Empty results and errors

| Situation | How to handle it |
| --- | --- |
| An offer ID is unknown | Use an ID returned by a current search or product-detail response; do not send a model name in offer_ids. |
| Price or availability has changed | Use the details returned for that listing and confirm the retailer’s final checkout terms. |
| You need a seller assessment | Pass the seller identifier or seller URL to vet_seller; product ratings are not seller ratings. |

A successful request can return no candidates, missing information or an unavailable assessment. Check the result before recommending a product. For request failures, use the error code and message; retrying the same invalid input will not fix it.

- [Error handling and retries](https://gaisho.co/docs/api#errors): HTTP statuses, structured errors, rate limits and quota responses.

## What to call next

- [Check a seller](https://gaisho.co/docs/api/vet_seller): Assess a seller or online store and return a trust assessment with supporting facts.
- [Check a price](https://gaisho.co/docs/api/vet_price): Assess whether a USD price is reasonable for a stated product or shopping requirement.

- [Use this tool through MCP](https://gaisho.co/docs/mcp/get_offer): The same capability through the other connection.
- [REST API conventions](https://gaisho.co/docs/api): Authentication, response envelopes and request handling.
