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.
Content-Type: application/json.Authentication
1. Obtain tokens
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
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
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
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
country is required. Optional filters include:
| Parameter | Description |
|---|---|
merchantId, feedId | Filter by merchant or feed. |
updatedAfter | ISO-8601 timestamp. |
pmlCategoryId | Numeric category ID, or none. |
adsPartner | G or B. |
perPage | Page size; maximum 5000. |
paginationToken | Opaque 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
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).
Search products using filters such as q, merchantId, brandName, price, emissions, isAdult, and sort.
Requires country and id. Returns the selected product and related products.
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
{
"country": "UK",
"products": [
{"id":"product-id", "pml_category_id":123, "emission":4.2, "gtin":"0123456789012"}
]
}
Bulk GTIN master upsert
{
"records": [
{"gtin":"0123456789012", "pml_category_id":123, "emission":4.2}
]
}
The legacy products property is also accepted.
Operations and internal endpoints
System utilization
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
Authenticated internal endpoint that returns the current synchronization preview record.
Common responses
| Status | Meaning |
|---|---|
200 | Request completed. |
201 | Resource created, where applicable. |
400 | Invalid query, body, or pagination value. |
401 | Missing, expired, or invalid Bearer token. |
404 | Country, product, or route was not found. |
429 | Login rate limit exceeded. |
500/502/503 | Server or upstream dependency failure. |