# Models

## The ErrorResponse object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"ErrorResponse":{"type":"object","properties":{"request_id":{"type":"string","description":"Идентификатор запроса для поддержки и поиска в Logs."},"error_code":{"type":"string","description":"Формализованный код ошибки для интеграционной логики.","enum":["SANDBOX_API_KEY_REQUIRED","SANDBOX_API_KEY_INVALID","SANDBOX_API_KEY_DATABASE_REQUIRED","SANDBOX_SESSION_REQUIRED","SANDBOX_RATE_LIMIT_EXCEEDED","INVALID_REQUEST","INVALID_ACTION","INVALID_SCOPE","LOAN_NOT_FOUND","WALLET_NOT_FOUND","FLOW_CONFLICT","LIMIT_EXCEEDED","INSUFFICIENT_BALANCE","IDEMPOTENCY_KEY_REQUIRED","IDEMPOTENCY_KEY_CONFLICT","IDEMPOTENCY_KEY_IN_PROGRESS","DATABASE_UNAVAILABLE","INTERNAL_ERROR"]},"error":{"type":"string","description":"Человекочитаемое описание ошибки. Не используйте его для интеграционной логики, для этого есть error_code."}},"required":["request_id","error_code","error"]}}}}
```

## The SandboxConfigResponse object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"SandboxConfigResponse":{"type":"object","properties":{"request_id":{"type":"string","description":"Идентификатор запроса для поддержки и поиска в Logs."},"success":{"type":"boolean","description":"Признак успешного ответа."},"rates":{"$ref":"#/components/schemas/RateSnapshot"},"borrow_rates":{"$ref":"#/components/schemas/BorrowRates"},"risk":{"$ref":"#/components/schemas/RiskSettings"},"terms":{"$ref":"#/components/schemas/RepaymentTerms"},"fees":{"$ref":"#/components/schemas/FeeSettings"}},"required":["request_id","success","rates","borrow_rates","risk","terms","fees"]},"RateSnapshot":{"type":"object","description":"Курсы, которые Sandbox использует в калькуляторе и loan flow.","properties":{"btc_usd":{"type":"number","description":"Рыночный курс BTC к USD."},"btc_rub":{"type":"number","description":"Расчетный курс BTC к RUB."},"usd_rub":{"type":"number","description":"Базовый USD/RUB курс для совместимости."},"usd_rub_market":{"type":"number","description":"Рыночный USD/RUB курс."},"usd_rub_payout":{"type":"number","description":"USD/RUB курс для выдачи займа в RUB с учетом sandbox FX margin."},"usd_rub_obligation":{"type":"number","description":"USD/RUB курс для обязательств/погашения в RUB с учетом sandbox FX margin."},"updated_at":{"type":"string","format":"date-time","description":"Время последнего обновления курсов."}}},"BorrowRates":{"type":"object","properties":{"fixed":{"type":"object","description":"Фиксированная ставка займа.","properties":{"enabled":{"type":"boolean","description":"Доступна ли фиксированная ставка."},"annual_percent":{"type":"number","description":"Годовая ставка заемщика в процентах."}}},"dynamic":{"type":"object","description":"Динамическая ставка на базе протокольных borrow APY.","properties":{"enabled":{"type":"boolean","description":"Доступна ли динамическая ставка."},"preferred_borrow_percent":{"type":"number","description":"Предпочтительная протокольная ставка в процентах."},"protocols":{"type":"array","description":"Список протоколов и ставок, которые можно показать партнеру в калькуляторе.","items":{"$ref":"#/components/schemas/ProtocolBorrowRate"}}}}}},"ProtocolBorrowRate":{"type":"object","properties":{"key":{"type":"string","description":"Машинный ключ протокола."},"label":{"type":"string","description":"Название протокола для отображения."},"borrow_percent":{"type":"number","description":"Итоговая ставка заемщика в процентах."},"protocol_borrow_percent":{"type":"number","description":"Исходная протокольная ставка в процентах до маржи/надбавки."}}},"RiskSettings":{"type":"object","properties":{"max_ltv":{"type":"number","description":"Максимальный LTV для создания займа. 0.73 означает 73%."},"liquidation_threshold":{"type":"number","description":"Порог ликвидации. 0.775 означает 77.5%."},"liquidation_penalty":{"type":"number","description":"Штраф ликвидации. 0.05 означает 5%."}}},"RepaymentTerms":{"type":"object","properties":{"interest_payment_months":{"type":"integer","description":"Через сколько месяцев наступает процентный платеж."},"principal_payment_months":{"type":"integer","description":"Через сколько месяцев наступает платеж основного долга."}}},"FeeSettings":{"type":"object","properties":{"loan_origination_percent":{"type":"number","description":"Комиссия за выдачу займа в процентах."},"repayment_percent":{"type":"number","description":"Комиссия погашения в процентах."}}}}}}
```

## The SandboxStateResponse object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"SandboxStateResponse":{"type":"object","description":"Полный снимок Sandbox: займы плюс партнерский блок.","properties":{"request_id":{"type":"string","description":"Идентификатор запроса для поддержки и поиска в Logs."},"success":{"type":"boolean","description":"Признак успешного ответа."},"loans":{"$ref":"#/components/schemas/SandboxLoansState"},"partner":{"$ref":"#/components/schemas/SandboxPartnerState"}},"required":["request_id","success","loans","partner"]},"SandboxLoansState":{"type":"object","properties":{"activatedScenarios":{"type":"object","description":"Какие sandbox-сценарии активированы для текущего пользователя/API-ключа.","properties":{"miner":{"type":"boolean","description":"Активирован borrower/miner сценарий."},"investor":{"type":"boolean","description":"Активирован investor сценарий."}}},"wallet":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SandboxWalletState"}],"description":"Тестовый кошелек симулятора."},"activeLoans":{"type":"array","description":"Активные Sandbox-займы.","items":{"$ref":"#/components/schemas/SandboxLoanRecord"}},"loanHistory":{"type":"array","description":"Закрытые или исторические Sandbox-займы.","items":{"$ref":"#/components/schemas/SandboxLoanRecord"}},"loanHistoryEvents":{"type":"array","description":"События истории по займам для UI/таймлайна.","items":{"$ref":"#/components/schemas/SandboxLoanHistoryEvent"}},"loanDraft":{"$ref":"#/components/schemas/SandboxLoanDraft"},"sandboxFlow":{"$ref":"#/components/schemas/SandboxLoanFlowState"}}},"SandboxWalletState":{"type":"object","properties":{"id":{"type":"string","description":"ID sandbox-кошелька симулятора."},"virtualBtcBalance":{"type":"string","description":"Доступный тестовый BTC-баланс."},"virtualUsdBalance":{"type":"string","description":"Доступный тестовый USD/USDT-баланс."},"virtualRubBalance":{"type":"string","description":"Доступный тестовый RUB-баланс."},"lockedBtcBalance":{"type":"string","description":"BTC, заблокированный в залоге."},"investedRubBalance":{"type":"string","description":"RUB, задействованный в инвестиционном сценарии."}}},"SandboxLoanRecord":{"type":"object","properties":{"id":{"type":"string","description":"ID Sandbox-займа."},"status":{"type":"string","description":"Статус займа."},"collateral_btc":{"type":"number","description":"Общий BTC-залог."},"collateral_received":{"type":"number","description":"Фактически подтвержденный BTC-залог."},"collateral_address":{"type":"string","nullable":true,"description":"Адрес залога в симуляторе."},"external_client_id":{"type":"string","nullable":true,"description":"ID клиента в системе партнера."},"client_reference":{"type":"string","nullable":true,"description":"Человекочитаемая ссылка на клиента или сделку."},"loan_amount":{"type":"number","description":"Исходная сумма займа."},"loan_currency":{"type":"string","enum":["RUB","USDT"],"description":"Валюта займа."},"debt_amount":{"type":"number","description":"Исходный основной долг."},"annual_rate":{"type":"number","description":"Годовая ставка займа в процентах."},"btc_rate":{"type":"number","description":"BTC rate, зафиксированный на момент создания."},"usd_rub_rate":{"type":"number","description":"USD/RUB rate, зафиксированный на момент создания."},"current_collateral_usd":{"type":"number","description":"Текущая стоимость залога в USD."},"current_collateral_rub":{"type":"number","description":"Текущая стоимость залога в RUB."},"current_debt":{"type":"number","description":"Текущий долг с учетом операций."},"health_factor":{"type":"number","description":"Индикатор здоровья займа: чем выше, тем безопаснее."},"accrued_interest":{"type":"number","description":"Начисленные проценты."},"max_ltv":{"type":"number","description":"Максимальный LTV для займа."},"liquidation_threshold":{"type":"number","description":"Порог ликвидации для займа."},"created_at":{"type":"string","format":"date-time","description":"Время создания займа."},"funded_at":{"type":"string","format":"date-time","description":"Время выдачи займа."},"interest_due_at":{"type":"string","nullable":true,"format":"date-time","description":"Дата ближайшего процентного платежа."},"principal_due_at":{"type":"string","nullable":true,"format":"date-time","description":"Дата платежа основного долга."}}},"SandboxLoanHistoryEvent":{"type":"object","properties":{"id":{"type":"string","description":"ID события истории."},"type":{"type":"string","enum":["opened","collateral","loan","interest_paid","closed"],"description":"Тип события."},"title":{"type":"string","description":"Название события для UI."},"amountLabel":{"type":"string","description":"Основная сумма для отображения."},"amountSubLabel":{"type":"string","nullable":true,"description":"Дополнительная сумма для отображения."},"rateLabel":{"type":"string","nullable":true,"description":"Ставка или курс для отображения."},"createdAt":{"type":"string","format":"date-time","description":"Время события."},"loanId":{"type":"string","description":"ID связанного займа."},"canRemoveCollateral":{"type":"boolean","description":"Можно ли снять часть залога после этого события."}}},"SandboxLoanDraft":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID draft-заявки."},"status":{"type":"string","enum":["active","completed","discarded"],"description":"Статус draft-заявки."},"currentStep":{"type":"string","enum":["contract","kyt","collateral","cfa"],"description":"Текущий шаг draft в legacy simulator flow."},"loanId":{"type":"string","nullable":true,"description":"ID созданного займа, если draft уже завершен."},"loanParams":{"type":"object","properties":{"collateral_btc":{"type":"number","description":"BTC-залог draft-заявки."},"loan_amount":{"type":"number","description":"Сумма займа draft-заявки."},"loan_currency":{"type":"string","enum":["RUB","USDT"],"description":"Валюта займа draft-заявки."}}},"contractAddress":{"type":"string","nullable":true,"description":"Тестовый contract/collateral address."},"kytReport":{"type":"object","nullable":true,"additionalProperties":true,"description":"KYT payload, переданный в run_kyt."},"collateralPosted":{"type":"boolean","description":"Подтвержден ли залог."},"cfaIssued":{"type":"boolean","description":"Завершена ли выдача займа."},"collateralPostedAt":{"type":"string","nullable":true,"format":"date-time"},"cfaIssuedAt":{"type":"string","nullable":true,"format":"date-time"},"completedAt":{"type":"string","nullable":true,"format":"date-time"},"discardedAt":{"type":"string","nullable":true,"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"SandboxLoanFlowState":{"type":"object","properties":{"loanApplications":{"type":"array","description":"Все активные и завершенные loan application flows.","items":{"$ref":"#/components/schemas/SandboxLoanApplicationFlow"}},"repaymentOperations":{"type":"array","description":"Все repayment flows по займам.","items":{"$ref":"#/components/schemas/SandboxRepaymentOperationFlow"}}}},"SandboxLoanApplicationFlow":{"type":"object","description":"Текущий loan application flow для выдачи займа.","properties":{"id":{"type":"string","description":"Идентификатор draft/application flow."},"loanId":{"type":"string","nullable":true,"description":"Идентификатор созданного займа. До complete_payout может быть null."},"externalClientId":{"type":"string","nullable":true,"description":"ID клиента в системе партнера."},"clientReference":{"type":"string","nullable":true,"description":"Человекочитаемая ссылка на клиента/сделку."},"status":{"type":"string","enum":["pending","completed"],"description":"Статус loan application flow."},"currentStepId":{"type":"string","nullable":true,"enum":["calculator","collateral_transfer","btc_confirmation","kyt","payout"],"description":"Следующий или текущий шаг, который нужно завершить."},"collateralRequiredConfirmations":{"type":"integer","description":"Сколько подтверждений нужно передать в confirm_btc."},"payoutRequiredConfirmations":{"type":"integer","description":"Сколько подтверждений ожидается для тестовой выдачи."},"wallets":{"type":"object","description":"Тестовые кошельки loan flow.","properties":{"collateralDeposit":{"$ref":"#/components/schemas/SandboxTestWallet"},"loanPayout":{"$ref":"#/components/schemas/SandboxTestWallet"},"collateralReturn":{"$ref":"#/components/schemas/SandboxTestWallet"}}},"steps":{"type":"array","items":{"$ref":"#/components/schemas/SandboxFlowStep"}}}},"SandboxTestWallet":{"type":"object","description":"Тестовый deterministic wallet/address для Sandbox flow. Не является реальным custody-кошельком.","properties":{"purpose":{"type":"string","enum":["collateral_deposit","loan_payout","repayment","collateral_return"],"description":"Назначение тестового кошелька в flow."},"asset":{"type":"string","enum":["BTC","USDT"],"description":"Актив кошелька."},"network":{"type":"string","enum":["sandbox"],"description":"Всегда sandbox: адрес не предназначен для реального blockchain-перевода."},"chainCode":{"type":"string","enum":["SANDBOX_BTC","SANDBOX_USDT"],"description":"Код тестовой сети."},"address":{"type":"string","description":"Тестовый адрес, который партнер показывает клиенту или использует в симуляции."},"isRealWallet":{"type":"boolean","enum":[false],"description":"Всегда false: в Sandbox не создается реальный custody wallet."},"confirmationMode":{"type":"string","enum":["api_simulated"],"description":"Подтверждение выполняется через API action, а не через внешний blockchain polling."},"requiredConfirmations":{"type":"integer","description":"Сколько подтверждений нужно передать в confirm action."}},"required":["purpose","asset","network","chainCode","address","isRealWallet","confirmationMode","requiredConfirmations"]},"SandboxFlowStep":{"type":"object","properties":{"id":{"type":"string","description":"Машинный идентификатор шага flow."},"title":{"type":"string","description":"Название шага для отображения."},"status":{"type":"string","enum":["pending","processing","completed"],"description":"Текущий статус шага."}}},"SandboxRepaymentOperationFlow":{"type":"object","description":"Repayment operation flow для процентов, частичного или полного погашения.","properties":{"id":{"type":"string","description":"Идентификатор repayment operation. Передавайте его как operation_id на следующих шагах."},"loanId":{"type":"string","nullable":true,"description":"ID займа, к которому относится repayment operation."},"kind":{"type":"string","enum":["interest","partial_principal","full_principal"],"description":"Тип погашения."},"status":{"type":"string","enum":["pending","completed"],"description":"Статус repayment flow."},"currentStepId":{"type":"string","nullable":true,"enum":["payment","usdt_confirmation","kyt","interest_settlement","debt_update","collateral_return"],"description":"Следующий или текущий шаг repayment flow."},"requiredConfirmations":{"type":"integer","description":"Сколько подтверждений нужно передать в confirm_usdt."},"wallets":{"type":"object","description":"Тестовые кошельки repayment flow.","properties":{"repayment":{"$ref":"#/components/schemas/SandboxTestWallet"},"collateralReturn":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SandboxTestWallet"}],"description":"Кошелек возврата залога. Заполняется для полного погашения."}}},"steps":{"type":"array","items":{"$ref":"#/components/schemas/SandboxFlowStep"}},"createdAt":{"type":"string","format":"date-time","description":"Время создания repayment operation."}}},"SandboxPartnerState":{"type":"object","properties":{"partner":{"$ref":"#/components/schemas/SandboxPartnerProfile"},"rewards":{"$ref":"#/components/schemas/SandboxPartnerRewards"},"subpartners":{"type":"array","description":"Прямые subpartners текущего партнера.","items":{"$ref":"#/components/schemas/SandboxSubpartner"}},"links":{"type":"array","description":"Партнерские ссылки текущего партнера.","items":{"$ref":"#/components/schemas/SandboxPartnerLink"}}}},"SandboxPartnerProfile":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID sandbox-партнера."},"displayName":{"type":"string","description":"Отображаемое имя партнера."},"phone":{"type":"string","nullable":true,"description":"Телефон партнера, если передан."},"inviteCode":{"type":"string","description":"Invite code для подключения subpartners."},"partnerLevel":{"type":"integer","description":"Уровень партнера в sandbox-сети."},"parentPartnerId":{"type":"string","nullable":true,"description":"ID вышестоящего партнера."},"status":{"type":"string","description":"Статус партнера."},"defaultLink":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SandboxPartnerLink"}],"description":"Основная партнерская ссылка."},"createdAt":{"type":"string","format":"date-time","description":"Время создания партнера."}}},"SandboxPartnerLink":{"type":"object","properties":{"id":{"type":"string","description":"ID партнерской ссылки."},"slug":{"type":"string","description":"Slug ссылки, который можно передать как partner_link_slug при создании займа."},"label":{"type":"string","description":"Название ссылки."},"marginPercent":{"type":"number","description":"Партнерская маржа/ставка ссылки в процентах. В Sandbox по умолчанию 4%."},"disabledAt":{"type":"string","nullable":true,"format":"date-time","description":"Когда ссылка была отключена."},"createdAt":{"type":"string","format":"date-time","description":"Когда ссылка была создана."}}},"SandboxPartnerRewards":{"type":"object","properties":{"totalUsd":{"type":"number","description":"Общие sandbox-вознаграждения в USD."},"directUsd":{"type":"number","description":"Прямые вознаграждения в USD."},"networkUsd":{"type":"number","description":"Сетевые вознаграждения в USD."}}},"SandboxSubpartner":{"type":"object","properties":{"id":{"type":"string","description":"ID subpartner."},"displayName":{"type":"string","description":"Имя subpartner."},"inviteCode":{"type":"string","description":"Invite code subpartner."},"partnerLevel":{"type":"integer","description":"Уровень subpartner."},"rewardUsd":{"type":"number","description":"Вознаграждение от этого subpartner в USD."},"createdAt":{"type":"string","format":"date-time","description":"Время создания subpartner."}}}}}}
```

## The SandboxPartnerResponse object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"SandboxPartnerResponse":{"type":"object","properties":{"request_id":{"type":"string","description":"Идентификатор запроса для поддержки и поиска в Logs."},"idempotency_replayed":{"type":"boolean","description":"true, если POST-ответ возвращен из кеша Idempotency-Key. Для GET отсутствует."},"success":{"type":"boolean","description":"Признак успешного ответа."},"partner":{"$ref":"#/components/schemas/SandboxPartnerProfile"},"rewards":{"$ref":"#/components/schemas/SandboxPartnerRewards"},"subpartners":{"type":"array","description":"Прямые subpartners текущего партнера.","items":{"$ref":"#/components/schemas/SandboxSubpartner"}},"links":{"type":"array","description":"Партнерские ссылки текущего партнера.","items":{"$ref":"#/components/schemas/SandboxPartnerLink"}}},"required":["request_id","success"]},"SandboxPartnerProfile":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID sandbox-партнера."},"displayName":{"type":"string","description":"Отображаемое имя партнера."},"phone":{"type":"string","nullable":true,"description":"Телефон партнера, если передан."},"inviteCode":{"type":"string","description":"Invite code для подключения subpartners."},"partnerLevel":{"type":"integer","description":"Уровень партнера в sandbox-сети."},"parentPartnerId":{"type":"string","nullable":true,"description":"ID вышестоящего партнера."},"status":{"type":"string","description":"Статус партнера."},"defaultLink":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SandboxPartnerLink"}],"description":"Основная партнерская ссылка."},"createdAt":{"type":"string","format":"date-time","description":"Время создания партнера."}}},"SandboxPartnerLink":{"type":"object","properties":{"id":{"type":"string","description":"ID партнерской ссылки."},"slug":{"type":"string","description":"Slug ссылки, который можно передать как partner_link_slug при создании займа."},"label":{"type":"string","description":"Название ссылки."},"marginPercent":{"type":"number","description":"Партнерская маржа/ставка ссылки в процентах. В Sandbox по умолчанию 4%."},"disabledAt":{"type":"string","nullable":true,"format":"date-time","description":"Когда ссылка была отключена."},"createdAt":{"type":"string","format":"date-time","description":"Когда ссылка была создана."}}},"SandboxPartnerRewards":{"type":"object","properties":{"totalUsd":{"type":"number","description":"Общие sandbox-вознаграждения в USD."},"directUsd":{"type":"number","description":"Прямые вознаграждения в USD."},"networkUsd":{"type":"number","description":"Сетевые вознаграждения в USD."}}},"SandboxSubpartner":{"type":"object","properties":{"id":{"type":"string","description":"ID subpartner."},"displayName":{"type":"string","description":"Имя subpartner."},"inviteCode":{"type":"string","description":"Invite code subpartner."},"partnerLevel":{"type":"integer","description":"Уровень subpartner."},"rewardUsd":{"type":"number","description":"Вознаграждение от этого subpartner в USD."},"createdAt":{"type":"string","format":"date-time","description":"Время создания subpartner."}}}}}}
```

## The SandboxLoanFlowRequest object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"SandboxLoanFlowRequest":{"type":"object","properties":{"action":{"type":"string","enum":["start_collateral_transfer","confirm_btc","run_kyt","complete_payout"],"description":"Действие loan flow. Порядок: start_collateral_transfer -> confirm_btc -> run_kyt -> complete_payout."},"collateral_btc":{"type":"number","description":"BTC-залог. Нужен для start_collateral_transfer."},"loan_amount":{"type":"number","description":"Сумма займа. Нужна для start_collateral_transfer."},"loan_currency":{"type":"string","enum":["RUB","USDT"],"description":"Валюта займа. Если не передать, используется RUB."},"partner_link_slug":{"type":"string","nullable":true,"description":"Slug партнерской ссылки. Используется для расчета партнерской маржи/вознаграждения."},"external_client_id":{"type":"string","nullable":true,"description":"Внешний идентификатор клиента в системе партнера. Используется для группировки Sandbox-займов в админке."},"client_reference":{"type":"string","nullable":true,"description":"Человекочитаемая ссылка на клиента или сделку в системе партнера."},"tx_hash":{"type":"string","nullable":true,"description":"Тестовый hash транзакции. Передавайте на confirm_btc для имитации зачисления BTC."},"confirmations":{"type":"number","description":"Количество тестовых подтверждений. Для confirm_btc обычно достаточно 1."},"kyt_report":{"type":"object","nullable":true,"additionalProperties":true,"description":"Произвольный KYT payload для run_kyt. В Sandbox сохраняется как тестовый отчет."}},"description":"Тело запроса для одного шага loan flow. action можно не передавать: по умолчанию используется start_collateral_transfer."}}}}
```

## The CreateSandboxLoanRequest object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"CreateSandboxLoanRequest":{"type":"object","properties":{"collateral_btc":{"type":"number","description":"BTC-залог."},"loan_amount":{"type":"number","description":"Сумма займа."},"loan_currency":{"type":"string","enum":["RUB","USDT"],"description":"Валюта займа. Если не передать, используется RUB."},"partner_link_slug":{"type":"string","nullable":true,"description":"Slug партнерской ссылки для расчета партнерской маржи/вознаграждения."},"external_client_id":{"type":"string","nullable":true,"description":"Внешний идентификатор клиента в системе партнера. Используется для группировки Sandbox-займов в админке."},"client_reference":{"type":"string","nullable":true,"description":"Человекочитаемая ссылка на клиента или сделку в системе партнера."}},"description":"Тело прямого создания Sandbox-займа без пошагового flow.","required":["collateral_btc","loan_amount"]}}}}
```

## The SandboxLoanActionRequest object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"SandboxLoanActionRequest":{"type":"object","properties":{"action":{"type":"string","enum":["repay_interest","repay_principal","add_collateral","remove_collateral","borrow_more"],"description":"Прямое действие по активному Sandbox-займу."},"amount":{"type":"number","description":"Сумма операции. Для full repayment может быть не нужна."},"fullRepayment":{"type":"boolean","description":"true для полного погашения основного долга в shortcut action."}}}}}}
```

## The SandboxRepaymentFlowRequest object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"SandboxRepaymentFlowRequest":{"type":"object","properties":{"action":{"type":"string","enum":["start_payment","confirm_usdt","run_kyt","complete_settlement","complete_collateral_return"],"description":"Действие repayment flow. Порядок: start_payment -> confirm_usdt -> run_kyt -> complete_settlement -> complete_collateral_return."},"operation_id":{"type":"string","nullable":true,"description":"ID repayment operation из sandboxFlow.repaymentOperations[].id. Нужен на шагах после start_payment."},"repayment_kind":{"type":"string","enum":["interest","partial_principal","full_principal"],"description":"Тип погашения для start_payment: interest, partial_principal или full_principal."},"amount":{"type":"number","nullable":true,"description":"Сумма частичного погашения или процентного платежа. Для full_principal можно не передавать при full_repayment=true."},"full_repayment":{"type":"boolean","description":"true для полного погашения основного долга и последующего возврата залога."},"tx_hash":{"type":"string","nullable":true,"description":"Тестовый hash транзакции. Передавайте на confirm_usdt для имитации платежа."},"confirmations":{"type":"number","description":"Количество тестовых подтверждений. Для confirm_usdt обычно достаточно 1."},"kyt_report":{"type":"object","nullable":true,"additionalProperties":true,"description":"Произвольный KYT payload для run_kyt. В Sandbox сохраняется как тестовый отчет."}},"description":"Тело запроса для одного шага repayment flow. action можно не передавать: по умолчанию используется start_payment."}}}}
```

## The UpsertSandboxPartnerRequest object

```json
{"openapi":"3.0.3","info":{"title":"Fundora API","version":"0.3.0"},"components":{"schemas":{"UpsertSandboxPartnerRequest":{"type":"object","properties":{"display_name":{"type":"string","description":"Отображаемое имя партнера."},"fixed_margin_percent":{"type":"number","description":"Устаревшее поле, сейчас не используется для расчета Sandbox-ссылки."},"dynamic_margin_percent":{"type":"number","description":"Устаревшее поле, сейчас не используется для расчета Sandbox-ссылки."},"phone":{"type":"string","nullable":true,"description":"Телефон партнера."},"invite_code":{"type":"string","nullable":true,"description":"Invite code вышестоящего sandbox-партнера для построения сети."}},"description":"Тело создания или обновления sandbox-партнера."}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fundora.capital/models.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
