Добро пожаловать
API pague.dev позволяет интегрировать обработку платежей в ваши приложения. Эта документация охватывает все доступные эндпоинты для управления клиентами, проектами, платежами, транзакциями и платежами PIX.Базовый URL
Все запросы должны отправляться на:Аутентификация
Аутентификация выполняется в два этапа: вы обмениваете учётные данные вашего аккаунта на короткоживущий токен доступа и отправляете этот токен в заголовкеAuthorization каждого запроса.
1. Получите ваши учётные данные
Создайте учётные данные API в Dashboard. Они состоят изclient_id и client_secret:
mp_live_*— учётные данные для продакшенаmp_test_*— учётные данные для песочницы
2. Сгенерируйте токен доступа
Обменяйте ваши учётные данные на токен через эндпоинт аутентификации:Ответ
401 {"error": "Unauthorized", "message": "Invalid credentials"}.
3. Используйте токен в запросах
Отправляйте токен в заголовкеAuthorization:
Токен истекает через 300 секунд (5 минут). Сгенерируйте новый токен через
/auth после истечения — refresh token не предусмотрен.Разрешения
Каждые учётные данные имеют гранулярные разрешения, определяющие, к каким эндпоинтам они могут обращаться. Разрешения назначаются в момент создания учётных данных.Доступные разрешения
Разрешение
FULL_ACCESS предоставляет доступ ко всем эндпоинтам и эквивалентно наличию всех перечисленных выше разрешений.Исключение: доступ к субсчетам — это не разрешение. FULL_ACCESS покрывает эндпоинты /sub-accounts (создание и просмотр кошельков), но не включает заголовок X-Sub-Account — это отдельное поле учётных данных. См. Субсчета.Ограничение по IP
При желании вы можете ограничить учётные данные списком разрешённых IP-адресов. Когда список настроен, запросы с IP-адресов вне списка отклоняются с ошибкой403 Forbidden.
Мы рекомендуем настраивать ограничение по IP для учётных данных с чувствительными разрешениями, такими как FULL_ACCESS и WITHDRAWAL:WRITE.
Субсчета
У аккаунта могут быть субсчета — дочерние кошельки, баланс которых полностью независим от баланса основного аккаунта. Каждый субсчёт идентифицируется поreference, который вы задаёте сами.
Субсчета и разделение платежа работают в обоих окружениях: учётные данные mp_test_* создают кошельки и работают с ними в песочнице так же, как mp_live_* в продакшене.
Чтобы выполнить операцию в субсчёте, отправьте заголовок X-Sub-Account с его reference:
/auth и самих эндпоинтов /sub-accounts: создание и получение списка субсчетов всегда выполняются в основном аккаунте. Если он передан, вся операция выполняется в субсчёте — создание платежа, получение транзакции, создание вывода средств, проверка баланса. Если он не передан, операция выполняется в основном аккаунте. X-Sub-Account: principal тоже указывает на основной аккаунт и равнозначен отсутствию заголовка.
reference задаётся вами при создании субсчёта и является неизменяемым. Он должен соответствовать ^[a-z0-9][a-z0-9_-]{1,31}$: от 2 до 32 символов, только строчные латинские буквы, цифры, - и _, начиная со строчной буквы или цифры.principal — зарезервированное слово: оно обозначает основной аккаунт в split и в заголовке X-Sub-Account, поэтому создать субсчёт с таким reference нельзя.Субсчета в песочнице
ЗаголовокX-Sub-Account, поле split, слово principal и внутренний перевод работают в песочнице ровно так же, как в продакшене.
Один и тот же reference может существовать в обоих окружениях. Аккаунт песочницы и продакшен-аккаунт — это разные аккаунты, поэтому loja-centro в песочнице и loja-centro в продакшене сосуществуют без конфликта. Именно это позволяет одному и тому же payload работать в обоих: вы тестируете с mp_test_*, меняете ключ на mp_live_* и переходите в продакшен, не меняя ни строки.
Два дерева изолированы. Учётные данные
mp_test_* видят только кошельки песочницы, а mp_live_* — только продакшен-кошельки.Это касается и split: разделение из кошелька песочницы в продакшен-кошелёк отклоняется, потому что в этом контексте продакшен-кошелька не существует. Ошибка та же — Subconta 'X' não existe nesta conta ou não está ativa.loja-centro в продакшене не создаёт его в песочнице — это две отдельные записи, и так задумано.
Комиссия одинакова в обоих окружениях, и это сделано намеренно: кошелёк песочницы наследует комиссию продакшен-аккаунта именно для того, чтобы потолок разделения — чистая сумма, а не брутто — вёл себя одинаково. Разделение, которое проходит в песочнице, пройдёт и в продакшене. Кошелёк песочницы, создавший платёж на R 1,00, получает +R 1,00, при комиссии R$ 0,20; те же числа, что и в продакшене.
Внутренний перевод
Субсчёт создаётся с нулевым балансом. Внутренний перевод — это то, как вы пополняете новый кошелёк и как позже возвращаете остаток в основной аккаунт. Он перемещает средства между счетами одного владельца: из основного аккаунта в кошелёк, из кошелька в основной аккаунт или между «сестринскими» кошельками. Это не PIX и не вывод средств — это перекладывание из одного своего кармана в другой. Деньги уходят с одного счёта и поступают на другой, попадают в обе выписки, а общий баланс аккаунта не меняется.В публичном API нет эндпоинта внутреннего перевода. Операция выполняется в Дашборде, на экране кошельков. Искать маршрут бесполезно: в этот контракт он не входит.
- Только в пределах своей структуры. Перевода на счёт третьего лица здесь нет — это PIX, и путь для него другой: Создать вывод средств PIX.
- Потолок — доступный к трате баланс источника, а не полный доступный остаток: это доступное за вычетом непогашенного долга по возвратам, тот же критерий, что и для вывода средств.
- Отмены нет. Ошибочный перевод исправляется обратным переводом.
internal_transfer — списание (отрицательная сумма) у источника и зачисление (положительная) у получателя. Это тот же тип, что и у частей разделения платежа: в обоих случаях GET /transactions/{id} возвращает type: internal_transfer.
Лимиты субсчёта
По умолчанию кошелёк использует общий бюджет лимитов основного аккаунта. Так ведёт себя любой субсчёт, созданный через API или в панели: расход всех кошельков суммируется в пределах одного и того же потолка владельца. Платформа может в отдельных случаях выделить кошельку собственный бюджет, отделив его расход от остального аккаунта. Это решение платформы: оно не настраивается продавцом, для него нет эндпоинта и нет самообслуживания — если это нужно вашей операции, обратитесь в поддержку. В песочнице лимитов нет: описанный здесь общий потолок проявляется только в продакшене. Это не особенность кошельков — так работает любая операция в песочнице, — поэтому не делайте из тестов вывод, что общий бюджет исчез. Не путайте это сSUB_ACCOUNT_QUOTA_EXCEEDED из таблицы ниже: тот лимит — на количество кошельков в аккаунте, к сумме оборота он отношения не имеет.
Ошибки субсчетов
Доступом к кошелькам управляют две разные вещи, и отказывают они по-разному:
- Разрешение учётных данных относится к эндпоинтам
/sub-accounts: для списка нуженSUBACCOUNT:READ, для создания —SUBACCOUNT:WRITE. Без него ответ —403 Insufficient permissions. Required: SUBACCOUNT:READ. - Область действия учётных данных относится к работе внутри кошелька: она определяет, до каких кошельков эти учётные данные дотягиваются через заголовок
X-Sub-Accountи черезsplit, и именно она возвращаетSUB_ACCOUNT_FORBIDDEN.
X-Sub-Account и split достаточно PIX:WRITE: разрешения SUBACCOUNT:* управляют реестром кошельков, а не их использованием.
Субсчета создаются через Создать субсчёт, а их список доступен в Списке субсчетов. В вебхуках поле subAccount указывает, какому кошельку принадлежит событие — см. Вебхуки.
Разделение платежа
Платёж PIX может разделить часть полученной суммы с другими кошельками того же аккаунта — субсчетами или самим основным аккаунтом. Отправьте необязательное полеsplit при создании платежа:
Суммы фиксированные, в BRL: разделение по процентам не поддерживается. Ответ на создание возвращает принятый
split в том же формате и тоже в BRL — если он пришёл в ответе, значит субсчета существовали и сумма поместилась. Проверка выполняется до создания платежа: некорректный split возвращает 400, и платёж не создаётся.
Инициатор — тот, кто создал платёж
Инициатор — это аккаунт (или субсчёт из заголовкаX-Sub-Account), создавший платёж. Именно он получает сумму брутто, платит полную комиссию и только потом делит остаток.
Комиссия не делится между получателями. Каждый субсчёт из split получает ровно тот amount, который вы указали, без каких-либо вычетов.
Потолок разделения — чистая сумма, а не брутто
Разделить можно максимум сумму платежа за вычетом комиссии. При платеже на R 1,49 чистая сумма равна **R 98,51 принимается (инициатору остаётся ноль).split на сумму **R 100,00 самого платежа:
Ответ 400
Разделение происходит при зачислении
Создание платежа не двигает деньги вообще.split сохраняется в платеже и выполняется только тогда, когда оплата подтверждена — именно в этот момент суммы уходят с баланса инициатора и поступают на кошельки получателей. Истёкший или неоплаченный платёж не порождает разделения.
Комиссия аккаунта может измениться между созданием платежа и его оплатой. Если при зачислении сумма
split больше не помещается в чистую сумму, части выполняются в том порядке, в котором вы их отправили, пока чистая сумма не закончится: последняя может быть уменьшена или не выполнена вовсе. Зачисление из-за этого никогда не срывается — сортируйте массив по приоритету и сверяйтесь по полю split вебхука payment_completed, в котором приходит фактически распределённое.Только кошельки того же аккаунта
subAccount принимает reference активного субсчёта того же аккаунта либо зарезервированное слово principal. Разделения за пределы своей структуры в этом API нет.
Разделение обратно в основной аккаунт
principal — единственное слово, которое не является ничьим reference: оно указывает на основной аккаунт как на получателя части суммы. Это обратный путь по отношению ко всему остальному в этом разделе: платёж создаётся в субсчёте, и часть чистой суммы возвращается в основной аккаунт:
loja-centro — именно он платит полную комиссию, а основной аккаунт получает свою часть без вычетов, как и любой другой получатель.
В ответе на создание и в поле split вебхука приходит "subAccount": "principal" — так же, как и для остальных кошельков.
Платёж, созданный основным аккаунтом, не может делиться с
principal — это было бы разделение с самим собой, и всё неразделённое и так остаётся у него. Такой случай возвращает 400.Разделение из субсчёта
ЗаголовокX-Sub-Account и поле split отвечают на разные вопросы и работают вместе: заголовок говорит, кто инициирует платёж, а split — кому уходит часть чистой суммы.
Субсчёт может инициировать платёж и разделить его с «сестринским» субсчётом. При этом основной аккаунт не затрагивается — он ничего не получает и не платит комиссию:
loja-centro: он получает R 20,00 субсчёту loja-sul. Субсчёт не может разделить платёж сам с собой.
Ошибки разделения
Все возвращают400. Тексты сообщений приходят от API ровно в таком виде:
В выписке
При зачислении каждая часть разделения порождает две строки типаinternal_transfer, обе привязаны к платежу через parentTransactionId:
- списание у инициатора —
Split enviado para loja-centro, либоSplit enviado para a conta principal, когда получатель —principal - зачисление на кошелёк получателя —
Split recebido do pagamento {ID платежа}
type: internal_transfer. parentTransactionId — связь на уровне выписки, в публичный ответ он не входит.
Выбор учреждения
Каждый счёт PIX выставляется одним из учреждений, привязанных к вашему аккаунту. По умолчанию выбор делает маршрутизация, настроенная в панели — фиксированный порядок, разделение по долям или автоматический режим. Если в вашем аккаунте включён выбор учреждения, вы можете решать это для каждого счёта, передаваяpspCredentialId при создании счёта:
Где взять ID
В панели, в разделе Настройки → Маршрутизация. У каждого учреждения ID показан прямо под цифрами, рядом кнопка «Копировать». Он находится именно там, а не в отдельном списке, намеренно: в той же строке видно конверсию за последние 6 часов, итоги за 7 и 30 дней и отвечает ли учреждение. Выбирать учреждение без этих цифр — выбирать вслепую. ID стабилен: он не меняется при изменении порядка учреждений, смене режима или отключении другого учреждения.Зафиксировать — не значит «предпочесть»
Когда вы передаётеpspCredentialId, счёт выставляется этим учреждением или не выставляется вовсе. Отката к другому нет:
Ни в одном из случаев счёт не создаётся в другом учреждении.
Это сделано намеренно. Переход к другому учреждению означал бы, что QR родился не там, где вы просили, и вы узнали бы об этом только из ответа — что хуже ошибки как раз для тех, кто фиксирует учреждение ради сверки, лимитов или условий договора. Если конверсия важнее предсказуемости — не передавайте поле: для этого и существует маршрутизация с переключением при сбое.
Подтверждение в ответе
Если вы зафиксировали учреждение, ответ вернётpspCredentialId с тем, которое действительно выставило счёт — используйте его для сверки. Если поля не было в запросе, его не будет и в ответе.
Ответ 201
Ошибки выбора учреждения
Все400, код в поле reason:
Проверка выполняется до любого обращения к учреждению: отказ здесь никогда не оставляет счёт в подвешенном состоянии.
Выбор действует только для счетов PIX. Выводы по-прежнему уходят через учреждение, назначенное для выводов — там выбор остаётся за нами, поскольку это то же учреждение, которое оплачивает комиссии и возвраты.
Доступные ресурсы
PIX
Создание платежей PIX
Вебхуки
Получение уведомлений о событиях
Проекты
Организация платежей по проектам
Выводы средств
Создание выводов средств через PIX
Транзакции
Просмотр деталей транзакций
Аккаунт
Просмотр данных аккаунта и баланса
Субсчета
Дочерние кошельки с собственным балансом

