Appearance
Заказы
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.
| Поле | Тип | Описание |
|---|---|---|
| id | string (uuid) | Идентификатор заказа в GoSync |
| external_order_id | string | ID заказа в системе маркетплейса |
| external_order_display_id | string | Человекочитаемый номер заказа |
| marketplace_code | string | Источник: wolt20, glovo, kaspi, yandex_eda и т.д. |
| status_internal | string | Нормализованный статус GoSync (new, accepted, in_progress, ready, delivered, rejected и др.) |
| status_external | string | Фактический статус маркетплейса (например Wolt acknowledged, Kaspi ACCEPTED_BY_MERCHANT) |
| created_at | string (RFC3339) | Дата создания заказа |
| customer_name | string | Имя покупателя |
| customer_phone | string | Телефон |
| order_comment | string | Комментарий к заказу |
| delivery_address_full | string | Адрес доставки одной строкой |
| warehouse_cml_id | string | Идентификатор склада (CML / из импорта каталога) |
| delivery_type | string | Тип доставки: pickup, marketplace_delivery, express, parcel_locker, own_delivery |
| items_total | number | Сумма по товарам (корзина) |
| fees_total | number | Сумма сборов (доставка + сервис). Итого = items_total + fees_total |
| items | array | Позиции заказа (см. ниже) |
| marketplace_data | object | Полный JSON от маркетплейса (если сохранён) |
| kaspi_state | string | Только для kaspi: NEW, SIGN_REQUIRED, PICKUP, DELIVERY, KASPI_DELIVERY, ARCHIVE |
| kaspi_preorder | boolean | Только для kaspi: заказ по предзаказу |
| kaspi_reservation_date_ms | number | Только для 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
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| limit | number | 100 | Макс. кол-во заказов |
Ответ 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
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| since | ISO8601 | да | Дата/время (RFC3339) — вернуть изменения строго после этого момента |
| limit | number | нет (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"