> For the complete documentation index, see [llms.txt](https://sravni-labs-ru.gitbook.io/sravni-labs.ru-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sravni-labs-ru.gitbook.io/sravni-labs.ru-docs/kredity-dlya-biznesa-s-podpisaniem-dokumentov-na-storone-partnyora/tekhnicheskaya-dokumentaciya/models.md).

# Models

## The TokenRequest object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"TokenRequest":{"type":"object","additionalProperties":false,"required":["grant_type","client_id","client_secret"],"properties":{"grant_type":{"type":"string","const":"client_credentials","description":"Для этого API поддерживается только `client_credentials`"},"client_id":{"type":"string"},"client_secret":{"type":"string"}}}}}}
```

## The TokenResponse object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"TokenResponse":{"type":"object","required":["access_token","token_type","expires_in","scope"],"properties":{"access_token":{"type":"string","minLength":1},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","minimum":1,"description":"Срок действия токена в секундах"},"scope":{"type":"string","description":"Фактически выданные scope"}}}}}}
```

## The OAuthError object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"OAuthError":{"type":"object","required":["error"],"properties":{"error":{"type":"string","enum":["invalid_request","invalid_client","invalid_grant","unauthorized_client","unsupported_grant_type","invalid_scope"]},"error_description":{"type":"string"}}}}}}
```

## The OrderCreateRequest object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"OrderCreateRequest":{"type":"object","additionalProperties":false,"required":["sourceOrderId","borrowerType","product","company","persons"],"properties":{"sourceOrderId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$","description":"Уникальный идентификатор заявки в системе партнёра"},"borrowerType":{"$ref":"#/components/schemas/BorrowerType"},"product":{"$ref":"#/components/schemas/ProductRequest"},"company":{"$ref":"#/components/schemas/CompanyCreate"},"persons":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/PersonCreate"}},"legalOwners":{"type":"array","items":{"$ref":"#/components/schemas/LegalOwnerCreate"},"description":"Владельцы заёмщика — юридические лица"}},"allOf":[{"if":{"properties":{"borrowerType":{"const":"LEGAL_ENTITY"}},"required":["borrowerType"]},"then":{"properties":{"company":{"required":["kpp","legalFormCode"]},"persons":{"contains":{"type":"object","properties":{"roles":{"contains":{"const":"CEO"}}},"required":["roles"]},"minContains":1,"maxContains":1}}}},{"if":{"properties":{"borrowerType":{"const":"INDIVIDUAL_ENTREPRENEUR"}},"required":["borrowerType"]},"then":{"properties":{"company":{"allOf":[{"not":{"required":["kpp"]}},{"not":{"required":["legalFormCode"]}}]},"persons":{"contains":{"type":"object","properties":{"roles":{"contains":{"const":"ENTREPRENEUR"}}},"required":["roles"]},"minContains":1,"maxContains":1}}}}]},"BorrowerType":{"type":"string","enum":["INDIVIDUAL_ENTREPRENEUR","LEGAL_ENTITY"]},"ProductRequest":{"type":"object","additionalProperties":false,"required":["amount","termMonths"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Запрашиваемая сумма в рублях без разделителей разрядов"},"termMonths":{"type":"integer","minimum":1,"maximum":120}}},"CompanyCreate":{"type":"object","additionalProperties":false,"required":["entityId","inn","ogrn","fullName","businessTypeCode","businessTypeName","registrationDate","registrationAddress","businessAddresses","phone","email"],"properties":{"entityId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$","description":"Идентификатор компании на стороне партнёра. Используется для идентификации сущности и привязки загружаемых документов"},"inn":{"type":"string","pattern":"^\\d{10}(\\d{2})?$","description":"ИНН — 10 цифр для юридического лица, 12 для ИП"},"ogrn":{"type":"string","pattern":"^\\d{13}(\\d{2})?$","description":"ОГРН — 13 цифр, ОГРНИП — 15 цифр"},"kpp":{"type":"string","pattern":"^\\d{9}$","description":"Обязателен для юридического лица и не передаётся для ИП"},"fullName":{"type":"string","minLength":1,"maxLength":512},"legalFormCode":{"type":"string","minLength":1,"maxLength":16,"description":"Код организационно-правовой формы; обязателен для юридического лица"},"businessTypeCode":{"type":"string","minLength":1,"maxLength":32,"description":"Код основного вида деятельности"},"businessTypeName":{"type":"string","minLength":1,"maxLength":512,"description":"Наименование основного вида деятельности"},"registrationDate":{"type":"string","format":"date"},"registrationAddress":{"$ref":"#/components/schemas/Address"},"businessAddresses":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Address"}},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"},"email":{"type":"string","format":"email"}}},"Address":{"type":"object","additionalProperties":false,"required":["fullAddress","countryCode"],"properties":{"fullAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Адрес одной строкой"},"parsedAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Нормализованное представление адреса, если есть у партнёра"},"countryCode":{"type":"string","const":"RU","description":"Код страны ISO 3166-1 alpha-2; в `v2` поддерживается `RU`"}}},"PersonCreate":{"type":"object","additionalProperties":false,"required":["entityId","roles","lastName","firstName","birthDate","regAddressDate","birthPlace","gender","citizenship","phone","passport","registrationAddress","actualSameAsRegistration"],"properties":{"entityId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$","description":"Идентификатор физического лица на стороне партнёра. Используется для идентификации сущности и привязки загружаемых документов"},"roles":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["ENTREPRENEUR","CEO","OWNER","GUARANTOR"]}},"sharePercent":{"type":"number","minimum":0,"maximum":100,"multipleOf":0.01,"description":"Обязательно для роли `OWNER`"},"lastName":{"type":"string","minLength":1,"maxLength":100},"firstName":{"type":"string","minLength":1,"maxLength":100},"middleName":{"type":"string","minLength":1,"maxLength":100},"birthDate":{"type":"string","format":"date"},"regAddressDate":{"type":"string","format":"date","description":"Дата регистрации по адресу в формате YYYY-MM-DD"},"birthPlace":{"type":"string","minLength":1,"maxLength":255},"gender":{"type":"string","enum":["MALE","FEMALE"]},"citizenship":{"type":"string","enum":["RU"],"description":"Гражданство. В текущей версии поддерживается только `RU`"},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"},"email":{"type":"string","format":"email"},"passport":{"$ref":"#/components/schemas/Passport"},"registrationAddress":{"$ref":"#/components/schemas/Address"},"actualSameAsRegistration":{"type":"boolean"},"actualAddress":{"$ref":"#/components/schemas/Address"}},"allOf":[{"if":{"properties":{"actualSameAsRegistration":{"const":false}},"required":["actualSameAsRegistration"]},"then":{"required":["actualAddress"]}},{"if":{"properties":{"roles":{"contains":{"const":"OWNER"}}},"required":["roles"]},"then":{"required":["sharePercent"]}}]},"Passport":{"type":"object","additionalProperties":false,"required":["series","number","issueDate","issuedBy","departmentCode"],"properties":{"series":{"type":"string","pattern":"^\\d{4}$"},"number":{"type":"string","pattern":"^\\d{6}$"},"issueDate":{"type":"string","format":"date"},"issuedBy":{"type":"string","minLength":1,"maxLength":512},"departmentCode":{"type":"string","pattern":"^\\d{3}-\\d{3}$"}}},"LegalOwnerCreate":{"type":"object","additionalProperties":false,"required":["entityId","fullName","inn","ogrn","registrationAddress","sharePercent"],"properties":{"entityId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$","description":"Идентификатор владельца на стороне партнёра. Используется для идентификации сущности и привязки загружаемых документов"},"fullName":{"type":"string","minLength":1,"maxLength":512},"inn":{"type":"string","pattern":"^\\d{10}$"},"ogrn":{"type":"string","pattern":"^\\d{13}$"},"registrationAddress":{"$ref":"#/components/schemas/Address"},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"},"sharePercent":{"type":"number","minimum":0,"maximum":100,"multipleOf":0.01}}}}}}
```

## The BorrowerType object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"BorrowerType":{"type":"string","enum":["INDIVIDUAL_ENTREPRENEUR","LEGAL_ENTITY"]}}}}
```

## The ProductRequest object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"ProductRequest":{"type":"object","additionalProperties":false,"required":["amount","termMonths"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Запрашиваемая сумма в рублях без разделителей разрядов"},"termMonths":{"type":"integer","minimum":1,"maximum":120}}}}}}
```

## The CompanyCreate object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"CompanyCreate":{"type":"object","additionalProperties":false,"required":["entityId","inn","ogrn","fullName","businessTypeCode","businessTypeName","registrationDate","registrationAddress","businessAddresses","phone","email"],"properties":{"entityId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$","description":"Идентификатор компании на стороне партнёра. Используется для идентификации сущности и привязки загружаемых документов"},"inn":{"type":"string","pattern":"^\\d{10}(\\d{2})?$","description":"ИНН — 10 цифр для юридического лица, 12 для ИП"},"ogrn":{"type":"string","pattern":"^\\d{13}(\\d{2})?$","description":"ОГРН — 13 цифр, ОГРНИП — 15 цифр"},"kpp":{"type":"string","pattern":"^\\d{9}$","description":"Обязателен для юридического лица и не передаётся для ИП"},"fullName":{"type":"string","minLength":1,"maxLength":512},"legalFormCode":{"type":"string","minLength":1,"maxLength":16,"description":"Код организационно-правовой формы; обязателен для юридического лица"},"businessTypeCode":{"type":"string","minLength":1,"maxLength":32,"description":"Код основного вида деятельности"},"businessTypeName":{"type":"string","minLength":1,"maxLength":512,"description":"Наименование основного вида деятельности"},"registrationDate":{"type":"string","format":"date"},"registrationAddress":{"$ref":"#/components/schemas/Address"},"businessAddresses":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Address"}},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"},"email":{"type":"string","format":"email"}}},"Address":{"type":"object","additionalProperties":false,"required":["fullAddress","countryCode"],"properties":{"fullAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Адрес одной строкой"},"parsedAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Нормализованное представление адреса, если есть у партнёра"},"countryCode":{"type":"string","const":"RU","description":"Код страны ISO 3166-1 alpha-2; в `v2` поддерживается `RU`"}}}}}}
```

## The PersonCreate object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"PersonCreate":{"type":"object","additionalProperties":false,"required":["entityId","roles","lastName","firstName","birthDate","regAddressDate","birthPlace","gender","citizenship","phone","passport","registrationAddress","actualSameAsRegistration"],"properties":{"entityId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$","description":"Идентификатор физического лица на стороне партнёра. Используется для идентификации сущности и привязки загружаемых документов"},"roles":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["ENTREPRENEUR","CEO","OWNER","GUARANTOR"]}},"sharePercent":{"type":"number","minimum":0,"maximum":100,"multipleOf":0.01,"description":"Обязательно для роли `OWNER`"},"lastName":{"type":"string","minLength":1,"maxLength":100},"firstName":{"type":"string","minLength":1,"maxLength":100},"middleName":{"type":"string","minLength":1,"maxLength":100},"birthDate":{"type":"string","format":"date"},"regAddressDate":{"type":"string","format":"date","description":"Дата регистрации по адресу в формате YYYY-MM-DD"},"birthPlace":{"type":"string","minLength":1,"maxLength":255},"gender":{"type":"string","enum":["MALE","FEMALE"]},"citizenship":{"type":"string","enum":["RU"],"description":"Гражданство. В текущей версии поддерживается только `RU`"},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"},"email":{"type":"string","format":"email"},"passport":{"$ref":"#/components/schemas/Passport"},"registrationAddress":{"$ref":"#/components/schemas/Address"},"actualSameAsRegistration":{"type":"boolean"},"actualAddress":{"$ref":"#/components/schemas/Address"}},"allOf":[{"if":{"properties":{"actualSameAsRegistration":{"const":false}},"required":["actualSameAsRegistration"]},"then":{"required":["actualAddress"]}},{"if":{"properties":{"roles":{"contains":{"const":"OWNER"}}},"required":["roles"]},"then":{"required":["sharePercent"]}}]},"Passport":{"type":"object","additionalProperties":false,"required":["series","number","issueDate","issuedBy","departmentCode"],"properties":{"series":{"type":"string","pattern":"^\\d{4}$"},"number":{"type":"string","pattern":"^\\d{6}$"},"issueDate":{"type":"string","format":"date"},"issuedBy":{"type":"string","minLength":1,"maxLength":512},"departmentCode":{"type":"string","pattern":"^\\d{3}-\\d{3}$"}}},"Address":{"type":"object","additionalProperties":false,"required":["fullAddress","countryCode"],"properties":{"fullAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Адрес одной строкой"},"parsedAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Нормализованное представление адреса, если есть у партнёра"},"countryCode":{"type":"string","const":"RU","description":"Код страны ISO 3166-1 alpha-2; в `v2` поддерживается `RU`"}}}}}}
```

## The Passport object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"Passport":{"type":"object","additionalProperties":false,"required":["series","number","issueDate","issuedBy","departmentCode"],"properties":{"series":{"type":"string","pattern":"^\\d{4}$"},"number":{"type":"string","pattern":"^\\d{6}$"},"issueDate":{"type":"string","format":"date"},"issuedBy":{"type":"string","minLength":1,"maxLength":512},"departmentCode":{"type":"string","pattern":"^\\d{3}-\\d{3}$"}}}}}}
```

## The Address object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"Address":{"type":"object","additionalProperties":false,"required":["fullAddress","countryCode"],"properties":{"fullAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Адрес одной строкой"},"parsedAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Нормализованное представление адреса, если есть у партнёра"},"countryCode":{"type":"string","const":"RU","description":"Код страны ISO 3166-1 alpha-2; в `v2` поддерживается `RU`"}}}}}}
```

## The LegalOwnerCreate object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"LegalOwnerCreate":{"type":"object","additionalProperties":false,"required":["entityId","fullName","inn","ogrn","registrationAddress","sharePercent"],"properties":{"entityId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$","description":"Идентификатор владельца на стороне партнёра. Используется для идентификации сущности и привязки загружаемых документов"},"fullName":{"type":"string","minLength":1,"maxLength":512},"inn":{"type":"string","pattern":"^\\d{10}$"},"ogrn":{"type":"string","pattern":"^\\d{13}$"},"registrationAddress":{"$ref":"#/components/schemas/Address"},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$"},"sharePercent":{"type":"number","minimum":0,"maximum":100,"multipleOf":0.01}}},"Address":{"type":"object","additionalProperties":false,"required":["fullAddress","countryCode"],"properties":{"fullAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Адрес одной строкой"},"parsedAddress":{"type":"string","minLength":1,"maxLength":1000,"description":"Нормализованное представление адреса, если есть у партнёра"},"countryCode":{"type":"string","const":"RU","description":"Код страны ISO 3166-1 alpha-2; в `v2` поддерживается `RU`"}}}}}}
```

## The OrderCreateResponse object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"OrderCreateResponse":{"type":"object","required":["orderId","sourceOrderId","status"],"properties":{"orderId":{"type":"string","format":"uuid"},"sourceOrderId":{"type":"string"},"status":{"$ref":"#/components/schemas/OrderStatus","description":"Как правило со значением `code=IN_WORK` сразу после создания заявки."}}},"OrderStatus":{"type":"object","description":"Статус обработки предложения банка (`BankOffer.status`). Этот же формат `{code, description}` используется и в `OrderCreateResponse.status` сразу после создания заявки — как общий начальный индикатор (`code: IN_WORK`), ещё до того как в `offers[]` появятся записи по конкретным банкам. Типичный переход для одного предложения:\n\nIN_WORK → VALIDATION_FAILED | WAITING_FOR_DOCUMENTS → IN_WORK (после accept) → VALIDATION_FAILED | WAITING_FOR_SIGNATURE → IN_WORK (после загрузки подписей) → OFFERS_AVAILABLE → REJECTED | OFFERS_CONFIRMED → CLOSED.\n\nКаждое предложение банка проходит этот путь независимо от остальных: одни банки могут ещё запрашивать документы или проверять их, пока другие уже отклонили заявку, ждут подписания или предложили условия. `OFFERS_AVAILABLE` означает, что банк сформировал кредитное предложение и оно доступно для выбора. После успешного `POST /v1/orders/{orderId}/confirm` предложение переходит в `OFFERS_CONFIRMED`. Дополнительные вызовы `confirm` для оставшихся вариантов условий со статусом `AVAILABLE` допускаются, пока предложение не перешло в `CLOSED`. `REJECTED` означает, что банк отклонил заявку по этому предложению (на любом этапе обработки, до или после появления кредитных условий). `CLOSED` означает, что банк выдал кредит клиенту по этому предложению.","required":["code","description"],"properties":{"code":{"type":"string","enum":["IN_WORK","WAITING_FOR_DOCUMENTS","VALIDATION_FAILED","WAITING_FOR_SIGNATURE","OFFERS_AVAILABLE","REJECTED","OFFERS_CONFIRMED","CLOSED"]},"description":{"type":"string","minLength":1,"description":"Человекочитаемое описание статуса для отображения партнёру"}}}}}}
```

## The OrderConfirmRequest object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"OrderConfirmRequest":{"type":"object","additionalProperties":false,"required":["offers"],"properties":{"offers":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["offerId","creditOptions"],"properties":{"offerId":{"type":"string","format":"uuid"},"creditOptions":{"type":"array","minItems":1,"description":"Варианты условий из этого предложения, которые партнёр подтверждает. Если у предложения было несколько `creditOptions` (`GET /v1/orders/{orderId}`), нужно явно указать, какие именно выбраны, по их `code`. ","items":{"type":"object","additionalProperties":false,"required":["code"],"properties":{"code":{"type":"string","description":"Код варианта условий из соответствующего CreditOption предложения"},"amount":{"type":"integer","minimum":1,"description":"Запрашиваемая сумма выборки. Обязательна, если у выбранного варианта `amountType: LIMIT` и партнёр хочет выбрать сумму меньше одобренного лимита; для `amountType: FIXED` должна совпадать с суммой предложения либо не передаваться. "}}}}}}}}}}}}
```

## The OrderState object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"OrderState":{"type":"object","required":["orderId","sourceOrderId","updatedAt","offers","pollAfterSeconds"],"properties":{"orderId":{"type":"string","format":"uuid"},"sourceOrderId":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"offers":{"type":"array","items":{"$ref":"#/components/schemas/BankOffer"},"description":"Банковские предложения. По одному элементу на каждый подключённый банк — заполняется сразу после создания заявки, ещё до того как у банка появится итоговое кредитное предложение. Каждый элемент независимо проходит собственный жизненный цикл статусов (`BankOffer.status`) и несёт свои документы (`BankOffer.documents`) и ошибки проверки (`BankOffer.issues`), относящиеся именно к этому банку. У заявки больше нет единого статуса на уровне всей заявки — партнёру следует ориентироваться на статусы отдельных предложений. "},"pollAfterSeconds":{"type":"integer","minimum":0,"maximum":86400,"description":"Рекомендованный интервал до следующего GET-запроса. `0` означает, что статусы всех предложений (`offers[].status`) терминальны (`REJECTED` или `CLOSED`) и дальнейший polling не нужен. "}}},"BankOffer":{"type":"object","required":["offerId","bank","status","creditOptions","documents","issues"],"properties":{"offerId":{"type":"string","format":"uuid"},"bank":{"$ref":"#/components/schemas/Bank"},"status":{"allOf":[{"$ref":"#/components/schemas/OrderStatus"}],"description":"Текущий статус обработки заявки этим банком."},"creditOptions":{"type":"array","minItems":0,"items":{"$ref":"#/components/schemas/CreditOption"},"description":"Кредитные условия от банка. Заполняется, когда `status.code` равен `OFFERS_AVAILABLE`, `OFFERS_CONFIRMED` или `CLOSED`; для остальных статусов, включая `REJECTED`, массив пустой."},"documents":{"type":"array","description":"Документы этого банка — как те, что партнёру нужно загрузить платформе (`direction: UPLOAD`, доступно, когда `status.code` равен `WAITING_FOR_DOCUMENTS`), так и те, что платформа сформировала и партнёру нужно скачать, подписать открепленной подписью и загрузить обратно (`direction: DOWNLOAD`, доступно, когда `status.code` равен `WAITING_FOR_SIGNATURE`). Для каждого документа указано, обязателен ли он (`required`) и получен ли он платформой (`uploaded`).","items":{"$ref":"#/components/schemas/OrderDocument"}},"issues":{"type":"array","items":{"$ref":"#/components/schemas/ValidationIssue"},"description":"Причины проблем проверки по этому предложению; массив пуст, если проблем нет."}},"allOf":[{"if":{"properties":{"status":{"properties":{"code":{"const":"REJECTED"}},"required":["code"]}},"required":["status"]},"then":{"properties":{"creditOptions":{"maxItems":0}}}},{"if":{"properties":{"status":{"properties":{"code":{"enum":["OFFERS_AVAILABLE","OFFERS_CONFIRMED","CLOSED"]}},"required":["code"]}},"required":["status"]},"then":{"properties":{"creditOptions":{"minItems":1}}}}]},"Bank":{"type":"object","required":["bankId","name"],"properties":{"bankId":{"type":"string","minLength":1,"maxLength":64},"name":{"type":"string","minLength":1,"maxLength":255}}},"OrderStatus":{"type":"object","description":"Статус обработки предложения банка (`BankOffer.status`). Этот же формат `{code, description}` используется и в `OrderCreateResponse.status` сразу после создания заявки — как общий начальный индикатор (`code: IN_WORK`), ещё до того как в `offers[]` появятся записи по конкретным банкам. Типичный переход для одного предложения:\n\nIN_WORK → VALIDATION_FAILED | WAITING_FOR_DOCUMENTS → IN_WORK (после accept) → VALIDATION_FAILED | WAITING_FOR_SIGNATURE → IN_WORK (после загрузки подписей) → OFFERS_AVAILABLE → REJECTED | OFFERS_CONFIRMED → CLOSED.\n\nКаждое предложение банка проходит этот путь независимо от остальных: одни банки могут ещё запрашивать документы или проверять их, пока другие уже отклонили заявку, ждут подписания или предложили условия. `OFFERS_AVAILABLE` означает, что банк сформировал кредитное предложение и оно доступно для выбора. После успешного `POST /v1/orders/{orderId}/confirm` предложение переходит в `OFFERS_CONFIRMED`. Дополнительные вызовы `confirm` для оставшихся вариантов условий со статусом `AVAILABLE` допускаются, пока предложение не перешло в `CLOSED`. `REJECTED` означает, что банк отклонил заявку по этому предложению (на любом этапе обработки, до или после появления кредитных условий). `CLOSED` означает, что банк выдал кредит клиенту по этому предложению.","required":["code","description"],"properties":{"code":{"type":"string","enum":["IN_WORK","WAITING_FOR_DOCUMENTS","VALIDATION_FAILED","WAITING_FOR_SIGNATURE","OFFERS_AVAILABLE","REJECTED","OFFERS_CONFIRMED","CLOSED"]},"description":{"type":"string","minLength":1,"description":"Человекочитаемое описание статуса для отображения партнёру"}}},"CreditOption":{"type":"object","required":["code","amount","amountType","termMonths","interestRatePercent","status"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["AVAILABLE","CONFIRMED"],"description":"Статус варианта кредитных условий. `AVAILABLE` — вариант доступен для подтверждения партнёром. `CONFIRMED` — вариант подтверждён через `POST /v1/orders/{orderId}/confirm`. После подтверждения другие варианты остаются `AVAILABLE`. "},"amountType":{"type":"string","enum":["FIXED","LIMIT"],"description":"Тип суммы. `FIXED` — фиксированная сумма кредита, выдаётся целиком. `LIMIT` — одобренный лимит (например для овердрафта), в рамках которого партнёр может при подтверждении (`POST /v1/orders/{orderId}/confirm`) запросить фактическую сумму выборки меньше `amount`. "},"amount":{"type":"integer","minimum":1,"description":"Сумма предложения банка. Для `amountType: FIXED` — точная сумма кредита. Для `amountType: LIMIT` — верхняя граница одобренного лимита; для некоторых банков фактическая сумма выборки может быть выбрана партнёром меньше этого значения при подтверждении предложения. "},"termMonths":{"type":"integer","minimum":1},"interestRatePercent":{"type":"number","minimum":0,"multipleOf":0.0001}}},"OrderDocument":{"type":"object","description":"Элемент документооборота по предложению конкретного банка. Показывает, какой документ партнёру нужно загрузить платформе (`direction: UPLOAD`) или, наоборот, какой документ партнёру нужно скачать у платформы, подписать открепленной подписью и загрузить обратно (`direction: DOWNLOAD`). Сущность, к которой относится документ (`entityId`), в списке не указывается: для `UPLOAD` партнёр сам определяет её при вызове `POST /v1/orders/{orderId}/documents`; для `DOWNLOAD` документ уже сформирован и привязан к сущности на стороне платформы.\n\n\nДля `direction: UPLOAD` документ достаточно загрузить один раз на пару `entityId`+`docType`: если документ этого типа для этой сущности требуется нескольким банкам одновременно, платформа переиспользует уже загруженный файл во всех предложениях, которым он нужен, — повторно загружать его под каждое предложение не требуется. Для `direction: DOWNLOAD` документ формируется отдельно под каждое предложение банка и имеет собственный `fileId`: даже если по содержанию документы одинаковы, скачать, подписать и загрузить подпись нужно отдельно для каждого предложения, в котором такой документ присутствует.","required":["name","docType","direction","required","uploaded"],"properties":{"fileId":{"type":"string","format":"uuid","description":"Идентификатор файла. Для `direction: DOWNLOAD` присутствует всегда — документ уже сформирован платформой и доступен для скачивания через `GET /v1/orders/{orderId}/documents/{fileId}/download`. Для `direction: UPLOAD` отсутствует, пока партнёр не загрузит документ через `POST /v1/orders/{orderId}/documents`; после загрузки принимает значение `fileId` из `DocumentUploadResponse`."},"name":{"type":"string","description":"Человекочитаемое наименование документа. Для `direction: DOWNLOAD` — имя сформированного платформой файла. Для `direction: UPLOAD` — название требуемого документа (имя фактически загружаемого файла партнёр определяет сам)."},"docType":{"anyOf":[{"$ref":"#/components/schemas/IncomingDocType"},{"$ref":"#/components/schemas/SignableDocType"}],"description":"Тип документа. Значение из `IncomingDocType`, если `direction: UPLOAD`; значение из `SignableDocType`, если `direction: DOWNLOAD`."},"direction":{"type":"string","enum":["UPLOAD","DOWNLOAD"],"description":"Направление обмена документом. `UPLOAD` — партнёр должен загрузить документ платформе через `POST /v1/orders/{orderId}/documents`. `DOWNLOAD` — партнёр должен скачать документ у платформы через `GET /v1/orders/{orderId}/documents/{fileId}/download`, подписать его открепленной подписью и загрузить подпись через `POST /v1/orders/{orderId}/documents/sign`."},"required":{"type":"boolean","description":"Признак обязательности документа для завершения текущего этапа (`POST /v1/orders/{orderId}/accept`). `true` — без него для `direction: UPLOAD` завершить `WAITING_FOR_DOCUMENTS` нельзя, а для `direction: DOWNLOAD` завершить `WAITING_FOR_SIGNATURE` нельзя. `false` — документ необязателен."},"uploaded":{"type":"boolean","description":"Признак получения документа платформой. Для `direction: UPLOAD` — `true`, когда для пары `entityId`+`docType` уже есть загруженный файл (в том числе загруженный ранее для другого предложения, где требовался тот же документ). Для `direction: DOWNLOAD` — `true`, когда партнёр уже загрузил подпись к этому конкретному документу этого предложения (`signature` заполнен) "},"signature":{"allOf":[{"$ref":"#/components/schemas/DocumentSignature"}],"description":"Заполняется после успешной загрузки открепленной подписи через `POST /v1/orders/{orderId}/documents/sign`. Отсутствует, пока подпись не загружена."}},"allOf":[{"if":{"properties":{"direction":{"const":"DOWNLOAD"}},"required":["direction"]},"then":{"required":["fileId"]}},{"if":{"properties":{"direction":{"const":"UPLOAD"}},"required":["direction"]},"then":{"not":{"required":["signature"]}}},{"if":{"properties":{"uploaded":{"const":false}},"required":["uploaded"]},"then":{"not":{"required":["signature"]}}}]},"IncomingDocType":{"type":"string","description":"Тип документа, загружаемого партнёром платформе. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["PASSPORT","FIN_REPORT"]},"SignableDocType":{"type":"string","description":"Тип документа, формируемого платформой для скачивания, подписания и загрузки обратно партнёром. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["VTB_CONSENT_PD","VTB_CONSENT","ALPHA_BORROWER_CONSENT_FORM","ALPHA_GUARANTOR_CONSENT_FORM"]},"DocumentSignature":{"type":"object","required":["signatureId","uploadedAt"],"properties":{"signatureId":{"type":"string","format":"uuid","description":"Идентификатор подписи, присвоенный при загрузке через `POST /v1/orders/{orderId}/documents/sign`"},"uploadedAt":{"type":"string","format":"date-time"}}},"ValidationIssue":{"type":"object","required":["message"],"properties":{"message":{"type":"string","minLength":1,"description":"Сообщение с описанием проблемы"}}}}}}
```

## The OrderStatus object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"OrderStatus":{"type":"object","description":"Статус обработки предложения банка (`BankOffer.status`). Этот же формат `{code, description}` используется и в `OrderCreateResponse.status` сразу после создания заявки — как общий начальный индикатор (`code: IN_WORK`), ещё до того как в `offers[]` появятся записи по конкретным банкам. Типичный переход для одного предложения:\n\nIN_WORK → VALIDATION_FAILED | WAITING_FOR_DOCUMENTS → IN_WORK (после accept) → VALIDATION_FAILED | WAITING_FOR_SIGNATURE → IN_WORK (после загрузки подписей) → OFFERS_AVAILABLE → REJECTED | OFFERS_CONFIRMED → CLOSED.\n\nКаждое предложение банка проходит этот путь независимо от остальных: одни банки могут ещё запрашивать документы или проверять их, пока другие уже отклонили заявку, ждут подписания или предложили условия. `OFFERS_AVAILABLE` означает, что банк сформировал кредитное предложение и оно доступно для выбора. После успешного `POST /v1/orders/{orderId}/confirm` предложение переходит в `OFFERS_CONFIRMED`. Дополнительные вызовы `confirm` для оставшихся вариантов условий со статусом `AVAILABLE` допускаются, пока предложение не перешло в `CLOSED`. `REJECTED` означает, что банк отклонил заявку по этому предложению (на любом этапе обработки, до или после появления кредитных условий). `CLOSED` означает, что банк выдал кредит клиенту по этому предложению.","required":["code","description"],"properties":{"code":{"type":"string","enum":["IN_WORK","WAITING_FOR_DOCUMENTS","VALIDATION_FAILED","WAITING_FOR_SIGNATURE","OFFERS_AVAILABLE","REJECTED","OFFERS_CONFIRMED","CLOSED"]},"description":{"type":"string","minLength":1,"description":"Человекочитаемое описание статуса для отображения партнёру"}}}}}}
```

## The ValidationIssue object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"ValidationIssue":{"type":"object","required":["message"],"properties":{"message":{"type":"string","minLength":1,"description":"Сообщение с описанием проблемы"}}}}}}
```

## The BankOffer object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"BankOffer":{"type":"object","required":["offerId","bank","status","creditOptions","documents","issues"],"properties":{"offerId":{"type":"string","format":"uuid"},"bank":{"$ref":"#/components/schemas/Bank"},"status":{"allOf":[{"$ref":"#/components/schemas/OrderStatus"}],"description":"Текущий статус обработки заявки этим банком."},"creditOptions":{"type":"array","minItems":0,"items":{"$ref":"#/components/schemas/CreditOption"},"description":"Кредитные условия от банка. Заполняется, когда `status.code` равен `OFFERS_AVAILABLE`, `OFFERS_CONFIRMED` или `CLOSED`; для остальных статусов, включая `REJECTED`, массив пустой."},"documents":{"type":"array","description":"Документы этого банка — как те, что партнёру нужно загрузить платформе (`direction: UPLOAD`, доступно, когда `status.code` равен `WAITING_FOR_DOCUMENTS`), так и те, что платформа сформировала и партнёру нужно скачать, подписать открепленной подписью и загрузить обратно (`direction: DOWNLOAD`, доступно, когда `status.code` равен `WAITING_FOR_SIGNATURE`). Для каждого документа указано, обязателен ли он (`required`) и получен ли он платформой (`uploaded`).","items":{"$ref":"#/components/schemas/OrderDocument"}},"issues":{"type":"array","items":{"$ref":"#/components/schemas/ValidationIssue"},"description":"Причины проблем проверки по этому предложению; массив пуст, если проблем нет."}},"allOf":[{"if":{"properties":{"status":{"properties":{"code":{"const":"REJECTED"}},"required":["code"]}},"required":["status"]},"then":{"properties":{"creditOptions":{"maxItems":0}}}},{"if":{"properties":{"status":{"properties":{"code":{"enum":["OFFERS_AVAILABLE","OFFERS_CONFIRMED","CLOSED"]}},"required":["code"]}},"required":["status"]},"then":{"properties":{"creditOptions":{"minItems":1}}}}]},"Bank":{"type":"object","required":["bankId","name"],"properties":{"bankId":{"type":"string","minLength":1,"maxLength":64},"name":{"type":"string","minLength":1,"maxLength":255}}},"OrderStatus":{"type":"object","description":"Статус обработки предложения банка (`BankOffer.status`). Этот же формат `{code, description}` используется и в `OrderCreateResponse.status` сразу после создания заявки — как общий начальный индикатор (`code: IN_WORK`), ещё до того как в `offers[]` появятся записи по конкретным банкам. Типичный переход для одного предложения:\n\nIN_WORK → VALIDATION_FAILED | WAITING_FOR_DOCUMENTS → IN_WORK (после accept) → VALIDATION_FAILED | WAITING_FOR_SIGNATURE → IN_WORK (после загрузки подписей) → OFFERS_AVAILABLE → REJECTED | OFFERS_CONFIRMED → CLOSED.\n\nКаждое предложение банка проходит этот путь независимо от остальных: одни банки могут ещё запрашивать документы или проверять их, пока другие уже отклонили заявку, ждут подписания или предложили условия. `OFFERS_AVAILABLE` означает, что банк сформировал кредитное предложение и оно доступно для выбора. После успешного `POST /v1/orders/{orderId}/confirm` предложение переходит в `OFFERS_CONFIRMED`. Дополнительные вызовы `confirm` для оставшихся вариантов условий со статусом `AVAILABLE` допускаются, пока предложение не перешло в `CLOSED`. `REJECTED` означает, что банк отклонил заявку по этому предложению (на любом этапе обработки, до или после появления кредитных условий). `CLOSED` означает, что банк выдал кредит клиенту по этому предложению.","required":["code","description"],"properties":{"code":{"type":"string","enum":["IN_WORK","WAITING_FOR_DOCUMENTS","VALIDATION_FAILED","WAITING_FOR_SIGNATURE","OFFERS_AVAILABLE","REJECTED","OFFERS_CONFIRMED","CLOSED"]},"description":{"type":"string","minLength":1,"description":"Человекочитаемое описание статуса для отображения партнёру"}}},"CreditOption":{"type":"object","required":["code","amount","amountType","termMonths","interestRatePercent","status"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["AVAILABLE","CONFIRMED"],"description":"Статус варианта кредитных условий. `AVAILABLE` — вариант доступен для подтверждения партнёром. `CONFIRMED` — вариант подтверждён через `POST /v1/orders/{orderId}/confirm`. После подтверждения другие варианты остаются `AVAILABLE`. "},"amountType":{"type":"string","enum":["FIXED","LIMIT"],"description":"Тип суммы. `FIXED` — фиксированная сумма кредита, выдаётся целиком. `LIMIT` — одобренный лимит (например для овердрафта), в рамках которого партнёр может при подтверждении (`POST /v1/orders/{orderId}/confirm`) запросить фактическую сумму выборки меньше `amount`. "},"amount":{"type":"integer","minimum":1,"description":"Сумма предложения банка. Для `amountType: FIXED` — точная сумма кредита. Для `amountType: LIMIT` — верхняя граница одобренного лимита; для некоторых банков фактическая сумма выборки может быть выбрана партнёром меньше этого значения при подтверждении предложения. "},"termMonths":{"type":"integer","minimum":1},"interestRatePercent":{"type":"number","minimum":0,"multipleOf":0.0001}}},"OrderDocument":{"type":"object","description":"Элемент документооборота по предложению конкретного банка. Показывает, какой документ партнёру нужно загрузить платформе (`direction: UPLOAD`) или, наоборот, какой документ партнёру нужно скачать у платформы, подписать открепленной подписью и загрузить обратно (`direction: DOWNLOAD`). Сущность, к которой относится документ (`entityId`), в списке не указывается: для `UPLOAD` партнёр сам определяет её при вызове `POST /v1/orders/{orderId}/documents`; для `DOWNLOAD` документ уже сформирован и привязан к сущности на стороне платформы.\n\n\nДля `direction: UPLOAD` документ достаточно загрузить один раз на пару `entityId`+`docType`: если документ этого типа для этой сущности требуется нескольким банкам одновременно, платформа переиспользует уже загруженный файл во всех предложениях, которым он нужен, — повторно загружать его под каждое предложение не требуется. Для `direction: DOWNLOAD` документ формируется отдельно под каждое предложение банка и имеет собственный `fileId`: даже если по содержанию документы одинаковы, скачать, подписать и загрузить подпись нужно отдельно для каждого предложения, в котором такой документ присутствует.","required":["name","docType","direction","required","uploaded"],"properties":{"fileId":{"type":"string","format":"uuid","description":"Идентификатор файла. Для `direction: DOWNLOAD` присутствует всегда — документ уже сформирован платформой и доступен для скачивания через `GET /v1/orders/{orderId}/documents/{fileId}/download`. Для `direction: UPLOAD` отсутствует, пока партнёр не загрузит документ через `POST /v1/orders/{orderId}/documents`; после загрузки принимает значение `fileId` из `DocumentUploadResponse`."},"name":{"type":"string","description":"Человекочитаемое наименование документа. Для `direction: DOWNLOAD` — имя сформированного платформой файла. Для `direction: UPLOAD` — название требуемого документа (имя фактически загружаемого файла партнёр определяет сам)."},"docType":{"anyOf":[{"$ref":"#/components/schemas/IncomingDocType"},{"$ref":"#/components/schemas/SignableDocType"}],"description":"Тип документа. Значение из `IncomingDocType`, если `direction: UPLOAD`; значение из `SignableDocType`, если `direction: DOWNLOAD`."},"direction":{"type":"string","enum":["UPLOAD","DOWNLOAD"],"description":"Направление обмена документом. `UPLOAD` — партнёр должен загрузить документ платформе через `POST /v1/orders/{orderId}/documents`. `DOWNLOAD` — партнёр должен скачать документ у платформы через `GET /v1/orders/{orderId}/documents/{fileId}/download`, подписать его открепленной подписью и загрузить подпись через `POST /v1/orders/{orderId}/documents/sign`."},"required":{"type":"boolean","description":"Признак обязательности документа для завершения текущего этапа (`POST /v1/orders/{orderId}/accept`). `true` — без него для `direction: UPLOAD` завершить `WAITING_FOR_DOCUMENTS` нельзя, а для `direction: DOWNLOAD` завершить `WAITING_FOR_SIGNATURE` нельзя. `false` — документ необязателен."},"uploaded":{"type":"boolean","description":"Признак получения документа платформой. Для `direction: UPLOAD` — `true`, когда для пары `entityId`+`docType` уже есть загруженный файл (в том числе загруженный ранее для другого предложения, где требовался тот же документ). Для `direction: DOWNLOAD` — `true`, когда партнёр уже загрузил подпись к этому конкретному документу этого предложения (`signature` заполнен) "},"signature":{"allOf":[{"$ref":"#/components/schemas/DocumentSignature"}],"description":"Заполняется после успешной загрузки открепленной подписи через `POST /v1/orders/{orderId}/documents/sign`. Отсутствует, пока подпись не загружена."}},"allOf":[{"if":{"properties":{"direction":{"const":"DOWNLOAD"}},"required":["direction"]},"then":{"required":["fileId"]}},{"if":{"properties":{"direction":{"const":"UPLOAD"}},"required":["direction"]},"then":{"not":{"required":["signature"]}}},{"if":{"properties":{"uploaded":{"const":false}},"required":["uploaded"]},"then":{"not":{"required":["signature"]}}}]},"IncomingDocType":{"type":"string","description":"Тип документа, загружаемого партнёром платформе. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["PASSPORT","FIN_REPORT"]},"SignableDocType":{"type":"string","description":"Тип документа, формируемого платформой для скачивания, подписания и загрузки обратно партнёром. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["VTB_CONSENT_PD","VTB_CONSENT","ALPHA_BORROWER_CONSENT_FORM","ALPHA_GUARANTOR_CONSENT_FORM"]},"DocumentSignature":{"type":"object","required":["signatureId","uploadedAt"],"properties":{"signatureId":{"type":"string","format":"uuid","description":"Идентификатор подписи, присвоенный при загрузке через `POST /v1/orders/{orderId}/documents/sign`"},"uploadedAt":{"type":"string","format":"date-time"}}},"ValidationIssue":{"type":"object","required":["message"],"properties":{"message":{"type":"string","minLength":1,"description":"Сообщение с описанием проблемы"}}}}}}
```

## The CreditOption object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"CreditOption":{"type":"object","required":["code","amount","amountType","termMonths","interestRatePercent","status"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["AVAILABLE","CONFIRMED"],"description":"Статус варианта кредитных условий. `AVAILABLE` — вариант доступен для подтверждения партнёром. `CONFIRMED` — вариант подтверждён через `POST /v1/orders/{orderId}/confirm`. После подтверждения другие варианты остаются `AVAILABLE`. "},"amountType":{"type":"string","enum":["FIXED","LIMIT"],"description":"Тип суммы. `FIXED` — фиксированная сумма кредита, выдаётся целиком. `LIMIT` — одобренный лимит (например для овердрафта), в рамках которого партнёр может при подтверждении (`POST /v1/orders/{orderId}/confirm`) запросить фактическую сумму выборки меньше `amount`. "},"amount":{"type":"integer","minimum":1,"description":"Сумма предложения банка. Для `amountType: FIXED` — точная сумма кредита. Для `amountType: LIMIT` — верхняя граница одобренного лимита; для некоторых банков фактическая сумма выборки может быть выбрана партнёром меньше этого значения при подтверждении предложения. "},"termMonths":{"type":"integer","minimum":1},"interestRatePercent":{"type":"number","minimum":0,"multipleOf":0.0001}}}}}}
```

## The Bank object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"Bank":{"type":"object","required":["bankId","name"],"properties":{"bankId":{"type":"string","minLength":1,"maxLength":64},"name":{"type":"string","minLength":1,"maxLength":255}}}}}}
```

## The IncomingDocType object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"IncomingDocType":{"type":"string","description":"Тип документа, загружаемого партнёром платформе. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["PASSPORT","FIN_REPORT"]}}}}
```

## The SignableDocType object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"SignableDocType":{"type":"string","description":"Тип документа, формируемого платформой для скачивания, подписания и загрузки обратно партнёром. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["VTB_CONSENT_PD","VTB_CONSENT","ALPHA_BORROWER_CONSENT_FORM","ALPHA_GUARANTOR_CONSENT_FORM"]}}}}
```

## The DocumentUploadForm object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"DocumentUploadForm":{"type":"object","required":["entityId","docType","file"],"properties":{"entityId":{"type":"string","minLength":1,"maxLength":64,"description":"Идентификатор сущности партнёра (`company.entityId`, `persons[].entityId` или `legalOwners[].entityId`), переданный партнёром при создании заявки в `POST /v1/orders`. Платформа не возвращает этот идентификатор впоследствии — партнёр использует значение, которое передал сам."},"docType":{"$ref":"#/components/schemas/IncomingDocType"},"file":{"type":"string","format":"binary","description":"Бинарное содержимое файла. Поддерживаются PDF, JPG/JPEG, PNG, DOCX"}}},"IncomingDocType":{"type":"string","description":"Тип документа, загружаемого партнёром платформе. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["PASSPORT","FIN_REPORT"]}}}}
```

## The DocumentUploadResponse object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"DocumentUploadResponse":{"type":"object","required":["fileId","entityId","docType","fileName","contentLengthBytes","uploadedAt"],"properties":{"fileId":{"type":"string","format":"uuid"},"entityId":{"type":"string"},"docType":{"$ref":"#/components/schemas/IncomingDocType"},"fileName":{"type":"string"},"contentLengthBytes":{"type":"integer","minimum":1},"uploadedAt":{"type":"string","format":"date-time"}}},"IncomingDocType":{"type":"string","description":"Тип документа, загружаемого партнёром платформе. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["PASSPORT","FIN_REPORT"]}}}}
```

## The OrderDocument object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"OrderDocument":{"type":"object","description":"Элемент документооборота по предложению конкретного банка. Показывает, какой документ партнёру нужно загрузить платформе (`direction: UPLOAD`) или, наоборот, какой документ партнёру нужно скачать у платформы, подписать открепленной подписью и загрузить обратно (`direction: DOWNLOAD`). Сущность, к которой относится документ (`entityId`), в списке не указывается: для `UPLOAD` партнёр сам определяет её при вызове `POST /v1/orders/{orderId}/documents`; для `DOWNLOAD` документ уже сформирован и привязан к сущности на стороне платформы.\n\n\nДля `direction: UPLOAD` документ достаточно загрузить один раз на пару `entityId`+`docType`: если документ этого типа для этой сущности требуется нескольким банкам одновременно, платформа переиспользует уже загруженный файл во всех предложениях, которым он нужен, — повторно загружать его под каждое предложение не требуется. Для `direction: DOWNLOAD` документ формируется отдельно под каждое предложение банка и имеет собственный `fileId`: даже если по содержанию документы одинаковы, скачать, подписать и загрузить подпись нужно отдельно для каждого предложения, в котором такой документ присутствует.","required":["name","docType","direction","required","uploaded"],"properties":{"fileId":{"type":"string","format":"uuid","description":"Идентификатор файла. Для `direction: DOWNLOAD` присутствует всегда — документ уже сформирован платформой и доступен для скачивания через `GET /v1/orders/{orderId}/documents/{fileId}/download`. Для `direction: UPLOAD` отсутствует, пока партнёр не загрузит документ через `POST /v1/orders/{orderId}/documents`; после загрузки принимает значение `fileId` из `DocumentUploadResponse`."},"name":{"type":"string","description":"Человекочитаемое наименование документа. Для `direction: DOWNLOAD` — имя сформированного платформой файла. Для `direction: UPLOAD` — название требуемого документа (имя фактически загружаемого файла партнёр определяет сам)."},"docType":{"anyOf":[{"$ref":"#/components/schemas/IncomingDocType"},{"$ref":"#/components/schemas/SignableDocType"}],"description":"Тип документа. Значение из `IncomingDocType`, если `direction: UPLOAD`; значение из `SignableDocType`, если `direction: DOWNLOAD`."},"direction":{"type":"string","enum":["UPLOAD","DOWNLOAD"],"description":"Направление обмена документом. `UPLOAD` — партнёр должен загрузить документ платформе через `POST /v1/orders/{orderId}/documents`. `DOWNLOAD` — партнёр должен скачать документ у платформы через `GET /v1/orders/{orderId}/documents/{fileId}/download`, подписать его открепленной подписью и загрузить подпись через `POST /v1/orders/{orderId}/documents/sign`."},"required":{"type":"boolean","description":"Признак обязательности документа для завершения текущего этапа (`POST /v1/orders/{orderId}/accept`). `true` — без него для `direction: UPLOAD` завершить `WAITING_FOR_DOCUMENTS` нельзя, а для `direction: DOWNLOAD` завершить `WAITING_FOR_SIGNATURE` нельзя. `false` — документ необязателен."},"uploaded":{"type":"boolean","description":"Признак получения документа платформой. Для `direction: UPLOAD` — `true`, когда для пары `entityId`+`docType` уже есть загруженный файл (в том числе загруженный ранее для другого предложения, где требовался тот же документ). Для `direction: DOWNLOAD` — `true`, когда партнёр уже загрузил подпись к этому конкретному документу этого предложения (`signature` заполнен) "},"signature":{"allOf":[{"$ref":"#/components/schemas/DocumentSignature"}],"description":"Заполняется после успешной загрузки открепленной подписи через `POST /v1/orders/{orderId}/documents/sign`. Отсутствует, пока подпись не загружена."}},"allOf":[{"if":{"properties":{"direction":{"const":"DOWNLOAD"}},"required":["direction"]},"then":{"required":["fileId"]}},{"if":{"properties":{"direction":{"const":"UPLOAD"}},"required":["direction"]},"then":{"not":{"required":["signature"]}}},{"if":{"properties":{"uploaded":{"const":false}},"required":["uploaded"]},"then":{"not":{"required":["signature"]}}}]},"IncomingDocType":{"type":"string","description":"Тип документа, загружаемого партнёром платформе. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["PASSPORT","FIN_REPORT"]},"SignableDocType":{"type":"string","description":"Тип документа, формируемого платформой для скачивания, подписания и загрузки обратно партнёром. Пример перечисления; финальный список типов уточняется отдельно. ","enum":["VTB_CONSENT_PD","VTB_CONSENT","ALPHA_BORROWER_CONSENT_FORM","ALPHA_GUARANTOR_CONSENT_FORM"]},"DocumentSignature":{"type":"object","required":["signatureId","uploadedAt"],"properties":{"signatureId":{"type":"string","format":"uuid","description":"Идентификатор подписи, присвоенный при загрузке через `POST /v1/orders/{orderId}/documents/sign`"},"uploadedAt":{"type":"string","format":"date-time"}}}}}}
```

## The DocumentSignature object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"DocumentSignature":{"type":"object","required":["signatureId","uploadedAt"],"properties":{"signatureId":{"type":"string","format":"uuid","description":"Идентификатор подписи, присвоенный при загрузке через `POST /v1/orders/{orderId}/documents/sign`"},"uploadedAt":{"type":"string","format":"date-time"}}}}}}
```

## The SignatureUploadForm object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"SignatureUploadForm":{"type":"object","required":["fileId","file"],"properties":{"fileId":{"type":"string","format":"uuid","description":"Идентификатор исходного документа из массива offers[].documents, к которому относится подпись"},"file":{"type":"string","format":"binary","description":"Файл открепленной подписи (например .sig)"}}}}}}
```

## The SignatureUploadResponse object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"SignatureUploadResponse":{"type":"object","required":["signatureId","fileId","uploadedAt"],"properties":{"signatureId":{"type":"string","format":"uuid"},"fileId":{"type":"string","format":"uuid","description":"Идентификатор исходного документа, к которому относится подпись"},"uploadedAt":{"type":"string","format":"date-time"}}}}}}
```

## The ApiError object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","details"],"properties":{"code":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Z][A-Z0-9_]*$"},"message":{"type":"string","minLength":1},"details":{"type":"array","items":{"$ref":"#/components/schemas/ErrorDetail"}}}}}},"ErrorDetail":{"type":"object","required":["code","message"],"properties":{"path":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}}
```

## The ErrorDetail object

```json
{"openapi":"3.1.0","info":{"title":"API интеграции с партнёрами","version":"2.0.0"},"components":{"schemas":{"ErrorDetail":{"type":"object","required":["code","message"],"properties":{"path":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}}
```
