Skip to content

Listings

Read the live order book, post inscriptions for sale, and cancel listings.

Reads are a single GET endpoint with filters and cursor pagination. Writes use the PSBT flow: preflight to build the PSBTs, submit to broadcast.

All listing write endpoints use the /collection/:slug/... route form.

Returns active, buyable listings. Cursor-paginated.

NameTypeRequiredDefaultDescription
limitintegerno50Page size. Min 1, max 100.
cursorstringnoOpaque cursor from pagination.nextCursor.
sortstringnorecentrecent sorts by newest listing first. price sorts by lowest asking price first.
collectionSlugstringnoRestrict to one collection. Case-insensitive. Letters, numbers, hyphens, and underscores are allowed.
inscriptionIdstringnoRestrict to one inscription. Bundle members match too.
sellerAddressstringnoRestrict to one seller address.
Terminal window
curl "https://ord.net/api/v1/listings?collectionSlug=wizards&sort=price&limit=25" \
-H "Authorization: Bearer $ORD_SESSION_TOKEN"
FieldTypeDescription
listingsarrayListing rows, ordered by sort.
listings[].listingIdstring (UUID)Listing identifier.
listings[].inscriptionIdstringThe listed inscription.
listings[].inscriptionNumberstringInscription number as a string.
listings[].inscriptionNamestringDisplay name of the inscription.
listings[].collection.slugstring | nullCollection slug, if any.
listings[].collection.namestring | nullCollection display name.
listings[].collection.kindstring | nullOne of parent_child, gallery.
listings[].collection.verificationStatusstring | nullOne of verified, unverified.
listings[].sellerAddressstringSeller’s ordinals address.
listings[].priceSatsintegerAsking price in sats.
listings[].listedAtISO 8601 datetimeWhen the listing became active.
listings[].listingExpiresAtISO 8601 | nullWhen the listing expires.
listings[].satinteger | nullSat number, if known.
listings[].locationTxidstring | nullCurrent outpoint txid.
listings[].locationVoutinteger | nullCurrent outpoint vout.
listings[].locationSatpointstring | nullCurrent satpoint.
pagination.pageSizeintegerItems in this page.
pagination.hasNextbooleantrue if more pages exist.
pagination.nextCursorstring | nullCursor for the next call. null on the last page.
{
"listings": [
{
"listingId": "11111111-1111-1111-1111-111111111111",
"inscriptionId": "abc123...i0",
"inscriptionNumber": "12345",
"inscriptionName": "Inscription 12345",
"collection": {
"slug": "wizards",
"name": "Wizards",
"kind": "parent_child",
"verificationStatus": "verified"
},
"sellerAddress": "bc1p...",
"priceSats": 50000,
"listedAt": "2026-05-08T18:00:00.000Z",
"listingExpiresAt": "2026-06-07T18:00:00.000Z",
"sat": 123456789,
"locationTxid": "abc123...",
"locationVout": 0,
"locationSatpoint": "abc123...:0:0"
}
],
"pagination": {
"pageSize": 25,
"hasNext": true,
"nextCursor": "<opaque-cursor>"
}
}
  • 200: listings returned.
  • 400: invalid sort, collectionSlug, or inscriptionId.
  • 401: missing or invalid bearer token.
  • 403: wallet not allowed.
  • 429: rate limited.

Bundle listings: when you filter by inscriptionId, any inscription in the bundle matches. Without a filter, the row shows the bundle’s canonical inscription.

The cursor encodes sort and last-seen item. Changing sort, collectionSlug, inscriptionId, or sellerAddress between calls invalidates the cursor. Start a new pagination from the beginning.

Two calls: preflight to build the PSBTs, submit to broadcast.

Each listing produces two PSBT steps that the wallet must sign:

StepSighashPurpose
0DEFAULTTransfer the inscription to the listing escrow output.
1SINGLE | ANYONECANPAYSettlement leg consumed by the buyer’s transaction.

A single recovery PSBT also covers all listings in the batch. The recovery PSBT is what makes cancellation cheap: signing it at create time means delisting can settle without another wallet round trip.

Builds the listing PSBTs.

Path parameter: slug is the collection slug.

FieldTypeRequiredDescription
walletBindingIdstring (UUID)yesChoose from walletBindings returned by /auth/verify or GET /me.
ordinalsPublicKeystringyesx-only (64 hex) or compressed (66 hex) public key for the ordinals address.
itemsarrayyesItems to list. Min 1, max 20. No duplicate inscriptionId.
items[].inscriptionIdstringyesThe inscription to list.
items[].priceSatsintegeryesAsking price in sats. Must be at least the configured listing minimum.
{
"walletBindingId": "55555555-5555-5555-5555-555555555555",
"ordinalsPublicKey": "abcdef...",
"items": [
{ "inscriptionId": "abc123...i0", "priceSats": 50000 }
]
}
FieldTypeDescription
listingsarrayOne entry per item, in the same order.
listings[].inscriptionIdstringThe inscription this entry is for.
listings[].anchorUtxoIdstring (UUID)Server-side handle. Send back at submit.
listings[].psbtsarrayTwo PSBT steps to sign.
listings[].psbts[].stepIndexinteger0 or 1.
listings[].psbts[].inscriptionIdstringSame as parent.
listings[].psbts[].signerAddressstringAddress that should sign.
listings[].psbts[].inputsToSignarrayPer-input signing instructions.
listings[].psbts[].inputsToSign[].addressstringAddress for this input.
listings[].psbts[].inputsToSign[].publicKeystring | undefinedWhen set, use this key for signing.
listings[].psbts[].inputsToSign[].disableTweakSignerboolean | undefinedWhen true, skip the taproot tweak.
listings[].psbts[].inputsToSign[].signingIndexesinteger[]Input indices in the PSBT to sign.
listings[].psbts[].inputsToSign[].sigHashinteger | undefinedSighash flag to use.
listings[].psbts[].psbtBase64stringThe unsigned PSBT.
recoveryPsbt.signerAddressstringAddress that should sign the recovery PSBT.
recoveryPsbt.inputsToSignarraySame shape as listing inputs.
recoveryPsbt.psbtBase64stringThe unsigned recovery PSBT.
{
"listings": [
{
"inscriptionId": "abc123...i0",
"anchorUtxoId": "66666666-6666-6666-6666-666666666666",
"psbts": [
{
"stepIndex": 0,
"inscriptionId": "abc123...i0",
"signerAddress": "bc1p...",
"inputsToSign": [
{ "address": "bc1p...", "signingIndexes": [0], "sigHash": 0 }
],
"psbtBase64": "<base64-psbt>"
},
{
"stepIndex": 1,
"inscriptionId": "abc123...i0",
"signerAddress": "bc1p...",
"inputsToSign": [
{ "address": "bc1p...", "signingIndexes": [0], "sigHash": 131 }
],
"psbtBase64": "<base64-psbt>"
}
]
}
],
"recoveryPsbt": {
"signerAddress": "bc1p...",
"inputsToSign": [
{ "address": "bc1p...", "signingIndexes": [0], "sigHash": 1 }
],
"psbtBase64": "<base64-psbt>"
}
}
  • 200: PSBTs returned.
  • 400: invalid request body.
  • 401: missing or invalid bearer token.
  • 403: wallet not allowed.
  • 429: rate limited.
  • 503: upstream trading service temporarily unavailable.

Publishes the listing once the wallet has signed every PSBT.

FieldTypeRequiredDescription
walletBindingIdstring (UUID)yesSame as preflight.
ordinalsPublicKeystringyesSame as preflight.
itemsarrayyesSame items sent at preflight.
items[].inscriptionIdstringyes
items[].priceSatsintegeryes
durationDaysintegeryesOne of 1, 7, 30, 90.
anchorsarrayyesOne entry per item, in the same order.
anchors[].inscriptionIdstringyesSame as the item.
anchors[].anchorUtxoIdstring (UUID)yesThe anchorUtxoId from preflight. No duplicates.
signedarrayyesOne entry per item, with the wallet-signed PSBTs.
signed[].inscriptionIdstringyes
signed[].psbtsarrayyesBoth signed steps (stepIndex 0 and 1).
signed[].psbts[].stepIndexintegeryes
signed[].psbts[].signerAddressstringyes
signed[].psbts[].inputsToSignarrayyes
signed[].psbts[].psbtBase64stringyesThe signed PSBT.
signedRecoveryPsbtobjectyesThe signed recovery PSBT.
signedRecoveryPsbt.signerAddressstringyes
signedRecoveryPsbt.inputsToSignarrayyes
signedRecoveryPsbt.psbtBase64stringyes
{
"walletBindingId": "55555555-5555-5555-5555-555555555555",
"ordinalsPublicKey": "abcdef...",
"items": [
{ "inscriptionId": "abc123...i0", "priceSats": 50000 }
],
"durationDays": 30,
"anchors": [
{ "inscriptionId": "abc123...i0", "anchorUtxoId": "66666666-6666-6666-6666-666666666666" }
],
"signed": [
{
"inscriptionId": "abc123...i0",
"psbts": [
{
"stepIndex": 0,
"signerAddress": "bc1p...",
"inputsToSign": [
{ "address": "bc1p...", "signingIndexes": [0], "sigHash": 0 }
],
"psbtBase64": "<signed-base64-psbt>"
},
{
"stepIndex": 1,
"signerAddress": "bc1p...",
"inputsToSign": [
{ "address": "bc1p...", "signingIndexes": [0], "sigHash": 131 }
],
"psbtBase64": "<signed-base64-psbt>"
}
]
}
],
"signedRecoveryPsbt": {
"signerAddress": "bc1p...",
"inputsToSign": [
{ "address": "bc1p...", "signingIndexes": [0], "sigHash": 1 }
],
"psbtBase64": "<signed-base64-psbt>"
}
}
FieldTypeDescription
listingsarrayOne entry per item.
listings[].inscriptionIdstringThe listed inscription.
listings[].listingIdstring (UUID)The new listing’s id.
{
"listings": [
{
"inscriptionId": "abc123...i0",
"listingId": "77777777-7777-7777-7777-777777777777"
}
]
}

Same as preflight.

POST /collection/:slug/listings/delist

Single call. No PSBT signing required because the recovery PSBT was signed at create time.

FieldTypeRequiredDescription
walletBindingIdstring (UUID)yesSame as listing flow.
listingsarrayyesItems to delist. Min 1, max 20. No duplicate inscriptionId or listingId.
listings[].inscriptionIdstringyesInscription on the listing.
listings[].listingIdstring (UUID)yesThe listing to cancel.
{
"walletBindingId": "55555555-5555-5555-5555-555555555555",
"listings": [
{
"inscriptionId": "abc123...i0",
"listingId": "77777777-7777-7777-7777-777777777777"
}
]
}
FieldTypeDescription
listingsarrayEchoes the listings that were taken down.
listings[].inscriptionIdstring
listings[].listingIdstring (UUID)
{
"listings": [
{
"inscriptionId": "abc123...i0",
"listingId": "77777777-7777-7777-7777-777777777777"
}
]
}

Same as preflight.