Перейти к содержимому
Публічний API · тариф Ultra

Каталог dropX у вашому сайті, боті та CRM

Ваш сервер забирає товари з вашими цінами та залишками за розмірами, а потім раз на кілька хвилин отримує лише те, що змінилося.

GET /v1/products/changes?markup_percent=30200
{
  "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
хвилин між оновленнями
01

Що віддає API

Назв, контактів і цін окремих постачальників в API немає: усе зведено в одну картку товару.

Лише зміни

Після першого вивантаження API надсилає лише товари, у яких змінилася ціна, залишки чи розміри, і ті, що зняли з продажу.

Ваші ціни

Закупівельна ціна приходить завжди. Передайте свою націнку, і API порахує роздрібну та закреслену ціну, зокрема для кожного розміру.

Залишки за розмірами

По кожному розміру видно, скільки штук лишилося в усіх постачальників разом. Наявність 200 товарів перевіряється одним запитом.

Повні картки

Описи російською та українською, текст для маркетплейсів, уся галерея фото (головне першим), бренд, характеристики, вага й габарити для доставки.

02

Як почати

  1. Крок 1

    Створіть ключ

    У профілі на вкладці «Публічний API». Скопіюйте його одразу: вдруге ключ не покажемо.

  2. Крок 2

    Передайте його в заголовку

    X-API-Key у кожному запиті з вашого сервера.

  3. Крок 3

    Перевірте ключ

    Запит GET /me поверне ваш тариф і ліміти.

03

Синхронізація магазину

Один запит по колу: /products/changes із закладкою.

  1. 1Перший запуск віддає весь каталог, по 200 товарів за раз.
  2. 2У кожній відповіді є закладка meta.next_cursor. Зберігайте її після кожної відповіді, навіть порожньої.
  3. 3Раз на 5–15 хвилин передавайте її в cursor, і прийдуть лише зміни. Постачальники оновлюються приблизно раз на годину.
  4. 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())
04

Ціни

Рахуються лише за параметрами запиту. Налаштування профілю на них не впливають. Усе в гривнях.

cost_price
Закупівельна ціна. Приходить завжди, рахується за постачальниками, у яких товар є в наявності.
price
Роздрібна ціна. Є, лише якщо передано markup_percent, тому опт не потрапить на вітрину випадково.
old_price
Закреслена ціна. Її задають discount_percent або old_price_markup_percent.
sizes[].price
Ціна розміру. Рахується лише за постачальниками, у яких є цей розмір: 40-й може коштувати 2300 ₴, а 46-й 2400 ₴.

Передавайте ту саму націнку в кожному запиті синхронізації. Якщо її змінити, API відповість pricing_changed: почніть вивантаження заново, щоб на сайті не лишилися старі ціни.

05

Ліміти та помилки

Скільки запитів лишилося, видно в заголовках X-RateLimit-* кожної відповіді.

Ліміти
Запитів на хвилину на ключ60
Запитів одночасно3
Запитів на добу на акаунт10 000
Товарів в одній відповіді200
Товарів в одному запиті /stock200
401invalid_api_key
Ключа немає, він невірний або відкликаний
403plan_required
У тарифі немає API або підписка закінчилася
404not_found
Такого товару немає або його зняли з продажу
422validation_error
Невірний параметр, який саме, написано в details
422invalid_cursor
Закладку зіпсовано, почніть синхронізацію спочатку
422pricing_changed
Націнка не та, з якою почали синхронізацію: почніть заново
429rate_limited
Забагато запитів, зачекайте стільки секунд, скільки в Retry-After

Помилка завжди приходить у вигляді {"error": {"code", "message", "request_id"}}. У підтримку надсилайте request_id.

06

Правила

  • Викликайте API лише зі свого сервера. Браузеру він не відповість: ключ у коді сторінки побачив би будь-який відвідувач.

  • Зберігайте товари у своїй базі й не звертайтеся до API на кожне відкриття сторінки покупцем.

  • В акаунта один ключ. Якщо він витік, перевипустіть його в профілі, і старий одразу перестане працювати.

Підключіть каталог до свого магазину

У довіднику всі запити й поля з прикладами. Файл OpenAPI відкривається в Postman та Insomnia, за ним можна зібрати клієнт своєю мовою.

v1.0 · жовтень 2026. Нові поля додаємо в цю ж версію, незнайомі поля просто пропускайте. Видалити чи перейменувати щось можемо лише в новій версії й попередимо заздалегідь.