> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trusset.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Listing

> One listing with its stamped terms, its loan, what an active loan owes and whether the asset can still be delivered

> [!NOTE]
>
> Seller Financing is in beta and runs on Ethereum Sepolia instances only for now (`DEVELOPMENT` instances on Ethereum). A `PRODUCTION` instance, or one on another network, answers `503 SELLER_FINANCING_UNAVAILABLE`. See [Seller Financing](/endpoints/seller-financing/introduction.md).

Returns one listing as the market contract holds it: the terms stamped when it was created, and the loan once a buyer has purchased it. While the loan is `ACTIVE`, `loan.status` adds what it owes now, as [Get Loan Status](/endpoints/seller-financing/get-loan-status.md) returns it. While it is `ACTIVE` or `REPAID`, `assetLeg` says whether the asset can still be delivered to the buyer. A cancelled or liquidated listing on a custody market carries `collateralEscrow`, what the custody adapter holds in escrow for the seller.

The terms never change after creation. A configuration change on the market reaches new listings only.

## Path Parameters

**marketId** `string` *required*

The market's record ID, as `id` on [List Markets](/endpoints/seller-financing/list-markets.md).

**listingId** `string` *required*

The listing's ID on the market: a positive integer of up to 19 digits. It is the `id` of the `ListingCreated` event of the listing transaction.

## Response Fields

**data** `object`

**id** `string`

The listing ID.

**status** `string`

`OPEN`, `CANCELLED`, `ACTIVE`, `REPAID`, `COMPLETED` or `LIQUIDATED`. See [Lifecycle](/endpoints/seller-financing/introduction.md#lifecycle).

**expired** `boolean`

`true` for an `OPEN` listing past its `expiresAt`. It can no longer be bought, and a purchase is refused with `ListingExpired`, but it stays `OPEN` on chain until the seller or the operator cancels it. `false` otherwise.

**seller** `string`

The wallet that listed.

**rateMode** `string`

`FIXED` or `DERIVED`. See [Interest](/endpoints/seller-financing/introduction.md#interest).

**assetAmount** `string`

Amount of the asset sold, in the asset token's smallest unit.

**assetAmountFormatted** `string`

The same in whole units. `null` when the asset's decimals could not be read.

**price** `string`

The price, in the payment token's smallest unit.

**priceFormatted** `string`

The price in whole units.

**downpayment** `string`

The downpayment, rounded up, in smallest units.

**downpaymentFormatted** `string`

The downpayment in whole units.

**principal** `string`

The price less the downpayment: what the buyer owes after purchase, in smallest units.

**principalFormatted** `string`

The principal in whole units.

**downpaymentBps** `integer`

The downpayment in basis points of the price.

**duration** `integer`

The runtime from purchase to maturity, in seconds.

**interestPeriod** `integer`

The interest period, in seconds.

**gracePeriod** `integer`

The grace period after each due date, in seconds.

**rate** `string`

The annual rate, as an 18-decimal fixed-point fraction. For `FIXED` the fixed rate, for `DERIVED` the base rate.

**rateBps** `integer`

The rate in basis points.

**premiumA** `string`

The walk-away premium's first coefficient. `"0"` on a `FIXED` listing.

**premiumB** `string`

Its second coefficient. `"0"` on a `FIXED` listing.

**designatedBuyer** `string`

The only wallet that may buy, or `null` when anyone the registers admit may.

**expiresAt** `integer`

Unix time after which the listing can no longer be bought, or `null` for none.

**createdAt** `integer`

Unix time of the listing.

**ref** `string`

The adapter's reference for the lock. Set at listing in custody mode and at purchase in freeze mode, all zeros before.

**loan** `object`

The loan, or `null` before a purchase.

**buyer** `string`

The wallet that purchased.

**start** `integer`

Unix time of the purchase. Interest periods count from it.

**maturity** `integer`

Unix time the principal is due.

**checkpointAt** `integer`

Unix time of the last principal payment, or the purchase.

**principal** `string`

Principal still outstanding, in smallest units. `"0"` once repaid.

**principalFormatted** `string`

The same in whole units.

**escrowedPrincipal** `string`

Principal repaid so far and held in escrow, in smallest units. It moves to the seller on completion and becomes refundable on liquidation, so it reads `"0"` after either.

**escrowedPrincipalFormatted** `string`

The same in whole units.

**baseAccrued** `string`

Base interest accrued up to `checkpointAt`, in smallest units.

**interestPaid** `string`

Interest paid so far, in smallest units, including what a liquidation took.

**interestPaidFormatted** `string`

The same in whole units.

**status** `object`

Only while the listing is `ACTIVE`: `interestDue`, `payoff`, `nextDue`, `isLiquidatable` and `liquidatableAt`, as on [Get Loan Status](/endpoints/seller-financing/get-loan-status.md#response-fields). `null` when those reads failed.

**assetLeg** `object`

Only while the listing is `ACTIVE` or `REPAID`: whether the asset can still reach the buyer. See [Asset leg](/endpoints/seller-financing/introduction.md#asset-leg).

**checked** `boolean`

`false` when the lock or the seller's balance could not be read. `deliverable`, `locked` and `warning` are then `null` and `note` says what was not read. An unchecked leg never refuses a payoff or a claim.

**mode** `string`

`FREEZE` or `CUSTODY`.

**deliverable** `boolean`

`true` when the asset can be delivered in full: in freeze mode the seller's wallet holds at least `assetAmount`, in custody mode the adapter holds at least `assetAmount` under this listing. With `false`, a payoff and the asset claim are refused with `409 ASSET_NOT_DELIVERABLE`.

**locked** `boolean`

In custody mode the same as `deliverable`. In freeze mode `true` while the freeze still covers every `ACTIVE` and `REPAID` listing of the seller on this market and this listing's lock is whole.

**pooled** `boolean`

Freeze mode only. `true` when every listing of the market was read, so `sellerRequired` counts all of the seller's sold listings.

**seller** `string`

Freeze mode only. The seller's wallet, checksummed.

**assetAmount** `string`

The amount this listing sold, in the asset token's smallest unit.

**lockedAmount** `string`

What the adapter reports as locked under this listing, in smallest units: the recorded amount, clamped in custody mode to what the adapter holds and in freeze mode to the seller's frozen balance and balance.

**sellerRequired** `string`

Freeze mode only. The asset all of the seller's `ACTIVE` and `REPAID` listings on this market sold, in smallest units.

**sellerFrozen** `string`

Freeze mode only. The seller's frozen balance on the token, in smallest units.

**sellerBalance** `string`

Freeze mode only. The seller's balance on the token, frozen tokens included, in smallest units.

**shortfall** `string`

What is missing to deliver this listing in full, in smallest units. `"0"` when deliverable.

**shortfallFormatted** `string`

The same in whole units.

**warning** `string`

What is wrong, in words: the asset left the seller's wallet or the adapter, part of the freeze was released, or the seller's balance covers fewer than all of its sold listings, so the buyers who claim first are delivered first. `null` when nothing is wrong.

**note** `string`

On an unchecked leg, what could not be read. On a freeze leg, set when the market holds more listings than one scan reads, so not every lock of the seller was counted. `null` otherwise.

**collateralEscrow** `object`

Only on a `CANCELLED` or `LIQUIDATED` listing of a custody market: `{ holder, amount, amountFormatted, note }`. `holder` is the seller. `amount` is what the custody adapter holds in escrow for the seller across every listing on the market, in the asset token's smallest unit, `"0"` when the return went through. `note` says how to reclaim it, with [Claim Escrowed Collateral](/endpoints/seller-financing/claim-escrowed-collateral.md), once the token admits the seller again. When the escrow could not be read, `amount` is `null` and `note` says so.

```bash cURL theme={null}
curl "https://api.trusset.org/seller-financing/api/markets/cmsg4x7k20003sf9q1d8v6b2e/listings/4" \
  -H "X-API-Key: trusset_your_key_here"
```

```typescript TypeScript theme={null}
const res = await fetch(
  `https://api.trusset.org/seller-financing/api/markets/${marketId}/listings/${listingId}`,
  { headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data } = await res.json();
if (data.status === 'ACTIVE' && data.loan.status) {
  console.log(`Payoff now ${data.loan.status.payoff.totalFormatted}`);
}
if (data.assetLeg?.checked && data.assetLeg.warning) {
  console.log(data.assetLeg.warning);
}
```

```json Active Loan theme={null}
{
  "success": true,
  "data": {
    "id": "4",
    "status": "ACTIVE",
    "expired": false,
    "seller": "0x3E22FdfA28e880239541d9c5B66B3b161F9ED77b",
    "rateMode": "DERIVED",
    "assetAmount": "100",
    "assetAmountFormatted": "100",
    "price": "10000000000",
    "priceFormatted": "10000.0",
    "downpayment": "2000000000",
    "downpaymentFormatted": "2000.0",
    "principal": "8000000000",
    "principalFormatted": "8000.0",
    "downpaymentBps": 2000,
    "duration": 2592000,
    "interestPeriod": 604800,
    "gracePeriod": 172800,
    "rate": "40000000000000000",
    "rateBps": 400,
    "premiumA": "781805364",
    "premiumB": "71784000",
    "designatedBuyer": null,
    "expiresAt": null,
    "createdAt": 1792400112,
    "ref": "0xbf99db9385e9acbeaf1bb0fb2b03846217e51159e1f85e21d539a35125e73815",
    "loan": {
      "buyer": "0x09BD3f5c18488e492a7bC3C7CCfc6cc837f511e8",
      "start": 1792400400,
      "maturity": 1794992400,
      "checkpointAt": 1792400400,
      "principal": "8000000000",
      "principalFormatted": "8000.0",
      "escrowedPrincipal": "0",
      "escrowedPrincipalFormatted": "0.0",
      "baseAccrued": "0",
      "interestPaid": "0",
      "interestPaidFormatted": "0.0",
      "status": {
        "interestDue": "74098370",
        "interestDueFormatted": "74.09837",
        "payoff": {
          "interest": "74098370",
          "principal": "8000000000",
          "fee": "1500000",
          "total": "8075598370",
          "totalFormatted": "8075.59837"
        },
        "nextDue": {
          "dueAt": 1793005200,
          "interestAmount": "115781947",
          "interestAmountFormatted": "115.781947",
          "principalAmount": "0",
          "principalAmountFormatted": "0.0"
        },
        "isLiquidatable": false,
        "liquidatableAt": 1793178001
      }
    },
    "assetLeg": {
      "checked": true,
      "mode": "FREEZE",
      "pooled": true,
      "locked": true,
      "deliverable": true,
      "seller": "0x3E22FdfA28e880239541d9c5B66B3b161F9ED77b",
      "assetAmount": "100",
      "lockedAmount": "100",
      "sellerRequired": "100",
      "sellerFrozen": "100",
      "sellerBalance": "100",
      "shortfall": "0",
      "shortfallFormatted": "0",
      "warning": null,
      "note": null
    }
  },
  "error": null,
  "metadata": {
    "timestamp": "2026-10-22T09:00:00.000Z",
    "requestId": "3f7c2a91-6d84-4b0e-9a15-c2e8f4d7b603",
    "instanceId": "inst_abc123"
  }
}
```

```json Error - Not Found theme={null}
{
  "success": false,
  "data": null,
  "error": {
    "code": "LISTING_NOT_FOUND",
    "message": "No listing with this id exists on the market."
  },
  "metadata": {
    "timestamp": "2026-10-22T09:00:00.000Z",
    "requestId": "3f7c2a91-6d84-4b0e-9a15-c2e8f4d7b603",
    "instanceId": "inst_abc123"
  }
}
```

## Error Codes

| Code | HTTP | Cause |
| - | - | - |
| `INVALID_LISTING_ID` | `400` | `listingId` is not a positive integer of up to 19 digits |
| `MARKET_NOT_FOUND` | `404` | No market with this ID that your instance reaches on its network |
| `LISTING_NOT_FOUND` | `404` | No listing with this ID on the market |
| `CHAIN_UNAVAILABLE` | `503` | The market could not be read. Retry shortly |
| `SELLER_FINANCING_UNAVAILABLE` | `503` | The instance is a `PRODUCTION` instance or not on Ethereum |
| `LISTING_READ_FAILED` | `500` | Unexpected failure. Retry, or contact support with the request ID |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.