Общая информация
Агентский API предназначен для интеграции ERP систем бизнес-агентов в сервисы TbT.
Для подключения к системе необходимо:
-
иметь регистрационную запись в системе с установленным признаком agent
-
ID учетной записи агента (UUID)
-
Уникальный токен и пароль (или одноразовый сессионный код) для клиентского подключения (передаются в заголовке для Basic Auth)
К агентскому токену могут добавляться ограничения на некоторые общие типы операций: create, update, notify
При подключении в индифидуальном профиле создается реестр правил/классификатор обработки ТТН для каждой группы агентов (agent class) в зависимости от особенностей их данных, чтобы облегчить интеграцию.
Формат URL для отправки запросов к API
https://api.tbt-post.net/api/v{v_number}/{method_name}/{method_params}?{get_params}
- где
| {v_number} |
номер версии API в виде числа |
| {method_name} |
название метода |
| {method_params} |
параметры метода в URI |
| {get_params} |
опциональные GET параметры |
| Для проверки запросов в командной строке/терминале, используйте User-Agent: curl, не ниже 7.47.0 |
API
Посылки
Создание посылки
| protocol_method |
POST |
| method_name |
agent/parcel |
| method_params |
new |
| request_body |
{"order_id": "<EXT Order ID>", "receiver": { "id": "<EXT User ID>", "phone": <PHONE 380XXYYYYYYY>, "email" : "<USER EMAIL>", "first name" : <FIRST NAME>, "last_name": "<LAST NAME>"}, "delivery_type": <DELIVERY TYPE>, "dest" : [ <LATITUDE>, <LONGITUDE>], "dest_apartment": "<DEST APARTMENT>", "weight" : <WEIGHT GRAM as INTEGER>, "price" : <PRICE as DECIMAL(10,2)>, "cod_amount" : <PRICE as DECIMAL(10,2)>, "type" : "<TYPE CODE>:<CLASS CODE>", "note" : "<USER NOTE>", "created_at": "<DATE TIME in ISO 8601>", "contragent_id" : <CONTRAGENT ID>, "dimensions": [<WIDTH>, <HEIGHT>, <DEPTH>], "_comment" : "<SENDER’s comment>", "items": [<PARCEL ITEM SPEC>, …]} |
| expected_result |
200 {"id" : "<PARSEL ID>", "success": true} |
описание PARCEL_ITEM_SPEC: {"barcode": "<UNIQ BARCODE>", "sku": "<SUPPLIER SKU NAME>", "name": "<NAME>", "brand": "<BRAND>", "size": "<SIZE>", "quantity": <QUANTITY as INTEGER>, "weight": <WEIGHT GRAM as INTEGER>, "price": <PRICE as DECIMAL(10,2)>, "comment": "<OPTIONAL COMMENT>", "photos":["<OPTIONAL PHOTO_URL_LIST>"]}
|
ключи cod_amount, contragent_id, dimensions, _comment, items — опциональны.contragent_id - необходимо указывать если в type=COD
|
Для посылок с классификатором оплаты COD в качестве значения cod_amount будет подставляться параметр price в случае отсутствия явного его указания в параметрах. cod_amount не может быть больше чем price
|
параметр delivery_type имеет значение по-умолчанию W2W, в случае значений W2D и D2D необходимо передать ключ dest_apartment
|
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/new" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"order_id": "TEST0001", "receiver": { "id": 0, "phone": "380662225577", "email" : "example@gmail.com", "first_name" : "test", "last_name": "user"}, "delivery_type": "W2W", "dest" : ["50.405237", "30.679338"], "dest_apartment": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253", "weight" : 1520, "price" : 2500, "cod_amount" : 0, "type" : "fragile:A.PRP.NR.NA.S000", "note" : "", "created_at": "2018-12-11T11:45:00+00:00"}'
В параметрах "Authorization" Необходимо указать токен и пароль в формате base64.
Например: token:passwd → dG9rZW46cGFzc3dk
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Tue, 11 Dec 2018 10:32:02 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 63
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"id": "252395d6-5764-4232-baeb-2020db2d8c2c",
"success": true
}
| При повторном отправлении запроса с такими же параметрами, сервер ответит ошибкой "409" и сообщением "{"message": "Order TEST0001 already registered", "success": false}" |
Получение по id/code
| protocol_method |
GET |
| method_name |
agent/parcel |
| method_params |
<PARCEL ID> |
| get_params |
<code> |
| request_body |
---- |
| expected_result |
200 {"success": true, "address_id": "<SHIPPING ADDRESS ID>", "code": "<CODE-128>", "is_paid": <true/false>, "weight": <WEIGHT GRAM as DECIMAL(10,6)>, "agent": "<USER ID>", "is_open": <true/false>, "paid_at": "<TIMESTAMP UTC> or null", "closed_at": "<TIMESTAMP UTC or null>", "id": "<PARCEL ID>", "type": <TYPE CODE>, "parent": <PARCEL ID or null>, "price": <PRICE as DECIMAL(10,2)>, "cod_amount": <PRICE as DECIMAL(10,2)>, "paid_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "class": "<CLASS ID>", "sender": "<USER ID>", "created_at": "<TIMESTAMP UTC>", "modified_at": "<TIMESTAMP UTC>", "receiver": "<USER ID>", "state": "<PARCEL STATE>", "transfer_via": "<OFFCIE ID>", "pentity": "<OFFICE ENTITY ID>", "additional_data": {…}, "delivery_type": "<DELIVERY TYPE>" …} |
parcel_id имеет более высокий приоритет, чем code
|
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/252395d6-5764-4232-baeb-2020db2d8c2c" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Tue, 11 Dec 2018 13:08:05 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1114
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "ea3c10b5aa787248012184e6befffbf7732930d0"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0001",
"weight": 1520,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "252395d6-5764-4232-baeb-2020db2d8c2c",
"paid_amount": 0,
"state": "PU0000",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 2500,
"checked_in_at": null,
"class": "A.PRP.NR.NA.S000",
"pentity": null,
"transfer_via": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"nsid": 0,
"is_paid": false,
"modified_at": "2018-12-11T10:32:02.238182+00:00",
"success": true,
"additional_data": {
"erp_token": "token",
"ttl_days": 15,
"ttl_days_default": 15,
"_receiver": {
"phone": "380662225577",
"first_name": "test",
"last_name": "user",
"id": 0,
"email": "example@gmail.com"
}
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 0,
"created_at": "2018-12-11T10:32:02.238169+00:00",
"goes_back": false
}
Получение cписка посылок по списку id
| protocol_method |
POST |
| method_name |
agent/parcel/list |
| method_params |
---- |
| get_params |
<code> |
| request_body |
{"id": ["<PARCEL ID>", "<PARCEL ID>", …]} |
| expected_result |
200 {"success": true, "parcels": [{<PARCEL SPEC>}, {<PARCEL SPEC>}, …]} |
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/list" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"id": ["252395d6-5764-4232-baeb-2020db2d8c2c", "4d52c496-9137-4e8a-bb1b-56f378669ac0"]}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Tue, 11 Dec 2018 14:24:13 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2228
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"parcels": [
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0001",
"weight": 1520,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "252395d6-5764-4232-baeb-2020db2d8c2c",
"paid_amount": 0,
"state": "PU0000",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 2500,
"checked_in_at": null,
"class": "A.PRP.NR.NA.S000",
"pentity": null,
"transfer_via": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"nsid": 0,
"is_paid": false,
"modified_at": "2018-12-11T10:32:02.238182+00:00",
"additional_data": {
"erp_token": "token",
"_receiver": {
"phone": "380662225577",
"first_name": "test",
"last_name": "user",
"id": 0,
"email": "example@gmail.com"
},
"ttl_days": 15,
"ttl_days_default": 15
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 0,
"created_at": "2018-12-11T10:32:02.238169+00:00",
"goes_back": false
},
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0002",
"PARCEL SPEC",
"PARCEL SPEC",
"PARCEL SPEC",
"PARCEL SPEC",
"created_at": "2018-12-11T14:23:51.628901+00:00",
"goes_back": false
}
],
"success": true
}
Получение cписка посылок по участию
| protocol_method |
GET |
| method_name |
agent/parcel/list |
| method_params |
---- |
| get_params |
participant = all|agent|sender|receiver, sort_by = <SORT FIELD>, [sort_order = desc|asc], [limit=20, offset=0] |
| request_body |
---- |
| expected_result |
200 {"total": <INTEGER TOTAL>, "parcels": [{<PARCEL SPEC>}, {<PARCEL SPEC>}, …], "success": true} |
По-умолчанию выполняется поиск всех посылок participant=all, порядок сортировки по-убыванию по состояниям. В качестве sort_by можно передать такие поля: [code, weight, price, paid_amount, created_at, modified_at, paid_at, type, class, state, goes_back]
|
Параметры в GET запросах необходимо перечислять через символ &Параметры в [] - опциональны |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/list?participant=agent&sort_by=type&sort_order=asc&limit=20&offset=0" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 10:22:47 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 3337
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "35c21fc7f5e3aa7aecbdc4389aa4b8097372f81c"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"total": 3,
"parcels": [
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0003",
"weight": 145,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "0e1837e3-609f-4bc6-a121-3b21c0f11a5b",
"paid_amount": 0,
"state": "PU0000",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 125,
"checked_in_at": null,
"class": "A.PRP.NR.NA.S000",
"pentity": null,
"transfer_via": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"nsid": 0,
"is_paid": false,
"modified_at": "2018-12-12T10:19:42.207810+00:00",
"additional_data": {
"erp_token": "510ad08a-830e-46aa-ab63-dfade75a00a7",
"_receiver": {
"phone": "380662225577",
"first_name": "test",
"last_name": "user",
"id": 0,
"email": "example@gmail.com"
},
"ttl_days": 15,
"ttl_days_default": 15
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 0,
"created_at": "2018-12-12T10:19:42.207796+00:00",
"goes_back": false
},
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0002",
"PARCEL SPEC",
"PARCEL SPEC",
"PARCEL SPEC",
"PARCEL SPEC",
"created_at": "2018-12-11T14:23:51.628901+00:00",
"goes_back": false
},
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0001",
"PARCEL SPEC",
"PARCEL SPEC",
"PARCEL SPEC",
"PARCEL SPEC",
"created_at": "2018-12-11T10:32:02.238169+00:00",
"goes_back": false
}
],
"success": true
}
Получение списка items
| protocol_method |
GET |
| method_name |
agent/parcel/item/list |
| method_params |
<parcel_id> |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"items":[{"sku":"<SUPPLIER SKU NAME>","name":"<NAME>","weight":<WEIGHT GRAM as INTEGER>,"modified_at":"<DATE>","brand":"<BRAND>","barcode":"<UNIQ BARCODE>","additional_data":{"photos":["<OPTIONAL PHOTO_URL_LIST>"]},"quantity":<QUANTITY as INTEGER>,"price":<PRICE as DECIMAL(10,2)>,"size":"<SIZE>"}],"success":true} |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/item/list/ cc52d435-ba59-4d5f-982c-09e0ff9cacad" \
-H "Authorization: Basic NTEwYWQwOGEtODMwZS00NmFhLWFiNjMtZGZhZGU3NWEwMGE3OmtSZnR2dzdX"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 14 Apr 2019 14:35:08 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 513
Connection: keep-alive
{
"items": [
{
"sku": "123_adidas_xl",
"name": "Куртка",
"weight": 1500,
"modified_at": "2019-04-14T14:21:09.904880+00:00",
"brand": "Adidas",
"barcode": "123456789",
"additional_data": {
"photos": [
"https://m3.ttest.net/imgw/loc/518939a431.jpg", "https://m4.test.net/imgw/325a9fa.jpg"
]
},
"quantity": 1,
"price": 2050,
"size": "XS"
}
],
"success": true
}
Получение кодов
| protocol_method |
GET |
| method_name |
agent/parcel/codes |
| method_params |
<PARCEL ID> |
| request_body |
---- |
| expected_result |
200 {"qr": "<QR body>", "bcode": "<CODE128>", "success": true} |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/codes/4d52c496-9137-4e8a-bb1b-56f378669ac0" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 10:49:02 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 4040
Connection: keep-alive Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "2b06b6d02fb247c191d703bb325ca1173138a2bd"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"qr": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALIAAACyAQAAAADO8ajFAAAE9klEQVR4nNVXz4fl1xKv7ro8TY0aZvUITxjeqqlWTQxnVG8fTf6GEN52yCpkE7J9hLcaQv6JkNVwWg0jnOtcejU0EYaswmnn0oa6KvuYe2b73ndZPj4+p+pTP74nCR/6bk4/GAb434ufbG5gu7+4fL2Fy93F9vkF3J9cHcVD2kzpYEoZrbA1G5pWj+NFYXD1rpXnyJRExY/graQgzvQ6baCv8BsA0K3CzvaPujyy76/GJ+8er97L9TD3FwZv84u3tpPd3R8Qx/EneYLyl9hhZ98e15/JgNUKBjYrzKNa5lH9p3Cxedef4Q0UfLW/eVOfXsP95rgeyOzRZEy1UOaEIVj9OD+kj+iDWKq2mZTUs41V/iMiHIAyfNbRRafiih+d2aYnSyP1FjLW/NamVVRlQx6TsxAv+dUdc7QiHk6UVD14xQ+cnjxrrz2nNnFAWPEXt5jQB5hW66hZmqzwPUCbhvamXSqnGC/zz97KHFCGxjCs0j3myg/w7Kvb7Z29/sfZZ7++qsSfnl3uVn6Q2pUkajcHLRPIC630TJrQU91HcgB1YY1lP6I4QiWp4eJTEput8JMFotPMhoa1tJk8V/gK6OpAU9PBYKSDLfWbyWCD5mgGvWna2j8KA1WlS1YFIQ1d1PcUiOj6jwPhpz88fkFwp98/odvVPEQgagHGMjowysf0a8PGMcFqS1WOSiGr/BCgaPbpNls1KhXX7+VGOQBpVjAaLWuWsXqv7J9e7Pzgb7/Jb//568ONbeB65TdOKzZH1Tp6KUqTaOkf9jJkAHWzhp7R/CP1ChvNlAXrNCgMSbriVy/dgA3LDOsK3cuiH0/hP9coYOeH9w/bN/cXZwyH11er+lYdPcGxy+w9fWLaUg83iFkJJrlNaUWaLudDl+ZzAgoXpJ7Fci7mA+RoNCWpsSiGdZutLfmreEWJUm106kmZsfADJLYcwc25aBfkAZV1hW+VipUs0dBgNG595TfIliZt9tJj9Cg0jfvSD71maZYaHSJaYMux2KeQQeAEkT3UWRNHNz6O38Dtnq/G1cb2rwjuz24KXR5k5X8yADaD5EFWMI1tcZ+cwu97hXf3ezr56e6n/Zv3j74b+2d1wa+GoGiUA8nIB6Et910CBjZAVmQQK81gub+iiGZYjUAayaE0lv4BmRW1ZdXwbJMi1/wjq0yChjF9DKfksfRzOk4SKMDKhUSz05J/ZiuljsJ9NJ/QlVb3FSTOoZheAWOSOmSHRT43QP/aE5xI9xc70Puz8pqq8NF7fgO/Xf24h6//u5EDwuHu3/Vs/8lY+af2Ku4QIhoji2vRZX4cBhWyItl76qTW1/1bqClIL7WhhTaakUt+kCg0yQemRx9aZln0yykwP7l993c/7N5fnm/2n798uHvzdDk/PUCS2WV61yCrddnvNdSxB1pHEyBz60t/qhSHPjpqZDMU9rK8t4HhEF88+bJt/7bZv/qFf3vx3W6pf3ogz8Fm3tkH1SzLedWQreCMRkUGcc2sy/cO645AVWaAqWSF5b2aaV3BhGlWo0rQ1/sIsKmLFpd0RS4zdTHPT8HGVy+v7+ih7HZC5wd8fqDD8v5Ubh5QqBcD7WU6LPMjqoDDpwUCh88p0Zf1grfzl+uvt9uHcz5/oLPnP3y2X+mxOaKn4CTXLEMkaeH/Ddw8PgfejtudfvPyBm8J4eez1f/gB8P/N//7fwKlha0A3o4jOwAAAABJRU5ErkJggg==",
"bcode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASAAAABzCAIAAAC3jEg6AAAGK0lEQVR4nO3cSWgTfRiA8TeaNGpj6gJWMFZIrVAXKrmIqFiJDT1pUTwIRcEePKQnF0Q81JsH6c1qwZPkUJEKgiLi2rhUBDFipbhUEaVougiKmqaNme8wfCFfE9Ms8yqffX43Z97M/GfoQ9Jp0GYYhgDQMeNPLwD4mxEYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoMg+5YTNZkv/p/nVqtTG9G9aZd1Y0NEyd/3qCDmWkfVcqYH0l5e+NmuPlvUIWa80x3Gy7so9k2Nj1svJsav0F+a+0il/tApaW9YZSxaTwjsYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoIjAAEUEBigiMEARgQGKCAxQRGCAIgIDFBEYoIjAAEUEBiiyGYbxp9cA/LV4BwMUERigiMAARQQGKCIwQBGBAYoIDFBEYIAiAgMUERigiMD+49ChQ7acWltbRWRkZCT3QEooFNq4caPb7Xa73T6f7+jRo69evSroXKbHjx83NjZWVFS43e6GhoaHDx9mLr70mXg8fuHChW3btnm9XqfTWVlZuWvXrkgkUvqNnb4MpDl48GDu2xUMBg3DGB4ezj1g2r9/f+bAkiVLCjqXYRiPHj1yOp3puxwOx927d9NXbsnM2bNnM5fhcDguX76sdMP/egSWS3l5uYhMTExM2m4Glkolq9u3b4tIeXl5Z2fnx48fv3///vz581OnTgUCgYLOZRiGz+cTkebm5k+fPg0NDbW0tIjIqlWrksmktTOhUGjHjh3d3d2vX7/+8eNHX19fIBAQkcWLF2ddGKZEYLmUEtiBAwdEpL29vcRzPXnyREQ8Hk88Hje3TExMeL1eEXnw4IG1M5m+fPnicrlEJBKJ5HkhSMfvYFq+ffsmIjU1NSUeJxwOi0hTU1NZWZm5xW6379y5U0Tu3Llj7Uwmt9ttRphMJku8kOmJwLSsXLlSRDo7O83SimY+FFmzZk36xrq6utQuC2cyxePxd+/ezZs3b/Xq1aVcxbRFYMUbHBzMfPR37do1c29LS0tVVdXVq1erqqp2797d0dHx4sWLIs4yOjoqIpWVlekbFy1alNpl4Uym9vb2r1+/HjlyJPW+h4IQmBaXy9Xb27tnz55YLHb+/PnW1tba2tpNmzb19fUVdJyxsTERKSsrGxwc9Hq9y5Yte/v2rfkwMBaLWTszSTgcbmtrq6+vP3z4cHE3AQRWvKwPORobG9MHzp07Nzo6euPGjba2trq6uvv379fX14+MjOR/llmzZonI+Ph4MplMJBLmE794PC4is2fPtnYm3dOnT5uammpqai5evDhz5syi7hAITN+cOXO2bt16/PjxSCQSDAY/f/7c0dGR/8sXLlwoItFodOnSpe/fv//w4UN1dfXQ0FBql4UzKf39/Q0NDRUVFdevX1+wYEGJd2A6I7Dfx2az7d27V0T6+/vzf9WKFStEZNIHy2fPnqV2WThjevnypd/vdzgct27d8ng8+S8VmQjstzKf182YUcBt37x5s4hcunRpfHzc3JJIJLq7u0Vky5Yt1s6IyMDAgN/vTyQSN2/erK6uLvZC8a/f/He3/5dS/tB8+vTpffv2XblyZWBgIBaLRaPRUChkfhg7c+ZM/ucyDGPt2rUi0tzcHI1Gh4eHzW9g1NbW/vz509qZN2/eeDye+fPn82dlqxBYLrkDy2rDhg3mzMmTJ7MOrFu3bmxsLP9zGYbR29s76TuEdru9p6fH8pljx4796rq6urqKu4fTHB8RtQSDwa6uru3bty9fvtzpdLpcLp/Pd+LEiZ6enkk/5VNav379vXv3AoHA3LlzXS6X3+8Ph8PmRz7LZ2At/mdfQBHvYIAiAgMUERigiMAARQQGKCIwQBGBAYoIDFBEYIAiAgMUERigiMAARQQGKCIwQBGBAYoIDFBEYICifwAnfbNqPTt/mgAAAABJRU5ErkJggg==",
"success": true
}
Если вставить полученный код в строке браузера, напримпр: "Crhome", то в результате получим изображение необходимого кода. Копировать необходимо без скобок, например: data:image/png;base64,iV…<body>…U5ErkJggg==
|
Получения PDF этикетки заказа
| protocol_method |
GET |
| method_name |
agent/print-renderer |
| method_params |
compile |
| get_params |
pid=<parcel_id> [, cell=<sort_cell_id>] |
| request_body |
---- |
| expected_result |
200 <pdf file data> |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/print-renderer/compile/kp?pid=30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2" --output test.pdf \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 18 Feb 2019 12:31:13 GMT
Content-Type: application/pdf
Content-Length: 35836
Connection: keep-alive
Content-Disposition: attachment; filename="tabata_58x81"
Vary: Accept-Encoding
Etag: "ab6ffba98c9ff360e5cbc4952ef99a7646e980cd"
Cache-Control: no-cache
Результатом выполнения запроса будет загрузка PDF в файл, указанный в --output
|
Состояние посылки
| protocol_method |
GET |
| method_name |
agent/parcel/track |
| method_params |
<PARCEL ID> |
| request_body |
---- |
| expected_result |
200 {"modified_at" : "<TIMESTAMP UTC>", "code" : "<CODE ID>", "geo" : [ <LATITUDE>, <LONGITUDE>], "success": true, "state_desc" : "<STATE DESCR>"} |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/codes/4d52c496-9137-4e8a-bb1b-56f378669ac0" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 11:43:01 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 302
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "ccbb8b78e88fca92e5d705649a731f736f74ee55"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"modified_at": "2018-12-12T10:42:49.430110+00:00",
"code": "PU0000",
"geo": [
0,
0
],
"success": true,
"state_desc": "Заявка зарегистрирована в системе"
}
История изменения состояний
| protocol_method |
GET |
| method_name |
agent/parcel/log |
| method_params |
<PARCEL ID> |
| request_body |
---- |
| expected_result |
200 {"<TIMESTAMP UTC>" : {"code" : "<CODE ID>", "geo" : [ <LATITUDE>, <LONGITUDE>], "state_desc" : "<STATE DESCR>"}, …, "success": true} |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/log/4d52c496-9137-4e8a-bb1b-56f378669ac0" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 11:43:01 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 302
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "ccbb8b78e88fca92e5d705649a731f736f74ee55"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"1542777583615": {
"code": "PU0001",
"geo": [
0,
0
],
"state_desc": "Отправление принято к доставке"
},
"1542880237734": {
"code": "PU0003",
"geo": [
0,
0
],
"state_desc": "В отделении"
},
"1543160738969": {
"code": "PU0007",
"geo": [
0,
0
],
"state_desc": "Доставлено"
},
"success": true
}
История изменения состояний всех посылок
| protocol_method |
GET |
| method_name |
agent/parcel/ |
| method_params |
logs |
| get_params |
ts_from=<TIMESTAMP UTC> [, ts_to=<TIMESTAMP UTC>, state=<PARCEL STATE>] |
| request_body |
---- |
| expected_result |
200 {"logs": [{"<TIMESTAMP UTC>" : {"code" : "<CODE ID>", "geo" : [ <LATITUDE>, <LONGITUDE>], "state_desc" : "<STATE DESCR>"}, "id": <PARCEL ID>}, {"<TIMESTAMP UTC>" : {…}, …}, …], "success": true} |
,
Временные параметры ts_from, ts_to задаются в формате timestamp UTS in miliseconds.
|
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/log/logs?ts_from=1542880237734&ts_to=1542880237734&state="PU0007" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 11:43:01 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 302
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "ccbb8b78e88fca92e5d705649a731f736f74ee55"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"logs": [
{
"1544628934289": {
"code": "PU0007",
"geo": [
0,
0
],
"state_desc": "Доставлено"
},
"id": "ad0a7e57-5932-4e6f-86c3-c72df9fb317f"
},
{
"1544628989049": {
"code": "PU0007",
"geo": [
0,
0
],
"state_desc": "Доставлено"
},
"id": "0d575a34-bc24-4a77-bee7-018657311581"
},
{
"1544628596582": {
"code": "PU0007",
"geo": [
0,
0
],
"state_desc": "Доставлено"
},
"id": "fba18a75-e47e-4ca7-b22e-53416baad354"
}
],
"success": true
}
Модификация зарегистрированой посылки
| protocol_method |
PUT |
| method_name |
agent/parcel/alter |
| method_params |
<PARCEL ID> |
| request_body |
{ "receiver": { "id": "<MK User ID>", "phone": <PHONE 380XXYYYYYYY>, "email" : "<USER EMAIL>", "first name" : <FIRST NAME>, "last_name": "<LAST NAME>"}, "delivery_type": "<DELIVERY TYPE>", "dest" : [ <LATITUDE>, <LONGITUDE>], "dest_apartment": "<APARTMENT>", "weight" : <WEIGHT GRAM as INTEGER>, "price" : <PRICE as DECIMAL(10,2)>, "cod_amount" : <PRICE as DECIMAL(10,2)>, "type" : "<TYPE CODE>:<CLASS CODE>", "note" : "<USER NOTE>", "contragent_id" : <CONTRAGENT ID>, "dimensions": [<WIDTH>, <HEIGHT>, <DEPTH>], "_comment" : "<SENDER’s comment>"} |
| expected_result |
202 {"success": true} |
Все ключи — опциональны, некоторые ключи имеют в зависимостях другие ключи: например dest связан с delivery_type, dest_apartment
|
Изменения применимы только для состояния Заявка зарегистрирована в системе (state == PU0000)
|
- Пример запроса/ответа
- Запрос
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/alter/0e1837e3-609f-4bc6-a121-3b21c0f11a5b" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"receiver": { "id": 0, "phone": "380667265627", "email": "bulikj@gmail.com", "first_name" : "Юлия", "last_name": "Верещак"}, "delivery_type": "W2W", "dest": ["50.405237", "30.679338"], "dest_apartment": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253","weight": 145, "price": 125, "cod_amount" : 0, "type": "fragile:A.PRP.NR.NA.S000", "note": "example information", "dimensions": [250, 400, 80], "_comment" : "test parcel"}'
- Ответ
-
HTTP/1.1 202 Accepted
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 12:15:53 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true
}
Если состояние отправления не позволяет выполнить запрос, будет получена ошибка с кодом 409 и сообщением {"message":"Inappropriate parcel state","success":false}
|
Модификация содержимого отправления
Добавление/обновление item
| protocol_method |
PUT |
| method_name |
agent/parcel/item/add |
| method_params |
<PARCEL ID> |
| request_body |
{"barcode": "<UNIQ BARCODE>", "sku": "<SUPPLIER SKU NAME>", "name": "<NAME>", "brand": "<BRAND>", "size": "<SIZE>", "quantity": <QUANTITY as INTEGER>, "weight": <WEIGHT GRAM as INTEGER>, "price": <PRICE as DECIMAL(10,2)>, "comment": "<OPTIONAL COMMENT>", "photos": [<OPTIONAL PHOTO_URL_LIST>]} |
| expected_result |
200 {"success": true} |
Параметры quantity, price, weight (gramm), photos, comment - опциональны
|
При добавлении item с тем же barcode, данные будут обновлены.
|
- Пример запроса/ответа
- Запрос
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/item/add/cc52d435-ba59-4d5f-982c-09e0ff9cacad" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"barcode": "123456789", "sku": "123_adidas_xl", "name": "Куртка", "brand": "Adidas", "size": "XS", "quantity": 1, "weight": 1500, "price": 2050, "photos": ["https://m3.ttest.net/imgw/loc/518939a431.jpg", "https://m4.test.net/imgw/325a9fa.jpg"]}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 14 Apr 2019 14:18:08 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
{
"success": true
}
Удаление item
| protocol_method |
PUT |
| method_name |
agent/parcel/item/del |
| method_params |
<PARCEL ID> |
| request_body |
{"barcode": "<UNIQ BARCODE>"} |
| expected_result |
200 {"success": true} |
- Пример запроса/ответа
- Запрос
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/item/del/cc52d435-ba59-4d5f-982c-09e0ff9cacad" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"barcode": "12345678910"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 14 Apr 2019 14:30:21 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
{
"success": true
}
Запрос на изменение посылки после принятия к доставке
| protocol_method |
PUT |
| method_name |
agent/parcel/update |
| method_params |
<PARCEL ID> |
| request_body |
{ "receiver": { "id": "<MK User ID>", "phone": <PHONE 380XXYYYYYYY>, "email" : "<USER EMAIL>", "first name" : <FIRST NAME>, "last_name": "<LAST NAME>"}, "price" : <PRICE as DECIMAL(10,2)>, "cod_amount" : <PRICE as DECIMAL(10,2)>} |
| expected_result |
202 {"success": true} |
receiver опциональный, cod_amount и paid_amount необходимо передавать парой, изменение возможно только в меньшую сторону по сравнению с начальным значением и доступно только для типов отправлений с COD
|
Запрос на модификацию возможен в состояних Принято к доставке (state == PU0001) и В отделении (state == PU0003)
|
- Пример запроса/ответа
- Запрос
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/update/30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"price" : 350, "cod_amount" : 299}'
- Ответ
-
HTTP/1.1 202 Accepted
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 13:45:30 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true
}
Подтверждение платежа
| protocol_method |
POST |
| method_name |
agent/parcel/paid |
| method_params |
<PARCEL ID> |
| request_body |
{ "amount": <PRICE as DECIMAL(10,2)>, "payment_id": "<ID as STRING>"} |
| expected_result |
200 {"success": true} |
Изменения не применимы для состояния Доставлено (state == PU0007)
|
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/paid/30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"amount": 299, "payment_id": "test0001"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 13:59:40 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true
}
Установка времени хранения посылки на отделении
| protocol_method |
PUT |
| method_name |
agent/parcel/ttl |
| method_params |
<PARCEL ID> |
| request_body |
{"ttl_days": <INTEGER>} |
| expected_result |
200 {"success": true} |
ttl_days возможно передать в диапазоне parcel: additional_data→>ttl_days, additional_data→>ttl_days_max OR additional_data→>ttl_days * 2
|
Максимальное время хранения и время хранения по умолчанию задается в настройках erp-токена при создании. Если выполнение запроса завершилось ошибкой с кодом ответа 400 и сообщением (пример) {"message": "{\"error\":\"ttl_days: not in range 10 20\"}", "success": false} - это значит, что превышено минимальное или максимальное время хранения.
|
- Пример запроса/ответа
- Запрос
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/ttl/30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"ttl_days": 11}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3 6
Date: Wed, 12 Dec 2018 15:30:18 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true
}
Пометка посылки к отмене на отделении
| protocol_method |
PUT |
| method_name |
agent/parcel/mark-cancel |
| method_params |
<PARCEL ID> |
| request_body |
---- |
| expected_result |
200 {"success": true} |
- Пример запроса/ответа
- Запрос
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/mark-cancel/30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 16:09:54 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true
}
Проверка условий доставки для посылки перед регистрацией
| protocol_method |
POST |
| method_name |
agent/parcel/delivery-check |
| method_params |
---- |
| request_body |
{"delivery_type": <DELIVERY TYPE>, "dest" : [ <LATITUDE>, <LONGITUDE>], "weight" : <WEIGHT GRAM as INTEGER>, "price" : <PRICE as DECIMAL(10,2)>, "type" : "<TYPE CODE>"} |
| expected_result |
200 {"success": true, "transfer_via": "<office_id>", "route_mark": "<mark>"} |
|
В случае каких-либо ошибок валидации параметров будет возвращен статус 400 с описанием ошибки. "route_mark" будет отображен при типе доставки "курьерская доставка" |
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/delivery-check" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"delivery_type": "W2W", "dest" : ["50.405237", "30.679338"], "weight" : 10000, "price" : 23000, "type" : "undef:A.COD.NR.NA.S000"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 16:34:19 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 73
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"transfer_via": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"success": true
}
Отделения и адреса
Получения данных отделений
| protocol_method |
GET |
| method_name |
offices |
| get_params |
<lang> |
| request_body |
---- |
| expected_result |
200 { "offices": [ { "id": "<OFFICE ID>", "name": "<OFFICE NAME>", "descr": "<OFFICE LONG NAME>", "number": <OFFICE NUMBER>, "phone": "<OFFICE PHONE>", "email": "<OFFICE EMAIL>", "address": { <ADDRESS SPEC> }, "address_data": { "index": "<POST CODE>", "floor": <NUM>, … <OPTIONAL OTHER DATA> }, "schedule": { "1": "<OPEN_TIME-CLOSE_TIME | STATUS>", "2": "<OPEN_TIME-CLOSE_TIME | STATUS>", … "7": "<OPEN_TIME-CLOSE_TIME | STATUS>", }, "optimal_hours": {<OPTIMAL WORKING HOURS>}, "photos": ["<PHOTO URL>", …], "way_photos": ["<PHOTO URL>", …], "pay_cash": true|false, "pay_card": true|false, "additional_data": { "sms_addr": "<SMS ADDRESS>", "code_prefix": "<OFFICE CODE PREFIX>", "label": "<OFFICE LABEL>" }, "ui_address": "<ADDRESS LINE>" }, ….. ], "success": true } |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/offices?lang=ru" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 15 Dec 2018 13:49:42 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 28454
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "7a90a5c1837fa48d07b1e2a6eb67ebdd2b0540be"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"offices": [
{
"address_data": {
"index": "61161",
"floor": 1
},
"name": "Харьков, Отделение №1",
"descr": "Харьков, №1. ул. Академика Павлова, 323 (ориентир - автостанция)",
"schedule": {
"1": "09:00-21:00",
"2": "09:00-21:00",
"3": "09:00-21:00",
"4": "09:00-21:00",
"5": "09:00-21:00",
"6": "09:00-21:00",
"7": "09:00-21:00"
},
"optimal_hours": {},
"number": 1,
"photos": [],
"id": "93ccfdec-f886-4f1c-9d04-6d1d8ef502f3",
"pay_cash": true,
"phone": "380112000001",
"email": "harkov_1@tbt-post.net",
"way_photos": [],
"address": {
"lang": "ru",
"city": "Харьков",
"building": "323",
"area": "Харьковский городской совет",
"country": "UA",
"region": "Харьковская область",
"lon": 36.337401,
"geo_object": {},
"addr_type": "cc_office",
"note": "№1",
"modified_at": "2017-06-15T11:10:02.140775+00:00",
"street": "улица Академика Павлова",
"geo_source": "yandex",
"lat": 50.027012,
"id": "2d741b70-51bb-11e7-b609-0fc3a07cbedf",
"accuracy": "exact"
},
"services": [],
"additional_data": {
"label": "Харьков-1",
"code_prefix": "TJ",
"sms_addr": "Harkov, ul. Akademika Pavlova 323, 09:00-21:00"
},
"ui_address": "м.Харків, вулиця Академіка Павлова 323",
"pay_card": false
},
{
"address_data": {
"index": "03150",
"place": "ст. м. Бориспольская, БЦ modnaVilla",
"floor": 1
},
"name": "Киев, Отделение №1",
"descr": "№1. Харьковское шоссе, 201/203, БЦ modnaVilla, 1 этаж",
"schedule": {
"1": "09:00-21:00",
"2": "09:00-21:00",
"3": "09:00-21:00",
"4": "09:00-21:00",
"5": "09:00-21:00",
"6": "09:00-21:00",
"7": "09:00-21:00"
},
"optimal_hours": {},
"number": 1,
"photos": [
"csc_photos/4a3ad637c9ab45d0a034d2b3d8abae6b.jpg"
],
"id": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"pay_cash": true,
"phone": "380110000001",
"email": "kiev_1@tbt-post.net",
"way_photos": [],
"address": {
"lang": "ru",
"city": "Киев",
"building": "201-203к1А",
"area": null,
"country": "UA",
"region": "Киев",
"lon": 30.679338,
"geo_object": {},
"addr_type": "cc_office",
"note": "№1",
"modified_at": "2016-10-04T10:33:54.383917+00:00",
"street": "Харьковское шоссе",
"geo_source": "yandex",
"lat": 50.405237,
"id": "0c722922-8a1e-11e6-8a66-b356fd9f196a",
"accuracy": "exact"
},
"services": [],
"additional_data": {
"code_prefix": "T1",
"label": "Киев-1"
},
"ui_address": "м.Київ, Харківське шосе 201-203к1А",
"pay_card": false
}
],
"success": true
}
| В теле json ответа в указанном примере включены не все отделения. |
Получение данных адреса из справочника
| protocol_method |
GET |
| method_name |
address |
| get_params |
<lang, <lat,lon> | <region,city,street,building>> |
| request_body |
---- |
| expected_result |
200 {"success": true, "lang": "<LANG>", "city": "<CITY>", "building": "<BUILDING>", "area": "<ADDRESS AREA or null>", "country": "<COUNTRY CODE>", "region": "<CITY REGION or null>", "lon": <LONGITUDE>, "lat": <LONGITUDE>, "id": "<SHIPPING ADDRESS ID>", "note": "<TEXT or null>", "modified_at": "<TIMESTAMP UTC>", "street": "<STREET>", "addr_type": "<TYPE ID>", "accuracy": "<ADDRESS ACCURACY>", "geo_source": "<google|yandex|osm>", "geo_object": {<ADDITIONAL GEO DATA>}} |
в качестве get-параметров указывается либо пара гео-координат, либо cоставные части адреса region, city, street, building
|
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/address?region=%D0%9A%D0%B8%D0%B5%D0%B2&city=%D0%9A%D0%B8%D0%B5%D0%B2&street=%D0%A5%D0%B0%D1%80%D1%8C%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B5%20%D1%88%D0%BE%D1%81%D1%81%D0%B5&building=201-203"\
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 15 Dec 2018 14:53:29 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 525
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "252fb40a97403595bcea1297618cb1432d54adb7"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"lang": "uk",
"city": "Київ",
"building": "201/203",
"success": true,
"area": "місто Київ",
"country": "UA",
"region": null,
"lon": 30.6817834,
"geo_object": {},
"id": "afea6db6-0074-11e9-a8b4-1f50ad4e3573",
"note": null,
"modified_at": "2018-12-15T14:21:17.909359+00:00",
"street": "Харківське шосе",
"geo_source": "google",
"lat": 50.4035667,
"addr_type": "regular",
"accuracy": "exact"
}
|
Используемое кодирование для кирилицы в запросе - UTF-8 В ответе - текст закодированный функцией escape |
Пользователи
Регистрация пользователя
| protocol_method |
POST |
| method_name |
agent/user/new |
| method_params |
---- |
| request_body |
{ "email": "<EMAIL>", "phone": "<PHONE>", "first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "gender": "male|female|undef", "birthday": "1970-01-01", "company": { "name": "<COMPANY NAME>", "reg_id": "<REG ID>", "tax_id": "<TAX ID>", "type": "company|pe" } } |
| expected_result |
200 { "user_id": "<USER ID>", "success": true } |
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/agent/user/new" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{ "email": "example@gmail.com", "phone": "380666666666", "first_name": "test", "last_name": "user", "gender": "undef", "birthday": "1980-01-01", "company": { "name": "TestCompany", "reg_id": "12345", "tax_id": "321654", "type": "company" } }'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 20 Dec 2018 14:40:11 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 68
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"user_id": "cf8b0967-f1d3-4e53-aa48-297940415263",
"success": true
}
Поиск пользователя
- protocol_method
-
GET
- method_name
-
agent/user/find
- get_params
-
phone, reg_id, tax_id, company
- request_body
-
----
- expected_result
-
200 {"users": [{"first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "company": {"name": "<COMPANY NAME>", "modified_at": "2018-07-10T09:15:52.366826+00:00", "reg_id": "<REG ID>", "type": "company", "tax_id": "<TAX ID>"}, "email": "<EMAIL>", "phone": "PHONE", "id": "<USER ID>"}], "success": true}
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/user/find?phone=380666666666®_id=12345&tax_id=321654&company=TestCompany" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 24 Dec 2018 18:21:05 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 319
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "9c6365dc6d23240c8fa56d9677d5e9ac2f99644f"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"users": [
{
"first_name": "test",
"last_name": "user",
"company": {
"reg_id": "12345",
"modified_at": "2018-12-20T14:40:10.979426+00:00",
"type": "company",
"name": "TestCompany",
"tax_id": "321654"
},
"email": "example@gmail.com",
"phone": "380666666666",
"id": "cf8b0967-f1d3-4e53-aa48-297940415263"
}
],
"success": true
}
Контрагенты
Регистрация контрагента
| protocol_method |
POST |
| method_name |
agent/contragent |
| method_params |
---- |
| request_body |
{"name": "<CONTRAGENT NAME>", "reg_id": "<REGISTRATION ID>", "tax_id": "<TAX ID>", "vat": <VALUE ADDED TAX (INT(%))>, "bank_name": "<BANK NAME>", "bank_mfo": "<BANK MFO CODE>", "bank_account": "<ACCOUNT ID>"} |
| expected_result |
200 {"id" : "<CONTRAGENT ID>", "success": true} |
|
Параметры: После регистрации контрагента, необходим запрос почтой на его активацию. |
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/agent/contragent" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"name": "TestAgent LLC", "reg_id": "65465465", "tax_id": "545468", "vat": 15, "bank_name": "ExampleInternational", "bank_mfo": "358697", "bank_account": "2168777"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 12 Dec 2018 12:41:38 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 63
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"id": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"success": true
}
Модификация контрагента
| protocol_method |
PUT |
| method_name |
agent/contragent |
| method_params |
<CONTRAGENT ID> |
| request_body |
{"name": "<CONTRAGENT NAME>", "reg_id": "<REGISTRATION ID>", "tax_id": "<TAX ID>", "vat": <VALUE ADDED TAX (INT(%))>, "bank_name": "<BANK NAME>", "bank_mfo": "<BANK MFO CODE>", "bank_account": "<ACCOUNT ID>"} |
| expected_result |
200 {"success": true} |
| Все ключи являются опциональными |
| После модификации контрагента сбрасывается статус активации, и необходимо отправлять запрос активации заново |
- Пример запроса/ответа
- Запрос
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/agent/contragent/e8459d69-e3bc-41bc-978d-28d6c6abda38" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk" \
-d '{"name": "Testcontragent LLC"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 20 Dec 2018 14:59:25 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 17
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{"success": true}
Информация о контрагенте
| protocol_method |
GET |
| method_name |
agent/contragent |
| method_params |
<CONTRAGENT ID> |
| request_body |
---- |
| expected_result |
200 {"success": true, "name": "<CONTRAGENT NAME>", "reg_id": "<REGISTRATION ID>", "tax_id": "<TAX ID>", "vat": <VALUE ADDED TAX INT(%)>, "bank_name": "<BANK NAME>", "bank_mfo": "<BANK MFO CODE>", "bank_account": "<ACCOUNT ID>", "enabled": <true|false>, "modified_at": <TIMESTAMP UTC>, "translations": [{"processor": <POS PROCESSOR>, "merchant_id": <POS MERCHANT ID>, {…}, …}]} |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/contragent/e8459d69-e3bc-41bc-978d-28d6c6abda38" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 20 Dec 2018 15:07:04 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 366
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "6f7149e70c1636e6270cd910279fc2e05f8abdb7"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"bank_name": "ExampleInternational",
"vat": 15,
"user_id": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"name": "Testcontragent LLC",
"success": true,
"modified_at": "2018-12-20T14:59:25.552359+00:00",
"translations": null,
"id": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"reg_id": 65465465,
"bank_mfo": 358697,
"bank_account": 2168777,
"enabled": false,
"tax_id": 545468
}
Справочник контрагентов
| protocol_method |
GET |
| method_name |
agent/contragent |
| method_params |
list |
| request_body |
---- |
| expected_result |
200 {"contragents": [{<CONTRAGENT SPEC>}, …], "success": true} |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/contragent/list" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
< Server: nginx/1.10.3
< Date: Sun, 23 Dec 2018 17:02:51 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 334
< Connection: keep-alive
< Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
< Access-Control-Max-Age: 600
< Etag: "729c4673864e1837373a30078de20909fec609ec"
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
< Access-Control-Allow-Headers: Content-Type
{
"contragents": [
{
"bank_name": "ExampleInternational",
"vat": 15,
"name": "Testcontragent LLC",
"modified_at": "2018-12-20T15:14:48.007045+00:00",
"translations": null,
"id": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"reg_id": 65465465,
"bank_mfo": 358697,
"bank_account": 2168777,
"enabled": false,
"tax_id": 545468
},
{
"bank_name": "ExampleInternational2",
"vat": 1,
"name": "Testcontragent2 LLC",
"modified_at": "2018-12-20T15:14:48.007045+00:00",
"translations": null,
"id": "e8459d69-e3bc-41bc-978d-28d6c6abda39",
"reg_id": 65465447,
"bank_mfo": 778697,
"bank_account": 9968777,
"enabled": false,
"tax_id": 545668
}
],
"success": true
}
Финансовые транзакции
Получение финансовой транзакции по id
| protocol_method |
GET |
| method_name |
agent/fin-transaction |
| method_params |
<TRANSACTION ID> |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true, "id": "<TRANSACTION ID>", "sender": "<SENDER USER ID>", "contragent": "<CONTRAGENT ID>", "processor": "<POS PROCESSOR TYPE>", "amount": <PRICE as DECIMAL(10,2), "trans_type": "<TRANSACTION TYPE: parcel|p2p>", "trans_ref": "<PARCEL ID>", "addidional_data": {"id": <POSORDER ID>, … < OTHER SPECIFIC DATA >}, "created_at": <TIMESTAMP UTC>, "modified_at": <TIMESTAMP UTC>, "completed_at": <TIMESTAMP UTC>, "is_completed": true|false, "is_appiled": true|false} |
На данный момент существуют только транзакции с trans_type == "parcel", в таком случае trans_ref ссылается на <PARCEL ID>
|
processor на данный момент может быть: fcs_term - оплата через терминал, _erp_api - оплата через вызов API agent/parcel/paid
|
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/fin-transaction/9060af07-169c-4376-ac18-20d073123180" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 24 Dec 2018 21:17:20 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 535
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "30a9ee68f228a07a6164fcd90b1063c9f29e1e3d"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"is_applied": false,
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"success": true,
"created_at": "2018-12-23T17:54:18.385932+00:00",
"contragent": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"modified_at": "2018-12-23T17:54:18.429628+00:00",
"processor": "_erp_api",
"completed_at": "2018-12-23T17:54:18.385932+00:00",
"amount": 299,
"trans_type": "parcel",
"id": "9060af07-169c-4376-ac18-20d073123180",
"trans_ref": "30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2",
"additional_data": {
"id": "test0004"
},
"extid": 166,
"is_completed": true
}
Получение списка финансовых транзакций за период
| protocol_method |
GET |
| method_name |
agent/fin-transactions |
| method_params |
---- |
| get_params |
ts_from=<TIMESTAMP UTC> [, ts_to=<TIMESTAMP UTC>, processor=fcs_term|_erp_api, contragent=<CONTRAGENT ID>, is_dirty=true limit=200, offset=0] |
| request_body |
---- |
| expected_result |
200 {"success": true, "transactions": [{<TRANSACTION SPEC>}, {<TRANSACTION SPEC>}, …], "total": <INTEGER>} |
Временные параметры ts_from, ts_to задаются в формате timestamp UTS in miliseconds. Параметр is_dirty указывает на получение транзакций, которые не синхронизированы с агентской системой в связи с какими-либо ошибками.
|
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/fin-transactions?ts_from=1543688645000&ts_to=1546194245000&processor=_erp_api&limit=200&offset=0" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 24 Dec 2018 21:26:20 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 3167
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "67f37817137afc911ea493d829aacb0dc20cc9ec"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"total": 2,
"success": true,
"transactions": [
{
"is_applied": false,
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"created_at": "2018-12-23T17:44:09.971429+00:00",
"contragent": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"modified_at": "2018-12-23T17:44:10.162860+00:00",
"processor": "_erp_api",
"completed_at": "2018-12-23T17:44:09.971429+00:00",
"amount": 299,
"trans_type": "parcel",
"id": "17a4e31d-4758-4d4e-8700-135bfa91fdad",
"trans_ref": "30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2",
"additional_data": {
"id": "TEST0001"
},
"extid": 163,
"is_completed": true
},
{
"is_applied": false,
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"created_at": "2018-12-12T13:59:40.263358+00:00",
"contragent": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"modified_at": "2018-12-12T13:59:40.265089+00:00",
"processor": "_erp_api",
"completed_at": "2018-12-12T13:59:40.263358+00:00",
"amount": 299,
"trans_type": "parcel",
"id": "5555b600-0b58-45fa-8183-2e901d476018",
"trans_ref": "30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2",
"additional_data": {
"id": "test0001"
},
"extid": 162,
"is_completed": true
}
]
}
Получение списка финансовых транзакций по посылке
| protocol_method |
GET |
| method_name |
agent/parcel/fin-transactions |
| method_params |
<PARCEL ID> |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true, "transactions": [{<TRANSACTION SPEC>}, {<TRANSACTION SPEC>}, …]} |
- Пример запроса/ответа
- Запрос
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/agent/parcel/fin-transactions/30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2" \
-H "Content-Type: application/json" \
-H "Authorization: Basic dG9rZW46cGFzc3dk"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 24 Dec 2018 18:24:57 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2635
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "df09d5fee730bd0a96873d24ac60d6cc806e8d1b"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"transactions": [
{
"is_applied": false,
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"created_at": "2018-12-23T17:54:18.385932+00:00",
"contragent": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"modified_at": "2018-12-23T17:54:18.429628+00:00",
"processor": "_erp_api",
"completed_at": "2018-12-23T17:54:18.385932+00:00",
"amount": 299,
"trans_type": "parcel",
"id": "9060af07-169c-4376-ac18-20d073123180",
"trans_ref": "30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2",
"additional_data": {
"id": "test0004"
},
"extid": 166,
"is_completed": true
},
{
"is_applied": false,
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"created_at": "2018-12-23T17:44:19.445261+00:00",
"contragent": "e8459d69-e3bc-41bc-978d-28d6c6abda38",
"modified_at": "2018-12-23T17:44:19.445966+00:00",
"processor": "_erp_api",
"completed_at": "2018-12-23T17:44:19.445261+00:00",
"amount": 299,
"trans_type": "parcel",
"id": "b26e547f-c7be-43b6-8dae-9ef8258f0b84",
"trans_ref": "30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2",
"additional_data": {
"id": "TEST0003"
},
"extid": 165,
"is_completed": true
}
]
}