Каталог dropX у вашому сайті, боті та CRM
Ваш сервер забирає товари з вашими цінами та залишками за розмірами, а потім раз на кілька хвилин отримує лише те, що змінилося.
{
"sku": "SKU-1024",
"name": "Adidas Samba OG",
"cost_price": "2300.00",
"price": "2990.00",
"in_stock": true,
"sizes": [
{ "size": "40", "stock": 8, "price": "2990.00" },
{ "size": "46", "stock": 1, "price": "3120.00" }
],
"images": [{ "url": "…/00_main.jpg", "is_main": true }, …],
"sync_version": 48211
}- товарів за запит
- 200
- товарів за запит
- запитів на хвилину
- 60
- запитів на хвилину
- назви та описи
- RU · UK
- назви та описи
- хвилин між оновленнями
- 5–15
- хвилин між оновленнями
Що віддає API
Назв, контактів і цін окремих постачальників в API немає: усе зведено в одну картку товару.
Лише зміни
Після першого вивантаження API надсилає лише товари, у яких змінилася ціна, залишки чи розміри, і ті, що зняли з продажу.
Ваші ціни
Закупівельна ціна приходить завжди. Передайте свою націнку, і API порахує роздрібну та закреслену ціну, зокрема для кожного розміру.
Залишки за розмірами
По кожному розміру видно, скільки штук лишилося в усіх постачальників разом. Наявність 200 товарів перевіряється одним запитом.
Повні картки
Описи російською та українською, текст для маркетплейсів, уся галерея фото (головне першим), бренд, характеристики, вага й габарити для доставки.
Як почати
- Крок 1
Створіть ключ
У профілі на вкладці «Публічний API». Скопіюйте його одразу: вдруге ключ не покажемо.
- Крок 2
Передайте його в заголовку
X-API-Key у кожному запиті з вашого сервера.
- Крок 3
Перевірте ключ
Запит GET /me поверне ваш тариф і ліміти.
Синхронізація магазину
Один запит по колу: /products/changes із закладкою.
- 1Перший запуск віддає весь каталог, по 200 товарів за раз.
- 2У кожній відповіді є закладка meta.next_cursor. Зберігайте її після кожної відповіді, навіть порожньої.
- 3Раз на 5–15 хвилин передавайте її в cursor, і прийдуть лише зміни. Постачальники оновлюються приблизно раз на годину.
- 4Товар зі status: removed зняли з продажу, приберіть його зі свого сайту.
import os
import time
import requests
API = "https://api.dropx.site/v1"
HEADERS = {"X-API-Key": os.environ["DROPX_API_KEY"]}
MARKUP = 30 # price = cost_price + 30%; send the same value on every call
def sync(cursor=None):
"""Apply every change since `cursor`; returns the cursor to store for the next run."""
while True:
params = {"limit": 200, "markup_percent": MARKUP}
if cursor:
params["cursor"] = cursor
response = requests.get(f"{API}/products/changes", headers=HEADERS, params=params, timeout=30)
if response.status_code == 429:
time.sleep(int(response.headers.get("Retry-After", "5")))
continue
response.raise_for_status()
body = response.json()
for change in body["data"]:
if change["status"] == "removed":
remove_product(change["id"]) # take it off your shop
else:
upsert_product(change["product"]) # create or update it
cursor = body["meta"]["next_cursor"]
save_cursor(cursor) # store it even when nothing changed
if not body["meta"]["has_more"]:
return cursor
# Run every 5-15 minutes (cron, Celery, systemd timer):
# sync(load_cursor())Ціни
Рахуються лише за параметрами запиту. Налаштування профілю на них не впливають. Усе в гривнях.
cost_price- Закупівельна ціна. Приходить завжди, рахується за постачальниками, у яких товар є в наявності.
price- Роздрібна ціна. Є, лише якщо передано markup_percent, тому опт не потрапить на вітрину випадково.
old_price- Закреслена ціна. Її задають discount_percent або old_price_markup_percent.
sizes[].price- Ціна розміру. Рахується лише за постачальниками, у яких є цей розмір: 40-й може коштувати 2300 ₴, а 46-й 2400 ₴.
Передавайте ту саму націнку в кожному запиті синхронізації. Якщо її змінити, API відповість pricing_changed: почніть вивантаження заново, щоб на сайті не лишилися старі ціни.
Ліміти та помилки
Скільки запитів лишилося, видно в заголовках X-RateLimit-* кожної відповіді.
| Запитів на хвилину на ключ | 60 |
|---|---|
| Запитів одночасно | 3 |
| Запитів на добу на акаунт | 10 000 |
| Товарів в одній відповіді | 200 |
| Товарів в одному запиті /stock | 200 |
- 401
invalid_api_key - Ключа немає, він невірний або відкликаний
- 403
plan_required - У тарифі немає API або підписка закінчилася
- 404
not_found - Такого товару немає або його зняли з продажу
- 422
validation_error - Невірний параметр, який саме, написано в details
- 422
invalid_cursor - Закладку зіпсовано, почніть синхронізацію спочатку
- 422
pricing_changed - Націнка не та, з якою почали синхронізацію: почніть заново
- 429
rate_limited - Забагато запитів, зачекайте стільки секунд, скільки в Retry-After
Помилка завжди приходить у вигляді {"error": {"code", "message", "request_id"}}. У підтримку надсилайте request_id.
Правила
Викликайте API лише зі свого сервера. Браузеру він не відповість: ключ у коді сторінки побачив би будь-який відвідувач.
Зберігайте товари у своїй базі й не звертайтеся до API на кожне відкриття сторінки покупцем.
В акаунта один ключ. Якщо він витік, перевипустіть його в профілі, і старий одразу перестане працювати.
Підключіть каталог до свого магазину
У довіднику всі запити й поля з прикладами. Файл OpenAPI відкривається в Postman та Insomnia, за ним можна зібрати клієнт своєю мовою.
v1.0 · жовтень 2026. Нові поля додаємо в цю ж версію, незнайомі поля просто пропускайте. Видалити чи перейменувати щось можемо лише в новій версії й попередимо заздалегідь.