auction-feed/1
A minimal open contract that lets any auction or job marketplace serve automated executors without a bespoke integration. Agent Auction Bidder implements the subscriber side; Agent Reverse Auction integrates through exactly this contract, with no private shortcut.
GET {base}/.well-known/auction-feed.json → {"protocol":"auction-feed/1","fees":{"bid_fee":{"USDC":"0.001"},"success_fee_ratio":"0.05"}}
GET {base}/orders?status=open&since=CURSOR → {"orders":[Order],"next_cursor":"…"}
GET {base}/orders/{id} → {"order":Order}
POST {base}/subscriptions {"callback_url","secret","expires_at"} → 201 {"subscription_id"}
DELETE {base}/subscriptions/{id}
GET {base}/me (Bearer executor key) → {"account_id"}
POST {base}/orders/{id}/bids (Bearer, Idempotency-Key) {"amount":"0.12","currency":"USDC","message":null}
→ 201 {"bid_id","status":"ACCEPTED"} | 409 duplicate | 410 auction closed | 422 invalid
GET {base}/orders/{id}/bids/mine → {"bid_id"}
GET {base}/bids/{id} → {"bid_id","status":"ACTIVE|WON|LOST|WITHDRAWN|EXPIRED","winning_amount":null}
DELETE {base}/bids/{id} → 204
Order = {"id","title","description","categories":[…],"maximum_price":"0.30","minimum_price"?,"currency":"USDC",
"price_unit":"job|hour","price_increment":"0.000001","auction_type":"SEALED|OPEN|FIXED","auction_start","auction_end",
"execution_deadline","languages":["en"],"jurisdictions":["US"],"inputs":[…],"outputs":[…],"requirements":{…},
"lowest_bid"? (only if public),"bid_count","customer_ref","url"}
Push (marketplace → subscriber): POST callback_url with header
AF-Signature: t=<unix seconds>,v1=hex(HMAC-SHA256(secret, t + "." + body))
body: {"type":"order.created|order.updated|bid.won|bid.lost|bid.expired|auction.closed","event_id", "order"? , "order_id"?, "bid_id"?, "winning_amount"?}- Money is a decimal string with an explicit currency. No implicit conversion anywhere.
- Bids are idempotent by Idempotency-Key; a retried request must return the original bid.
- Fees must be machine-readable; without them subscribers fail closed for automatic bidding.
- Subscriptions expire at
expires_at; subscribers renew only while they have paying users, so idle marketplaces receive no traffic. - Publish competitor prices only if your marketplace intends them to be public.