Delupe External API

Authenticated product search, PML website search, reference data, and bulk update APIs.

Start here

Base URL: https://api.delupe.net

Interactive API

Open Swagger UI to try requests. Click Authorize and enter Bearer <access-token>.

Machine-readable schema

Download the OpenAPI schema as JSON.

Alternative reference

Open ReDoc for a compact, searchable reference.

Important: All API endpoints require a Bearer access token except login, token refresh, and documentation routes. Send JSON using Content-Type: application/json.

Authentication

1. Obtain tokens

POST/api/login
curl -X POST https://api.delupe.net/api/login \
  -H "Content-Type: application/json" \
  -d '{"username":"YOUR_USERNAME","password":"YOUR_PASSWORD"}'
{
  "refresh": "<refresh-token>",
  "access": "<access-token>",
  "Status": "Success"
}

Login is rate-limited. Never put credentials or tokens in URLs, logs, or source control.

2. Call an authenticated endpoint

curl "https://api.delupe.net/api/search/countries/getcountryList?country=UK" \
  -H "Authorization: Bearer <access-token>"

3. Refresh an access token

POST/api/token/refresh
curl -X POST https://api.delupe.net/api/token/refresh \
  -H "Content-Type: application/json" \
  -d '{"refresh":"<refresh-token>"}'

The refresh endpoint has no trailing slash. Refresh tokens rotate and old tokens are blacklisted.

Reference data

List countries

GET/api/search/countries/getcountryList

Returns all countries. Add either country=UK or countryId=235 to select one.

{
  "id": 235,
  "iso2": "UK",
  "iso3": "GBR",
  "name": "United Kingdom",
  "status": "A",
  "default_lang": "en",
  "currency": "GBP",
  "cc_tld": ".uk",
  "default_cpc": "0.60",
  "search_status": "A"
}

List merchants

GET/api/search/merchants/getmerchantList

country is required. Optional parameters: name, offset, and limit. The maximum result window is 10,000.

GET /api/search/merchants/getmerchantList?country=UK&name=Binocular&limit=100

Products

List products

GET/api/search/products/getProductList

country is required. Optional filters include:

ParameterDescription
merchantId, feedIdFilter by merchant or feed.
updatedAfterISO-8601 timestamp.
pmlCategoryIdNumeric category ID, or none.
adsPartnerG or B.
perPagePage size; maximum 5000.
paginationTokenOpaque token returned by the previous response.
curl "https://api.delupe.net/api/search/products/getProductList?country=UK&perPage=100" \
  -H "Authorization: Bearer <access-token>"

Each product keeps the existing basic response fields (name, id, priceAmount, and so on) exactly once. Additional MongoDB fields use their original names, while fields already represented by a basic alias are not repeated. Numeric values remain numeric where the basic contract expects numbers, and dates are ISO-8601 strings.

{
  "perPage": 100,
  "total_results": 100,
  "data": [
    {
      "additional_image_link": "",
      "ads_partner": "B",
      "base_measure": "",
      "classification_status": "New",
      "country_id": 235,
      "expiration_date_date": "2026-07-10T00:00:00+00:00",
      "is_adult_merchant": false,
      "language": "en",
      "latest_update_date": "2026-07-06T09:51:39.775+00:00",
      "link": "https://www.ebay.co.uk/itm/376385373318?var=645537687404",
      "material": "Vinyl",
      "measure": "",
      "mpn": "",
      "price_amount": "3.50",
      "price_search_float": 3.5,
      "prod_status": "Active",
      "rating": 1,
      "row_hash": "438520328",
      "sale_price": "",
      "shipping_cost": "0.00",
      "updated_at": "2026-07-01T10:22:34+00:00",
      "updated_at_date": "2026-07-01T00:00:00+00:00",
      "title": "Vinyl Decal / Sticker - FREAKY CATS - SARCASM - STILL NO",
      "name": "EBAY_GB (Home, Furniture & DIY) - Less Than 10",
      "id": "v1|376385373318|645537687404_38_181377_792361",
      "innerId": "v1|376385373318|645537687404",
      "brandName": "",
      "deepLink": "https://www.ebay.co.uk/itm/376385373318?var=645537687404",
      "imageLink": "https://i.ebayimg.com/images/g/VWoAAeSwCXRpu~XL/s-l1600.jpg",
      "salePrice": "0.0",
      "priceAmount": "3.5",
      "currency": "GBP",
      "merchantId": 181377,
      "partnerId": 38,
      "description": "Decal: A : 125 x 190 (mm), Decal Colour: Green",
      "isAdult": false,
      "color": "Multi Choice",
      "availability": "in stock",
      "shippingCost": "0.0",
      "gender": "",
      "ageGroup": "",
      "feedId": 792361,
      "offerHash": "1443193525",
      "gtin": "",
      "size": "Non-Standard",
      "category": null,
      "expiration_date": "2026-07-10T12:55:03+00:00",
      "updated_date": "2026-07-01T10:22:34+00:00"
    }
  ],
  "paginationToken": "<opaque-token-or-null>"
}

Get one product

GET/api/search/products/getProduct/{product_id}?country=UK

product_id is the Elasticsearch product document ID. The country query parameter selects the country index. The nested product object uses the same basic fields and non-duplicated MongoDB additions as the list endpoint.

PML website APIs

All PML endpoints require country. Pagination uses page (1-based) and limit (maximum 300).

GET/api/pml-website/product-search

Search products using filters such as q, merchantId, brandName, price, emissions, isAdult, and sort.

GET/api/pml-website/product-detail

Requires country and id. Returns the selected product and related products.

GET/api/pml-website/category-subcategory

Requires country and main_category. Returns products in the taxonomy branch.

Common filters: merchantId, feedId, partnerId, minPrice, maxPrice, minEmission, maxEmission, pmlCategoryId, adsPartner, brandName, availability, gtin, innerId, q, and sort.

Bulk operations

These operations are authenticated business APIs. Requests are limited to 5000 items per batch.

Bulk PML update

POST/api/products/pml/bulk-update
{
  "country": "UK",
  "products": [
    {"id":"product-id", "pml_category_id":123, "emission":4.2, "gtin":"0123456789012"}
  ]
}

Bulk GTIN master upsert

POST/api/gtin-master/bulk-insert
{
  "records": [
    {"gtin":"0123456789012", "pml_category_id":123, "emission":4.2}
  ]
}

The legacy products property is also accepted.

Operations and internal endpoints

System utilization

GET/api/stats/getSystemUtilization

Public monitoring endpoint. Returns CPU, memory, disk, system-stats status, Elasticsearch status, MongoDB status, and the active product search backend. MongoDB reports Not Configured when no MONGODB_URI is supplied. A degraded dependency returns 503 with status details.

PML synchronization preview

GET/api/sync-elasticsearch

Authenticated internal endpoint that returns the current synchronization preview record.

Common responses

StatusMeaning
200Request completed.
201Resource created, where applicable.
400Invalid query, body, or pagination value.
401Missing, expired, or invalid Bearer token.
404Country, product, or route was not found.
429Login rate limit exceeded.
500/502/503Server or upstream dependency failure.