-
Notifications
You must be signed in to change notification settings - Fork 5
Offer/listing creation docs missing counter, protocol_address, and EIP-712 typedData format #22
Description
Problem
The vendor skill references document the offer/listing creation API endpoints but omit fields and context required for an agent to actually create orders programmatically.
An AI agent following the documented workflow (marketplace-api.md "Build an Offer" + seaport.md "Creating Listings") will fail at submission with iterative 400 errors:
"Missing required field 'counter'"— not documented anywhere"Missing required field 'protocol_address'"— not shown as a top-level required field in the offer request body"Missing required field 'signature'"— the signing flow (EIP-712 typedData) is mentioned but the exact domain/types/message structure for Seaport orders is not provided
What's missing
1. counter field
The parameters object requires a counter field (the offerer's current Seaport nonce). Neither marketplace-api.md nor seaport.md mention it. Agents need to know:
- That
counteris required - How to get it:
getCounter(address)on the Seaport contract, or that"0"works for accounts that haven't incremented
2. protocol_address as top-level field
The offer/listing submission requires protocol_address at the top level alongside parameters and signature:
{
"protocol_address": "0x0000000000000068f116a894984e2db1123eb395",
"parameters": { ... },
"signature": "0x..."
}The current docs show protocol_address only in fulfillment requests, not in order creation.
3. EIP-712 typedData format for signing
seaport.md says "Sign order with EIP-712" but doesn't provide the typedData structure. Agents need the exact:
- domain:
{ name: "Seaport", version: "1.6", chainId, verifyingContract } - types: The
OrderComponentstype with all field types - message: How to map the
parametersobject to the message fields
4. salt format
marketplace-api.md shows "salt": "random_salt_value" — Seaport expects a uint256. Agents don't know if this should be a hex string, decimal string, or how to generate one.
Impact
We tested this with an AI agent (minimax-m2.7) that:
- Read all vendor references
- Built the Seaport parameters correctly (offer items, consideration, timestamps)
- Posted to
opensea-post.shand got"Missing required field 'counter'" - Added counter (guessed
"0") →"Missing required field 'protocol_address'" - Added protocol_address →
"Missing required field 'signature'" - Got stuck — didn't know the EIP-712 typedData format to sign
The agent got 80% of the way there from the docs but couldn't bridge the gaps.
Suggested fix
Add a complete worked example to seaport.md or marketplace-api.md showing offer creation end-to-end:
# 1. Get counter (usually "0" for new accounts)
cast call 0x0000000000000068F116a894984e2DB1123eB395 "getCounter(address)" 0xYourWallet --rpc-url https://ethereum-rpc.publicnode.com
# 2. Build parameters (with counter, salt as uint256)
# 3. Sign EIP-712 typedData with exact domain/types
# 4. POST with { protocol_address, parameters, signature }Or alternatively, document these fields inline in the existing "Build an Offer" section.