Приклади запитів
Готові curl для довідників, пошуку, створення заявок, пакетів і синхронізації.
Усі приклади припускають дві змінні оточення:
export SAMO_API="https://api.samo-trans.com/api/public/v1"
export SAMO_KEY="samo_live_XXXXXXXXXXXXXXXXXXXXXXXX"
Довідники
Перед першим створенням заявки заберіть словники — саме ці коди приймає API. Вони змінюються рідко, тож кешуйте їх у себе.
curl "$SAMO_API/reference/car-types" -H "Authorization: Bearer $SAMO_KEY"
curl "$SAMO_API/reference/load-types" -H "Authorization: Bearer $SAMO_KEY"
curl "$SAMO_API/reference/permits" -H "Authorization: Bearer $SAMO_KEY"
curl "$SAMO_API/reference/currencies" -H "Authorization: Bearer $SAMO_KEY"
curl "$SAMO_API/reference/payment-types" -H "Authorization: Bearer $SAMO_KEY"
Кожен елемент має код і назви п'ятьма мовами:
{ "code": "tent", "labels": { "uk": "Тент", "en": "Tent", "ru": "Тент", "de": "Plane", "pl": "Plandeka" } }
Географія:
curl "$SAMO_API/reference/countries?locale=uk" -H "Authorization: Bearer $SAMO_KEY"
curl "$SAMO_API/reference/regions?country=UA&locale=uk" -H "Authorization: Bearer $SAMO_KEY"
# пошук населеного пункту → звідси беруться osmId для маршруту
curl "$SAMO_API/localities/search?q=Ковель&country=UA&locale=uk" \
-H "Authorization: Bearer $SAMO_KEY"
Пошук по біржі
curl -G "$SAMO_API/proposals/search" \
-H "Authorization: Bearer $SAMO_KEY" \
--data-urlencode "type=CARGO" \
--data-urlencode "startCountries=UA" \
--data-urlencode "endCountries=PL" \
--data-urlencode "minCapacity=15" \
--data-urlencode "dateFrom=2026-08-10" \
--data-urlencode "limit=50"
Гео-фільтри — масиви, тому параметр повторюється:
curl -G "$SAMO_API/proposals/search" \
-H "Authorization: Bearer $SAMO_KEY" \
--data-urlencode "startRegions=UA-07" \
--data-urlencode "startRegions=UA-05" \
--data-urlencode "carTypes=tent" \
--data-urlencode "carTypes=ref"
Картка однієї заявки:
curl "$SAMO_API/proposals/clx7k2n9p0001/?locale=uk" -H "Authorization: Bearer $SAMO_KEY"
Контакти у відповіді присутні лише якщо ваш тариф дозволяє їх бачити — інакше "contact": null.
Створення заявки
Вантаж:
curl -X POST "$SAMO_API/proposals/cargo" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: tms-order-88213" \
-d '{
"startLocations": [{ "type": "locality", "osmId": "3678531", "countryCode": "UA" }],
"endLocations": [{ "type": "country", "countryCode": "PL" }],
"dataLoadStart": "2026-08-12T00:00:00.000Z",
"dataLoadEnd": "2026-08-14T00:00:00.000Z",
"capacity": 20,
"volume": 86,
"description": "Піддони, 20 т, розтентовка збоку",
"carTypes": ["tent"],
"loadUnloadTypes": ["side", "back"],
"carPermits": ["cmr", "t1"],
"price": 24500,
"currencyType": "UAH",
"paymentType": "CASHLESS"
}'
Транспорт — той самий формат тіла, інший шлях:
curl -X POST "$SAMO_API/proposals/transport" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-d '{ "startLocations": [ … ], "endLocations": [ … ], "dataLoadStart": "…", "dataLoadEnd": "…", "capacity": 22, "description": "Тент 92 м³, вільний з понеділка", "carTypes": ["tent"] }'
Обов'язкові поля: startLocations, endLocations, dataLoadStart, dataLoadEnd, capacity,
description, carTypes.
companyId передавати не потрібно — він завжди береться з ключа; поле companyId у тілі не
ігнорується, а роняє запит у 400 validation_error. Контактну особу (contactPersonId)
передавати не обов'язково — якщо не вказати, контактом стане користувач, який випустив ключ.
Детальніше — розділ «Заявка на конкретного працівника» нижче.
Пакетне створення
До 25 заявок одним запитом. Відповідь завжди 200, результат — по кожній позиції окремо.
curl -X POST "$SAMO_API/proposals/batch" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: tms-batch-2026-08-05-01" \
-d '{
"items": [
{ "type": "CARGO", "startLocations": [ … ], "endLocations": [ … ], "…": "…" },
{ "type": "TRANSPORT", "startLocations": [ … ], "endLocations": [ … ], "…": "…" }
]
}'
{
"created": 1,
"failed": 1,
"results": [
{ "index": 0, "status": "created", "proposal": { "id": "clx…", "…": "…" } },
{ "index": 1, "status": "error", "error": { "code": "validation_error", "message": "capacity must be a number" } }
]
}
Пакет списує стільки одиниць добової квоти, скільки в ньому позицій. Якщо квоти не
вистачить, увесь запит відхиляється з 429 quota_exceeded — жодної заявки при цьому не
створюється.
Власні заявки
# перелік (лише заявки компанії, до якої прив'язаний ключ)
curl -G "$SAMO_API/proposals/my" \
-H "Authorization: Bearer $SAMO_KEY" \
--data-urlencode "status=ACTIVE" \
--data-urlencode "limit=100"
# редагування — часткове, надсилайте лише змінені поля
curl -X PATCH "$SAMO_API/proposals/clx7k2n9p0001" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-d '{ "price": 26000, "description": "Оновлено: можливе довантаження" }'
# підняти в пошуку
curl -X POST "$SAMO_API/proposals/clx7k2n9p0001/bump" -H "Authorization: Bearer $SAMO_KEY"
# зняти з публікації / повернути
curl -X POST "$SAMO_API/proposals/clx7k2n9p0001/archive" -H "Authorization: Bearer $SAMO_KEY"
curl -X POST "$SAMO_API/proposals/clx7k2n9p0001/restore" -H "Authorization: Bearer $SAMO_KEY"
# видалити остаточно
curl -X DELETE "$SAMO_API/proposals/clx7k2n9p0001" -H "Authorization: Bearer $SAMO_KEY"
Що варто знати про ці дії:
bumpдоступний авторові заявки або її контактній особі. Власника компанії самого по собі недостатньо. Занадто раннє підняття або вичерпаний ліміт піднять повертають400 validation_errorз поясненням уmessage.archiveіrestoreідемпотентні: повторний виклик для заявки, яка вже в потрібному стані, поверне200і нічого не змінить.restoreне безкоштовний: повернення заявки в ефір скидає їїcreatedAtі лічильник переглядів, а також займає слот активних заявок вашого тарифу. Якщо ліміт вичерпано, прийде400.- Спроба звернутися до заявки іншої компанії дає
404, а не403.
Працівники
# перелік працівників компанії, до якої прив'язаний ключ
curl "$SAMO_API/employees" -H "Authorization: Bearer $SAMO_KEY"
# скільки заявок висить на конкретному працівникові — варто перевірити перед вимкненням
curl "$SAMO_API/employees/clx9f4k7r0004/proposals-count" -H "Authorization: Bearer $SAMO_KEY"
# тимчасово заблокувати доступ
curl -X PATCH "$SAMO_API/employees/clx9f4k7r0004/status" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "DEACTIVATED" }'
# повернути доступ
curl -X PATCH "$SAMO_API/employees/clx9f4k7r0004/status" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "ACTIVE" }'
# змінити роль
curl -X PATCH "$SAMO_API/employees/clx9f4k7r0004" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-d '{ "role": "DISPATCHER" }'
Відповідь на перелік:
[
{
"id": "clx9f4k7r0004",
"userId": "clx2h6m3t0005",
"email": "[email protected]",
"name": "Оксана Ковальчук",
"role": "DISPATCHER",
"status": "ACTIVE",
"invitedAt": "2026-01-02T10:00:00.000Z",
"joinedAt": "2026-01-03T09:30:00.000Z",
"avatar": null,
"phones": [{ "phone": "+380501234567", "isPrimary": true, "hasTelegram": true, "hasWhatsApp": false, "hasViber": false }]
}
]
Зверніть увагу на два різні ідентифікатори: id — це членство в компанії, він іде у шляху
цих ендпоінтів; userId — це користувач, і саме він передається як contactPersonId у заявці.
Вимкнення працівника не знімає його заявки з публікації — вони залишаються в ефірі й далі
показують його контактом. Спочатку подивіться proposals-count, за потреби перевісьте заявки
через PATCH /proposals/{id}.
Створення й видалення працівників через API не передбачені — це робиться в кабінеті.
Заявка на конкретного працівника
curl -X POST "$SAMO_API/proposals/cargo" \
-H "Authorization: Bearer $SAMO_KEY" \
-H "Content-Type: application/json" \
-d '{
"startLocations": [{ "type": "country", "countryCode": "UA" }],
"endLocations": [{ "type": "country", "countryCode": "PL" }],
"dataLoadStart": "2026-08-12T00:00:00.000Z",
"dataLoadEnd": "2026-08-14T00:00:00.000Z",
"capacity": 20,
"description": "Піддони",
"carTypes": ["tent"],
"contactPersonId": "clx2h6m3t0005"
}'
contactPersonId — це userId із переліку працівників. Дозволені лише власник компанії та
працівники зі статусом ACTIVE; будь-хто інший дасть 400 validation_error. Якщо поле не
передати, контактом стане користувач, який випустив ключ.
Компанія-контрагент
curl "$SAMO_API/companies/clx4a1b2c0001" -H "Authorization: Bearer $SAMO_KEY"
curl "$SAMO_API/companies/clx4a1b2c0001/reviews?page=1&limit=20" -H "Authorization: Bearer $SAMO_KEY"
Повертаються лише схвалені відгуки; limit обмежений 50.
Інкрементальна синхронізація
Замість повного обходу біржі забирайте дельту:
curl -G "$SAMO_API/proposals/search" \
-H "Authorization: Bearer $SAMO_KEY" \
--data-urlencode "updatedSince=2026-08-05T09:00:00.000Z" \
--data-urlencode "limit=100"
Далі йдіть сторінками через nextCursor, дедуплікуючи за id. Подробиці й підводні камені —
у розділі Пагінація та синхронізація.