Описание API#

Выбор способа оплаты ‘CREATE’#

text
POST https://api-sand.podeli.ru/partners/v1/orders/create
Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль МагазинаПартнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Подсказка

  • Стандартное время жизни заказа - 6 часов. Лимит может быть изменен в большую или меньшую сторону по запросу партнера (ограничение устанавливается в часах)

Алгоритм действий

  1. Клиент создает заказ на сайте Магазина-Партнера и переходит к выбору способа оплаты.

  2. При выборе клиентом способа оплаты «Подели» вызывается метод CREATE.

  3. Метод возвращает URL для перенаправления клиента на сайт «Подели» для авторизации, скоринга и при положительном сценарии оплаты первого платежа по заказу.

Поля для заполнения и их обязательность (*)#

order*

object

Заказ

id*

string(44)

Идентификатор заказа в Магазине-Партнере

amount*

number(18,2)

Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков

prepaidAmount*

number(18,2)

Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков

items*

object

Позиции в заказе

id*

string(36)

Идентификатор позиции в Магазине-Партнере

article

string(50)

Артикул товара

name*

string(250)

Наименование (описание) товара

amount*

number(18,2)

Стоимость позиции для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков

quantity*

number(18,2)

Количество товара в заказе. В случае нецелочисленного кол-ва передавать значение согласно правилу

prepaidAmount*

number(18,2)

Сумма аванса, внесенного клиентом через другие способы оплаты, распределенная на конкретные товары в заказе

isTwoStagePayment

boolean

Первый платеж по заказу двухстадийный или нет (по умолчанию = true)

deliveryMethod

string(20)

Тип доставки (Mall, Delivery, Point of issue)

courierId

string(50)

ID курьера

recipient

string(50)

ФИО

phoneRecipient

string(11)

Номер телефона получателя

phoneRecipientMd5

string(50)

Номер телефона получателя в зашифрованном виде (заполняется если передача данных в открытом виде невозможна)

addressDelivery

string(250)

Адрес доставки или магазина или пункта выдачи, код КЛАДР

comment

string(250)

Комментарий

phoneMd5

string(50)

Номер телефона клиента в зашифрованном виде (заполняется если передача данных в открытом виде невозможна)

clientInfo*

object

Клиент

firstName*

string(60)

Имя клиента

lastName*

string(60)

Фамилия клиента

middleName

string(60)

Отчество клиента

birthdate

string date

Дата рождения клиента в формате YYYY-MM-DD

phone*

string(11)

Телефон клиента в формате РФ с маской: «7XXXXXXXXXX».

email*

string(250)

Email клиента

subPartnerInfo

object

Информация о субпартнере: например, Магазин-Партнер подключился не напрямую к Подели, а через другого партнера (Юkassa, Коробка эквайринга и др.) Для партнеров, работающих напрямую с Подели, секция не используется

login*

string(250)

Логин субпартнера

name

string(250)

Наименование субпартнера

inn

string(12)

ИНН субпартнера

ogrn

string(20)

ОГРН субпартнера

notificationUrl

string(500)

Адрес для http-нотификаций, если не указан, будет использоваться дефолтный из настроек магазина. Обязательно указывать протокол (https или http).

failUrl*

string(500)

URL для редиректа клиента в случае неуспешной оплаты первого платежа по заказу. Обязательно указывать протокол (https или http).

successUrl*

string(500)

URL для редиректа клиента в случае успешной оплаты первого платежа по заказу. Обязательно указывать протокол (https или http).

failScoringUrl

string(500)

URL для редиректа клиента в случае отказа клиенту по скорингу. Обязательно указывать протокол (https или http).

terminalId

string(36)

Идентификатор терминала

orderSource

string(36)

Канал оформления заказа в Магазине-Партнере. Допустимые значения: mob, web

comment1

string(500)

Комментарий Магазина-Партнера

comment2

string(500)

Комментарий Магазина-Партнера

Параметры ответа и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор исходного запроса (для связи ответных сообщений)

Тело сообщения#

status*

string order_stat us_text

Статус заказа

amount

number double

Общая сумма подлежащая оплате клиентом

redirectUrl

string

Ссылка-редирект на страницу сервиса «Подели»

error

object

Описания ошибок

code*

string

Код ошибки

text*

string

Текст ошибки

Возможные статус коды#

200

Заявка успешно создана

400

Неверно заданные параметры. Проверьте вводимые данные

401

Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен)

422

Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить)

429

Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество)

500

Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок)

Тело запроса

Пример запроса:

Тело ответа

Пример ответа:

json
{
   "status": "CREATED",
   "amount": 5000.0,
   "redirectUrl": "https://pokupka-sand.podeli.ru/login?guid=2add8220-0da6-4ef0-94d5-854ca4f920d8&amountAll=5000.0&amountFirst=1250.00&flowId=1"
}

Пример Ответа со Статус кодом 400:

json
{
   "error": {
       "code": "validation_error",
       "text": "Structure 'order' must be filled"
   }
}

Пример Ответа со Статус кодом 401:

json
{
   "error": {
       "code": "not_authorized_partner_login",
       "text": "Ошибка аутентификации: неверный логин/пароль"
   }
}

Пример Ответа со Статус кодом 422:

json
{
   "error": {
       "code": "duplicated_request",
       "text": "Запрос с таким X-Correlation-ID fa8b069c-1875-4969-9d3b-494772b0d188 уже был отправлен ранее"
   }
}

Пример Ответа со Статус кодом 429:

json
{
   "error": {
       "code": "req_number_exceeded",
       "text": "Превышен лимит запросов к серверу"
   }
}

Пример Ответа со Статус кодом 500:

json
{
   "error": {
       "code": "unknown_error",
       "text": "При выполнении запроса возникла неизвестная ошибка"
   }
}

Пример запроса CREATE на Python

Создание заказа оффлайн ’CREATE_OFFLINE’#

text
POST https://api-sand.podeli.ru/partners/v1/orders/create_offline
Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль МагазинаПартнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Подсказка

Рекомендации по настройке таймаутов:

  • ожидание ответа на метод create - в 60 секунд

  • метод info по статусам опрашивать с периодичностью 10 сек до перехода заказа в терминальный статус

Алгоритм действий

  1. Клиент, находясь в оффлайн Магазине Партнера показывает кассиру QR в мобильном приложении ПОДЕЛИ.

  2. Кассир сканирует QR код, ПО кассы извлекает из него информацию об external_id клиента в «Подели» и вызывает метод CREATE_OFFLINE

  3. В ПОДЕЛИ создается заказ, запускается скоринг по клиенту.

Поля для заполнения и их обязательность (*)#

order*

object

Заказ

id*

string(44)

Идентификатор заказа в Магазине-Партнере

amount*

number(18,2)

Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков

prepaidAmount*

number(18,2)

Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков

items*

object

Позиции в заказе

id*

string(36)

Идентификатор позиции в Магазине-Партнере

article

string(50)

Артикул товара

name*

string(250)

Наименование (описание) товара

amount*

number(18,2)

Сумма для оплаты по позиции через «Подели». Сумма указывается в рублях с точностью до двух знаков

quantity*

number(18,2)

Количество товара в заказе. В случае нецелочисленного кол-ва передавать значение согласно правилу

prepaidAmount*

number(18,2)

Сумма аванса, внесенного клиентом через другие способы оплаты, распределенная на конкретные товары в заказе

isTwoStagePayment

boolean

Первый платеж по заказу двухстадийный или нет (для этого метода всегда false)

latitude

number

Широта

longitude

number

Долгота

mall*

string(250)

Торговый центр

address*

string(250)

Адрес магазина

cashRegisterNumber

string(250)

Номер кассы

cashierNumber

string(250)

Номер кассира

comment

string(500)

Комментарий

clientInfo*

object

Клиент

id

string

external id Клиента в «Подели», закодированное в base64, полученный в QR коде

terminalId

string(36)

Идентификатор терминала

comment1

string(500)

Комментарий Магазина-Партнера

comment2

string(500)

Комментарий Магазина-Партнера

Параметры ответа и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор исходного запроса (для связи ответных сообщений)

Тело сообщения приходит пустым

Возможные статус коды#

200

Заявка успешно создана

400

Неверно заданные параметры. Проверьте вводимые данные

401

Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен)

422

Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить)

429

Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество)

500

Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок)

Тело запроса

Пример запроса:

Тело ответа

Пример ответа со Статус кодом 200:

json

Пустой ответ (в ответе данного метода передается только код ответа)

Пример Ответа со Статус кодом 400:

json
{
   "error": {
       "code": "validation_error",
       "text": "Structure 'order' must be filled"
   }
}

Пример Ответа со Статус кодом 401:

json
{
   "error": {
       "code": "not_authorized_partner_login",
       "text": "Ошибка аутентификации: неверный логин/пароль"
   }
}

Пример Ответа со Статус кодом 422:

json
{
   "error": {
       "code": "duplicated_request",
       "text": "Запрос с таким X-Correlation-ID fa8b069c-1875-4969-9d3b-494772b0d188 уже был отправлен ранее"
   }
}

Пример Ответа со Статус кодом 429:

json
{
   "error": {
       "code": "req_number_exceeded",
       "text": "Превышен лимит запросов к серверу"
   }
}

Пример Ответа со Статус кодом 500:

json
{
   "error": {
       "code": "unknown_error",
       "text": "При выполнении запроса возникла неизвестная ошибка"
   }
}

Пример запроса CREATE_OFFLINE на Python

Подтверждение заказа ‘COMMIT’#

text
POST https://api-sand.podeli.ru/partners/v1/orders/{orderId}/commit
Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль Магазина Партнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Алгоритм действий

  1. После получения от «Подели» статуса заказа „wait_for_commit“ (в виде HTTP-нотификации, либо при вызове метода INFO) Магазин-Партнер подтверждает сделку, вызывая метод COMMIT.

  2. Сервис «Подели» посылает запрос на авторизацию захолдированного первого платежа по рассрочке в систему эквайринга банка.

  3. Сервис «Подели» возвращает Магазину-Партнеру результат авторизации первого платежа по рассрочке в HTTP-нотификации.

Поля для заполнения и их обязательность (*)#

order*

object

Заказ

amount*

number(18,2)

Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков

prepaidAmount*

number(18,2)

Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков

items

object

Подтвержденные позиции в заказе. Cекцию необходимо заполнять только в случае, если корзина, переданная в CREATE, изменилась (не все позиции попали в итоговую корзину)

id*

string(36)

Идентификатор позиции в Магазине-Партнере

article

string(50)

Артикул товара

quantity*

number(18,2)

Количество товара, отгрузку которого подтверждает Магазин-Партнер. Не должно превышать количество позиций товара, указанное при создании заказа методом CREATE

Поля для заполнения и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор исходного запроса (для связи ответных сообщений)

Тело сообщения#

status*

enum order_status_text

Статус заказа

amount

number double

Сумма для оплаты через «Подели»

paymentSchedule

object

Данные по графику платежей

paymentNumber*

string

Номер платежа

paymentDate*

string date

Дата платежа

paymentAmount*

number

Сумма платежа (в рублях, с точностью до 2 знаков)

statusName*

string

Статус платежа

typeName*

string

Тип платежа

error

object

Описания ошибок

code*

string

Код ошибки

text*

string

Текст ошибки

Возможные Статус коды#

200

Заявка успешно создана

400

Неверно заданные параметры. Проверьте вводимые данные

401

Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен)

422

Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить)

429

Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество)

500

Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок)

Тело запроса

Пример запроса:

json
{
   "order":{
       "amount": 2100.00,
       "prepaidAmount": 200.00
   }
}

Тело ответа

Пример ответа:

Пример Ответа со Статус кодом 400:

json
{
   "error": {
       "code": "validation_error",
       "text": "Structure 'order' must be filled"
   }
}

Пример Ответа со Статус кодом 401:

json
{
   "error": {
       "code": "not_authorized_partner_login",
       "text": "Ошибка аутентификации: неверный логин/пароль"
   }
}

Пример Ответа со Статус кодом 422:

json
{
   "error": {
       "code": "incorrect_order_status",
       "text": "Ошибка при обработке заказа: в текущем статусе невозможно выполнить действие"
   }
}

Пример Ответа со Статус кодом 429:

json
{
   "error": {
       "code": "req_number_exceeded",
       "text": "Превышен лимит запросов к серверу"
   }
}

Пример Ответа со Статус кодом 500:

json
{
   "error": {
       "code": "unknown_error",
       "text": "При выполнении запроса возникла неизвестная ошибка"
   }
}

Пример запроса COMMIT на Python

Метод отмены заказа ‘CANCEL’#

text
POST https://api-sand.podeli.ru/partners/v1/orders/{orderId}/cancel
Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль МагазинаПартнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Алгоритм действий

  1. При отмене заказа (по инициативе клиента или самого Магазина Партнера) вызывается метод CANCEL.

  2. Отменить возможно только заказы в статусах: «created», «scoring», «wait_for_commit».

  3. Сервис «Подели» отменяет заказ, отменяет холд первого платежа (если был выполнен), отменяет автоплатежи по графику.

Поля для заполнения и их обязательность (*)#

cancellationInitiator*

string

Инициатор отмены Заказа - заполнить: shop - если заказ отменен Магазином Партнером client - если заказ отменен Клиентом

Параметры ответа и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор исходного запроса (для связи ответных сообщений)

Тело сообщения#

status*

enum order_status_text

Статус заказа

amount

number double

Сумма для оплаты через «Подели»

paymentSchedule

object

Данные по графику платежей

paymentNumber*

string

Номер платежа

paymentDate*

string date

Дата платежа

paymentAmount*

number

Сумма платежа (в рублях, с точностью до 2 знаков)

statusName*

string

Статус платежа

typeName*

string

Тип платежа

error

object

Описания ошибок

code*

string

Код ошибки

text*

string

Текст ошибки

Возможные Статус коды#

200

Заявка успешно создана

400

Неверно заданные параметры. Проверьте вводимые данные

401

Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен)

422

Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить)

423

Невозможно отменить заказа, платеж находится в обработке (Заказ в статусе APPROVED не может быть отменен)

429

Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество)

500

Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок)

Тело запроса

Пример запроса:

json
{
   "cancellationInitiator":"shop"
}

Тело ответа

Пример ответа:

json
{
   "status": "CANCELLED",
   "amount": 5000.00,
   "paymentSchedule": []
}

Пример Ответа со Статус кодом 400:

json
{
   "error": {
       "code": "validation_error",
       "text": "The 'cancellationInitiator' field must be filled in"
   }
}

Пример Ответа со Статус кодом 401:

json
{
   "error": {
       "code": "not_authorized_partner_login",
       "text": "Ошибка аутентификации: неверный логин/пароль"
   }
}

Пример Ответа со Статус кодом 422:

json
{
   "error": {
       "code": "incorrect_order_status",
       "text": "Ошибка при обработке заказа: в текущем статусе невозможно выполнить действие"
   }
}

Пример Ответа со Статус кодом 429:

json
{
   "error": {
       "code": "req_number_exceeded",
       "text": "Превышен лимит запросов к серверу"
   }
}

Пример Ответа со Статус кодом 500:

json
{
   "error": {
       "code": "unknown_error",
       "text": "При выполнении запроса возникла неизвестная ошибка"
   }
}

Пример запроса CANCEL на Python

Возврат товара ‘REFUND’#

text
POST https://api-sand.podeli.ru/partners/v1/orders/{orderId}/refund
Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль МагазинаПартнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Алгоритм действий

  1. При необходимости оформить возврат товаров из заказа Магазин Партнер вызывает метод REFUND.

  2. Оформить возврат возможно только для заказов, которые были в статусе „completed“.

Поля для заполнения и их обязательность (*)#

order*

object

Заказ

refund*

object

Возврат

id*

string(36)

id возврата в Магазине Партнере

initiator*

string

Инициатор возврата (допустимые значения - „client“, „shop“)

items*

object

Возвращаемые позиции из заказа

id*

string(36)

id позиции из заказа для возврата

refundedQuantity*

number(18,2)

Количество возвращаемого товара

refundedSum

number(18,2)

Сумма к возврату по товару, оплаченная через «Подели». Заполнение данного поля разрешается только для партнеров с которыми согласована возможность указания суммы к возврату (по бизнес-процессу невозможен полный возврат стоимости товара, например, удерживается комиссия). В остальных случаях данное поле не должно быть заполнено, а сумма к возврату будет рассчитана на стороне «Подели» на основе данных по заказу.

description

string(250)

описание возврата в свободной форме

comment1

string(500)

Комментарий Магазина-Партнера

addParams

object

Дополнительные параметры возврата

key

string

Код дополнительного параметра

value

string

Значение дополнительного пар

Параметры ответа и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор исходного запроса (для связи ответных сообщений)

Тело сообщения#

order*

object

Заказ

id*

string

Идентификатор заказа в Магазине-Партнера

status*

string

Статус заказа

items

object

Позиция в заказе

id*

string

Идентификатор заказа в Магазине-Партнера

article

string

Артикул товара

name

string

Наименование (описание) товара

amount*

double

Стоимость позиции для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков

quantity*

number

Количество товара в заказе

refund*

object

Возврат

id*

string

id возврата

status*

string

Статус возврата. Не отражает фактический статус операции

refundRequestDate

string date

Дата заявления на возврат

totalRefundedAmount*

number

Общая сумма возврата

refundedAmountCredit*

number

Сумма возврата, уплаченная через «Подели»

refundedPrepaidAmount*

number

Общая сумма возвращенной предоплаты другим способом, отличным от сервиса «Подели» (в рублях, с точностью до 2 знаков)

refundedItems*

object

Возвращенные позиции из заказа

id*

string

Идентификатор позиции в Магазине-Партнера

refundedQuantity*

number

Количество возвращенного товара

refundedAmount*

number

Сумма возвращенной оплаты

refundedPrepaidAmount*

number

Сумма возвращенной предоплаты

error

object

Описания ошибок

code*

string

Код ошибки

text*

string

Текст ошибки

Возможные Статус коды#

200

Заявка успешно создана

400

Неверно заданные параметры. Проверьте вводимые данные

401

Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен)

422

Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить)

429

Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество)

500

Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок)

Тело запроса

Пример запроса:

json
{
 "order": {
   "refund": {
     "id": 1234466,
     "initiator": "client",
     "items": [
       {
         "id": "30b925fb-42ae-469d-960e-7cb093d8867e",
         "refundedQuantity": 1
       }
     ],
     "addParams": [
       {
         "key": "mall",
         "value": "ТРЦ Сити Молл"
       },
       {
         "key": "cashRegisterNumber",
         "value": "1234567890"
       },
       {
         "key": "cashierNumber",
         "value": "0987654321"
       },
       {
         "key": "terminalId",
         "value": "1234"
       }
     ],
     "comment1": "комментарий"
   }
 }

}

Тело ответа

Пример ответа:

Пример Ответа со Статус кодом 400:

json
{
   "error": {
       "code": "validation_error",
       "text": "Structure 'order' must be filled"
   }
}

Пример Ответа со Статус кодом 401:

json
{
   "error": {
       "code": "not_authorized_partner_login",
       "text": "Ошибка аутентификации: неверный логин/пароль"
   }
}

Пример Ответа со Статус кодом 422:

json
{
   "error": {
       "code": "incorrect_order_status",
       "text": "Ошибка при обработке заказа: в текущем статусе невозможно выполнить действие"
   }
}

Пример Ответа со Статус кодом 429:

json
{
   "error": {
       "code": "req_number_exceeded",
       "text": "Превышен лимит запросов к серверу"
   }
}

Пример Ответа со Статус кодом 500:

json
{
   "error": {
       "code": "unknown_error",
       "text": "При выполнении запроса возникла неизвестная ошибка"
   }
}

Пример запроса REFUND на Python

Получение информации по заказу ‘INFO’#

Доступен для вызова в любой момент после создания заказа методом CREATE.

text
GET https://api-sand.podeli.ru/partners/v1/orders/{orderId}/info
Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль МагазинаПартнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Поля для заполнения и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Тело сообщения#

order*

object

Заказ

id*

string

Идентификатор заказа в Магазине-Партнера

amount

number

Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков

prepaidAmount

number

Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков

amountOrder

number

Общая сумма заказа (в рублях). Сумма указывается в рублях с точностью до двух знаков

status*

string

Статус заказа

date*

date-time

Дата заказа

items

object

Позиции в заказе

id*

string

Идентификатор заказа в Магазине-Партнера

article

string

Артикул товара

name

string

Наименование (описание) товара

amount*

double

Стоимость позиции для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков

quantity*

number

Количество товара в заказе

prepaidAmount

number

Сумма аванса, внесенного клиентом через другие способы оплаты, распределенная на конкретные позиции в заказе. Сумма указывается в рублях с точностью до двух знаков

clientInfo

object

Клиент

firstName

string

Имя клиента (Данные скрыты)

lastName

string

Фамилия клиента (Данные скрыты)

middleName

string

Отчество клиента (Данные скрыты)

birthdate

string

Дата рождения клиента в формате YYYY-MM-DD (Данные скрыты)

phone*

string

Телефон клиента в формате РФ с маской: «7XXXXXXXXXX» (Данные скрыты)

email

string

Email клиента

paymentSchedule*

object

Данные по графику платежей

paymentNumber*

string

Номер платежа

paymentDate*

string

Дата платежа

paymentAmount*

number

Сумма платежа (в рублях, с точностью до 2 знаков)

statusName*

string

Статус платежа

refund*

object

Данные по возвратам

id*

string

id возврата

status*

string

Статус возврата. Не отражает фактический статус операции

refundDate*

string

Дата возврата

totalRefundedAmount*

number

Сумма возврата товаров (в рублях, с точностью до 2 знаков)

refundedPrepaidAmount*

number

Общая сумма возвращенной предоплаты другим способом, отличным от сервиса «Подели» (в рублях, с точностью до 2 знаков)

refundedAmountCredit*

number

Сумма возврата, оплаченная через «Подели»

refundedItems

object

Возвращенные позиции из заказа

id*

string

Идентификатор позиции в магазине партнера

refundedQuantity*

number

Количество возвращенного товара

refundedAmount*

number

Сумма возвращенной оплаты

refundedPrepaidAmount*

number

Сумма возвращенной предоплаты

error

object

Описания ошибок

code*

string

Код ошибки

text*

string

Текст ошибки

Возможные Статус коды#

200

Заявка успешно создана

400

Неверно заданные параметры. Проверьте вводимые данные

401

Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен)

422

Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить)

429

Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество)

500

Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок)

Тело ответа

Пример ответа:

Пример Ответа со Статус кодом 404:

json
{
   "error": {
       "code": "not_found_order",
       "text": "Заказ не найден"
   }
}

Пример Ответа со Статус кодом 401:

json
{
   "error": {
       "code": "not_authorized_partner_login",
       "text": "Ошибка аутентификации: неверный логин/пароль"
   }
}

Пример запроса INFO на Python

Метод сверки заказов ‘ORDER_RECONCILIATION’#

text
GET https://api-sand.podeli.ru/partners/v1/orders/order_reconciliation?dateFrom={dateFrom}&dateTo={dateTo}&mall={mall}&cashRegisterNumber={cashRegisterNumber}&detailing={detailing}
Параметры запроса и их обязательность (*)#

dateFrom*

Дата/время начала периода (формат YYYY-MM-DD ТHH24:MM:SS±HH:MM)

dateTo*

Дата/время окончания период (формат YYYY-MM-DD ТHH24:MM:SS±HH:MM)

mall

Торговый центр

cashRegisterNumber

Номер кассы

detailing*

Флаг запроса детализированной сверки („true“ - детализированная сверка, „false“ - общая сверка)

Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль МагазинаПартнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Поля для заполнения и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Форма ответа (общая сверка)#

order

object

Информация по заказам

payments

object

Информация по оплатам

sum*

number

Сумма заказов

count*

integer

Количество заказов

refunds

object

Информация по возвратам

sum*

number

Сумма возвратов

count*

integer

Количество возвратов

total

object

Информация по оплатам с учетом возвратов

sum*

number

Сумма заказов с учетом возвратом

count*

integer

Общее количество заказов/возвратов

error

object

Ошибка

code*

string

Код ошибки

text*

string

Текст ошибки

Форма ответа (детализированная сверка)#

order

object

Информация по заказам

payments

object

Информация по оплатам

orderId*

string

Идентификатор заказа

amount*

number

Сумма заказа

transactionDate*

string

Дата/время заказа

refunds

object

Информация по возвратам

refundId*

string

Идентификатор возврата

amount*

integer

Сумма возврата

transactionDate*

string

Дата/время возврата

error

object

Ошибка

code*

string

Код ошибки

text*

string

Текст ошибки

Статус ответа#

200

Запрос успешно обработан

400

Отсутствует X-Correlation-ID или обязательный параметр запроса

401

Ошибка аутентификации: неверный логин/пароль

402

Истек срок действия договора с Магазином-Партнером

402

Превышено количество запросов от Магазина-Партнера

405

Неверный формат даты

416

Превышен период сверки заказов

500

При выполнении запроса возникла неизвестная ошибка

Тело ответа

Пример ответа:

Получения графика платежей ’CALCULATE’#

text
POST https://api-sand.podeli.ru/partners/v1/orders/calculate
Заголовки запроса и их обязательность (*)#

Content-Type*

string

Тип контента (application/json)

Authorization: Basic*

base64

Логин и пароль МагазинаПартнера

X-Correlation-ID*

string(36)

Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций

Алгоритм действий

  1. Партнер направляет в сервис «Подели» сумму для рассчета графика платежа.

  2. Сервис «Подели» направляет в ответ рассчитанный график платежей.

Поля для заполнения и их обязательность (*)#

sum*

number(18;2)

Сумма для рассчета графика

Поля для заполнения и их обязательность (*). Заголовки ответа#

X-Retry-After

number

Время в секундах, через сколько можно повторить следующий запрос

X-Correlation-ID*

string

Идентификатор исходного запроса (для связи ответных сообщений)

Тело сообщения#

paymentSchedule

object

Данные по графику платежей

paymentNumber*

string

Номер платежа

paymentDate*

string date

Дата платежа

paymentAmount*

number

Сумма платежа (в рублях, с точностью до 2 знаков)

error

object

Описания ошибок

code*

string

Код ошибки

text*

string

Текст ошибки

Возможные Статус коды#

200

График успешно рассчитан

400

Неверно заданные параметры. Проверьте вводимые данные

401

Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен)

429

Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество)

500

Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок)

Тело запроса

Тело ответа

Пример Ответа со Статус кодом 400:

json
{
   "error": {
       "code": "validation_error",
       "text": "The 'cancellationInitiator' field must be filled in"
   }
}

Пример Ответа со Статус кодом 401:

json
{
   "error": {
       "code": "not_authorized_partner_login",
       "text": "Ошибка аутентификации: неверный логин/пароль"
   }
}

Пример запроса CALCULATE на Python

Подсказка

Правила заполнения полей запроса при передаче дробных значений количества товара в ситуации, когда количество товара - дробное, например:

  • 1,56 кг яблок стоимостью 234,67 р/кг,

  • 0,254 кг салат стоимость 801,20 р/кг

поля amount, quantity и prepaidAmount секции order/items необходимо заполнять следующим образом:

items[1]

  • в поле items/amount - указать сумму оплаты единицы измерения товара через «Подели», 234,67

  • в поле items/quantity - дробное количество, 1,56

  • в поле items/prepaidAmount - ничего не передавать (поле необязательное)

items[2]

  • в поле items/amount - 801,20

  • в поле items/quantity - 0,254

  • в поле items/prepaidAmount - ничего не передавать (поле необязательное)

поля amount и prepaidAmount секции order заполнять следующим образом:

  • в поле order/amount - передать сумму округленных(математически) значений стоимости каждой позиции из заказа, округл(131,4152 ;2) + округл(203,5048 ;2) = 131,42+203,50 = 334,92

  • в поле order/prepaidAmount - сумму скидки по заказу либо сумму, оплаченную бонусными баллами (общую по заказу)

Библиотека для API#

Для Вашего удобства, чтобы ускорить разработку, мы сделали обертку, которую Вы можете интегрировать в ваш проект и посмотреть, как это работает:

Архив для Python ссылка на архив Python

Архив для dotNet ссылка на архив Net

Архив для php ссылка на архив php

Архив для Битрикс ссылка на архив