Search

Stateless, geo-first search for products or stores near a location. Returns a paginated, sorted list synchronously — ideal for building your own search UI. For a conversational, agent-driven experience, see Conversations.

Requires an API key and a location. See Base URL & authentication.

Location is compulsory

Every search is anchored to a center point and radius — results are drawn only from that local area. Provide the center as coordinates or a city:

FieldTypeDescription
lat, lngnumberCenter coordinates. Take precedence over city.
citystringA city name, geocoded to a center (optionally scoped by country).
radiusKmnumberSearch radius in km (0.1–500). Default 10.
countrystringRestrict to sellers that serve this country (name or ISO code).

A request with no resolvable location returns 400.

GET/v1/search/products
GET/v1/search/stores

Query parameters

FieldTypeDescription
qstringFree-text query. Matched by multilingual relevance when embeddings are enabled, else lightweight text matching.
categorystringRestrict to a product/store category.
sortstringstores only — relevance, popular, recent, or top_rated. Defaults to popular (or relevance with q).
verifiedbooleanstores only — true returns only stores whose seller is Plugie-verified.
currencystringproducts only — ISO-4217 currency for resolved prices.
page, pageSizenumberPagination. pageSize 1–50 (default 20).

Example

curl
curl "https://api.plugie.ai/v1/search/products?q=office%20chair&city=Amsterdam&radiusKm=10&page=1" \
  -H "Authorization: Bearer plg_your_api_key"

Response

A page of local results in data, a capped remote tier (stores/ products that reach the buyer regardless of distance — ship nationwide or serve online, shown on page 1), and a meta object with pagination links.

FieldTypeDescription
dataarrayLocal results, nearest/most-relevant first. Each item carries a `distanceKm`.
remotearrayNon-local items that still reach the buyer (`remote: true`, `distanceKm: null`). Page 1 only.
meta.page / pageSize / hasMorePagination state.
meta.center / radiusKm / locatedByThe resolved center, radius, and how the location was determined (coords | city | country).
meta.linksobjectself, next, prev — ready-made URLs for the same search on adjacent pages (next/prev are null at the ends).
json
{
  "data": [
    {
      "id": "665f…",
      "title": "Aero Ergonomic Office Chair — Black",
      "price": { "amount": 18900, "currency": "EUR" },
      "image": "https://cdn.plugie.ai/…",
      "category": "office chair",
      "ratingAvg": 4.6, "ratingCount": 12,
      "distanceKm": 2.4,
      "remote": false,
      "store": { "id": "660a…", "slug": "techworld", "name": "TechWorld" }
    }
  ],
  "remote": [],
  "meta": {
    "page": 1, "pageSize": 20, "hasMore": false,
    "center": [4.9041, 52.3676], "radiusKm": 10, "locatedBy": "city",
    "links": { "self": "…?page=1", "next": null, "prev": null }
  }
}

/v1/search/stores returns store-first items: the store's own identity is top-level (only published stores are listed), and the seller behind it is nested under seller.

json
{
  "data": [
    {
      "id": "660a…",
      "slug": "techworld",
      "name": "TechWorld",
      "description": "Ergonomic office furniture in Amsterdam.",
      "logoUrl": "https://cdn.plugie.ai/…",
      "coverUrl": "https://cdn.plugie.ai/…",
      "categories": ["office chair", "desk"],
      "distanceKm": 2.4,
      "remote": false,
      "ratingAvg": 4.6, "ratingCount": 12,
      "salesCount": 87,
      "verified": true,
      "businessRegistered": true,
      "seller": { "id": "6612…", "name": "TechWorld B.V." }
    }
  ],
  "remote": [],
  "meta": { "page": 1, "pageSize": 20, "hasMore": false, "center": [4.9041, 52.3676], "radiusKm": 10, "locatedBy": "city", "links": { "self": "…?page=1", "next": null, "prev": null } }
}

Notes