Перейти к содержимому

Договоры

Договор оказания услуг между reKassa (Исполнитель) и организацией клиента (Заказчик). PDF собирается по шаблону на нашей стороне и отправляется в Didox как черновик «произвольного документа» с подтипом «Договор». Подписывают стороны в Didox своей ЭЦП.

Метод Доступ Что делает
GET /v1/portal/orgs/{id}/contracts contracts.read договоры организации
POST /v1/portal/orgs/{id}/contracts contracts.manage сгенерировать (и сразу отправить в Didox)
GET /v1/portal/contracts/{id} contracts.read договор
POST /v1/portal/contracts/{id}/send contracts.manage отправить сгенерированный в Didox
POST /v1/portal/contracts/{id}/sync contracts.read обновить статус из Didox сейчас
DELETE /v1/portal/contracts/{id} contracts.manage удалить сгенерированный или черновик Didox
GET /v1/portal/contracts/{id}/pdf contracts.read PDF — подписанный, если уже есть

Доступы только у сотрудников reKassa, см. Роли и доступы.

  1. ЮЛ. Сотрудник находит реквизиты по ИНН (GET /v1/orgs/lookup/{tin}) и добавляет организацию (POST /v1/portal/orgs). Статус организации — «Требуется договор».

  2. Договор. POST /v1/portal/orgs/{id}/contracts. PDF собирается по шаблону; при sendToDidox: true (по умолчанию) сразу создаётся черновик в Didox — статус draft. Организация — «Договор на подписании».

  3. Наша подпись. Сотрудник открывает черновик в Didox и подписывает его своей ЭЦП (E-IMZO). Сервер подписать не может: Didox требует ключ человека.

  4. Опрос. Каждые 5 минут API спрашивает у Didox статусы договоров в draft и signed_by_us. Подписали мы — статус signed_by_us. Обновить сразу — POST /v1/portal/contracts/{id}/sync.

  5. Подпись клиента. Клиент подписывает в своём Didox → статус signed, подписанный PDF сохраняется у нас, организация — «Договор заключён».

Статус Didox Что значит Что можно сделать
generated — PDF собран, в Didox не отправлен отправить, удалить
draft 0 черновик в Didox, ждёт нашей подписи подписать в Didox, удалить черновик
signed_by_us 1 подписан нами, ждёт подписи клиента ждать
signed 3 подписан обеими сторонами — договор заключён скачать подписанный PDF
rejected 4 клиент отказался сгенерировать новый
cancelled 5 отменён после отправки сгенерировать новый
draft_deleted 55 черновик удалён сгенерировать новый

Договорный статус организации (contractStatus) следует за её договорами:

contractStatus Когда
contract_required нет договора в работе и заключённого — «Требуется договор»
contract_in_progress есть договор в generated, draft или signed_by_us
contract_signed есть договор в signed — «Договор заключён»
POST/v1/portal/orgs/{id}/contracts

Все поля необязательные:

Поле По умолчанию Описание
contractDate сегодня (Ташкент) дата договора, YYYY-MM-DD; срок — 1 год с автопролонгацией
connectionPrice 1500000.00 подключение за 1 кассу, сум
monthlyPrice 100000.00 абонентская плата за 1 кассу в месяц, сум
sendToDidox true «Автоматически отправить в Didox»

Номер — RK-{YY}-{NNNNN}, по порядку внутри года даты договора: RK-26-00001, RK-26-00002… Суммы — строки с двумя знаками после запятой. В договоре — цены за единицу, без итоговой суммы: оплата по факту, по счетам-фактурам.

Окно терминала
curl -X POST https://api.rekassa.uz/v1/portal/orgs/{id}/contracts \
-H 'Authorization: Bearer <accessToken>' \
-H 'Content-Type: application/json' \
-d '{ "monthlyPrice": "90000" }'

Ответ 201:

{
"id": "01a0ddc2-b1c4-7d2e-9f3a-5e6b7c8d9e0f",
"organizationId": "01a0ddc2-ad00-74b2-8bb5-edf1595576c3",
"number": "RK-26-00001",
"contractDate": "2026-09-26",
"expireDate": "2027-09-26",
"autoRenew": true,
"status": "draft",
"connectionPrice": "1500000.00",
"monthlyPrice": "90000.00",
"seller": {
"name": "OOO REKASSA",
"tin": "------",
"address": "------",
"director": "------",
"account": "------",
"mfo": "------"
},
"buyer": {
"name": "\"CLIENT\" MCHJ",
"tin": "302936161",
"address": "Toshkent, Yangi Olmazor 10",
"director": "MIRZAYEV AHRORBEK",
"account": "20208000900123456001",
"mfo": "01158"
},
"didoxDocumentId": "6729f3b2c1e4a50012345678",
"didoxStatus": 0,
"hasSignedPdf": false,
"sentAt": "2026-09-26T12:48:10.000Z",
"signedByUsAt": null,
"signedAt": null,
"lastSyncedAt": "2026-09-26T12:48:10.000Z",
"syncError": null,
"createdAt": "2026-09-26T12:48:09.000Z"
}

seller и buyer — реквизиты, как они напечатаны в PDF (снимок на момент генерации). Неизвестные реквизиты печатаются как ------.

Ошибки: 409 contract_in_progress — у организации уже есть договор на подписании или заключённый; 404 organization_not_found; 400 — неверная дата или сумма.

POST/v1/portal/contracts/{id}/send

Для договора в generated: создаёт черновик в Didox, статус — draft. Ошибки: 422 contract_state_invalid — договор уже отправлен; 502 didox_unavailable, 502 didox_rejected (текст Didox — в details.reason); 503 didox_not_configured.

POST/v1/portal/contracts/{id}/sync

Спрашивает статус у Didox сейчас, не дожидаясь опроса. Только для draft и signed_by_us, иначе 422 contract_state_invalid. При переходе в signed скачивает подписанный PDF.

DELETE/v1/portal/contracts/{id}

generated удаляется у нас, у draft удаляется черновик в Didox (статус — draft_deleted). Договор, подписанный нами, удалить нельзя: 422 contract_state_invalid. Ответ 204.

GET/v1/portal/contracts/{id}/pdf

application/pdf: подписанный обеими сторонами, если он уже получен из Didox, иначе сгенерированный. Имя файла — RK-26-00001.pdf или RK-26-00001-signed.pdf.

GET/v1/portal/orgs/{id}/contracts GET/v1/portal/contracts/{id}

Договоры организации, новые первыми, и один договор — в том же виде, что и ответ генерации.