Skip to main content
Glama
649,985 tools. Updated 2026-10-09 15:39

"eBay" matching MCP tools:

  • Publish owned copies from one workspace as live eBay listings, priced by a stated rule. Pass itemIds to publish one exact card. ALWAYS call it once with dryRun true and show the person the counts and the preflight before calling it again with dryRun false, because a live run creates real listings a real buyer can buy. Pricing anchors on market price, never on what the seller paid: multiplier 0.96 lists at 96% of market, and floorUsd only ever raises a price. A live run returns a queued jobId, or the reason nothing published. A queued job has listed nothing yet, so call spellbook_ebay_job_status with that jobId before telling the person any card is live.
    Connector
    Destructive
    No auth
  • Get a one-click link the seller opens to connect their eBay account to SpellBook Finance. Call spellbook_ebay_connection_status first. The link is signed for this customer and expires, so fetch a fresh one when you hand it over. Give them the link and tell them eBay will ask them to sign in and approve the connection. Once they finish, call spellbook_ebay_connection_status again; the agent never needs to open a SpellBook browser.
    ConnectorNo auth
  • Make the eBay DRAFT offers of up to 25 products LIVE and buyer-visible — a real publication on the seller's account. The item and offer are refreshed from the current product first, so a price, title, photo or characteristic fixed after the draft was made is published too. Pass only products whose nextAction from inspect_ebay_listings is publish_draft. Returns done, failed (with reasons) and notAttempted. Never tell the user a listing is live unless it is counted in done. Refused until the owner switches on AI publishing. The result echoes the workspace.
    Connector
    Destructive
    No auth
  • Reset connector auth state for the current user. Use when tokens are stale, missing scopes, tied to the wrong account/workspace, or repeatedly failing auth. For credential-based connectors, this clears the saved credentials so the user can re-enter them. Input: connector_id (required). Supported values: google_workspace, microsoft, dropbox, shopify, shopline, quickbooks, hubspot, slack, ebay, facebook_marketing, tiktok, klaviyo, calendly, activecampaign, odoo, constantcontact, airtable, gohighlevel, monday, semrush, ahrefs, posthog, stripe, gunbroker.
    Connector
    Destructive
    No auth
  • Findet Stromspeicher zum guenstigsten aktuellen Preis in Deutschland (EUR) ueber Amazon, eBay und AliExpress — Preisvergleich wospeicher.de. Nutze dieses Tool, wenn ein Nutzer nach Preis, Angebot, "guenstig", "wo kaufen" oder einem konkreten Stromspeicher fragt. Durchsucht den vollen Katalog (mehrere hundert Produkte), filterbar per Suchbegriff, Marke und Preisspanne. Liefert je Produkt: Titel, Bestpreis, Marke, Bild, 30-Tage-Preistrend (priceStats.isLowest30d = aktuell guenstigster Stand), domain-spezifische Attribute (attributes, z.B. Leistung/Speicher/Farbe), einen direkten Kauf-Link (url) und eine zitierfaehige Produktseite (detailUrl). Die Antwort enthaelt zusaetzlich facets (verfuegbare Filterwerte) zum Verfeinern. Read-only, Kauf beim verlinkten Haendler (Affiliate, Preis unveraendert). Finds the cheapest current price in Germany for Stromspeicher across Amazon, eBay and AliExpress; returns best price, price trend, filter attributes and a direct link.
    ConnectorNo auth
  • GRADED SLAB asking prices for one card — PSA/BGS/CGC medians by grade with listing counts, low/high, an as-of date per grade and the explicit price_basis (these are eBay ASKS, not sold prices; asks are a ceiling). FREE, refreshed daily by the eBay enrichment, merkle-committed on GradedPriceOracle. The LIVE value layer while the USD raw-card panel is frozen — and the basis the graded- slab loan terms are built on. product_id = TCGplayer id from search. Use this when: "what does a PSA 10 of this go for?", "raw vs graded premium?", or before loan_terms_preview / the free /api/v1/loan-terms quote.
    ConnectorNo auth

Matching MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that lets an LLM search and inspect eBay listings through the official Browse API.
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for eBay buyer-side workflows enabling search, watch, bid, buy, and management of MyeBay via a hybrid REST and Trading API stack.
    15
    1
    Apache 2.0

Matching MCP Connectors

  • eBay MCP — Browse + Taxonomy APIs via client_credentials OAuth

  • Real eBay sold listings: 3 years of price history, real accepted Best Offer prices, 8 marketplaces.

  • Get a link where the seller uploads their own phone photo of one inventory copy, so the next eBay listing shows that photo in place of catalog art. Use it when the seller wants buyers to see the real card, or when catalog art is wrong or missing. Take itemId from spellbook_inventory_items_query or spellbook_inventory_holdings. Give the seller the returned url and tell them to open it on their phone, then take or pick a photo of the card front. No photo passes through you. After they say it is saved, call spellbook_ebay_publish for that copy.
    ConnectorNo auth
  • Discover the channel-defined listing fields you can set — TikTok product attributes, eBay item specifics, WooCommerce product attributes — and what is currently set. READ-ONLY. Call this BEFORE set_listing_attributes or set_channel_settings: the field names and their allowed values are defined by the channel, so guessing them gets the value dropped. Pass `product_uuid` for one listing, or `integration_uuid` alone for the shop-wide settings (compliance answers, the shipping template, and a fallback size chart). BRAND and the per-listing SIZE CHART are per-PRODUCT, not shop-wide — both describe the blank, so a shop selling two blanks needs two values, and a shop-wide size chart would replace the accurate per-garment one on every other listing at once. Ask for them with `product_uuid`. Each field carries `value_type`, `cardinality` (single vs multi), `free_text` (whether a value outside the list is accepted) and `requirement`. Those are separate on purpose: most fields are enumerated AND accept free text, so neither flag alone tells you what is legal. `requirement: "conditional"` means the field only becomes required once `required_when` holds — typically after you answer a related question one particular way. `values` is what is LIVE ON THE CHANNEL, which is not the same as what was last written from here: platform auto-fills and merchant edits made directly in the channel's own admin show up here too. That drift is usually the most useful thing in the response. `unset_required` lists fields that are required and empty. Those are NOT filled in for you, deliberately — several are legal attestations. Left unset, the channel picks its own default or grades the listing down, so they are worth resolving with the merchant. ⚠️ CHECK `resolved_for.resolution` when it is present. `explicit_override` means the merchant chose the category. `keyword_match` means it was GUESSED from the product name, and a wrong guess means these fields belong to a different kind of product entirely — setting attributes against it is worse than setting none. Treat keyword_match as unverified and say so. Big value lists are omitted by default and reported as `allowed_values_count`; pass `include_values` to expand them (one real field carries 647 values). A field whose `value_type` is `object` takes a STRUCTURE, not a string, and publishes its shape in `channel_ref.object_schema`. Build the value from that schema — `size_chart_measurements` is one, and import_size_measurements will fill it for you from the fulfillment provider. A channel with no listing attributes answers `supported: false` with an empty `fields` — a real answer, not an error. [#b71f15]
    ConnectorOAuth
  • Add or update characteristics (name, value, unit) on ONE product without removing the ones not named. Names match case-insensitively; a new name is appended. For eBay, use the item-specific names exactly as inspect_ebay_listings reported them (details.aspects), in the eBay site's own language — 'Marca' on ebay.it, not 'Brand'. Never invent a value: ask the user. Saves through the same product-card operation as the CRM form, with a version check (on CONFLICT re-read and retry). On a product that belongs to a model: when it is the model's only article, the characteristics are the model's and change for the model; when the model has other articles, a value set here applies to this article only — a characteristic shared by every article is changed on the model card. Idempotent. The result echoes the workspace.
    Connector
    Destructive
    No auth
  • Create eBay DRAFT offers for up to 25 products — real writes to the seller's eBay account, but nothing is buyer-visible until publish_ebay_drafts. Run inspect_ebay_listings first and pass only products whose nextAction is create_draft and ready is true. Each product is attempted on its own: returns created, failed (each with a reason to look up in remediation.ebayPlaybook) and notAttempted (not reached in the time budget — call again with those ids). Refused until the owner switches on AI publishing, and while draft creation is not armed on the eBay connection. Not idempotent: a product that already has a draft fails with alreadyListed. The result echoes the workspace.
    Connector
    Destructive
    No auth
  • Set — or clear — the price ONE sales channel gets for ONE product, instead of the product's ordinary price in that currency. Send price as a decimal string to set it (with an optional compareAtPrice, the old price, higher than price) or price null to remove the override so the channel gets the ordinary price again. Per platform and currency: Prom, Rozetka, eBay, Amazon, Shopify, WooCommerce, OLX or Google Merchant. Send only an amount the person stated. The new price reaches the channel the same way a price edit does — only where the owner armed price writes. This is not the price-list row for a currency (upsert_product_prices). Idempotent; clearing a missing override is not an error. Returns { changed }. Read get_product_pricing first. Echoes the workspace.
    Connector
    Destructive
    No auth
  • Check whether this signed-in customer's eBay seller account is connected to SpellBook Finance. Call this before requesting a connect link and call it again after the seller approves eBay consent. It returns the stored account identity and token state plus current eBay seller-registration and selling-limit facts. If connected is false and account is null, call spellbook_ebay_connect_link. If status is revoked, fetch a fresh connect link.
    ConnectorNo auth
  • Judge one piece of menswear before someone pays for it. Use when someone asks whether a piece of men's clothing or a pair of men's shoes is worth it ("is this worth it?", "is this a good deal?", "should I buy this?"), or pastes a men's clothing or shoe listing with a price, including Nordstrom Rack, outlet, eBay and Grailed finds. Give the maker, the category and the price, plus where it is sold and, if known, the compare-at price, fiber and build from the listing. Returns a verdict (Worth it, Worth it if the tag checks out, Only at a lower price, Skip it, Pay less, or Not enough to judge when the ledger does not grade the maker for that category and the listing gives no fiber or build that the ledger can score), the maker's grade, the fair price band for that kind of seller, what to check on the tag, cost per wear, and graded makers in the same category (same grade or better when the maker is graded). Limits: menswear only; prices are US dollars from the QuarterMaster ledger of 53 makers, checked September 2026, not live store prices; no stock, size or delivery checks; no orders.
    ConnectorNo auth
  • Add, update or REMOVE the price-list rows of ONE product — the price it sells at in another currency, for example EUR for an eBay site — keeping its other currencies and its own workspace-currency price. Send only an amount the user stated: never a converted or estimated price; to drop a currency send its code in remove. The product's own currency is refused; change that with update_product's price. A price for one channel only is set_product_channel_price; see all of a product's prices with get_product_pricing. Saves through the same product-card operation as the CRM form, with a version check (on CONFLICT re-read the product and retry), and the new price reaches connected channels like a manual edit. Idempotent. The result echoes the workspace.
    Connector
    Destructive
    No auth
  • Return a plain, structured explanation of one or more supported trading-card selling methods: who owns the listing, who fulfills, where it sells, the fee components that apply, and important caveats. Covers eBay (estimated), Pulltrader marketplace, Fulfilled by Pulltrader, branded storefront, in-person POS, and estimated competitor marketplaces (TCGplayer, Mana Pool, Misprint, Fanatics Collect, Goldin). Use this when a seller asks how a method works, what fees a platform charges, or how Pulltrader selling options differ. Do NOT use this to compute a specific payout (use compare_selling_costs) or the price needed for a target net (use calculate_required_sale_price), and do NOT use it to price cards.
    ConnectorNo auth
  • The trust picture for one specific listing, by URL (eBay/Craigslist/OfferUp/Swappa/Facebook/Reddit) or Macfax listing id: whether Macfax knows it, whether it still passes every quality gate, scam/junk/classified/auction flags, when a scan last verified it live, its ask against the configuration's typical asking band, the platform's own seller-reputation figures where the marketplace has them (seller_signals: eBay feedback, Swappa rating; null elsewhere), and whether a verified Macfax report is attached. Facts, not verdicts.
    ConnectorNo auth
  • Run a single Postgres SELECT against the user's data. The database automatically scopes results to the current user - do NOT add WHERE user_id clauses. For net worth, budget, or asset valuation use the dedicated tools instead. Provide a one-line `rationale` explaining the query. IMPORTANT - money units: columns the schema below marks as minor units (the marker reads roughly "[minor units - divide by 100]") are stored as INTEGER minor units - the real amount x 100, for ALL currencies including IDR with no decimal places (e.g. Rp 2,500,000 is stored as 250000000). Divide ONLY those marked columns by 100.0 in your SELECT projection to get real amounts, e.g. `SELECT SUM(amount) / 100.0 AS total`. Do NOT divide columns that are already in major units - in particular the `v_chat_transaction` view's `amount_major` and `signed_amount` are already real major-unit amounts, so use them directly (they are the easiest correct way to sum spend/income). Never multiply by 100. ### asset > purchase_price is the per-unit purchase price in purchase_currency > rows with deleted_at IS NOT NULL are soft-deleted; exclude them > for per-asset P&L questions the getAssets tool already returns cost basis, P&L, and P&L % in the user's base currency; prefer it over hand-rolled SQL - id: string - user_id: string - account_id: string (nullable) - type: string [enum: crypto | stock | real_estate | vehicle | commodity | bond | other | collectible] - symbol: string (nullable) - display_symbol: string (nullable) - quantity: string - unit: string (nullable) - purchase_price: number (nullable) [minor units - divide by 100] - purchase_currency: string (nullable) - valuation_mode: string [enum: auto | manual] - created_at: date - updated_at: date - deleted_at: date (nullable) ### asset_split - id: string - asset_id: string - effective_date: string - ratio_from: number - ratio_to: number - source: string [enum: manual | yahoo] - status: string [enum: pending | applied | dismissed] - cache_applied: boolean - created_at: date - updated_at: date ### asset_transaction > per-trade buy/sell record for an asset; join transaction on transaction_id for date, type (buy | sell), currency, and soft-delete status (exclude deleted_at IS NOT NULL) > price_per_unit is in the joined transaction's currency > an asset conversion (swap of one asset for another) appears as a paired sell + buy on the same date whose transactions have account_id IS NULL; they move no cash (v_chat_transaction reports them as neutral with signed_amount 0) - id: string - transaction_id: string - asset_id: string - quantity: string - price_per_unit: number [minor units - divide by 100] - created_at: date ### category - id: string - user_id: string - name: string - icon: string (nullable) - parent_id: string (nullable) - created_at: date - updated_at: date - deleted_at: date (nullable) ### collectible_acquisition > copies of a card added without a trade (with what was paid, not paid from an account): one row per time copies were added, dated acquired_on; join asset on asset_id (exclude soft-deleted assets) > price_per_unit is what one copy cost, in currency; both are null when the user did not say what they paid > a card's cost comes from these rows plus its buy trades in asset_transaction, never from asset.purchase_price; the getAssets tool already combines them into costBasis and P&L > copies from a booster box or packs opened together have opening_id set: the box's price is split over them by market value (opening_weight), so price_per_unit is their share - id: string - asset_id: string - quantity: number - price_per_unit: number (nullable) [minor units - divide by 100] - currency: string (nullable) - acquired_on: string - opening_id: string (nullable) - opening_weight: number (nullable) - share_fixed: boolean - created_at: date ### collectible_disposal > copies of a card that left the collection without a sale: reason 'removed' (taken out by the user) or 'traded' (given in a trade); join asset on asset_id (exclude soft-deleted assets) > they leave at their average cost, so they realise no profit or loss; a sale is a sell trade in asset_transaction instead - id: string - asset_id: string - quantity: number - disposed_on: string - reason: string - created_at: date ### collectible_holding > one row per trading card position: the asset (type = 'collectible') it belongs to, the exact print (variant_id) and how the card is held > join asset on asset_id for quantity and deleted_at (exclude soft-deleted assets); join collectible_item_cache on variant_id for the card's name, set, number and language > grading is 'raw' (then condition is nm | lp | mp | hp | dmg) or 'graded' (then grader is psa | bgs | cgc | sgc | tag | ace | ars | other and grade runs 1 to 10) > a card's value: when asset.valuation_mode = 'auto' it is the market price, the price row with type 'collectible' and symbol = asset.symbol (collectible_price_meta on the same symbol says how it was built); when 'manual' it is the user's own latest valuation row, or, when source_pin is set, the price of that one pinned source, written into valuation each time it changes > for value and P&L questions the getAssets tool (type 'collectible') already returns them in the user's base currency; prefer it - asset_id: string - variant_id: string - grading: string - condition: string (nullable) - grader: string (nullable) - grade: string (nullable) - grade_label: string (nullable) - source_pin: string (nullable) - notes: string (nullable) - created_at: date - updated_at: date ### collectible_item_cache > one row per card print (global, no user data): game (pokemon, the only game Hundo supports for now), language (en | ja | id ...), set_code, set_name, card_number, card_name > card_name is as printed (Japanese cards in Japanese); card_name_en holds the English name when there is one - variant_id: string - game: string - language: string - set_code: string - set_name: string - card_number: string - card_name: string - card_name_en: string (nullable) - finish: string - finish_label: string (nullable) - rarity: string (nullable) - image_url: string (nullable) - has_official_image: boolean - is_secret: boolean - status: string - synced_at: date ### collectible_price_meta > one row per card market price (global, no user data), keyed by symbol = asset.symbol for a card ('ctg:<variant_id>:<condition key>'); the price itself is in price (type 'collectible', same symbol), in the currency the source quotes > basis: market (one card market's recent sales price alone: TCGplayer in USD first, else Cardmarket in EUR), single_seller (1 shop or eBay seller), thin (the lower of 2), median (trimmed median of 3 or more); source_count: how many sources the price is built from; observed_on: the day the newest evidence was seen > stale = true or status <> 'priced' means the price is old: the source marked it stale, or no source prices the card any more and the last price is kept; estimate = true means a played copy priced from near mint times factor > sources is a JSON array of {seller, platform, kind ('ask' = a shop's or an eBay seller's asking price, 'sold' = a real sale), price, currency, observedOn, counted}; price there is in minor units - divide by 100; counted = false means the source is listed but the price is not built from it (a market's sale beats the shops' asks); a missing counted means true - symbol: string - variant_id: string - condition_key: string - status: string - basis: string (nullable) - source_count: number - observed_on: string (nullable) - stale: boolean - estimate: boolean - derived_from: string (nullable) - factor: number (nullable) - sources: json - computed_at: date (nullable) - synced_at: date - history_synced_at: date (nullable) ### counterparty - id: string - user_id: string - name: string - notes: string (nullable) - created_at: date - updated_at: date - deleted_at: date (nullable) ### envelope > this table represents what the user calls a 'budget' - the DB table is named `envelope` for historical reasons, but always say 'budget' in user-facing replies > budgets are buckets that group categories - a user mentioning a budget by name (e.g., 'dating', 'vacation') almost always means a row here, not a category > v_chat_transaction.envelope_name resolves the (transaction → budget) link for you; prefer that over joining envelope_category yourself - id: string - user_id: string - name: string - budgeted_amount: number [minor units - divide by 100] - currency: string - period: string [enum: weekly | monthly] - tracking_mode: string [enum: category | manual] - include_investments: boolean - category_id: string (nullable) - created_at: date - updated_at: date - deleted_at: date (nullable) ### envelope_category > junction table linking categories to budgets; v_chat_transaction.envelope_name already follows this path, so you rarely need to query envelope_category directly - id: string - envelope_id: string - category_id: string ### exchange_rate > stored one direction per pair (typically from_currency = USD); for the reverse direction, use 1/rate from the existing row rather than expecting an explicit inverse row > use the latest row per (from_currency, to_currency) pair (order by fetched_at DESC, limit 1) - id: string - from_currency: string - to_currency: string - rate: string - fetched_at: date - checked_at: date ### financial_account > balance_cache is the live balance in minor units > balance_cache = initial_balance + the sum of the account's transactions, so initial_balance is the balance before the first transaction, not always the balance the user typed when adding the account > rows with deleted_at IS NOT NULL are soft-deleted; exclude them - id: string - user_id: string - name: string - type: string [enum: checking | savings | credit_card | cash | investment | crypto | loan | mortgage | property | vehicle | receivable | payable] - currency: string - institution: string (nullable) - icon: string (nullable) - is_liability: boolean - initial_balance: number [minor units - divide by 100] - balance_cache: number [minor units - divide by 100] - credit_limit: number (nullable) [minor units - divide by 100] - is_active: boolean - is_virtual: boolean - counterparty_id: string (nullable) - created_at: date - updated_at: date - deleted_at: date (nullable) ### net_worth_snapshot - id: string - user_id: string - total_assets: number [minor units - divide by 100] - total_liabilities: number [minor units - divide by 100] - net_worth: number [minor units - divide by 100] - currency: string - breakdown_json: json (nullable) - snapshot_date: string - created_at: date ### price > cached market price per unit of the asset, keyed by (type, symbol); join asset on both columns > use the latest row per (type, symbol) (order by fetched_at DESC, limit 1) > for commodities the price is per troy ounce regardless of asset.unit; convert before comparing to per-unit purchase prices - id: string - type: string [enum: crypto | stock | real_estate | vehicle | commodity | bond | other | collectible] - symbol: string - price: number [minor units - divide by 100] - currency: string - fetched_at: date ### transaction > amount is always non-negative; direction lives in type > for spend/income totals, prefer the v_chat_transaction view > rows with deleted_at IS NOT NULL are soft-deleted; exclude them > in_opening_balance = true marks a payment the user logged as already inside the balance they typed when adding the account; it is real spending on its date, but it changed initial_balance, not balance_cache - id: string - user_id: string - account_id: string (nullable) - type: string [enum: income | expense | transfer | buy | sell] - amount: number [minor units - divide by 100] - currency: string - exchange_rate: string (nullable) - date: string - description: string (nullable) - category_id: string (nullable) - envelope_id: string (nullable) - notes: string (nullable) - receipt_image_url: string (nullable) - in_opening_balance: boolean - created_at: date - updated_at: date - deleted_at: date (nullable) ### valuation > one row per asset per day; latest row is the current value - id: string - asset_id: string - value: number [minor units - divide by 100] - currency: string - fetched_at: date ### v_chat_transaction (view) > Presentation view over transaction. Soft-deleted rows already excluded. > Prefer this over the raw transaction table for any spend/income question. - id: string - user_id: string - date: date - type: string [enum: income | expense | transfer | buy | sell] - description: string (nullable) - currency: string - amount_major: numeric (always >= 0; major units, e.g. dollars not cents) - signed_amount: numeric (negative for expense and buy; positive for income and sell; zero for transfer and for cashless asset-conversion legs) - direction: string [enum: outflow | inflow | neutral] - account_id: string (nullable; null on the cashless legs of an asset conversion, which move no cash) - category_id: string (nullable) - category_name: string (nullable, joined from category) - envelope_id: string (nullable; direct budget assignment, often null) - envelope_name: string (nullable; the user's budget label, resolved via direct envelope_id OR via the envelope_category junction on category_id - match this when the user names a budget like "Dating")
    ConnectorOAuth
  • Verify whether a seller listing matches the exact Japanese anime collectible, edition or variant. Uses canonical identity, JAN/model evidence and stored marketplace match signals to detect wrong-version and name-collision risk. WHEN TO USE: Use immediately before purchase when the agent has a seller listing and identity mismatch could cause a bad order. A listing URL or title can be supplied; otherwise the service returns the strongest currently observed matched listings. WHY PAY: Pay before purchase when a wrong edition, rerelease or similarly named item would make the transaction incorrect even if the price looks attractive. BUYER OUTCOME: A listing-to-canonical match verdict that reduces wrong-item purchases. Price: 0.01 USDC via x402. Selection triggers: same product, same edition, does this listing match, correct version, wrong version, listing match, edition match. Common agent queries: does this listing match the exact anime figure edition | verify this eBay listing is the correct Nendoroid | is this Yahoo listing the same Japanese collectible | check wrong version risk before I buy. Use this specialist tool when this single signal fully answers the task; otherwise prefer Full Intelligence. Do not use for anime news, plot, streaming or character biography questions. Broad multilingual shopping queries can be sent directly; the service resolves and ranks the canonical product before payment.
    ConnectorNo auth
  • Read one eBay bulk job by the jobId returned from spellbook_ebay_publish or spellbook_ebay_reprice. Both operations queue work, so call this before telling the person a listing was created or its ask changed. State planning, pending, uploading, processing or ingesting means the job is still running: call again after about a minute. State failed carries errorMessage, and each failures row carries a per-card reason: relay that reason to the person. A job with dryRun true is a reprice preview: it changed no eBay price, and totalItems counts the listings a live run would reprice. Returns state, counts, per-card items, failures and missingFields.
    ConnectorNo auth
  • Wardrobe Connect. Find clothes that match a description. For when the user describes a piece of clothing they want ("black pleated wide-leg trousers", "cream cable-knit jumper like the one I saved"). Natural requests are fine ("a navy midi wrap dress for a summer wedding under £60 in a size 12"): the occasion is kept out of the search and returned in `occasion`, and a price or size in the words is used when max_price or size is not passed. Returns eBay listings in the Clothing, Shoes and Accessories category, closest matches first and then cheapest first (from a best-match and a price-sorted search), plus search links for other shops and a Facebook Marketplace search phrase. Listings must match the colour and fabric named, the same kind of garment (by title and by eBay category, so socks never answer a search for trainers), and men's or women's if given; kids' items only when asked for. Adult, fetish and costume listings are never shown, repeat listings of the same item count once, and listings far below the typical price for the search (usually bait or junk) are left out.
    ConnectorNo auth
  • Find clothes that match a description. For when the user describes a piece of clothing they want ("black pleated wide-leg trousers", "cream cable-knit jumper like the one I saved"). Natural requests are fine ("a navy midi wrap dress for a summer wedding under £60 in a size 12"): the occasion is kept out of the search and returned in `occasion`, and a price or size in the words is used when max_price or size is not passed. Returns eBay listings in the Clothing, Shoes and Accessories category, closest matches first and then cheapest first (from a best-match and a price-sorted search), plus search links for other shops and a Facebook Marketplace search phrase. Listings must match the colour and fabric named, the same kind of garment (by title and by eBay category, so socks never answer a search for trainers), and men's or women's if given; kids' items only when asked for. Adult, fetish and costume listings are never shown, repeat listings of the same item count once, and listings far below the typical price for the search (usually bait or junk) are left out.
    ConnectorNo auth