МФОПАК API v1

api.mfopak.ru · версия 1

API для сайта и приложений МФО

Через него работают сайт заёмщика и мобильные приложения: тарифы и расчёт займа, заявка с анкетой и подписью кодом из СМС, вход и личный кабинет с оплатой. API подключено к базе программы МФОПАК — заявка сразу видна сотруднику, а решение, начисления и платежи — заёмщику.

Адрес
https://api.mfopak.ru/v1
Формат
JSON, даты ГГГГ-ММ-ДД, суммы в рублях
Вход
Authorization: Bearer, токен на 8 часов
Ошибки
problem+json с полями анкеты

Сейчас включён демо-режим: СМС не отправляются — код приходит в ответе в поле demoCode, оплата в кабинете проводится без списания денег. Данные — демонстрационная база программы.

Как оформить заявку

Шесть запросов — от расчёта до кабинета. Так работает демо-сайт, так же подключается мобильное приложение.

  1. Тарифы и расчёт

    Сумма и срок прижимаются к условиям тарифа, расчёт — по тому же графику, по которому программа потом ведёт договор.

    GET  /v1/tariffs
    GET  /v1/tariffs/{id}/quote?amount=15000&term=14
    
    → { "amount": 15000, "returnDate": "2026-09-24", "total": 16680, "psk": 292, … }
  2. Код на телефон

    POST /v1/phone/code
    { "phone": "+7 (918) 123-45-67", "purpose": "application" }
    
    → { "phone": "+7 (918) 123-45-67", "expiresIn": 600, "resendIn": 30, "demoCode": "4821" }
  3. Подтверждение телефона

    Токен подтверждения живёт час и прикладывается к заявке. knownClient — номер уже есть в базе.

    POST /v1/phone/verify
    { "phone": "+7 (918) 123-45-67", "code": "4821" }
    
    → { "phoneToken": "CfDJ8…", "expiresIn": 3600, "knownClient": false }
  4. Код для подписи

    Заявка и согласия подписываются простой электронной подписью — отдельным кодом.

    POST /v1/phone/code
    { "phone": "+7 (918) 123-45-67", "purpose": "sign" }
  5. Заявка

    Анкета проверяется целиком: паспорт с заменой в 20 и 45 лет, контрольные цифры ИНН и СНИЛС, возраст 18–75. Карта передаётся только маской.

    POST /v1/applications
    {
      "phoneToken": "CfDJ8…", "signCode": "0937",
      "tariffId": 1, "amount": 15000, "term": 14,
      "lastName": "Габуева", "firstName": "Алина", "gender": "female", "birthDate": "1991-04-12",
      "passportSeries": "9011", "passportNumber": "123456", …,
      "payout": "card", "cardMasked": "2200 ** 1234", "cardExpiry": "09/29",
      "agreePersonalData": true, "agreeBureau": true, "agreeSignature": true
    }
    
    → 201 { "id": 58, "number": "З-00058", "status": "accepted", "newClient": true,
            "session": { "accessToken": "CfDJ8…", "expiresIn": 28800, … } }
  6. Кабинет

    С токеном из ответа — займы с долгом на сегодня, заявки и платежи.

    GET  /v1/me
    Authorization: Bearer CfDJ8…

Методы

Поля запросов и ответов описаны в библиотеке контрактов Mfopak.Api.Contracts — приложение на .NET подключает её как есть.

МетодАдресЧто делаетДоступ
Условия
GET/v1/lenderОрганизация, офисы, разброс полной стоимости займаоткрыто
GET/v1/tariffsТарифы, которые оформляются онлайноткрыто
GET/v1/tariffs/{id}/quoteРасчёт: график, сумма к возврату, ПСКоткрыто
Телефон, заявка и вход
POST/v1/phone/codeКод из СМС: application, sign или loginоткрыто
POST/v1/phone/verifyПодтвердить телефон для заявкиоткрыто
POST/v1/applicationsЗаявка с анкетой и подписью, сразу вход в кабинетphoneToken
POST/v1/auth/tokenВойти в кабинет по кодуоткрыто
Личный кабинет
GET/v1/meЗаймы, заявки и платежи заёмщикаBearer
GET/v1/me/loans/{id}Договор: долг на сегодня, график, платежи, предел переплатыBearer
GET/v1/me/loans/{id}/payment-previewКак платёж разойдётся по долгу — до оплатыBearer
POST/v1/me/loans/{id}/paymentsОплатить картой или по СБПBearer
POST/v1/me/applications/{id}/cancelОтменить заявкуBearer
Демо-режим
GET/v1/demo/clientsДемо-клиенты с займамидемо
POST/v1/demo/tokenВойти под демо-клиентом без СМСдемо
GET/healthЖив ли сервис и есть ли связь с базойоткрыто

Ошибки

Ответ об ошибке — application/problem+json. В title — текст, который можно показать заёмщику как есть. У ошибок анкеты в errors — поле и что с ним не так.

{
  "title": "Проверьте анкету: есть ошибки",
  "status": 400,
  "errors": {
    "PassportIssued": ["Паспорт нужно было заменить в 20 лет — он недействителен"],
    "Income": ["Укажите доход в месяц"]
  }
}
400

Ошибка в анкете или запросе

401

Нужен вход, токен истёк или телефон подтверждён больше часа назад

404

Нет такого тарифа, договора или кабинета

409

Нельзя выполнить: паспорт у другого номера, платёж не принимается

429

Слишком часто: подождите и повторите

503

Сервис или СМС-шлюз недоступен

Ограничения