Skip to Content
DocsAPI ReferenceOrdersBulk Create Listings

POST /api/v1/orders/bulk

Bulk create up to 500 listings in a single request. All listings must belong to the authenticated user. For each listing:

  1. Fee validation is performed upfront
  2. ENS names are resolved by token ID (batch fetched from The Graph if missing)
  3. Existing duplicates (same order hash + source) are deleted
  4. New listings are batch inserted

Returns a per-item result with created, failed, or skipped status. Uses HTTP 201 if all succeed, 207 (Multi-Status) if any fail.

Authentication: Required

Cache: None

Request Body

FieldTypeRequiredDescription
listingsarrayYesArray of listing objects (1–500 items)

Each listing object:

FieldTypeRequiredDefaultDescription
typestringYesMust be listing
token_idstringYesENS name token ID
price_weistringYesPrice in wei
currency_addressstringNoETH zero addressPayment token
order_datastringYesJSON string of Seaport order
order_hashstringYesUnique order hash
seller_addressstringYesSeller address (must match authed user)
traitsanyNoOptional traits metadata
statusstringNoactiveOrder status
sourcestringNograilsMarketplace source

Sample Request

curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ https://api.grails.app/api/v1/orders/bulk \ -d '{ "listings": [ { "type": "listing", "token_id": "111", "price_wei": "100000000000000000", "order_data": "{...}", "order_hash": "0xabc...", "seller_address": "0xabcd..." }, { "type": "listing", "token_id": "222", "price_wei": "200000000000000000", "order_data": "{...}", "order_hash": "0xdef...", "seller_address": "0xabcd..." } ] }'

Response

// 201 Created (all succeeded) or 207 Multi-Status (some failed) { "success": true, "data": { "summary": { "total": 2, "succeeded": 2, "failed": 0, "skipped": 0 }, "results": [ { "index": 0, "token_id": "111", "order_hash": "0xabc...", "status": "created", "listing_id": 43 }, { "index": 1, "token_id": "222", "order_hash": "0xdef...", "status": "created", "listing_id": 44 } ] }, "meta": { "timestamp": "2026-04-07T12:00:00.000Z", "version": "1.0.0" } }

Error Responses

StatusCodeDescription
400VALIDATION_ERRORInvalid request body
403FORBIDDENAll listings must have seller_address matching authenticated user
500BULK_ORDER_FAILEDFailed to create bulk listings

Per-item errors in results:

CodeDescription
INVALID_FEEInvalid marketplace fee
ENS_NAME_NOT_FOUNDFailed to resolve ENS name
INSERT_FAILEDDatabase insert failed
Last updated on