Markets
Get Market
Retrieve full detail for a single market
GET
/
lending-external-securities-v2
/
api
/
markets
/
{marketId}
curl "https://api.trusset.org/lending-external-securities-v2/api/markets/{marketId}" \
-H "X-API-Key: trusset_your_key_here"
const res = await fetch(
`https://api.trusset.org/lending-external-securities-v2/api/markets/${marketId}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data } = await res.json();
if (data.errors.length > 0) console.warn('Partial read', data.errors);
console.log(`${data.borrowAssetSymbol} market, ${data.collateralDecimals} collateral decimals`);
{
"success": true,
"data": {
"id": "cmssh7p1k0001cghxq2m4v8rz",
"marketAddress": "0x70a0e25c7b768b87e658348b3b577678a173e038",
"oracleAddress": "0x3b25752c1459c5cf1b0bfcfdf0d56883c8047423",
"insuranceFundAddress": "0x8f1a4c2e9b7d3056a1e8c4f29d0b7a3e5c619c22",
"interestModelAddress": "0x2c7e91d4a3b05f68e1c2a4b7d9f03e5a6c8b1d42",
"adapterAddress": "0x4d2b9e71c3a05f8d6e2b41c7a9f03d58e6b177ae",
"identityRegistryAddress": "0x0000000000000000000000000000000000000000",
"liquidationRouterAddress": "0x067a3feea46649adad8e31c33b3a4d8774b8d8cf",
"collateralTokenAddress": "0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f",
"collateralTokenName": "Nyala Fund I",
"collateralTokenSymbol": "NYF1",
"collateralTokenIsin": "DE000A0F5UF5",
"collateralMode": "FREEZE",
"collateralDecimals": 18,
"borrowAssetAddress": "0x98ad0ca091552e23c564b41c74282e5343d03e8a",
"borrowAssetSymbol": "USDC",
"borrowAssetDecimals": 6,
"collateralAgent": "0x5a1f7c3e9d2b4068e1c5a7f3b9d0e2c4a6f81666",
"liquidationOperator": "0x7e2c4a9f1b3d5068c2e4a6f8b0d1c3e5a7f92888",
"saleRecipient": "0x9c3e5a7f1b2d4068e0c2a4f6b8d9e1c3a5f70b11",
"curator": "0x4e91a7c05d3b62f18a0c94e7db2358f1c60a4e93",
"seekingCurator": false,
"realizationMode": "ISSUER_REDEMPTION",
"liquidityCommitment": "1000000000000",
"priceSource": "NAV",
"operatorShare": "800",
"collateralFactor": "7500",
"liquidationThreshold": "8500",
"liquidationBonus": "500",
"closeFactor": "5000",
"useDutchAuction": false,
"totalDeposits": "1000000.0",
"totalBorrows": "250000.0",
"utilizationRate": "2500",
"borrowRate": "450",
"supplyRate": "83.1938",
"signerAuthorized": true,
"lastOracleUpdate": "2026-09-25T06:00:00.000Z",
"controllerImported": false,
"active": true,
"createdAt": "2026-09-01T09:00:00.000Z",
"payToSupported": true,
"onChain": {
"isOnChain": true,
"paused": false,
"totalDeposits": "1000000.0",
"totalBorrows": "250000.0",
"availableLiquidity": "750000.0",
"borrowableLiquidity": "700000.0",
"utilizationRate": "2500",
"borrowRate": "450",
"supplyRate": "83.1938",
"activeLoans": 4,
"activeAuctions": 0,
"pendingLiquidations": 0,
"pendingLiquidationDebt": "0.0",
"payToSupported": true
},
"oracleStatus": {
"price": "104.82",
"isStale": false,
"priceAge": 1200,
"maxPriceAge": 86400,
"configured": true,
"signerAuthorized": true
},
"configurationStatus": {
"liquidationContract": "0x067A3FeEA46649AdAd8e31c33B3a4D8774b8d8cF",
"insuranceFund": "0x8F1A4c2e9b7d3056a1E8C4f29D0b7a3e5c619c22",
"adapter": "0x4D2b9E71c3a05F8D6e2b41c7a9F03D58E6b177aE",
"liquidationConfigured": true,
"insuranceFundConfigured": true,
"adapterConfigured": true,
"routerAuthorized": true,
"routerHolderAuthorized": true,
"oracleSignerAuthorized": true,
"liquidatorRoleGranted": true,
"pendingCurator": false,
"fullyConfigured": true
},
"identityGate": {
"shape": "none",
"usable": true,
"note": null
},
"liquidationStats": {
"totalLiquidations": 0,
"pendingLiquidationDebt": "0.0",
"totalAuctions": 0
},
"errors": []
}
}
{
"success": false,
"error": {
"code": "MARKET_NOT_FOUND",
"message": "Market not found. marketId is the id of a market of this instance as GET /lending-external-securities-v2/api/markets returns it."
}
}
Returns the complete market record plus five enrichment blocks read live from the chain:
onChain, oracleStatus, configurationStatus, identityGate, and liquidationStats. The lender-of-record fields are reconciled against the factory on the same call, so curator, seekingCurator, realizationMode, liquidityCommitment and collateralAgent are the chain’s answer when the factory can be read. A failed factory read serves the stored values, and errors does not name it. saleRecipient is read from the market’s liquidation router, which holds the recipient in force.
List Markets returns a fixed projection. This endpoint returns every stored field on the market, including the settlement asset triple and the decimals the backend uses when parsing your amounts.
Each block falls back on its own. One failed read leaves that block
null or marked unreadable and does not empty the others.errors names every section that could not be read, as { section, message }, where section is onChain, configurationStatus, liquidationStats or oracle. It is empty on a clean read. Branch on it rather than inferring an outage from a null, because some blocks are legitimately null on a market that has no address or no oracle yet.Path Parameters
string
required
Response Fields
object
Show child attributes
Show child attributes
integer
Decimals of the collateral token. Every collateral amount you send is parsed at this precision, and every collateral amount returned is formatted with it.
string
Settlement token (stablecoin) address.
string
Its symbol, for example
USDC.integer
Its decimals. Every borrow, repay, and liquidity amount is parsed at this precision.
string
The market’s interest rate model contract.
string
The borrower identity register recorded for the market, lowercased. The zero address or
null means the market has no borrower register. identityGate below is read from the contract itself.string
The market’s liquidation penalty in basis points, as last recorded.
string
The lender of record’s share of repaid interest after the infrastructure fee, in basis points. When the factory’s figure differs from the stored one, the factory’s is served. On current markets it is
800.boolean
Recorded oracle signer authorization for the instance’s wallet, healed from the chain whenever the oracle is read.
oracleStatus.signerAuthorized is the live value.string
ISO 8601 timestamp of the latest price update the record knows of, moved forward from the oracle whenever it is read.
boolean
True when this market was deployed under another instance and imported here by proving on-chain admin control.
boolean
Whether the market’s implementation can pay a loan’s proceeds to a wallet other than the borrower, so Open Loan accepts
payToAddress. false on an implementation without the pay-to entry point, null when the implementation could not be read or the market has no address. onChain carries the same value.object
Live market metrics, or
null for a market without an address. See Get Market Metrics. On a market with just-in-time vault liquidity switched on (useVaultLiquidity: true) it also carries vaultDrawable, what the connected vaults can still draw into the market right now (their idle funds within the unused draw caps, as a decimal string of the settlement asset, or null when it could not be read), and connectedVaults, the number of vaults registered on the market. A borrow larger than availableLiquidity is funded up to vaultDrawable by drawing exactly the shortfall, so the loan opens at full utilization: on a CURVE market it pays the top of the curve.object
Live oracle state, or
null when the market has no oracle. A failed read carries configured: false and an error message. See Get Oracle Status.object
The readiness verdict, or
null for a market without an address.Show child attributes
Show child attributes
string
Liquidation router the market is wired to.
string
Insurance fund the market is wired to.
string
Collateral adapter the market is wired to.
boolean
A router address is set on the market.
boolean
An insurance fund address is set on the market.
boolean
An adapter address is set on the market.
boolean
The router accepts liquidations from this market.
boolean
The router is an eligible holder of the collateral token.
boolean
The instance’s wallet may sign prices on the market’s oracle. Also
true on an oracle that reads an external feed or holds a fixed price, since neither takes a signed price.boolean
The instance’s wallet holds
LIQUIDATOR_ROLE on the market.boolean
The market has no lender of record yet.
boolean
The same verdict Get Configuration Status gives, including the adapter’s authorization on the collateral token.
boolean
Present and
true when a wiring read failed. The figures beside it are then not a statement about the market.object
totalLiquidations, pendingLiquidationDebt and totalAuctions, plus readFailed: true when a counter could not be read.object
What the market’s borrower register answers, and what that means for the market.
null when the register could not be reached.Show child attributes
Show child attributes
string
none when no register is installed, tuple when it answers isVerified(address) with (bool, uint8), bool when it answers with a single boolean, unknown when it does not answer isVerified(address) at all.boolean
true in every current case. The note says what, if anything, stands in the way.string
What the answer means and who can act on it.
null when there is nothing to do. On a market gated on the previous Trusset ID Register, it says the register takes no new identities, that the market admin moves the gate to the current register under Gates on the operator desk, and that until then the market admits only wallets verified before the move.boolean
Present, and
true, only when the borrower register is the previous Trusset ID Register, 0xE9114c40934f6fB6BB317935156b731f7A86D006. See The Previous Trusset ID Register.string
Present with
retired. The current Trusset ID Register, lowercased.array
Sections that could not be read, each
{ section, message }. Empty on a clean read.A register that answers with a bare
bool works on the current market implementation, which reads either shape. A market still on the earlier implementation reads (bool, uint8) only. There every deposit and every borrow reverts until the market admin moves it on with Upgrade Market. A register that answers neither shape refuses every borrower until the admin replaces it through Set Identity Gates. Taking the lender-of-record role is not blocked in either case. note says which applies: show it verbatim.configurationStatus here is a verdict without the calldata to act on it, and it is cached for up to 10 seconds. Get Configuration Status returns the outstanding transactions and who must sign each. Get Setup Steps returns them as an ordered checklist.curl "https://api.trusset.org/lending-external-securities-v2/api/markets/{marketId}" \
-H "X-API-Key: trusset_your_key_here"
const res = await fetch(
`https://api.trusset.org/lending-external-securities-v2/api/markets/${marketId}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data } = await res.json();
if (data.errors.length > 0) console.warn('Partial read', data.errors);
console.log(`${data.borrowAssetSymbol} market, ${data.collateralDecimals} collateral decimals`);
{
"success": true,
"data": {
"id": "cmssh7p1k0001cghxq2m4v8rz",
"marketAddress": "0x70a0e25c7b768b87e658348b3b577678a173e038",
"oracleAddress": "0x3b25752c1459c5cf1b0bfcfdf0d56883c8047423",
"insuranceFundAddress": "0x8f1a4c2e9b7d3056a1e8c4f29d0b7a3e5c619c22",
"interestModelAddress": "0x2c7e91d4a3b05f68e1c2a4b7d9f03e5a6c8b1d42",
"adapterAddress": "0x4d2b9e71c3a05f8d6e2b41c7a9f03d58e6b177ae",
"identityRegistryAddress": "0x0000000000000000000000000000000000000000",
"liquidationRouterAddress": "0x067a3feea46649adad8e31c33b3a4d8774b8d8cf",
"collateralTokenAddress": "0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f",
"collateralTokenName": "Nyala Fund I",
"collateralTokenSymbol": "NYF1",
"collateralTokenIsin": "DE000A0F5UF5",
"collateralMode": "FREEZE",
"collateralDecimals": 18,
"borrowAssetAddress": "0x98ad0ca091552e23c564b41c74282e5343d03e8a",
"borrowAssetSymbol": "USDC",
"borrowAssetDecimals": 6,
"collateralAgent": "0x5a1f7c3e9d2b4068e1c5a7f3b9d0e2c4a6f81666",
"liquidationOperator": "0x7e2c4a9f1b3d5068c2e4a6f8b0d1c3e5a7f92888",
"saleRecipient": "0x9c3e5a7f1b2d4068e0c2a4f6b8d9e1c3a5f70b11",
"curator": "0x4e91a7c05d3b62f18a0c94e7db2358f1c60a4e93",
"seekingCurator": false,
"realizationMode": "ISSUER_REDEMPTION",
"liquidityCommitment": "1000000000000",
"priceSource": "NAV",
"operatorShare": "800",
"collateralFactor": "7500",
"liquidationThreshold": "8500",
"liquidationBonus": "500",
"closeFactor": "5000",
"useDutchAuction": false,
"totalDeposits": "1000000.0",
"totalBorrows": "250000.0",
"utilizationRate": "2500",
"borrowRate": "450",
"supplyRate": "83.1938",
"signerAuthorized": true,
"lastOracleUpdate": "2026-09-25T06:00:00.000Z",
"controllerImported": false,
"active": true,
"createdAt": "2026-09-01T09:00:00.000Z",
"payToSupported": true,
"onChain": {
"isOnChain": true,
"paused": false,
"totalDeposits": "1000000.0",
"totalBorrows": "250000.0",
"availableLiquidity": "750000.0",
"borrowableLiquidity": "700000.0",
"utilizationRate": "2500",
"borrowRate": "450",
"supplyRate": "83.1938",
"activeLoans": 4,
"activeAuctions": 0,
"pendingLiquidations": 0,
"pendingLiquidationDebt": "0.0",
"payToSupported": true
},
"oracleStatus": {
"price": "104.82",
"isStale": false,
"priceAge": 1200,
"maxPriceAge": 86400,
"configured": true,
"signerAuthorized": true
},
"configurationStatus": {
"liquidationContract": "0x067A3FeEA46649AdAd8e31c33B3a4D8774b8d8cF",
"insuranceFund": "0x8F1A4c2e9b7d3056a1E8C4f29D0b7a3e5c619c22",
"adapter": "0x4D2b9E71c3a05F8D6e2b41c7a9F03D58E6b177aE",
"liquidationConfigured": true,
"insuranceFundConfigured": true,
"adapterConfigured": true,
"routerAuthorized": true,
"routerHolderAuthorized": true,
"oracleSignerAuthorized": true,
"liquidatorRoleGranted": true,
"pendingCurator": false,
"fullyConfigured": true
},
"identityGate": {
"shape": "none",
"usable": true,
"note": null
},
"liquidationStats": {
"totalLiquidations": 0,
"pendingLiquidationDebt": "0.0",
"totalAuctions": 0
},
"errors": []
}
}
{
"success": false,
"error": {
"code": "MARKET_NOT_FOUND",
"message": "Market not found. marketId is the id of a market of this instance as GET /lending-external-securities-v2/api/markets returns it."
}
}
Error Codes
| Code | HTTP | Cause |
|---|---|---|
MISSING_MARKET_ID | 400 | marketId is longer than 100 characters |
MARKET_NOT_FOUND | 404 | No market with this ID on your instance |
⌘I
curl "https://api.trusset.org/lending-external-securities-v2/api/markets/{marketId}" \
-H "X-API-Key: trusset_your_key_here"
const res = await fetch(
`https://api.trusset.org/lending-external-securities-v2/api/markets/${marketId}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data } = await res.json();
if (data.errors.length > 0) console.warn('Partial read', data.errors);
console.log(`${data.borrowAssetSymbol} market, ${data.collateralDecimals} collateral decimals`);
{
"success": true,
"data": {
"id": "cmssh7p1k0001cghxq2m4v8rz",
"marketAddress": "0x70a0e25c7b768b87e658348b3b577678a173e038",
"oracleAddress": "0x3b25752c1459c5cf1b0bfcfdf0d56883c8047423",
"insuranceFundAddress": "0x8f1a4c2e9b7d3056a1e8c4f29d0b7a3e5c619c22",
"interestModelAddress": "0x2c7e91d4a3b05f68e1c2a4b7d9f03e5a6c8b1d42",
"adapterAddress": "0x4d2b9e71c3a05f8d6e2b41c7a9f03d58e6b177ae",
"identityRegistryAddress": "0x0000000000000000000000000000000000000000",
"liquidationRouterAddress": "0x067a3feea46649adad8e31c33b3a4d8774b8d8cf",
"collateralTokenAddress": "0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f",
"collateralTokenName": "Nyala Fund I",
"collateralTokenSymbol": "NYF1",
"collateralTokenIsin": "DE000A0F5UF5",
"collateralMode": "FREEZE",
"collateralDecimals": 18,
"borrowAssetAddress": "0x98ad0ca091552e23c564b41c74282e5343d03e8a",
"borrowAssetSymbol": "USDC",
"borrowAssetDecimals": 6,
"collateralAgent": "0x5a1f7c3e9d2b4068e1c5a7f3b9d0e2c4a6f81666",
"liquidationOperator": "0x7e2c4a9f1b3d5068c2e4a6f8b0d1c3e5a7f92888",
"saleRecipient": "0x9c3e5a7f1b2d4068e0c2a4f6b8d9e1c3a5f70b11",
"curator": "0x4e91a7c05d3b62f18a0c94e7db2358f1c60a4e93",
"seekingCurator": false,
"realizationMode": "ISSUER_REDEMPTION",
"liquidityCommitment": "1000000000000",
"priceSource": "NAV",
"operatorShare": "800",
"collateralFactor": "7500",
"liquidationThreshold": "8500",
"liquidationBonus": "500",
"closeFactor": "5000",
"useDutchAuction": false,
"totalDeposits": "1000000.0",
"totalBorrows": "250000.0",
"utilizationRate": "2500",
"borrowRate": "450",
"supplyRate": "83.1938",
"signerAuthorized": true,
"lastOracleUpdate": "2026-09-25T06:00:00.000Z",
"controllerImported": false,
"active": true,
"createdAt": "2026-09-01T09:00:00.000Z",
"payToSupported": true,
"onChain": {
"isOnChain": true,
"paused": false,
"totalDeposits": "1000000.0",
"totalBorrows": "250000.0",
"availableLiquidity": "750000.0",
"borrowableLiquidity": "700000.0",
"utilizationRate": "2500",
"borrowRate": "450",
"supplyRate": "83.1938",
"activeLoans": 4,
"activeAuctions": 0,
"pendingLiquidations": 0,
"pendingLiquidationDebt": "0.0",
"payToSupported": true
},
"oracleStatus": {
"price": "104.82",
"isStale": false,
"priceAge": 1200,
"maxPriceAge": 86400,
"configured": true,
"signerAuthorized": true
},
"configurationStatus": {
"liquidationContract": "0x067A3FeEA46649AdAd8e31c33B3a4D8774b8d8cF",
"insuranceFund": "0x8F1A4c2e9b7d3056a1E8C4f29D0b7a3e5c619c22",
"adapter": "0x4D2b9E71c3a05F8D6e2b41c7a9F03D58E6b177aE",
"liquidationConfigured": true,
"insuranceFundConfigured": true,
"adapterConfigured": true,
"routerAuthorized": true,
"routerHolderAuthorized": true,
"oracleSignerAuthorized": true,
"liquidatorRoleGranted": true,
"pendingCurator": false,
"fullyConfigured": true
},
"identityGate": {
"shape": "none",
"usable": true,
"note": null
},
"liquidationStats": {
"totalLiquidations": 0,
"pendingLiquidationDebt": "0.0",
"totalAuctions": 0
},
"errors": []
}
}
{
"success": false,
"error": {
"code": "MARKET_NOT_FOUND",
"message": "Market not found. marketId is the id of a market of this instance as GET /lending-external-securities-v2/api/markets returns it."
}
}
