{"data":[{"name":"list_catalogue_categories","title":"List catalogue categories","description":"Every category of the Rewalto data catalogue in page order, with how many cards and entries each has and how many are live, in preview, planned or degraded. Public and free to call.","group":"catalogue","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"effect":"read","cost":"free","access":"public","scope":null},{"name":"list_catalogue_products","title":"List or filter catalogue cards","description":"Data-product cards: what you get, how many entries, coverage, freshness, keep/live and status. Filter by category id, text and status (live, preview, planned, degraded). Public and free to call. Each entry shows its own pricing from the catalogue: a published rate, \"quote first\", or \"free tool\".","group":"catalogue","inputSchema":{"type":"object","additionalProperties":false,"properties":{"category":{"type":"string","description":"Only this category id."},"q":{"type":"string","description":"Only cards whose name, summary, data types or sources contain this."},"status":{"type":"string","enum":["live","preview","planned","degraded"]}}},"effect":"read","cost":"free","access":"public","scope":null},{"name":"search_catalogue","title":"Search the catalogue","description":"Search names, data types, sources and field names. A pasted product link or retailer product id also gets an intake answer (whether Rewalto already holds it). Pass the id of a result of type entry to get_catalogue_entry. A result of type product is a card, not an entry: its entry ids are the entryIds of that card in list_catalogue_products. Public and free to call. Each entry shows its own pricing from the catalogue: a published rate, \"quote first\", or \"free tool\".","group":"catalogue","inputSchema":{"type":"object","additionalProperties":false,"required":["q"],"properties":{"q":{"type":"string","minLength":1,"maxLength":200,"description":"Text, a product link or a product id."}}},"effect":"read","cost":"free","access":"public","scope":null},{"name":"get_catalogue_entry","title":"Get a catalogue entry","description":"One dataset, recipe, workflow or tool in full: inputs and outputs (JSON Schema), sample rows, data dictionary, coverage with holes, freshness, rights, versions and, for a workflow, what it uses. Public and free to call. Each entry shows its own pricing from the catalogue: a published rate, \"quote first\", or \"free tool\".","group":"catalogue","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","description":"An entry id: one of a card's entryIds, or the id of a search result of type entry. Never a product id."}}},"effect":"read","cost":"free","access":"public","scope":null},{"name":"check_intake","title":"Do we already hold these products?","description":"For up to 25 product links or retailer product ids: whether Rewalto already collects each, how it was linked (linkMethod), the product id it declares (declaredSku) and, per held listing, the canonical product it is linked to. Coverage facts only, never the data. Public and free to call.","group":"catalogue","inputSchema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"string","minLength":1,"maxLength":2000},"description":"Product links or retailer product ids."}}},"effect":"read","cost":"free","access":"public","scope":null},{"name":"whoami","title":"Who am I","description":"The organisation, role and plan the API key belongs to. Free. Needs an API key; answers for the key’s own organisation only.","group":"account","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"effect":"read","cost":"free","access":"signed_in","scope":null},{"name":"get_credit_balance","title":"Credit balance","description":"Free and paid credits left this month. Free. Needs an API key; answers for the key’s own organisation only.","group":"account","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"effect":"read","cost":"free","access":"signed_in","scope":"usage:read"},{"name":"list_credit_usage","title":"Credit usage","description":"What spent credits, newest first, with receipts. Free. Needs an API key; answers for the key’s own organisation only.","group":"account","inputSchema":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"read","cost":"free","access":"signed_in","scope":"usage:read"},{"name":"list_retailers","title":"Retailers with data","description":"The retailers Rewalto holds commerce data for. Free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"get_pincode","title":"Pin code lookup","description":"One six-digit Indian pin code: its city, district and state, whether it is urban, every post office India Post lists for it, and which retailers Rewalto has read there (first and newest day, days, readings). Free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["pincode"],"properties":{"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, e.g. 560034."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"interpret_query","title":"Read a question into a request","description":"Reads a typed question (\"Amul butter price in Pune on Blinkit\") into the request that answers it: the route (data, fresh, watch, finder or request), the operation to call (`target`) and its fields under that operation’s own names, each `stated` or `inferred`, plus what could not be mapped (`unresolved`). The same reading the website shows. Runs, quotes and charges nothing: call the target with the fields once the user confirms them. `route: null` means no reading; search the text as it is. Free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":500,"description":"The question, as typed."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"get_brand","title":"A brand","description":"One brand and where it is listed. Free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"description":"The brand name."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"list_listings","title":"Listings","description":"Retailer listings (products as each retailer lists them), filtered. Spends credits at the published read rate, with no quote; the answer’s `meta.credits` says what was charged and gives the receipt. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"brand":{"type":"string","minLength":1,"description":"A brand name."},"productId":{"type":"string","minLength":1,"description":"A canonical product id."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"search_listings","title":"Search products by name","description":"Retailer listings whose name, brand or retailer product id contain every word of q as the start of a word (\"aashir atta\" finds \"Aashirvaad Atta\"; Hindi words match as written), optionally one retailer, one exact brand, or listings read at one pin code in the last 30 days. Best match first: an exact retailer product id, then the words as a phrase in the name, then the rest, whole words before word starts (\"atta\" before \"Attar\"); when fewer than 10 match, likely misspellings follow (\"ashirvad\" finds \"Aashirvaad\"), those with the short typed words (\"oil\") first. Finding nothing costs nothing. Spends credits at the published read rate, with no quote; the answer’s `meta.credits` says what was charged and gives the receipt. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["q"],"properties":{"q":{"type":"string","minLength":1,"maxLength":200,"description":"The words: product name, brand or retailer product id. Up to 8 are used."},"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"brand":{"type":"string","minLength":1,"description":"Exact brand text, as in a listing’s brand."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code: only listings read there in the last 30 days."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"get_availability","title":"Is it in stock at this pin code","description":"For one six-digit pin code and one product (listingId: one retailer listing, such as a search_listings result; or productId: that Rewalto product’s listings read at this pin, across retailers): in_stock, out_of_stock or unknown per listing, from its newest kept reading there, with the reading time and, where recorded, the store. Never a guess: unknown says why (stale, no_reading_at_pin, stock_not_reported, excluded_pin_day). Unknown rows cost nothing. Spends credits at the published read rate, with no quote; the answer’s `meta.credits` says what was charged and gives the receipt. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["pincode"],"properties":{"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"listingId":{"type":"string","minLength":1,"description":"A listing id (for example a search_listings result id). Give this or productId."},"productId":{"type":"string","minLength":1,"description":"A Rewalto product id (a listing’s productId). Give this or listingId."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"get_pin_availability","title":"Share in stock at a pin code","description":"For one six-digit pin code (optionally one retailer), per retailer: how many listings read there are in stock and out of stock, by each listing’s newest kept reading, and the share in stock. Old, unreported and left-out readings are counted as unknown, by reason. Spends credits at the published read rate, with no quote; the answer’s `meta.credits` says what was charged and gives the receipt. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["pincode"],"properties":{"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"retailer":{"type":"string","minLength":1,"description":"Only this retailer, a key from list_retailers."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_observations","title":"Price and stock readings","description":"Readings (price, MRP, stock, rank) by retailer, pin code, brand or product, over a time range. Spends credits at the published read rate, with no quote; the answer’s `meta.credits` says what was charged and gives the receipt. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"brand":{"type":"string","minLength":1,"description":"A brand name."},"productId":{"type":"string","minLength":1,"description":"A canonical product id."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"from":{"type":"string","minLength":1,"description":"Start time, ISO 8601."},"to":{"type":"string","minLength":1,"description":"End time, ISO 8601."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_brand_mentions","title":"YouTube brand mentions","description":"For each brand and IST day: how many public YouTube videos published in India mention it, with their summed public views, likes and comments (atLeast: the page of 50 was full). Newest day first; optionally one brand and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"brand":{"type":"string","minLength":1,"description":"A brand, as listed in the catalogue (exact)."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_rating_changes","title":"Rating changes","description":"For one retailer: each product's rating, rating count and review count on every IST day one of them changed, per pin code (or national). Newest day first; optionally one product, one pin code and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_price_per_unit","title":"Price per unit","description":"For one retailer: each product's price per gram, millilitre or piece on each IST day at each pin code (or national), per pack, with the lowest, highest and mean in paise per unit and the selling prices; a pack that could not be read has an empty price per unit. Newest day first; optionally one product, one pin code and a day range. Charged per data point at its published rate; re-reading within 7 days is free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_stock_states","title":"Stock states","description":"For one retailer: each product's stock state at the close of each IST day at each pin code (in, low, out, delisted or unknown), whether out at that pin only or everywhere, the stock count where shown, and the days in a row out or gone. Newest day first; optionally one product, one pin code, one state and a day range. Charged per stock state at its published rate; re-reading within 7 days is free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"stockState":{"type":"string","minLength":1,"description":"in, low, out, delisted or unknown."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_banner_placements","title":"Banner ads in search","description":"For one app (zepto or instamart): each brand banner ad seen on a search term at a pin code on an IST day, with the keyword bought and billing model where stated, replies, stores, best position and linked products; the creative is a fingerprint only. Newest day first; optionally one brand, search term, pin code and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"zepto or instamart."},"brand":{"type":"string","minLength":1,"description":"A brand, as the app names it (exact)."},"searchTerm":{"type":"string","minLength":1,"description":"A search term (exact)."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_storefront_promos","title":"D2C promo calendar","description":"For each watched brand store and IST day: variants seen and on sale, the median and deepest discount (basis points), and how many went on sale, ended a sale, were cut in price or discounted deeper. Newest day first; optionally one brand, one store and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"brand":{"type":"string","minLength":1,"description":"A brand (exact)."},"domain":{"type":"string","minLength":1,"description":"A watched store, e.g. mamaearth.in."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_search_ranks","title":"Search rank history","description":"For one retailer: per IST day, search term, pin code (or national) and listing, its best place in the whole result list (null where the reply does not state its page start), the first page and slot it was seen at, and how many replies showed it, placed it in the top 10 and marked it sponsored. Newest day first; optionally one product (retailerSku), search term, pin code and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"searchTerm":{"type":"string","minLength":1,"description":"A search term (exact)."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_share_of_search","title":"Share of search","description":"For one retailer: per IST day, search term, pin code (or national) and brand, the brand's share of the first ten places (organic and sponsored together) over every reply read that day, how much of it was sponsored, and how many of its listings reached the top 10. Newest day first; optionally one brand, search term, pin code and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"brand":{"type":"string","minLength":1,"description":"A brand, as the retailer writes it (exact)."},"searchTerm":{"type":"string","minLength":1,"description":"A search term (exact)."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_promo_emails","title":"Brand promo emails","description":"Each promotion a brand emailed to subscribers, as recorded by Rewalto: send day, brand, offer, sale dates and discount code if stated, and the brand's linked page; never the email itself. Newest send day first; optionally one brand and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"brand":{"type":"string","minLength":1,"description":"A canonical brand (exact), as in the brand field."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_ad_creatives","title":"Ad creatives (Google Ads Transparency Center)","description":"Each ad creative a watched brand's advertiser ran in India, as Google's Ads Transparency Center lists it, read weekly: advertiser and creative ids, format (text, image or video), first and last day shown, a fingerprint and the creative's public page on the centre; never the ad itself. readVia: the brand's own advertiser account or its website (which also finds agency-placed ads). Newest day last shown first; optionally one brand, one advertiser id and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"brand":{"type":"string","minLength":1,"description":"A watched brand (exact), as in the brand field."},"advertiser":{"type":"string","minLength":1,"description":"An advertiser id: AR followed by 20 digits."},"from":{"type":"string","minLength":1,"description":"First day last shown, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last day last shown, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_storefronts","title":"Storefront platforms","description":"D2C online stores in Rewalto's storefront index with the platform that runs each (shopify, woocommerce, magento, fynd, unicommerce and others): platform confidence, market, when Rewalto first and last read the store, and how many products and variants Rewalto holds from its catalogue. In host order; optionally one store, one platform and one market. Charged per store at the listings rate. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","minLength":1,"description":"One store, by host name, e.g. www.mamaearth.in."},"platform":{"type":"string","minLength":1,"description":"One platform, e.g. shopify or woocommerce."},"market":{"type":"string","minLength":1,"description":"One market, an ISO country code, e.g. IN."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_sponsored_share","title":"Sponsored share in search","description":"For one retailer: per IST day, search term, pin code and brand, the product cards the brand held in search, how many were marked sponsored (all and in places 1 to 10), its sponsored rate and its share of all sponsored cards of that term, pin and day. Ads are counted only where the reading can see the retailer's ad marker (Blinkit, Zepto, Nykaa, Tata 1mg); elsewhere shares are null. Newest day first; optionally one brand, search term, pin code and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers (blinkit, zepto, nykaa, tata_1mg carry ad counts)."},"brand":{"type":"string","minLength":1,"description":"A brand, as the retailer writes it (exact)."},"searchTerm":{"type":"string","minLength":1,"description":"A search term (exact)."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_dark_stores","title":"Dark stores and catchments","description":"Each quick-commerce dark store Rewalto holds (Blinkit, Zepto, Instamart, BigBasket, Flipkart Minutes, JioMart, DMart), one record per store with every source merged: store id and name, pin code, area, address, point, city and state, the pin codes it serves, first and last seen, status (open, opened, closed) and its sources (old_sweep, core_sweep, app_reading, store_list). Send pincode for the stores that serve that pin. Newest last-seen day first; optionally one platform, city, status and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"platform":{"type":"string","minLength":1,"description":"blinkit, zepto, instamart, bigbasket, flipkart_minutes or jiomart."},"city":{"type":"string","minLength":1,"description":"A city name (case-insensitive)."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code: only the stores serving it."},"status":{"type":"string","minLength":1,"description":"open, opened or closed."},"from":{"type":"string","minLength":1,"description":"First last-seen day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last last-seen day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_regulatory_notices","title":"Regulatory notices (CDSCO, FSSAI)","description":"Public notices from India's drug regulator (CDSCO public notices) and food regulator (FSSAI notifications), read weekly: title, release day, the document's link and size, and for FSSAI its category (draft, gazette, notice, sps, tbt, ordinary), comments link and further documents; never the document itself. Newest release day first; optionally one regulator, a day range and words in the title. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"authority":{"type":"string","minLength":1,"description":"cdsco or fssai."},"from":{"type":"string","minLength":1,"description":"First release day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last release day, YYYY-MM-DD."},"q":{"type":"string","minLength":1,"description":"Words the title contains (any case)."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_launches","title":"Launches","description":"Each listing that appeared on a retailer's shelf at a pin code on an IST day where it was not before: class (new_product, new_pack, new_seller, relisting), brand, title, pack, first-seen price and MRP, and the reading it was first seen in; detectedBy says previous_system (2 to 6 Sep 2026, history) or core (the daily roll). Newest day first; optionally one retailer, pin code, brand, class and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"brand":{"type":"string","minLength":1,"description":"A brand, as the retailer wrote it (exact)."},"class":{"type":"string","minLength":1,"description":"new_product, new_pack, new_seller or relisting."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_product_listings","title":"One product across retailers","description":"One product (product id, or retailer with retailerSku to start from one listing): every retailer listing Rewalto's matcher matched to it, with each listing's newest price, MRP and stock per pin code (or national) in a window of IST days (default 7, at most 31). Ordered by retailer, listing and pin code. Charged per record at the listings rate. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"product":{"type":"string","minLength":1,"description":"A Rewalto product id (uuid)."},"retailer":{"type":"string","minLength":1,"description":"With retailerSku: start from this listing (a retailer key)."},"retailerSku":{"type":"string","minLength":1,"description":"With retailer: the retailer's own product id."},"pincode":{"type":"string","minLength":1,"description":"Only this six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD (default today)."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_price_parity","title":"Price parity across retailers","description":"One product (product id, or retailer with retailerSku): for each IST day it was priced, every matched listing's newest price per pin code, the lowest and highest, and the gap in paise and basis points. Newest day first (default the last 30 days, at most 92), optionally one pin code. Charged per day at the history rate. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"product":{"type":"string","minLength":1,"description":"A Rewalto product id (uuid)."},"retailer":{"type":"string","minLength":1,"description":"With retailerSku: start from this listing (a retailer key)."},"retailerSku":{"type":"string","minLength":1,"description":"With retailer: the retailer's own product id."},"pincode":{"type":"string","minLength":1,"description":"Only prices at this six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD (default today)."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_brand_directory","title":"Brands and aliases","description":"Canonical brands in name order: every spelling retailers and titles use for each, how many listings carry it, and its owning company where known, with the basis. Refreshed daily. Charged per brand at the company record rate. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"q":{"type":"string","minLength":1,"description":"Only brands whose name starts with this (case and accents ignored)."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_brand_owners","title":"Brand to company","description":"The brands Rewalto can link to an owning company, with the basis for each link (a person named it, a company record's name or website matches the brand) and the company record when there is one. Charged per brand at the company record rate. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"q":{"type":"string","minLength":1,"description":"Only brands whose name starts with this (case and accents ignored)."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_company_records","title":"Company and brand records","description":"Companies and brands Rewalto holds, one record per company: name, kind (brand, agency, startup, company), website and web host, place, industry and sectors, description, size and revenue bands, founded year, store platform, the company's own social accounts with follower counts, a revenue estimate in rupees and monthly site visits where measured, and its company email and phone where public. Most recently added first; optionally a name fragment, one web host, kind, startup, state, city or store platform. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"description":"Name contains this text (case-insensitive), 2 to 100 characters."},"host":{"type":"string","minLength":1,"description":"One web host, exact, without www (e.g. mamaearth.in)."},"kind":{"type":"string","minLength":1,"description":"brand, agency, startup or company."},"startup":{"type":"string","minLength":1,"description":"true for startups only, false for the rest."},"state":{"type":"string","minLength":1,"description":"One state (case-insensitive)."},"city":{"type":"string","minLength":1,"description":"One city (case-insensitive)."},"platform":{"type":"string","minLength":1,"description":"One online store platform, e.g. shopify (case-insensitive)."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_backer_records","title":"Investor records (firms and angels)","description":"Investors Rewalto holds, one record per investor: venture funds, accelerators, incubators, family offices, corporate venture arms, private equity, angel networks and individual angels (investorKind), with type, headquarters, the geographies, stages and sectors they state, cheque size, thesis, website, LinkedIn and public email. Most recently added first; optionally a name fragment, kind, type, sector, stage or India focus. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"description":"Name contains this text (case-insensitive), 2 to 100 characters."},"kind":{"type":"string","minLength":1,"description":"firm or individual."},"type":{"type":"string","minLength":1,"description":"An investor type, e.g. vc_fund, accelerator, angel_network, angel."},"sector":{"type":"string","minLength":1,"description":"A sector the investor states, whole (case-insensitive)."},"stage":{"type":"string","minLength":1,"description":"A stage the investor states, whole (case-insensitive), e.g. Seed."},"india":{"type":"string","minLength":1,"description":"true for investors that state India."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_storefront_products","title":"Storefront catalogue and prices","description":"Product variants on D2C stores' own catalogues as Rewalto last read them: name, variant, brand, SKU, barcode, price and struck-through price in minor units (paise for INR), in stock or not, tags, image addresses, first and last seen. Filter by one store (host), a name search (q), a brand or a barcode; sku needs host. Charged per variant at the listings rate. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","minLength":1,"description":"One store, by host name, e.g. www.mamaearth.in."},"q":{"type":"string","minLength":1,"description":"Product name contains this text (3 to 100 characters)."},"brand":{"type":"string","minLength":1,"description":"One brand (case-insensitive exact)."},"barcode":{"type":"string","minLength":1,"description":"One barcode (GTIN/EAN)."},"sku":{"type":"string","minLength":1,"description":"One SKU (exact; with host)."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_storefront_changes","title":"Storefront changes","description":"What D2C stores changed between reads: products launched or delisted, variant price changes (old and new price and struck-through price, minor units), promotions (struck-through price moved, price held) and stock changes. Newest first; optionally one store (host), one kind of change and an IST day range. Charged per change at the listings rate. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","minLength":1,"description":"One store, by host name, e.g. www.mamaearth.in."},"change":{"type":"string","minLength":1,"description":"launched, delisted, price_changed, promotion_changed or stock_changed."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_d2c_brands","title":"D2C brand directory","description":"Indian D2C brands in Rewalto's brand directory: store host, brand name, platform, categories, city and state, employees and size band, estimated monthly visits and sales with bands (estimates; sales in US cents), products sold, sales channels, technologies, public social pages, and the platform Rewalto detected when the store is in the storefront index. Brand level only, no personal contact data. Host order; optionally one store, one platform, a category, a state or a city. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","minLength":1,"description":"One store by host name, e.g. www.kent.co.in."},"platform":{"type":"string","minLength":1,"description":"One platform as the directory writes it, e.g. Shopify (case-insensitive)."},"category":{"type":"string","minLength":1,"description":"Text a category contains, e.g. Home & Garden (case-insensitive)."},"state":{"type":"string","minLength":1,"description":"One state, e.g. Karnataka."},"city":{"type":"string","minLength":1,"description":"One city, e.g. Bengaluru."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_brand_shelf","title":"Brand share of shelf by pin code","description":"For one retailer: each brand's distinct listings read at a pin code on an IST day against all distinct listings read there, as a share in basis points (shareBp, 10000 is the whole shelf). Rolled up daily from Rewalto's own readings from 25 Aug 2026. Newest day first; optionally one pin code, one brand and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"brand":{"type":"string","minLength":1,"description":"A brand (exact), as in the brand field."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_oos_rate","title":"Out-of-stock rate by brand and city","description":"For one retailer: for each brand and city on an IST day, the readings that stated stock and how many were out of stock (oosBp is null when none stated stock; Flipkart states none). The city is the pin code's city in the India Post directory, or national. Rolled up daily from Rewalto's own readings from 25 Aug 2026. Newest day first; optionally one city, one brand and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"city":{"type":"string","minLength":1,"description":"A city, as the India Post directory names it, or national."},"brand":{"type":"string","minLength":1,"description":"A brand (exact), as in the brand field."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_discounts","title":"Discount depth by brand and category","description":"For one retailer: for each brand and category on an IST day, the readings with a selling price and an MRP, how many were priced below MRP, and the average, median and deepest discount in basis points of MRP. Rolled up daily from Rewalto's own readings from 25 Aug 2026, so a festive season can be read day by day. Newest day first; optionally one brand, one category and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"brand":{"type":"string","minLength":1,"description":"A brand (exact), as in the brand field."},"category":{"type":"string","minLength":1,"description":"A category, as the retailer wrote it."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_delivery_eta","title":"Delivery time by pin","description":"The delivery time quick-commerce apps stated at each pin code on each IST day: readings, the share that stated a time, least, median, 90th percentile and greatest minutes, with the source labelled (search, partner or sweep). Newest day first; optionally one retailer, pin code, source and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"retailer":{"type":"string","minLength":1,"description":"An app, e.g. blinkit, zepto, instamart."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"source":{"type":"string","minLength":1,"description":"search, partner or sweep."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_units","title":"Units left and units gone","description":"For one retailer: each product's units per pin code and IST day: units left at the last reading, first, fewest and most, and units gone between readings (a lower bound on units sold; rises count as restocks). unitsFrom: the app's counter (Blinkit, Zepto, Myntra, Nykaa) or Flipkart's \"Only N left\". Newest day first; optionally one product, one pin code and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_badges","title":"Product badges","description":"For one retailer: each product that showed a badge (bestseller, assured, only few left, deal tags) per pin code and IST day, with the distinct badges as written. Newest day first; optionally one product, one pin code and a day range. Spends credits at this dataset’s published rate, with no quote; `meta.credits` shows the rate, says what was charged and gives the receipt. Re-reading the same records within 7 days is free. With too few credits the API refuses with `credits_exhausted`, returns no data and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code, or national."},"from":{"type":"string","minLength":1,"description":"First IST day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last IST day, YYYY-MM-DD."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"create_quote","title":"Quote a run","description":"Price a recipe run before anything runs: units, extras, the rate version and the ceiling. Creating a quote spends nothing. Needs an API key; answers for the key’s own organisation only.","group":"quote","inputSchema":{"type":"object","additionalProperties":false,"required":["recipe","units"],"properties":{"recipe":{"type":"string","minLength":1,"description":"The recipe id, from the catalogue."},"units":{"type":"integer","minimum":1,"description":"How many of the recipe's units."},"extras":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["key"],"properties":{"key":{"type":"string","minLength":1},"multiplier":{"type":"number","exclusiveMinimum":0}}},"description":"Extras by key, from the entry’s rates."},"cadence":{"type":"string","enum":["daily","weekly","monthly"]}}},"effect":"creates","cost":"free","access":"signed_in","scope":"tools:run"},{"name":"get_quote","title":"Read a quote","description":"One quote of the key’s organisation: its total, rate version, status and expiry. Free. Needs an API key; answers for the key’s own organisation only.","group":"quote","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The quote id."}}},"effect":"read","cost":"free","access":"signed_in","scope":"tools:run"},{"name":"fresh_read_quote","title":"Quote a fresh read","description":"Price reading a recipe fresh now, at one or more pin codes: what the recipe’s collector would read for the query at each pin, one job per pin. Creating the quote spends nothing and runs nothing. Show the user the quote’s `ceiling` (the most it can cost, in credits) and ask them to approve it; only then call approve_quote with that ceiling. Once approved, the quote id is the run id for get_run and get_run_rows. A recipe no collector runs on demand is refused (unknown_capability). Needs an API key; answers for the key’s own organisation only.","group":"quote","inputSchema":{"type":"object","additionalProperties":false,"required":["recipe","query","pincodes"],"properties":{"recipe":{"type":"string","minLength":1,"description":"The recipe id, from the catalogue."},"query":{"type":"string","minLength":1,"maxLength":200,"description":"A search term, or a product reference for a recipe that reads one product."},"pincodes":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","pattern":"^([1-9][0-9]{5}|national)$"},"description":"Pin codes to read at (one job each); `national` for a recipe not tied to a place."},"rowsPerPin":{"type":"integer","minimum":1,"maximum":1000,"description":"The most rows wanted at each pin (default 50); sets the quote's units."}}},"effect":"creates","cost":"free","access":"signed_in","scope":"tools:run"},{"name":"approve_quote","title":"Approve a quote","description":"Approve one open quote: this is the user’s consent to spend up to its ceiling. Only call it after the user has seen the quote’s ceiling (the most it can cost, in credits) and explicitly said yes; pass that number as confirmedCeiling. The API refuses (cost_changed) if it is not exactly the quote's ceiling, and nothing is held. For a fresh read, approving starts the run: follow it with get_run. Needs an API key; answers for the key’s own organisation only.","group":"quote","inputSchema":{"type":"object","additionalProperties":false,"required":["id","confirmedCeiling"],"properties":{"id":{"type":"string","minLength":1,"description":"The quote id."},"confirmedCeiling":{"type":"integer","minimum":0,"description":"The ceiling, in credits, that the user was shown and agreed to."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"tools:run"},{"name":"list_runs","title":"List fresh reads","description":"The organisation’s fresh-read runs, newest first, a page at a time (pass page.nextCursor back as cursor): each run’s recipe, query, pins, status, rows delivered and credits charged. Listing costs nothing; a run whose pins have all finished is settled on its first read, as with get_run. Follow one with get_run or get_run_rows. Needs an API key; answers for the key’s own organisation only.","group":"quote","inputSchema":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"Runs per page, 1 to 100 (20)."},"cursor":{"type":"string","minLength":1,"description":"page.nextCursor from the previous page."},"since":{"type":"string","minLength":1,"description":"Only runs approved at or after this moment (ISO 8601)."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"tools:run"},{"name":"get_run","title":"Follow a fresh read","description":"One fresh-read run (its id is the approved quote’s id): its status, each pin’s progress, the rows delivered and, once every pin has finished, the credits charged: for the rows delivered, never above the approved ceiling, nothing when nothing was delivered. Reading it costs nothing; the first read after the run finishes settles the charge the user already approved. Read the rows with get_run_rows. Needs an API key; answers for the key’s own organisation only.","group":"quote","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The run id (the approved quote’s id)."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"tools:run"},{"name":"get_run_rows","title":"Read a fresh read’s rows","description":"The rows a fresh-read run delivered, pin by pin, a page at a time (pass nextCursor back as cursor). Free. Needs an API key; answers for the key’s own organisation only.","group":"quote","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The run id."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Rows per page (100)."},"cursor":{"type":"string","description":"nextCursor from the previous page."}}},"effect":"read","cost":"free","access":"signed_in","scope":"tools:run"},{"name":"list_watches","title":"Saved searches and watches","description":"The organisation’s saved searches and watches, newest first: each one’s state (draft, active, paused, cancelled), cost ceilings, next refresh and last refresh with what changed. Free. Needs an API key; answers for the key’s own organisation only.","group":"watch","inputSchema":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."},"kind":{"type":"string","enum":["search","watch"],"description":"Only searches or only watches."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"get_watch","title":"A saved search or watch","description":"One saved search or watch: its targets, frequency, caps, state, cost and its last refresh with the change summary. For a page \"watch:<id>\", call this first. Free. Needs an API key; answers for the key’s own organisation only.","group":"watch","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The saved search id."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"list_watch_runs","title":"A watch’s refreshes","description":"One saved search’s refreshes, newest first: each one’s state (or why it was skipped), what it charged and what changed since the one before. Use it to explain a watch's last check. Free. Needs an API key; answers for the key’s own organisation only.","group":"watch","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The saved search id."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"create_watch","title":"Draft a watch","description":"Saves a watch (kind watch, with a frequency) or a saved search (kind search, none) as a DRAFT and estimates its cost. It spends nothing and reads nothing: the user activates it, confirming its cost ceilings once, on the watch's page. Needs an API key; answers for the key’s own organisation only.","group":"watch","inputSchema":{"type":"object","additionalProperties":false,"required":["name","targets","spendingLimit"],"properties":{"kind":{"type":"string","enum":["search","watch"],"description":"watch (refreshed on a schedule, the default) or search (refreshed by hand)."},"name":{"type":"string","minLength":1,"maxLength":200,"description":"A name the user will recognise."},"targets":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["q"],"properties":{"q":{"type":"string","minLength":1,"maxLength":200,"description":"Product words, as in search_listings."},"brand":{"type":"string","minLength":1,"description":"Only this exact brand."},"retailer":{"type":"string","minLength":1,"description":"Only this retailer (list_retailers)."},"pincode":{"type":"string","pattern":"^[1-9][0-9]{5}$","description":"Only listings read at this six-digit pin in the last 30 days."},"location":{"type":"string","description":"A location id from list_location_cities or list_location_stores (a pin, city, area or dark store). Never with pincode; more than one pin needs confirmPins."},"confirmPins":{"type":"string","pattern":"^[1-9][0-9]{0,2}$","description":"The number of pins get_location_filter showed for the location: consent to read them all."}}},"description":"1 to 10 things to look up."},"maxResults":{"type":"integer","minimum":1,"maximum":100,"description":"The most listings one refresh reads per target (default 50); bounds the cost ceiling."},"frequency":{"type":"object","additionalProperties":false,"required":["kind","time"],"properties":{"kind":{"type":"string","enum":["daily","weekly","monthly"]},"time":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"HH:MM, 24-hour, Asia/Kolkata."},"weekday":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"For weekly."},"dayOfMonth":{"type":"integer","minimum":1,"maximum":28,"description":"For monthly."}},"description":"How often a watch refreshes. A search (kind search) has none."},"spendingLimit":{"type":"object","additionalProperties":false,"required":["perRefreshCredits","perMonthCredits"],"properties":{"perRefreshCredits":{"type":"integer","minimum":1},"perMonthCredits":{"type":"integer","minimum":1}},"description":"The most credits one refresh, and all refreshes in an IST month, may charge, as the user chose them."},"notify":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["channel"],"properties":{"channel":{"type":"string","enum":["in_app","email","slack","telegram","webhook"]},"destinationId":{"type":"string","pattern":"^dst_[0-9a-f]{32}$","description":"For slack, telegram and webhook: a destination from list_notification_destinations."}}},"description":"Where the watch sends what changed (default in-app only)."},"idempotencyKey":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$","description":"Optional: your own unique key (8 to 128 letters, digits . _ : -). Sending it again returns the same record instead of a second one. One is made when left out."}}},"effect":"creates","cost":"free","access":"signed_in","scope":"data:read"},{"name":"update_watch","title":"Change a watch","description":"Changes a saved search or watch. Changing its targets, rows per target, frequency or caps returns an active one to draft (the user confirms the new cost on its page); a name or notify change does not. Spends nothing. Needs an API key; answers for the key’s own organisation only.","group":"watch","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The saved search id."},"name":{"type":"string","minLength":1,"maxLength":200,"description":"A name the user will recognise."},"targets":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["q"],"properties":{"q":{"type":"string","minLength":1,"maxLength":200,"description":"Product words, as in search_listings."},"brand":{"type":"string","minLength":1,"description":"Only this exact brand."},"retailer":{"type":"string","minLength":1,"description":"Only this retailer (list_retailers)."},"pincode":{"type":"string","pattern":"^[1-9][0-9]{5}$","description":"Only listings read at this six-digit pin in the last 30 days."},"location":{"type":"string","description":"A location id from list_location_cities or list_location_stores (a pin, city, area or dark store). Never with pincode; more than one pin needs confirmPins."},"confirmPins":{"type":"string","pattern":"^[1-9][0-9]{0,2}$","description":"The number of pins get_location_filter showed for the location: consent to read them all."}}},"description":"1 to 10 things to look up."},"maxResults":{"type":"integer","minimum":1,"maximum":100,"description":"The most listings one refresh reads per target (default 50); bounds the cost ceiling."},"frequency":{"type":"object","additionalProperties":false,"required":["kind","time"],"properties":{"kind":{"type":"string","enum":["daily","weekly","monthly"]},"time":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"HH:MM, 24-hour, Asia/Kolkata."},"weekday":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"For weekly."},"dayOfMonth":{"type":"integer","minimum":1,"maximum":28,"description":"For monthly."}},"description":"How often a watch refreshes. A search (kind search) has none."},"spendingLimit":{"type":"object","additionalProperties":false,"required":["perRefreshCredits","perMonthCredits"],"properties":{"perRefreshCredits":{"type":"integer","minimum":1},"perMonthCredits":{"type":"integer","minimum":1}},"description":"The most credits one refresh, and all refreshes in an IST month, may charge, as the user chose them."},"notify":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["channel"],"properties":{"channel":{"type":"string","enum":["in_app","email","slack","telegram","webhook"]},"destinationId":{"type":"string","pattern":"^dst_[0-9a-f]{32}$","description":"For slack, telegram and webhook: a destination from list_notification_destinations."}}},"description":"Where the watch sends what changed (default in-app only)."}}},"effect":"creates","cost":"free","access":"signed_in","scope":"data:read"},{"name":"refresh_watch","title":"Refresh a watch now","description":"Refreshes one ACTIVE saved search or watch now: reads each target and is charged like a listings read, never above its per-refresh cap or what is left of its monthly cap (rows are cut to fit). A draft or paused one is recorded as skipped and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"watch","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The saved search id."},"idempotencyKey":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$","description":"Optional: your own unique key (8 to 128 letters, digits . _ : -). Sending it again returns the same record instead of a second one. One is made when left out."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"tools:run"},{"name":"list_reports","title":"Reports","description":"The organisation’s report editions, newest first: what each covers, its files and until when it can be downloaded. Free. Needs a signed-in dashboard session (admin and staff only for now); an API key is refused with forbidden.","group":"account","inputSchema":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."},"includeSuperseded":{"type":"string","enum":["true","false"],"description":"true also lists editions a corrected one replaced."}}},"effect":"read","cost":"free","access":"dashboard_session","scope":null},{"name":"get_report","title":"A report","description":"One report edition with its files. For a page \"report:<id>\", call this first. Free. Needs a signed-in dashboard session (admin and staff only for now); an API key is refused with forbidden.","group":"account","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The report edition id."}}},"effect":"read","cost":"free","access":"dashboard_session","scope":null},{"name":"count_series","title":"Count a price series","description":"Before get_series: the days, gap days, points with readings and readings a series read of this scope would deliver. Free: no prices, nothing charged. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"location":{"type":"string","minLength":1,"description":"A location id (list_location_cities, list_location_stores); never with pincode."},"confirmPins":{"type":"string","minLength":1,"description":"The pin count get_location_filter showed: consent to a multi-pin read."},"brand":{"type":"string","minLength":1,"description":"A brand name."},"productId":{"type":"string","minLength":1,"description":"A Rewalto product id."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id (with retailer)."},"from":{"type":"string","minLength":1,"description":"First day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last day, YYYY-MM-DD."},"groupBy":{"type":"string","minLength":1,"description":"none, retailer, pincode, brand or product (default none)."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"get_series","title":"Daily price and stock series","description":"Daily series for one product, brand, retailer or location, for charts: lowest, middle and highest price, stock readings in, out and unknown, and search position. A day with no reading is a gap, never filled. Charged at the published history rate per day with readings; gaps cost nothing; re-reading identical data within 7 days is free. Count it first with count_series. With too few credits the API refuses with `credits_exhausted` and charges nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"location":{"type":"string","minLength":1,"description":"A location id (list_location_cities, list_location_stores); never with pincode."},"confirmPins":{"type":"string","minLength":1,"description":"The pin count get_location_filter showed: consent to a multi-pin read."},"brand":{"type":"string","minLength":1,"description":"A brand name."},"productId":{"type":"string","minLength":1,"description":"A Rewalto product id."},"retailerSku":{"type":"string","minLength":1,"description":"The retailer's own product id (with retailer)."},"from":{"type":"string","minLength":1,"description":"First day, YYYY-MM-DD."},"to":{"type":"string","minLength":1,"description":"Last day, YYYY-MM-DD."},"groupBy":{"type":"string","minLength":1,"description":"none, retailer, pincode, brand or product (default none)."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"discover_listings","title":"Preview matching listings","description":"The preview before a paid fetch: up to 25 matching listings with their newest kept price, MRP and stock, exact match counts by retailer and brand, and what fetching every match would cost. Each organisation has free previews per IST day (`allowance`); past them a preview is charged at the listings rate for the rows shown, like search_listings, and `meta.credits` says what it cost. Nothing found costs nothing. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["q"],"properties":{"q":{"type":"string","minLength":1,"maxLength":200,"description":"The words: product name, brand or retailer product id."},"retailer":{"type":"string","minLength":1,"description":"A retailer key, from list_retailers."},"brand":{"type":"string","minLength":1,"description":"Exact brand text."},"pincode":{"type":"string","minLength":1,"description":"A six-digit pin code."},"location":{"type":"string","minLength":1,"description":"A location id; never with pincode."},"confirmPins":{"type":"string","minLength":1,"description":"The pin count get_location_filter showed."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (up to 25)."}}},"effect":"charges","cost":"credits","access":"signed_in","scope":"data:read"},{"name":"list_location_cities","title":"Cities","description":"Cities by the start of their name, each with a stable location id, its pin codes, kept coverage (pins read in the last 30 days) and, with a retailer, how many of its pins a new collection could serve. Free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"properties":{"q":{"type":"string","minLength":1,"description":"The start of a city name."},"market":{"type":"string","minLength":1,"description":"Only this market."},"retailer":{"type":"string","minLength":1,"description":"Coverage for this retailer."},"coverage":{"type":"string","minLength":1,"description":"Only cities with this coverage."},"state":{"type":"string","minLength":1,"description":"Only this state."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"list_location_stores","title":"Dark stores in a city","description":"One quick-commerce retailer’s dark stores in a city as Rewalto’s sweeps found them: a stable location id, label, open or closed, first and last seen, the pin codes each serves and kept coverage there. Free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["retailer","city"],"properties":{"retailer":{"type":"string","minLength":1,"description":"A quick-commerce retailer key."},"city":{"type":"string","minLength":1,"description":"The city."},"state":{"type":"string","minLength":1,"description":"The state, when the city name is ambiguous."},"q":{"type":"string","minLength":1,"description":"Only stores whose label contains this."},"limit":{"type":"string","pattern":"^[0-9]{1,9}$","description":"At most this many rows (the API caps it)."},"cursor":{"type":"string","minLength":1,"description":"The `next` cursor from the previous page."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"get_location_filter","title":"What a place covers","description":"Resolves a location id (a pin, city, area or dark store) to its full list of pin codes, what is kept there per retailer, where a fresh collection could run, and exactly what a paid read of it would cover: its pin count is the confirmPins a multi-pin read needs. Free. Needs an API key; answers for the key’s own organisation only.","group":"data","inputSchema":{"type":"object","additionalProperties":false,"required":["location"],"properties":{"location":{"type":"string","minLength":1,"description":"A location id, from list_location_cities or list_location_stores."},"retailer":{"type":"string","minLength":1,"description":"Only this retailer."}}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"list_notification_destinations","title":"Alert destinations","description":"Where the organisation’s watch alerts can go: each email, Slack, Telegram or webhook destination with its id (for a watch's notify), status and last error. Free. Needs an API key; answers for the key’s own organisation only.","group":"alerts","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"effect":"read","cost":"free","access":"signed_in","scope":"data:read"},{"name":"create_notification_destination","title":"Add an alert destination","description":"Adds a place watch alerts can go. slack: an incoming webhook URL (https://hooks.slack.com/services/...). webhook: an https URL; the answer carries its signing secret once. telegram: no URL; the answer has the link to press Start with. email: no URL, the signed-in user’s own verified address (a session only). Free. Needs an API key; answers for the key’s own organisation only.","group":"alerts","inputSchema":{"type":"object","additionalProperties":false,"required":["channel"],"properties":{"channel":{"type":"string","enum":["email","slack","telegram","webhook"]},"label":{"type":"string","minLength":1,"maxLength":120,"description":"How it is shown, e.g. #pricing."},"url":{"type":"string","minLength":12,"maxLength":2000,"description":"For slack and webhook only."}}},"effect":"creates","cost":"free","access":"signed_in","scope":"data:read"},{"name":"test_notification_destination","title":"Send a test alert","description":"Sends a short test message to one destination and answers its new status (working, or failing with lastError). A Telegram chat not linked yet is linked first. Free. Needs an API key; answers for the key’s own organisation only.","group":"alerts","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"description":"The destination id, from list_notification_destinations."}}},"effect":"creates","cost":"free","access":"signed_in","scope":"data:read"},{"name":"refund_read","title":"Ask for a charge back","description":"Asks for a charge’s credits back by its receipt (a `read` or `receipt` entry of list_credit_usage). A charged read is refunded, e.g. when its answer never arrived, unless the same data was read again after; a run only when it failed. Asking again returns the same refund. A refusal is `refund_refused` with the reason. Needs an API key; answers for the key’s own organisation only.","group":"account","inputSchema":{"type":"object","additionalProperties":false,"required":["receiptId","reason"],"properties":{"receiptId":{"type":"string","pattern":"^rcp_[0-9a-f-]{36}$","description":"The receipt, as list_credit_usage shows it."},"reason":{"type":"string","minLength":1,"maxLength":500,"description":"Why, in a sentence."}}},"effect":"creates","cost":"free","access":"signed_in","scope":"data:read"},{"name":"create_data_request","title":"Ask for data Rewalto does not hold","description":"Records a request for data Rewalto does not offer yet: a catalogue search that found nothing, or a product link that is not held (send what found nothing as `query`). Staff count requests as demand for new datasets. No contact details in the text. Free. Needs an API key; answers for the key’s own organisation only.","group":"catalogue","inputSchema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","minLength":3,"maxLength":1000,"description":"What data is missing, in the user’s words."},"query":{"type":"string","minLength":1,"maxLength":2000,"description":"What found nothing: the search, or the product link or id not held."},"surface":{"type":"string","enum":["api","cli","mcp"],"description":"Where it was asked (default mcp)."}}},"effect":"creates","cost":"free","access":"signed_in","scope":null}],"meta":{"credits":{"charged":0,"units":0,"freeReread":false,"rate":null}}}