Общая информация
Доступ к API осуществляется:
-
из всех мест вне локальной инфраструктуры - по протоколу HTTPS
Внешний доступ к текущему апи — https://api.tbt-post.net
Следующая версия апи — http://api-next.tbt-post.net
Версия для разработки — http://sandbox-api.tbt-post.net
Если явно не указаного обратного, по-умолчанию формат данных (content-type) подразумевается как application/json, кодировка (encoding/charset) UTF-8, использование BOM (ByteOrderMark для Windows клиентов) - отключено.
|
| Если явно не указано обратного, текстовые поля в структурах данных (как ключи, так и значения) — чувствительны к регистру (case sensitive) |
Формат URI для доступа к 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} |
опциональные параметры для метода/обработчика |
Также, в описании API используются:
| {protocol_method} |
HTTP метод |
| {request_body} |
описание формата тела запроса |
| {expected_result} |
описание формата возвращаемого в случае успеха результата в формате |
Форматы протокола
Формат обмена данными:
-
JSON - комплекскные формы и структуры данных
-
LINK PARAMS - параметризированный URI
-
REQUEST BODY - для передачи бинарных банных
-
REQUEST HEADER - для передачи заголовочной информации
Формат возвращаемого ответа:
HTTP Response Code + JSON payload
Типы данных
Для унификации работы с данными в различных использованных наборах инструментов приняты такие типы данных и таковая их трактовка:
| # | Название типа | Описание типа | Пример |
|---|---|---|---|
1 |
integer |
Целое число длиной 4 байта (32 бита) |
123456 |
2 |
long |
Целое число длиной 8 байт (64 бита) |
123456890 |
3 |
float |
Вещественное число с разделителем "." длиной 8 байт (64 бита) |
123456890.12 0.12345 |
4 |
string (text) |
Строка в формате unicode |
u'строка' |
5 |
datatime |
Дата и время в формате ISO 8601 (UTC+0) YYYY-MM-DDTHH:MM:SSZ |
2016-02-29T06:12:20Z |
6 |
boolean |
Логический тип |
true false |
7 |
Number/BigInteger |
Целое число длиной более 8 байт (>64 бит) |
174554483551928087757411873995522791996L |
8 |
uuid (UUID) |
Universally Unique Identifier — 16-байтный (128-битный) номер, передается в текстовой форме как hexadecimal representation в виде строки, в бинарной форме — как Number |
u'8351f87e-7b89-4503-bc9a-76add66f5a3c' 174554483551928087757411873995522791996L |
Система использует форматы UUID версий v0,v1,v2 и v4 (форматы v3 и v5 поддерживаются, но не используются)
|
В случае явного указания в API и/или протоколе версии для типа UUID, подразумевается использование исключительно указанной версии
|
Для хранения меток времени created_at,modified_at и т.п. используется uuid версии 1
HTTP Методы
При работе с API используются следующие HTTP методы для выполнения той или иной функции:
| # | Method | Описание |
|---|---|---|
1 |
GET |
Выборка данных, немодифицирующие запросы |
2 |
POST |
Создание данных |
3 |
PUT |
Обновление данных |
4 |
DELETE |
Удаление данных |
HTTP Статусы
Возвращаемые методами статусы должны следовать стандартам HTTP протокола в соответствии с IETF RFC7231
Основные используемые в системе коды приведены ниже:
| Code | Значение | Описание |
|---|---|---|
200 |
OK |
Запрос выполнен успешно. |
201 |
Created |
Запрос был выполнен, и, в результате, создан новый ресурс. Вновь созданный ресурс может быть, на который ссылается URI (ы) возвращается в объекте ответа, с самым конкретным URI для ресурса отдается в поле заголовка Location. Ответ СЛЕДУЕТ включить объект, содержащий список характеристик и местоположения (ы), из которых пользователь или агент пользователя может выбрать наиболее подходящий. Формат объекта определяется тип носителя приведены в Content-Type заголовка поля. Первоначальный сервер ДОЛЖЕН создать ресурс перед возвратом кода состояния 201. Если действие не может быть выполнено немедленно, сервер должен ответить 202 (Принято) вместо ответа. |
202 |
Accepted |
Запрос принят в обработку, но еще не завершен. Нет никаких гарантий, что запрос успешно выполнится в процессе обработки данных. Из-за асинхронного типа выполняемой операции отсутствует возможность повторной отправки статуса. |
204 |
No Content |
Запрос был успешно обработан, но нет необходимости возвращать какие-либо данные. Так же в ответе может возвращаться новая, или обновленная информация, однако в итоге она не будет отличаться о того, что было изначально послано на сервер и, таким образом, считается что клиент и так обладает актуальной информацией. |
301 |
Moved Permanently |
Запрашиваемому ресурсу был установлен новый URI и будущие обращения к этому ресурсу должны осуществляться по возвращенному URI. Клиенты с возможностью редактирования должны автоматически переопределить ссылки на Request-URI для одной или более новых ссылок, возвращенных сервером, где это возможно. Этот ответ является кэшируемы если не указано иное. |
304 |
Not Modified |
Если клиент выполнил условный запрос GET и доступ разрешен, но документ не был изменен, сервер должен ответить, используя этот код состояния. |
400 |
Bad Request |
Запрос не удалось обработать из-за синтаксической ошибки или ошибки протокола |
401 |
Not Unauthorized |
Запрос требует аутентификации пользователя. Ответ должен содердать WWW-Authenticate заголовок (раздел 14.47). Клиент может повторить запрос с корректным Authorization заголовком (раздел 14.8). Если запрос уже содержит информацию для авторизации, в таком случае 401 код ответа показывает, что авторизация была отклонена. |
403 |
Forbidden |
Сервер понял запрос, но отказывается его обрабатывать. Авторизация не поможет и этот запрос НЕ СЛЕДУЕТ повторять. |
404 |
Not Found |
Сервер не нашел по указанному URI никаких ресурсов. Нет никаких указаний о том, постоянное это состояние или нет. СЛЕДУЕТ использовать статус 410 (Gone), если серверу известно, что старый ресурс недоступен постоянно и у него нет адреса пересылки. |
409 |
Conflict |
Запрос нельзя обработать из-за конфликта в текущем состоянии ресурса. Этот код разрешается использовать только в тех случаях, когда ожидается, что пользователь может самостоятельно разрешить этот конфликт и повторить запрос. |
410 |
Gone |
Требуемый ресурс больше не доступен на сервере и адрес его расположения не известен. Предполагается, что это состояние постоянно. Клиентам с возможностью редактирования ссылки СЛЕДУЕТ удалить ссылки на запрошенный URL после подтверждения |
422 |
Unprocessable Entity |
Сервер понимает указанный вид данных, (т.е., статус 415 использовать нельзя), синтаксис запроса корректен (т.е. статус 400 использовать некорректно), однако содержащиеся в запросе инструкции нельзя выполнить ( Например, тело запроса синтаксически правильно, но содержит семантическую ошибку или некорректно обрабатывается нижним уровнем БД) |
429 |
Too Many Requests |
Возвращается баллансировщикам (т.е. исключительно внутренним/доверенным сервисам) в случае, когда сервис может самостоятельно оценить превышение нагрузки. В случае с внешними клиентами — задача оценки потока и блокирования трафика — целиком и полностью задача внешнего периметра системы. Т.о. данных статус — исключительно вспомогателен и должен использоваться с аккуратностью. |
500 |
Internal Server Error |
Сервер столкнулся с неожиданными условиями, которые не позволили ему обработать запрос. |
501 |
Not Implemented |
Сервер не поддерживает функциональных возможностей, необходимых для выполнения запроса. Это типичный ответ, когда сервер не понимает метод в запросе и не способен выполнить запрос для ресурса. Если же метод серверу известен, но он не применим к данному ресурсу, то нужно вернуть ответ 405. |
API
Все методы пользовательского api (<api base uri>/api/…) отдекорированы асинхронным методом @authenticated.
|
| Все методы api с префиксом op/ предназначены для операторского интерфейса, и требуют от пользователя соответствующих прав доступа. |
| методы, подразумевающие работу со структураци данных осуществляют базовою валидацию полей на стороне сервера |
Содержимое полей запроса в <> — указание на определенный тип поля
|
Для обозначения пустого (осутствующего) содержимого в описании используется ----. Использовать его как значение НЕ РЕКОМЕНДУЕТСЯ
|
| Для проверки запросов в командной строке/терминале, используйте User-Agent: curl, не ниже 7.47.0 |
Запросы без указания -H "Authorization можно выполнить без регистрации.
|
| Для запросов требующих авторизации учетной записи, в т.ч с правами оператора [/op], будут использованы HTTP cookies |
| Используемое кодирование для кирилицы и спец символов в GET запросах - UTF-8 В ответе - текст закодированный функцией escape |
| Поле | тип | Описание | Пример |
|---|---|---|---|
USER ID |
text |
ID пользователя в системе (UUID в текстовом виде) |
"3ea7a7b6-5623-48ba-9fb7-1bcfd4c15fa7" |
USER EMAIL |
text |
Почтовый адрес пользователя (используется в качестве login) |
|
USER PASSWORD, NEW PASSWORD, OLD PASSWORD |
text |
Пароль пользователя в открытом виде |
"123456" |
PHONE |
text |
Телефон пользователя в формате 380XXYYYYYYY |
"380997788999" |
FIRST NAME |
text |
Имя пользователя |
"Иван" |
LAST NAME |
text |
Фамилия пользователя |
"Иванов" |
GENDER |
text |
Пол пользователя (словарный тип: 'undef','male','female') |
"male" |
OTC |
text |
Одноразовый код (обычно - UUID в текстовом виде) |
"046e053c-c35c-408f-a422-9fe20f50c35b" |
true/false |
boolean / text |
Логический флаг. Может передаваться как boolean или как строковой литерал словарного типа 'true'/'false' (строковая форма — предпочтительнее по причине лучшей совместимости с разными типами протоколов и серверного ПО) |
true / "true" |
USER RATE |
long |
Совокупный показатель рейтинга пользователя в системе |
123456789 |
BIRTHDAY |
text |
Дата рождения пользователя в формате YYYY-MM-DD или null (как тип) |
"2000-01-02" |
TIMESTAMP UTC, TIMESTAMP LOCAL |
text |
Временная метка в текстовом представлении ISO формата. UTC/LOCAL — без/с учетом локальной временной зоны |
"2016-08-12 15:30:21.341210+00:00" |
USER SOURCE |
text |
Источник создания пользователя (собственный или из внешнего API, словарный тип: 'local','kasta' |
"kasta" |
USER ROLE |
text |
Роль(-и) пользователя в системе (словарный тип: 'guest', 'user', 'agent', 'courier', 'forwarder', 'operator', 'officer', 'manager', 'analyst', 'op_support', 'techician', 'admin') |
"user" |
LANG |
text |
Источник создания пользователя (собственный или из внешнего API, словарный тип: 'en','ru','uk' |
"uk" |
Регистрация
Создание пользователя
| protocol_method |
POST |
| method_name |
user/reg |
| method_params |
---- |
| request_body |
{"email":"<USER EMAIL>","password":"<USER PASSWORD>", "phone": "<PHONE 380XXYYYYYYY>", "first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "gender": "<GENDER>", "prefered_lang" : "<LANG>"} |
| expected_result |
200 {"success": true} |
поле prefered_lang является опциональным и, по-умолчанию, заполняется при создании пользователя в значение языка пользовательского интерфейса.
|
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/user/reg" \
-H "Content-Type: application/json" \
-d '{"email":"examplemail1@exampledomain.io","password":"examplepass", "phone": "380666666667", "first_name": "Vasia", "last_name": "Pipkin", "gender": "male", "prefered_lang" : "ru"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 12 Jan 2019 13:20:37 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 |
op/user/reg |
| method_params |
---- |
| request_body |
{"email":"<USER EMAIL>", "phone": "<PHONE 380XXYYYYYYY>", "first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "gender": "<GENDER>", "prefered_lang" : "<LANG>", "activate": <true/false>} |
| expected_result |
200 {"success": true, "id": <USER ID>} |
Если параметр activate false (по-умолчанию), пользователь будет создан с флагом is_poor, если true, то новый пользователь будет активирован.
|
| Обычно запрос ипользуется для служебных целей. |
- Пример запроса/ответа
- Запрос
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/user/reg" \
-b cookie-jar.txt \
-H "Content-Type: application/json" \
-d '{"email":"examplemail2@exampledomain.io", "phone": "380666666668", "first_name": "Sara", "last_name": "Pipkin", "gender": "female", "prefered_lang" : "ru", "activate": false}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 12 Jan 2019 14:01:19 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": "75c755df-f40a-4c85-a42b-e3c1ddeec93a",
"success": true
}
Потдтверждение регистрации
Запрос ОТС
| protocol_method |
POST |
| method_name |
otc |
| method_params |
new |
| request_body |
{"otc_type": "REGISTRATION", "email": "<USER EMAIL>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/new" \
-H "Content-Type: application/json" \
-d '{"otc_type": "REGISTRATION", "email": "examplemail2@exampledomain.io"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 12 Jan 2019 14:17:50 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 |
otc |
| method_params |
validate |
| request_body |
{"otc_type": "REGISTRATION", "otc": "<OTC>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/validate" \
-H "Content-Type: application/json" \
-d '{"otc_type": "REGISTRATION", "otc": "046e053c-c35c-408f-a422-9fe20f50c35b"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 16 Jan 2019 13:38:19 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 |
auth |
| method_params |
login |
| request_body |
{"username":"<USER EMAIL>","password":"<USER PASSWORD>", "remember_me": "<true/false>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST https://sandbox-api.tbt-post.net/api/v1/auth/login \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"username":"examplemail1@exampledomain.io","password":"examplepass","remember_me":"true"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 12 Jan 2019 15:17:55 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 37
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Set-Cookie: TBT_AUTH="2|1:0|10:1547646244|8:TBT_AUTH|48:ODBkYTFkY2EtOThkMy00ODVjLWI4Y2YtOTE4M2MxMDYzMzQ0|9e9a3f3ac84bb2d8ebba1f75ed94ea6898ccf5b4dac2e2bf7faae3772c218685"; Domain=.tbt-post.net; expires=Fri, 15 Feb 2019 15:57:24 GMT; Path=/
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"roles": []
}
Выход
| protocol_method |
GET |
| method_name |
auth |
| method_params |
logout |
| get_params |
[mode=full|other|self] |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/auth/logout?mode=full" \
-H "Content-Type: application/json"
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 12 Jan 2019 15:21:15 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
Cache-Control: no-cache, no-store, must-revalidate
Etag: "484b3032619fa1acd135d114565b0a5166281c22"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true
}
| параметр | тип |
|---|---|
self |
по-умолчанию, выход из текущей сессии |
full |
завершение всех сессий |
other |
завершение других сессий, кроме собственной |
Восстановление пароля
Запрос ОТС
| protocol_method |
POST |
| method_name |
otc |
| method_params |
new |
| request_body |
{"otc_type": "RESTORE_PASSWORD", "email": "<USER EMAIL>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/new" \
-H "Content-Type: application/json" \
-d '{"otc_type": "RESTORE_PASSWORD", "email": "examplemail1@exampledomain.io"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 16 Jan 2019 13:53:09 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 |
otc |
| method_params |
validate |
| request_body |
{"otc_type": "RESTORE_PASSWORD", "otc": "<OTC>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/validate" \
-H "Content-Type: application/json" \
-d '{"otc_type": "RESTORE_PASSWORD", "otc": "1a0fd578-fa4b-435d-9f8f-8933d4528f45"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 16 Jan 2019 14:15:35 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
}
- Если ОТС не проходит валидацию, ответ будет выглядеть так
{
"message": "Invalid OTC",
"success": false
}
Изменение пароля
| protocol_method |
POST |
| method_name |
user/profile |
| method_params |
password |
| request_body |
{"new_password": "<NEW PASSWORD>", "otc": "<OTC>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/user/profile/password" \
-H "Content-Type: application/json" \
-d '{"new_password": "examplepass-new", "otc": "498c9940-4720-40bd-83b2-4edbbed5ed76"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 16 Jan 2019 14:09:20 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 0
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 |
user/profile |
| method_params |
password |
| request_body |
{"new_password": "<NEW PASSWORD>", "old_password": "<OLD PASSWORD>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/user/profile/password" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{"new_password": "examplepass", "old_password": "examplepass-new"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 16 Jan 2019 17:09:29 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 |
user/profile |
| method_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true, "first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "is_external": <true/false>, "phone": "<PHONE 380XXYYYYYYY>", "gender": "<GENDER>", "created_at": "<TIMESTAMP UTC>", "activated_at": "TIMESTAMP UTC", "modified_at": "TIMESTAMP UTC", "password_changed": "TIMESTAMP UTC", "additional_data": {}, "is_active": <true/false>, "sourced_by": "<USER SOURCE>", "rate": <USER RATE>, "birthday": <BIRTHDAY>, "id": "<USER ID>", "is_poor": <true/false>, "is_disabled": <true/false>, "email": "<USER EMAIL>", …} |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/user/profile" \
-H "Content-Type: application/json" \
-b cookie-jar.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 13 Jan 2019 10:29:00 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 953
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "03aceef3d3ae3b3eb91cda7ebfa1677c4838dcc5"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"last_name": "Pipkin",
"confirmed_at": null,
"rate": 0,
"roles": [],
"id": "6cca769e-f380-4385-805c-84232c51a60c",
"first_name": "Vasia",
"is_confirmed": false,
"is_phone_valid": false,
"email": "examplemail1@exampledomain.io",
"parent": null,
"is_disabled": false,
"activated_at": "2019-01-16T13:38:19.206955+00:00",
"is_active": true,
"password_changed": "2019-01-16T17:09:29.347996+00:00",
"phone": "380666666667",
"birthday": null,
"confirmed_by": null,
"is_external": false,
"nsid": 0,
"sourced_by": "local",
"gender": "male",
"created_at": "2019-01-12T13:20:35.009201+00:00",
"modified_at": "2019-01-16T17:09:29.031432+00:00",
"success": true,
"is_badge": false,
"is_poor": false,
"additional_data": {
"prefered_lang": "ru",
"last_login": "2019-01-16T17:08:07.319400+00:00"
}
}
Обновление собственного профиля
| Неактуальные для контекста поля — игнорируются. Передавать можно только часть параметров из набора. |
| protocol_method |
PUT |
| method_name |
user/profile |
| method_params |
---- |
| request_body |
{"first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "gender": "<GENDER>", "birthday": "<YYYY-MM-DD>", "prefered_lang": "<LANG>"} |
| expected_result |
202 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/user/profile" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{"first_name": "Vasilii", "last_name": "Pypkin", "gender": "male", "birthday": "1980-10-20", "prefered_lang": "ru"}'
- Ответ
-
HTTP/1.1 202 Accepted
Server: nginx/1.10.3
Date: Wed, 16 Jan 2019 17:18:50 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 |
user/resolve |
| method_params |
<USER ID> |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true, "id": "<USER_ID>," "first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "phone": "<PHONE 380XXYYYYYYY>"} |
| Часть цифр номера телефона пользователя скрывается для обеспечения анонимности |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/user/resolve/6cca769e-f380-4385-805c-84232c51a60c" \
-H "Content-Type: application/json" \
-b cookie-jar.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 16 Jan 2019 17:23:28 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 136
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "22d3f11c1121b6ef294a79dcf02f533dd9076ba8"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"phone": "38066XXX6667",
"first_name": "Vasilii",
"last_name": "Pypkin",
"id": "6cca769e-f380-4385-805c-84232c51a60c",
"success": true
}
Получение базовых данных списка пользователей
| protocol_method |
GET |
| method_name |
user/resolve/list |
| method_params |
---- |
| get_params |
id[]=<USER ID>&id[]=<USER ID>&… |
| request_body |
---- |
| expected_result |
200 {"success": true, "users": [<USER RESOLVE>, <USER RESOLVE>, …]} |
Значение <USER RESOLVE> является таким же, как и выходные данные метода user/resolve/<USER ID>
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/user/resolve/list?id%5B%5D=6cca769e-f380-4385-805c-84232c51a60c&id%5B%5D=0d554821-c0ce-43d8-9823-d3ad8d0103fd" \
-H "Content-Type: application/json" \
-b cookie-jar.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 10:42:35 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: "8aaf42d18c0f6ab1afac029e64660293e9dc709e"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"users": [
{
"phone": "38066XXX6667",
"first_name": "Peter",
"last_name": "Abramovich",
"id": "6cca769e-f380-4385-805c-84232c51a60c"
},
{
"phone": "38050XXX0752",
"first_name": "Сара",
"last_name": "Абибок",
"id": "0d554821-c0ce-43d8-9823-d3ad8d0103fd"
}
],
"success": true
}
Получение профиля пользователя
| protocol_method |
GET |
| method_name |
op/user/profile |
| method_params |
<USER ID> |
| get_params |
<phone>/<email> |
| request_body |
---- |
| expected_result |
200 {"success": true, "first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "is_external": <true/false>, "phone": "<PHONE 380XXYYYYYYY>", "gender": "<GENDER>", "created_at": "<TIMESTAMP UTC>", "activated_at": "TIMESTAMP UTC", "modified_at": "TIMESTAMP UTC", "password_changed": "TIMESTAMP UTC", "additional_data": {}, "is_active": <true/false>, "sourced_by": "<USER SOURCE>", "rate": <USER RATE>, "birthday": <BIRTHDAY>, "id": "<USER ID>", "is_poor": <true/false>, "is_disabled": <true/false>, "email": "<USER EMAIL>", "roles": [<ROLES LIST>], …} |
user_id имеет более высокий приоритет
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/user/profile?email=examplemail1@exampledomain.io" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 08:35:55 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 813
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "bec27b54affb5363ee1afcf47720a73b93b55c8f"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"last_name": "Pypkin",
"confirmed_at": null,
"rate": 0,
"roles": [],
"id": "6cca769e-f380-4385-805c-84232c51a60c",
"first_name": "Vasilii",
"is_confirmed": false,
"is_phone_valid": false,
"email": "examplemail1@exampledomain.io",
"parent": null,
"is_disabled": false,
"activated_at": "2019-01-16T13:38:19.206955+00:00",
"is_active": true,
"password_changed": "2019-01-16T17:09:29.347996+00:00",
"phone": "380666666667",
"birthday": "1980-10-20",
"confirmed_by": null,
"block_status": null,
"is_external": false,
"nsid": 0,
"sourced_by": "local",
"gender": "male",
"created_at": "2019-01-12T13:20:35.009201+00:00",
"modified_at": "2019-01-16T17:18:50.255000+00:00",
"success": true,
"is_badge": false,
"is_poor": false,
"additional_data": {
"prefered_lang": "ru",
"last_login": "2019-01-16T17:08:07.319400+00:00"
}
}
Обновление профиля пользователя
| неактуальные для контекста поля — игнорируются. Передавать можно только часть параметров из набора. |
| protocol_method |
PUT |
| method_name |
op/user/profile |
| method_params |
<USER ID> |
| request_body |
{"first_name": "<FIRST NAME>", "last_name": "<LAST NAME>", "gender": "<GENDER>", "birthday": "<YYYY-MM-DD>", "prefered_lang": "<LANG>"} |
| expected_result |
202 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/op/user/profile/6cca769e-f380-4385-805c-84232c51a60c" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"first_name": "Peter", "last_name": "Abramovich", "gender": "male", "birthday": "1985-05-05", "prefered_lang": "en"}'
- Ответ
-
HTTP/1.1 202 Accepted
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 08:41:10 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 |
op/user/profile |
| method_params |
confirm |
| request_body |
{"user_id": "<USER ID>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/user/profile/confirm" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"user_id": "6cca769e-f380-4385-805c-84232c51a60c"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 08:44:02 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
}
Получение списка пользователей по id
| protocol_method |
GET |
| method_name |
op/user/list |
| method_params |
---- |
| get_params |
id[]=<USER ID>&id[]=<USER ID>&… |
| request_body |
---- |
| expected_result |
200 {"success": true, "users": [<USER PROFILE>, <USER PROFILE>, …]} |
Значение <USER PROFILE> является таким же, как и выходные данные метода op/user/profile/<USER ID>
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/user/list?id%5B%5D=6cca769e-f380-4385-805c-84232c51a60c&id%5B%5D=0d554821-c0ce-43d8-9823-d3ad8d0103fd" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 10:47:04 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1565
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "6a44d9ea2b31f9974f50d93e413fc4e44648e97a"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"users": [
{
"last_name": "Abramovich",
"confirmed_at": "2019-01-17T08:44:01.981119+00:00",
"rate": 0,
"id": "6cca769e-f380-4385-805c-84232c51a60c",
"first_name": "Peter",
"is_confirmed": true,
"is_phone_valid": false,
"email": "examplemail1@exampledomain.io",
"parent": null,
"activated_at": "2019-01-16T13:38:19.206955+00:00",
"is_active": true,
"password_changed": "2019-01-16T17:09:29.347996+00:00",
"phone": "380666666667",
"birthday": "1985-05-05",
"confirmed_by": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"is_external": false,
"block_status": null,
"roles": null,
"nsid": 0,
"sourced_by": "local",
"gender": "male",
"created_at": "2019-01-12T13:20:35.009201+00:00",
"modified_at": "2019-01-17T08:44:01.981201+00:00",
"is_badge": false,
"is_poor": false,
"additional_data": {
"prefered_lang": "ru",
"last_login": "2019-01-16T17:08:07.319400+00:00"
}
},
{
"last_name": "Абибок",
"confirmed_at": null,
"rate": 0,
"id": "0d554821-c0ce-43d8-9823-d3ad8d0103fd",
"first_name": "Сара",
"is_confirmed": false,
"is_phone_valid": false,
"email": "SaraAbibok@inbox.com",
"parent": null,
"activated_at": null,
"is_active": false,
"password_changed": null,
"phone": "380505005002,
"birthday": null,
"confirmed_by": null,
"is_external": false,
"block_status": null,
"roles": null,
"nsid": 0,
"sourced_by": "kasta",
"gender": "undef",
"created_at": "2016-12-10T04:06:19.100235+00:00",
"modified_at": "2016-12-10T04:06:19.100247+00:00",
"is_badge": false,
"is_poor": true,
"additional_data": {
"foreign_id": 1747577
}
}
],
"success": true
}
Поиск пользователей
| protocol_method |
GET |
| method_name |
op/user/search |
| method_params |
---- |
| get_params |
<user_model_field>,sort_by,sort_order,limit,offset |
| request_body |
---- |
| expected_result |
200 {"success": true, "users": [<USER PROFILE>, <USER PROFILE>, …], "total": <search_result_length>} |
| параметр | тип |
|---|---|
limit |
<num> |
offset |
<offset> |
sort_by |
<user_model_field> |
sort_order |
asc/desc |
<user_model_field> |
['first_name', 'last_name', 'gender', 'birthday', 'sourced_by', 'block_status', 'parent', 'confirmed_by', 'is_poor', 'is_active', 'is_external', 'is_phone_valid', 'is_confirmed'] |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/user/search?first_name=Test&last_name=User" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 08:50:38 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 784
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "8d811a61b639ba2f4ce704bd1106e5febada2f0e"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"total": 1,
"users": [
{
"last_name": "User",
"confirmed_at": null,
"rate": 0,
"id": "cf8b0967-f1d3-4e53-aa48-297940415263",
"first_name": "Test",
"is_confirmed": false,
"is_phone_valid": false,
"email": "example@example.com",
"parent": null,
"activated_at": "2016-10-12T08:22:08.871838+00:00",
"is_active": false,
"password_changed": "2019-01-12T15:04:06.391445+00:00",
"phone": "380666666666",
"birthday": "1980-01-01",
"confirmed_by": null,
"is_external": false,
"block_status": null,
"roles": null,
"nsid": 0,
"sourced_by": "local",
"gender": "male",
"created_at": "2016-10-12T08:22:08.871824+00:00",
"modified_at": "2019-01-12T15:04:06.073544+00:00",
"is_badge": false,
"is_poor": true,
"additional_data": {
"created_by": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680"
}
}
],
"success": true
}
Вход по номеру телефона
Запрос кода
приватная часть кода <SMS CODE> будет выслана на указанный в запросе номер в случае его актуальности и валидности
|
| protocol_method |
POST |
| method_name |
auth/phone |
| method_params |
new |
| request_body |
{"phone": "<PHONE 380XXYYYYYYY>" } |
| expected_result |
200 {"otc": "<OTC>", "success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/auth/phone/new" \
-H "Content-Type: application/json" \
-d '{"phone": "380666666667"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 08:54:42 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 64
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
{
"otc": "d346e741-473e-4edf-8a3f-903c3ac99f72",
"success": true
}
Авторизация
| protocol_method |
POST |
| method_name |
auth/phone |
| method_params |
login |
| request_body |
{"otc": "<OTC>", "sms_code": "<SMS CODE>", "remember_me": true|false} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/auth/phone/login" \
-H "Content-Type: application/json" \
-d '{"otc": "ec0b678e-728c-4465-a20e-91a6b1d1ea18", "sms_code": "303941890", "remember_me": true}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 11:11:36 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 30
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,
"roles": []
}
Изменение телефона
Запрос ОТС
| protocol_method |
POST |
| method_name |
otc |
| method_params |
new |
| request_body |
{"otc_type": "PHONE_CHANGE", "phone": "<PHONE 380XXYYYYYYY>" } |
| expected_result |
200 {"otc": "<OTC>", "success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/new" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{"otc_type": "PHONE_CHANGE", "phone": "380666666677"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 11:20:30 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 64
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
{
"otc": "5a266aaa-da39-404e-9c21-11207a1b47a6",
"success": true
}
| В запросе необходимо указывать необходимый для смены номер. |
Подтверждение
| protocol_method |
POST |
| method_name |
otc |
| method_params |
validate |
| request_body |
{"otc_type": "PHONE_CHANGE", "otc": "<OTC>", "sms_code": "<SMS CODE>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/validate" \
-H "Content-Type: application/json" \
-d '{"otc_type": "PHONE_CHANGE", "otc": "5a266aaa-da39-404e-9c21-11207a1b47a6", "sms_code": "872386376"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 11:33: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
}
Изменение email
Запрос ОТС
| protocol_method |
POST |
| method_name |
otc |
| method_params |
new |
| request_body |
{"otc_type": "EMAIL_CHANGE", "email": "<USER EMAIL>" } |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/new" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{"otc_type": "EMAIL_CHANGE", "email": "example@exampledomain.io" }'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 11:37:28 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 |
otc |
| method_params |
validate |
| request_body |
{"otc_type": "EMAIL_CHANGE", "otc": "<OTC>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/otc/validate" \
-H "Content-Type: application/json" \
-d '{"otc_type": "EMAIL_CHANGE", "otc": "8dfe3d63-a9b2-482a-9217-daae0b126f90"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 11:41: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
}
ACL
Роли пользоватлея
| protocol_method |
GET |
| method_name |
user |
| method_params |
roles |
| request_body |
---- |
| expected_result |
200 {"success": true, "roles": ["<USER ROLE>", …]} |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/user/roles" \
-H "Content-Type: application/json" \
-b cookie-jar.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 13 Jan 2019 10:45:00 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 100
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "cf70b22ea6546b1f69cb5fbc06b683d6932caf92"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"roles": [
"user",
"operator"
]
}
Посылки
Получение по id/code
| protocol_method |
GET |
| method_name |
[op/] 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>", "paid_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "type": <TYPE CODE>, "parent": <PARCEL ID or null>, "price": <PRICE as DECIMAL(10,2)>, "cod_amount": <PRICE 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>", "delivery_type": "<DELIVERY TYPE>", "additional_data": {…}, …} |
parcel_id имеет более высокий приоритет, чем code
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/parcel/4d52c496-9137-4e8a-bb1b-56f378669ac0" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 09:12:04 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1477
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "ab05045ba94b1887181caa4218bd241a30b5702f"
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": "TEST0002",
"weight": 1520,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "4d52c496-9137-4e8a-bb1b-56f378669ac0",
"paid_amount": 0,
"state": "PU0007",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 2500,
"checked_in_at": "2018-12-12T13:50:42.870075+00:00",
"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-12T13:51:10.483000+00:00",
"success": true,
"additional_data": {
"erp_token": "510ad08a-830e-46aa-ab63-dfade75a00a7",
"_receiver": {
"phone": "380666666666",
"first_name": "Test",
"last_name": "User",
"id": 0,
"email": "example@expmail.com"
},
"invoices": [
{
"origin": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"sms_notifications": 0.6,
"office_delivery": 24,
"owner": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"serial": "a6e96cc0-fe04-11e8-8a37-148b3fc90e15",
"main_transportation": 10.01,
"delivery_insurance": 16.25
}
],
"checked_in_loc": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"ttl_days_default": 15,
"ttl_days": 15
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 0,
"created_at": "2018-12-11T14:23:51.628901+00:00",
"goes_back": false
}
Получение графических кодов
| protocol_method |
GET |
| method_name |
[op/] parcel/codes |
| method_params |
<PARCEL ID> |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true, "qr": <IMAGE DATA URI>", "bcode": "<IMAGE DATA URI>"} |
DATA URI is according to RFC-2397: data:[<media type>][;base64],<data>
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/parcel/codes/4d52c496-9137-4e8a-bb1b-56f378669ac0" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 09:16:24 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,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",
"success": true
}
Если вставить полученный код в строке браузера, напримпр: "Crhome", то в результате получим изображение необходимого кода. Копировать необходимо без скобок, например: data:image/png;base64,iV…<body>…U5ErkJggg==
|
Поиск
| protocol_method |
GET |
| method_name |
op/parcel/search |
| method_params |
---- |
| get_params |
<<parcel_model_field>office_id/pentity/receiver_phone/sender_phone/participant_phone/sender_email/pattern_id/pattern_code/state[]/interval_from/interval_to> |
| request_body |
---- |
| expected_result |
200 { "parcels": [ { "additional_data": {…}, "address_id": "<SHIPPING ADDRESS ID>", "agent": "<USER ID>", "class": "<CLASS ID>", "closed_at": "<TIMESTAMP UTC>", "code": "<CODE-128>", "created_at": "<TIMESTAMP UTC>", "id": "<PARCEL ID>", "is_open": <true/false>, "is_paid": <true/false>, "modified_at": "<TIMESTAMP UTC>", "cod_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "paid_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "paid_at": "<TIMESTAMP UTC>", "parent": <PARCEL ID or null>, "price": <PRICE as DECIMAL(10,2)>, "receiver": "<USER ID>", "sender": "<USER ID>", "type": <TYPE CODE>, "weight": <WEIGHT GRAM as DECIMAL(10,6)>, "state": "<PARCEL STATE>", "transfer_via": "<OFFCIE ID>", "pentity": "<OFFICE ENTITY ID>", "delivery_type": "<DELIVERY TYPE>", … } ], "total": <search_result_length>, "success": true } |
| параметр | тип |
|---|---|
limit |
<num> |
offset |
<offset> |
sort_by |
<parcel_model_field> |
sort_order |
asc/desc |
<parcel_model_field> |
['sender', 'receiver', 'agent', 'parent', 'address_id', 'transfer_via', 'type', 'class', 'state', 'is_open', 'is_paid', 'goes_back'] |
office_id |
<uuid> |
pentity - рекурсивный поиск по ресурсу отделения |
<uuid> |
state[] |
<parcel state list> |
receiver_phone |
<phone> |
sender_phone |
<phone> |
participant_phone |
<phone> |
sender_email |
<email> |
pattern_id |
<like pattern> |
pattern_code |
<like pattern> |
interval_from |
<date-time> |
interval_to |
<date-time> |
interval_field |
created_at/modified_at/checked_in_at (default created_at) |
pentity_recur |
true/false - поиск рекурсивно по полю pentity |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/parcel/search?state=PU0007&interval_field=created_at&interval_from=2018-12-01&interval_to=2018-12-31" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 09:29:07 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 3098
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "5eb3fd5a38a07fe3247bb6871368e8b52d6bf29f"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"total": 2,
"parcels": [
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0002",
"weight": 1520,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "4d52c496-9137-4e8a-bb1b-56f378669ac0",
"paid_amount": 0,
"state": "PU0007",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 2500,
"checked_in_at": "2018-12-12T13:50:42.870075+00:00",
"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-12T13:51:10.483000+00:00",
"additional_data": {
"erp_token": "510ad08a-830e-46aa-ab63-dfade75a00a7",
"_receiver": {
"phone": "380667224455",
"first_name": "Vasia",
"last_name": "pipkin",
"id": 0,
"email": "pipkin@gmail.com"
},
"invoices": [
{
"origin": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"sms_notifications": 0.6,
"office_delivery": 24,
"owner": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"serial": "a6e96cc0-fe04-11e8-8a37-148b3fc90e15",
"main_transportation": 10.01,
"delivery_insurance": 16.25
}
],
"checked_in_loc": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"ttl_days_default": 15,
"ttl_days": 15
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 0,
"created_at": "2018-12-11T14:23:51.628901+00:00",
"goes_back": false
},
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0004",
"weight": 145,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2",
"paid_amount": 0,
"state": "PU0007",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 350,
"checked_in_at": "2018-12-12T14:08:44.447137+00:00",
"class": "A.COD.NR.NA.S000",
"pentity": null,
"transfer_via": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"nsid": 0,
"is_paid": false,
"modified_at": "2019-01-08T09:12:25.375000+00:00",
"additional_data": {
"erp_token": "510ad08a-830e-46aa-ab63-dfade75a00a7",
"_receiver": {
"phone": "380674552233",
"first_name": "Peter",
"last_name": "Abrmovich",
"id": 0,
"email": "Abrmovich@gmail.com"
},
"_dimensions": [
250,
400,
80
],
"invoices": [
{
"origin": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"sms_notifications": 0.6,
"office_delivery": 24,
"owner": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"serial": "0335d220-fe14-11e8-8a37-148b3fc90e15",
"main_transportation": 10.01,
"delivery_insurance": 5
}
],
"_comment": "test parcel",
"checked_in_loc": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"ttl_days_default": 10,
"is_weighed": true,
"ttl_days": 0,
"contragent_id": "e8459d69-e3bc-41bc-978d-28d6c6abda38"
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 299,
"created_at": "2018-12-12T13:39:28.729083+00:00",
"goes_back": false
}
],
"success": true
}
Получение посылок по списку id
| protocol_method |
GET |
| method_name |
op/parcel/list |
| method_params |
---- |
| get_params |
id[]=<PARCEL ID>&id[]=<PARCEL ID>&… |
| request_body |
---- |
| expected_result |
200 { "parcels": [ { "additional_data": {…}, "address_id": "<SHIPPING ADDRESS ID>", "agent": "<USER ID>", "class": "<CLASS ID>", "closed_at": "<TIMESTAMP UTC>", "code": "<CODE-128>", "created_at": "<TIMESTAMP UTC>", "id": "<PARCEL ID>", "is_open": <true/false>, "is_paid": <true/false>, "modified_at": "<TIMESTAMP UTC>", "cod_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "paid_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "paid_at": "<TIMESTAMP UTC>", "parent": <PARCEL ID or null>, "price": <PRICE as DECIMAL(10,2)>, "receiver": "<USER ID>", "sender": "<USER ID>", "type": <TYPE CODE>, "weight": <WEIGHT GRAM as DECIMAL(10,6)>, "state": "<PARCEL STATE>", "transfer_via": "<OFFCIE ID>", "pentity": "<OFFICE ENTITY ID>", "delivery_type": "<DELIVERY TYPE>", … } ], "success": true } |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/parcel/list?id%5B%5D=30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2&id%5B%5D=4d52c496-9137-4e8a-bb1b-56f378669ac0" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 10:50:56 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 3086
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "6e10481eb926db866fbe64c9332606a9b1b3e37f"
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": "TEST0004",
"weight": 145,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "30ca60d8-7d9b-47b3-a7b7-e40ff2fdefd2",
"paid_amount": 0,
"state": "PU0007",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 350,
"checked_in_at": "2018-12-12T14:08:44.447137+00:00",
"class": "A.COD.NR.NA.S000",
"pentity": null,
"transfer_via": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"nsid": 0,
"is_paid": false,
"modified_at": "2019-01-08T09:12:25.375000+00:00",
"additional_data": {
"erp_token": "510ad08a-830e-46aa-ab63-dfade75a00a7",
"_receiver": {
"phone": "380666666666",
"first_name": "Test",
"last_name": "User",
"id": 0,
"email": "example@gmail.com"
},
"_dimensions": [
250,
400,
80
],
"invoices": [
{
"origin": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"sms_notifications": 0.6,
"office_delivery": 24,
"owner": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"serial": "0335d220-fe14-11e8-8a37-148b3fc90e15",
"main_transportation": 10.01,
"delivery_insurance": 5
}
],
"_comment": "test parcel",
"checked_in_loc": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"ttl_days_default": 10,
"is_weighed": true,
"ttl_days": 0,
"contragent_id": "e8459d69-e3bc-41bc-978d-28d6c6abda38"
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 299,
"created_at": "2018-12-12T13:39:28.729083+00:00",
"goes_back": false
},
{
"address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d",
"code": "TEST0002",
"weight": 1520,
"agent": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "4d52c496-9137-4e8a-bb1b-56f378669ac0",
"paid_amount": 0,
"state": "PU0007",
"mark": null,
"last_seen_at": null,
"type": "fragile",
"delivery_type": "W2W",
"parent": null,
"price": 2500,
"checked_in_at": "2018-12-12T13:50:42.870075+00:00",
"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-12T13:51:10.483000+00:00",
"additional_data": {
"erp_token": "510ad08a-830e-46aa-ab63-dfade75a00a7",
"_receiver": {
"phone": "380666666666",
"first_name": "Test",
"last_name": "User",
"id": 0,
"email": "example@gmail.com"
},
"invoices": [
{
"origin": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"sms_notifications": 0.6,
"office_delivery": 24,
"owner": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"serial": "a6e96cc0-fe04-11e8-8a37-148b3fc90e15",
"main_transportation": 10.01,
"delivery_insurance": 16.25
}
],
"checked_in_loc": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"ttl_days_default": 15,
"ttl_days": 15
},
"receiver": "67719cba-5cd5-4dd0-84c9-6b6864a75066",
"cod_amount": 0,
"created_at": "2018-12-11T14:23:51.628901+00:00",
"goes_back": false
}
],
"success": true
}
Cписок посылок пользователя
| protocol_method |
GET |
| method_name |
parcel/list |
| method_params |
---- |
| get_params |
participant |
| request_body |
---- |
| expected_result |
200 { "parcels": [ { "additional_data": {…}, "address_id": "<SHIPPING ADDRESS ID>", "agent": "<USER ID>", "class": "<CLASS ID>", "closed_at": "<TIMESTAMP UTC>", "code": "<CODE-128>", "created_at": "<TIMESTAMP UTC>", "id": "<PARCEL ID>", "is_open": <true/false>, "is_paid": <true/false>, "modified_at": "<TIMESTAMP UTC>", "cod_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "paid_amount": <PAYMENTS TOTAL as DECIMAL(10,2)>, "paid_at": "<TIMESTAMP UTC>", "parent": <PARCEL ID or null>, "price": <PRICE as DECIMAL(10,2)>, "receiver": "<USER ID>", "sender": "<USER ID>", "type": <TYPE CODE>, "weight": <WEIGHT GRAM as DECIMAL(10,6)>, "state": "<PARCEL STATE>", "transfer_via": "<OFFCIE ID>", "pentity": "<OFFICE ENTITY ID>", "delivery_type": "<DELIVERY TYPE>", … } ], "total": <search_result_length>, "success": true } |
| параметр | тип |
|---|---|
participant |
all/sender/receiver |
limit |
<num> |
offset |
<offset> |
sort_by |
['weight', 'price', 'paid_amount', 'created_at', 'modified_at', 'paid_at', 'type', 'class', 'state', 'goes_back'] |
sort_order |
asc/desc |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/parcel/list?participant=sender&sort_by=state&limit=2" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 09:45:56 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2118
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "eeed0101eb2a9110a6833b9bba8a0f4f63e353b0"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"total": 4,
"parcels": [
{
"address_id": "8579d836-8a2f-11e6-8a66-1b7b94d1a2c3",
"code": "T1PR6NA6R",
"weight": 1,
"agent": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "94936244-3461-406d-b773-f1f0852074bb",
"paid_amount": 0,
"state": "PU0003",
"mark": null,
"last_seen_at": null,
"type": "undef",
"delivery_type": "W2W",
"parent": null,
"price": 1,
"checked_in_at": "2018-05-14T16:45:52.602469+00:00",
"class": "I.PRP.NR.NA.S000",
"pentity": "fcf598ce-7cba-47b6-9871-407b6db81ea6",
"transfer_via": "9bfdef40-d03d-4041-92fe-c3944650f173",
"sender": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"nsid": 0,
"is_paid": false,
"modified_at": "2018-08-09T08:32:31.371242+00:00",
"additional_data": {
"ttl_days": 30,
"ttl_days_default": 15,
"agent_office": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"checked_in_loc": "9bfdef40-d03d-4041-92fe-c3944650f173"
},
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"cod_amount": 0,
"created_at": "2018-05-14T16:38:51.780360+00:00",
"goes_back": false
},
{
"address_id": "0c722922-8a1e-11e6-8a66-b356fd9f196a",
"code": "T1BR5NB8M",
"weight": 2,
"agent": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "106c252b-ebb6-426f-920a-ff8f616faf3b",
"paid_amount": 0,
"state": "PU0003",
"mark": null,
"last_seen_at": null,
"type": "undef",
"delivery_type": "W2W",
"parent": null,
"price": 0,
"checked_in_at": "2018-03-18T14:11:56.539406+00:00",
"class": "I.COD.RA.NA.S000",
"pentity": "18b98336-3c75-4690-8298-f65545e7df3c",
"transfer_via": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"sender": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"nsid": 0,
"is_paid": false,
"modified_at": "2018-08-09T08:32:31.498520+00:00",
"additional_data": {
"ttl_days": 20,
"ttl_days_default": 10,
"agent_office": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253",
"checked_in_loc": "26b10dbb-4f1b-4d45-9c19-ec3cb85d4253"
},
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"cod_amount": 0,
"created_at": "2018-03-18T14:04:13.671252+00:00",
"goes_back": false
}
],
"success": true
}
Создание посылки
| protocol_method |
POST |
| method_name |
op/parcel |
| method_params |
---- |
| request_body |
{"type": <TYPE CODE>, "class": "<CLASS ID>", "sender": "<USER ID>", "receiver":"<USER ID>", "address_id": "<SHIPPING ADDRESS ID>", "weight": <WEIGHT GRAM as INTEGER)>, "price": <PRICE as DECIMAL(10,2)>, "cod_amount": <PRICE as DECIMAL(10,2)>} |
| expected_result |
200 {"success": true, "id": "<PARCEL ID>"} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/parcel" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"type": "fragile", "class": "A.PRP.NR.NA.S000", "sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680", "receiver":"6cca769e-f380-4385-805c-84232c51a60c", "address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d", "weight": 1500, "price": 300, "cod_amount": 300}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 09:56: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": "728827e9-ca3e-49f3-9670-3b752736ecec",
"success": true
}
Изменение посылки
| protocol_method |
PUT |
| method_name |
op/parcel |
| method_params |
<PARCEL ID> |
| request_body |
{"state": "<STATE ID>", "type": <TYPE CODE>, "class": "<CLASS ID>", "sender": "<USER ID>", "receiver":"<USER ID>", "address_id": "<SHIPPING ADDRESS ID>", "transfer_via": "<SHIPPING ADDRESS ID>", "weight": <WEIGHT GRAM as INTEGER>, "price": <PRICE as DECIMAL(10,2)>, "paid_amount": <PRICE as DECIMAL(10,2)>, "cod_amount": <PRICE as DECIMAL(10,2)>} |
| expected_result |
202 {"success": true} |
| необходимо передавать подмножество описанных параметров для изменения посылки. |
|
Пример запроса/ответа
Запрос |
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/op/parcel/728827e9-ca3e-49f3-9670-3b752736ecec" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"state": "PU0001", "type": "foods", "class": "A.PRP.NR.NA.S000", "sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680", "receiver":"6cca769e-f380-4385-805c-84232c51a60c", "address_id": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d", "transfer_via": "f50a7aaa-8a1d-11e6-8a66-83b0de5b609d", "weight": 5000, "price": 675, "paid_amount": 675, "cod_amount": 675}'
- Ответ
-
HTTP/1.1 202 Accepted
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 10:03:23 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 |
op/parcel |
| method_params |
office-stat |
| expected_result |
200 { "success": true, "rules": {"<RULE ID>": ["<PARCEL STATE>", "<PARCEL STATE>",<…>], "<RULE ID>": […], …}, "total": <PARCEL COUNT as INTEGER>, "stats": {"<RULE ID>": <PARCEL COUNT BY RULE as INTEGER>, "<RULE ID>": <…>, …}, "filters": {"<FILTER ID>": <PARCEL COUNT BY FILTER as INTEGER>, "<FILTER ID>": <…>, …} } |
значения rules: ['delivered', 'on_stock', 'in', 'release', 'new', 'in_progress', 'trans', 'out']
|
значения filters: ['returns', 'cancellations']
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/parcel/office-stat" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 12:08:13 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 491
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "97b8b9253b9cda00b159d122ffa5025bee3af665"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"rules": {
"delivered": [
"PU0007"
],
"on_stock": [
"PU0003",
"PO0003",
"PO0004"
],
"in": [
"PO0010",
"PO0011"
],
"release": [
"PU0004"
],
"new": [
"PU0000",
"PO0001",
"PO0002"
],
"in_progress": [
"PO0005",
"PO0006"
],
"trans": [
"PU0002",
"PU0005",
"PU0006",
"PO0009"
],
"out": [
"PU0001",
"PO0007",
"PO0008"
]
},
"total": 65,
"stats": {
"delivered": 0,
"on_stock": 14,
"in": 0,
"release": 0,
"new": 0,
"in_progress": 0,
"trans": 2,
"out": 42
},
"success": true,
"filters": {
"returns": 0,
"cancellations": 0
}
}
Сгруппированный список посылок для отделения
| protocol_method |
GET |
| method_name |
op/parcel |
| method_params |
grouped-list |
| get_params |
office_id |
| expected_result |
200 { "success": true, "grouped": { "<GROUP>": ["<PARCEL>", "<PARCEL>", …], …} } |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/parcel/grouped-list?office_id=7dea0898-865d-4f11-af5b-337acf3464f2" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 12:12:50 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 8468
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "5dbd204337166e3104e2671a00257d32a72ca716"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"grouped": [
{
"group": "inbox",
"parcels": [
{
"address_id": "5acc5178-8bb9-11e6-9a61-83019362fcae",
"code": "T8BMY33DM",
"weight": 0,
"agent": "44823a06-067c-4cbc-9193-675abaf35e4b",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "2bab4b39-1a6f-417e-a8e7-4ad59bfbfdd3",
"paid_amount": 0,
"entity_type": "shelf",
"state": "PU0099",
"mark": "R",
"last_seen_at": "2018-06-26T13:39:30.556186+00:00",
"type": "undef",
"delivery_type": "W2W",
"parent": null,
"price": 0,
"checked_in_at": null,
"class": "I.PRP.NR.NA.S000",
"pentity": "0223928d-46c1-4d00-940b-63a4e430295e",
"transfer_via": null,
"sender": "7dea0898-865d-4f11-af5b-337acf3464f2",
"nsid": 0,
"is_paid": false,
"modified_at": "2018-05-03T07:49:31.912000+00:00",
"additional_data": {
"ttl_days": 15,
"ttl_days_default": 15,
"agent_office": "7dea0898-865d-4f11-af5b-337acf3464f2",
"document_id": "04f1546e-6d55-11e7-94f9-00163e8cc029",
"label": "+Возврат-T8-200717/001"
},
"entity_label": "inbox",
"receiver": "1678166e-a050-430b-878a-5244ca5d8659",
"cod_amount": 0,
"created_at": "2017-07-20T14:09:17.620979+00:00",
"goes_back": true
},
{
"address_id": "26b6ea98-4f4a-11e6-b08e-1f448ec92245",
"code": "M1A0PE0",
"weight": 1000,
"agent": "1678166e-a050-430b-878a-5244ca5d8659",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "3a7c9413-4c11-4a89-ac07-4f28e61de5b6",
"paid_amount": 0,
"entity_type": "shelf",
"state": "PU0099",
"mark": null,
"last_seen_at": "2018-06-26T13:39:25.725169+00:00",
"type": "undef",
"delivery_type": "W2W",
"parent": null,
"price": 152,
"checked_in_at": "2017-09-15T09:35:09.740110+00:00",
"class": "I.COD.NR.NA.S000",
"pentity": "0223928d-46c1-4d00-940b-63a4e430295e",
"transfer_via": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"sender": "1678166e-a050-430b-878a-5244ca5d8659",
"nsid": 0,
"is_paid": false,
"modified_at": "2018-05-03T07:55:02.529000+00:00",
"additional_data": {
"erp_token": "8ce6be3f-157d-4165-a52e-5e0d0f951eea",
"_receiver": {
"phone": "38063XXXX682",
"first_name": "Test",
"last_name": "Customer2",
"id": 903370,
"email": "TestCustomer2@mail.ru"
},
"return_via": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"checked_in_loc": "7dea0898-865d-4f11-af5b-337acf3464f2",
"agent_office": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"ttl_days_default": 5,
"ttl_days": 7
},
"entity_label": "inbox",
"receiver": "ecfb88c6-e753-44e9-83be-6e974ecab82c",
"cod_amount": 152,
"created_at": "2016-12-28T13:57:21.038967+00:00",
"goes_back": true
}
]
},
{
"group": "store",
"parcels": [
{
"address_id": "26b6ea98-4f4a-11e6-b08e-1f448ec92245",
"code": "M1A009A",
"weight": 1000,
"agent": "1678166e-a050-430b-878a-5244ca5d8659",
"is_dirty": false,
"is_open": true,
"paid_at": null,
"closed_at": null,
"id": "b0e5b3cc-44cf-41e8-b681-4e039cddbf3b",
"paid_amount": 191,
"entity_type": "shelf",
"state": "PU0007",
"mark": null,
"last_seen_at": "2018-06-26T13:39:12.792419+00:00",
"type": "undef",
"delivery_type": "W2W",
"parent": null,
"price": 191,
"checked_in_at": "2017-02-05T18:36:48.570000+00:00",
"class": "I.COD.NR.NA.S000",
"pentity": "240f772c-65d6-4ee5-bb33-73b2f1319725",
"transfer_via": "7dea0898-865d-4f11-af5b-337acf3464f2",
"sender": "1678166e-a050-430b-878a-5244ca5d8659",
"nsid": 0,
"is_paid": true,
"modified_at": "2018-04-19T10:41:11.068573+00:00",
"additional_data": {
"erp_token": "8ce6be3f-157d-4165-a52e-5e0d0f951eea",
"_receiver": {
"phone": "38063XXXX471",
"first_name": "Test",
"last_name": "Customer",
"id": 2300700,
"email": "testCustomer@ukr.net"
},
"return_via": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"agent_office": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"ttl_days_default": 5,
"ttl_days": 5
},
"entity_label": "01",
"receiver": "ae9ad33d-f07a-4694-b414-484095b111da",
"cod_amount": 191,
"created_at": "2016-12-28T14:27:05.295523+00:00",
"goes_back": false
}
]
}
],
"success": true
}
Статистика по посылкам для пользователя
| protocol_method |
GET |
| method_name |
parcel |
| method_params |
stat |
| expected_result |
200 {"success": true, "receiver": <PARCEL COUNT as INTEGER>, "sender": <PARCEL COUNT as INTEGER>, "on_release": <PARCEL COUNT as INTEGER>} |
значения on_relese - это подмножество посылок из receiver, готовых к выдачи пользователю.
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/parcel/stat" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 12:27:29 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
Etag: "59b2fc69991ec211dedb998f5abaeeff438f4281"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"on_release": 0,
"sender": 4,
"success": true,
"receiver": 22
}
Трекинговая информация о пользовательских посылках
| protocol_method |
GET |
| method_name |
parcel |
| method_params |
track |
| expected_result |
200 { "success": true, "sender": [{"id": "<PARCEL ID>", "state": "<PARCEL STATE>", "goes_back": <true/false>, "sender": "<USER ID>", "receiver": "<USER ID>", "lat": <LATITUDE>, "lon": <LONGITUDE>}, {…}, …], "receiver": [{"id": "<PARCEL ID>", "state": "<PARCEL STATE>", "goes_back": <true/false>, "sender": "<USER ID>", "receiver": "<USER ID>", "lat": <LATITUDE>, "lon": <LONGITUDE>}, {…}, …] } |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/parcel/track" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 12:30:45 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1510
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "f93ff5a5cee4f3d4ad10ce2ed3ec110a5aa1b757"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"sender": [
{
"code": "T1PR6NA6R",
"sender": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lon": 30.45632,
"state": "PU0003",
"goes_back": false,
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lat": 50.431722,
"id": "94936244-3461-406d-b773-f1f0852074bb"
},
{
"code": "T1BR5NB8M",
"sender": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lon": 30.679338,
"state": "PU0003",
"goes_back": false,
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lat": 50.405237,
"id": "106c252b-ebb6-426f-920a-ff8f616faf3b"
}
],
"success": true,
"receiver": [
{
"code": "K26V49E",
"sender": "1678166e-a050-430b-878a-5244ca5d8659",
"lon": 30.679338,
"state": "PU0099",
"goes_back": false,
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lat": 50.405237,
"id": "be803f61-84dc-4be2-8fb2-d687acd4d7bc"
},
{
"code": "K26ZXT0",
"sender": "1678166e-a050-430b-878a-5244ca5d8659",
"lon": 30.599589,
"state": "PU0003",
"goes_back": false,
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lat": 50.450822,
"id": "71d73f6a-c0e7-4053-850e-fd22fd445c18"
},
{
"code": "K2700L2",
"sender": "1678166e-a050-430b-878a-5244ca5d8659",
"lon": 30.599589,
"state": "PU0003",
"goes_back": false,
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lat": 50.450822,
"id": "24a407c0-7601-4262-a07e-75551959529e"
},
{
"code": "M21B01B",
"sender": "1678166e-a050-430b-878a-5244ca5d8659",
"lon": 30.520706,
"state": "PU0099",
"goes_back": false,
"receiver": "4f90b36a-8622-4f43-a285-f622186f4ee8",
"lat": 50.442561,
"id": "8328aba4-1526-4f13-92f5-c6090d184597"
}
]
}
Адреса и отделения
Справочники адресов для разных языков могут отличаться. Для получения информации на конкретном языке в строке запроса можно специфировать язык при помощи параметра lang=<LANG>.
Если язык не указан, то будет выбран либо язык пользовательского предпочтения в интерфейсе, либо язык, установленный в пользовательском профиле.
Получения данных отделений
| protocol_method |
GET |
| method_name |
offices |
| get_params |
<lang, all=true|false> |
| 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 } |
в случае указания параметра all=true в списке будут отображаться так-же внутренние отделения системы.
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/offices?all=true" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 12:55:05 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 45165
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "9cfa686056f0608e98a9f2ac1b9a8a70d5a91d2f"
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": "02121"
},
"name": "Киев, Отделение Склад",
"descr": "Киев, Отделение Склад",
"schedule": {},
"is_internal": true,
"number": 0,
"photos": [],
"id": "e0b05432-63a7-4e2e-9c7d-9d1eaaa04b78",
"pay_cash": null,
"phone": "380110000000",
"email": "kiev_0@tbt-post.net",
"way_photos": [],
"optimal_hours": {},
"services": [
"warehouse"
],
"additional_data": {
"label": "Склад-0 (МК)",
"code_prefix": "T0",
"sms_addr": "Kiev, sklad modnaKasta"
},
"ui_address": "м.Київ, Харківське шосе 201-203к1А",
"address": {
"lang": "ru",
"city": "Киев",
"building": "201-203к1А",
"area": null,
"country": "UA",
"region": "Киев",
"lon": 30.679338,
"geo_object": {},
"addr_type": "fc_office",
"note": "Отделение Склад",
"modified_at": "2016-10-06T11:38:08.992923+00:00",
"street": "Харьковское шоссе",
"geo_source": "yandex",
"lat": 50.405237,
"id": "5acc5178-8bb9-11e6-9a61-83019362fcae",
"accuracy": "exact"
},
"pay_card": null
},
{
"address_data": {
"index": "65011"
},
"name": "Одесса, Склад №1",
"descr": "Одесса, Отделение Склад №1",
"schedule": {
"1": "09:00-20:00",
"2": "09:00-20:00",
"3": "09:00-20:00",
"4": "09:00-20:00",
"5": "09:00-20:00",
"6": "09:00-20:00",
"7": "-"
},
"is_internal": true,
"number": 0,
"photos": [],
"id": "b4d9d2da-be3e-4682-b7cf-fd645f14c5e5",
"pay_cash": true,
"phone": "380111000000",
"email": "odessa_0@tbt-post.net",
"way_photos": [],
"optimal_hours": {},
"services": [
"warehouse"
],
"additional_data": {
"uk:label": "Одеса-Склад-1",
"label": "Одесса-Cклад-1",
"code_prefix": "TK",
"uk:sms_addr": "Odessa, viddilennia sklad 1",
"sms_addr": "Odessa, otdelenie sklad 1"
},
"ui_address": "м.Одеса, Базарна вулиця 80",
"address": {
"lang": "ru",
"city": "Одесса",
"building": "80",
"area": "Одесский городской совет",
"country": "UA",
"region": "Одесская область",
"lon": 30.737777,
"geo_object": {},
"addr_type": "cc_office",
"note": "Склад-1",
"modified_at": "2018-05-08T12:12:01.037399+00:00",
"street": "Базарная улица",
"geo_source": "yandex",
"lat": 46.474389,
"id": "032af2ee-52b9-11e8-b7d9-93c11d54d8c4",
"accuracy": "exact"
},
"pay_card": false
}
],
"success": true
}
Список адресов отделений
| protocol_method |
GET |
| method_name |
address |
| method_params |
list |
| get_params |
addr_type=<cc_office|fc_office> / id[]=<ADDRESS ID>&id[]=<ADDRESS ID>&… |
| request_body |
---- |
| expected_result |
200 {"address_list": [<ADDRESS1>, <ADDRESS2>, …], "success": true} |
где:
| cc_office |
собственные отделения |
| fc_office |
агентские отделения |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/address/list?id%5B%5D=5acc5178-8bb9-11e6-9a61-83019362fcae&id%5B%5D=032af2ee-52b9-11e8-b7d9-93c11d54d8c4" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 13:12:21 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1331
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "3cc061dde859dd8f779f8f10e98fd468a94f2522"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"address_list": [
{
"lang": "ru",
"city": "Одесса",
"building": "80",
"area": "Одесский городской совет",
"country": "UA",
"region": "Одесская область",
"lon": 30.737777,
"geo_object": {},
"id": "032af2ee-52b9-11e8-b7d9-93c11d54d8c4",
"note": "Склад-1",
"modified_at": "2018-05-08T12:12:01.037399+00:00",
"street": "Базарная улица",
"geo_source": "yandex",
"lat": 46.474389,
"addr_type": "cc_office",
"accuracy": "exact"
},
{
"lang": "ru",
"city": "Киев",
"building": "201-203к1А",
"area": null,
"country": "UA",
"region": "Киев",
"lon": 30.679338,
"geo_object": {},
"id": "5acc5178-8bb9-11e6-9a61-83019362fcae",
"note": "Отделение Склад",
"modified_at": "2016-10-06T11:38:08.992923+00:00",
"street": "Харьковское шоссе",
"geo_source": "yandex",
"lat": 50.405237,
"addr_type": "fc_office",
"accuracy": "exact"
}
]
}
Получение адреса из справочника
| protocol_method |
GET |
| method_name |
address |
| method_params |
<SHIPPING ADDRESS ID> |
| 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-параметров указывается либо пара гео-координат, либо составные параметры адреса, либо id адреса.
|
id в качестве параметра метода имеет боле высокий приоритет
|
|
Пример запроса/ответа
Запрос |
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" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 17 Jan 2019 13:16:30 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"
}
Получение списка фильтров (агрегации) адресов
| protocol_method |
GET |
| method_name |
address |
| method_params |
filters |
| get_params |
field=<region|city|street|building>,[region=<AGG REGION>,city=<AGG CITY>,street=<AGG STREET>, pattern=<FILTER PATTERN>, lang] |
| request_body |
---- |
| expected_result |
200 {"success": true, "filters": [<field_value_1>, .. <field_value_N>]} |
| Для получения списка фильтиров (агрегации) для поля адреса более нижнего уровня, необходимо задать через get-параметры значения полей более высокого уровня в соответствии с древовидной структурой адреса: region → city → street → building. |
Дополнительный параметр pattern используется для дополнительной фильтрации результирующего списка фильтров.
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/address/filters?field=street®ion=%D0%A7%D0%B5%D1%80%D0%BA%D0%B0%D1%81%D1%8C%D0%BA%D0%B0%20%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C&city=%D0%A7%D0%B5%D1%80%D0%BA%D0%B0%D1%81%D0%B8" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 12:54:00 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2593
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "40e2be2ddfd8b645656f04ee65b10296c6fc5fe7"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"filters": [
"бульвар Шевченка",
"вулиця Байди Вишневецького",
"вулиця Благовісна",
"вулиця Вернигори",
"вулиця Віталія Вергая",
"вулиця В'ячеслава Чорновола",
"вулиця Гагаріна",
"вулиця Генерала Момота",
"вулиця Дахнівська",
"вулиця Лесі Українки",
"вулиця Луценка",
"вулиця Максима Залізняка",
"вулиця Надпільна",
"вулиця Нарбутівська",
"вулиця Небесної Сотні",
"вулиця Остафія Дашковича",
"вулиця Самійла Кішки",
"вулиця Сержанта Волкова",
"вулиця Сержанта Смирнова",
"вулиця Слави",
"вулиця Сумгаїтська",
"вулиця Тараскова",
"вулиця Чехова"
]
}
Создание адреса в справочнике
| Кодирование и декодирование проиходят с нормализацией гео-позиции (т.е. результат соответствует геометрическому центру результирующего объекта) |
Для создания адреса, как правило, достаточно указания в теле запроса:
-
city— город/населенный пункт -
street— улица -
building— дом
однако, ввиду того, что одно и то же название населенного пункта может присутствовать несколько раз в различных местностях, а улицы — в разных районах одного города, возможно (а в ряде случаев и рекомендовано) использовать дополнительные опциональные параметры:
-
region— область/регион -
area— район/местность
Указание в теле запроса ключа lang приводит к переключению распознавания ввода и изменению языка вывода результата.
Резолвинг происходит автоматически, т.е. фактическая процедура происходит по принципу resolve and set.
| protocol_method |
POST |
| method_name |
address |
| method_params |
---- |
| request_body |
{"city": "<CITY>", "street": "<STREET>", "building": "<BUILDING>"} |
| expected_result |
200 {"success": true, "building": "<BUILDING>", "street": "<STREET>", "lat": <LATITUDE>, "id": "<SHIPPING ADDRESS ID>", "lang": "<LANG>", "city": "<CITY>", "area": <ADDRESS AREA or null>, "country": "<COUNTRY CIDE>", "region": "<CITY REGION or null>", "lon": <LONGITUDE>, "accuracy": "<ADDRESS ACCURACY>", "geo_source": "<google|yandex|osm>", "geo_object": {<ADDITIONAL GEO DATA>}} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/address" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{"region": "Вінницька область","city": "Крижопіль", "street": "вулиця Героїв України", "building": "18", "lang": "ua" }'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 13:04:23 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 583
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
{
"building": "18",
"street": "вулиця Героїв України",
"lat": 48.3836026,
"lang": "ru",
"city": "Крижопіль",
"success": true,
"area": "Крижопільський район",
"country": "UA",
"region": "Вінницька область",
"lon": 28.8663538,
"geo_source": "google",
"accuracy": "other"
}
Для обратного кодирования в теле запроса необходимо указывать координаты.
| protocol_method |
POST |
| method_name |
address |
| method_params |
---- |
| request_body |
{"lat": <LATITUDE>, "lon": <LONGITUDE>} |
| expected_result |
200 {"success": true, "building": "<BUILDING>", "street": "<STREET>", "lat": <LATITUDE>, "id": "<SHIPPING ADDRESS ID>", "lang": "<LANG>", "city": "<CITY>", "area": <ADDRESS AREA or null>, "country": "<COUNTRY CIDE>", "region": "<CITY REGION or null>", "lon": <LONGITUDE>, "accuracy": "<ADDRESS ACCURACY>", "geo_source": "<google|yandex|osm>", "geo_object": {<ADDITIONAL GEO DATA>}} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/address" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{"lat": 48.386047, "lon": 28.865174}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 13:11:18 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 626
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
{
"building": "18",
"street": "вулиця Героїв України",
"lat": 48.386302,
"id": "2ce89d5e-1cb5-11e9-88a7-ab8c8bd7420b",
"lang": "ru",
"city": "Крижопіль",
"success": true,
"area": "Крижопільський район",
"country": "UA",
"region": "Вінницька область",
"lon": 28.865319,
"geo_source": "google",
"accuracy": "exact"
}
Список пользовательских адресов
| protocol_method |
GET |
| method_name |
user/address |
| method_params |
---- |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true, "address_list": [{"building": "<BUILDING>", "city": "<CITY>", "address_id": "<SHIPPING ADDRESS ID>", "service": "<ADDRESS SERVICE>", "apartment": "<APARTMENT>", "lang": "<LANG>", "title": "<ADDRESS TITLE>", "country": "<COUNTRY CODE>", "notes": "<TEXT or null>", "area": <ADDRESS AREA or null>, "lon": <LONGITUDE>, "is_default": <true/false>, "street": "<STREET>", "lat": <LATITUDE>, "region": "<CITY REGION or null>"}]} |
| расширение параметризации метода идентификатором адреса (т.е.<SHIPPING ADDRES ID>) возвращает описание отдельного адреса (редуцирует выборку) |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/user/address" \
-H "Content-Type: application/json" \
-b cookie-jar.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 13:40:35 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 738
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "d6acb020c6f10b09190fa38a776c35472dbd7145"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"address_list": [
{
"building": "18",
"city": "Крижопіль",
"address_id": "2ce89d5e-1cb5-11e9-88a7-ab8c8bd7420b",
"apartment": "1",
"lang": "ru",
"service": "courier",
"title": "Крижопіль, вулиця Героїв України, 18",
"country": "UA",
"notes": "TEST",
"area": "Крижопільський район",
"modified_at": "2019-01-20T13:50:34.707572+00:00",
"lon": 28.865319,
"is_default": false,
"street": "вулиця Героїв України",
"additional_data": {},
"lat": 48.386302,
"region": "Вінницька область"
}
]
}
Добавление пользовательского адреса
| protocol_method |
POST |
| method_name |
user/address |
| method_params |
---- |
| request_body |
{"address_id" : "<SHIPPING ADDRESS ID>", "service": "<ADDRESS SERVICE>", "title": "ADDRESS TITLE", "apartment": "<APARTMENT>", "notes": "TEXT"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/user/address" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{ "address_id" : "2ce89d5e-1cb5-11e9-88a7-ab8c8bd7420b", "service": "courier", "title": "Крижопіль, вулиця Героїв України, 18", "apartment": "1", "notes": "TEST"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 13:50:34 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 |
op/user/address |
| method_params |
<USER ID> |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true, "address_list": [{"building": "<BUILDING>", "city": "<CITY>", "address_id": "<SHIPPING ADDRESS ID>", "apartment": "<APARTMENT>", "lang": "<LANG>", "title": "<ADDRESS TITLE>", "country": "<COUNTRY CODE>", "notes": "<TEXT or null>", "area": <ADDRESS AREA or null>, "lon": <LONGITUDE>, "is_default": <true/false>, "street": "<STREET>", "lat": <LATITUDE>, "region": "<CITY REGION or null>"}]} |
| расширение параметризации метода идентификатором адреса (т.е. <USER ID>/<SHIPPING ADDRES ID>) возвращает описание отдельного адреса (редуцирует выборку) |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/user/address/ cf8b0967-f1d3-4e53-aa48-297940415263" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 14:08:43 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2141
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "b63d0f8a91f618d03e2cbb3213d77c6f6837da72"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"address_list": [
{
"building": "18",
"city": "Крижопіль",
"address_id": "2ce89d5e-1cb5-11e9-88a7-ab8c8bd7420b",
"apartment": "2",
"lang": "ru",
"service": "courier",
"title": "Крижопіль, вулиця Героїв України, 18",
"country": "UA",
"notes": "TEST",
"area": "Крижопільський район",
"modified_at": "2019-01-20T13:50:34.707572+00:00",
"lon": 28.865319,
"is_default": false,
"street": "вулиця Героїв України",
"additional_data": {},
"lat": 48.386302,
"region": "Вінницька область"
}
]
}
Добавление пользовательского адреса произвольного пользователя
| protocol_method |
POST |
| method_name |
op/user/address |
| method_params |
<USER ID> |
| request_body |
{"address_id" : "<SHIPPING ADDRESS ID>", "service": "<ADDRESS SERVICE>", "title": "ADDRESS TITLE", "apartment": "<APARTMENT>", "notes": "TEXT"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/user/address/86761ba9-be25-47e1-8483-cb43ee3f241e" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{ "address_id" : "2ce89d5e-1cb5-11e9-88a7-ab8c8bd7420b", "service": "courier", "title": "Крижопіль, вулиця Героїв України, 18", "apartment": "2", "notes": "TEST"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 14:15:43 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
}
Сущности и справочники
Ресурсы отделения
Cоздание ресурса отеления
| protocol_method |
POST |
| method_name |
op/entity |
| method_params |
---- |
| get_params |
---- |
| request_body |
{"type": "<ENTITY TYPE>", "parent": "<ENTITY ID>", "descr": "<ENTITY DESCRIPTION>", "label": "<ENTITY LABEL>", "path": "<PATH (1C FORMAT)>"} |
| expected_result |
200 {"success": true, "id": "<ENTITY ID>", "type": "<ENTITY TYPE>", "owner": "<OFFICE USER ID>", "parent": "<ENTITY ID>", "descr": "<ENTITY DESCRIPTION>" "properties": {"label": "<ENTITY LABEL>", "path": "<PATH (1C FORMAT)>", "db_path": ["<PARENT ENTITY ID>", "<PARENT ENTITY ID>", …]}]} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/entity" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"type": "rack", "parent": "d4ef2889-2dea-48ad-b86e-8dfe1b3cd0f9", "descr": "Test", "label": "test inbox", "path": "tst/test inbox"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 21 Jan 2019 15:03:26 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 333
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
{
"parent": "d4ef2889-2dea-48ad-b86e-8dfe1b3cd0f9",
"descr": "Test",
"success": true,
"properties": {
"code": "$Er$F0:0014$",
"path": "test inbox",
"db_path": [
"d4ef2889-XXXX-8dfe1b3cd0f9"
],
"label": "test inbox"
},
"owner": "6beaa91b-XXXX-d8f89d700e4c",
"type": "rack",
"id": "afecf905-2b52-4975-9569-51c5068d4b1a"
}
| Возможные параметры ENTITY_TYPE |
|---|
box: Коробка |
cell: Ячейка |
shelf: Полка |
rack: Стелаж |
row: Ряд |
stock: Склад |
car: Машина |
office: Отделение |
Изменение ресурса отеления
| protocol_method |
PUT |
| method_name |
op/entity |
| method_params |
<ENTITY ID> |
| get_params |
---- |
| request_body |
{"descr": "<ENTITY DESCRIPTION>", "label": "<ENTITY LABEL>", "path": "<PATH (1C FORMAT)>"} |
| expected_result |
200 {"success": true, "id": "<ENTITY ID>", "type": "<ENTITY TYPE>", "owner": "<OFFICE USER ID>", "parent": "<ENTITY ID>", "descr": "<ENTITY DESCRIPTION>" "properties": {"label": "<ENTITY LABEL>", "path": "<PATH (1C FORMAT)>", "db_path": ["<PARENT ENTITY ID>", "<PARENT ENTITY ID>", …]}]} |
| требуется указать только необходимые параметры для модификации ресурса. |
|
Пример запроса/ответа
Запрос |
curl -v -X PUT "https://sandbox-api.tbt-post.net/api/v1/op/entity/afecf905-2b52-4975-9569-51c5068d4b1a" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"descr": "New desc", "label": "new inbox", "path": "tst/new_inbox"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 21 Jan 2019 15:06:23 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 |
DELETE |
| method_name |
op/entity |
| method_params |
<ENTITY ID> |
| get_params |
---- |
| request_body |
---- |
| expected_result |
200 {"success": true} |
| удаление возможно только ресурса, который не имеет подчиненных ресурсов |
|
Пример запроса/ответа
Запрос |
curl -v -X DELETE "https://sandbox-api.tbt-post.net/api/v1/op/entity/afecf905-2b52-4975-9569-51c5068d4b1a" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 21 Jan 2019 15:16:24 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 |
op/entity |
| method_params |
<ENTITY ID> |
| get_params |
code=<ENTITY BARCODE> |
| request_body |
---- |
| expected_result |
200 {"success": true, "id": "<ENTITY ID>", "type": "<ENTITY TYPE>", "owner": "<OFFICE USER ID>", "parent": "<ENTITY ID>", "descr": "<ENTITY DESCRIPTION>" "properties": {"code": "<ENTITY BARCODE>", "bcode": "<DATA URI: ENTITY BARCODE>", "label": "<ENTITY LABEL>", "path": "<PATH (1C FORMAT)>", "db_path": ["<PARENT ENTITY ID>", "<PARENT ENTITY ID>", …]}]} |
получение сущности выполняется или по <ENTITY ID> в method_params или по <ENTITY BARCODE> в get_params
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/entity/95112660-f50e-4b7c-8b81-92139cda3aa4" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
Или
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/entity?code=%24EC%24F0%3A0006%24" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 15:05:05 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 3709
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "e72d99d2e626912b9b524ec818529624a4c4ae91"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"descr": "Киев, курьерское отделение, Ряд 00, Стелаж 00, Ячейка inbox",
"parent": "a745e8ab-9733-45cd-9650-776b06d3bbf7",
"success": true,
"id": "95112660-f50e-4b7c-8b81-92139cda3aa4",
"owner": "6beaa91b-XXXX-d8f89d700e4c",
"type": "cell",
"properties": {
"path": "00.00/inbox",
"bcode": "data:image/png;base64,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",
"code": "$EC$F0:0006$",
"db_path": [
"d4ef2889-XXXX-8dfe1b3cd0f9",
"642fc9dc-XXXX-ac4864b1c452",
"a745e8ab-XXXX-776b06d3bbf7"
],
"label": "inbox"
}
}
Если вставить полученный код в строке браузера, напримпр: "Crhome", то в результате получим изображение необходимого кода. Копировать необходимо без скобок, например: data:image/png;base64,iV…<body>…U5ErkJggg==
|
Получение списка ресурсов
| protocol_method |
GET |
| method_name |
op/entity |
| method_params |
list |
| get_params |
[office_id=<OFFICE USER ID>] / parent=<ENTITY ID> / type=<ENTITY TYPE> |
| request_body |
---- |
| expected_result |
200 {"success": true, "entities": [<ENTITY RECORD>, <ENTITY RECORD>, …] |
по-умолчанию office_id берется из данных операторского аккаунта, <ENTITY RECORD> соответсвует описанию результата для получения одиночной сущности за исключением поля "properties"/"barcode"
|
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/op/entity/list" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 14:51:20 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 5359
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "42a61e2e40bedd8d514632d6a9b4010b4b4367de"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"entities": [
{
"descr": "Киев, курьерское отделение",
"parent": "d4ef2889-2dea-48ad-b86e-8dfe1b3cd0f9",
"id": "d4ef2889-2dea-48ad-b86e-8dfe1b3cd0f9",
"owner": "6beaa91b-XXXX-d8f89d700e4c",
"type": "office",
"properties": {
"label": "F0"
}
},
{
"descr": "Киев, курьерское отделение, Ряд 00",
"parent": "d4ef2889-2dea-48ad-b86e-8dfe1b3cd0f9",
"id": "642fc9dc-6e45-4916-ba4f-ac4864b1c452",
"owner": "6beaa91b-XXXX-d8f89d700e4c",
"type": "row",
"properties": {
"path": "00",
"code": "$ER$F0:0002$",
"label": "00",
"db_path": [
"d4ef2889-XXXX-8dfe1b3cd0f9"
]
}
},
{
"descr": "Киев, курьерское отделение, Ряд 00, Стелаж 00, Ячейка inbox",
"parent": "a745e8ab-9733-45cd-9650-776b06d3bbf7",
"id": "95112660-f50e-4b7c-8b81-92139cda3aa4",
"owner": "6beaa91b-XXXX-d8f89d700e4c",
"type": "cell",
"properties": {
"path": "00.00/inbox",
"code": "$EC$F0:0006$",
"db_path": [
"d4ef2889-XXXX-8dfe1b3cd0f9",
"642fc9dc-XXXX-ac4864b1c452",
"a745e8ab-XXXX-776b06d3bbf7"
],
"label": "inbox"
}
}
],
"success": true
}
Пeреназначение иерархии для ресурса отделения
| protocol_method |
POST |
| method_name |
op/entity/reparent |
| method_params |
<ENTITY ID> |
| get_params |
---- |
| request_body |
{"parent": "<ENTITY ID>"} |
| expected_result |
200 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/entity/reparent/afecf905-2b52-4975-9569-51c5068d4b1a" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"parent": "d4ef2889-2dea-48ad-b86e-8dfe1b3cd0f9"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 14:59:26 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 78
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
{
"descr": "New desc",
"parent": "d4ef2889-2dea-48ad-b86e-8dfe1b3cd0f9",
"success": true,
"id": "afecf905-2b52-4975-9569-51c5068d4b1a",
"owner": "6beaa91b-XXXX-d8f89d700e4c",
"type": "rack",
"properties": {
"path": "new inbox",
"code": "$Er$F0:0014$",
"db_path": [
"d4ef2889-XXXX-8dfe1b3cd0f9"
],
"label": "new inbox"
}
}
Словари
Сообщения для состояний отправлений
| protocol_method |
GET |
| method_name |
dict/parcel |
| method_params |
states |
| get_params |
lang=<ru|uk|en> default: ru |
| expected_result |
200 { "success": true, "states": {"<STATE ID>": "<STATE MESSAGE>", "<STATE ID>": "<STATE MESSAGE>", …} } |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/dict/parcel/states?lang=ru" \
-H "Content-Type: application/json" \
-b cookie-jar.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 14:29:06 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1555
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "fb896b919bce41cf32ed9227daba8fea8ab100fd"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"states": {
"PU0098": "В процессе обработки",
"PU0099": "Отменено",
"PU0096": "Расформировано",
"PU0097": "Возврат отправителю",
"PU0003": "В отделении",
"PU0002": "Перемещается между отделениями",
"PU0001": "Отправление принято к доставке",
"PU0000": "Заявка зарегистрирована в системе",
"PU0007": "Доставлено",
"PU0006": "Ожидает вручения (в процессе доставки)",
"PU0005": "Передано курьеру",
"PU0004": "Ожидает выдачи"
},
"success": true
}
Сообщения для действий по отправлениям
| protocol_method |
GET |
| method_name |
dict/parcel |
| method_params |
actions |
| get_params |
lang=<ru|uk|en> default: ru |
| expected_result |
200 { "success": true, "actions": {"<STATE ID>": "<STATE ACTION MESSAGE>", "<STATE ID>": "<STATE ACTION MESSAGE>", …} } |
|
Пример запроса/ответа
Запрос |
curl -v -X GET "https://sandbox-api.tbt-post.net/api/v1/dict/parcel/actions?lang=ru" \
-H "Content-Type: application/json" \
-b cookie-jar.txt
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 20 Jan 2019 14:31:37 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1291
Connection: keep-alive
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Max-Age: 600
Etag: "50cc289c90d05c376c7564e44dde2585b3cfbc1b"
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sandbox-ui.tbt-post.net
Access-Control-Allow-Headers: Content-Type
{
"success": true,
"actions": {
"PU0098": "В процессе обработки",
"PU0099": "Отмена",
"PU0096": "Расформировать",
"PU0097": "Вернуть отправителю",
"PU0003": "Оприходовать",
"PU0002": "Перемещается между отделениями",
"PU0001": "Принять к доставке",
"PU0000": "Отменить все статусы",
"PU0007": "Выдать",
"PU0006": "Адресная доставка",
"PU0005": "Передать курьеру",
"PU0004": "Готово к выдаче"
}
}
Множественная (batch) обработка действий
| protocol_method |
POST |
| method_name |
op/batch |
| method_params |
---- |
| request_body |
{"action": "<parcel_update|entity_reparent|…>", "batches": {"<BATCH_KEY>": {"<PARAM>": "<VALUE>", "<PARAM2>": "<VALUE>", …}, <"BATCH_KEY">: {…}, …} |
| expected_result |
200 {"success": true, "<BATCH_KEY>": {"status": <STATUS_CODE>, "<RESULT_KEY>": <VALUE>, …}, "<BATCH_KEY>": {…}, …} |
Для action = parcel_update <BATCH_KEY> является parcel_id, для action = entity_reparent <BATCH_KEY> является entity_id
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/batch" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"action":"parcel_update","batches":{"252395d6-5764-4232-baeb-2020db2d8c2c":{"state":"PU0003","delivery_type":"W2W"},"0e1837e3-609f-4bc6-a121-3b21c0f11a5b":{"state":"PU0003","delivery_type":"W2W"}}}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 21 Jan 2019 11:18:36 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 131
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
{
"0e1837e3-609f-4bc6-a121-3b21c0f11a5b": {
"status": 202
},
"252395d6-5764-4232-baeb-2020db2d8c2c": {
"status": 202
},
"success": true
}
Уведомления
Отчет интерфейса оператора
| protocol_method |
POST |
| method_name |
op/report |
| method_params |
---- |
| request_body |
<ANY REPORT DATA> |
| expected_result |
202 {"success": true, "document_id": "<ID>"} |
| Ограничение объема передаваемых в запросе данных — 2М |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/op/report" \
-H "Content-Type: application/json" \
-b cookie-jar1.txt \
-d '{"state": "PU0001", "type": "foods", "class": "A.PRP.NR.NA.S000", "sender": "44ee4ac5-8e42-4e40-821a-3f3e5f13f680"}'
- Ответ
-
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Mon, 21 Jan 2019 14:41:18 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 72
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,
"document_id": "9ccc7232-1d8a-11e9-bda0-00163e8cc029"
}
| Применимо для отправки данных о работе оператора в графическом интерфейсе. |
Клиент→Система
Забор отправления в отделении
| protocol_method |
POST |
| method_name |
ev/parcel/sched |
| method_params |
<PARCEL ID> |
| request_body |
{"type" : "receiving", "sched" : "<TIMESTAMP UTC>"} |
| expected_result |
202 {"success": true} |
|
Пример запроса/ответа
Запрос |
curl -v -X POST "https://sandbox-api.tbt-post.net/api/v1/ev/parcel/sched/f1a7f050-59f7-4d9e-812a-15940e13560c" \
-H "Content-Type: application/json" \
-b cookie-jar.txt \
-d '{"type" : "receiving", "sched" : "1548060981786"}'
- Ответ
-
HTTP/1.1 202 Accepted
Server: nginx/1.10.3
Date: Mon, 21 Jan 2019 14:36:34 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
}
| Требует авторизации. Применимо для запроса на продление срока хранения собственного отправления. |