Skip to content

Заказы

GoSync отдаёт заказы с маркетплейсов (Wolt, Glovo, Kaspi и др.) через единый API. Ваша система запрашивает новые заказы, при необходимости — обновления по уже выгруженным, и подтверждает получение batch. Смена статусов заказа (принять / отклонить / в сборке / готов / доставлен) — отдельными POST-командами. Таймаут вызова маркетплейса при смене статуса — 7 секунд; при превышении заказ не изменяется.

Сценарии

ЗадачаЭндпоинт
Забрать новые заказыGET /orders → POST /orders/confirm
Получить изменения по уже выгруженным (статус, состав, kaspi-поля)GET /orders/updates?since=...
Перезапросить полный заказ по UUID (все поля, включая клиента и суммы)GET /orders/{order_id}
Сменить статус в маркетплейсеPOST /orders/{order_id}/accept и др.

GoSync сам подтягивает изменения с маркетплейсов (вебхуки, синк). Отдельного POST «обновить заказ из маркетплейса» в External API нет — ваша система опрашивает GET /orders/updates или GET /orders/{order_id}.

Обзор эндпоинтов

Базовый путь: https://gosync.kz/api/v1/1c. Авторизация: HTTP Basic Auth (Authorization: Basic base64(client_id:client_secret)). Подробнее — Авторизация.

МетодПутьНазначение
GET/api/v1/1c/ordersНовые заказы (batch)
GET/api/v1/1c/orders/updatesОбновления по выгруженным заказам (since)
POST/api/v1/1c/orders/confirmПодтверждение batch
GET/api/v1/1c/orders/{order_id}Полный заказ по UUID (перезапрос)
POST/api/v1/1c/orders/{order_id}/acceptПринять заказ
POST/api/v1/1c/orders/{order_id}/rejectОтклонить заказ
POST/api/v1/1c/orders/{order_id}/in_progressВ сборке (Kaspi: накладная)
POST/api/v1/1c/orders/{order_id}/readyГотов к выдаче
POST/api/v1/1c/orders/{order_id}/deliveredДоставлен

Объект заказа (общие поля)

Поля ниже возвращаются в GET /orders, GET /orders/{order_id} и (частично) в GET /orders/updates.

ПолеТипОписание
idstring (uuid)Идентификатор заказа в GoSync
external_order_idstringID заказа в системе маркетплейса
external_order_display_idstringЧеловекочитаемый номер заказа
marketplace_codestringИсточник: wolt20, glovo, kaspi, yandex_eda и т.д.
status_internalstringНормализованный статус GoSync (new, accepted, in_progress, ready, delivered, rejected и др.)
status_externalstringФактический статус маркетплейса (например Wolt acknowledged, Kaspi ACCEPTED_BY_MERCHANT)
created_atstring (RFC3339)Дата создания заказа
customer_namestringИмя покупателя
customer_phonestringТелефон
order_commentstringКомментарий к заказу
delivery_address_fullstringАдрес доставки одной строкой
warehouse_cml_idstringИдентификатор склада (CML / из импорта каталога)
delivery_typestringТип доставки: pickup, marketplace_delivery, express, parcel_locker, own_delivery
items_totalnumberСумма по товарам (корзина)
fees_totalnumberСумма сборов (доставка + сервис). Итого = items_total + fees_total
itemsarrayПозиции заказа (см. ниже)
marketplace_dataobjectПолный JSON от маркетплейса (если сохранён)
kaspi_statestringТолько для kaspi: NEW, SIGN_REQUIRED, PICKUP, DELIVERY, KASPI_DELIVERY, ARCHIVE
kaspi_preorderbooleanТолько для kaspi: заказ по предзаказу
kaspi_reservation_date_msnumberТолько для kaspi: дата доставки по предзаказу (мс), 0 если нет

Позиция заказа (items[]):

ПолеОписание
product_idИдентификатор товара в каталоге — тот же, что передали в POST /import/catalog
cml_idТо же значение, что product_id (обратная совместимость с 1С / CommerceML)
nameНаименование
quantityКоличество
priceЦена за единицу

GET /api/v1/1c/orders

Получение новых заказов (ещё не подтверждённых вашей системой). При запросе создаётся batch; после обработки его нужно подтвердить через POST /orders/confirm.

Query

ПараметрТипПо умолчаниюОписание
limitnumber100Макс. кол-во заказов

Ответ 200

json
{
  "batch_id": "550e8400-e29b-41d4-a716-446655440000",
  "orders": [
    {
      "id": "uuid-заказа",
      "external_order_id": "id-в-системе-маркетплейса",
      "external_order_display_id": "номер для клиента",
      "marketplace_code": "wolt20",
      "status_internal": "new",
      "status_external": "received",
      "created_at": "2026-02-18T12:00:00Z",
      "customer_name": "Иван",
      "customer_phone": "+7 700 123 4567",
      "order_comment": "Позвонить перед доставкой",
      "delivery_address_full": "г. Алматы, ул. Примерная, 1",
      "warehouse_cml_id": "warehouse-cml-id",
      "delivery_type": "marketplace_delivery",
      "items_total": 2500.50,
      "fees_total": 700,
      "items": [
        {
          "cml_id": "ART-001",
          "product_id": "ART-001",
          "name": "Наименование позиции",
          "quantity": 1,
          "price": 100.50
        }
      ],
      "marketplace_data": {},
      "kaspi_state": "",
      "kaspi_preorder": false,
      "kaspi_reservation_date_ms": 0
    }
  ]
}

После получения заказов обязательно подтвердите batch: POST /api/v1/1c/orders/confirm с телом {"batch_id": "<uuid>"}.


GET /api/v1/1c/orders/updates — обновления по выгруженным заказам

Основной способ узнать, что изменилось у заказов, которые ваша система уже забрала и подтвердила (POST /orders/confirm). GoSync возвращает заказы, у которых updated_at > since — смена статуса, состава позиций, данных Kaspi и т.д.

Периодически опрашивайте этот эндпоинт (например каждые 1–2 минуты), передавая в since время последнего успешного опроса (RFC3339).

Query

ПараметрТипОбязательныйОписание
sinceISO8601даДата/время (RFC3339) — вернуть изменения строго после этого момента
limitnumberнет (100)Макс. кол-во записей

Ответ 200

json
{
  "updates": [
    {
      "id": "uuid-заказа",
      "updated_at": "2026-02-18T14:00:00Z",
      "marketplace_code": "wolt20",
      "status_internal": "ready",
      "status_external": "ready",
      "delivery_type": "marketplace_delivery",
      "items": [
        {
          "cml_id": "ART-001",
          "product_id": "ART-001",
          "name": "Наименование",
          "quantity": 1,
          "price": 100.50
        }
      ],
      "marketplace_data": {},
      "kaspi_state": "",
      "kaspi_preorder": false,
      "kaspi_reservation_date_ms": 0
    }
  ]
}

В updates нет полей customer_name, items_total, fees_total и т.д. — только изменяемые атрибуты и актуальный состав items. Если нужен полный снимок — GET /orders/{order_id}.

Ошибки

КодОписание
400Не передан since или неверный формат даты.

GET /api/v1/1c/orders/{order_id} — полный заказ по UUID

Один заказ в том же формате, что элемент массива orders из GET /orders.

Когда использовать:

  • нужны все поля заказа (клиент, адрес, суммы), а в /orders/updates их нет;
  • перезапрос конкретного заказа после изменения на маркетплейсе;
  • заказ уже подтверждён — GET /orders его не вернёт, но GET /{order_id} вернёт.

Отличия от GET /orders:

  • не создаёт batch и не требует confirm;
  • возвращает заказ независимо от статуса выгрузки.

order_id — UUID из поля id (не external_order_id).

Ответ 200

Тело — один объект заказа (см. Объект заказа), без обёртки batch_id / orders.

Ошибки

КодОписание
400Некорректный order_id (ожидается UUID).
404Заказ не найден или не принадлежит клиенту.

POST /api/v1/1c/orders/confirm

Подтверждение получения batch заказов (ваша система обработала заказы и отмечает batch как полученный).

Тело запроса

json
{
  "batch_id": "550e8400-e29b-41d4-a716-446655440000"
}

Ответ 200

json
{
  "ok": true,
  "confirmed": 5
}

confirmed — количество заказов в batch, отмеченных как полученные.


POST /api/v1/1c/orders/{order_id}/accept | reject | in_progress | ready | delivered

Отдельные эндпоинты для команд статуса с Basic Auth:

МетодПутьКоманда
POST/api/v1/1c/orders/{order_id}/acceptПринять заказ
POST/api/v1/1c/orders/{order_id}/rejectОтклонить заказ
POST/api/v1/1c/orders/{order_id}/in_progressВ сборке (Kaspi: ASSEMBLE / накладная)
POST/api/v1/1c/orders/{order_id}/readyГотов к выдаче
POST/api/v1/1c/orders/{order_id}/deliveredДоставлен

order_id — UUID заказа в GoSync (поле id из GET /orders, /orders/updates или /orders/{order_id}).

Поддерживаемые маркетплейсы: wolt20, kaspi. Для остальных — 422.

Синхронный вызов маркетплейса (таймаут 7 сек); при успехе — обновление БД и ответ с актуальным статусом.

Тело запроса (опционально)

Для reject:

json
{
  "reason": "Нет в наличии",
  "code": "GENERIC"
}

Для in_progress (Kaspi — формирование накладной, количество мест):

json
{
  "status_params": {
    "number_of_space": 1
  }
}

Допустим также ключ numberOfSpace. Если накладная уже сформирована, повторный in_progress вернёт 422.

Ответ 200

json
{
  "ok": true,
  "order": {
    "id": "uuid-заказа",
    "status_internal": "accepted",
    "status_external": "acknowledged",
    "updated_at": "2026-02-18T14:00:00Z"
  }
}

Ошибки

КодОписание
404Заказ не найден или не принадлежит клиенту.
422Для данного маркетплейса смена статуса не поддерживается (или накладная Kaspi уже есть).
502Ошибка маркетплейса. В теле — текст ошибки.
504Маркетплейс не ответил вовремя (7 сек). Заказ не изменён.

После успешной смены статуса можно обновить данные через GET /api/v1/1c/orders/updates?since=... или GET /api/v1/1c/orders/{order_id}.


Примеры curl

Подставьте свой client_id, client_secret (как в кабинете). Basic-строка: printf '%s' 'id:secret' | base64.

bash
BASE="https://gosync.kz/api/v1/1c"
AUTH="Authorization: Basic $(printf '%s' 'YOUR_CLIENT_ID:YOUR_CLIENT_SECRET' | base64)"

# Новые заказы
curl -H "$AUTH" "$BASE/orders?limit=50"

# Один заказ по UUID
curl -H "$AUTH" "$BASE/orders/<order_id>"

# Изменения с даты
curl -G -H "$AUTH" --data-urlencode "since=2026-02-18T00:00:00Z" "$BASE/orders/updates"

# Подтвердить batch
curl -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"batch_id":"<uuid>"}' "$BASE/orders/confirm"

# Смена статуса
curl -X POST -H "$AUTH" "$BASE/orders/<order_id>/accept"
curl -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"reason":"Нет в наличии","code":"GENERIC"}' "$BASE/orders/<order_id>/reject"
curl -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"status_params":{"number_of_space":1}}' "$BASE/orders/<order_id>/in_progress"
curl -X POST -H "$AUTH" "$BASE/orders/<order_id>/ready"
curl -X POST -H "$AUTH" "$BASE/orders/<order_id>/delivered"