Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,561Letters: 14Defects: 1,336counted 4 min ago
teppi

Server definition

Hash
sha256:7857eed28e3be7d2fbf47582c28051a01ae6cede2126ee62948c5901f4658449
What it is
What a remote MCP server returned when asked what it offers: 12 tools

The blob, as servednamed by its sha256

{ "instructions": "Apiguru returns live, structured Amazon marketplace data across 23 country\nmarketplaces. Data is fetched at request time, not served from a cache.\n\nChoosing a tool:\n- One ASIN, full record -> product_details\n- Many ASINs (up to 20) -> product_details_batch (cheaper per item)\n- Reviews and rating breakdown -> product_reviews\n- Keyword discovery -> search\n- Offers, buy box, live stock -> offers_stock\n- Category rankings -> best_sellers\n- Discounted items -> deals\n- Seller storefront / reputation -> seller_products, seller_reviews,\n seller_profile_batch\n\nRules that will save you money and failed calls:\n- Pass an ASIN (10 characters) or an Amazon product URL; lower case is\n fine. A URL's domain sets the marketplace unless `geo` says otherwise;\n what was rewritten is listed under `_input_interpreted`.\n- Prefer the batch tools over looping single-item tools.\n- product_details and product_details_batch return a COMPACT record by\n default and list what they left out under `_omitted_fields`. Ask for more\n with fields=\"tech_specs,product_information\" or compact=false. The full\n record is ~75 KB; do not request it unless you need it.\n- Variants come as `variation_summary`: the attributes that vary, their\n values, the sibling count and this ASIN's own values. The ASIN-keyed maps\n (`variation`, `product_variations`) can be 50-130 KB on big families;\n ask for one by name only when you must resolve a value to a sibling ASIN.\n- Every error is a JSON document with http_status, billed, retryable and\n next_step. Retry only when retryable is true. A 404 IS billed; a 503 is\n not.\n- When the free calls run out, a tool returns an x402 PaymentRequired\n result (`x402Version`, `accepts`). An x402-capable MCP client pays it and\n resends the same call with the payment in `_meta[\"x402/payment\"]`; the\n receipt comes back in `_meta[\"x402/payment-response\"]`. Without a wallet,\n ask the user to connect https://mcp.apiguru.app/account and sign in, then\n repeat the same call.\n- Identical calls within a few minutes are answered from a short cache\n (`_cache` marks such answers) and cost nothing extra.\n- Call list_capabilities first if you need prices, the marketplace list or\n your access mode; it is free and makes no network request.\n- Bullet points and specs describe what Amazon shows for the listing; on\n multi-variant listings they can describe the product family rather than\n the exact variant. A null field means Amazon did not show that field.\n- `search` takes eleven filters besides the query -- page, sort_by, brand,\n seller_id, category_id, min_price, max_price, product_condition (NEW /\n USED / RENEWED), today_deals, deal_type (coupons, all_discounts, ...),\n geo. `seller_products` takes the same set. Every answer says which took\n effect under `filters_applied`, which the marketplace could not apply\n under `filters_ignored` (with the reason), and what it offers under\n `available_filters`. `list_capabilities` lists them per tool.\n- `best_sellers` departments differ per marketplace (amazon.de's\n electronics slug is `ce-de`). Pass a slug or a name; the answer carries\n `available_categories` for that geo and `available_subcategories` with\n the ids `subcategory_code` takes. Pages run 1-5, 50 rows each.\n- `deals` filters by department (`categories`: a name such as Electronics,\n or an id), brand id (`brands`), min_price / max_price / min_discount and\n the Prime programs. Every deals answer carries `available_filters` with\n the ids this marketplace accepts, `filters_applied` with what took\n effect, and `next_offset` for the next page. For a brand by NAME use\n search with brand=<name> and today_deals=true.\n\nReading a page of results without drowning in it:\n- search, best_sellers, deals, seller_products and seller_reviews return\n the first 10 rows as LIGHT records by default. A full page is up to 48\n rows and ~54 KB, which most clients spill to a file. Raise `limit` (0 =\n the whole page), set `compact=false` for every field, or name what you\n want with `fields=\"asin,product_title,product_price\"`. Answers carry\n `_truncated` and `_omitted_fields` so nothing is hidden.\n- Filtering beats paging: brand, price range and sort_by cut the page down\n before it is fetched, so the answer is small AND relevant.\n\nTwo things about Amazon's own data that will mislead you if you assume\notherwise:\n- **Rating counts are per listing family, not per ASIN.** Variants share a\n review pool, so the same 488,443 appears on every colour of one shoe.\n Never read it as \"this variant has that many reviews\".\n- **A variant's title can be the parent's.** A search row's ASIN and title\n can disagree (the URL slug often shows the real variant). When the exact\n variant matters, call product_details on that ASIN -- it is authoritative\n for the ASIN you passed.\n- `badges` is the source of truth for Amazon's Choice / Best Seller /\n Overall Pick. `is_amazon_choice` and `is_best_seller` are conveniences\n derived from it.\n\nFound something wrong? Say so -- this API has been fixed more than once\nbecause a caller reported a bad field. Open an issue at\nhttps://github.com/apiguru-app/agent-kit/issues if you have a GitHub\naccount; otherwise call the free `send_feedback` tool. Neither is billed.\n", "tools": [ { "description": "Use for what sells best in a department right now. The rank is Amazon's, not a sales figure. Best-seller rankings for a department of one marketplace, 50 per page. Every answer carries the department it resolved to and how (category_resolution: by slug, name or a fragment of a name, with a hint when a fragment such as 'shoes' landed on the whole 'Clothing, Shoes & Jewelry' department, or 'subcategory' when a word such as 'camera' named a subcategory), available_categories (that marketplace's departments with slugs; MCP: with compact=false) and available_subcategories (the children of the node shown, with the ids subcategory_code takes). On amazon.com subcategory_code also takes any browse node id at any depth, or a name resolved under the department (\"women's shoes\", \"mules & clogs\"); category.subcategory_path gives the node's full path and category.heading the page's own title line. Price: $0.003 per call. No required parameters - calling it bare returns US appliances page 1. `category` accepts a slug, a display name, one of the older US department names, or a unique fragment; category_resolution.via says which, and a fragment match adds a hint naming the subcategories that carry the word, with ids. On amazon.com the whole browse tree is known: subcategory_code takes any node id or a name at any depth, subcategory_name and subcategory_path are filled without a fetch, and available_subcategories lists the node's real children (empty on a leaf). Other marketplaces name only what their navigation showed. page is capped at 5 (a 400 beyond, not a 500). `rank` is the position within the requested list on this page. Rows are the same for every marketplace; only the department vocabulary differs, and the answer carries it.", "inputSchema": { "properties": { "category": { "default": "appliances", "description": "Best-seller department, by slug or by name as Amazon shows it for that marketplace (case-insensitive; a unique fragment works, and the answer's category_resolution says when a fragment was used -- 'shoes' is the whole 'Clothing, Shoes & Jewelry' department, and the hint then lists the Shoes subcategories with their ids). Departments and their slugs differ per marketplace: amazon.com has electronics, amazon.de has ce-de (Electronics & Photo). A word that names a subcategory works too: category=camera on amazon.es is Electronics > Camera & Photo (category_resolution.via says 'subcategory'; several equally good matches are a free 400 listing each as category + subcategory_code). REST answers list the marketplace's departments under available_categories (the MCP tool with compact=false); an unknown name is a free 400 listing them.", "title": "Category", "type": "string" }, "compact": { "default": true, "description": "Return light rows: identity, price, rating, badges and one delivery_date, dropping the long delivery prose that repeats itself across three fields. false returns every field the REST API sends (roughly 3x the size).", "title": "Compact", "type": "boolean" }, "fields": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated row fields to return instead of the light set, e.g. \"asin,product_title,product_price\". Rows list what they left out under _omitted_fields.", "title": "Fields" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "limit": { "default": 10, "description": "How many ranked products to return from this page (0 = all of them). A full page is up to 48 rows and about 54 KB, which most clients spill to a file instead of showing inline. The answer carries _truncated with the true count when it trims.", "minimum": 0, "title": "Limit", "type": "integer" }, "page": { "default": 1, "description": "Result page, 1-based, 50 rows each; Amazon's lists stop at page 5.", "maximum": 5, "minimum": 1, "title": "Page", "type": "integer" }, "subcategory_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Browse node id under `category`: one from available_subcategories of a previous answer, or on amazon.com any node id at any depth (679410011 is Women > Shoes > Mules & Clogs) or a name resolved under the department (\"women's shoes\", \"mens boots\", \"mules & clogs\"). A name that fits two nodes equally (Men > Shoes > Boots and Women > Shoes > Boots) is a free 400 listing both ids with their paths.", "title": "Subcategory Code" } }, "title": "best_sellersArguments", "type": "object" }, "name": "best_sellers", "outputSchema": { "additionalProperties": true, "properties": { "available_categories": { "default": null, "title": "Available Categories" }, "available_subcategories": { "default": null, "title": "Available Subcategories" }, "category": { "default": null, "title": "Category" }, "category_resolution": { "default": null, "title": "Category Resolution" }, "data": { "default": null, "title": "Data" }, "max_page": { "default": null, "title": "Max Page" }, "page": { "default": null, "title": "Page" }, "page_size": { "default": null, "title": "Page Size" }, "request_id": { "default": null, "title": "Request Id" }, "success": { "default": null, "title": "Success" } }, "title": "best_sellers_output", "type": "object" } }, { "description": "Use for items currently promoted in Amazon's deals feed. Not for one product's price (product_details); for a brand by name use search with brand= and today_deals=true. Returns the current Amazon deals feed: ASIN, title, deal price, list price, discount, deal badge, start/end time and product links. Filter by department (categories), brand id (brands), rating cut-off, price bounds, minimum discount and Prime program. Every answer carries available_filters (the category and brand ids this marketplace accepts, with names), filters_applied / filters_ignored (what took effect) and next_offset (the next page, null when the feed ends). Price: $0.003 per call. Filters are by id: categories takes a department id or name, brands takes brand ids only; available_filters in every answer lists both with names, and filters_applied / filters_ignored report what Amazon honoured. A page is 30 rows; page with offset=next_offset (null when exhausted); total_count caps at 500. min_price, max_price, min_discount and max_discount are applied to the rows after retrieval, scanning up to 3 feed pages per call, so a page can hold fewer than 30 rows and total_count does not reflect them. An empty answer carries a hint saying why. Deal prices expire: check deal_ends_at. The older price_range and discount_range parameters are still accepted, as buckets (1-5 = under 25 / 25-50 / 50-100 / 100-200 / 200 and up; 1-4 = 10 / 25 / 50 / 70 percent off or more) or as bands such as 25-50 and 70+.", "inputSchema": { "properties": { "brands": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated brand ids, e.g. 46655 for Samsung on US. Take them from brand_id on any deals row or from available_filters.brands (the brands present in the current result). Names resolve only when this marketplace has already shown that brand; for a brand by name use /search with brand=<name> and today_deals=true instead.", "title": "Brands" }, "categories": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Department to restrict to: its id from available_filters.categories, or its name as Amazon shows it for that marketplace (case-insensitive; a unique fragment such as \"electronics\" works). US departments: Amazon Devices & Accessories, Appliances, Arts Crafts & Sewing, Audible Books & Originals, Automotive, Baby Products, Beauty & Personal Care, Books, CDs & Vinyl, Cell Phones & Accessories, Clothing Shoes & Jewelry, Collectibles & Fine Art, Electronics, Everything Else, Grocery & Gourmet Food, Handmade Products, Health & Household, Home & Kitchen, Industrial & Scientific, Kindle Store, Movies & TV, Musical Instruments, Office Products, Patio Lawn & Garden, Pet Supplies, Software, Sports & Outdoors, Tools & Home Improvement, Toys & Games, Video Games. Other marketplaces use their own localised names -- read them from available_filters.categories of any deals answer for that geo. An unknown name is a free 400 listing the valid names.", "title": "Categories" }, "compact": { "default": true, "description": "Return light rows: identity, prices, discount, badge, end time, links, brand_id and department_ids, dropping the image arrays. false returns every field the REST API sends.", "title": "Compact", "type": "boolean" }, "fields": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated row fields to return instead of the light set, e.g. \"asin,product_title,product_price\". Rows list what they left out under _omitted_fields.", "title": "Fields" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "limit": { "default": 10, "description": "How many deals to return from this page (0 = all of them). A full page is 30 rows and roughly 35 KB with every field, which most clients spill to a file instead of showing inline. The answer carries _truncated with the true count when it trims.", "minimum": 0, "title": "Limit", "type": "integer" }, "max_discount": { "anyOf": [ { "maximum": 100, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Largest discount percentage to return.", "title": "Max Discount" }, "max_price": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Highest deal price to return, in the marketplace currency.", "title": "Max Price" }, "min_discount": { "anyOf": [ { "maximum": 100, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Smallest discount percentage to return, e.g. 50 for half price or better.", "title": "Min Discount" }, "min_price": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Lowest deal price to return, in the marketplace currency. Applied to the fetched rows; see notes.", "title": "Min Price" }, "min_product_star_rating": { "anyOf": [ { "enum": [ "4", "ALL" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "Amazon's deals feed offers one rating cut-off: 4 = four stars and up. ALL or omitted = no cut-off. Other values are rejected with a free 400.", "title": "Min Product Star Rating" }, "offset": { "default": 0, "description": "Row to start at. A page is 30 rows; pass the previous answer's next_offset for the next page.", "minimum": 0, "title": "Offset", "type": "integer" }, "prime_early_access": { "default": false, "description": "Only Prime Early Access deals. A marketplace lists the programs it is running under available_filters.prime_programs; when Early Access is not running the answer is empty with a hint saying so.", "title": "Prime Early Access", "type": "boolean" }, "prime_exclusive": { "default": false, "description": "Only deals in Amazon's Prime Exclusive program.", "title": "Prime Exclusive", "type": "boolean" } }, "title": "dealsArguments", "type": "object" }, "name": "deals", "outputSchema": { "additionalProperties": true, "properties": { "amazon_request_count": { "default": null, "title": "Amazon Request Count" }, "deals": { "default": null, "title": "Deals" }, "request_id": { "default": null, "title": "Request Id" }, "success": { "default": null, "title": "Success" } }, "title": "deals_output", "type": "object" } }, { "description": "List every Apiguru endpoint with its price, required parameters and\n supported marketplaces, plus your current access mode, cache and\n session budget. Free: answers locally with no network request and no\n charge. Call this before paid tools if you need to plan.", "inputSchema": { "properties": {}, "title": "list_capabilitiesArguments", "type": "object" }, "name": "list_capabilities", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "list_capabilitiesOutput", "type": "object" } }, { "description": "Use to compare sellers' current offers and see who holds the buy box, and, with check_inventory, how many units a buyer can add to the cart now. The stock number is not a sales estimate. Not for the listing's own details (product_details). Returns the current offer list per ASIN (seller, price, condition, buy-box winner) and, optionally, the actual purchasable stock quantity. Price: $0.0045 per item (max 10). Billed per lookup, which is more than one per ASIN when check_inventory is true. offers_count=winner returns only the offer flagged is_buybox_winner (offers_total keeps the full count); it used to scope only the inventory check and return every offer. /scrape is a legacy alias for the same handler. When Amazon will not return the offer list for an ASIN, the result carries source=product_page: the featured (buy-box) offer read from the product page, offers_on_amazon (how many offers Amazon says exist) and a note; other sellers' offers and stock are then not included.", "inputSchema": { "properties": { "asins": { "description": "Comma-separated ASIN list, maximum 10. Each must be 10 uppercase alphanumeric characters; malformed entries are rejected with 400. An Amazon product URL (…/dp/ASIN) works too, in place of an ASIN; lower case is fine. A URL's domain sets the marketplace unless geo says otherwise.", "title": "Asins", "type": "string" }, "check_inventory": { "default": false, "description": "Resolve the true purchasable stock quantity. Slower and bills more lookups, so leave off unless you need the number.", "title": "Check Inventory", "type": "boolean" }, "condition": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated condition filter: ALL, NEW, USED_LIKE_NEW, USED_VERY_GOOD, USED_GOOD, USED_ACCEPTABLE (case-insensitive). Omit for every offer. An unknown value is a free 400 listing the allowed ones; it used to be silently treated as ALL.", "title": "Condition" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "offers_count": { "default": "all", "description": "'all' for every offer (default), 'winner' for the buy-box offer only, or a specific alphanumeric Offer ID. Every offer carries is_buybox_winner; with 'winner' the per-ASIN data holds that one offer and offers_total says how many exist. An ASIN with no featured offer answers an empty list with an explanatory error. The response echoes filters_applied.", "title": "Offers Count", "type": "string" } }, "required": [ "asins" ], "title": "offers_stockArguments", "type": "object" }, "name": "offers_stock", "outputSchema": { "additionalProperties": true, "properties": { "amazon_request_count": { "default": null, "title": "Amazon Request Count" }, "country_code": { "default": null, "title": "Country Code" }, "filters_applied": { "default": null, "title": "Filters Applied" }, "request_id": { "default": null, "title": "Request Id" }, "response_time": { "default": null, "title": "Response Time" }, "results": { "default": null, "title": "Results" } }, "title": "offers_stock_output", "type": "object" } }, { "description": "Use for one product's current listing. Not for several ASINs (product_details_batch), seller offers or stock (offers_stock), or review text (product_reviews). Fetches the complete product record for one ASIN on one marketplace: title, price, star rating, rating count, images, description, feature bullets, variations and category. Price: $0.003 per call. 404 means the ASIN is absent from that marketplace and IS billed. 503 is a temporary failure on our side and is NOT billed - retry. Bullet points and specs are what Amazon shows for the listing; on multi-variant listings they can describe the product family rather than the exact variant. A null field means Amazon did not show it.", "inputSchema": { "properties": { "asin": { "description": "Single Amazon ASIN, 10 uppercase alphanumeric characters. Exactly one - comma-separated lists are rejected; use product_details_batch for many. An Amazon product URL (…/dp/ASIN) works too, in place of an ASIN; lower case is fine. A URL's domain sets the marketplace unless geo says otherwise.", "pattern": "^\\s*(?:[A-Za-z0-9]{10}|https?://\\S+)\\s*$", "title": "Asin", "type": "string" }, "compact": { "default": true, "description": "Return the compact record (about 4 KB: identity, price, rating, availability, bullets, category, offer, buy box). false returns the full record (about 75 KB, includes from_manufacturer, tech_specs, product_information, product_reviews).", "title": "Compact", "type": "boolean" }, "fields": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated top-level fields to return instead of the compact set, e.g. \"tech_specs,product_information\". Any response lists what it left out under _omitted_fields.", "title": "Fields" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" } }, "required": [ "asin" ], "title": "product_detailsArguments", "type": "object" }, "name": "product_details", "outputSchema": { "additionalProperties": true, "properties": { "data": { "default": null, "title": "Data" }, "request_id": { "default": null, "title": "Request Id" }, "success": { "default": null, "title": "Success" } }, "title": "product_details_output", "type": "object" } }, { "description": "Use to enrich a list of ASINs in one call; compare the ASINs in `results` with the ones you sent. Batch variant of product_details. Accepts a comma-separated ASIN list, deduplicates it, and fetches all of them concurrently. Far cheaper and faster than N single calls. Price: $0.0024 per item (max 20). Billed per ASIN processed, including ones that come back not-found. More than 20 ASINs returns 413. Bullet points and specs are what Amazon shows for the listing; on multi-variant listings they can describe the product family rather than the exact variant. A null field means Amazon did not show it. ASINs Amazon has no record for on that marketplace are listed in not_returned (billed, like a not-found product_details call; retrying will not help).", "inputSchema": { "properties": { "asins": { "description": "Comma-separated ASIN list, maximum 20 after de-duplication. Each must be 10 uppercase alphanumeric characters. An Amazon product URL (…/dp/ASIN) works too, in place of an ASIN; lower case is fine. A URL's domain sets the marketplace unless geo says otherwise.", "title": "Asins", "type": "string" }, "compact": { "default": true, "description": "Return the compact record (about 4 KB: identity, price, rating, availability, bullets, category, offer, buy box). false returns the full record (about 75 KB, includes from_manufacturer, tech_specs, product_information, product_reviews).", "title": "Compact", "type": "boolean" }, "fields": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated top-level fields to return instead of the compact set, e.g. \"tech_specs,product_information\". Any response lists what it left out under _omitted_fields.", "title": "Fields" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" } }, "required": [ "asins" ], "title": "product_details_batchArguments", "type": "object" }, "name": "product_details_batch", "outputSchema": { "additionalProperties": true, "properties": { "amazon_request_count": { "default": null, "title": "Amazon Request Count" }, "billable_requests_count": { "default": null, "title": "Billable Requests Count" }, "country_code": { "default": null, "title": "Country Code" }, "request_id": { "default": null, "title": "Request Id" }, "response_time": { "default": null, "title": "Response Time" }, "results": { "default": null, "title": "Results" } }, "title": "product_details_batch_output", "type": "object" } }, { "description": "Use for what customers say about one product. Not for its full review history (Amazon serves full and star-filtered review lists only to signed-in accounts) or for seller feedback (seller_reviews). Returns the overall rating, rating count, review_histogram (percent of all ratings per star), Amazon's 'customers say' AI summary where that marketplace shows one, and the reviews on the product page (typically up to 8 from this marketplace and 5 from other countries), each with rating, review_date, review_country, from_this_marketplace, verified flag and helpful_votes; from_rating/to_rating keep a star window. Price: $0.003 per call. Same 404-billed / 503-not-billed semantics as product_details. No paging or sort: the reviews are those on the product page; review_coverage says how many and from where. from_rating/to_rating filter them. review_histogram (here and on product_details) gives the share of every rating. customers_say is null where Amazon shows no summary (several marketplaces never do); customers_say_note then says so.", "inputSchema": { "properties": { "asin": { "description": "Single Amazon ASIN, 10 uppercase alphanumeric characters. An Amazon product URL (…/dp/ASIN) works too, in place of an ASIN; lower case is fine. A URL's domain sets the marketplace unless geo says otherwise.", "pattern": "^\\s*(?:[A-Za-z0-9]{10}|https?://\\S+)\\s*$", "title": "Asin", "type": "string" }, "from_rating": { "anyOf": [ { "maximum": 5, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Lowest star rating to include, 1-5. Filters the reviews the product page shows (see review_coverage).", "title": "From Rating" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "max_reviews": { "default": 10, "description": "Cap on individual reviews returned (0 = all). The rating summary, review_histogram and customers_say are always returned; _reviews_total is the number of reviews on the product page (not all reviews; see review_coverage).", "minimum": 0, "title": "Max Reviews", "type": "integer" }, "to_rating": { "anyOf": [ { "maximum": 5, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Highest star rating to include, 1-5. from_rating=1&to_rating=3 keeps the critical ones among them.", "title": "To Rating" } }, "required": [ "asin" ], "title": "product_reviewsArguments", "type": "object" }, "name": "product_reviews", "outputSchema": { "additionalProperties": true, "properties": { "data": { "default": null, "title": "Data" }, "request_id": { "default": null, "title": "Request Id" }, "success": { "default": null, "title": "Success" } }, "title": "product_reviews_output", "type": "object" } }, { "description": "Use to find products by keyword and filters. Rows are result snippets; for the authoritative record of one ASIN call product_details. Search Amazon products by keyword. Filters: page, sort_by, category_id (browse node), min_price / max_price (decimals), product_condition (NEW / USED / RENEWED), brand, seller_id, today_deals and deal_type (coupons, all_discounts, buy_more_save_more). Every answer carries filters_applied, filters_ignored (with the reason) and available_filters for that marketplace. Price: $0.003 per call. Blank values and the literal string 'null' are treated as unset. Invalid page, sort_by, price, product_condition or deal_type is a free 400 naming the parameter and the allowed values. Condition and deal refinements are per marketplace; a marketplace that lacks one gets the unfiltered feed plus an entry under filters_ignored, never a silent empty page. `product_num_ratings` and `offers_count` are integers; `product_star_rating`, `product_price` and `product_original_price` are decimal strings; a null field means Amazon did not show it. `is_prime` is true when the result carries a Prime badge or its delivery line offers Prime delivery. `metadata.total_pages` says how far `page` can go. A full page is up to 48 results and about 54 KB; the tool returns the first 10 as light rows by default and the answer carries `_truncated`, `_omitted_fields`, `_projection` and `_notes`. filters_applied echoes the effective sort_by (RELEVANCE when none was sent). A BEST_SELLERS ordering is Amazon's query-scoped popularity, not a category rank: a row's `badges` / `is_best_seller` are what the result card showed for this query, and an ASIN that is #1 in its subcategory can carry no badge here while product_details reports best_seller=true with the rank. For a rank claim, use product_details or best_sellers. An empty `products` list is served as success only when Amazon itself reports 0 results (metadata.total is 0 and `hint` says so). Anything else that is not a usable result is an unbilled, retryable 503 with code upstream_unavailable.", "inputSchema": { "properties": { "brand": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Brand name as Amazon spells it (case-insensitive), e.g. Samsung.", "title": "Brand" }, "category_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Amazon browse node id to restrict to, e.g. 172282 (Electronics on US). Take one from a best_sellers answer's available_subcategories, a product's category_path, or node= in an Amazon URL. Ids differ per marketplace.", "title": "Category Id" }, "compact": { "default": true, "description": "Return light rows: identity, price, rating, badges and one delivery_date, dropping the long delivery prose that repeats itself across three fields. false returns every field the REST API sends (roughly 3x the size).", "title": "Compact", "type": "boolean" }, "deal_type": { "anyOf": [ { "enum": [ "today_deals", "all_discounts", "coupons", "buy_more_save_more" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "A specific promotion refinement: today_deals, all_discounts, coupons or buy_more_save_more. available_filters.deal_type lists the ones this marketplace has.", "title": "Deal Type" }, "fields": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated row fields to return instead of the light set, e.g. \"asin,product_title,product_price\". Rows list what they left out under _omitted_fields.", "title": "Fields" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "limit": { "default": 10, "description": "How many search results to return from this page (0 = all of them). A full page is up to 48 rows and about 54 KB, which most clients spill to a file instead of showing inline. The answer carries _truncated with the true count when it trims.", "minimum": 0, "title": "Limit", "type": "integer" }, "max_price": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Highest price, in the marketplace currency.", "title": "Max Price" }, "min_price": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Lowest price, in the marketplace currency; decimals such as 19.99 are fine.", "title": "Min Price" }, "page": { "default": 1, "description": "Result page, 1-based. metadata.total_pages says how far it goes.", "minimum": 1, "title": "Page", "type": "integer" }, "product_condition": { "anyOf": [ { "enum": [ "NEW", "USED", "RENEWED" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "NEW, USED or RENEWED (case-insensitive). Applied with the marketplace's own condition node; where a marketplace does not offer one, the answer's filters_ignored says so and available_filters lists what it does offer.", "title": "Product Condition" }, "query": { "description": "Search keywords. Required and must be non-empty.", "minLength": 1, "title": "Query", "type": "string" }, "seller_id": { "anyOf": [ { "pattern": "^[Aa][A-Za-z0-9]{9,20}$", "type": "string" }, { "type": "null" } ], "default": null, "description": "Restrict results to one seller's offers: an Amazon seller id, 'A' followed by 9-20 letters and digits (e.g. A2A1RNLLUK3HYA).", "title": "Seller Id" }, "sort_by": { "default": "RELEVANCE", "description": "Result ordering.", "enum": [ "RELEVANCE", "BEST_SELLERS", "LOW_HIGH_PRICE", "HIGH_LOW_PRICE", "REVIEWS", "NEWEST" ], "title": "Sort By", "type": "string" }, "today_deals": { "default": false, "description": "Only items in Today's Deals, using that marketplace's own refinement. Where a marketplace has none (amazon.fr on 2026-09-08) it is reported under filters_ignored.", "title": "Today Deals", "type": "boolean" } }, "required": [ "query" ], "title": "searchArguments", "type": "object" }, "name": "search", "outputSchema": { "additionalProperties": true, "properties": { "amazon_request_count": { "default": null, "title": "Amazon Request Count" }, "available_filters": { "default": null, "title": "Available Filters" }, "filters_applied": { "default": null, "title": "Filters Applied" }, "filters_ignored": { "default": null, "title": "Filters Ignored" }, "metadata": { "default": null, "title": "Metadata" }, "products": { "default": null, "title": "Products" }, "request_id": { "default": null, "title": "Request Id" }, "success": { "default": null, "title": "Success" } }, "title": "search_output", "type": "object" } }, { "description": "Use to list one seller's storefront. Products listed by a seller: a storefront search. Takes the same filters as search -- query, page, sort_by, category_id, min_price / max_price, product_condition, brand, today_deals, deal_type -- and answers with filters_applied, filters_ignored and available_filters like search does. Price: $0.003 per call. Unlike seller_profile_batch, seller_id format is not pattern-validated here. metadata.total_pages says how far page goes (48 rows a page). Invalid sort_by, price, product_condition or deal_type is a free 400 that lists the allowed values.", "inputSchema": { "properties": { "brand": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Brand name as Amazon spells it (case-insensitive), e.g. Samsung.", "title": "Brand" }, "category_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Amazon browse node id to restrict to, e.g. 172282 (Electronics on US). Take one from a best_sellers answer's available_subcategories, a product's category_path, or node= in an Amazon URL. Ids differ per marketplace.", "title": "Category Id" }, "compact": { "default": true, "description": "Return light rows: identity, price, rating, badges and one delivery_date, dropping the long delivery prose that repeats itself across three fields. false returns every field the REST API sends (roughly 3x the size).", "title": "Compact", "type": "boolean" }, "deal_type": { "anyOf": [ { "enum": [ "today_deals", "all_discounts", "coupons", "buy_more_save_more" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "A specific promotion refinement: today_deals, all_discounts, coupons or buy_more_save_more. available_filters.deal_type lists the ones this marketplace has.", "title": "Deal Type" }, "fields": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated row fields to return instead of the light set, e.g. \"asin,product_title,product_price\". Rows list what they left out under _omitted_fields.", "title": "Fields" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "limit": { "default": 10, "description": "How many the seller's products to return from this page (0 = all of them). A full page is up to 48 rows and about 54 KB, which most clients spill to a file instead of showing inline. The answer carries _truncated with the true count when it trims.", "minimum": 0, "title": "Limit", "type": "integer" }, "max_price": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Highest price, in the marketplace currency.", "title": "Max Price" }, "min_price": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Lowest price, in the marketplace currency; decimals such as 19.99 are fine.", "title": "Min Price" }, "page": { "default": 1, "description": "Result page, 1-based. metadata.total_pages says how far it goes.", "minimum": 1, "title": "Page", "type": "integer" }, "product_condition": { "anyOf": [ { "enum": [ "NEW", "USED", "RENEWED" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "NEW, USED or RENEWED (case-insensitive). Applied with the marketplace's own condition node; where a marketplace does not offer one, the answer's filters_ignored says so and available_filters lists what it does offer.", "title": "Product Condition" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional keywords to search within this seller's storefront.", "title": "Query" }, "seller_id": { "description": "Amazon seller id whose storefront to list: 'A' followed by 9-20 letters and digits, the seller= or me= value of a storefront URL (e.g. A2A1RNLLUK3HYA). Required.", "pattern": "^[Aa][A-Za-z0-9]{9,20}$", "title": "Seller Id", "type": "string" }, "sort_by": { "default": "RELEVANCE", "description": "Result ordering.", "enum": [ "RELEVANCE", "BEST_SELLERS", "LOW_HIGH_PRICE", "HIGH_LOW_PRICE", "REVIEWS", "NEWEST" ], "title": "Sort By", "type": "string" }, "today_deals": { "default": false, "description": "Only items in Today's Deals, using that marketplace's own refinement. Where a marketplace has none (amazon.fr on 2026-09-08) it is reported under filters_ignored.", "title": "Today Deals", "type": "boolean" } }, "required": [ "seller_id" ], "title": "seller_productsArguments", "type": "object" }, "name": "seller_products", "outputSchema": { "additionalProperties": true, "properties": { "data": { "default": null, "title": "Data" }, "request_id": { "default": null, "title": "Request Id" }, "success": { "default": null, "title": "Success" } }, "title": "seller_products_output", "type": "object" } }, { "description": "Use to vet sellers: name, rating and feedback counts as Amazon displays them. Returns the storefront profile for each seller id: business name, rating, feedback counts, address and marketplace presence. Price: $0.0036 per item (max 10). Seller ID validation is all-or-nothing: one malformed id rejects the entire request with 400. Every row in results is an object with `status`: `ok` (the profile), `not_found` (Amazon has no page for that id on this marketplace; billed, like a 404) or `unavailable` (could not be retrieved right now; NOT billed on the keyed path, `retryable: true`). A row is never null. billable_requests_count counts ok + not_found rows; on the pay-per-call rail the per-item quote is settled up front, so retry `unavailable` ids in a separate call rather than expecting a partial refund.", "inputSchema": { "properties": { "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "seller_ids": { "description": "Comma-separated seller IDs, maximum 10. Each must be an Amazon seller id -- 'A' followed by 9-20 letters and digits, e.g. A2A1RNLLUK3HYA -- or the whole call 400s.", "pattern": "^[Aa][A-Za-z0-9]{9,20}(,[Aa][A-Za-z0-9]{9,20})*$", "title": "Seller Ids", "type": "string" } }, "required": [ "seller_ids" ], "title": "seller_profile_batchArguments", "type": "object" }, "name": "seller_profile_batch", "outputSchema": { "additionalProperties": true, "properties": { "amazon_request_count": { "default": null, "title": "Amazon Request Count" }, "billable_requests_count": { "default": null, "title": "Billable Requests Count" }, "country_code": { "default": null, "title": "Country Code" }, "note": { "default": null, "title": "Note" }, "request_id": { "default": null, "title": "Request Id" }, "response_time": { "default": null, "title": "Response Time" }, "results": { "default": null, "title": "Results" }, "unavailable": { "default": null, "title": "Unavailable" } }, "title": "seller_profile_batch_output", "type": "object" } }, { "description": "Use for a seller's customer feedback (service, shipping). Not for product reviews (product_reviews). Returns paginated seller feedback, optionally filtered to a star-rating window. Price: $0.003 per call. from_rating and to_rating are optional; omit both for unfiltered feedback. A page holds 5 reviews and the answer carries current_page and has_next_page; Amazon exposes no total, so page until has_next_page is false (up to page 100).", "inputSchema": { "properties": { "compact": { "default": true, "description": "Return light rows: identity, price, rating, badges and one delivery_date, dropping the long delivery prose that repeats itself across three fields. false returns every field the REST API sends (roughly 3x the size).", "title": "Compact", "type": "boolean" }, "fields": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Comma-separated row fields to return instead of the light set, e.g. \"asin,product_title,product_price\". Rows list what they left out under _omitted_fields.", "title": "Fields" }, "from_rating": { "anyOf": [ { "maximum": 5, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Lowest star rating to include, 1-5.", "title": "From Rating" }, "geo": { "default": "US", "description": "Marketplace country code.", "enum": [ "US", "CA", "DE", "MX", "UK", "FR", "IT", "ES", "AU", "BR", "IN", "JP", "NL", "AE", "PL", "SA", "SG", "SE", "TR", "BE", "IE", "ZA", "EG" ], "title": "Geo", "type": "string" }, "limit": { "default": 10, "description": "How many seller reviews to return from this page (0 = all of them). A full page is up to 48 rows and about 54 KB, which most clients spill to a file instead of showing inline. The answer carries _truncated with the true count when it trims.", "minimum": 0, "title": "Limit", "type": "integer" }, "page": { "default": 1, "description": "Result page, 1-based, 5 reviews a page; has_next_page in the answer says whether another exists.", "minimum": 1, "title": "Page", "type": "integer" }, "seller_id": { "description": "Amazon seller id: 'A' followed by 9-20 letters and digits, the seller= or me= value of a storefront URL (e.g. A2A1RNLLUK3HYA). Required.", "pattern": "^[Aa][A-Za-z0-9]{9,20}$", "title": "Seller Id", "type": "string" }, "to_rating": { "anyOf": [ { "maximum": 5, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Highest star rating to include, 1-5.", "title": "To Rating" } }, "required": [ "seller_id" ], "title": "seller_reviewsArguments", "type": "object" }, "name": "seller_reviews", "outputSchema": { "additionalProperties": true, "properties": { "data": { "default": null, "title": "Data" }, "request_id": { "default": null, "title": "Request Id" }, "success": { "default": null, "title": "Success" } }, "title": "seller_reviews_output", "type": "object" } }, { "description": "Report a bug, ask for a field, or say what would make this API more\n useful. Free: never billed, no API key needed.\n\n Prefer GitHub if you have an account -- an issue at\n https://github.com/apiguru-app/agent-kit/issues gets a reply on the\n thread, this wall does not. Use this tool when you have no GitHub\n account or nothing to attach one to.\n\n message: what happened or what you want. Be specific: the tool, the\n parameters, the field, what you expected, what you got, and\n the request_id from the answer. One issue per entry -- a\n five-point list cannot be closed point by point.\n category: bug | wish | praise | question | other\n endpoint: which tool or path it is about, e.g. \"search\".\n agent: what you are, e.g. \"acme-pricing-bot/2.1\". Optional.\n contact: a GitHub handle or email if you want a reply. Shown\n publicly on the wall. Optional.\n ", "inputSchema": { "properties": { "agent": { "default": "", "title": "Agent", "type": "string" }, "category": { "default": "other", "title": "Category", "type": "string" }, "contact": { "default": "", "title": "Contact", "type": "string" }, "endpoint": { "default": "", "title": "Endpoint", "type": "string" }, "message": { "title": "Message", "type": "string" } }, "required": [ "message" ], "title": "send_feedbackArguments", "type": "object" }, "name": "send_feedback", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "send_feedbackOutput", "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:7857eed28e3be7d2fbf47582c28051a01ae6cede2126ee62948c5901f4658449 | sha256sum