Deployment
Get Deployment Options
Read the choices and limits that apply before deploying a market
GET
/
lending-external-securities-v2
/
api
/
markets
/
deployment-options
curl "https://api.trusset.org/lending-external-securities-v2/api/markets/deployment-options" \
-H "X-API-Key: trusset_your_key_here"
const res = await fetch(
'https://api.trusset.org/lending-external-securities-v2/api/markets/deployment-options',
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data } = await res.json();
const ceiling = data.rateOffering.creatorRateCeilingBps;
{
"success": true,
"data": {
"factory": {
"address": "0xf1ad12f5698f58badd8a662acffccb067a2ddb8a",
"openToAnyCurator": true,
"creatorRateCeilingBps": 50000
},
"priceSources": {
"options": ["NAV", "MARKET", "ORACLE", "FIXED"],
"default": "NAV",
"marketRequiresIdentityRegistry": true,
"identityRegistryAlwaysOptional": false,
"oracleRequiresFeedAddress": true,
"oracleInitialPriceFromFeed": true,
"fixedSupported": true,
"fixedRequiresInitialPrice": true,
"fixedRefusesOracleAddress": true,
"fixedNeverStale": true,
"fixedMarkDownOnly": true,
"fixedCurrencyMustMatchSettlement": true,
"fixedNominalCheck": {
"formula": "nominal per token x redemption percent / 100",
"override": "acknowledgeFixedPriceMismatch"
},
"fixedOracleOwnerCanUpgrade": true,
"fixedNote": "A fixed price never goes stale, and the price authority can only mark it down through a price update, within the deviation breaker. Whoever owns the oracle could still replace its implementation through an upgrade, so the lender of record keeps the oracle owner in its own control."
},
"identityGates": {
"borrowerGateRequiredFor": ["MARKET"],
"providerGateOpensPool": false,
"providerGateReadByVaults": true,
"poolClosedWithoutProviderGate": true,
"adjustableByAdmin": true,
"acceptedShapes": ["bool", "tuple"]
},
"rateOffering": {
"modes": ["CURVE", "CLAMPED", "FIXED"],
"default": "CURVE",
"creatorRateCeilingBps": 50000,
"fixedRequiresTerms": true,
"capSuspendsBorrows": false
},
"operatorShare": {
"fixed": true,
"bps": 800,
"afterInfrastructureFee": true,
"acceptedAtDeployment": false
},
"distributorShare": {
"fixed": true,
"bps": 500,
"afterInfrastructureFee": true,
"paidTo": "the distributors behind each vault depositor, the operator for liquidity no distributor brought"
},
"liquidity": {
"directDepositors": ["OPERATOR_WALLET", "REGISTERED_VAULTS"],
"thirdPartiesThroughVaults": true
},
"termOffering": {
"maxLoanDurationDaysRange": [1, 3650],
"termGracePeriodDaysRange": [1, 30],
"graceDefaultDays": 3,
"newLoansOnly": true
},
"identityRegistry": {
"mode": "OWN",
"instanceRegister": "0xc9b421d7403a4eafcc4ba5fe38e98691badbfa0e",
"unavailableReason": null
},
"eligibilityProfiles": [
{
"key": "PROFESSIONAL",
"name": "Professional",
"entityType": "INDIVIDUAL",
"professionalOnly": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"admissionMode": "REGISTER"
}
],
"gateProfiles": [
{
"key": "RETAIL",
"name": "Retail",
"entityType": "INDIVIDUAL",
"professionalOnly": false,
"requirementsHash": "0x0898d40218bb23e08b12b0261dd235eacdbf02f8463ca93381a3eb55e9112f7c",
"registryAddress": null,
"admissionMode": null,
"registerAvailable": true,
"marketBorrowerGateEligible": false
},
{
"key": "PROFESSIONAL",
"name": "Professional",
"entityType": "INDIVIDUAL",
"professionalOnly": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"admissionMode": "REGISTER",
"registerAvailable": true,
"marketBorrowerGateEligible": true
}
],
"accessLists": {
"available": true,
"factory": "0x2c9e47a1b05d83f6e4a17c3b92d0f68e5a4c1b37",
"maxBatch": 200,
"refusedOn": ["MARKET_PRICE_BORROWER_GATE", "SINGLE_REGISTER_MARKET"],
"lists": []
},
"vaultGroups": {
"supported": true,
"maxPockets": 4
},
"professionalBorrowerGate": {
"requiredFor": ["MARKET"],
"rule": "A Market-priced market lends only to professional borrowers, so its borrower gate must be the eligibility register of a verification profile limited to professional clients."
}
}
}
Returns what a deployment on this instance can choose and what the factory fixes, before any calldata is built. Read it before Deploy Market. It carries the factory’s live rate ceiling and the fixed fee shares. It also carries the ranges the term offering accepts, the identity register this instance resolves to, the verification profiles and whitelists a market can gate on, and whether vault groups can be created.
Most of the answer is fixed by the contracts and the backend, and is returned so a deployment form does not hard-code it.
creatorRateCeilingBps, the two share bps figures, priceSources.fixedSupported and vaultGroups.supported are read live from the chain. A contract that cannot be read answers null in those fields rather than failing the request, and priceSources.options then leaves FIXED out.
Response Fields
object
Show child attributes
Show child attributes
object
The lending factory this instance deploys to.
Show child attributes
Show child attributes
string
Factory address, lowercased.
null when no factory is configured for this network.boolean
Whether the factory accepts markets offered beyond their named candidates.
null when no factory is configured.integer
The highest floor, cap or fixed rate a deployment may carry, in basis points.
null when the factory could not be read.object
Show child attributes
Show child attributes
array
NAV, MARKET, ORACLE and FIXED. FIXED is listed only when fixedSupported is true.string
NAV.boolean
true. A MARKET market must carry a borrower register. The deployment installs it, unless it nominates candidates and is not open to any curator: the nominated lender of record then brings it with its adoption terms. See professionalBorrowerGate.boolean
false, for the same reason.boolean
true. An ORACLE deployment must name its feed in oracleAddress.boolean
true. An ORACLE market takes its first price from the feed, so it takes no initialPrice.boolean
Whether the factory creates oracles that can hold a fixed price.
null when no factory is configured or it could not be read.boolean
true. A FIXED deployment states its price in initialPrice.boolean
true. A FIXED deployment takes no oracleAddress.boolean
true. A fixed price never goes stale.boolean
true. A price update can only lower a fixed price.boolean
true. The token’s currency must be the currency of the settlement token (stablecoin).object
{ formula, override }: the price is compared with nominal per token x redemption percent / 100, and acknowledgeFixedPriceMismatch overrides a mismatch.boolean
true. Whoever owns the oracle could replace its implementation, and with it the fixed price.string
The same in words, for display beside the choice.
object
How the market’s two registers behave. See Get Identity Gates.
Show child attributes
Show child attributes
array
Price sources that require a borrower register:
["MARKET"].boolean
false. A provider register admits nobody to deposit directly into the market.boolean
true. Every vault registered on the market examines its depositors against the provider register before it routes their money in.boolean
true.boolean
true. The market admin can change both registers after adoption.array
The answers to
isVerified(address) a register may give: bool or tuple.object
object
The share of repaid interest paid to the wallet that takes the lender-of-record role.
Show child attributes
Show child attributes
object
The share of repaid interest paid to distributors.
object
object
object
The identity register this instance resolves to. Nothing installs it on a market by default. A deployment or an adoption uses it only when it names it.
Show child attributes
Show child attributes
array
This instance’s verification profiles that carry an eligibility register, as on List Eligibility Profiles. A deployment, an adoption or a gate change can name one by
key instead of an address. Empty when none has a register, or when the profiles could not be read.Show child attributes
Show child attributes
string
The profile key, for
identityRegistryProfile and providerRegistryProfile.string
Display name.
string
INDIVIDUAL or COMPANY.boolean
Whether the profile is limited to professional clients. Only the register of such a profile, in the
REGISTER mode, can be the borrower gate of a MARKET market.string
The hash of the profile’s current requirements.
string
The eligibility register, checksummed.
string
REGISTER, INSTANCE_REGISTER or EXTERNAL, recorded when the register was bound. See Which registers can be signed here.array
Every enabled verification profile of this instance, with or without an eligibility register, so a form can show which can be chosen as a gate and which cannot yet. Empty when the profiles could not be read.
Show child attributes
Show child attributes
string
Profile key.
string
Display name.
string
INDIVIDUAL or COMPANY.boolean
Whether the profile is limited to professional clients.
string
The hash of the profile’s current requirements.
string
The eligibility register, checksummed, or
null when the profile has none yet.string
REGISTER, INSTANCE_REGISTER or EXTERNAL, or null without a register.boolean
Whether this instance can deploy or bind a register for a profile, which needs an identity register of its own (
identityRegistry.mode: OWN).boolean
true when the profile can be the borrower gate of a MARKET market: limited to professional clients, with a register in the REGISTER mode.object
Whether whitelists can gate a market on this network. See Whitelists.
Show child attributes
Show child attributes
boolean
Whether the whitelist factory is configured on this network.
string
The whitelist factory, lowercased, or
null.integer
200, the most wallets one transaction lists or removes.array
Where a whitelist is refused as a gate:
MARKET_PRICE_BORROWER_GATE (the borrower gate of a MARKET market) and SINGLE_REGISTER_MARKET (a market on the earlier single-register implementation).array
This instance’s whitelists that are not archived, as on List Whitelists. Empty when
available is false.object
object
The rule a
MARKET market’s borrower gate follows. See Professional borrowers.curl "https://api.trusset.org/lending-external-securities-v2/api/markets/deployment-options" \
-H "X-API-Key: trusset_your_key_here"
const res = await fetch(
'https://api.trusset.org/lending-external-securities-v2/api/markets/deployment-options',
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data } = await res.json();
const ceiling = data.rateOffering.creatorRateCeilingBps;
{
"success": true,
"data": {
"factory": {
"address": "0xf1ad12f5698f58badd8a662acffccb067a2ddb8a",
"openToAnyCurator": true,
"creatorRateCeilingBps": 50000
},
"priceSources": {
"options": ["NAV", "MARKET", "ORACLE", "FIXED"],
"default": "NAV",
"marketRequiresIdentityRegistry": true,
"identityRegistryAlwaysOptional": false,
"oracleRequiresFeedAddress": true,
"oracleInitialPriceFromFeed": true,
"fixedSupported": true,
"fixedRequiresInitialPrice": true,
"fixedRefusesOracleAddress": true,
"fixedNeverStale": true,
"fixedMarkDownOnly": true,
"fixedCurrencyMustMatchSettlement": true,
"fixedNominalCheck": {
"formula": "nominal per token x redemption percent / 100",
"override": "acknowledgeFixedPriceMismatch"
},
"fixedOracleOwnerCanUpgrade": true,
"fixedNote": "A fixed price never goes stale, and the price authority can only mark it down through a price update, within the deviation breaker. Whoever owns the oracle could still replace its implementation through an upgrade, so the lender of record keeps the oracle owner in its own control."
},
"identityGates": {
"borrowerGateRequiredFor": ["MARKET"],
"providerGateOpensPool": false,
"providerGateReadByVaults": true,
"poolClosedWithoutProviderGate": true,
"adjustableByAdmin": true,
"acceptedShapes": ["bool", "tuple"]
},
"rateOffering": {
"modes": ["CURVE", "CLAMPED", "FIXED"],
"default": "CURVE",
"creatorRateCeilingBps": 50000,
"fixedRequiresTerms": true,
"capSuspendsBorrows": false
},
"operatorShare": {
"fixed": true,
"bps": 800,
"afterInfrastructureFee": true,
"acceptedAtDeployment": false
},
"distributorShare": {
"fixed": true,
"bps": 500,
"afterInfrastructureFee": true,
"paidTo": "the distributors behind each vault depositor, the operator for liquidity no distributor brought"
},
"liquidity": {
"directDepositors": ["OPERATOR_WALLET", "REGISTERED_VAULTS"],
"thirdPartiesThroughVaults": true
},
"termOffering": {
"maxLoanDurationDaysRange": [1, 3650],
"termGracePeriodDaysRange": [1, 30],
"graceDefaultDays": 3,
"newLoansOnly": true
},
"identityRegistry": {
"mode": "OWN",
"instanceRegister": "0xc9b421d7403a4eafcc4ba5fe38e98691badbfa0e",
"unavailableReason": null
},
"eligibilityProfiles": [
{
"key": "PROFESSIONAL",
"name": "Professional",
"entityType": "INDIVIDUAL",
"professionalOnly": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"admissionMode": "REGISTER"
}
],
"gateProfiles": [
{
"key": "RETAIL",
"name": "Retail",
"entityType": "INDIVIDUAL",
"professionalOnly": false,
"requirementsHash": "0x0898d40218bb23e08b12b0261dd235eacdbf02f8463ca93381a3eb55e9112f7c",
"registryAddress": null,
"admissionMode": null,
"registerAvailable": true,
"marketBorrowerGateEligible": false
},
{
"key": "PROFESSIONAL",
"name": "Professional",
"entityType": "INDIVIDUAL",
"professionalOnly": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"admissionMode": "REGISTER",
"registerAvailable": true,
"marketBorrowerGateEligible": true
}
],
"accessLists": {
"available": true,
"factory": "0x2c9e47a1b05d83f6e4a17c3b92d0f68e5a4c1b37",
"maxBatch": 200,
"refusedOn": ["MARKET_PRICE_BORROWER_GATE", "SINGLE_REGISTER_MARKET"],
"lists": []
},
"vaultGroups": {
"supported": true,
"maxPockets": 4
},
"professionalBorrowerGate": {
"requiredFor": ["MARKET"],
"rule": "A Market-priced market lends only to professional borrowers, so its borrower gate must be the eligibility register of a verification profile limited to professional clients."
}
}
}
Error Codes
This endpoint has no refusals of its own beyond authentication, rate limiting and credits. Unreadable factory values come back asnull instead of an error.⌘I
curl "https://api.trusset.org/lending-external-securities-v2/api/markets/deployment-options" \
-H "X-API-Key: trusset_your_key_here"
const res = await fetch(
'https://api.trusset.org/lending-external-securities-v2/api/markets/deployment-options',
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data } = await res.json();
const ceiling = data.rateOffering.creatorRateCeilingBps;
{
"success": true,
"data": {
"factory": {
"address": "0xf1ad12f5698f58badd8a662acffccb067a2ddb8a",
"openToAnyCurator": true,
"creatorRateCeilingBps": 50000
},
"priceSources": {
"options": ["NAV", "MARKET", "ORACLE", "FIXED"],
"default": "NAV",
"marketRequiresIdentityRegistry": true,
"identityRegistryAlwaysOptional": false,
"oracleRequiresFeedAddress": true,
"oracleInitialPriceFromFeed": true,
"fixedSupported": true,
"fixedRequiresInitialPrice": true,
"fixedRefusesOracleAddress": true,
"fixedNeverStale": true,
"fixedMarkDownOnly": true,
"fixedCurrencyMustMatchSettlement": true,
"fixedNominalCheck": {
"formula": "nominal per token x redemption percent / 100",
"override": "acknowledgeFixedPriceMismatch"
},
"fixedOracleOwnerCanUpgrade": true,
"fixedNote": "A fixed price never goes stale, and the price authority can only mark it down through a price update, within the deviation breaker. Whoever owns the oracle could still replace its implementation through an upgrade, so the lender of record keeps the oracle owner in its own control."
},
"identityGates": {
"borrowerGateRequiredFor": ["MARKET"],
"providerGateOpensPool": false,
"providerGateReadByVaults": true,
"poolClosedWithoutProviderGate": true,
"adjustableByAdmin": true,
"acceptedShapes": ["bool", "tuple"]
},
"rateOffering": {
"modes": ["CURVE", "CLAMPED", "FIXED"],
"default": "CURVE",
"creatorRateCeilingBps": 50000,
"fixedRequiresTerms": true,
"capSuspendsBorrows": false
},
"operatorShare": {
"fixed": true,
"bps": 800,
"afterInfrastructureFee": true,
"acceptedAtDeployment": false
},
"distributorShare": {
"fixed": true,
"bps": 500,
"afterInfrastructureFee": true,
"paidTo": "the distributors behind each vault depositor, the operator for liquidity no distributor brought"
},
"liquidity": {
"directDepositors": ["OPERATOR_WALLET", "REGISTERED_VAULTS"],
"thirdPartiesThroughVaults": true
},
"termOffering": {
"maxLoanDurationDaysRange": [1, 3650],
"termGracePeriodDaysRange": [1, 30],
"graceDefaultDays": 3,
"newLoansOnly": true
},
"identityRegistry": {
"mode": "OWN",
"instanceRegister": "0xc9b421d7403a4eafcc4ba5fe38e98691badbfa0e",
"unavailableReason": null
},
"eligibilityProfiles": [
{
"key": "PROFESSIONAL",
"name": "Professional",
"entityType": "INDIVIDUAL",
"professionalOnly": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"admissionMode": "REGISTER"
}
],
"gateProfiles": [
{
"key": "RETAIL",
"name": "Retail",
"entityType": "INDIVIDUAL",
"professionalOnly": false,
"requirementsHash": "0x0898d40218bb23e08b12b0261dd235eacdbf02f8463ca93381a3eb55e9112f7c",
"registryAddress": null,
"admissionMode": null,
"registerAvailable": true,
"marketBorrowerGateEligible": false
},
{
"key": "PROFESSIONAL",
"name": "Professional",
"entityType": "INDIVIDUAL",
"professionalOnly": true,
"requirementsHash": "0x8919ea37bac1f44ea0e8a37529be970cb49e9779ebd4c4e98490cfd754e9d390",
"registryAddress": "0x4f2A9c81D06e3b75A1C8E24D9B07f56E3a1d8C90",
"admissionMode": "REGISTER",
"registerAvailable": true,
"marketBorrowerGateEligible": true
}
],
"accessLists": {
"available": true,
"factory": "0x2c9e47a1b05d83f6e4a17c3b92d0f68e5a4c1b37",
"maxBatch": 200,
"refusedOn": ["MARKET_PRICE_BORROWER_GATE", "SINGLE_REGISTER_MARKET"],
"lists": []
},
"vaultGroups": {
"supported": true,
"maxPockets": 4
},
"professionalBorrowerGate": {
"requiredFor": ["MARKET"],
"rule": "A Market-priced market lends only to professional borrowers, so its borrower gate must be the eligibility register of a verification profile limited to professional clients."
}
}
}
