v2

OpenAPI 3.1.02026-08-05123191254.3 KB
external-v2-term-sheets

Create Term Sheet

Create a new term sheet against a placement on this deal.

Required body fields: placement_id, total_rate, initial_funding, quote_type, rate_type (mirrors the GraphQL CreateTermSheetMutation requirements). The deal_id in the path must match the placement's deal.

post/api/external/v2/deals/{deal_id}/term-sheets

Path parameters

deal_idinteger required

Request body

placement_idinteger required

ID of the placement (lender outreach) this term sheet belongs to. The placement must already exist on this deal.

total_ratenumber required

Rate as a percent (e.g. 7.53 = 7.53%). Interpret relative to the term sheet's base_rate: if base_rate is set, total_rate is the spread over that base rate; if base_rate is null or 'none-fixed', total_rate is the all-in fixed rate.

initial_fundinginteger required

Provided loan amount.

quote_type'Guidance' | 'Indication' | 'Soft Quote' | 'Hard Quote' | 'Term Sheet' required
rate_type'Fixed' | 'Floating' required
titlestring nullable

Free-text title of the term sheet.

winningboolean nullable

Set true to mark this as the winning term sheet on the deal.

base_ratestring nullable

Base rate identifier — accepts BaseRateNames member names (e.g. treasury_y5, sofr_m1, prime_rate) or the literal string 'none-fixed' for fixed-rate quotes. When this is a real base-rate identifier, send total_rate as the spread over that base rate. Unknown names return 422 with the full list of valid options. See app/models/enums.py::BaseRateNames for the full enum.

max_ltvnumber nullable

Maximum loan-to-value ratio as a percent.

max_ltcnumber nullable

Maximum loan-to-cost ratio as a percent.

additional_fundinginteger nullable

Additional funding amount.

floornumber nullable

Rate floor as a percent.

floor_type'base_rate' | 'total_rate'
terminteger nullable

Term length in months.

amortizationinteger nullable

Amortization period in months.

io_periodinteger nullable

Interest-only period in months.

extension_oneinteger nullable

First extension period in months.

extension_twointeger nullable

Second extension period in months.

extension_threeinteger nullable

Third extension period in months.

recourse'Personal Recourse' | 'Fund / Corporate Recourse' | 'Non-Recourse'
recourse_type'Full' | 'Partial' | 'Burn Off'
prepayment_penalty'Step-down' | 'Defeasance' | 'Minimum Interest' | 'Yield Maintenance' | 'Minimum Multiple' | 'Swap Breakage' | 'No Prepayment Penalty' | 'No Ability to Prepay' | 'Flat Fee' | 'Other'
prepayment_penalty_detailsstring nullable

Free-text details of the prepayment penalty structure.

min_dscrnumber nullable

Minimum debt service coverage ratio as a percent.

min_debt_yieldnumber nullable

Minimum debt yield as a percent.

origination_feenumber nullable

Origination fee as a percent.

extension_feenumber nullable

Extension fee as a percent.

exit_feenumber nullable

Exit fee as a percent.

good_faith_depositnumber nullable

Good-faith deposit amount.

notesstring nullable

Free-text notes on the term sheet.

ir_detailsstring nullable

Free-text interest rate details.

is_visible_to_borrowerboolean nullable

Whether the term sheet is visible to the borrower (default true on the model).

payment_method'Accrued' | 'Partial' | 'Current Pay'
capital_source_type'Balance Sheet' | 'Agency' | 'CMBS/CLO' | 'Warehouse' | 'SBA'

Response

Successful Response

request_idstring required
timestampstring required