create_offer_and_commit
Atomically creates a private offer and commits a specific buyer in one transaction. Prerequisite: call sign_full_offer, sign the returned typed data locally with your wallet (EIP-712), and provide the signature here. Used for private/bilateral trades. Returns unsigned transaction data.
Category: Exchange management.
Returns unsigned tx? Likely yes — sign locally and broadcast via send_signed_transaction or a meta-tx relay.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
executionMode | direct | metaTx | no | 'direct' = standard on-chain tx (sign locally with your wallet → send_signed_transaction). 'metaTx' = gasless relay via Biconomy (send_meta_transaction). Defaults to 'direct'. |
signature | string | yes | ECDSA signature over the offer typed data. Workflow: sign_full_offer → sign the returned typed data locally with your wallet (EIP-712) → use result here. |
offerCreator | string | yes | Ethereum address of the seller creating this non-listed offer. Must match the seller's assistant address. |
committer | — | yes | Ethereum address of the buyer committing in the same transaction. |
collectionIndex | string | no | Index of the seller's NFT collection for vouchers. Omit to use default (index 0). |
royaltyInfo | object | no | |
drMutualizerAddress | — | no | Optional dispute resolver mutualizer contract address that pools resolution funds. |
conditionalTokenId | — | no | Optional token ID of the NFT gate token used by this specific commit (for SpecificToken gating type). |
condition | object | no | |
useDepositedFunds | boolean | no | If true, use funds already deposited in the protocol treasury instead of transferring from the wallet. |
sellerId | — | yes | Numeric ID of the seller entity. Obtain via get_sellers_by_address. |
buyerId | — | yes | Numeric ID of the buyer entity. Use '0' for seller-initiated offers. |
metadataUri | string | yes | IPFS URI pointing to the offer metadata JSON. Obtain by calling store_product_v1_metadata, store_bundle_metadata, or store_base_metadata. |
metadataHash | string | yes | Keccak256 hash of the metadata JSON. Returned alongside metadataUri from the store_*_metadata tools. |
exchangeTokenAddress | — | no | ERC-20 token accepted for payment. Omit or use address(0) for native ETH. Call get_supported_tokens for valid values. |
price | — | yes | Offer price in the exchange token's smallest unit (wei). Pass as string to avoid precision loss, e.g. '1000000000000000000' = 1 ETH. |
sellerDeposit | — | yes | Seller collateral in same unit as price. Released to seller on completion or forfeited on dispute. Pass as string. |
agentId | — | no | Optional dACP agent facilitating this offer. Omit or pass '0' if no agent. |
buyerCancellationPenalty | — | yes | Amount buyer forfeits on cancel, in same unit as price. Must be <= price. Pass as string. |
quantityAvailable | number | yes | How many times this offer can be committed to. Must be 1 when creator='BUYER'. |
validFromDateInMS | number | yes | Unix timestamp in milliseconds when the offer becomes active. Example: Date.now() for immediate. |
validUntilDateInMS | number | yes | Unix timestamp in milliseconds when the offer can no longer be committed to. |
voucherRedeemableFromDateInMS | number | yes | Timestamp in ms from which buyer can redeem. Must be >= validFromDateInMS. |
voucherRedeemableUntilDateInMS | number | yes | Timestamp in ms after which voucher cannot be redeemed. Set to 0 to use voucherValidDurationInMS instead. |
disputePeriodDurationInMS | number | yes | Duration in ms for buyer to raise a dispute after redeeming. Example: 604800000 = 7 days. |
voucherValidDurationInMS | number | yes | Voucher is redeemable for this many ms after commit. Set to 0 to use voucherRedeemableUntilDateInMS instead. |
resolutionPeriodDurationInMS | number | yes | Duration in ms to respond to a resolution proposal before it expires. Example: 259200000 = 3 days. |
disputeResolverId | string | no | ID of the dispute resolver for escalated disputes. Call get_dispute_resolvers to list available resolvers. |
feeLimit | — | no | Max protocol fee the seller accepts in same token unit. Pass as string. |
priceType | number | no | 0 = static price, 1 = discovery price (auction). |
creator | SELLER | BUYER | no | 'SELLER' (default) = seller creates offer. 'BUYER' = buyer-initiated offer, quantity must be 1. |
configId | string | yes | Boson/Fermion Protocol deployment identifier. Format: '<env>-<chainId>-<index>' e.g. 'production-137-0' (Polygon mainnet), 'testing-80002-0' (Amoy testnet). Call get_config_ids to list all valid values for this server. |
signerAddress | — | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. |
Related
- Reference → MCP tools — full catalogue.
- Build for AI agents → The 3-step signing pattern — what to do with returned unsigned transactions.
- Concepts → Signing & meta-transactions — canonical signing reference.