# Check a seller

Assess a seller or online store and return a trust assessment with supporting facts.

## What this endpoint does

Endpoint

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

Assess the seller behind a listing or an online store, separately from the quality of the product it sells. The result identifies who was checked, gives a trust assessment and explains the available supporting facts and buyer considerations.

- Check a marketplace seller before buying an unusually cheap listing.
- Research an unfamiliar independent online store.
- Resolve an ambiguous store name using a precise domain or seller page.

## Before you call

- An offer ID, seller ID or seller page from search_products, get_offer or find_deals is more specific than a store name; an offer ID checks the seller of that offer. A marketplace product page may be useful, but confirm that the returned seller is the seller the shopper intends to use.
- Acceptable inputs include an offer ID, account key, seller ID, marketplace seller page, product page, store domain, store URL or store name. Do not substitute a product rating for seller information.
- If several sellers share a name, retry with a specific domain or one of the identities in the returned message.

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 |
| --- | --- | --- | --- |
| seller | string | Required | Seller ID, marketplace account key, seller page, store domain, name or product page. Cannot be empty; up to 2000 characters. |

## 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/vet_seller' \
  -H "Authorization: Bearer $GAISHO_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{
  "seller": "https://www.walmart.com"
}'
```

Python

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

arguments = json.loads(r'''{
  "seller": "https://www.walmart.com"
}''')
request = urllib.request.Request(
    "https://mcp.gaisho.co/v1/tools/vet_seller",
    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/vet_seller", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GAISHO_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "seller": "https://www.walmart.com"
}),
  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

### Check a marketplace seller

Replace the placeholder with the seller account key returned for the listing.

JSON request body

```
{
  "seller": "amazon.com:SELLER_ID_FROM_OFFER"
}
```

## Response fields

The HTTP response contains tool and result. All fields below the envelope, including any assessment summary, are inside result.

| Field | Type | Description |
| --- | --- | --- |
| tool | string | The tool called: vet_seller. |
| result.status | string | Whether the seller could be identified and assessed. |
| result.seller_key / seller_name / seller_url | string \| null | Seller identity and link, when available. |
| result.trust_level / trust_label | string \| null | Trust assessment and its readable label. |
| result.summary | string \| null | Seller assessment. |
| result.reasons / buyer_notes | string[] \| null | Supporting reasons and buyer considerations. |
| result.facts | object \| null | Available information supporting the assessment. |
| result.message | string \| null | Additional information when an assessment is unavailable. |
| result.facts.kind / platform / role | string \| null | Seller type (first_party, marketplace_seller, shop or web), its marketplace and its role, when known. |
| result.facts.company / country / website | string \| null | Business identity and the store’s website domain (for example example.com, without https://), when known. |
| result.facts.market | string \| null | The country a store’s website is for, such as CA or GB, when its address names one; null for a US or generic address. |
| result.facts.official_store_of / own_brands | string[] \| null | Brands it is the official or authorized store of, and brands it appears to sell as its own. |
| result.facts.prices_vs_major_retailers | object \| null | items_compared and typical_difference_pct against major retailers for the same items. |
| result.facts.monthly_visits / products | string \| number \| null | Estimated monthly visits to its website, as a band, and the number of products listed on it. |
| result.facts.selling_since / website_registered | string \| null | Available start or registration month, formatted YYYY-MM. |
| result.facts.rating | object \| null | Seller-rating information and its source; this is not a product rating. |
| result.facts.returns | object \| null | Known return terms, such as window_days or restocking_fee_pct. |
| result.facts.risk_findings | string[] | Reported risk findings; an empty list is not a guarantee about an order. |

## 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": "vet_seller",
  "result": {
    "status": "found",
    "message": null,
    "seller_key": "shopify:SELLER_ID",
    "seller_name": "Example Store",
    "seller_url": "https://example.com",
    "trust_level": "trusted",
    "trust_label": "Trusted",
    "summary": "Trusted: the official store of Example; prices in line with major retailers (24 items compared). Buyer notes: a strict return policy (a 15% restocking fee).",
    "reasons": [
      "the official store of Example",
      "prices in line with major retailers (24 items compared)"
    ],
    "buyer_notes": [
      "a strict return policy (a 15% restocking fee)"
    ],
    "facts": {
      "kind": "shop",
      "platform": null,
      "role": "brand",
      "company": "Example Inc",
      "country": "US",
      "selling_since": null,
      "website_registered": "2015-04",
      "website": "example.com",
      "market": null,
      "rating": {
        "band": "good",
        "stars": "4.5+",
        "ratings": "1,000+",
        "source": "review sites"
      },
      "prices_vs_major_retailers": {
        "items_compared": 24,
        "typical_difference_pct": 0
      },
      "returns": {
        "accepted": "yes",
        "window_days": 30,
        "restocking_fee_pct": 15,
        "refund_to": null
      },
      "official_store_of": [
        "Example"
      ],
      "own_brands": null,
      "monthly_visits": "10,000-99,999",
      "products": 180,
      "risk_findings": []
    }
  }
}
```

## How to read the result

- All seller fields are inside result in REST, including result.summary. Unlike vet_price, there is no separate top-level summary for this endpoint.
- status tells you whether an assessment was produced: found, ambiguous or not_found. An unresolved identity is neither a positive nor a negative seller assessment.
- trust_level may be trusted, reliable, limited, caution, risky or unknown. reliable means looks reliable; limited means little information vouches for the seller and is not itself a warning. unknown means insufficient information. Risk signals are not a legal finding of counterfeiting or proof of fraud.
- Use seller_name and seller_url to confirm the identity. summary includes buyer considerations; reasons supports the assessment, buyer_notes adds purchase considerations, and facts holds available details. Null means unknown or unavailable.

## Empty results and errors

| Situation | How to handle it |
| --- | --- |
| ambiguous | Read message, then supply a specific seller identity or domain. A message that begins “No store goes by the name” lists stores whose names only contain the words; they are unlikely to be the intended seller, so ask for the store’s website. |
| not_found | There is no assessment. Do not interpret this as trusted or risky. |
| found with trust_level unknown | The seller was identified but there is insufficient information for a stronger assessment. |
| The returned seller is not the intended seller | Use the exact marketplace seller page or account key and repeat the check. |

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

- [Get offer details](https://gaisho.co/docs/api/get_offer): Read a listing’s purchase URL, seller, price, coupon terms and stated product information.
- [Compare purchase options](https://gaisho.co/docs/api/find_deals): Find offers for the same product, compatible alternatives, or models with specification upgrades and downgrades.

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