# Boson Protocol Documentation — full text > The entire docs site, concatenated. For the structured index, see /llms.txt. --- # What Boson is URL: https://www.bosonprotocol.io/docs/ > Boson Protocol is a tokenized-commitment / escrow protocol for selling physical and digital goods, with first-class support for AI agents. # What Boson is Boson is a **tokenized-commitment and escrow protocol for commerce**. A seller publishes an _offer_; a buyer _commits_ to it; the protocol holds both parties' deposits in escrow until the buyer _redeems_ and the seller _delivers_. If something goes wrong, a third-party _dispute resolver_ adjudicates. What makes Boson different from a traditional payment processor: - **Non-custodial.** Funds are held by an on-chain Diamond contract, not by Boson. - **One protocol, many surfaces.** TypeScript SDK, hosted MCP server with ~56 tools, embeddable widgets, an x402 escrow stack, a WooCommerce plugin, and a hosted dApp. Pick whichever fits your stack. - **Agent-native.** Every protocol action is exposed as an MCP tool with a stable schema. Buyer and seller agents can transact autonomously. - **Multi-chain.** Deployed on Polygon, Mainnet, Base, Optimism, Arbitrum, plus matching testnets. ## Who this is for These docs are written for **two audiences in parallel**: - **Developers building human-facing apps.** Marketplaces, e-commerce sites, drop-launches, Shopify-style storefronts. Reach for the [TypeScript SDK](/tooling/core-sdk), [React Kit](/tooling/react-kit), or [embeddable widgets](/tooling/widgets). - **Developers building AI-agent apps.** Autonomous buyer or seller agents, agent-to-agent commerce, x402 payment rails. Reach for the [MCP server](/tooling/mcp) or the [x402 stack](/tooling/x402). Anything that's the same for both (offers, exchanges, disputes, networks, signing) lives once in [Protocol concepts](/concepts/model). Everything else is split by *role* (Sellers, Buyers, Dispute Resolvers, Marketplace operators) and shows you the snippet in whichever stack you're using. ## Where to go next - **Just want to ship something fast?** Pick a [Quickstart](/quickstart/ai-agent-buyer) — each one is 5–15 minutes and ends with a working prototype. - **Not sure which stack to use?** Read [Pick your integration](/pick-your-integration). - **Coming from the v2 dApp or WooCommerce plugin?** Those are still supported — see [Sell via the Boson dApp](/build/sellers/dapp) and [Sell via WooCommerce](/build/sellers/woocommerce). - **Building an agent?** Start with [Build for AI agents → Overview](/agents). - **Want the API reference?** Jump to [Reference](/reference). ## A note on terminology Boson uses a handful of jargon terms (rNFT, dACP, voucher, exchange, offer, agent-the-protocol-role vs agent-the-AI). Every term is defined once in the [Glossary](/glossary). If you see a word that's not obvious, hover the inline link or jump there directly. --- # Buy with an AI agent in 5 minutes URL: https://www.bosonprotocol.io/docs/quickstart/ai-agent-buyer > A copy-paste Vercel AI script that connects to Boson's hosted MCP server and buys a test offer on Base Sepolia. # Buy with an AI agent in 5 minutes What you'll build: a Node.js script that uses Vercel AI's SDK + the Boson GOAT plugin to autonomously buy a test offer on Base Sepolia. **Time**: 5 minutes. **Stack**: Node.js 20+, Vercel AI SDK, GOAT, viem. **Network**: Base Sepolia testnet (`configId: "staging-84532-0"`). ## 1. Get a funded testnet wallet ```bash # Generate a new private key, or use an existing one. node -e "console.log(require('viem/accounts').generatePrivateKey())" ``` Fund it with Base Sepolia ETH from any public faucet (e.g. [coinbase.com/faucets](https://www.coinbase.com/faucets/base-ethereum-sepolia-faucet)). ## 2. Set up the project ```bash mkdir boson-agent-buyer && cd boson-agent-buyer pnpm init pnpm add ai @ai-sdk/anthropic \ @bosonprotocol/agentic-commerce \ @goat-sdk/adapter-vercel-ai \ @goat-sdk/wallet-viem \ viem ``` Set two env vars: ```bash export ANTHROPIC_API_KEY="sk-ant-..." export PRIVATE_KEY="0x..." ``` ## 3. The script ```ts twoslash // @noErrors // agent.ts import { generateText } from "ai" import { anthropic } from "@ai-sdk/anthropic" import { bosonProtocolPlugin } from "@bosonprotocol/agentic-commerce" import { getOnChainTools } from "@goat-sdk/adapter-vercel-ai" import { viem } from "@goat-sdk/wallet-viem" import { createWalletClient, http } from "viem" import { baseSepolia } from "viem/chains" import { privateKeyToAccount } from "viem/accounts" const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) const walletClient = createWalletClient({ account, chain: baseSepolia, transport: http(), }) const tools = await getOnChainTools({ wallet: viem(walletClient), plugins: [ bosonProtocolPlugin({ url: "https://mcp-staging.bosonprotocol.io/mcp", }), ], }) const result = await generateText({ model: anthropic("claude-sonnet-4-6"), tools, maxSteps: 12, system: ` You are a Boson Protocol buyer agent on Base Sepolia (configId staging-84532-0). Find an available test offer with a low price, commit to it, and report the exchangeId. Do not redeem; just commit. `, prompt: "Find and commit to one test offer.", }) console.log(result.text) ``` Run it: ```bash pnpm tsx agent.ts ``` ## What you should see The agent will: 1. Call `get_offers` to find available offers. 2. Pick one, call `get_supported_tokens` to confirm the payment token. 3. If it's an ERC-20 offer, call `approve_exchange_token`. 4. Call `commit_to_offer`, receive the unsigned tx, sign locally, broadcast. 5. Report the new `exchangeId`. Expected output: ``` Found offer 123 at 0.001 USDC. Approving USDC… approved. Committing… committed. Your new exchange: 456. ``` ## What just happened - The GOAT plugin pulled all 56 MCP tools from the hosted server and registered them with the model. - Every state-changing tool returned an _unsigned_ transaction; the wallet you passed in signed and broadcast each one. - The model orchestrated the calls — choosing the offer, approving the token, committing — without you writing flow logic. ## Common gotchas - **No offers found.** The staging environment may be empty. Create your own with [Quickstart → Build a marketplace](/quickstart/marketplace) first. - **`InvalidExchangeState` on commit.** The offer was voided or sold out between query and commit. Retry; see [Build for AI agents → Idempotency & retry](/agents/idempotency). - **Subgraph lag.** If you immediately try to read the new exchange you may get nothing for 1–3 blocks. See [Concepts → Eventing & indexing](/concepts/eventing). ## Next - [Build for AI agents → Overview](/agents) — patterns for production agents. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what's happening under the hood. - [Reference → MCP tools](/reference/mcp-tools) — every tool's schema. --- # Embed a commit button in 5 minutes URL: https://www.bosonprotocol.io/docs/quickstart/commit-button > Drop a working Boson Commit Widget into any web page with a script tag. # Embed a commit button in 5 minutes What you'll build: a working "Buy now" button on an existing webpage that triggers the Boson commit flow. No SDK, no React, no build step. **Time**: 5 minutes. **Stack**: any HTML page. **Network**: staging (Base Sepolia) by default. ## 1. Find your seller ID and product UUID If you already have a seller account, look up your `sellerId` and the `productUuid` of the offer you want to sell — for example via the Boson dApp or via: ```ts const offers = await sdk.getOffers({ where: { seller: yourAddress } }) ``` If you don't yet have a seller account, do [Quickstart → Build a marketplace](/quickstart/marketplace) first, or use a public test seller / product (see staging seed data in the [agent-builder repo](https://github.com/bosonprotocol/agent-builder)). ## 2. Drop in the HTML ```html My drop

Buy my thing

``` That's it. Open the page; click "Buy now"; the widget opens a modal that: 1. Asks the buyer to connect a wallet. 2. Shows the offer details and price. 3. Walks them through approval (if ERC-20) and commit. 4. Returns a voucher (rNFT) to their wallet. ## Production switch Swap `staging-84532-0` for `production-137-0` (Polygon mainnet) or any other production ConfigId. Full list at [Networks → ConfigIds matrix](/networks/configids). ## Common gotchas - **Wrong network.** The buyer's wallet must be on the chain that matches `configId`. The widget prompts them to switch. - **Insufficient gas / token balance.** The widget surfaces the error inline; nothing breaks server-side. - **CSP blocks.** If your site has a strict Content Security Policy, allow `https://widgets.bosonprotocol.io` for scripts and frames. ## What this doesn't do - Doesn't persist orders to your backend. Use a [postback URL](/widgets/postback) or listen via [webhooks](/build/marketplace/webhooks). - Doesn't customize the modal beyond [theming options](/widgets/styling). For full customization, use the [Core SDK](/tooling/core-sdk) directly. ## Next - [Widgets → Commit Widget](/widgets/commit) for all options. - [Widgets → Embedding methods](/widgets/embedding) for ` ``` Pros: works in environments where you can't run scripts (some CMS / locked-down pages). Cons: communication is harder (use `postMessage` for events; see [Postback URLs](./postback) instead for server-side). ## Zoid (cross-origin component) ```ts twoslash // @noErrors import { create } from "@krakenjs/zoid" const Commit = create({ tag: "boson-commit", url: "https://widgets.bosonprotocol.io/#/commit", dimensions: { width: "600px", height: "800px" }, }) Commit.render({ configId: "production-137-0", productUuid: "...", onCommit: (exchangeId) => { /* … */ }, }, "#mount") ``` Pros: typed props, lifecycle callbacks, full DOM isolation. Cons: more setup; one more dependency. ## When to use which | Need | Use | | --- | --- | | Simplest possible | Script + button | | No JS allowed | Iframe | | Typed props and callbacks | Zoid | ## Next - [Configuration & ConfigIds](./configuration). - [Postback URLs & deep links](./postback). - [Reference → Widget URL params](/reference/widget-params). --- # Finance Widget URL: https://www.bosonprotocol.io/docs/widgets/finance > A drop-in UI for managing on-chain funds — sellers deposit and withdraw from their protocol treasury, plus per-token balance views. # Finance Widget The Finance Widget exposes the protocol treasury for a seller (and for buyers / dispute resolvers / agents who have funds locked up): per-token available balances, deposit, withdraw. Embed it where sellers manage their account — a dashboard, a back-office page, or a settings modal. Under the hood it's `@bosonprotocol/react-kit`'s ``, surfaced through the hosted build at [`widgets.bosonprotocol.io`](https://widgets.bosonprotocol.io/). ## Quickest embed: script + button ```html ``` The widget filters to the connected wallet by default. To force a specific seller (e.g. when the connected wallet is the assistant and you want to manage a different seller's treasury), pass `data-seller-id` together with `data-with-external-signer="true"`. ## Attributes | Attribute | Required? | Notes | | --- | --- | --- | | `data-config-id` | Yes | See [Networks → ConfigIds matrix](/networks/configids). | | `data-seller-id` | Together with `data-with-external-signer` | On-chain entity ID to manage. Without it, the widget falls back to the connected wallet's entity. | | `data-with-external-signer` | Together with `data-seller-id` | `"true"` means you'll sign transactions externally and pass them through — useful when the seller is a smart account or held in custody. | | `data-look-and-feel` | No | `"modal"` (default) or `"regular"`. | | `data-theme-overrides` | No | JSON-encoded CSS variable overrides. | ## Iframe form (no JS loader) ```html ``` Every `data-*` attribute maps 1:1 to a URL query param of the same name (camelCase, without the `data-` prefix). ## What the widget shows For a seller account (or any account-holding entity): - **Available balances per token** — only what's withdrawable, _not_ what's locked in active exchanges (`COMMITTED`, `REDEEMED`, `DISPUTED`). - **Deposit** — top up the treasury per token; needed for offers with `sellerDeposit > 0`, for pre-minted offers, and for buyer-side prepayment under [buyer-initiated offers](/build/buyers/buyer-initiated). - **Withdraw** — pull tokens out to the entity's treasury address. Batched by token. Funds locked in active escrow are intentionally omitted — withdrawing them isn't possible until the corresponding exchanges finalise. To inspect locked funds, query the subgraph directly (see [Concepts → Funds, escrow & payouts](/concepts/funds)). ## React Kit — when you want full control ```tsx import { FinanceWidget } from "@bosonprotocol/react-kit" ``` See the [widgets repo](https://github.com/bosonprotocol/widgets) for the complete prop list. ## Common gotchas - **Treasury vs. wallet.** Withdrawal goes to the **treasury address** configured on the entity, not the wallet that signed the withdraw. To redirect, call `updateSeller` first. - **Per-token withdrawal.** One `withdrawFunds` call takes an array of `(tokenAddress, amount)` pairs — the widget batches the user's selection into a single transaction. - **Native vs. ERC-20.** Native gas tokens appear as `0x0000…0000` in balances and don't need approvals. ERC-20s show the symbol resolved via the supported-tokens config. - **Gas isn't free.** Even when the widget hides it (most flows use meta-tx where possible), some chains require the signer to hold gas. Surface that requirement to the user when balance is empty. - **DR and agent treasuries work the same way.** Set `data-seller-id` to the DR or agent ID and the widget renders their balances; the protocol treats all entity-holders uniformly under `FundsHandlerFacet`. ## Next - [Concepts → Funds, escrow & payouts](/concepts/funds) — the money-flow model the widget is a UI for. - [Build → Sellers → Manage funds](/build/sellers/manage-funds) — the equivalent SDK calls. - [Widgets → Embedding methods](./embedding). --- # Postback URLs & deep links URL: https://www.bosonprotocol.io/docs/widgets/postback > Receive server-side notifications when a widget user commits or redeems. # Postback URLs & deep links Widget interactions are off-server by default — the buyer's browser talks to the chain. To capture events on your backend (record the order in your CRM, fire fulfillment), use a **postback URL**. ## Configure ```html ``` ## Payload The widget POSTs JSON to your endpoint after each lifecycle event: ```json { "event": "committed", "exchangeId": "456", "buyer": "0x...", "offerId": "123", "txHash": "0x...", "configId": "production-137-0", "timestamp": 1742345678 } ``` Events: `committed`, `redeemed`, `disputed`, `cancelled`, `revoked`. ## Authentication The widget signs the payload with HMAC using a secret you supply at widget config: ```html data-postback-secret="" ``` Verify on your server using the matching secret. ## Deep links To open the widget from a URL (e.g. a deep link in an email): ``` https://widgets.bosonprotocol.io/#/commit?configId=production-137-0&productUuid=...&account=0x... ``` The widget mounts in fullscreen mode. Useful for share / claim links. ## Common gotchas - **Postbacks are not retried by default.** If your endpoint is down, the event is lost. Pair with a [webhook server](/build/marketplace/webhooks) that listens to on-chain events as a backstop. - **HMAC verification is mandatory in production.** Without it, anyone can POST to your endpoint with fake events. ## Next - [Marketplace operators → Webhooks & events](/build/marketplace/webhooks). - [Recipes → Webhook server](/recipes/webhook-server). --- # Redemption Widget URL: https://www.bosonprotocol.io/docs/widgets/redemption > A drop-in flow for buyers to redeem, cancel, or dispute their committed exchanges — script-tag, iframe, or React. # Redemption Widget The Redemption Widget lets a buyer act on the vouchers (rNFTs) they already hold. It shows their exchanges in the protocol, lets them redeem, cancel before redemption, raise disputes after redemption, and (for sellers) revoke or complete exchanges. The widget detects what state each exchange is in and surfaces only the actions that make sense. Where it shines: when you sell vouchers on a different surface (your own storefront, the Boson dApp, an NFT marketplace, a metaverse, an in-game shop) but want one canonical place buyers come back to redeem. Drop the widget on your domain and your customers redeem there. The hosted build is at [`widgets.bosonprotocol.io`](https://widgets.bosonprotocol.io/) — under the hood it's a React app over `@bosonprotocol/react-kit`'s ``. ## Quickest embed: script + button ```html ``` The loader script finds the button by its `id`, mounts the modal, and handles wallet connect. The buyer signs in with whatever EIP-1193 wallet they prefer; the widget filters to their committed exchanges automatically. ### Optional Boson-branded styling ```html ``` ## Filtering and deep-linking | Attribute | Effect | | --- | --- | | `data-config-id` (required) | Deployment to query — see [Networks → ConfigIds matrix](/networks/configids). | | `data-account` | Restrict to a single buyer wallet (otherwise uses the connected wallet). | | `data-exchange-id` | Open directly to one exchange — buyer skips the selection screen. | | `data-seller-ids` (comma-list) or `data-seller-id` | Filter to exchanges from one or more sellers. | | `data-signatures` (comma-list) | Multi-seller domain-binding signatures — see [WooCommerce → connect](/build/sellers/woocommerce#connect-your-seller-account). | | `data-look-and-feel` | `"modal"` (default) or `"regular"` for inline rendering. | | `data-widget-action` | Force a starting screen — `SELECT_EXCHANGE` (default), `EXCHANGE_DETAILS`, `REDEEM_FORM`, `CANCEL_FORM`, `CONFIRM_REDEEM`. | | `data-exchange-state` | Pre-filter to `COMMITTED` / `REDEEMED` / `DISPUTED` / `COMPLETED`. | | `data-show-redemption-overview` | `"true"` (default) shows the overview pane on entry; `"false"` jumps straight to the action. | ## Iframe form (no JS loader) For sites that block third-party scripts: ```html ``` Every `data-*` attribute above maps 1:1 to a URL query param of the same name (without the `data-` prefix; camelCase: `exchangeId`, `widgetAction`, `lookAndFeel`, etc.). ## Programmatic open ```ts window.boson.openRedeem({ configId: "production-137-0", exchangeId: "80", widgetAction: "REDEEM_FORM", }) ``` ## Capturing delivery info on your server When a buyer redeems a physical product, the widget collects the delivery info. You have three options for where it goes: ### 1. XMTP to the seller (default) The widget posts the info as an XMTP message keyed to the seller's wallet. The seller's fulfilment system reads it from their XMTP inbox. Zero infrastructure on your end. Enable: `data-send-delivery-info-through-xmtp="true"`. ### 2. POST to your endpoint Your server receives the delivery info as a POST. Useful when you have an existing OMS / WMS / CRM. ```html ``` The widget POSTs `{ exchangeId, deliveryInfo, signature, … }`. Validate the signature server-side before processing. ### 3. postMessage to the parent window If the widget is embedded in your dApp and you want to handle delivery info entirely in the parent page: ```html data-target-origin="https://yourshop.example.com" ``` The widget calls `window.parent.postMessage({ exchangeId, deliveryInfo, eventTag }, targetOrigin)`. Useful for fully-custom checkout-style integrations. ## Lifecycle callbacks (backend) Three optional server endpoints fire at the redemption lifecycle: | Attribute | When it fires | | --- | --- | | `data-post-redemption-submitted-url` | Buyer's redeem transaction broadcast (not yet confirmed). | | `data-post-redemption-confirmed-url` | Redemption transaction confirmed on-chain. | | `data-post-delivery-info-url` | Delivery info collected (see above). | Each has a paired `*-headers` attribute (JSON-encoded) for auth headers. Treat these as fire-and-forget — the widget doesn't retry, so handlers must be idempotent (key on `exchangeId`). ## React Kit — when you want full control If you'd rather skip the hosted build: ```tsx import { RedemptionWidget } from "@bosonprotocol/react-kit" { /* … */ }} deliveryInfoHandler={(info) => { /* … */ }} redemptionSubmittedHandler={(tx) => { /* … */ }} redemptionConfirmedHandler={(tx) => { /* … */ }} // … same props as the URL query params, plus a few extras … /> ``` See the [widgets repo](https://github.com/bosonprotocol/widgets) for the full prop catalogue. ## Common gotchas - **Wrong chain.** The buyer's wallet must be on the chain that matches `configId`. The widget prompts a switch but some wallets reject silently. - **CSP.** Allow `widgets.bosonprotocol.io` in `script-src`, `frame-src`, and `connect-src` (the latter for postback URLs and XMTP). - **Multi-seller storefronts** need per-seller `signatures` to prove origin-binding — otherwise the widget refuses to render to protect buyers from spoofed sellers. - **Delivery info handlers are not retried** by the widget — your endpoint must be idempotent (dedupe on `exchangeId`). Pair with on-chain event listeners ([Build → Marketplace operators → Webhooks & events](/build/marketplace/webhooks)) as the backstop. ## Next - [Build → Buyers → Redeem a voucher](/build/buyers/redeem) — what `redeemVoucher` actually does. - [Build → Buyers → Raise a dispute](/build/buyers/raise-dispute). - [Widgets → Embedding methods](./embedding). - [Widgets → Postback URLs & deep links](./postback). --- # Styling & theming URL: https://www.bosonprotocol.io/docs/widgets/styling > Override CSS variables to match your brand. # Styling & theming The hosted widgets use CSS custom properties so you can override colors, fonts, and spacing from outside. ## Override via data attribute ```html ``` ## Override via CSS ```css :root { --boson-color-primary: #ff6f61; --boson-color-background: #0e0e10; --boson-font-family: "Inter", sans-serif; } ``` The widget reads from `:root` after mount. ## Dark mode Pass `data-theme="dark"`, or use a media query that flips your CSS variables on `prefers-color-scheme: dark`. ## Custom CSS For deeper customization (custom button styles, modal animations), embed via Zoid and style your wrapper. The widget's _inner_ DOM is in an iframe and not directly stylable. ## Next - [Configuration & ConfigIds](./configuration). - [Embedding methods](./embedding). --- # Reference URL: https://www.bosonprotocol.io/docs/reference > Canonical, mostly auto-generated, one-page-per-symbol reference for every Boson surface. # Reference The reference is the source of truth for symbols, signatures, and schemas. Most pages here are **auto-generated** from the underlying source — zod schemas, TypeChain factories, Solidity ABIs, GraphQL queries. The pipeline that produces them lives at [`scripts/docs-gen/`](https://github.com/bosonprotocol/docs.bosonprotocol.io/tree/main/scripts/docs-gen). Generated pages carry a banner: _"Generated from `@`. Edit the source, not this page."_ ## Sections - [Core SDK](./reference/core-sdk/core-sdk) — `@bosonprotocol/core-sdk` and its mixins. - [MCP tools](./reference/mcp-tools) — all ~56 tools, one page per tool. - [Contracts](./reference/contracts/facets) — Diamond facets, events, errors, structs. - [React Kit](./reference/react-kit) — components and hooks. - [x402b packages](./reference/x402/x402-core) — the seven `x402-*` packages. - [Metadata schemas](./reference/metadata) — `PRODUCT_V1`, `BUNDLE`, `BASE`. - [Subgraph queries](./reference/subgraph) — GraphQL schema and common queries. - [Widget URL params](./reference/widget-params) — every parameter accepted by hosted widgets. ## Conventions - **TypeScript types** are rendered with [Twoslash](https://twoslash.netlify.app); hover over identifiers in code blocks for inline type info. - **Solidity types** are rendered from NatSpec; click through to GitHub for the source. - **Zod schemas** are rendered as inline tables with type, required/optional, default. - **Errors** are listed per-page with code, when-thrown, and what-to-do. ## When the reference is wrong Open an issue or PR against the source-of-truth file, not the generated page. The pipeline rebuilds on every commit. ## Searching The site search is biased _down_ for Reference pages (so concept queries land on Concepts first). To search reference specifically, use the search input on this page or browse the sidebar. --- # Reference — Contracts: Custom errors URL: https://www.bosonprotocol.io/docs/reference/contracts/errors > Every custom error a Boson Diamond call can revert with. # Custom errors :::info **Generated from `boson-protocol-contracts/addresses/abis/polygon`. Edit the Solidity sources, not this page.** ::: When a Diamond call reverts, it carries a custom-error selector. The SDK's `parseError()` decodes it; here's the full list as a lookup. ## Catalogue (181 errors) | Error | Parameters | Defined in | | --- | --- | --- | | `AccessDenied` | `()` | `IBosonAccountHandler` | | `AddressesAndCalldataLengthMismatch` | `()` | `IBosonAccountHandler` | | `AdminOrAuthToken` | `()` | `IBosonAccountHandler` | | `AgentAddressMustBeUnique` | `()` | `IBosonAccountHandler` | | `AgentFeeAmountTooHigh` | `()` | `IBosonAccountHandler` | | `AlreadyInitialized` | `()` | `IBosonAccountHandler` | | `AmbiguousVoucherExpiry` | `()` | `IBosonAccountHandler` | | `AmountExceedsRangeOrNothingToBurn` | `()` | `IBosonAccountHandler` | | `ArrayLengthMismatch` | `()` | `IBosonAccountHandler` | | `AuthTokenMustBeUnique` | `()` | `IBosonAccountHandler` | | `BundleForTwinExists` | `()` | `IBosonAccountHandler` | | `BundleOfferMustBeUnique` | `()` | `IBosonAccountHandler` | | `BundleRequiresAtLeastOneTwinAndOneOffer` | `()` | `IBosonAccountHandler` | | `BundleTwinMustBeUnique` | `()` | `IBosonAccountHandler` | | `BuyerAddressMustBeUnique` | `()` | `IBosonAccountHandler` | | `CannotCommit` | `()` | `IBosonAccountHandler` | | `CannotRemoveDefaultRecipient` | `()` | `IBosonAccountHandler` | | `ClerkDeprecated` | `()` | `IBosonAccountHandler` | | `CloneCreationFailed` | `()` | `IBosonAccountHandler` | | `DirectInitializationNotAllowed` | `()` | `IBosonAccountHandler` | | `DisputeHasExpired` | `()` | `IBosonAccountHandler` | | `DisputePeriodHasElapsed` | `()` | `IBosonAccountHandler` | | `DisputePeriodNotElapsed` | `()` | `IBosonAccountHandler` | | `DisputeResolverAddressMustBeUnique` | `()` | `IBosonAccountHandler` | | `DisputeResolverFeeNotFound` | `()` | `IBosonAccountHandler` | | `DisputeStillValid` | `()` | `IBosonAccountHandler` | | `DRFeeMutualizerCannotProvideCoverage` | `()` | `IBosonAccountHandler` | | `DRUnsupportedFee` | `()` | `IBosonAccountHandler` | | `DuplicateDisputeResolverFees` | `()` | `IBosonAccountHandler` | | `EscalationNotAllowed` | `()` | `IBosonAccountHandler` | | `ExchangeAlreadyExists` | `()` | `IBosonAccountHandler` | | `ExchangeForOfferExists` | `()` | `IBosonAccountHandler` | | `ExchangeIdInReservedRange` | `()` | `IBosonAccountHandler` | | `ExchangeIsNotInAFinalState` | `()` | `IBosonAccountHandler` | | `ExternalCallFailed` | `()` | `IBosonAccountHandler` | | `FeeAmountTooHigh` | `()` | `IBosonAccountHandler` | | `FeeTableAssetNotSupported` | `()` | `IBosonAccountHandler` | | `FunctionNotAllowlisted` | `()` | `IBosonAccountHandler` | | `GroupHasCondition` | `()` | `IBosonAccountHandler` | | `GroupHasNoCondition` | `()` | `IBosonAccountHandler` | | `IncomingVoucherAlreadySet` | `()` | `IBosonAccountHandler` | | `InexistentAllowedSellersList` | `()` | `IBosonAccountHandler` | | `InexistentDisputeResolverFees` | `()` | `IBosonAccountHandler` | | `InsufficientAvailableFunds` | `()` | `IBosonAccountHandler` | | `InsufficientTwinSupplyToCoverBundleOffers` | `()` | `IBosonAccountHandler` | | `InsufficientValueReceived` | `()` | `IBosonAccountHandler` | | `InteractionNotAllowed` | `()` | `IBosonAccountHandler` | | `InvalidAddress` | `()` | `IBosonAccountHandler` | | `InvalidAgentFeePercentage` | `()` | `IBosonAccountHandler` | | `InvalidAmount` | `()` | `IBosonAccountHandler` | | `InvalidAmountToMint` | `()` | `IBosonAccountHandler` | | `InvalidAuthTokenType` | `()` | `IBosonAccountHandler` | | `InvalidBuyerOfferFields` | `()` | `IBosonAccountHandler` | | `InvalidBuyerPercent` | `()` | `IBosonAccountHandler` | | `InvalidCollectionIndex` | `()` | `IBosonAccountHandler` | | `InvalidConditionParameters` | `()` | `IBosonAccountHandler` | | `InvalidConduitAddress` | `()` | `IBosonAccountHandler` | | `InvalidDisputePeriod` | `()` | `IBosonAccountHandler` | | `InvalidDisputeResolver` | `()` | `IBosonAccountHandler` | | `InvalidDisputeTimeout` | `()` | `IBosonAccountHandler` | | `InvalidEscalationPeriod` | `()` | `IBosonAccountHandler` | | `InvalidFeePercentage` | `()` | `IBosonAccountHandler` | | `InvalidFunctionName` | `()` | `IBosonAccountHandler` | | `InvalidOffer` | `()` | `IBosonAccountHandler` | | `InvalidOfferCreator` | `()` | `IBosonAccountHandler` | | `InvalidOfferPenalty` | `()` | `IBosonAccountHandler` | | `InvalidOfferPeriod` | `()` | `IBosonAccountHandler` | | `InvalidPriceDiscovery` | `()` | `IBosonAccountHandler` | | `InvalidPriceDiscoveryPrice` | `()` | `IBosonAccountHandler` | | `InvalidPriceType` | `()` | `IBosonAccountHandler` | | `InvalidQuantityAvailable` | `()` | `IBosonAccountHandler` | | `InvalidRangeLength` | `()` | `IBosonAccountHandler` | | `InvalidRangeStart` | `()` | `IBosonAccountHandler` | | `InvalidRedemptionPeriod` | `()` | `IBosonAccountHandler` | | `InvalidResolutionPeriod` | `()` | `IBosonAccountHandler` | | `InvalidRoyaltyFee` | `()` | `IBosonAccountHandler` | | `InvalidRoyaltyInfo` | `()` | `IBosonAccountHandler` | | `InvalidRoyaltyPercentage` | `()` | `IBosonAccountHandler` | | `InvalidRoyaltyRecipient` | `()` | `IBosonAccountHandler` | | `InvalidRoyaltyRecipientId` | `()` | `IBosonAccountHandler` | | `InvalidSellerOfferFields` | `()` | `IBosonAccountHandler` | | `InvalidSignature` | `()` | `IBosonAccountHandler` | | `InvalidState` | `()` | `IBosonAccountHandler` | | `InvalidSupplyAvailable` | `()` | `IBosonAccountHandler` | | `InvalidTargeDisputeState` | `()` | `IBosonAccountHandler` | | `InvalidTargeExchangeState` | `()` | `IBosonAccountHandler` | | `InvalidToAddress` | `()` | `IBosonAccountHandler` | | `InvalidTokenAddress` | `()` | `IBosonAccountHandler` | | `InvalidTokenId` | `()` | `IBosonAccountHandler` | | `InvalidTwinProperty` | `()` | `IBosonAccountHandler` | | `InvalidTwinTokenRange` | `()` | `IBosonAccountHandler` | | `MaxCommitsReached` | `()` | `IBosonAccountHandler` | | `MustBeActive` | `()` | `IBosonAccountHandler` | | `NativeNotAllowed` | `()` | `IBosonAccountHandler` | | `NativeWrongAddress` | `()` | `IBosonAccountHandler` | | `NativeWrongAmount` | `()` | `IBosonAccountHandler` | | `NegativePriceNotAllowed` | `()` | `IBosonAccountHandler` | | `NonAscendingOrder` | `()` | `IBosonAccountHandler` | | `NonceUsedAlready` | `()` | `IBosonAccountHandler` | | `NoPendingUpdateForAccount` | `()` | `IBosonAccountHandler` | | `NoReservedRangeForOffer` | `()` | `IBosonAccountHandler` | | `NoSilentMintAllowed` | `()` | `IBosonAccountHandler` | | `NoSuchAgent` | `()` | `IBosonAccountHandler` | | `NoSuchBundle` | `()` | `IBosonAccountHandler` | | `NoSuchBuyer` | `()` | `IBosonAccountHandler` | | `NoSuchCollection` | `()` | `IBosonAccountHandler` | | `NoSuchDisputeResolver` | `()` | `IBosonAccountHandler` | | `NoSuchEntity` | `()` | `IBosonAccountHandler` | | `NoSuchExchange` | `()` | `IBosonAccountHandler` | | `NoSuchGroup` | `()` | `IBosonAccountHandler` | | `NoSuchOffer` | `()` | `IBosonAccountHandler` | | `NoSuchSeller` | `()` | `IBosonAccountHandler` | | `NoSuchTwin` | `()` | `IBosonAccountHandler` | | `NotAdmin` | `()` | `IBosonAccountHandler` | | `NotAdminAndAssistant` | `()` | `IBosonAccountHandler` | | `NotAgentWallet` | `()` | `IBosonAccountHandler` | | `NotAssistant` | `()` | `IBosonAccountHandler` | | `NotAuthorized` | `()` | `IBosonAccountHandler` | | `NotBuyerOrSeller` | `()` | `IBosonAccountHandler` | | `NotBuyerWallet` | `()` | `IBosonAccountHandler` | | `NotDisputeResolverAssistant` | `()` | `IBosonAccountHandler` | | `NothingToWithdraw` | `()` | `IBosonAccountHandler` | | `NothingUpdated` | `()` | `IBosonAccountHandler` | | `NotOfferCreator` | `()` | `IBosonAccountHandler` | | `NotPaused` | `()` | `IBosonAccountHandler` | | `NoTransferApproved` | `()` | `IBosonAccountHandler` | | `NotVoucherHolder` | `()` | `IBosonAccountHandler` | | `NoUpdateApplied` | `()` | `IBosonAccountHandler` | | `OfferExpiredOrVoided` | `()` | `IBosonAccountHandler` | | `OfferHasBeenVoided` | `()` | `IBosonAccountHandler` | | `OfferHasExpired` | `()` | `IBosonAccountHandler` | | `OfferMustBeActive` | `()` | `IBosonAccountHandler` | | `OfferMustBeUnique` | `()` | `IBosonAccountHandler` | | `OfferNotAvailable` | `()` | `IBosonAccountHandler` | | `OfferNotInBundle` | `()` | `IBosonAccountHandler` | | `OfferNotInGroup` | `()` | `IBosonAccountHandler` | | `OfferRangeAlreadyReserved` | `()` | `IBosonAccountHandler` | | `OfferSoldOut` | `()` | `IBosonAccountHandler` | | `OfferStillValid` | `()` | `IBosonAccountHandler` | | `PriceDoesNotCoverPenalty` | `()` | `IBosonAccountHandler` | | `PriceMismatch` | `()` | `IBosonAccountHandler` | | `ProtocolInitializationFailed` | `()` | `IBosonAccountHandler` | | `RecipientNotUnique` | `()` | `IBosonAccountHandler` | | `ReentrancyGuard` | `()` | `IBosonAccountHandler` | | `RegionPaused` | `(uint8 region)` | `IBosonAccountHandler` | | `RoyaltyRecipientIdsNotSorted` | `()` | `IBosonAccountHandler` | | `SameMutualizerAddress` | `()` | `IBosonAccountHandler` | | `SellerAddressMustBeUnique` | `()` | `IBosonAccountHandler` | | `SellerAlreadyApproved` | `()` | `IBosonAccountHandler` | | `SellerNotApproved` | `()` | `IBosonAccountHandler` | | `SellerParametersNotAllowed` | `()` | `IBosonAccountHandler` | | `SellerSaltNotUnique` | `()` | `IBosonAccountHandler` | | `SignatureValidationFailed` | `()` | `IBosonAccountHandler` | | `TokenAmountMismatch` | `()` | `IBosonAccountHandler` | | `TokenIdMandatory` | `()` | `IBosonAccountHandler` | | `TokenIdMismatch` | `()` | `IBosonAccountHandler` | | `TokenIdNotInConditionRange` | `()` | `IBosonAccountHandler` | | `TokenIdNotSet` | `()` | `IBosonAccountHandler` | | `TokenTransferFailed` | `()` | `IBosonAccountHandler` | | `TotalFeeExceedsLimit` | `()` | `IBosonAccountHandler` | | `TwinNotInBundle` | `()` | `IBosonAccountHandler` | | `TwinsAlreadyExist` | `()` | `IBosonAccountHandler` | | `TwinTransferUnsuccessful` | `()` | `IBosonAccountHandler` | | `UnauthorizedCallerUpdate` | `()` | `IBosonAccountHandler` | | `UnexpectedDataReturned` | `(bytes data)` | `IBosonAccountHandler` | | `UnexpectedERC721Received` | `()` | `IBosonAccountHandler` | | `UnsupportedMutualizer` | `()` | `IBosonAccountHandler` | | `UnsupportedToken` | `()` | `IBosonAccountHandler` | | `ValueZeroNotAllowed` | `()` | `IBosonAccountHandler` | | `VersionMustBeSet` | `()` | `IBosonAccountHandler` | | `VoucherExtensionNotValid` | `()` | `IBosonAccountHandler` | | `VoucherHasExpired` | `()` | `IBosonAccountHandler` | | `VoucherNotReceived` | `()` | `IBosonAccountHandler` | | `VoucherNotRedeemable` | `()` | `IBosonAccountHandler` | | `VoucherNotTransferred` | `()` | `IBosonAccountHandler` | | `VoucherStillValid` | `()` | `IBosonAccountHandler` | | `VoucherTransferNotAllowed` | `()` | `IBosonAccountHandler` | | `WalletOwnsVouchers` | `()` | `IBosonAccountHandler` | | `WrongCurrentVersion` | `()` | `IBosonAccountHandler` | | `WrongDefaultRecipient` | `()` | `IBosonAccountHandler` | | `ZeroDepositNotAllowed` | `()` | `IBosonAccountHandler` | ## How to decode ```ts twoslash // @noErrors import offerAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonOfferHandler.json" import exchangeAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonExchangeHandler.json" import disputeAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonDisputeHandler.json" import fundsAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonFundsHandler.json" import priceAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonPriceDiscoveryHandler.json" import { ethers } from "ethers" const iface = new ethers.utils.Interface([...offerAbi, ...exchangeAbi, ...disputeAbi, ...fundsAbi, ...priceAbi]) try { iface.parseError(err.data ?? err.error?.data) } catch { /* not a known custom error */ } ``` Or higher-level: ```ts twoslash // @noErrors const parsed = sdk.parseError(err) // → { code: "OfferVoided", args: { offerId: "123" } } ``` ## Source - ABI artifacts: [`boson-protocol-contracts/addresses/abis/`](https://github.com/bosonprotocol/boson-protocol-contracts/tree/main/addresses/abis) - Errors lib: [`BosonErrors.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/protocol/libs/BosonErrors.sol) ## Related - [Troubleshooting → Reverts & error codes](/troubleshooting/reverts) — top causes and fixes. --- # Reference — Contracts: Events URL: https://www.bosonprotocol.io/docs/reference/contracts/events > Every event emitted by the Boson Diamond. # Events :::info **Generated from `boson-protocol-contracts/addresses/abis/polygon`. Edit the Solidity sources, not this page.** ::: The Diamond emits all events at the same contract address (the proxy). Decode with the merged ABI from `@bosonprotocol/common`, not a single-facet ABI. ## Catalogue (85 events) ### `AccessControllerAddressChanged` _From_ `IBosonConfigHandler` ```solidity event AccessControllerAddressChanged(address (indexed) accessControllerAddress, address (indexed) executedBy); ``` ### `AgentCreated` _From_ `IBosonAccountHandler` ```solidity event AgentCreated(uint256 (indexed) agentId, (uint256, uint256, address, bool) agent, address (indexed) executedBy); ``` ### `AgentUpdated` _From_ `IBosonAccountHandler` ```solidity event AgentUpdated(uint256 (indexed) agentId, (uint256, uint256, address, bool) agent, address (indexed) executedBy); ``` ### `AllowedSellersAdded` _From_ `IBosonAccountHandler` ```solidity event AllowedSellersAdded(uint256 (indexed) disputeResolverId, uint256[] addedSellers, address (indexed) executedBy); ``` ### `AllowedSellersRemoved` _From_ `IBosonAccountHandler` ```solidity event AllowedSellersRemoved(uint256 (indexed) disputeResolverId, uint256[] removedSellers, address (indexed) executedBy); ``` ### `AuthTokenContractChanged` _From_ `IBosonConfigHandler` ```solidity event AuthTokenContractChanged(uint8 (indexed) authTokenType, address (indexed) authTokenContract, address (indexed) executedBy); ``` ### `BeaconProxyAddressChanged` _From_ `IBosonConfigHandler` ```solidity event BeaconProxyAddressChanged(address (indexed) beaconProxyAddress, address (indexed) executedBy); ``` ### `BundleCreated` _From_ `IBosonBundleHandler` ```solidity event BundleCreated(uint256 (indexed) bundleId, uint256 (indexed) sellerId, (uint256, uint256, uint256[], uint256[]) bundle, address (indexed) executedBy); ``` ### `BuyerCommitted` _From_ `IBosonExchangeCommitHandler` ```solidity event BuyerCommitted(uint256 (indexed) offerId, uint256 (indexed) buyerId, uint256 (indexed) exchangeId, (uint256, uint256, uint256, uint256, uint8, address) exchange, (uint256, uint256, uint256, bool) voucher, address executedBy); ``` ### `BuyerCreated` _From_ `IBosonAccountHandler` ```solidity event BuyerCreated(uint256 (indexed) buyerId, (uint256, address, bool) buyer, address (indexed) executedBy); ``` ### `BuyerEscalationFeePercentageChanged` _From_ `IBosonConfigHandler` ```solidity event BuyerEscalationFeePercentageChanged(uint256 buyerEscalationFeePercentage, address (indexed) executedBy); ``` ### `BuyerInitiatedOfferSetSellerParams` _From_ `IBosonExchangeCommitHandler` ```solidity event BuyerInitiatedOfferSetSellerParams(uint256 (indexed) offerId, uint256 (indexed) sellerId, (uint256, (address[], uint256[]), address) sellerParams, address executedBy); ``` ### `BuyerUpdated` _From_ `IBosonAccountHandler` ```solidity event BuyerUpdated(uint256 (indexed) buyerId, (uint256, address, bool) buyer, address (indexed) executedBy); ``` ### `CollectionCreated` _From_ `IBosonAccountHandler` ```solidity event CollectionCreated(uint256 (indexed) sellerId, uint256 collectionIndex, address collectionAddress, string (indexed) externalId, address (indexed) executedBy); ``` ### `ConditionalCommitAuthorized` _From_ `IBosonExchangeCommitHandler` ```solidity event ConditionalCommitAuthorized(uint256 (indexed) offerId, uint8 gating, address (indexed) buyerAddress, uint256 (indexed) tokenId, uint256 commitCount, uint256 maxCommits); ``` ### `DisputeDecided` _From_ `IBosonDisputeHandler` ```solidity event DisputeDecided(uint256 (indexed) exchangeId, uint256 _buyerPercent, address (indexed) executedBy); ``` ### `DisputeEscalated` _From_ `IBosonDisputeHandler` ```solidity event DisputeEscalated(uint256 (indexed) exchangeId, uint256 (indexed) disputeResolverId, address (indexed) executedBy); ``` ### `DisputeExpired` _From_ `IBosonDisputeHandler` ```solidity event DisputeExpired(uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `DisputeRaised` _From_ `IBosonDisputeHandler` ```solidity event DisputeRaised(uint256 (indexed) exchangeId, uint256 (indexed) buyerId, uint256 (indexed) sellerId, address executedBy); ``` ### `DisputeResolved` _From_ `IBosonDisputeHandler` ```solidity event DisputeResolved(uint256 (indexed) exchangeId, uint256 _buyerPercent, address (indexed) executedBy); ``` ### `DisputeResolverCreated` _From_ `IBosonAccountHandler` ```solidity event DisputeResolverCreated(uint256 (indexed) disputeResolverId, (uint256, uint256, address, address, address, address, string, bool) disputeResolver, (address, string, uint256)[] disputeResolverFees, uint256[] sellerAllowList, address (indexed) executedBy); ``` ### `DisputeResolverFeesAdded` _From_ `IBosonAccountHandler` ```solidity event DisputeResolverFeesAdded(uint256 (indexed) disputeResolverId, (address, string, uint256)[] disputeResolverFees, address (indexed) executedBy); ``` ### `DisputeResolverFeesRemoved` _From_ `IBosonAccountHandler` ```solidity event DisputeResolverFeesRemoved(uint256 (indexed) disputeResolverId, address[] feeTokensRemoved, address (indexed) executedBy); ``` ### `DisputeResolverUpdateApplied` _From_ `IBosonAccountHandler` ```solidity event DisputeResolverUpdateApplied(uint256 (indexed) disputeResolverId, (uint256, uint256, address, address, address, address, string, bool) disputeResolver, (uint256, uint256, address, address, address, address, string, bool) pendingDisputeResolver, address (indexed) executedBy); ``` ### `DisputeResolverUpdatePending` _From_ `IBosonAccountHandler` ```solidity event DisputeResolverUpdatePending(uint256 (indexed) disputeResolverId, (uint256, uint256, address, address, address, address, string, bool) pendingDisputeResolver, address (indexed) executedBy); ``` ### `DisputeRetracted` _From_ `IBosonDisputeHandler` ```solidity event DisputeRetracted(uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `DisputeTimeoutExtended` _From_ `IBosonDisputeHandler` ```solidity event DisputeTimeoutExtended(uint256 (indexed) exchangeId, uint256 newDisputeTimeout, address (indexed) executedBy); ``` ### `DRFeeRequested` _From_ `IBosonDisputeHandler` ```solidity event DRFeeRequested(uint256 (indexed) exchangeId, address (indexed) tokenAddress, uint256 feeAmount, address (indexed) mutualizerAddress, address executedBy); ``` ### `DRFeeReturned` _From_ `IBosonDisputeHandler` ```solidity event DRFeeReturned(uint256 (indexed) exchangeId, address (indexed) tokenAddress, uint256 returnAmount, address (indexed) mutualizerAddress, address executedBy); ``` ### `DRFeeReturnFailed` _From_ `IBosonDisputeHandler` ```solidity event DRFeeReturnFailed(uint256 (indexed) exchangeId, address (indexed) tokenAddress, uint256 returnAmount, address (indexed) mutualizerAddress, address executedBy); ``` ### `EscalatedDisputeExpired` _From_ `IBosonDisputeHandler` ```solidity event EscalatedDisputeExpired(uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `EscalatedDisputeRefused` _From_ `IBosonDisputeHandler` ```solidity event EscalatedDisputeRefused(uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `ExchangeCompleted` _From_ `IBosonExchangeCommitHandler` ```solidity event ExchangeCompleted(uint256 (indexed) offerId, uint256 (indexed) buyerId, uint256 (indexed) exchangeId, address executedBy); ``` ### `FeeTableUpdated` _From_ `IBosonConfigHandler` ```solidity event FeeTableUpdated(address (indexed) token, uint256[] priceRanges, uint256[] feePercentages, address (indexed) executedBy); ``` ### `FunctionsAllowlisted` _From_ `IBosonMetaTransactionsHandler` ```solidity event FunctionsAllowlisted(bytes32[] functionNameHashes, bool isAllowlisted, address (indexed) executedBy); ``` ### `FundsDeposited` _From_ `IBosonDisputeHandler` ```solidity event FundsDeposited(uint256 (indexed) entityId, address (indexed) executedBy, address (indexed) tokenAddress, uint256 amount); ``` ### `FundsEncumbered` _From_ `IBosonDisputeHandler` ```solidity event FundsEncumbered(uint256 (indexed) entityId, address (indexed) exchangeToken, uint256 amount, address (indexed) executedBy); ``` ### `FundsReleased` _From_ `IBosonDisputeHandler` ```solidity event FundsReleased(uint256 (indexed) exchangeId, uint256 (indexed) entityId, address (indexed) exchangeToken, uint256 amount, address executedBy); ``` ### `FundsWithdrawn` _From_ `IBosonDisputeHandler` ```solidity event FundsWithdrawn(uint256 (indexed) sellerId, address (indexed) withdrawnTo, address (indexed) tokenAddress, uint256 amount, address executedBy); ``` ### `GroupCreated` _From_ `IBosonGroupHandler` ```solidity event GroupCreated(uint256 (indexed) groupId, uint256 (indexed) sellerId, (uint256, uint256, uint256[]) group, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) condition, address (indexed) executedBy); ``` ### `GroupUpdated` _From_ `IBosonGroupHandler` ```solidity event GroupUpdated(uint256 (indexed) groupId, uint256 (indexed) sellerId, (uint256, uint256, uint256[]) group, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) condition, address (indexed) executedBy); ``` ### `MaxEscalationResponsePeriodChanged` _From_ `IBosonConfigHandler` ```solidity event MaxEscalationResponsePeriodChanged(uint256 maxEscalationResponsePeriod, address (indexed) executedBy); ``` ### `MaxPremintedVouchersChanged` _From_ `IBosonConfigHandler` ```solidity event MaxPremintedVouchersChanged(uint256 maxPremintedVouchers, address (indexed) executedBy); ``` ### `MaxResolutionPeriodChanged` _From_ `IBosonConfigHandler` ```solidity event MaxResolutionPeriodChanged(uint256 maxResolutionPeriod, address (indexed) executedBy); ``` ### `MaxRoyaltyPercentageChanged` _From_ `IBosonConfigHandler` ```solidity event MaxRoyaltyPercentageChanged(uint16 maxRoyaltyPercentage, address (indexed) executedBy); ``` ### `MaxTotalOfferFeePercentageChanged` _From_ `IBosonConfigHandler` ```solidity event MaxTotalOfferFeePercentageChanged(uint16 maxTotalOfferFeePercentage, address (indexed) executedBy); ``` ### `MetaTransactionExecuted` _From_ `IBosonMetaTransactionsHandler` ```solidity event MetaTransactionExecuted(address (indexed) userAddress, address (indexed) relayerAddress, string (indexed) functionName, uint256 nonce); ``` ### `MinDisputePeriodChanged` _From_ `IBosonConfigHandler` ```solidity event MinDisputePeriodChanged(uint256 minDisputePeriod, address (indexed) executedBy); ``` ### `MinResolutionPeriodChanged` _From_ `IBosonConfigHandler` ```solidity event MinResolutionPeriodChanged(uint256 minResolutionPeriod, address (indexed) executedBy); ``` ### `MutualizerGasStipendChanged` _From_ `IBosonConfigHandler` ```solidity event MutualizerGasStipendChanged(uint256 mutualizerGasStipend, address (indexed) executedBy); ``` ### `NonListedOfferVoided` _From_ `IBosonOfferHandler` ```solidity event NonListedOfferVoided(bytes32 offerHash, uint256 (indexed) offererId, address (indexed) executedBy); ``` ### `OfferCreated` _From_ `IBosonOfferHandler` ```solidity event OfferCreated(uint256 (indexed) offerId, uint256 (indexed) sellerId, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) offer, (uint256, uint256, uint256, uint256) offerDates, (uint256, uint256, uint256) offerDurations, (uint256, uint256, uint256, uint256, address) disputeResolutionTerms, (uint256, uint256) offerFees, uint256 (indexed) agentId, address executedBy); ``` ### `OfferExtended` _From_ `IBosonOfferHandler` ```solidity event OfferExtended(uint256 (indexed) offerId, uint256 (indexed) sellerId, uint256 validUntilDate, address (indexed) executedBy); ``` ### `OfferMutualizerUpdated` _From_ `IBosonOfferHandler` ```solidity event OfferMutualizerUpdated(uint256 (indexed) offerId, uint256 (indexed) sellerId, address (indexed) newMutualizer, address executedBy); ``` ### `OfferRoyaltyInfoUpdated` _From_ `IBosonOfferHandler` ```solidity event OfferRoyaltyInfoUpdated(uint256 (indexed) offerId, uint256 (indexed) sellerId, (address[], uint256[]) royaltyInfo, address (indexed) executedBy); ``` ### `OfferVoided` _From_ `IBosonOfferHandler` ```solidity event OfferVoided(uint256 (indexed) offerId, uint256 (indexed) creatorId, address (indexed) executedBy); ``` ### `PriceDiscoveryAddressChanged` _From_ `IBosonConfigHandler` ```solidity event PriceDiscoveryAddressChanged(address (indexed) priceDiscoveryAddress, address (indexed) executedBy); ``` ### `ProtocolAddressChanged` _From_ `IClientExternalAddressesEvents` ```solidity event ProtocolAddressChanged(address (indexed) protocol, address (indexed) executedBy); ``` ### `ProtocolFeeCollected` _From_ `IBosonDisputeHandler` ```solidity event ProtocolFeeCollected(uint256 (indexed) exchangeId, address (indexed) exchangeToken, uint256 amount, address (indexed) executedBy); ``` ### `ProtocolFeeFlatBosonChanged` _From_ `IBosonConfigHandler` ```solidity event ProtocolFeeFlatBosonChanged(uint256 feeFlatBoson, address (indexed) executedBy); ``` ### `ProtocolFeePercentageChanged` _From_ `IBosonConfigHandler` ```solidity event ProtocolFeePercentageChanged(uint256 feePercentage, address (indexed) executedBy); ``` ### `ProtocolInitialized` _From_ `IBosonProtocolInitializationHandler` ```solidity event ProtocolInitialized(string version); ``` ### `ProtocolPaused` _From_ `IBosonPauseHandler` ```solidity event ProtocolPaused(uint8[] regions, address executedBy); ``` ### `ProtocolUnpaused` _From_ `IBosonPauseHandler` ```solidity event ProtocolUnpaused(uint8[] regions, address executedBy); ``` ### `RangeReserved` _From_ `IBosonOfferHandler` ```solidity event RangeReserved(uint256 (indexed) offerId, uint256 (indexed) sellerId, uint256 startExchangeId, uint256 endExchangeId, address owner, address (indexed) executedBy); ``` ### `RoyaltyRecipientsChanged` _From_ `IBosonAccountHandler` ```solidity event RoyaltyRecipientsChanged(uint256 (indexed) sellerId, (address, uint256)[] royaltyRecipients, address (indexed) executedBy); ``` ### `SellerCommitted` _From_ `IBosonExchangeCommitHandler` ```solidity event SellerCommitted(uint256 (indexed) offerId, uint256 (indexed) sellerId, uint256 (indexed) exchangeId, (uint256, uint256, uint256, uint256, uint8, address) exchange, (uint256, uint256, uint256, bool) voucher, address executedBy); ``` ### `SellerCreated` _From_ `IBosonAccountHandler` ```solidity event SellerCreated(uint256 (indexed) sellerId, (uint256, address, address, address, address, bool, string) seller, address voucherCloneAddress, (uint256, uint8) authToken, address (indexed) executedBy); ``` ### `SellerUpdateApplied` _From_ `IBosonAccountHandler` ```solidity event SellerUpdateApplied(uint256 (indexed) sellerId, (uint256, address, address, address, address, bool, string) seller, (uint256, address, address, address, address, bool, string) pendingSeller, (uint256, uint8) authToken, (uint256, uint8) pendingAuthToken, address (indexed) executedBy); ``` ### `SellerUpdatePending` _From_ `IBosonAccountHandler` ```solidity event SellerUpdatePending(uint256 (indexed) sellerId, (uint256, address, address, address, address, bool, string) pendingSeller, (uint256, uint8) pendingAuthToken, address (indexed) executedBy); ``` ### `TokenAddressChanged` _From_ `IBosonConfigHandler` ```solidity event TokenAddressChanged(address (indexed) tokenAddress, address (indexed) executedBy); ``` ### `TreasuryAddressChanged` _From_ `IBosonConfigHandler` ```solidity event TreasuryAddressChanged(address (indexed) treasuryAddress, address (indexed) executedBy); ``` ### `TwinCreated` _From_ `IBosonExchangeHandler` ```solidity event TwinCreated(uint256 (indexed) twinId, uint256 (indexed) sellerId, (uint256, uint256, uint256, uint256, uint256, address, uint8) twin, address (indexed) executedBy); ``` ### `TwinDeleted` _From_ `IBosonExchangeHandler` ```solidity event TwinDeleted(uint256 (indexed) twinId, uint256 (indexed) sellerId, address (indexed) executedBy); ``` ### `TwinTransferFailed` _From_ `IBosonExchangeHandler` ```solidity event TwinTransferFailed(uint256 (indexed) twinId, address (indexed) tokenAddress, uint256 (indexed) exchangeId, uint256 tokenId, uint256 amount, address executedBy); ``` ### `TwinTransferred` _From_ `IBosonExchangeHandler` ```solidity event TwinTransferred(uint256 (indexed) twinId, address (indexed) tokenAddress, uint256 (indexed) exchangeId, uint256 tokenId, uint256 amount, address executedBy); ``` ### `TwinTransferSkipped` _From_ `IBosonExchangeHandler` ```solidity event TwinTransferSkipped(uint256 (indexed) exchangeId, uint256 twinCount, address (indexed) executedBy); ``` ### `Upgraded` _From_ `IClientExternalAddressesEvents` ```solidity event Upgraded(address (indexed) implementation, address (indexed) executedBy); ``` ### `VoucherBeaconAddressChanged` _From_ `IBosonConfigHandler` ```solidity event VoucherBeaconAddressChanged(address (indexed) voucherBeaconAddress, address (indexed) executedBy); ``` ### `VoucherCanceled` _From_ `IBosonExchangeCommitHandler` ```solidity event VoucherCanceled(uint256 (indexed) offerId, uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `VoucherExpired` _From_ `IBosonExchangeCommitHandler` ```solidity event VoucherExpired(uint256 (indexed) offerId, uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `VoucherExtended` _From_ `IBosonExchangeCommitHandler` ```solidity event VoucherExtended(uint256 (indexed) offerId, uint256 (indexed) exchangeId, uint256 validUntil, address (indexed) executedBy); ``` ### `VoucherRedeemed` _From_ `IBosonExchangeCommitHandler` ```solidity event VoucherRedeemed(uint256 (indexed) offerId, uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `VoucherRevoked` _From_ `IBosonExchangeCommitHandler` ```solidity event VoucherRevoked(uint256 (indexed) offerId, uint256 (indexed) exchangeId, address (indexed) executedBy); ``` ### `VoucherTransferred` _From_ `IBosonExchangeCommitHandler` ```solidity event VoucherTransferred(uint256 (indexed) offerId, uint256 (indexed) exchangeId, uint256 (indexed) newBuyerId, address executedBy); ``` ## Source - ABI artifacts: [`boson-protocol-contracts/addresses/abis/`](https://github.com/bosonprotocol/boson-protocol-contracts/tree/main/addresses/abis) - Event interfaces: [`contracts/interfaces/events/`](https://github.com/bosonprotocol/boson-protocol-contracts/tree/main/contracts/interfaces/events) ## Related - [Concepts → Eventing & indexing](/concepts/eventing) — how to subscribe. - [Build → Marketplace operators → Webhooks & events](/build/marketplace/webhooks). - [Recipes → Webhook server](/recipes/webhook-server). --- # Reference — Contracts: Diamond facets URL: https://www.bosonprotocol.io/docs/reference/contracts/facets > Handler facet interfaces — every external function the Diamond exposes. # Diamond facets :::info **Generated from `boson-protocol-contracts/addresses/abis/polygon`. Edit the Solidity sources, not this page.** ::: The Diamond is an [EIP-2535](https://eips.ethereum.org/EIPS/eip-2535) proxy. Each handler facet implements one domain. All functions are reachable through the single Diamond address — cast it to whichever interface you need. ## Summary | Facet | Functions | Events | Errors | | --- | --- | --- | --- | | `IBosonAccountHandler` | 34 | 16 | 181 | | `IBosonAgentHandler` | 3 | 0 | 0 | | `IBosonBundleHandler` | 5 | 1 | 181 | | `IBosonBuyerHandler` | 3 | 0 | 0 | | `IBosonConfigHandler` | 38 | 19 | 181 | | `IBosonDisputeHandler` | 14 | 17 | 181 | | `IBosonDisputeResolverHandler` | 10 | 0 | 0 | | `IBosonExchangeCommitHandler` | 6 | 19 | 181 | | `IBosonExchangeHandler` | 15 | 24 | 181 | | `IBosonExchangeManagementHandler` | 15 | 16 | 181 | | `IBosonFundsHandler` | 7 | 8 | 181 | | `IBosonGroupHandler` | 6 | 2 | 181 | | `IBosonMetaTransactionsHandler` | 5 | 2 | 181 | | `IBosonOfferHandler` | 17 | 7 | 181 | | `IBosonOrchestrationHandler` | 17 | 31 | 181 | | `IBosonPauseHandler` | 3 | 2 | 181 | | `IBosonPriceDiscoveryHandler` | 1 | 24 | 181 | | `IBosonProtocolInitializationHandler` | 1 | 20 | 181 | | `IBosonSellerHandler` | 17 | 0 | 0 | | `IBosonSequentialCommitHandler` | 1 | 19 | 181 | | `IBosonTwinHandler` | 4 | 5 | 181 | ## Details ### `IBosonAccountHandler` _Source: [`contracts/interfaces/handlers/IBosonAccountHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonAccountHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `addFeesToDisputeResolver` | `(uint256 _disputeResolverId, (address, string, uint256)[] _disputeResolverFees)` | — | `nonpayable` | | `addRoyaltyRecipients` | `(uint256 _sellerId, (address, uint256)[] _royaltyRecipients)` | — | `nonpayable` | | `addSellersToAllowList` | `(uint256 _disputeResolverId, uint256[] _sellerAllowList)` | — | `nonpayable` | | `areSellersAllowed` | `(uint256 _disputeResolverId, uint256[] _sellerIds)` | `(bool[])` | `view` | | `calculateCollectionAddress` | `(uint256 _sellerId, bytes32 _collectionSalt)` | `(address, bool)` | `view` | | `createAgent` | `((uint256, uint256, address, bool) _agent)` | — | `nonpayable` | | `createBuyer` | `((uint256, address, bool) _buyer)` | — | `nonpayable` | | `createDisputeResolver` | `((uint256, uint256, address, address, address, address, string, bool) _disputeResolver, (address, string, uint256)[] _disputeResolverFees, uint256[] _sellerAllowList)` | — | `nonpayable` | | `createNewCollection` | `(string _externalId, (string, uint256, bytes32) _voucherInitValues)` | — | `nonpayable` | | `createSeller` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues)` | — | `nonpayable` | | `getAgent` | `(uint256 _agentId)` | `(bool, (uint256, uint256, address, bool))` | `view` | | `getBuyer` | `(uint256 _buyerId)` | `(bool, (uint256, address, bool))` | `view` | | `getDisputeResolver` | `(uint256 _disputeResolverId)` | `(bool, (uint256, uint256, address, address, address, address, string, bool), (address, string, uint256)[], uint256[])` | `view` | | `getDisputeResolverByAddress` | `(address _associatedAddress)` | `(bool, (uint256, uint256, address, address, address, address, string, bool), (address, string, uint256)[], uint256[])` | `view` | | `getNextAccountId` | `()` | `(uint256)` | `view` | | `getRoyaltyRecipients` | `(uint256 _sellerId)` | `((address, uint256)[])` | `view` | | `getSeller` | `(uint256 _sellerId)` | `(bool, (uint256, address, address, address, address, bool, string), (uint256, uint8))` | `view` | | `getSellerByAddress` | `(address _associatedAddress)` | `(bool, (uint256, address, address, address, address, bool, string), (uint256, uint8))` | `view` | | `getSellerByAuthToken` | `((uint256, uint8) _associatedAuthToken)` | `(bool, (uint256, address, address, address, address, bool, string), (uint256, uint8))` | `view` | | `getSellersCollectionCount` | `(uint256 _sellerId)` | `(uint256)` | `view` | | `getSellersCollections` | `(uint256 _sellerId)` | `(address, (address, string)[])` | `view` | | `getSellersCollectionsPaginated` | `(uint256 _sellerId, uint256 _limit, uint256 _offset)` | `(address, (address, string)[])` | `view` | | `isSellerSaltAvailable` | `(address _adminAddres, bytes32 _salt)` | `(bool)` | `view` | | `optInToDisputeResolverUpdate` | `(uint256 _disputeResolverId, uint8[] _fieldsToUpdate)` | — | `nonpayable` | | `optInToSellerUpdate` | `(uint256 _sellerId, uint8[] _fieldsToUpdate)` | — | `nonpayable` | | `removeFeesFromDisputeResolver` | `(uint256 _disputeResolverId, address[] _feeTokenAddresses)` | — | `nonpayable` | | `removeRoyaltyRecipients` | `(uint256 _sellerId, uint256[] _royaltyRecipientIds)` | — | `nonpayable` | | `removeSellersFromAllowList` | `(uint256 _disputeResolverId, uint256[] _sellerAllowList)` | — | `nonpayable` | | `updateAgent` | `((uint256, uint256, address, bool) _agent)` | — | `nonpayable` | | `updateBuyer` | `((uint256, address, bool) _buyer)` | — | `nonpayable` | | `updateDisputeResolver` | `((uint256, uint256, address, address, address, address, string, bool) _disputeResolver)` | — | `nonpayable` | | `updateRoyaltyRecipients` | `(uint256 _sellerId, uint256[] _royaltyRecipientIds, (address, uint256)[] _royaltyRecipients)` | — | `nonpayable` | | `updateSeller` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint8) _authToken)` | — | `nonpayable` | | `updateSellerSalt` | `(uint256 _sellerId, bytes32 _newSalt)` | — | `nonpayable` | ### `IBosonAgentHandler` _Source: [`contracts/interfaces/handlers/IBosonAgentHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonAgentHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `createAgent` | `((uint256, uint256, address, bool) _agent)` | — | `nonpayable` | | `getAgent` | `(uint256 _agentId)` | `(bool, (uint256, uint256, address, bool))` | `view` | | `updateAgent` | `((uint256, uint256, address, bool) _agent)` | — | `nonpayable` | ### `IBosonBundleHandler` _Source: [`contracts/interfaces/handlers/IBosonBundleHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonBundleHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `createBundle` | `((uint256, uint256, uint256[], uint256[]) _bundle)` | — | `nonpayable` | | `getBundle` | `(uint256 _bundleId)` | `(bool, (uint256, uint256, uint256[], uint256[]))` | `view` | | `getBundleIdByOffer` | `(uint256 _offerId)` | `(bool, uint256)` | `view` | | `getBundleIdByTwin` | `(uint256 _twinId)` | `(bool, uint256)` | `view` | | `getNextBundleId` | `()` | `(uint256)` | `view` | ### `IBosonBuyerHandler` _Source: [`contracts/interfaces/handlers/IBosonBuyerHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonBuyerHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `createBuyer` | `((uint256, address, bool) _buyer)` | — | `nonpayable` | | `getBuyer` | `(uint256 _buyerId)` | `(bool, (uint256, address, bool))` | `view` | | `updateBuyer` | `((uint256, address, bool) _buyer)` | — | `nonpayable` | ### `IBosonConfigHandler` _Source: [`contracts/interfaces/handlers/IBosonConfigHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonConfigHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `getAccessControllerAddress` | `()` | `(address)` | `view` | | `getAuthTokenContract` | `(uint8 _authTokenType)` | `(address)` | `view` | | `getBeaconProxyAddress` | `()` | `(address)` | `view` | | `getBuyerEscalationDepositPercentage` | `()` | `(uint256)` | `view` | | `getMaxEscalationResponsePeriod` | `()` | `(uint256)` | `view` | | `getMaxResolutionPeriod` | `()` | `(uint256)` | `view` | | `getMaxRoyaltyPercentage` | `()` | `(uint16)` | `view` | | `getMaxTotalOfferFeePercentage` | `()` | `(uint16)` | `view` | | `getMinDisputePeriod` | `()` | `(uint256)` | `view` | | `getMinResolutionPeriod` | `()` | `(uint256)` | `view` | | `getMutualizerGasStipend` | `()` | `(uint256)` | `view` | | `getPriceDiscoveryAddress` | `()` | `(address)` | `view` | | `getProtocolFee` | `(address _exchangeToken, uint256 _price)` | `(uint256)` | `view` | | `getProtocolFeeFlatBoson` | `()` | `(uint256)` | `view` | | `getProtocolFeePercentage` | `()` | `(uint256)` | `view` | | `getProtocolFeePercentage` | `(address _exchangeToken, uint256 _price)` | `(uint256)` | `view` | | `getProtocolFeeTable` | `(address _tokenAddress)` | `(uint256[], uint256[])` | `view` | | `getTokenAddress` | `()` | `(address)` | `view` | | `getTreasuryAddress` | `()` | `(address)` | `view` | | `getVoucherBeaconAddress` | `()` | `(address)` | `view` | | `setAccessControllerAddress` | `(address _accessControllerAddress)` | — | `nonpayable` | | `setAuthTokenContract` | `(uint8 _authTokenType, address _authTokenContract)` | — | `nonpayable` | | `setBeaconProxyAddress` | `(address _beaconProxyAddress)` | — | `nonpayable` | | `setBuyerEscalationDepositPercentage` | `(uint256 _buyerEscalationDepositPercentage)` | — | `nonpayable` | | `setMaxEscalationResponsePeriod` | `(uint256 _maxEscalationResponsePeriod)` | — | `nonpayable` | | `setMaxResolutionPeriod` | `(uint256 _maxResolutionPeriod)` | — | `nonpayable` | | `setMaxRoyaltyPercentage` | `(uint16 _maxRoyaltyPercentage)` | — | `nonpayable` | | `setMaxTotalOfferFeePercentage` | `(uint16 _maxTotalOfferFeePercentage)` | — | `nonpayable` | | `setMinDisputePeriod` | `(uint256 _minDisputePeriod)` | — | `nonpayable` | | `setMinResolutionPeriod` | `(uint256 _minResolutionPeriod)` | — | `nonpayable` | | `setMutualizerGasStipend` | `(uint256 _mutualizerGasStipend)` | — | `nonpayable` | | `setPriceDiscoveryAddress` | `(address _priceDiscovery)` | — | `nonpayable` | | `setProtocolFeeFlatBoson` | `(uint256 _protocolFeeFlatBoson)` | — | `nonpayable` | | `setProtocolFeePercentage` | `(uint256 _protocolFeePercentage)` | — | `nonpayable` | | `setProtocolFeeTable` | `(address _tokenAddress, uint256[] _priceRanges, uint256[] _feePercentages)` | — | `nonpayable` | | `setTokenAddress` | `(address _tokenAddress)` | — | `nonpayable` | | `setTreasuryAddress` | `(address _treasuryAddress)` | — | `nonpayable` | | `setVoucherBeaconAddress` | `(address _voucherBeaconAddress)` | — | `nonpayable` | ### `IBosonDisputeHandler` _Source: [`contracts/interfaces/handlers/IBosonDisputeHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonDisputeHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `decideDispute` | `(uint256 _exchangeId, uint256 _buyerPercent)` | — | `nonpayable` | | `escalateDispute` | `(uint256 _exchangeId)` | — | `payable` | | `expireDispute` | `(uint256 _exchangeId)` | — | `nonpayable` | | `expireDisputeBatch` | `(uint256[] _exchangeIds)` | — | `nonpayable` | | `expireEscalatedDispute` | `(uint256 _exchangeId)` | — | `nonpayable` | | `extendDisputeTimeout` | `(uint256 _exchangeId, uint256 _newDisputeTimeout)` | — | `nonpayable` | | `getDispute` | `(uint256 _exchangeId)` | `(bool, (uint256, uint256, uint8), (uint256, uint256, uint256, uint256))` | `view` | | `getDisputeState` | `(uint256 _exchangeId)` | `(bool, uint8)` | `view` | | `getDisputeTimeout` | `(uint256 _exchangeId)` | `(bool, uint256)` | `view` | | `isDisputeFinalized` | `(uint256 _exchangeId)` | `(bool, bool)` | `view` | | `raiseDispute` | `(uint256 _exchangeId)` | — | `nonpayable` | | `refuseEscalatedDispute` | `(uint256 _exchangeId)` | — | `nonpayable` | | `resolveDispute` | `(uint256 _exchangeId, uint256 _buyerPercent, bytes _signature)` | — | `nonpayable` | | `retractDispute` | `(uint256 _exchangeId)` | — | `nonpayable` | ### `IBosonDisputeResolverHandler` _Source: [`contracts/interfaces/handlers/IBosonDisputeResolverHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonDisputeResolverHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `addFeesToDisputeResolver` | `(uint256 _disputeResolverId, (address, string, uint256)[] _disputeResolverFees)` | — | `nonpayable` | | `addSellersToAllowList` | `(uint256 _disputeResolverId, uint256[] _sellerAllowList)` | — | `nonpayable` | | `areSellersAllowed` | `(uint256 _disputeResolverId, uint256[] _sellerIds)` | `(bool[])` | `view` | | `createDisputeResolver` | `((uint256, uint256, address, address, address, address, string, bool) _disputeResolver, (address, string, uint256)[] _disputeResolverFees, uint256[] _sellerAllowList)` | — | `nonpayable` | | `getDisputeResolver` | `(uint256 _disputeResolverId)` | `(bool, (uint256, uint256, address, address, address, address, string, bool), (address, string, uint256)[], uint256[])` | `view` | | `getDisputeResolverByAddress` | `(address _associatedAddress)` | `(bool, (uint256, uint256, address, address, address, address, string, bool), (address, string, uint256)[], uint256[])` | `view` | | `optInToDisputeResolverUpdate` | `(uint256 _disputeResolverId, uint8[] _fieldsToUpdate)` | — | `nonpayable` | | `removeFeesFromDisputeResolver` | `(uint256 _disputeResolverId, address[] _feeTokenAddresses)` | — | `nonpayable` | | `removeSellersFromAllowList` | `(uint256 _disputeResolverId, uint256[] _sellerAllowList)` | — | `nonpayable` | | `updateDisputeResolver` | `((uint256, uint256, address, address, address, address, string, bool) _disputeResolver)` | — | `nonpayable` | ### `IBosonExchangeCommitHandler` _Source: [`contracts/interfaces/handlers/IBosonExchangeCommitHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonExchangeCommitHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `commitToBuyerOffer` | `(uint256 _offerId, (uint256, (address[], uint256[]), address) _sellerParams)` | — | `payable` | | `commitToConditionalOffer` | `(address _buyer, uint256 _offerId, uint256 _tokenId)` | — | `payable` | | `commitToOffer` | `(address _buyer, uint256 _offerId)` | — | `payable` | | `createOfferAndCommit` | `(((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256), (uint256, uint256, uint256, uint256), (uint256, uint256, uint256), (uint256, address), (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256), uint256, uint256, bool) _fullOffer, address _offerCreator, address _committer, bytes _signature, uint256 _conditionalTokenId, (uint256, (address[], uint256[]), address) _sellerParams)` | — | `payable` | | `isEligibleToCommit` | `(address _buyer, uint256 _offerId, uint256 _tokenId)` | `(bool, uint256, uint256)` | `view` | | `onPremintedVoucherTransferred` | `(uint256 _tokenId, address _to, address _from, address _rangeOwner)` | `(bool)` | `nonpayable` | ### `IBosonExchangeHandler` _Source: [`contracts/interfaces/handlers/IBosonExchangeHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonExchangeHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `cancelVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | | `completeExchange` | `(uint256 _exchangeId)` | — | `nonpayable` | | `completeExchangeBatch` | `(uint256[] _exchangeIds)` | — | `nonpayable` | | `expireVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | | `extendVoucher` | `(uint256 _exchangeId, uint256 _validUntilDate)` | — | `nonpayable` | | `getEIP2981Royalties` | `(uint256 _queryId, bool _isExchangeId)` | `(address, uint256)` | `view` | | `getExchange` | `(uint256 _exchangeId)` | `(bool, (uint256, uint256, uint256, uint256, uint8, address), (uint256, uint256, uint256, bool))` | `view` | | `getExchangeState` | `(uint256 _exchangeId)` | `(bool, uint8)` | `view` | | `getNextExchangeId` | `()` | `(uint256)` | `view` | | `getReceipt` | `(uint256 _exchangeId)` | `((uint256, uint256, uint256, uint256, uint256, uint256, uint256, (uint256, uint256), uint256, address, uint256, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256), uint256, uint256, bool, uint256, uint256, uint256, uint8, (uint256, uint256, uint256, address, uint8)[]))` | `view` | | `getRoyalties` | `(uint256 _tokenId)` | `(address[], uint256[])` | `view` | | `isExchangeFinalized` | `(uint256 _exchangeId)` | `(bool, bool)` | `view` | | `onVoucherTransferred` | `(uint256 _tokenId, address _newBuyer)` | — | `nonpayable` | | `redeemVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | | `revokeVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | ### `IBosonExchangeManagementHandler` _Source: [`contracts/interfaces/handlers/IBosonExchangeManagementHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonExchangeManagementHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `cancelVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | | `completeExchange` | `(uint256 _exchangeId)` | — | `nonpayable` | | `completeExchangeBatch` | `(uint256[] _exchangeIds)` | — | `nonpayable` | | `expireVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | | `extendVoucher` | `(uint256 _exchangeId, uint256 _validUntilDate)` | — | `nonpayable` | | `getEIP2981Royalties` | `(uint256 _queryId, bool _isExchangeId)` | `(address, uint256)` | `view` | | `getExchange` | `(uint256 _exchangeId)` | `(bool, (uint256, uint256, uint256, uint256, uint8, address), (uint256, uint256, uint256, bool))` | `view` | | `getExchangeState` | `(uint256 _exchangeId)` | `(bool, uint8)` | `view` | | `getNextExchangeId` | `()` | `(uint256)` | `view` | | `getReceipt` | `(uint256 _exchangeId)` | `((uint256, uint256, uint256, uint256, uint256, uint256, uint256, (uint256, uint256), uint256, address, uint256, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256), uint256, uint256, bool, uint256, uint256, uint256, uint8, (uint256, uint256, uint256, address, uint8)[]))` | `view` | | `getRoyalties` | `(uint256 _tokenId)` | `(address[], uint256[])` | `view` | | `isExchangeFinalized` | `(uint256 _exchangeId)` | `(bool, bool)` | `view` | | `onVoucherTransferred` | `(uint256 _tokenId, address _newBuyer)` | — | `nonpayable` | | `redeemVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | | `revokeVoucher` | `(uint256 _exchangeId)` | — | `nonpayable` | ### `IBosonFundsHandler` _Source: [`contracts/interfaces/handlers/IBosonFundsHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonFundsHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `depositFunds` | `(uint256 _entityId, address _tokenAddress, uint256 _amount)` | — | `payable` | | `getAllAvailableFunds` | `(uint256 _entityId)` | `((address, string, uint256)[])` | `view` | | `getAvailableFunds` | `(uint256 _entityId, address[] _tokenList)` | `((address, string, uint256)[])` | `view` | | `getTokenList` | `(uint256 _entityId)` | `(address[])` | `view` | | `getTokenListPaginated` | `(uint256 _entityId, uint256 _limit, uint256 _offset)` | `(address[])` | `view` | | `withdrawFunds` | `(uint256 _entityId, address[] _tokenList, uint256[] _tokenAmounts)` | — | `nonpayable` | | `withdrawProtocolFees` | `(address[] _tokenList, uint256[] _tokenAmounts)` | — | `nonpayable` | ### `IBosonGroupHandler` _Source: [`contracts/interfaces/handlers/IBosonGroupHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonGroupHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `addOffersToGroup` | `(uint256 _groupId, uint256[] _offerIds)` | — | `nonpayable` | | `createGroup` | `((uint256, uint256, uint256[]) _group, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition)` | — | `nonpayable` | | `getGroup` | `(uint256 _groupId)` | `(bool, (uint256, uint256, uint256[]), (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256))` | `view` | | `getNextGroupId` | `()` | `(uint256)` | `view` | | `removeOffersFromGroup` | `(uint256 _groupId, uint256[] _offerIds)` | — | `nonpayable` | | `setGroupCondition` | `(uint256 _groupId, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition)` | — | `nonpayable` | ### `IBosonMetaTransactionsHandler` _Source: [`contracts/interfaces/handlers/IBosonMetaTransactionsHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonMetaTransactionsHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `executeMetaTransaction` | `(address _userAddress, string _functionName, bytes _functionSignature, uint256 _nonce, bytes _signature)` | `(bytes)` | `payable` | | `isFunctionAllowlisted` | `(string _functionName)` | `(bool)` | `view` | | `isFunctionAllowlisted` | `(bytes32 _functionNameHash)` | `(bool)` | `view` | | `isUsedNonce` | `(address _associatedAddress, uint256 _nonce)` | `(bool)` | `view` | | `setAllowlistedFunctions` | `(bytes32[] _functionNameHashes, bool _isAllowlisted)` | — | `nonpayable` | ### `IBosonOfferHandler` _Source: [`contracts/interfaces/handlers/IBosonOfferHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonOfferHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `createOffer` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createOfferBatch` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256)[] _offers, (uint256, uint256, uint256, uint256)[] _offerDates, (uint256, uint256, uint256)[] _offerDurations, (uint256, address)[] _drParameters, uint256[] _agentIds, uint256[] _feeLimits)` | — | `nonpayable` | | `extendOffer` | `(uint256 _offerId, uint256 _validUntilDate)` | — | `nonpayable` | | `extendOfferBatch` | `(uint256[] _offerIds, uint256 _validUntilDate)` | — | `nonpayable` | | `getAgentIdByOffer` | `(uint256 _offerId)` | `(bool, uint256)` | `view` | | `getNextOfferId` | `()` | `(uint256)` | `view` | | `getOffer` | `(uint256 _offerId)` | `(bool, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256), (uint256, uint256, uint256, uint256), (uint256, uint256, uint256), (uint256, uint256, uint256, uint256, address), (uint256, uint256))` | `view` | | `getOfferHash` | `(((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256), (uint256, uint256, uint256, uint256), (uint256, uint256, uint256), (uint256, address), (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256), uint256, uint256, bool) _fullOffer)` | `(bytes32)` | `view` | | `isOfferVoided` | `(uint256 _offerId)` | `(bool, bool)` | `view` | | `reserveRange` | `(uint256 _offerId, uint256 _length, address _to)` | — | `nonpayable` | | `updateOfferMutualizer` | `(uint256 _offerId, address _newMutualizer)` | — | `nonpayable` | | `updateOfferRoyaltyRecipients` | `(uint256 _offerId, (address[], uint256[]) _royaltyInfo)` | — | `nonpayable` | | `updateOfferRoyaltyRecipientsBatch` | `(uint256[] _offerIds, (address[], uint256[]) _royaltyInfo)` | — | `nonpayable` | | `voidNonListedOffer` | `(((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256), (uint256, uint256, uint256, uint256), (uint256, uint256, uint256), (uint256, address), (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256), uint256, uint256, bool) _fullOffer)` | — | `nonpayable` | | `voidNonListedOfferBatch` | `(((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256), (uint256, uint256, uint256, uint256), (uint256, uint256, uint256), (uint256, address), (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256), uint256, uint256, bool)[] _fullOffers)` | — | `nonpayable` | | `voidOffer` | `(uint256 _offerId)` | — | `nonpayable` | | `voidOfferBatch` | `(uint256[] _offerIds)` | — | `nonpayable` | ### `IBosonOrchestrationHandler` _Source: [`contracts/interfaces/handlers/IBosonOrchestrationHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonOrchestrationHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `createOfferAddToGroup` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, uint256 _groupId, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createOfferAndTwinWithBundle` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createOfferWithCondition` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createOfferWithConditionAndTwinAndBundle` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createPremintedOfferAddToGroup` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, uint256 _groupId, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createPremintedOfferAndTwinWithBundle` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createPremintedOfferWithCondition` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createPremintedOfferWithConditionAndTwinAndBundle` | `((uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndOffer` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndOfferAndTwinWithBundle` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndOfferWithCondition` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndOfferWithConditionAndTwinAndBundle` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndPremintedOffer` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndPremintedOfferAndTwinWithBundle` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndPremintedOfferWithCondition` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `createSellerAndPremintedOfferWithConditionAndTwinAndBundle` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint256, uint256, uint256, uint256, uint256, address, uint8, uint8, string, string, bool, uint256, (address[], uint256[])[], uint256) _offer, (uint256, uint256, uint256, uint256) _offerDates, (uint256, uint256, uint256) _offerDurations, (uint256, address) _drParameters, (uint256, address) _premintParameters, (uint8, uint8, address, uint8, uint256, uint256, uint256, uint256) _condition, (uint256, uint256, uint256, uint256, uint256, address, uint8) _twin, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues, uint256 _agentId, uint256 _feeLimit)` | — | `nonpayable` | | `raiseAndEscalateDispute` | `(uint256 _exchangeId)` | — | `payable` | ### `IBosonPauseHandler` _Source: [`contracts/interfaces/handlers/IBosonPauseHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonPauseHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `getPausedRegions` | `()` | `(uint8[])` | `view` | | `pause` | `(uint8[] _regions)` | — | `nonpayable` | | `unpause` | `(uint8[] _regions)` | — | `nonpayable` | ### `IBosonPriceDiscoveryHandler` _Source: [`contracts/interfaces/handlers/IBosonPriceDiscoveryHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonPriceDiscoveryHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `commitToPriceDiscoveryOffer` | `(address _buyer, uint256 _tokenIdOrOfferId, (uint256, uint8, address, address, bytes) _priceDiscovery)` | — | `payable` | ### `IBosonProtocolInitializationHandler` _Source: [`contracts/interfaces/handlers/IBosonProtocolInitializationHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonProtocolInitializationHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `getVersion` | `()` | `(string)` | `view` | ### `IBosonSellerHandler` _Source: [`contracts/interfaces/handlers/IBosonSellerHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonSellerHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `addRoyaltyRecipients` | `(uint256 _sellerId, (address, uint256)[] _royaltyRecipients)` | — | `nonpayable` | | `calculateCollectionAddress` | `(uint256 _sellerId, bytes32 _collectionSalt)` | `(address, bool)` | `view` | | `createNewCollection` | `(string _externalId, (string, uint256, bytes32) _voucherInitValues)` | — | `nonpayable` | | `createSeller` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint8) _authToken, (string, uint256, bytes32) _voucherInitValues)` | — | `nonpayable` | | `getRoyaltyRecipients` | `(uint256 _sellerId)` | `((address, uint256)[])` | `view` | | `getSeller` | `(uint256 _sellerId)` | `(bool, (uint256, address, address, address, address, bool, string), (uint256, uint8))` | `view` | | `getSellerByAddress` | `(address _associatedAddress)` | `(bool, (uint256, address, address, address, address, bool, string), (uint256, uint8))` | `view` | | `getSellerByAuthToken` | `((uint256, uint8) _associatedAuthToken)` | `(bool, (uint256, address, address, address, address, bool, string), (uint256, uint8))` | `view` | | `getSellersCollectionCount` | `(uint256 _sellerId)` | `(uint256)` | `view` | | `getSellersCollections` | `(uint256 _sellerId)` | `(address, (address, string)[])` | `view` | | `getSellersCollectionsPaginated` | `(uint256 _sellerId, uint256 _limit, uint256 _offset)` | `(address, (address, string)[])` | `view` | | `isSellerSaltAvailable` | `(address _adminAddres, bytes32 _salt)` | `(bool)` | `view` | | `optInToSellerUpdate` | `(uint256 _sellerId, uint8[] _fieldsToUpdate)` | — | `nonpayable` | | `removeRoyaltyRecipients` | `(uint256 _sellerId, uint256[] _royaltyRecipientIds)` | — | `nonpayable` | | `updateRoyaltyRecipients` | `(uint256 _sellerId, uint256[] _royaltyRecipientIds, (address, uint256)[] _royaltyRecipients)` | — | `nonpayable` | | `updateSeller` | `((uint256, address, address, address, address, bool, string) _seller, (uint256, uint8) _authToken)` | — | `nonpayable` | | `updateSellerSalt` | `(uint256 _sellerId, bytes32 _newSalt)` | — | `nonpayable` | ### `IBosonSequentialCommitHandler` _Source: [`contracts/interfaces/handlers/IBosonSequentialCommitHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonSequentialCommitHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `sequentialCommitToOffer` | `(address _buyer, uint256 _exchangeId, (uint256, uint8, address, address, bytes) _priceDiscovery)` | — | `payable` | ### `IBosonTwinHandler` _Source: [`contracts/interfaces/handlers/IBosonTwinHandler.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/interfaces/handlers/IBosonTwinHandler.sol)_ | Function | Inputs | Outputs | Mutability | | --- | --- | --- | --- | | `createTwin` | `((uint256, uint256, uint256, uint256, uint256, address, uint8) _twin)` | — | `nonpayable` | | `getNextTwinId` | `()` | `(uint256)` | `view` | | `getTwin` | `(uint256 _twinId)` | `(bool, (uint256, uint256, uint256, uint256, uint256, address, uint8))` | `view` | | `removeTwin` | `(uint256 _twinId)` | — | `nonpayable` | ## Source - ABI artifacts: [`boson-protocol-contracts/addresses/abis/`](https://github.com/bosonprotocol/boson-protocol-contracts/tree/main/addresses/abis) - Handler interfaces: [`contracts/interfaces/handlers/`](https://github.com/bosonprotocol/boson-protocol-contracts/tree/main/contracts/interfaces/handlers) ## Related - [Concepts → Architecture](/concepts/architecture). - [Quickstart → Call Boson from Solidity](/quickstart/solidity). --- # Reference — Contracts: Structs URL: https://www.bosonprotocol.io/docs/reference/contracts/structs > Every named struct exposed by the Boson Diamond, reconstructed from the ABI. # Structs :::info **Generated from `boson-protocol-contracts/addresses/abis/polygon`. Edit the Solidity sources, not this page.** ::: These structs surface in the function inputs and outputs of the Diamond's facets. Names match the on-chain Solidity declarations. Nested structs reference each other by short name. ## `BosonTypes` (31) ### `Agent` | Field | Type | | --- | --- | | `id` | `uint256` | | `feePercentage` | `uint256` | | `wallet` | `address` | | `active` | `bool` | ### `AuthToken` | Field | Type | | --- | --- | | `tokenId` | `uint256` | | `tokenType` | `AuthTokenType (enum)` | ### `Bundle` | Field | Type | | --- | --- | | `id` | `uint256` | | `sellerId` | `uint256` | | `offerIds` | `uint256[]` | | `twinIds` | `uint256[]` | ### `Buyer` | Field | Type | | --- | --- | | `id` | `uint256` | | `wallet` | `address` | | `active` | `bool` | ### `Collection` | Field | Type | | --- | --- | | `collectionAddress` | `address` | | `externalId` | `string` | ### `Condition` | Field | Type | | --- | --- | | `method` | `EvaluationMethod (enum)` | | `tokenType` | `TokenType (enum)` | | `tokenAddress` | `address` | | `gating` | `GatingType (enum)` | | `minTokenId` | `uint256` | | `threshold` | `uint256` | | `maxCommits` | `uint256` | | `maxTokenId` | `uint256` | ### `Dispute` | Field | Type | | --- | --- | | `exchangeId` | `uint256` | | `buyerPercent` | `uint256` | | `state` | `DisputeState (enum)` | ### `DisputeDates` | Field | Type | | --- | --- | | `disputed` | `uint256` | | `escalated` | `uint256` | | `finalized` | `uint256` | | `timeout` | `uint256` | ### `DisputeResolutionTerms` | Field | Type | | --- | --- | | `disputeResolverId` | `uint256` | | `escalationResponsePeriod` | `uint256` | | `feeAmount` | `uint256` | | `buyerEscalationDeposit` | `uint256` | | `mutualizerAddress` | `address` | ### `DisputeResolver` | Field | Type | | --- | --- | | `id` | `uint256` | | `escalationResponsePeriod` | `uint256` | | `assistant` | `address` | | `admin` | `address` | | `clerk` | `address` | | `treasury` | `address` | | `metadataUri` | `string` | | `active` | `bool` | ### `DisputeResolverFee` | Field | Type | | --- | --- | | `tokenAddress` | `address` | | `tokenName` | `string` | | `feeAmount` | `uint256` | ### `DRParameters` | Field | Type | | --- | --- | | `disputeResolverId` | `uint256` | | `mutualizerAddress` | `address` | ### `Exchange` | Field | Type | | --- | --- | | `id` | `uint256` | | `offerId` | `uint256` | | `buyerId` | `uint256` | | `finalizedDate` | `uint256` | | `state` | `ExchangeState (enum)` | | `mutualizerAddress` | `address` | ### `FullOffer` | Field | Type | | --- | --- | | `offer` | `Offer` | | `offerDates` | `OfferDates` | | `offerDurations` | `OfferDurations` | | `drParameters` | `DRParameters` | | `condition` | `Condition` | | `agentId` | `uint256` | | `feeLimit` | `uint256` | | `useDepositedFunds` | `bool` | ### `Funds` | Field | Type | | --- | --- | | `tokenAddress` | `address` | | `tokenName` | `string` | | `availableAmount` | `uint256` | ### `Group` | Field | Type | | --- | --- | | `id` | `uint256` | | `sellerId` | `uint256` | | `offerIds` | `uint256[]` | ### `Offer` | Field | Type | | --- | --- | | `id` | `uint256` | | `sellerId` | `uint256` | | `price` | `uint256` | | `sellerDeposit` | `uint256` | | `buyerCancelPenalty` | `uint256` | | `quantityAvailable` | `uint256` | | `exchangeToken` | `address` | | `priceType` | `PriceType (enum)` | | `creator` | `OfferCreator (enum)` | | `metadataUri` | `string` | | `metadataHash` | `string` | | `voided` | `bool` | | `collectionIndex` | `uint256` | | `royaltyInfo` | `RoyaltyInfo[]` | | `buyerId` | `uint256` | ### `OfferDates` | Field | Type | | --- | --- | | `validFrom` | `uint256` | | `validUntil` | `uint256` | | `voucherRedeemableFrom` | `uint256` | | `voucherRedeemableUntil` | `uint256` | ### `OfferDurations` | Field | Type | | --- | --- | | `disputePeriod` | `uint256` | | `voucherValid` | `uint256` | | `resolutionPeriod` | `uint256` | ### `OfferFees` | Field | Type | | --- | --- | | `protocolFee` | `uint256` | | `agentFee` | `uint256` | ### `PremintParameters` | Field | Type | | --- | --- | | `reservedRangeLength` | `uint256` | | `to` | `address` | ### `PriceDiscovery` | Field | Type | | --- | --- | | `price` | `uint256` | | `side` | `Side (enum)` | | `priceDiscoveryContract` | `address` | | `conduit` | `address` | | `priceDiscoveryData` | `bytes` | ### `Receipt` | Field | Type | | --- | --- | | `exchangeId` | `uint256` | | `offerId` | `uint256` | | `buyerId` | `uint256` | | `sellerId` | `uint256` | | `price` | `uint256` | | `sellerDeposit` | `uint256` | | `buyerCancelPenalty` | `uint256` | | `offerFees` | `OfferFees` | | `agentId` | `uint256` | | `exchangeToken` | `address` | | `finalizedDate` | `uint256` | | `condition` | `Condition` | | `committedDate` | `uint256` | | `redeemedDate` | `uint256` | | `voucherExpired` | `bool` | | `disputeResolverId` | `uint256` | | `disputedDate` | `uint256` | | `escalatedDate` | `uint256` | | `disputeState` | `DisputeState (enum)` | | `twinReceipts` | `TwinReceipt[]` | ### `RoyaltyInfo` | Field | Type | | --- | --- | | `recipients` | `address[]` | | `bps` | `uint256[]` | ### `RoyaltyRecipientInfo` | Field | Type | | --- | --- | | `wallet` | `address` | | `minRoyaltyPercentage` | `uint256` | ### `Seller` | Field | Type | | --- | --- | | `id` | `uint256` | | `assistant` | `address` | | `admin` | `address` | | `clerk` | `address` | | `treasury` | `address` | | `active` | `bool` | | `metadataUri` | `string` | ### `SellerOfferParams` | Field | Type | | --- | --- | | `collectionIndex` | `uint256` | | `royaltyInfo` | `RoyaltyInfo` | | `mutualizerAddress` | `address` | ### `Twin` | Field | Type | | --- | --- | | `id` | `uint256` | | `sellerId` | `uint256` | | `amount` | `uint256` | | `supplyAvailable` | `uint256` | | `tokenId` | `uint256` | | `tokenAddress` | `address` | | `tokenType` | `TokenType (enum)` | ### `TwinReceipt` | Field | Type | | --- | --- | | `twinId` | `uint256` | | `tokenId` | `uint256` | | `amount` | `uint256` | | `tokenAddress` | `address` | | `tokenType` | `TokenType (enum)` | ### `Voucher` | Field | Type | | --- | --- | | `committedDate` | `uint256` | | `validUntilDate` | `uint256` | | `redeemedDate` | `uint256` | | `expired` | `bool` | ### `VoucherInitValues` | Field | Type | | --- | --- | | `contractURI` | `string` | | `royaltyPercentage` | `uint256` | | `collectionSalt` | `bytes32` | ## Source - ABI artifacts: [`boson-protocol-contracts/addresses/abis/`](https://github.com/bosonprotocol/boson-protocol-contracts/tree/main/addresses/abis) - Solidity origin (for full NatSpec, enum values, etc.): [`contracts/domain/BosonTypes.sol`](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/contracts/domain/BosonTypes.sol) ## Related - [Reference → Contracts → Diamond facets](/reference/contracts/facets) — which facet takes / returns each struct. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Accounts URL: https://www.bosonprotocol.io/docs/reference/core-sdk/accounts > Public methods on the Accounts mixin of @bosonprotocol/core-sdk. # `Accounts` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `AccountsMixin`_ _Source: [`packages/core-sdk/src/accounts/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/accounts/mixin.ts)_ ## Methods (33) `addFeesToDisputeResolver`, `addRoyaltyRecipients`, `addSellersToDisputeResolverAllowList`, `createBuyer`, `createDisputeResolver`, `createNewCollection`, `createSeller`, `createSellerAndOffer`, `getBuyerById`, `getBuyers`, `getDisputeResolverById`, `getDisputeResolverIdFromLogs`, `getDisputeResolvers`, `getOfferCollections`, `getPendingSellerUpdateFromLogs`, `getRoyaltyRecipients`, `getSellerByAdmin`, `getSellerByAssistant`, `getSellerByAuthToken`, `getSellerById`, `getSellers`, `getSellersByAddress`, `getSellersByTreasury`, `optInToDisputeResolverUpdate`, `optInToSellerUpdate`, `removeFeesFromDisputeResolver`, `removeRoyaltyRecipients`, `removeSellersFromDisputeResolverAllowList`, `searchSellerFromAuthToken`, `updateDisputeResolver`, `updateRoyaltyRecipients`, `updateSeller`, `updateSellerAndOptIn` ## Signatures ### `addFeesToDisputeResolver` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async addFeesToDisputeResolver( disputeResolverId: BigNumberish, fees: accounts.DisputeResolutionFee[], overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async addFeesToDisputeResolver( disputeResolverId: BigNumberish, fees: accounts.DisputeResolutionFee[], overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async addFeesToDisputeResolver( disputeResolverId: BigNumberish, fees: accounts.DisputeResolutionFee[], overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `addRoyaltyRecipients` (3 signatures) ```ts public async addRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipients: accounts.RoyaltyRecipientInfo[], overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async addRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipients: accounts.RoyaltyRecipientInfo[], overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async addRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipients: accounts.RoyaltyRecipientInfo[], overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `addSellersToDisputeResolverAllowList` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async addSellersToDisputeResolverAllowList( disputeResolverId: BigNumberish, sellerAllowList: BigNumberish[], overrides: Partial<{ returnTxInfo: true; }> ): Promise public async addSellersToDisputeResolverAllowList( disputeResolverId: BigNumberish, sellerAllowList: BigNumberish[], overrides?: Partial<{ returnTxInfo?: false | undefined; }> ): Promise public async addSellersToDisputeResolverAllowList( disputeResolverId: BigNumberish, sellerAllowList: BigNumberish[], overrides: Partial<{ returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createBuyer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createBuyer( buyerToCreate: accounts.CreateBuyerArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createBuyer( buyerToCreate: accounts.CreateBuyerArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async createBuyer( buyerToCreate: accounts.CreateBuyerArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createDisputeResolver` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createDisputeResolver( disputeResolverToCreate: accounts.CreateDisputeResolverArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createDisputeResolver( disputeResolverToCreate: accounts.CreateDisputeResolverArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async createDisputeResolver( disputeResolverToCreate: accounts.CreateDisputeResolverArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createNewCollection` (3 signatures) ```ts public async createNewCollection( collectionToCreate: accounts.CreateCollectionArgs, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createNewCollection( collectionToCreate: accounts.CreateCollectionArgs, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async createNewCollection( collectionToCreate: accounts.CreateCollectionArgs, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createSeller` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createSeller( sellerToCreate: accounts.CreateSellerArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createSeller( sellerToCreate: accounts.CreateSellerArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async createSeller( sellerToCreate: accounts.CreateSellerArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createSellerAndOffer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createSellerAndOffer( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createSellerAndOffer( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async createSellerAndOffer( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `getBuyerById` (1 signature) Returns buyer entity from subgraph. ```ts public async getBuyerById( buyerId: BigNumberish, queryVars?: accounts.subgraph.SingleBuyerQueryVariables ): Promise ``` ### `getBuyers` (1 signature) Returns buyer entities from subgraph. ```ts public async getBuyers( queryVars?: subgraph.GetBuyersQueryQueryVariables ): Promise ``` ### `getDisputeResolverById` (1 signature) Returns dispute resolver entity from subgraph. ```ts public async getDisputeResolverById( disputeResolverId: BigNumberish, queryVars?: accounts.subgraph.SingleDisputeResolverQueryVariables ): Promise ``` ### `getDisputeResolverIdFromLogs` (1 signature) Utility method to retrieve the created `exchangeId` from logs after calling `commitToOffer`. ```ts public getDisputeResolverIdFromLogs(logs: Log[]): string | null { return getValueFromLogs({ iface: accounts.iface.bosonAccountHandlerIface, logs, eventArgsKey: "disputeResolverId", eventName: "DisputeResolverCreated" }) ``` ### `getDisputeResolvers` (1 signature) Returns dispute resolver entities from subgraph. ```ts public async getDisputeResolvers( queryVars?: subgraph.GetDisputeResolversQueryQueryVariables ): Promise ``` ### `getOfferCollections` (1 signature) ```ts public async getOfferCollections( queryVars?: subgraph.GetOfferCollectionsQueryQueryVariables ): Promise ``` ### `getPendingSellerUpdateFromLogs` (1 signature) Utility method to retrieve the pending seller update fields from logs after calling `updateSeller`. ```ts public getPendingSellerUpdateFromLogs(logs: Log[]): { sellerId: bigint ``` ### `getRoyaltyRecipients` (1 signature) ```ts public async getRoyaltyRecipients( sellerId: BigNumberish, overrides: Partial<{ contractAddress: string; }> = {} ) ``` ### `getSellerByAdmin` (1 signature) Returns seller entity from subgraph. ```ts public async getSellerByAdmin( admin: string, queryVars?: subgraph.GetSellersQueryQueryVariables ): Promise ``` ### `getSellerByAssistant` (1 signature) Returns seller entity from subgraph. ```ts public async getSellerByAssistant( assistant: string, queryVars?: subgraph.GetSellersQueryQueryVariables ): Promise ``` ### `getSellerByAuthToken` (1 signature) Returns seller entity from subgraph that owns the given auth token (if any). ```ts public async getSellerByAuthToken( tokenId: string, tokenType: number, queryVars?: subgraph.GetSellersQueryQueryVariables ): Promise ``` ### `getSellerById` (1 signature) Returns seller entity from subgraph. ```ts public async getSellerById( sellerId: BigNumberish, queryVars?: accounts.subgraph.SingleSellerQueryVariables ): Promise ``` ### `getSellers` (1 signature) Returns seller entities from subgraph. ```ts public async getSellers( queryVars?: subgraph.GetSellersQueryQueryVariables ): Promise ``` ### `getSellersByAddress` (1 signature) Returns seller entity from subgraph. Matches `assistant`, `clerk`, `admin` or `treasury`. ```ts public async getSellersByAddress( address: string, queryVars?: subgraph.GetSellersQueryQueryVariables ): Promise ``` ### `getSellersByTreasury` (1 signature) Returns seller entities from subgraph. ```ts public async getSellersByTreasury( treasury: string, queryVars?: subgraph.GetSellersQueryQueryVariables ): Promise ``` ### `optInToDisputeResolverUpdate` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async optInToDisputeResolverUpdate( disputeResolverUpdates: accounts.OptInToDisputeResolverUpdateArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async optInToDisputeResolverUpdate( disputeResolverUpdates: accounts.OptInToDisputeResolverUpdateArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async optInToDisputeResolverUpdate( disputeResolverUpdates: accounts.OptInToDisputeResolverUpdateArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `optInToSellerUpdate` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async optInToSellerUpdate( sellerUpdates: accounts.OptInToSellerUpdateArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async optInToSellerUpdate( sellerUpdates: accounts.OptInToSellerUpdateArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async optInToSellerUpdate( sellerUpdates: accounts.OptInToSellerUpdateArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `removeFeesFromDisputeResolver` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async removeFeesFromDisputeResolver( disputeResolverId: BigNumberish, feeTokenAddresses: string[], overrides: Partial<{ returnTxInfo: true; }> ): Promise public async removeFeesFromDisputeResolver( disputeResolverId: BigNumberish, feeTokenAddresses: string[], overrides?: Partial<{ returnTxInfo?: false | undefined; }> ): Promise public async removeFeesFromDisputeResolver( disputeResolverId: BigNumberish, feeTokenAddresses: string[], overrides: Partial<{ returnTxInfo?: boolean; }> = {} ): Promise ``` ### `removeRoyaltyRecipients` (3 signatures) ```ts public async removeRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipientIds: BigNumberish[], overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async removeRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipientIds: BigNumberish[], overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async removeRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipientIds: BigNumberish[], overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `removeSellersFromDisputeResolverAllowList` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async removeSellersFromDisputeResolverAllowList( disputeResolverId: BigNumberish, sellerAllowList: string[], overrides: Partial<{ returnTxInfo: true; }> ): Promise public async removeSellersFromDisputeResolverAllowList( disputeResolverId: BigNumberish, sellerAllowList: string[], overrides?: Partial<{ returnTxInfo?: false | undefined; }> ): Promise public async removeSellersFromDisputeResolverAllowList( disputeResolverId: BigNumberish, sellerAllowList: string[], overrides: Partial<{ returnTxInfo?: boolean; }> = {} ): Promise ``` ### `searchSellerFromAuthToken` (1 signature) Returns the seller id found in the subgraph, if any, based on an authTokenId owned by the specified address ```ts public async searchSellerFromAuthToken( address: string, tokenType: number ): Promise ``` ### `updateDisputeResolver` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async updateDisputeResolver( disputeResolverId: BigNumberish, updates: accounts.DisputeResolverUpdates, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async updateDisputeResolver( disputeResolverId: BigNumberish, updates: accounts.DisputeResolverUpdates, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async updateDisputeResolver( disputeResolverId: BigNumberish, updates: accounts.DisputeResolverUpdates, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `updateRoyaltyRecipients` (3 signatures) ```ts public async updateRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipientIds: BigNumberish[], royaltyRecipients: accounts.RoyaltyRecipientInfo[], overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async updateRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipientIds: BigNumberish[], royaltyRecipients: accounts.RoyaltyRecipientInfo[], overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async updateRoyaltyRecipients( sellerId: BigNumberish, royaltyRecipientIds: BigNumberish[], royaltyRecipients: accounts.RoyaltyRecipientInfo[], overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `updateSeller` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async updateSeller( sellerUpdates: accounts.UpdateSellerArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async updateSeller( sellerUpdates: accounts.UpdateSellerArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async updateSeller( sellerUpdates: accounts.UpdateSellerArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `updateSellerAndOptIn` (1 signature) Updates seller account by calling the `AccountHandlerFacet` contract, then optIn for all updates doable by the same account. Only callable by admin. ```ts public async updateSellerAndOptIn( sellerUpdates: accounts.UpdateSellerArgs, overrides: Partial<{ contractAddress: string; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Adapters URL: https://www.bosonprotocol.io/docs/reference/core-sdk/adapters > Wallet-library adapters that plug into the SDK. # Adapters The SDK is wallet-library-agnostic via `Web3LibAdapter`. Two implementations ship: ## `EthersAdapter` (ethers v5) ```ts twoslash // @noErrors import { EthersAdapter } from "@bosonprotocol/ethers-sdk" import { ethers } from "ethers" const provider = new ethers.providers.JsonRpcProvider(RPC_URL) const wallet = new ethers.Wallet(PRIVATE_KEY, provider) const adapter = new EthersAdapter(provider, wallet) // (provider, signer?) ``` Constructor signature is `EthersAdapter(provider, signer?)`. The signer is optional for read-only adapters — pass any `Signer` (ethers `Wallet`, browser provider's `getSigner()`, KMS-backed signers) when you need to sign. ## viem bridge ```ts twoslash // @noErrors import { walletClientToWeb3LibAdapter } from "@bosonprotocol/x402b" import { createWalletClient, http } from "viem" import { polygon } from "viem/chains" import { privateKeyToAccount } from "viem/accounts" const wc = createWalletClient({ account: privateKeyToAccount(PRIVATE_KEY), chain: polygon, transport: http(), }) const adapter = walletClientToWeb3LibAdapter(wc) ``` ## Implementing your own adapter `Web3LibAdapter` requires methods to: - Get signer address and chain. - `signMessage`, `signTypedData`. - `sendTransaction` and read receipts. - Read on-chain (call, getLogs). If you have a non-standard signer (HSM, MPC, custom RPC), implement this interface. ## Source - Interface: [`@bosonprotocol/common/src/types/Web3LibAdapter.ts`](https://github.com/bosonprotocol/core-components/tree/main/packages/common/src/types) --- # Reference — CoreSDK class URL: https://www.bosonprotocol.io/docs/reference/core-sdk/core-sdk > The CoreSDK class — public surface, factory, and how the mixins compose. # `CoreSDK` The primary entry point of `@bosonprotocol/core-sdk`. Aggregates 13+ mixins into a single instance. ```ts twoslash // @noErrors import { CoreSDK } from "@bosonprotocol/core-sdk" import { EthersAdapter } from "@bosonprotocol/ethers-sdk" const sdk = CoreSDK.fromDefaultConfig({ web3Lib: new EthersAdapter(provider, signer), // (provider, signer?) envName: "production", // required configId: "production-137-0", }) ``` ## Constructors / factories | Factory | Use when | | --- | --- | | `CoreSDK.fromDefaultConfig(opts)` | Standard. Pulls config from `@bosonprotocol/common`. Requires both `envName` and `configId`. | | `new CoreSDK(opts)` | Custom config (testing, forks). | | `getEnvConfigs(env)` (from `@bosonprotocol/common`) | List all known `configId` strings for an environment. | ## Options ```ts { web3Lib: Web3LibAdapter, envName: EnvironmentType, // "local" | "testing" | "staging" | "production" configId: string, // e.g. "production-137-0" metadataStorage?: MetadataStorage, // for IPFS metadata theGraphStorage?: MetadataStorage, // for The Graph IPFS gateway metaTx?: Partial, } ``` ## Mixins (methods groups) | Mixin | Methods | Reference | | --- | --- | --- | | Accounts | `createSeller`, `createBuyer`, `createDisputeResolver`, `getSellersByAddress`, … | [→](./accounts) | | Offers | `createOffer`, `voidOffer`, `getOffers`, `signFullOffer`, … | [→](./offers) | | Exchanges | `commitToOffer`, `redeemVoucher`, `completeExchange`, `cancelVoucher`, `revokeVoucher`, `getExchanges`, … | [→](./exchanges) | | Disputes | `raiseDispute`, `resolveDispute`, `escalateDispute`, `decideDispute`, `retractDispute`, … | [→](./disputes) | | Funds | `depositFunds`, `withdrawFunds`, `getFunds`, … | [→](./funds) | | MetaTx | `signMetaTxCommitToOffer`, `relayMetaTransaction`, … | [→](./meta-tx) | | Orchestration | `createOfferAndCommit`, `signFullOffer`, … (no SDK helper currently wraps the buyer-side atomic commit+redeem — call `OrchestrationHandlerFacet` directly for that) | [→](./orchestration) | | Groups | `createGroup`, `setGroupCondition`, `getGroups`, … | [→](./groups) | | Marketplace | `searchOffers`, `getProductsWithVariants`, `facetOffers`, … | [→](./marketplace) | | Search | full-text and filter helpers | [→](./search) | | ERC20 / 721 / 1155 | `approve*`, `transfer*`, `balanceOf*` | [→](./erc-mixins) | ## Adapters `Web3LibAdapter` is the pluggable interface. Implementations: - `EthersAdapter` (ethers v5) — `@bosonprotocol/ethers-sdk`. - viem bridge — `walletClientToWeb3LibAdapter()` in `@bosonprotocol/x402b`. See [→ Adapters](./adapters). :::info This page is hand-authored today; the per-mixin pages will be generated from `mixin.ts` + `interface.ts` + `subgraph.ts` + `queries.graphql` per domain by the `scripts/docs-gen` pipeline. ::: --- # Reference — Core SDK: Disputes URL: https://www.bosonprotocol.io/docs/reference/core-sdk/disputes > Public methods on the Disputes mixin of @bosonprotocol/core-sdk. # `Disputes` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `DisputesMixin`_ _Source: [`packages/core-sdk/src/disputes/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/disputes/mixin.ts)_ ## Methods (13) `decideDispute`, `escalateDispute`, `expireDispute`, `expireDisputeBatch`, `expireEscalatedDispute`, `extendDisputeTimeout`, `getDisputeById`, `getDisputes`, `raiseDispute`, `refuseEscalatedDispute`, `resolveDispute`, `retractDispute`, `signDisputeResolutionProposal` ## Signatures ### `decideDispute` (3 signatures) Decides dispute by calling the `DisputeHandlerContract`. ```ts public async decideDispute( exchangeId: BigNumberish, buyerPercent: BigNumberish, returnTxInfo: true ): Promise public async decideDispute( exchangeId: BigNumberish, buyerPercent: BigNumberish, returnTxInfo?: false | undefined ): Promise public async decideDispute( exchangeId: BigNumberish, buyerPercent: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `escalateDispute` (3 signatures) Escalates dispute by calling the `DisputeHandlerContract`. ```ts public async escalateDispute( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async escalateDispute( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async escalateDispute( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `expireDispute` (3 signatures) Expires a dispute by calling the `DisputeHandlerContract`. ```ts public async expireDispute( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async expireDispute( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async expireDispute( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `expireDisputeBatch` (3 signatures) Expires many disputes by calling the `DisputeHandlerContract`. ```ts public async expireDisputeBatch( exchangeIds: BigNumberish[], returnTxInfo: true ): Promise public async expireDisputeBatch( exchangeIds: BigNumberish[], returnTxInfo?: false | undefined ): Promise public async expireDisputeBatch( exchangeIds: BigNumberish[], returnTxInfo?: boolean ): Promise ``` ### `expireEscalatedDispute` (3 signatures) Expires escalated dispute by calling the `DisputeHandlerContract`. ```ts public async expireEscalatedDispute( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async expireEscalatedDispute( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async expireEscalatedDispute( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `extendDisputeTimeout` (3 signatures) Extends the dispute timeout by calling the `DisputeHandlerContract`. ```ts public async extendDisputeTimeout( exchangeId: BigNumberish, newDisputeTimeout: BigNumberish, returnTxInfo: true ): Promise public async extendDisputeTimeout( exchangeId: BigNumberish, newDisputeTimeout: BigNumberish, returnTxInfo?: false | undefined ): Promise public async extendDisputeTimeout( exchangeId: BigNumberish, newDisputeTimeout: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `getDisputeById` (1 signature) Returns dispute entity from subgraph. ```ts public async getDisputeById( disputeId: BigNumberish, queryVars?: SingleDisputeQueryVariables ) ``` ### `getDisputes` (1 signature) Returns dispute entities from subgraph. ```ts public async getDisputes( queryVars?: subgraph.GetDisputesQueryQueryVariables ) ``` ### `raiseDispute` (3 signatures) Raises a dispute by calling the `DisputeHandlerContract`. ```ts public async raiseDispute( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async raiseDispute( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async raiseDispute( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `refuseEscalatedDispute` (3 signatures) Refuses escalated dispute by calling the `DisputeHandlerContract`. ```ts public async refuseEscalatedDispute( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async refuseEscalatedDispute( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async refuseEscalatedDispute( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `resolveDispute` (3 signatures) Resolves dispute by calling the `DisputeHandlerContract`. If caller is `buyer` then signature of `seller` is required as an argument. If caller if `seller` then vice-versa. The signature can be retrieved by calling the method `CoreSDK.signDisputeResolutionProposal`. - `args.exchangeId` - ID of disputed exchange. - `args.buyerPercent` - Percentage of deposit the buyer gets. - `args.sigR` - r signature value of counterparty. - `args.sigS` - s signature value of counterparty. - `args.sigV` - v signature value of counterparty. ```ts public async resolveDispute( args: | { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; sigR: BytesLike; sigS: BytesLike; sigV: BigNumberish; returnTxInfo: true; } | { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; signature: string; returnTxInfo: true; } ): Promise public async resolveDispute( args: | { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; sigR: BytesLike; sigS: BytesLike; sigV: BigNumberish; returnTxInfo?: false | undefined; } | { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; signature: string; returnTxInfo?: false | undefined; } ): Promise public async resolveDispute( args: | { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; sigR: BytesLike; sigS: BytesLike; sigV: BigNumberish; returnTxInfo?: boolean; } | { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; signature: string; returnTxInfo?: boolean; } ): Promise ``` ### `retractDispute` (3 signatures) Retracts a dispute by calling the `DisputeHandlerContract`. ```ts public async retractDispute( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async retractDispute( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async retractDispute( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `signDisputeResolutionProposal` (3 signatures) Signs dispute resolution message. - `args.exchangeId` - ID of disputed exchange. - `args.buyerPercentBasisPoints` - Percentage of deposit the buyer gets. ```ts public async signDisputeResolutionProposal(args: { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; returnTypedDataToSign: true; }): Promise public async signDisputeResolutionProposal(args: { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; returnTypedDataToSign?: false; }): Promise> public async signDisputeResolutionProposal(args: { exchangeId: BigNumberish; buyerPercentBasisPoints: BigNumberish; returnTypedDataToSign?: boolean; }): Promise> ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: ERC20 / 721 / 1155 mixins URL: https://www.bosonprotocol.io/docs/reference/core-sdk/erc-mixins > Token helper mixins (erc1155, erc165, erc20, erc721) on @bosonprotocol/core-sdk. # ERC20 / 721 / 1155 mixins :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: These mixins wrap the standard ERC token interfaces. They're used internally for approvals and balance reads and exposed for application code. ## `erc1155` _Class: `ERC1155Mixin`_ _Source: [`packages/core-sdk/src/erc1155/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/erc1155/mixin.ts)_ ## Methods (4) `erc1155BalanceOf`, `erc1155Name`, `erc1155Symbol`, `erc1155Uri` ## Signatures ### `erc1155BalanceOf` (1 signature) ```ts public async erc1155BalanceOf( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc1155Name` (1 signature) ```ts public async erc1155Name( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc1155Symbol` (1 signature) ```ts public async erc1155Symbol( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc1155Uri` (1 signature) ```ts public async erc1155Uri( args: Omit[0], "web3Lib"> ): Promise> ``` ## `erc165` _Class: `ERC165Mixin`_ _Source: [`packages/core-sdk/src/erc165/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/erc165/mixin.ts)_ ## Methods (1) `erc165SupportsInterface` ## Signatures ### `erc165SupportsInterface` (1 signature) ```ts public async erc165SupportsInterface( args: Omit[0], "web3Lib"> ): Promise> ``` ## `erc20` _Class: `ERC20Mixin`_ _Source: [`packages/core-sdk/src/erc20/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/erc20/mixin.ts)_ ## Methods (10) `erc20Approve`, `erc20BalanceOf`, `erc20EnsureAllowance`, `erc20GetAllowance`, `erc20GetDecimals`, `erc20GetName`, `erc20GetSymbol`, `signReceiveWithErc2612Permit`, `signReceiveWithErc3009Authorization`, `signReceiveWithPermit2` ## Signatures ### `erc20Approve` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async erc20Approve( args: Omit< Parameters[0], "web3Lib" | "theGraphStorage" | "metadataStorage" >, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async erc20Approve( args: Omit< Parameters[0], "web3Lib" | "theGraphStorage" | "metadataStorage" >, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async erc20Approve( args: Omit< Parameters[0], "web3Lib" | "theGraphStorage" | "metadataStorage" >, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `erc20BalanceOf` (1 signature) ```ts public async erc20BalanceOf( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc20EnsureAllowance` (1 signature) ```ts public async erc20EnsureAllowance( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc20GetAllowance` (1 signature) ```ts public async erc20GetAllowance( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc20GetDecimals` (1 signature) ```ts public async erc20GetDecimals( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc20GetName` (1 signature) ```ts public async erc20GetName( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc20GetSymbol` (1 signature) ```ts public async erc20GetSymbol( args: Omit[0], "web3Lib"> ): Promise> ``` ### `signReceiveWithErc2612Permit` (3 signatures) Overload: returnTypedDataToSign is true → returns StructuredData ```ts public async signReceiveWithErc2612Permit( exchangeToken: string, tokenDomain: { name: string; version: string }, value: BigNumberish, deadline: BigNumberish, overrides: Partial<{ spender: string }> & { returnTypedDataToSign: true } ): Promise public async signReceiveWithErc2612Permit( exchangeToken: string, tokenDomain: { name: string; version: string }, value: BigNumberish, deadline: BigNumberish, overrides?: Partial<{ spender: string; returnTypedDataToSign?: false }> ): Promise public async signReceiveWithErc2612Permit( exchangeToken: string, tokenDomain: { name: string; version: string }, value: BigNumberish, deadline: BigNumberish, overrides: Partial<{ spender: string; returnTypedDataToSign: boolean; }> = {} ): Promise< (TransferAuthorization & { strategy: "EIP2612" }) | StructuredData > ``` ### `signReceiveWithErc3009Authorization` (3 signatures) Overload: returnTypedDataToSign is true → returns StructuredData ```ts public async signReceiveWithErc3009Authorization( exchangeToken: string, tokenDomain: { name: string; version: string }, value: BigNumberish, validAfter: BigNumberish, validBefore: BigNumberish, overrides: Partial<{ spender: string }> & { returnTypedDataToSign: true } ): Promise public async signReceiveWithErc3009Authorization( exchangeToken: string, tokenDomain: { name: string; version: string }, value: BigNumberish, validAfter: BigNumberish, validBefore: BigNumberish, overrides?: Partial<{ spender: string; returnTypedDataToSign?: false }> ): Promise public async signReceiveWithErc3009Authorization( exchangeToken: string, tokenDomain: { name: string; version: string }, value: BigNumberish, validAfter: BigNumberish, validBefore: BigNumberish, overrides: Partial<{ spender: string; returnTypedDataToSign: boolean; }> = {} ): Promise< (TransferAuthorization & { strategy: "ERC3009" }) | StructuredData > ``` ### `signReceiveWithPermit2` (3 signatures) Overload: returnTypedDataToSign is true → returns StructuredData ```ts public async signReceiveWithPermit2( exchangeToken: string, value: BigNumberish, deadline: BigNumberish, overrides: Partial<{ spender: string; permit2Address: string; permit2Nonce: BigNumberish; }> & { returnTypedDataToSign: true } ): Promise public async signReceiveWithPermit2( exchangeToken: string, value: BigNumberish, deadline: BigNumberish, overrides?: Partial<{ spender: string; permit2Address: string; permit2Nonce: BigNumberish; returnTypedDataToSign?: false; }> ): Promise public async signReceiveWithPermit2( exchangeToken: string, value: BigNumberish, deadline: BigNumberish, overrides: Partial<{ spender: string; permit2Address: string; permit2Nonce: BigNumberish; returnTypedDataToSign: boolean; }> = {} ): Promise< (TransferAuthorization & { strategy: "Permit2" }) | StructuredData > ``` ## `erc721` _Class: `ERC721Mixin`_ _Source: [`packages/core-sdk/src/erc721/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/erc721/mixin.ts)_ ## Methods (6) `erc721BalanceOf`, `erc721Name`, `erc721OwnerOf`, `erc721Symbol`, `erc721TokenOfOwnerByIndex`, `erc721TokenUri` ## Signatures ### `erc721BalanceOf` (1 signature) ```ts public async erc721BalanceOf( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc721Name` (1 signature) ```ts public async erc721Name( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc721OwnerOf` (1 signature) ```ts public async erc721OwnerOf( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc721Symbol` (1 signature) ```ts public async erc721Symbol( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc721TokenOfOwnerByIndex` (1 signature) ```ts public async erc721TokenOfOwnerByIndex( args: Omit[0], "web3Lib"> ): Promise> ``` ### `erc721TokenUri` (1 signature) ```ts public async erc721TokenUri( args: Omit[0], "web3Lib"> ): Promise> ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Build → Marketplace operators → Token-gated launches](/build/marketplace/token-gated). - [Recipes → ERC-20 approve + commit](/recipes/erc20-commit). --- # Reference — Core SDK: Errors URL: https://www.bosonprotocol.io/docs/reference/core-sdk/errors-mixin > Public methods on the Errors mixin of @bosonprotocol/core-sdk. # `Errors` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `ErrorMixin`_ _Source: [`packages/core-sdk/src/errors/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/errors/mixin.ts)_ ## Methods (1) `parseError` ## Signatures ### `parseError` (1 signature) ```ts public parseError(error: object): object { return { ...error, decoded: this.recurseParseError(error) } ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Event logs URL: https://www.bosonprotocol.io/docs/reference/core-sdk/event-logs > Public methods on the Event logs mixin of @bosonprotocol/core-sdk. # `Event logs` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `EventLogsMixin`_ _Source: [`packages/core-sdk/src/event-logs/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/event-logs/mixin.ts)_ ## Methods (2) `getConditionalCommitAuthorizedEventLogs`, `getEventLogs` ## Signatures ### `getConditionalCommitAuthorizedEventLogs` (1 signature) Returns conditionalCommitAuthorized event logs from subgraph. ```ts public async getConditionalCommitAuthorizedEventLogs( queryVars?: subgraph.GetConditionalCommitAuthorizedEventLogsQueryQueryVariables ) ``` ### `getEventLogs` (1 signature) Returns event logs from subgraph. ```ts public async getEventLogs( queryVars?: subgraph.GetEventLogsQueryQueryVariables ) ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Exchanges URL: https://www.bosonprotocol.io/docs/reference/core-sdk/exchanges > Public methods on the Exchanges mixin of @bosonprotocol/core-sdk. # `Exchanges` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `ExchangesMixin`_ _Source: [`packages/core-sdk/src/exchanges/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/exchanges/mixin.ts)_ ## Methods (16) `cancelVoucher`, `commitToBuyerOffer`, `commitToConditionalOffer`, `commitToOffer`, `completeExchange`, `completeExchangeBatch`, `createOfferAndCommit`, `expireVoucher`, `getCommittedExchangeIdFromLogs`, `getExchangeById`, `getExchanges`, `getExchangeTokenId`, `parseTokenId`, `redeemVoucher`, `revokeVoucher`, `signFullOffer` ## Signatures ### `cancelVoucher` (3 signatures) Cancels an existing voucher by calling the `ExchangeHandlerContract`. Callable by buyer. ```ts public async cancelVoucher( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async cancelVoucher( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async cancelVoucher( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `commitToBuyerOffer` (3 signatures) Commits to a buyer initiated offer by calling the `ExchangeCommitFacet`. This transaction only succeeds if the buyer has deposited enough funds to lock the offer's price. ```ts public async commitToBuyerOffer( offerId: BigNumberish, sellerParams: SellerOfferArgs, overrides: Partial<{ returnTxInfo: true; }> ): Promise public async commitToBuyerOffer( offerId: BigNumberish, sellerParams?: SellerOfferArgs, overrides?: Partial<{ returnTxInfo?: false | undefined; }> ): Promise public async commitToBuyerOffer( offerId: BigNumberish, sellerParams: SellerOfferArgs = {}, overrides: Partial<{ returnTxInfo?: boolean; }> = {} ): Promise ``` ### `commitToConditionalOffer` (3 signatures) Commits to a conditional offer by calling the `ExchangeHandlerContract`. This transaction only succeeds if the seller has deposited funds. ```ts public async commitToConditionalOffer( offerId: BigNumberish, tokenId: BigNumberish, overrides: Partial<{ buyer: string; returnTxInfo: true; }> ): Promise public async commitToConditionalOffer( offerId: BigNumberish, tokenId: BigNumberish, overrides?: Partial<{ buyer: string; returnTxInfo?: false | undefined; }> ): Promise public async commitToConditionalOffer( offerId: BigNumberish, tokenId: BigNumberish, overrides: Partial<{ buyer: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `commitToOffer` (3 signatures) Commits to a seller initiated offer by calling the `ExchangeCommitFacet`. This transaction only succeeds if the seller has deposited enough funds to lock the offer's sellerDeposit. ```ts public async commitToOffer( offerId: BigNumberish, overrides: Partial<{ buyer: string; returnTxInfo: true; }> ): Promise public async commitToOffer( offerId: BigNumberish, overrides?: Partial<{ buyer: string; returnTxInfo?: false | undefined; }> ): Promise public async commitToOffer( offerId: BigNumberish, overrides: Partial<{ buyer: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `completeExchange` (3 signatures) Completes an existing voucher by calling the `ExchangeHandlerContract`. Callable by buyer or seller assistant. ```ts public async completeExchange( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async completeExchange( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async completeExchange( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `completeExchangeBatch` (3 signatures) Completes a batch of existing vouchers by calling the `ExchangeHandlerContract`. Callable by buyer or seller assistant. ```ts public async completeExchangeBatch( exchangeIds: BigNumberish[], returnTxInfo: true ): Promise public async completeExchangeBatch( exchangeIds: BigNumberish[], returnTxInfo?: false | undefined ): Promise public async completeExchangeBatch( exchangeIds: BigNumberish[], returnTxInfo?: boolean ): Promise ``` ### `createOfferAndCommit` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createOfferAndCommit( createOfferAndCommitArgs: FullOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createOfferAndCommit( createOfferAndCommitArgs: FullOfferArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async createOfferAndCommit( createOfferAndCommitArgs: FullOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `expireVoucher` (3 signatures) Expires an existing voucher by calling the `ExchangeHandlerContract`. ```ts public async expireVoucher( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async expireVoucher( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async expireVoucher( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `getCommittedExchangeIdFromLogs` (1 signature) Utility method to retrieve the created `exchangeId` from logs after calling `commitToOffer` or `commitToBuyerOffer`. ```ts public getCommittedExchangeIdFromLogs(logs: Log[]): string | null { return ( getValueFromLogs({ iface: bosonExchangeHandlerIface, logs, eventArgsKey: "exchangeId", eventName: "BuyerCommitted" }) || getValueFromLogs({ iface: bosonExchangeHandlerIface, logs, eventArgsKey: "exchangeId", eventName: "SellerCommitted" }) ) ``` ### `getExchangeById` (1 signature) Returns exchange entity from subgraph. ```ts public async getExchangeById( exchangeId: BigNumberish, queryVars?: subgraph.GetExchangeByIdQueryQueryVariables ): Promise ``` ### `getExchanges` (1 signature) Returns exchange entities from subgraph. ```ts public async getExchanges( queryVars?: subgraph.GetExchangesQueryQueryVariables ): Promise ``` ### `getExchangeTokenId` (1 signature) ```ts public getExchangeTokenId( exchangeId: BigNumberish, offerId: BigNumberish ): BigNumber ``` ### `parseTokenId` (1 signature) ```ts public parseTokenId(tokenId: BigNumberish): { offerId: BigNumber ``` ### `redeemVoucher` (3 signatures) Redeems an existing voucher by calling the `ExchangeHandlerContract`. Callable by buyer. ```ts public async redeemVoucher( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async redeemVoucher( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async redeemVoucher( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `revokeVoucher` (3 signatures) Revokes an existing voucher by calling the `ExchangeHandlerContract`. Callable by seller `assistant`. ```ts public async revokeVoucher( exchangeId: BigNumberish, returnTxInfo: true ): Promise public async revokeVoucher( exchangeId: BigNumberish, returnTxInfo?: false | undefined ): Promise public async revokeVoucher( exchangeId: BigNumberish, returnTxInfo?: boolean ): Promise ``` ### `signFullOffer` (3 signatures) ```ts public async signFullOffer(args: { fullOfferArgsUnsigned: Omit; returnTypedDataToSign: true; }): Promise public async signFullOffer(args: { fullOfferArgsUnsigned: Omit; returnTypedDataToSign?: false; }): Promise> public async signFullOffer(args: { fullOfferArgsUnsigned: Omit; returnTypedDataToSign?: boolean; }): Promise> ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Funds URL: https://www.bosonprotocol.io/docs/reference/core-sdk/funds > Public methods on the Funds mixin of @bosonprotocol/core-sdk. # `Funds` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `FundsMixin`_ _Source: [`packages/core-sdk/src/funds/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/funds/mixin.ts)_ ## Methods (5) `depositFunds`, `getFunds`, `getFundsById`, `withdrawAllAvailableFunds`, `withdrawFunds` ## Signatures ### `depositFunds` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async depositFunds( entityId: BigNumberish, fundsAmount: BigNumberish, fundsTokenAddress: string, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async depositFunds( entityId: BigNumberish, fundsAmount: BigNumberish, fundsTokenAddress?: string, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async depositFunds( entityId: BigNumberish, fundsAmount: BigNumberish, fundsTokenAddress: string = AddressZero, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `getFunds` (1 signature) Returns funds entities from subgraph. ```ts public async getFunds( queryVars?: subgraph.GetFundsQueryVariables ): Promise ``` ### `getFundsById` (1 signature) Returns funds entity from subgraph. ```ts public async getFundsById( fundsId: BigNumberish, queryVars?: subgraph.GetFundsByIdQueryVariables ): Promise ``` ### `withdrawAllAvailableFunds` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async withdrawAllAvailableFunds( entityId: BigNumberish, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async withdrawAllAvailableFunds( entityId: BigNumberish, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async withdrawAllAvailableFunds( entityId: BigNumberish, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `withdrawFunds` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async withdrawFunds( entityId: BigNumberish, tokensToWithdraw: Array, amountsToWithdraw: Array, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async withdrawFunds( entityId: BigNumberish, tokensToWithdraw: Array, amountsToWithdraw: Array, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async withdrawFunds( entityId: BigNumberish, tokensToWithdraw: Array, amountsToWithdraw: Array, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Groups URL: https://www.bosonprotocol.io/docs/reference/core-sdk/groups > Public methods on the Groups mixin of @bosonprotocol/core-sdk. # `Groups` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `GroupsMixin`_ _Source: [`packages/core-sdk/src/groups/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/groups/mixin.ts)_ ## Methods (1) `createGroup` ## Signatures ### `createGroup` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createGroup( groupToCreate: CreateGroupArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createGroup( groupToCreate: CreateGroupArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async createGroup( groupToCreate: CreateGroupArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Marketplaces URL: https://www.bosonprotocol.io/docs/reference/core-sdk/marketplace > Public methods on the Marketplaces mixin of @bosonprotocol/core-sdk. # `Marketplaces` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `MarketplaceMixin`_ _Source: [`packages/core-sdk/src/marketplaces/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/marketplaces/mixin.ts)_ ## Methods (1) `marketplace` ## Signatures ### `marketplace` (1 signature) ```ts public marketplace( type: T, handler: T extends MarketplaceType.OPENSEA ? OpenSeaSDKHandler : MarketplaceHandler, feeRecipient: string ): MarketplaceTypeToClass[T] ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: MetaTx URL: https://www.bosonprotocol.io/docs/reference/core-sdk/meta-tx > Public methods on the MetaTx mixin of @bosonprotocol/core-sdk. # `MetaTx` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `MetaTxMixin`_ _Source: [`packages/core-sdk/src/meta-tx/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/meta-tx/mixin.ts)_ ## Methods (42) `executeMetaTransaction`, `getResubmittedMetaTx`, `relayBiconomyMetaTransaction`, `relayMetaTransaction`, `signMetaTx`, `signMetaTxCallExternalContract`, `signMetaTxCancelVoucher`, `signMetaTxCommitToBuyerOffer`, `signMetaTxCommitToConditionalOffer`, `signMetaTxCommitToConditionalOfferAndRedeemVoucher`, `signMetaTxCommitToOffer`, `signMetaTxCommitToOfferAndRedeemVoucher`, `signMetaTxCompleteExchange`, `signMetaTxCompleteExchangeBatch`, `signMetaTxCreateGroup`, `signMetaTxCreateOffer`, `signMetaTxCreateOfferAndCommit`, `signMetaTxCreateOfferBatch`, `signMetaTxCreateOfferCommitAndRedeem`, `signMetaTxCreateOfferWithCondition`, `signMetaTxCreateSeller`, `signMetaTxDepositFunds`, `signMetaTxEscalateDispute`, `signMetaTxExpireVoucher`, `signMetaTxExtendDisputeTimeout`, `signMetaTxExtendOffer`, `signMetaTxExtendOfferBatch`, `signMetaTxOptInToSellerUpdate`, `signMetaTxPreMint`, `signMetaTxRaiseDispute`, `signMetaTxRedeemVoucher`, `signMetaTxReserveRange`, `signMetaTxResolveDispute`, `signMetaTxRetractDispute`, `signMetaTxRevokeVoucher`, `signMetaTxSetApprovalForAll`, `signMetaTxSetApprovalForAllToContract`, `signMetaTxUpdateSeller`, `signMetaTxUpdateSellerAndOptIn`, `signMetaTxVoidOffer`, `signMetaTxVoidOfferBatch`, `signMetaTxWithdrawFunds` ## Signatures ### `executeMetaTransaction` (1 signature) Execute a signed meta transaction directly on-chain (no Biconomy relayer). Routes to `executeMetaTransaction` or `executeMetaTransactionWithTokenTransferAuthorization` depending on whether `transferAuthorizations` is provided and non-empty. The wallet backing the SDK pays the gas; pass `overrides.userAddress` when the meta-tx signer differs from that wallet. ```ts public async executeMetaTransaction( metaTxParams: { functionName: string; functionSignature: BytesLike; nonce: BigNumberish; sigR: BytesLike; sigS: BytesLike; sigV: BigNumberish; transferAuthorizations?: TransferAuthorization[]; }, overrides: Partial<{ userAddress: string; contractAddress: string; }> = {} ): Promise ``` ### `getResubmittedMetaTx` (1 signature) Returns information of submitted meta transaction. See https://docs.biconomy.io/api/native-meta-tx/get-retried-hashes. ```ts public async getResubmittedMetaTx( originalMetaTxHash: string, overrides: Partial<{ contractAddress: string; metaTxConfig: Partial & { apiId: string }>; metaTransactionMethod: string; }> = {} ): Promise ``` ### `relayBiconomyMetaTransaction` (1 signature) ```ts public async relayBiconomyMetaTransaction( contractAddress: string, metaTxParams: { request: Parameters< (typeof handler)["relayBiconomyMetaTransaction"] >[0]["metaTx"]["params"]["request"]; domainSeparator: Parameters< (typeof handler)["relayBiconomyMetaTransaction"] >[0]["metaTx"]["params"]["domainSeparator"]; signature: Parameters< (typeof handler)["relayBiconomyMetaTransaction"] >[0]["metaTx"]["params"]["signature"]; }, overrides: Partial<{ userAddress: string; metaTxConfig: Partial< Omit & { apiId: string } >; metaTransactionMethod: string; }> = {} ): Promise ``` ### `relayMetaTransaction` (1 signature) Relay a meta transaction, ```ts public async relayMetaTransaction( metaTxParams: { functionName: string; functionSignature: BytesLike; nonce: BigNumberish; sigR: BytesLike; sigS: BytesLike; sigV: BigNumberish; transferAuthorizations?: TransferAuthorization[]; }, overrides: Partial<{ userAddress: string; contractAddress: string; metaTxConfig: Partial & { apiId: string }>; metaTransactionMethod: string; }> = {} ): Promise ``` ### `signMetaTx` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTx( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTx( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTx( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCallExternalContract` (1 signature) ```ts public async signMetaTxCallExternalContract( args: Omit< Parameters[0], | "web3Lib" | "bosonVoucherAddress" | "chainId" | "nonce" | "forwarderAddress" | "batchId" | "forwarderAbi" | "relayerUrl" >, overrides: Partial<{ batchId?: BigNumberish; txGas?: number; }> = {} ) ``` ### `signMetaTxCancelVoucher` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCancelVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCancelVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCancelVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCommitToBuyerOffer` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCommitToBuyerOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCommitToBuyerOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCommitToBuyerOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCommitToConditionalOffer` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCommitToConditionalOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCommitToConditionalOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCommitToConditionalOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCommitToConditionalOfferAndRedeemVoucher` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCommitToConditionalOfferAndRedeemVoucher( args: Omit< Parameters< typeof handler.signMetaTxCommitToConditionalOfferAndRedeemVoucher >[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCommitToConditionalOfferAndRedeemVoucher( args: Omit< Parameters< typeof handler.signMetaTxCommitToConditionalOfferAndRedeemVoucher >[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCommitToConditionalOfferAndRedeemVoucher( args: Omit< Parameters< typeof handler.signMetaTxCommitToConditionalOfferAndRedeemVoucher >[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCommitToOffer` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCommitToOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCommitToOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCommitToOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCommitToOfferAndRedeemVoucher` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCommitToOfferAndRedeemVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCommitToOfferAndRedeemVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCommitToOfferAndRedeemVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCompleteExchange` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCompleteExchange( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCompleteExchange( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCompleteExchange( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCompleteExchangeBatch` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCompleteExchangeBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCompleteExchangeBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCompleteExchangeBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCreateGroup` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCreateGroup( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCreateGroup( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCreateGroup( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCreateOffer` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCreateOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCreateOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCreateOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCreateOfferAndCommit` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCreateOfferAndCommit( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCreateOfferAndCommit( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCreateOfferAndCommit( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCreateOfferBatch` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCreateOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCreateOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCreateOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCreateOfferCommitAndRedeem` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCreateOfferCommitAndRedeem( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCreateOfferCommitAndRedeem( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCreateOfferCommitAndRedeem( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCreateOfferWithCondition` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCreateOfferWithCondition( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCreateOfferWithCondition( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCreateOfferWithCondition( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxCreateSeller` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxCreateSeller( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxCreateSeller( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxCreateSeller( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxDepositFunds` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxDepositFunds( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxDepositFunds( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxDepositFunds( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxEscalateDispute` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxEscalateDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxEscalateDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxEscalateDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxExpireVoucher` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxExpireVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxExpireVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxExpireVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxExtendDisputeTimeout` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxExtendDisputeTimeout( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxExtendDisputeTimeout( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxExtendDisputeTimeout( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxExtendOffer` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxExtendOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxExtendOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxExtendOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxExtendOfferBatch` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxExtendOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxExtendOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxExtendOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxOptInToSellerUpdate` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxOptInToSellerUpdate( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxOptInToSellerUpdate( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxOptInToSellerUpdate( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxPreMint` (1 signature) ```ts public async signMetaTxPreMint( args: Omit< Parameters[0], | "web3Lib" | "bosonVoucherAddress" | "chainId" | "forwarderAddress" | "batchId" | "forwarderAbi" | "relayerUrl" >, overrides: Partial<{ batchId: BigNumberish; }> = {} ) ``` ### `signMetaTxRaiseDispute` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxRaiseDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxRaiseDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxRaiseDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxRedeemVoucher` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxRedeemVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxRedeemVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxRedeemVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxReserveRange` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxReserveRange( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" | "to" > & { to: "seller" | "contract"; returnTypedDataToSign: true } ): Promise public async signMetaTxReserveRange( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" | "to" > & { to: "seller" | "contract"; returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxReserveRange( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" | "to" > & { to: "seller" | "contract" } ): Promise ``` ### `signMetaTxResolveDispute` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxResolveDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxResolveDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxResolveDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxRetractDispute` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxRetractDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxRetractDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxRetractDispute( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxRevokeVoucher` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxRevokeVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxRevokeVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxRevokeVoucher( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxSetApprovalForAll` (1 signature) ```ts public async signMetaTxSetApprovalForAll( args: Omit< Parameters[0], | "web3Lib" | "bosonVoucherAddress" | "chainId" | "nonce" | "forwarderAddress" | "batchId" | "forwarderAbi" | "relayerUrl" >, overrides: Partial<{ batchId: BigNumberish; }> = {} ) ``` ### `signMetaTxSetApprovalForAllToContract` (1 signature) ```ts public async signMetaTxSetApprovalForAllToContract( args: Omit< Parameters[0], | "web3Lib" | "bosonVoucherAddress" | "chainId" | "nonce" | "forwarderAddress" | "batchId" | "forwarderAbi" | "relayerUrl" > & { bosonVoucherAddress?: string; }, overrides: Partial<{ batchId?: BigNumberish; txGas?: number; }> = {} ) ``` ### `signMetaTxUpdateSeller` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxUpdateSeller( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxUpdateSeller( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxUpdateSeller( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxUpdateSellerAndOptIn` (1 signature) ```ts public async signMetaTxUpdateSellerAndOptIn( sellerUpdates: accounts.UpdateSellerArgs ): Promise ``` ### `signMetaTxVoidOffer` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxVoidOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxVoidOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxVoidOffer( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxVoidOfferBatch` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxVoidOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxVoidOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxVoidOfferBatch( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ### `signMetaTxWithdrawFunds` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signMetaTxWithdrawFunds( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign: true } ): Promise public async signMetaTxWithdrawFunds( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > & { returnTypedDataToSign?: false | undefined } ): Promise public async signMetaTxWithdrawFunds( args: Omit< Parameters[0], "web3Lib" | "metaTxHandlerAddress" | "chainId" > ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Metadata (mixin) URL: https://www.bosonprotocol.io/docs/reference/core-sdk/metadata-mixin > Public methods on the Metadata (mixin) mixin of @bosonprotocol/core-sdk. # `Metadata (mixin)` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `MetadataMixin`_ _Source: [`packages/core-sdk/src/metadata/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/metadata/mixin.ts)_ ## Methods (10) `getAllProductsWithNotVoidedVariants`, `getAllProductsWithVariants`, `getBaseMetadataEntities`, `getBundleMetadataEntities`, `getMetadata`, `getProductV1MetadataEntities`, `getProductV1Products`, `getProductWithVariants`, `getProductWithVariantsFromOfferId`, `storeMetadata` ## Signatures ### `getAllProductsWithNotVoidedVariants` (1 signature) ```ts public async getAllProductsWithNotVoidedVariants( queryVars?: subgraph.GetAllProductsWithNotVoidedVariantsQueryQueryVariables ): Promise< subgraph.BaseProductV1ProductWithNotVoidedVariantsFieldsFragment[] > ``` ### `getAllProductsWithVariants` (1 signature) ```ts public getAllProductsWithVariants( queryVars?: subgraph.GetProductV1ProductsWithVariantsQueryQueryVariables ): Promise ``` ### `getBaseMetadataEntities` (1 signature) Returns `BASE` type offer metadata entities from subgraph. ```ts public async getBaseMetadataEntities( queryVars?: subgraph.GetBaseMetadataEntitiesQueryQueryVariables ): Promise ``` ### `getBundleMetadataEntities` (1 signature) Returns `BUNDLE` type offer metadata entities from subgraph. ```ts public async getBundleMetadataEntities( queryVars?: subgraph.GetBundleMetadataEntitiesQueryQueryVariables ): Promise ``` ### `getMetadata` (1 signature) Returns supported offer metadata from passed in `MetadataStorage` instance. storage instance. ```ts public async getMetadata( metadataHashOrUri: string ): Promise ``` ### `getProductV1MetadataEntities` (1 signature) Returns `PRODUCT_V1` type offer metadata entities from subgraph. ```ts public async getProductV1MetadataEntities( queryVars?: subgraph.GetProductV1MetadataEntitiesQueryQueryVariables ): Promise ``` ### `getProductV1Products` (1 signature) ```ts public async getProductV1Products( queryVars?: subgraph.GetProductV1ProductsQueryQueryVariables ): Promise ``` ### `getProductWithVariants` (1 signature) ```ts public async getProductWithVariants( sellerId: string, productUuid: string ): Promise< ``` ### `getProductWithVariantsFromOfferId` (1 signature) ```ts public getProductWithVariantsFromOfferId( offerId: string ): ReturnType ``` ### `storeMetadata` (1 signature) Stores supported offer metadata via the MetadataStorage instance which was passed in at construction. ```ts public async storeMetadata(metadata: OfferOrSellerMetadata): Promise { if (!this._metadataStorage) ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Native meta-tx URL: https://www.bosonprotocol.io/docs/reference/core-sdk/native-meta-tx > Public methods on the Native meta-tx mixin of @bosonprotocol/core-sdk. # `Native meta-tx` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `NativeMetaTxMixin`_ _Source: [`packages/core-sdk/src/native-meta-tx/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/native-meta-tx/mixin.ts)_ ## Methods (3) `executeNativeMetaTransaction`, `relayNativeMetaTransaction`, `signNativeMetaTxApproveExchangeToken` ## Signatures ### `executeNativeMetaTransaction` (1 signature) Execute a signed native meta transaction directly on-chain (no Biconomy relayer). The wallet backing the SDK pays the gas; pass `overrides.userAddress` when the meta-tx signer differs from that wallet. ```ts public async executeNativeMetaTransaction( contractAddress: string, metaTxParams: { functionSignature: BytesLike; sigR: BytesLike; sigS: BytesLike; sigV: BigNumberish; }, overrides: Partial<{ userAddress: string; }> = {} ): Promise ``` ### `relayNativeMetaTransaction` (1 signature) Relay a native meta transaction, ```ts public async relayNativeMetaTransaction( contractAddress: string, metaTxParams: { functionSignature: BytesLike; sigR: BytesLike; sigS: BytesLike; sigV: BigNumberish; }, overrides: Partial<{ userAddress: string; metaTxConfig: Partial< Omit & { apiId: string } >; metaTransactionMethod: string; }> = {} ): Promise ``` ### `signNativeMetaTxApproveExchangeToken` (3 signatures) Overload: returnTypedDataToSign is true → returns UnsignedMetaTx ```ts public async signNativeMetaTxApproveExchangeToken( exchangeToken: string, value: BigNumberish, overrides: Partial<{ spender: string }> & { returnTypedDataToSign: true } ): Promise public async signNativeMetaTxApproveExchangeToken( exchangeToken: string, value: BigNumberish, overrides?: Partial<{ spender: string; returnTypedDataToSign?: false }> ): Promise public async signNativeMetaTxApproveExchangeToken( exchangeToken: string, value: BigNumberish, overrides: Partial<{ spender: string; returnTypedDataToSign: boolean; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Offers URL: https://www.bosonprotocol.io/docs/reference/core-sdk/offers > Public methods on the Offers mixin of @bosonprotocol/core-sdk. # `Offers` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `OfferMixin`_ _Source: [`packages/core-sdk/src/offers/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/offers/mixin.ts)_ ## Methods (27) `approveExchangeToken`, `checkExchangePolicy`, `checkTokenGatedCondition`, `createOffer`, `createOfferBatch`, `extendOffer`, `extendOfferBatch`, `getCreatedBuyerIdFromLogs`, `getCreatedGroupIdsFromLogs`, `getCreatedOfferIdFromLogs`, `getCreatedOfferIdsFromLogs`, `getCreatedSellerIdFromLogs`, `getExchangeTokenAllowance`, `getExchangeTokenInfo`, `getOfferById`, `getOfferHash`, `getOffers`, `getProtocolAllowance`, `renderContractualAgreement`, `renderContractualAgreementForOffer`, `reserveRange`, `updateOfferRoyaltyRecipients`, `updateOfferRoyaltyRecipientsBatch`, `voidNonListedOffer`, `voidNonListedOfferBatch`, `voidOffer`, `voidOfferBatch` ## Signatures ### `approveExchangeToken` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async approveExchangeToken( exchangeToken: string, value: BigNumberish, overrides: Partial<{ spender: string; returnTxInfo: true; }> ): Promise public async approveExchangeToken( exchangeToken: string, value: BigNumberish, overrides?: Partial<{ spender: string; returnTxInfo?: false | undefined; }> ): Promise public async approveExchangeToken( exchangeToken: string, value: BigNumberish, overrides: Partial<{ spender: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `checkExchangePolicy` (1 signature) Check a given offer meets ExchangePolicy rules. ```ts public async checkExchangePolicy( offerId: BigNumberish, rules: offers.CheckExchangePolicyRules ): Promise ``` ### `checkTokenGatedCondition` (1 signature) ```ts public async checkTokenGatedCondition( offerId: subgraph.OfferFieldsFragment["id"], buyerAddress: string ): Promise ``` ### `createOffer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createOffer( offerToCreate: offers.CreateOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createOffer( offerToCreate: offers.CreateOfferArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async createOffer( offerToCreate: offers.CreateOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createOfferBatch` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createOfferBatch( offersToCreate: offers.CreateOfferArgs[], overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createOfferBatch( offersToCreate: offers.CreateOfferArgs[], overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async createOfferBatch( offersToCreate: offers.CreateOfferArgs[], overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `extendOffer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async extendOffer( offerId: BigNumberish, validUntil: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async extendOffer( offerId: BigNumberish, validUntil: BigNumberish, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async extendOffer( offerId: BigNumberish, validUntil: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `extendOfferBatch` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async extendOfferBatch( offerIds: BigNumberish[], validUntil: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async extendOfferBatch( offerIds: BigNumberish[], validUntil: BigNumberish, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async extendOfferBatch( offerIds: BigNumberish[], validUntil: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `getCreatedBuyerIdFromLogs` (1 signature) Utility method to retrieve the created `buyerId` from logs after calling `createBuyer` ```ts public getCreatedBuyerIdFromLogs(logs: Log[]): string | null { const buyerId = getValueFromLogs({ iface: accounts.iface.bosonAccountHandlerIface, logs, eventArgsKey: "buyerId", eventName: "BuyerCreated" }) ``` ### `getCreatedGroupIdsFromLogs` (1 signature) Utility method to retrieve the created `groupIds` from logs after calling `createGroup` ```ts public getCreatedGroupIdsFromLogs(logs: Log[]): string[] { return getValuesFromLogs({ iface: groups.iface.bosonGroupHandlerIface, logs, eventArgsKey: "groupId", eventName: "GroupCreated" }).map((g) => g.toString()) ``` ### `getCreatedOfferIdFromLogs` (1 signature) Utility method to retrieve the created `offerId` from logs after calling `createOffer` or `createOfferAndSeller`. ```ts public getCreatedOfferIdFromLogs(logs: Log[]): string | null { const offerId = getValueFromLogs({ iface: offers.iface.bosonOfferHandlerIface, logs, eventArgsKey: "offerId", eventName: "OfferCreated" }) ``` ### `getCreatedOfferIdsFromLogs` (1 signature) Utility method to retrieve the created `offerIds` from logs after calling `createOfferBatch` ```ts public getCreatedOfferIdsFromLogs(logs: Log[]): string[] { return getValuesFromLogs({ iface: offers.iface.bosonOfferHandlerIface, logs, eventArgsKey: "offerId", eventName: "OfferCreated" }).map((o) => o.toString()) ``` ### `getCreatedSellerIdFromLogs` (1 signature) Utility method to retrieve the created `sellerId` from logs after calling `createSeller` or `createOfferAndSeller`. ```ts public getCreatedSellerIdFromLogs(logs: Log[]): string | null { const sellerId = getValueFromLogs({ iface: accounts.iface.bosonAccountHandlerIface, logs, eventArgsKey: "sellerId", eventName: "SellerCreated" }) ``` ### `getExchangeTokenAllowance` (1 signature) Returns the current allowance of the given token by calling the contract. ```ts public async getExchangeTokenAllowance( exchangeToken: string, overrides: Partial<{ spender: string; owner: string; }> = {} ): Promise ``` ### `getExchangeTokenInfo` (1 signature) Returns `name`, `decimals` and `symbol` of the given token by calling the contract. ```ts public async getExchangeTokenInfo( exchangeToken: string ): Promise ``` ### `getOfferById` (1 signature) Returns offer from subgraph. ```ts public async getOfferById( offerId: BigNumberish, queryVars?: offers.subgraph.SingleOfferQueryVariables ): Promise ``` ### `getOfferHash` (1 signature) ```ts public async getOfferHash( fullOfferArgsUnsigned: Omit, overrides: Partial<{ contractAddress: string; }> = {} ) ``` ### `getOffers` (1 signature) Returns offers from subgraph. ```ts public async getOffers( queryVars?: subgraph.GetOffersQueryQueryVariables ): Promise ``` ### `getProtocolAllowance` (1 signature) ```ts public async getProtocolAllowance( exchangeToken: string, overrides: Partial<{ spender: string; owner: string; }> = {} ): Promise ``` ### `renderContractualAgreement` (1 signature) Renders contractual agreement for given offer. ```ts public async renderContractualAgreement( template: string, offerData: offers.CreateOfferArgs, offerMetadata: offers.AdditionalOfferMetadata ): Promise ``` ### `renderContractualAgreementForOffer` (1 signature) Renders contractual agreement for given offer. ```ts public async renderContractualAgreementForOffer( offerId: BigNumberish ): Promise ``` ### `reserveRange` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async reserveRange( offerId: BigNumberish, length: BigNumberish, to: "seller" | "contract", overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async reserveRange( offerId: BigNumberish, length: BigNumberish, to: "seller" | "contract", overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async reserveRange( offerId: BigNumberish, length: BigNumberish, to: "seller" | "contract", overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `updateOfferRoyaltyRecipients` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async updateOfferRoyaltyRecipients( offerId: BigNumberish, royaltyInfo: RoyaltyInfo, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async updateOfferRoyaltyRecipients( offerId: BigNumberish, royaltyInfo: RoyaltyInfo, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async updateOfferRoyaltyRecipients( offerId: BigNumberish, royaltyInfo: RoyaltyInfo, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `updateOfferRoyaltyRecipientsBatch` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async updateOfferRoyaltyRecipientsBatch( offerIds: BigNumberish[], royaltyInfo: RoyaltyInfo, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async updateOfferRoyaltyRecipientsBatch( offerIds: BigNumberish[], royaltyInfo: RoyaltyInfo, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async updateOfferRoyaltyRecipientsBatch( offerIds: BigNumberish[], royaltyInfo: RoyaltyInfo, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `voidNonListedOffer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async voidNonListedOffer( fullOffer: Omit< FullOfferArgs, | "offerCreator" | "committer" | "signature" | "conditionalTokenId" | "sellerOfferParams" >, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async voidNonListedOffer( fullOffer: Omit< FullOfferArgs, | "offerCreator" | "committer" | "signature" | "conditionalTokenId" | "sellerOfferParams" >, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async voidNonListedOffer( fullOffer: Omit< FullOfferArgs, | "offerCreator" | "committer" | "signature" | "conditionalTokenId" | "sellerOfferParams" >, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `voidNonListedOfferBatch` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async voidNonListedOfferBatch( fullOffers: Omit< FullOfferArgs, | "offerCreator" | "committer" | "signature" | "conditionalTokenId" | "sellerOfferParams" >[], overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async voidNonListedOfferBatch( fullOffers: Omit< FullOfferArgs, | "offerCreator" | "committer" | "signature" | "conditionalTokenId" | "sellerOfferParams" >[], overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async voidNonListedOfferBatch( fullOffers: Omit< FullOfferArgs, | "offerCreator" | "committer" | "signature" | "conditionalTokenId" | "sellerOfferParams" >[], overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `voidOffer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async voidOffer( offerId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async voidOffer( offerId: BigNumberish, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async voidOffer( offerId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `voidOfferBatch` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async voidOfferBatch( offerIds: BigNumberish[], overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async voidOfferBatch( offerIds: BigNumberish[], overrides?: Partial<{ contractAddress: string; returnTxInfo?: false | undefined; }> ): Promise public async voidOfferBatch( offerIds: BigNumberish[], overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Orchestration URL: https://www.bosonprotocol.io/docs/reference/core-sdk/orchestration > Public methods on the Orchestration mixin of @bosonprotocol/core-sdk. # `Orchestration` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `OrchestrationMixin`_ _Source: [`packages/core-sdk/src/orchestration/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/orchestration/mixin.ts)_ ## Methods (10) `commitToConditionalOfferAndRedeemVoucher`, `commitToOfferAndRedeemVoucher`, `createOfferCommitAndRedeem`, `createOfferWithCondition`, `createPremintedOfferAddToGroup`, `createPremintedOfferWithCondition`, `createSellerAndOfferWithCondition`, `createSellerAndPremintedOffer`, `createSellerAndPremintedOfferWithCondition`, `raiseAndEscalateDispute` ## Signatures ### `commitToConditionalOfferAndRedeemVoucher` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async commitToConditionalOfferAndRedeemVoucher( offerId: BigNumberish, tokenId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async commitToConditionalOfferAndRedeemVoucher( offerId: BigNumberish, tokenId: BigNumberish, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async commitToConditionalOfferAndRedeemVoucher( offerId: BigNumberish, tokenId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `commitToOfferAndRedeemVoucher` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async commitToOfferAndRedeemVoucher( offerId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async commitToOfferAndRedeemVoucher( offerId: BigNumberish, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async commitToOfferAndRedeemVoucher( offerId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createOfferCommitAndRedeem` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createOfferCommitAndRedeem( createOfferAndCommitArgs: FullOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async createOfferCommitAndRedeem( createOfferAndCommitArgs: FullOfferArgs, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false; }> ): Promise public async createOfferCommitAndRedeem( createOfferAndCommitArgs: FullOfferArgs, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createOfferWithCondition` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createOfferWithCondition( offerToCreate: offers.CreateOfferArgs, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createOfferWithCondition( offerToCreate: offers.CreateOfferArgs, condition: ConditionStruct, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async createOfferWithCondition( offerToCreate: offers.CreateOfferArgs, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createPremintedOfferAddToGroup` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createPremintedOfferAddToGroup( offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, groupId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createPremintedOfferAddToGroup( offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, groupId: BigNumberish, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async createPremintedOfferAddToGroup( offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, groupId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createPremintedOfferWithCondition` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createPremintedOfferWithCondition( offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createPremintedOfferWithCondition( offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, condition: ConditionStruct, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async createPremintedOfferWithCondition( offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createSellerAndOfferWithCondition` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createSellerAndOfferWithCondition( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createSellerAndOfferWithCondition( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, condition: ConditionStruct, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async createSellerAndOfferWithCondition( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createSellerAndPremintedOffer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createSellerAndPremintedOffer( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createSellerAndPremintedOffer( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async createSellerAndPremintedOffer( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `createSellerAndPremintedOfferWithCondition` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async createSellerAndPremintedOfferWithCondition( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async createSellerAndPremintedOfferWithCondition( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, condition: ConditionStruct, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async createSellerAndPremintedOfferWithCondition( sellerToCreate: accounts.CreateSellerArgs, offerToCreate: offers.CreateOfferArgs, premintParameters: PremintParametersStruct, condition: ConditionStruct, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `raiseAndEscalateDispute` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async raiseAndEscalateDispute( exchangeId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo: true; }> ): Promise public async raiseAndEscalateDispute( exchangeId: BigNumberish, overrides?: Partial<{ contractAddress: string; returnTxInfo?: false; }> ): Promise public async raiseAndEscalateDispute( exchangeId: BigNumberish, overrides: Partial<{ contractAddress: string; returnTxInfo?: boolean; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Price discovery URL: https://www.bosonprotocol.io/docs/reference/core-sdk/price-discovery > Public methods on the Price discovery mixin of @bosonprotocol/core-sdk. # `Price discovery` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `PriceDiscoveryMixin`_ _Source: [`packages/core-sdk/src/price-discovery/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/price-discovery/mixin.ts)_ ## Methods (1) `commitToPriceDiscoveryOffer` ## Signatures ### `commitToPriceDiscoveryOffer` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async commitToPriceDiscoveryOffer( buyer: string, tokenIdOrOfferId: BigNumberish, priceDiscovery: PriceDiscoveryStruct, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async commitToPriceDiscoveryOffer( buyer: string, tokenIdOrOfferId: BigNumberish, priceDiscovery: PriceDiscoveryStruct, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async commitToPriceDiscoveryOffer( buyer: string, tokenIdOrOfferId: BigNumberish, priceDiscovery: PriceDiscoveryStruct, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Protocol config URL: https://www.bosonprotocol.io/docs/reference/core-sdk/protocol-config > Public methods on the Protocol config mixin of @bosonprotocol/core-sdk. # `Protocol config` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `ProtocolConfigMixin`_ _Source: [`packages/core-sdk/src/protocol-config/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/protocol-config/mixin.ts)_ ## Methods (1) `getMaxRoyaltyPercentage` ## Signatures ### `getMaxRoyaltyPercentage` (1 signature) ```ts public async getMaxRoyaltyPercentage( overrides: Partial<{ contractAddress: string; }> = {} ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Seaport URL: https://www.bosonprotocol.io/docs/reference/core-sdk/seaport > Public methods on the Seaport mixin of @bosonprotocol/core-sdk. # `Seaport` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `SeaportMixin`_ _Source: [`packages/core-sdk/src/seaport/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/seaport/mixin.ts)_ _No public methods detected — this mixin is likely composition-only._ ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Search URL: https://www.bosonprotocol.io/docs/reference/core-sdk/search > Public methods on the Search mixin of @bosonprotocol/core-sdk. # `Search` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `SearchMixin`_ _Source: [`packages/core-sdk/src/search/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/search/mixin.ts)_ ## Methods (1) `searchProducts` ## Signatures ### `searchProducts` (1 signature) Search for products matching the given keywords. By default, only products that are currently valid (based on their validity dates) are returned. This behavior can be controlled via the `includeInvalidOffers` option in the queryVars parameter. ordering (productsOrderBy, productsOrderDirection), filtering (productsFilter), and includeInvalidOffers flag to control validity filtering. ```ts public async searchProducts( keywords: string[], queryVars?: subgraph.SearchProductsQueryQueryVariables & { includeInvalidOffers?: boolean; } ): Promise ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Core SDK: Subgraph (client) URL: https://www.bosonprotocol.io/docs/reference/core-sdk/subgraph-client > Public methods on the Subgraph (client) mixin of @bosonprotocol/core-sdk. # `Subgraph (client)` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `SubgraphMixin`_ _Source: [`packages/core-sdk/src/subgraph/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/subgraph/mixin.ts)_ ## Methods (2) `getSubgraphBlockNumber`, `waitForGraphNodeIndexing` ## Signatures ### `getSubgraphBlockNumber` (1 signature) ```ts public async getSubgraphBlockNumber(): Promise { const client = new GraphQLClient(this._subgraphUrl) ``` ### `waitForGraphNodeIndexing` (1 signature) ```ts public async waitForGraphNodeIndexing( blockNumberOrTransaction?: number | TransactionResponse | TransactionReceipt ) ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — Types & enums URL: https://www.bosonprotocol.io/docs/reference/core-sdk/types > Generated from @bosonprotocol/common and core-sdk type definitions. # Types & enums > :::info > **Auto-generated stub** — regenerated from `@bosonprotocol/common` and `@bosonprotocol/core-sdk` type definitions. > ::: Key types you'll encounter: - `Offer`, `OfferDates`, `OfferDurations` - `Exchange`, `ExchangeState` - `Dispute`, `DisputeState` - `Seller`, `Buyer`, `DisputeResolver`, `Agent` - `Condition`, `TokenType`, `EvaluationMethod`, `GatingType` - `MetaTransactionConfig`, `MetaTxConfig` - `Web3LibAdapter`, `MetadataStorage` Enum values: - `ExchangeState`: `Committed | Redeemed | Disputed | Completed | Cancelled | Revoked | Expired` - `DisputeState`: `Resolving | Retracted | Resolved | Decided | Refused | Escalated | Expired` - `TokenType`: `0=ERC20 | 1=ERC721 | 2=ERC1155` - `EvaluationMethod`: `0=None | 1=Threshold | 2=TokenRange` - `GatingType`: `0=PerAddress | 1=PerTokenId` ## Source - [`@bosonprotocol/common/src`](https://github.com/bosonprotocol/core-components/tree/main/packages/common/src) --- # Reference — Core SDK: Voucher URL: https://www.bosonprotocol.io/docs/reference/core-sdk/voucher > Public methods on the Voucher mixin of @bosonprotocol/core-sdk. # `Voucher` mixin :::info **Generated from `core-components/packages/core-sdk/src//mixin.ts`. Edit the TypeScript source, not this page.** ::: _Class: `VoucherMixin`_ _Source: [`packages/core-sdk/src/voucher/mixin.ts`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/voucher/mixin.ts)_ ## Methods (10) `approveProtocolForAll`, `burnPremintedVouchers`, `getAvailablePreMints`, `getRangeByOfferId`, `isApprovedForAll`, `preMint`, `setApprovalForAllToContract`, `setContractURI`, `transferFrom`, `validateSeaportOrders` ## Signatures ### `approveProtocolForAll` (1 signature) ```ts public async approveProtocolForAll( overrides: Partial<{ operator: string; contractAddress: string; }> = {} ) ``` ### `burnPremintedVouchers` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async burnPremintedVouchers( offerId: BigNumberish, amount: BigNumberish, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async burnPremintedVouchers( offerId: BigNumberish, amount: BigNumberish, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async burnPremintedVouchers( offerId: BigNumberish, amount: BigNumberish, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `getAvailablePreMints` (1 signature) Gets the number of vouchers available to be pre-minted for an offer. ```ts public async getAvailablePreMints( offerId: BigNumberish, overrides: Partial<{ contractAddress: string; }> = {} ): Promise ``` ### `getRangeByOfferId` (1 signature) Gets the range for an offer. ```ts public async getRangeByOfferId( offerId: BigNumberish, overrides: Partial<{ contractAddress: string; }> = {} ): Promise ``` ### `isApprovedForAll` (1 signature) ```ts public async isApprovedForAll( operator: string, overrides: Partial<{ owner: string; contractAddress: string; }> = {} ) ``` ### `preMint` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async preMint( offerId: BigNumberish, amount: BigNumberish, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async preMint( offerId: BigNumberish, amount: BigNumberish, overrides?: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async preMint( offerId: BigNumberish, amount: BigNumberish, overrides: Partial<{ contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `setApprovalForAllToContract` (1 signature) ```ts public async setApprovalForAllToContract( operator: string, approved: boolean, overrides: Partial<{ contractAddress: string; }> = {} ) ``` ### `setContractURI` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async setContractURI( contractURI: string, collectionIndex: BigNumberish, overrides: Partial<{ txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async setContractURI( contractURI: string, collectionIndex: BigNumberish, overrides?: Partial<{ txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async setContractURI( contractURI: string, collectionIndex: BigNumberish, overrides: Partial<{ txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `transferFrom` (3 signatures) Overload: returnTxInfo is true → returns TransactionRequest ```ts public async transferFrom( offerId: BigNumberish, to: BigNumberish, tokenId: BigNumberish, overrides: Partial<{ owner: BigNumberish; contractAddress: string; txRequest: TransactionRequest; returnTxInfo: true; }> ): Promise public async transferFrom( offerId: BigNumberish, to: BigNumberish, tokenId: BigNumberish, overrides?: Partial<{ owner: BigNumberish; contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: false | undefined; }> ): Promise public async transferFrom( offerId: BigNumberish, to: BigNumberish, tokenId: BigNumberish, overrides: Partial<{ owner: BigNumberish; contractAddress: string; txRequest: TransactionRequest; returnTxInfo?: boolean; }> = {} ): Promise ``` ### `validateSeaportOrders` (1 signature) ```ts public async validateSeaportOrders( openseaConduit: string, seaportContract: string, orders: SeaportOrder[], overrides: Partial<{ contractAddress: string; approveIfNeeded: boolean; }> = { approveIfNeeded: true } ) ``` ## Related - [Reference → CoreSDK class](./core-sdk) — how mixins compose. - [Concepts → The Boson model](/concepts/model). --- # Reference — MCP tools URL: https://www.bosonprotocol.io/docs/reference/mcp-tools > All 54 MCP tools, auto-generated from the live agentic-commerce server's tools/list. # MCP tools :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schemas in the source repo, not this page.** ::: For the integration overview, see [Tooling → MCP](/tooling/mcp). For the canonical signing flow, see [Build for AI agents → The 3-step signing pattern](/agents/signing). ### Seller & buyer - [`create_buyer`](./mcp-tools/create_buyer) — Creates a buyer account for signerAddress. - [`create_seller`](./mcp-tools/create_seller) — Creates a seller account on Boson Protocol. - [`get_sellers`](./mcp-tools/get_sellers) — Reads seller account entities from the Boson subgraph. - [`get_sellers_by_address`](./mcp-tools/get_sellers_by_address) — Reads seller entities associated with a specific Ethereum address. - [`update_seller`](./mcp-tools/update_seller) — Updates an existing seller account. ### Offer management - [`create_offer`](./mcp-tools/create_offer) — Creates a product offer. - [`create_offer_with_condition`](./mcp-tools/create_offer_with_condition) — Creates an offer gated by token-ownership (e.g. - [`get_offers`](./mcp-tools/get_offers) — Reads offer listings from the Boson subgraph. - [`render_contractual_agreement`](./mcp-tools/render_contractual_agreement) — Renders the legal contractual agreement text/HTML for an offer using its offer data and metadata. - [`sign_full_offer`](./mcp-tools/sign_full_offer) — Generates EIP-712 typed data for a non-listed (private) offer that the offer creator must sign. - [`store_base_metadata`](./mcp-tools/store_base_metadata) — Stores a Base metadata object to IPFS. - [`store_bundle_item_nft_metadata`](./mcp-tools/store_bundle_item_nft_metadata) — Stores a single NFT bundle item's metadata to IPFS. - [`store_bundle_item_product_v1_metadata`](./mcp-tools/store_bundle_item_product_v1_metadata) — Stores a single ProductV1 bundle item's metadata to IPFS. - [`store_bundle_metadata`](./mcp-tools/store_bundle_metadata) — Stores a Bundle metadata object to IPFS. - [`store_product_v1_metadata`](./mcp-tools/store_product_v1_metadata) — Stores a ProductV1 metadata object to IPFS. - [`validate_metadata`](./mcp-tools/validate_metadata) — Validates a metadata object against the Boson Protocol schema (PRODUCT_V1, BUNDLE, BASE, etc.) without storing it. - [`void_non_listed_offer`](./mcp-tools/void_non_listed_offer) — Voids a private (non-listed) offer before it is fulfilled. - [`void_non_listed_offer_batch`](./mcp-tools/void_non_listed_offer_batch) — Voids multiple private offers atomically. - [`void_offer`](./mcp-tools/void_offer) — Voids a listed offer so it can no longer be committed to. ### Exchange management - [`approve_exchange_token`](./mcp-tools/approve_exchange_token) — Grants ERC-20 allowance to the Boson Protocol contract. - [`cancel_voucher`](./mcp-tools/cancel_voucher) — Cancels a committed voucher. - [`commit_to_buyer_offer`](./mcp-tools/commit_to_buyer_offer) — Fulfils a buyer-initiated offer (creator='BUYER') by the seller. - [`commit_to_offer`](./mcp-tools/commit_to_offer) — Commits to an offer, creating an exchange and minting a voucher NFT. - [`complete_exchange`](./mcp-tools/complete_exchange) — Completes an exchange after the dispute period expires, releasing funds to the seller. - [`create_offer_and_commit`](./mcp-tools/create_offer_and_commit) — Atomically creates a private offer and commits a specific buyer in one transaction. - [`get_exchanges`](./mcp-tools/get_exchanges) — Reads exchange records (offer commitments) from the Boson subgraph. - [`redeem_voucher`](./mcp-tools/redeem_voucher) — Redeems a voucher, signalling physical receipt of goods and starting the dispute period clock. - [`revoke_voucher`](./mcp-tools/revoke_voucher) — Revokes a committed (not yet redeemed) voucher on behalf of the seller, returning funds to the buyer. ### Dispute management - [`create_dispute_resolution_proposal`](./mcp-tools/create_dispute_resolution_proposal) — Generates EIP-712 typed data for a mutual dispute resolution proposal. - [`decide_dispute`](./mcp-tools/decide_dispute) — Decides an escalated dispute. - [`escalate_dispute`](./mcp-tools/escalate_dispute) — Escalates a stale dispute to the third-party dispute resolver. - [`expire_dispute`](./mcp-tools/expire_dispute) — Marks a dispute as expired after its resolution period passes. - [`expire_dispute_batch`](./mcp-tools/expire_dispute_batch) — Marks multiple expired disputes in one transaction. - [`expire_escalated_dispute`](./mcp-tools/expire_escalated_dispute) — Expires an escalated dispute once the resolver's response period passes without a decision. - [`extend_dispute_timeout`](./mcp-tools/extend_dispute_timeout) — Extends the deadline of an active dispute. - [`get_dispute_by_id`](./mcp-tools/get_dispute_by_id) — Reads a single dispute by its ID (equals the exchangeId). - [`get_dispute_resolvers`](./mcp-tools/get_dispute_resolvers) — Reads registered dispute resolver entities. - [`get_disputes`](./mcp-tools/get_disputes) — Reads dispute records from the Boson subgraph. - [`raise_dispute`](./mcp-tools/raise_dispute) — Raises a dispute on a redeemed exchange. - [`refuse_escalated_dispute`](./mcp-tools/refuse_escalated_dispute) — Dispute resolver refuses to decide an escalated dispute. - [`resolve_dispute`](./mcp-tools/resolve_dispute) — Resolves a dispute by mutual agreement. - [`retract_dispute`](./mcp-tools/retract_dispute) — Retracts a raised dispute, releasing seller deposit and restoring completion flow. ### Funds - [`deposit_funds`](./mcp-tools/deposit_funds) — Deposits ERC-20 or native tokens into an entity's protocol treasury (e.g. - [`get_funds`](./mcp-tools/get_funds) — Reads treasury fund balances for sellers and buyers from the Boson subgraph. - [`withdraw_funds`](./mcp-tools/withdraw_funds) — Withdraws funds from an entity's protocol treasury to the entity's treasury address. ### Meta-transactions & broadcast - [`send_forwarded_meta_transaction`](./mcp-tools/send_forwarded_meta_transaction) — Relays a Biconomy forwarded meta-transaction (ERC-20 gas payment). - [`send_meta_transaction`](./mcp-tools/send_meta_transaction) — Relays a pre-signed meta-transaction via Biconomy so the user pays no gas. - [`send_native_meta_transaction`](./mcp-tools/send_native_meta_transaction) — Relays a native meta-transaction (EIP-712 signed function call) via Biconomy. - [`send_signed_transaction`](./mcp-tools/send_signed_transaction) — Broadcasts a signed raw Ethereum transaction to the network. ### Agent registry - [`get_registered_agents`](./mcp-tools/get_registered_agents) — Returns all dACP agents registered with this MCP server instance, with their associated protocol entities and roles. - [`register_agent`](./mcp-tools/register_agent) — Registers a dACP agent with this MCP server instance, associating its Ethereum identities and roles. ### Configuration - [`get_config_ids`](./mcp-tools/get_config_ids) — Returns all valid configId values for this server. - [`get_supported_tokens`](./mcp-tools/get_supported_tokens) — Returns ERC-20 tokens accepted as exchange tokens on the given configId deployment. ### Other - [`get_all_products_with_not_voided_variants`](./mcp-tools/get_all_products_with_not_voided_variants) — Reads product groupings with at least one non-voided variant from the Boson subgraph. ## Per-tool page format Each tool's page includes: - **Description** — the tool's purpose, from the server. - **Category** — heuristic grouping (seller/buyer, offer, exchange, dispute, funds, meta-tx, agent registry, config). - **Returns unsigned tx?** — heuristic flag. - **Input schema** — auto-generated table from the JSON Schema reported by the server. - **Related** — links to the SSoT signing page and the integration overview. ## Source - Server: `https://mcp-staging.bosonprotocol.io/mcp` - Schema authority: [`@bosonprotocol/agentic-commerce/src/boson/mcp-server`](https://github.com/bosonprotocol/agentic-commerce/tree/main/src/boson/mcp-server) - Example flows: [`agentic-commerce/e2e/boson/tests/complete-marketplace-journeys.test.ts`](https://github.com/bosonprotocol/agentic-commerce/blob/main/e2e/boson/tests/complete-marketplace-journeys.test.ts) --- # approve_exchange_token URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/approve_exchange_token > Grants ERC-20 allowance to the Boson Protocol contract. # `approve_exchange_token` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Grants ERC-20 allowance to the Boson Protocol contract. Must be called before commit_to_offer or deposit_funds when using non-native exchange tokens. 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 | | --- | --- | --- | --- | | `exchangeTokenAddress` | string | yes | ERC-20 token contract address to approve for the Boson Protocol diamond. | | `amount` | string | yes | Allowance in wei. Use max uint256 string for unlimited: '115792089237316195423570985008687907853269984665640564039457584007913129639935'. | | `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. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # cancel_voucher URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/cancel_voucher > Cancels a committed voucher. # `cancel_voucher` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Cancels a committed voucher. Caller must be the buyer (voucher holder). Buyer forfeits buyerCancellationPenalty; remainder is refunded. 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # commit_to_buyer_offer URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/commit_to_buyer_offer > Fulfils a buyer-initiated offer (creator='BUYER') by the seller. # `commit_to_buyer_offer` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Fulfils a buyer-initiated offer (creator='BUYER') by the seller. Caller must be the seller. Provide matching collateral. 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 | | --- | --- | --- | --- | | `offerId` | string | yes | ID of a buyer-initiated offer (creator='BUYER') to commit to. The seller fulfils the offer. | | `collectionIndex` | — | no | | | `royaltyInfo` | object | no | | | `drMutualizerAddress` | — | no | Valid Ethereum address (e.g. '0xAbCd...' or '0xabcd...'). Mixed-case addresses are checksum-validated; all-lowercase and all-uppercase addresses are also accepted. | | `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. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # commit_to_offer URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/commit_to_offer > Commits to an offer, creating an exchange and minting a voucher NFT. # `commit_to_offer` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Commits to an offer, creating an exchange and minting a voucher NFT. Caller is the buyer (signerAddress) unless 'buyer' param is set. For ERC-20 offers, call approve_exchange_token first. 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 | | --- | --- | --- | --- | | `offerId` | string | yes | ID of the active offer to commit to. Creates an exchange and mints a voucher NFT. | | `buyer` | string | no | Optional buyer address if different from signerAddress. When set, executionMode must be 'direct'. | | `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. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # complete_exchange URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/complete_exchange > Completes an exchange after the dispute period expires, releasing funds to the seller. # `complete_exchange` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Completes an exchange after the dispute period expires, releasing funds to the seller. Can be called by seller after dispute period or by buyer at any time post-redemption. 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # create_buyer URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/create_buyer > Creates a buyer account for signerAddress. # `create_buyer` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Creates a buyer account for signerAddress. Required before a buyer can commit to seller-initiated offers for the first time. No prerequisites. Returns unsigned transaction data. **Category:** Seller & buyer. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # create_dispute_resolution_proposal URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/create_dispute_resolution_proposal > Generates EIP-712 typed data for a mutual dispute resolution proposal. # `create_dispute_resolution_proposal` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Generates EIP-712 typed data for a mutual dispute resolution proposal. Both buyer and seller must sign the same buyerPercentBasisPoints value locally with their wallet (EIP-712) before calling resolve_dispute. Returns: typed data structure (domain, types, message). **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `buyerPercentBasisPoints` | — | yes | Proposed percentage of disputed funds for the buyer, 0–10000 (basis points). The counterparty must sign this same value. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # create_offer URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/create_offer > Creates a product offer. # `create_offer` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Creates a product offer. Caller must have a seller account (create_seller first). Prerequisite: store metadata first with store_product_v1_metadata or store_base_metadata to get metadataUri/metadataHash. All dates in milliseconds; amounts as strings in wei. Returns unsigned tx — sign locally with your wallet → send_signed_transaction, or executionMode='metaTx'. **Category:** Offer 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'. | | `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` | string | no | ERC-20 token accepted for payment. Omit or use address(0) for native ETH. Call get_supported_tokens for valid values. | | `price` | string | 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. | | `collectionIndex` | — | no | Index of the seller's NFT collection for vouchers. Omit to use default (index 0). | | `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). | | `royaltyInfo` | object | no | | | `creator` | `SELLER` \| `BUYER` | no | 'SELLER' (default) = seller creates offer. 'BUYER' = buyer-initiated offer, quantity must be 1. | | `drMutualizerAddress` | — | no | Optional dispute resolver mutualizer contract address that pools resolution funds. | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # create_offer_and_commit URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/create_offer_and_commit > Atomically creates a private offer and commits a specific buyer in one transaction. # `create_offer_and_commit` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # create_offer_with_condition URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/create_offer_with_condition > Creates an offer gated by token-ownership (e.g. # `create_offer_with_condition` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Creates an offer gated by token-ownership (e.g. hold an ERC-721 to commit). Same prerequisites as create_offer plus a condition object specifying the gate token, method, and threshold. Returns unsigned transaction data. **Category:** Offer 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 | | --- | --- | --- | --- | | `condition` | object | yes | | | `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'. | | `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. | | `collectionIndex` | — | no | Index of the seller's NFT collection for vouchers. Omit to use default (index 0). | | `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). | | `royaltyInfo` | object | no | | | `creator` | `SELLER` \| `BUYER` | no | 'SELLER' (default) = seller creates offer. 'BUYER' = buyer-initiated offer, quantity must be 1. | | `drMutualizerAddress` | — | no | Optional dispute resolver mutualizer contract address that pools resolution funds. | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # create_seller URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/create_seller > Creates a seller account on Boson Protocol. # `create_seller` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Creates a seller account on Boson Protocol. Required before creating any offers. signerAddress is automatically set as admin, assistant, and treasury. Provide seller metadata and royaltyPercentage. Returns unsigned transaction data. **Category:** Seller & buyer. **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'. | | `type` | string | yes | | | `name` | string | no | | | `description` | string | no | | | `legalTradingName` | string | no | | | `kind` | string | yes | | | `website` | string | no | | | `images` | object[] | no | | | `contactLinks` | object[] | no | | | `contactPreference` | string | yes | | | `socialLinks` | object[] | no | | | `salesChannels` | object[] | no | | | `contractUri` | string | yes | URI for OpenSea-style storefront metadata. Can be IPFS URI or empty string. | | `royaltyPercentage` | string | yes | Default resale royalty in basis points (0–10000). Applied to all offers unless overridden. | | `authTokenId` | — | yes | NFT token ID used as auth token (e.g. Lens profile ID). Pass '0' if not using auth tokens. | | `authTokenType` | number | yes | Auth token type: 0=None, 1=Lens Protocol profile NFT. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # decide_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/decide_dispute > Decides an escalated dispute. # `decide_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Decides an escalated dispute. Caller must be the dispute resolver assigned to the offer's disputeResolverId. Specify buyerPercent in basis points (0=all to seller, 10000=all to buyer). Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `buyerPercent` | — | yes | Percentage of disputed funds to buyer in basis points (0–10000). 10000 = all to buyer, 0 = all to seller. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # deposit_funds URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/deposit_funds > Deposits ERC-20 or native tokens into an entity's protocol treasury (e.g. # `deposit_funds` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Deposits ERC-20 or native tokens into an entity's protocol treasury (e.g. seller deposit). For ERC-20, call approve_exchange_token first. Returns unsigned transaction data. **Category:** Funds. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `entityId` | string | yes | Numeric ID of the entity to credit. Must match signerAddress's seller account. | | `tokenAddress` | string | yes | ERC-20 token to deposit. Use address(0) for native ETH. | | `amount` | — | yes | Amount in wei. For ERC-20, approve_exchange_token must be called first. Pass as string. | | `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. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # escalate_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/escalate_dispute > Escalates a stale dispute to the third-party dispute resolver. # `escalate_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Escalates a stale dispute to the third-party dispute resolver. Caller must be the buyer. Resolver's escalation fee must be covered. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # expire_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/expire_dispute > Marks a dispute as expired after its resolution period passes. # `expire_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Marks a dispute as expired after its resolution period passes. Permissionless — anyone can call. Exchange must be in 'Disputed' state past its timeout. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # expire_dispute_batch URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/expire_dispute_batch > Marks multiple expired disputes in one transaction. # `expire_dispute_batch` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Marks multiple expired disputes in one transaction. All exchanges must be in 'Disputed' state past their respective timeouts. Permissionless. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeIds` | string[] | yes | Array of exchange IDs whose dispute period has passed. All must be in 'Disputed' state past their timeout. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # expire_escalated_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/expire_escalated_dispute > Expires an escalated dispute once the resolver's response period passes without a decision. # `expire_escalated_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Expires an escalated dispute once the resolver's response period passes without a decision. Permissionless — anyone can call. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # extend_dispute_timeout URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/extend_dispute_timeout > Extends the deadline of an active dispute. # `extend_dispute_timeout` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Extends the deadline of an active dispute. Dispute must be in 'Resolving' state. Either party can call this. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `newDisputeTimeout` | — | yes | New absolute Unix timestamp in SECONDS (not ms) for the dispute deadline. Must be later than current timeout. | | `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` | string | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_all_products_with_not_voided_variants URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_all_products_with_not_voided_variants > Reads product groupings with at least one non-voided variant from the Boson subgraph. # `get_all_products_with_not_voided_variants` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads product groupings with at least one non-voided variant from the Boson subgraph. Useful for storefront displays. Supports pagination and ordering. Read-only. **Category:** Other. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `productsSkip` | number | no | | | `productsFirst` | number | no | | | `productsOrderBy` | `allVariantsVoided` \| `brand` \| `brand__id` \| `brand__name` \| `category` \| `category__id` \| `category__name` \| `description` \| `details_category` \| `details_offerCategory` \| `details_personalisation` \| `details_sections` \| `details_subCategory` \| `details_subCategory2` \| `details_tags` \| `disputeResolverId` \| `id` \| `identification_productId` \| `identification_productIdType` \| `identification_sKU` \| `maxValidFromDate` \| `maxValidUntilDate` \| `minValidFromDate` \| `minValidUntilDate` \| `notVoidedVariants` \| `offerCategory` \| `packaging_dimensions_height` \| `packaging_dimensions_length` \| `packaging_dimensions_unit` \| `packaging_dimensions_width` \| `packaging_packageQuantity` \| `packaging_weight_unit` \| `packaging_weight_value` \| `personalisation` \| `productV1Seller` \| `productV1Seller__contactPreference` \| `productV1Seller__defaultVersion` \| `productV1Seller__description` \| `productV1Seller__externalUrl` \| `productV1Seller__id` \| `productV1Seller__name` \| `productV1Seller__sellerId` \| `productV1Seller__tokenId` \| `productionInformation_brandName` \| `productionInformation_manufacturer` \| `productionInformation_manufacturerPartNumber` \| `productionInformation_materials` \| `productionInformation_modelNumber` \| `salesChannels` \| `sections` \| `sellerId` \| `subCategory` \| `subCategory2` \| `subCategory2__id` \| `subCategory2__name` \| `subCategory__id` \| `subCategory__name` \| `tags` \| `title` \| `uuid` \| `variants` \| `version` \| `visuals_images` \| `visuals_videos` | no | | | `productsOrderDirection` | `asc` \| `desc` | no | | | `productsFilter` | object | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_config_ids URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_config_ids > Returns all valid configId values for this server. # `get_config_ids` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Returns all valid configId values for this server. Call first to discover which network/deployment to use. No auth required. **Category:** Configuration. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema _No input parameters._ ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_dispute_by_id URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_dispute_by_id > Reads a single dispute by its ID (equals the exchangeId). # `get_dispute_by_id` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads a single dispute by its ID (equals the exchangeId). Read-only. Returns: dispute entity with state, timeout, buyerPercent. Use get_disputes to search first. **Category:** Dispute management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `disputeId` | string | yes | Numeric ID of the dispute to retrieve. Note: disputeId equals the exchangeId of the associated exchange. | | `queryVars` | — | no | Optional additional subgraph query variables for field selection. Leave empty for default fields. | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_dispute_resolvers URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_dispute_resolvers > Reads registered dispute resolver entities. # `get_dispute_resolvers` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads registered dispute resolver entities. Use this to find a valid disputeResolverId for create_offer. Read-only. Returns: array of resolvers with ID, fees, escalationResponsePeriod, and supported tokens. **Category:** Dispute management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `disputeResolversSkip` | number | no | | | `disputeResolversFirst` | number | no | | | `disputeResolversOrderBy` | `active` \| `admin` \| `assistant` \| `clerk` \| `escalationResponsePeriod` \| `fees` \| `funds` \| `id` \| `logs` \| `metadataUri` \| `offers` \| `pendingDisputeResolver` \| `pendingDisputeResolver__admin` \| `pendingDisputeResolver__assistant` \| `pendingDisputeResolver__clerk` \| `pendingDisputeResolver__id` \| `sellerAllowList` \| `treasury` | no | | | `disputeResolversOrderDirection` | `asc` \| `desc` | no | | | `disputeResolversFilter` | object | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_disputes URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_disputes > Reads dispute records from the Boson subgraph. # `get_disputes` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads dispute records from the Boson subgraph. Supports pagination, ordering, and filtering by buyer/seller/state. Read-only. Returns: array of dispute entities with exchangeId, state, timeout. **Category:** Dispute management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `disputesSkip` | number | no | | | `disputesFirst` | number | no | | | `disputesOrderBy` | `buyer` \| `buyerPercent` \| `buyer__active` \| `buyer__id` \| `buyer__wallet` \| `decidedDate` \| `disputeResolver` \| `disputeResolver__active` \| `disputeResolver__admin` \| `disputeResolver__assistant` \| `disputeResolver__clerk` \| `disputeResolver__escalationResponsePeriod` \| `disputeResolver__id` \| `disputeResolver__metadataUri` \| `disputeResolver__treasury` \| `disputedDate` \| `escalatedDate` \| `exchange` \| `exchangeId` \| `exchange__cancelledDate` \| `exchange__committedDate` \| `exchange__completedDate` \| `exchange__disputed` \| `exchange__disputedDate` \| `exchange__expired` \| `exchange__finalizedDate` \| `exchange__id` \| `exchange__mutualizerAddress` \| `exchange__redeemedDate` \| `exchange__revokedDate` \| `exchange__state` \| `exchange__validUntilDate` \| `finalizedDate` \| `id` \| `refusedDate` \| `resolvedDate` \| `retractedDate` \| `seller` \| `seller__active` \| `seller__admin` \| `seller__assistant` \| `seller__authTokenId` \| `seller__authTokenType` \| `seller__clerk` \| `seller__id` \| `seller__metadataUri` \| `seller__sellerId` \| `seller__treasury` \| `seller__voucherCloneAddress` \| `state` \| `timeout` | no | | | `disputesOrderDirection` | `asc` \| `desc` | no | | | `disputesFilter` | object | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_exchanges URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_exchanges > Reads exchange records (offer commitments) from the Boson subgraph. # `get_exchanges` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads exchange records (offer commitments) from the Boson subgraph. Filter by buyer/seller/state. Read-only. Returns: array of exchanges with offerId, state (Committed/Redeemed/Completed/Disputed/Cancelled/Revoked), and voucher details. **Category:** Exchange management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `exchangesSkip` | number | no | | | `exchangesFirst` | number | no | | | `exchangesOrderBy` | `buyer` \| `buyer__active` \| `buyer__id` \| `buyer__wallet` \| `cancelledDate` \| `committedDate` \| `completedDate` \| `dispute` \| `disputeResolver` \| `disputeResolver__active` \| `disputeResolver__admin` \| `disputeResolver__assistant` \| `disputeResolver__clerk` \| `disputeResolver__escalationResponsePeriod` \| `disputeResolver__id` \| `disputeResolver__metadataUri` \| `disputeResolver__treasury` \| `dispute__buyerPercent` \| `dispute__decidedDate` \| `dispute__disputedDate` \| `dispute__escalatedDate` \| `dispute__exchangeId` \| `dispute__finalizedDate` \| `dispute__id` \| `dispute__refusedDate` \| `dispute__resolvedDate` \| `dispute__retractedDate` \| `dispute__state` \| `dispute__timeout` \| `disputed` \| `disputedDate` \| `expired` \| `finalizedDate` \| `id` \| `mutualizerAddress` \| `offer` \| `offer__agentFee` \| `offer__agentId` \| `offer__buyerCancelPenalty` \| `offer__buyerId` \| `offer__collectionIndex` \| `offer__createdAt` \| `offer__creator` \| `offer__disputePeriodDuration` \| `offer__disputeResolverId` \| `offer__id` \| `offer__metadataHash` \| `offer__metadataUri` \| `offer__numberOfCommits` \| `offer__numberOfRedemptions` \| `offer__price` \| `offer__priceType` \| `offer__protocolFee` \| `offer__quantityAvailable` \| `offer__quantityInitial` \| `offer__resolutionPeriodDuration` \| `offer__sellerDeposit` \| `offer__sellerId` \| `offer__validFromDate` \| `offer__validUntilDate` \| `offer__voided` \| `offer__voidedAt` \| `offer__voucherRedeemableFromDate` \| `offer__voucherRedeemableUntilDate` \| `offer__voucherValidDuration` \| `protocolFeeCollected` \| `protocolFeeCollected__amount` \| `protocolFeeCollected__exchangeId` \| `protocolFeeCollected__exchangeToken` \| `protocolFeeCollected__executedBy` \| `protocolFeeCollected__id` \| `redeemedDate` \| `revokedDate` \| `seller` \| `seller__active` \| `seller__admin` \| `seller__assistant` \| `seller__authTokenId` \| `seller__authTokenType` \| `seller__clerk` \| `seller__id` \| `seller__metadataUri` \| `seller__sellerId` \| `seller__treasury` \| `seller__voucherCloneAddress` \| `state` \| `validUntilDate` | no | | | `exchangesOrderDirection` | `asc` \| `desc` | no | | | `exchangesFilter` | object | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_funds URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_funds > Reads treasury fund balances for sellers and buyers from the Boson subgraph. # `get_funds` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads treasury fund balances for sellers and buyers from the Boson subgraph. Supports pagination/ordering/filtering. Read-only — signerAddress not required. Returns: array of { tokenAddress, availableAmount, accountId }. **Category:** Funds. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `fundsSkip` | number | no | | | `fundsFirst` | number | no | | | `fundsOrderBy` | `account` \| `accountId` \| `account__createdAt` \| `account__creationTxHash` \| `account__entityId` \| `account__id` \| `account__metadataURI` \| `availableAmount` \| `changes` \| `id` \| `token` \| `tokenAddress` \| `token__address` \| `token__decimals` \| `token__id` \| `token__name` \| `token__symbol` | no | | | `fundsOrderDirection` | `asc` \| `desc` | no | | | `fundsFilter` | object | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_offers URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_offers > Reads offer listings from the Boson subgraph. # `get_offers` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads offer listings from the Boson subgraph. Supports pagination, ordering, and filtering (e.g. by sellerId). Read-only. Returns: array of offers with price, deposit, dates, and quantity. **Category:** Offer management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `offersSkip` | number | no | | | `offersFirst` | number | no | | | `offersOrderBy` | `agentFee` \| `agentId` \| `buyer` \| `buyerCancelPenalty` \| `buyerId` \| `buyer__active` \| `buyer__id` \| `buyer__wallet` \| `collection` \| `collectionIndex` \| `collection__collectionIndex` \| `collection__externalId` \| `collection__externalIdHash` \| `collection__id` \| `collection__sellerId` \| `condition` \| `condition__gatingType` \| `condition__id` \| `condition__maxCommits` \| `condition__maxTokenId` \| `condition__method` \| `condition__minTokenId` \| `condition__threshold` \| `condition__tokenAddress` \| `condition__tokenType` \| `createdAt` \| `creator` \| `disputePeriodDuration` \| `disputeResolutionTerms` \| `disputeResolutionTerms__buyerEscalationDeposit` \| `disputeResolutionTerms__disputeResolverId` \| `disputeResolutionTerms__escalationResponsePeriod` \| `disputeResolutionTerms__feeAmount` \| `disputeResolutionTerms__id` \| `disputeResolutionTerms__mutualizerAddress` \| `disputeResolver` \| `disputeResolverId` \| `disputeResolver__active` \| `disputeResolver__admin` \| `disputeResolver__assistant` \| `disputeResolver__clerk` \| `disputeResolver__escalationResponsePeriod` \| `disputeResolver__id` \| `disputeResolver__metadataUri` \| `disputeResolver__treasury` \| `exchangeToken` \| `exchangeToken__address` \| `exchangeToken__decimals` \| `exchangeToken__id` \| `exchangeToken__name` \| `exchangeToken__symbol` \| `exchanges` \| `id` \| `metadata` \| `metadataHash` \| `metadataUri` \| `metadata__animationUrl` \| `metadata__condition` \| `metadata__createdAt` \| `metadata__description` \| `metadata__externalUrl` \| `metadata__id` \| `metadata__image` \| `metadata__licenseUrl` \| `metadata__name` \| `metadata__numberOfCommits` \| `metadata__numberOfRedemptions` \| `metadata__quantityAvailable` \| `metadata__schemaUrl` \| `metadata__type` \| `metadata__validFromDate` \| `metadata__validUntilDate` \| `metadata__voided` \| `numberOfCommits` \| `numberOfRedemptions` \| `price` \| `priceType` \| `protocolFee` \| `quantityAvailable` \| `quantityInitial` \| `range` \| `range__end` \| `range__id` \| `range__minted` \| `range__owner` \| `range__start` \| `resolutionPeriodDuration` \| `royaltyInfos` \| `seller` \| `sellerDeposit` \| `sellerId` \| `seller__active` \| `seller__admin` \| `seller__assistant` \| `seller__authTokenId` \| `seller__authTokenType` \| `seller__clerk` \| `seller__id` \| `seller__metadataUri` \| `seller__sellerId` \| `seller__treasury` \| `seller__voucherCloneAddress` \| `validFromDate` \| `validUntilDate` \| `voided` \| `voidedAt` \| `voucherRedeemableFromDate` \| `voucherRedeemableUntilDate` \| `voucherValidDuration` | no | | | `offersOrderDirection` | `asc` \| `desc` | no | | | `offersFilter` | object | no | | | `includeExchanges` | boolean | no | | | `exchangesSkip` | number | no | | | `exchangesFirst` | number | no | | | `exchangesOrderBy` | `buyer` \| `buyer__active` \| `buyer__id` \| `buyer__wallet` \| `cancelledDate` \| `committedDate` \| `completedDate` \| `dispute` \| `disputeResolver` \| `disputeResolver__active` \| `disputeResolver__admin` \| `disputeResolver__assistant` \| `disputeResolver__clerk` \| `disputeResolver__escalationResponsePeriod` \| `disputeResolver__id` \| `disputeResolver__metadataUri` \| `disputeResolver__treasury` \| `dispute__buyerPercent` \| `dispute__decidedDate` \| `dispute__disputedDate` \| `dispute__escalatedDate` \| `dispute__exchangeId` \| `dispute__finalizedDate` \| `dispute__id` \| `dispute__refusedDate` \| `dispute__resolvedDate` \| `dispute__retractedDate` \| `dispute__state` \| `dispute__timeout` \| `disputed` \| `disputedDate` \| `expired` \| `finalizedDate` \| `id` \| `mutualizerAddress` \| `offer` \| `offer__agentFee` \| `offer__agentId` \| `offer__buyerCancelPenalty` \| `offer__buyerId` \| `offer__collectionIndex` \| `offer__createdAt` \| `offer__creator` \| `offer__disputePeriodDuration` \| `offer__disputeResolverId` \| `offer__id` \| `offer__metadataHash` \| `offer__metadataUri` \| `offer__numberOfCommits` \| `offer__numberOfRedemptions` \| `offer__price` \| `offer__priceType` \| `offer__protocolFee` \| `offer__quantityAvailable` \| `offer__quantityInitial` \| `offer__resolutionPeriodDuration` \| `offer__sellerDeposit` \| `offer__sellerId` \| `offer__validFromDate` \| `offer__validUntilDate` \| `offer__voided` \| `offer__voidedAt` \| `offer__voucherRedeemableFromDate` \| `offer__voucherRedeemableUntilDate` \| `offer__voucherValidDuration` \| `protocolFeeCollected` \| `protocolFeeCollected__amount` \| `protocolFeeCollected__exchangeId` \| `protocolFeeCollected__exchangeToken` \| `protocolFeeCollected__executedBy` \| `protocolFeeCollected__id` \| `redeemedDate` \| `revokedDate` \| `seller` \| `seller__active` \| `seller__admin` \| `seller__assistant` \| `seller__authTokenId` \| `seller__authTokenType` \| `seller__clerk` \| `seller__id` \| `seller__metadataUri` \| `seller__sellerId` \| `seller__treasury` \| `seller__voucherCloneAddress` \| `state` \| `validUntilDate` | no | | | `exchangesOrderDirection` | `asc` \| `desc` | no | | | `exchangesFilter` | object | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_registered_agents URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_registered_agents > Returns all dACP agents registered with this MCP server instance, with their associated protocol entities and roles. # `get_registered_agents` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Returns all dACP agents registered with this MCP server instance, with their associated protocol entities and roles. No auth required. **Category:** Agent registry. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_sellers URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_sellers > Reads seller account entities from the Boson subgraph. # `get_sellers` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads seller account entities from the Boson subgraph. Optionally includes related offers, exchanges, funds, and logs. Read-only. Returns: array of seller entities with addresses and metadataUri. **Category:** Seller & buyer. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `sellersSkip` | number | no | | | `sellersFirst` | number | no | | | `sellersOrderBy` | `active` \| `admin` \| `assistant` \| `authTokenId` \| `authTokenType` \| `clerk` \| `collections` \| `exchanges` \| `funds` \| `id` \| `logs` \| `metadata` \| `metadataUri` \| `metadata__contactPreference` \| `metadata__createdAt` \| `metadata__description` \| `metadata__id` \| `metadata__kind` \| `metadata__legalTradingName` \| `metadata__name` \| `metadata__type` \| `metadata__website` \| `offers` \| `pendingSeller` \| `pendingSeller__admin` \| `pendingSeller__assistant` \| `pendingSeller__authTokenId` \| `pendingSeller__authTokenType` \| `pendingSeller__clerk` \| `pendingSeller__id` \| `pendingSeller__metadataUri` \| `royaltyRecipients` \| `sellerId` \| `treasury` \| `voucherCloneAddress` | no | | | `sellersOrderDirection` | `asc` \| `desc` | no | | | `sellersFilter` | object | no | | | `includeExchanges` | boolean | no | | | `includeOffers` | boolean | no | | | `includeFunds` | boolean | no | | | `includeLogs` | boolean | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_sellers_by_address URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_sellers_by_address > Reads seller entities associated with a specific Ethereum address. # `get_sellers_by_address` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Reads seller entities associated with a specific Ethereum address. Use this to check if signerAddress already has a seller account before calling create_seller. Read-only. Returns: array of seller entities. **Category:** Seller & buyer. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `address` | string | yes | | | `sellersSkip` | number | no | | | `sellersFirst` | number | no | | | `sellersOrderBy` | `active` \| `admin` \| `assistant` \| `authTokenId` \| `authTokenType` \| `clerk` \| `collections` \| `exchanges` \| `funds` \| `id` \| `logs` \| `metadata` \| `metadataUri` \| `metadata__contactPreference` \| `metadata__createdAt` \| `metadata__description` \| `metadata__id` \| `metadata__kind` \| `metadata__legalTradingName` \| `metadata__name` \| `metadata__type` \| `metadata__website` \| `offers` \| `pendingSeller` \| `pendingSeller__admin` \| `pendingSeller__assistant` \| `pendingSeller__authTokenId` \| `pendingSeller__authTokenType` \| `pendingSeller__clerk` \| `pendingSeller__id` \| `pendingSeller__metadataUri` \| `royaltyRecipients` \| `sellerId` \| `treasury` \| `voucherCloneAddress` | no | | | `sellersOrderDirection` | `asc` \| `desc` | no | | | `sellersFilter` | object | no | | | `includeExchanges` | boolean | no | | | `includeOffers` | boolean | no | | | `includeFunds` | boolean | no | | | `includeLogs` | boolean | no | | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # get_supported_tokens URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/get_supported_tokens > Returns ERC-20 tokens accepted as exchange tokens on the given configId deployment. # `get_supported_tokens` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Returns ERC-20 tokens accepted as exchange tokens on the given configId deployment. Use returned addresses in exchangeTokenAddress fields of create_offer. Read-only. Returns: array of { address, name, symbol, decimals }. **Category:** Configuration. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # raise_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/raise_dispute > Raises a dispute on a redeemed exchange. # `raise_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Raises a dispute on a redeemed exchange. Caller must be the buyer. Must be called within disputePeriodDurationInMS after redemption. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # redeem_voucher URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/redeem_voucher > Redeems a voucher, signalling physical receipt of goods and starting the dispute period clock. # `redeem_voucher` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Redeems a voucher, signalling physical receipt of goods and starting the dispute period clock. Caller must be the buyer. After redemption, buyer has disputePeriodDurationInMS to raise a dispute. 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # refuse_escalated_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/refuse_escalated_dispute > Dispute resolver refuses to decide an escalated dispute. # `refuse_escalated_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Dispute resolver refuses to decide an escalated dispute. Returns the escalation fee to the buyer and resets dispute to 'Resolving' state. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # register_agent URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/register_agent > Registers a dACP agent with this MCP server instance, associating its Ethereum identities and roles. # `register_agent` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Registers a dACP agent with this MCP server instance, associating its Ethereum identities and roles. The signature proves control of each signerAddress. Server-local state — no configId/signerAddress context needed. Returns: registration confirmation. **Category:** Agent registry. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `name` | string | yes | | | `description` | string | yes | | | `entities` | object[] | yes | | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # render_contractual_agreement URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/render_contractual_agreement > Renders the legal contractual agreement text/HTML for an offer using its offer data and metadata. # `render_contractual_agreement` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Renders the legal contractual agreement text/HTML for an offer using its offer data and metadata. Use to preview or store the agreement. Returns: rendered agreement string. **Category:** Offer management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `template` | string | yes | | | `offerData` | object | yes | | | `offerMetadata` | object | yes | | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # resolve_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/resolve_dispute > Resolves a dispute by mutual agreement. # `resolve_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Resolves a dispute by mutual agreement. Workflow: (1) create_dispute_resolution_proposal generates typed data, (2) both parties sign the typed data locally with their wallet (EIP-712), (3) either party submits sigR/sigS/sigV here. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `buyerPercentBasisPoints` | — | yes | Agreed buyer share in basis points (0–10000). Both parties must sign the same value. Obtain via create_dispute_resolution_proposal then sign the typed data locally with each party's wallet (EIP-712). | | `sigR` | string | yes | 32-byte R component of the ECDSA resolution signature as 0x-prefixed hex. From the locally-signed EIP-712 signature parameters. | | `sigS` | string | yes | 32-byte S component as 0x-prefixed hex. From the locally-signed EIP-712 signature parameters. | | `sigV` | — | yes | Recovery byte V: 27 or 28. From the locally-signed EIP-712 signature parameters. | | `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` | string | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # retract_dispute URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/retract_dispute > Retracts a raised dispute, releasing seller deposit and restoring completion flow. # `retract_dispute` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Retracts a raised dispute, releasing seller deposit and restoring completion flow. Caller must be the buyer who raised it. Returns unsigned transaction data. **Category:** Dispute 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # revoke_voucher URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/revoke_voucher > Revokes a committed (not yet redeemed) voucher on behalf of the seller, returning funds to the buyer. # `revoke_voucher` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Revokes a committed (not yet redeemed) voucher on behalf of the seller, returning funds to the buyer. Caller must be the seller assistant. 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 | | --- | --- | --- | --- | | `exchangeId` | string | yes | Numeric ID of the exchange/dispute to act on. Obtain from get_exchanges or the response of commit_to_offer. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # send_forwarded_meta_transaction URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/send_forwarded_meta_transaction > Relays a Biconomy forwarded meta-transaction (ERC-20 gas payment). # `send_forwarded_meta_transaction` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Relays a Biconomy forwarded meta-transaction (ERC-20 gas payment). Requires a complete ERC20ForwardRequest and domain separator signature. Returns: relay transaction data. **Category:** Meta-transactions & broadcast. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `contractAddress` | string | yes | Valid Ethereum address (e.g. '0xAbCd...' or '0xabcd...'). Mixed-case addresses are checksum-validated; all-lowercase and all-uppercase addresses are also accepted. | | `request` | object | yes | | | `domainSeparator` | string | yes | | | `signature` | string | yes | | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # send_meta_transaction URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/send_meta_transaction > Relays a pre-signed meta-transaction via Biconomy so the user pays no gas. # `send_meta_transaction` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Relays a pre-signed meta-transaction via Biconomy so the user pays no gas. Requires sigR/sigS/sigV from a locally-signed EIP-712 payload. Use when the target operation requires metaTx relay. Returns: relay transaction data. **Category:** Meta-transactions & broadcast. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `functionName` | string | yes | | | `functionSignature` | string | yes | | | `nonce` | string \| number | yes | | | `sigR` | string | yes | | | `sigS` | string | yes | | | `sigV` | string \| number | yes | | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # send_native_meta_transaction URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/send_native_meta_transaction > Relays a native meta-transaction (EIP-712 signed function call) via Biconomy. # `send_native_meta_transaction` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Relays a native meta-transaction (EIP-712 signed function call) via Biconomy. Requires ABI-encoded function signature and sigR/sigS/sigV from a locally-signed EIP-712 payload. Returns: relay transaction data. **Category:** Meta-transactions & broadcast. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `contractAddress` | string | yes | Valid Ethereum address (e.g. '0xAbCd...' or '0xabcd...'). Mixed-case addresses are checksum-validated; all-lowercase and all-uppercase addresses are also accepted. | | `functionSignature` | string | yes | | | `sigR` | string | yes | | | `sigS` | string | yes | | | `sigV` | string \| number | yes | | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # send_signed_transaction URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/send_signed_transaction > Broadcasts a signed raw Ethereum transaction to the network. # `send_signed_transaction` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Broadcasts a signed raw Ethereum transaction to the network. signedTransaction must be 0x-prefixed RLP-encoded hex obtained from local wallet signing (e.g. ethers `wallet.signTransaction(tx)`). Returns: transaction hash, block number, and gas used. **Category:** Meta-transactions & broadcast. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `signedTransaction` | string | yes | RLP-encoded signed Ethereum transaction as 0x-prefixed hex string. Obtain from local wallet signing (e.g. ethers `wallet.signTransaction(tx)`). | | `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. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # sign_full_offer URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/sign_full_offer > Generates EIP-712 typed data for a non-listed (private) offer that the offer creator must sign. # `sign_full_offer` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Generates EIP-712 typed data for a non-listed (private) offer that the offer creator must sign. Call before create_offer_and_commit or void_non_listed_offer. Returns: typed data structure — sign it locally with your wallet (EIP-712), then use the signature in the next step. **Category:** Offer management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `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. | | `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'. | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # store_base_metadata URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/store_base_metadata > Stores a Base metadata object to IPFS. # `store_base_metadata` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Stores a Base metadata object to IPFS. Use for simple offers that don't require ProductV1 or Bundle structure. Returns: { metadataUri, metadataHash } for use in create_offer. **Category:** Offer 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 | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `BASE` | yes | | | `name` | string | yes | | | `description` | string | yes | | | `image` | string | no | | | `imageData` | string | no | | | `externalUrl` | string | yes | | | `licenseUrl` | string | yes | | | `condition` | string | no | | | `animationUrl` | string | no | | | `youtubeUrl` | string | no | | | `attributes` | object[] | no | | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # store_bundle_item_nft_metadata URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/store_bundle_item_nft_metadata > Stores a single NFT bundle item's metadata to IPFS. # `store_bundle_item_nft_metadata` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Stores a single NFT bundle item's metadata to IPFS. Call once per NFT component in a bundle before store_bundle_metadata. Returns: { url: 'ipfs://...' } to include in the items array. **Category:** Offer 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 | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `ITEM_NFT` | yes | | | `name` | string | yes | | | `description` | string | no | | | `image` | string | no | | | `imageData` | string | no | | | `externalUrl` | string | no | | | `animationUrl` | string | no | | | `youtubeUrl` | string | no | | | `image_data` | string | no | | | `external_url` | string | no | | | `animation_url` | string | no | | | `youtube_url` | string | no | | | `attributes` | object[] | no | | | `chainId` | number | no | | | `contract` | string | no | | | `tokenId` | string | no | | | `tokenIdRange` | object | no | | | `terms` | object[] | no | | | `quantity` | number | no | | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # store_bundle_item_product_v1_metadata URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/store_bundle_item_product_v1_metadata > Stores a single ProductV1 bundle item's metadata to IPFS. # `store_bundle_item_product_v1_metadata` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Stores a single ProductV1 bundle item's metadata to IPFS. Call once per physical product in a bundle before store_bundle_metadata. Returns: { url: 'ipfs://...' } to include in the items array. **Category:** Offer 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 | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `ITEM_PRODUCT_V1` | yes | | | `uuid` | string | yes | | | `product` | object | yes | | | `variations` | object[] | no | | | `shipping` | object | yes | | | `exchangePolicy` | object | yes | | | `productOverrides` | object | no | | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # store_bundle_metadata URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/store_bundle_metadata > Stores a Bundle metadata object to IPFS. # `store_bundle_metadata` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Stores a Bundle metadata object to IPFS. Prerequisite: call store_bundle_item_product_v1_metadata and/or store_bundle_item_nft_metadata first; include their returned URLs in the items array. Returns: { metadataUri, metadataHash }. **Category:** Offer 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 | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `BUNDLE` | yes | | | `name` | string | yes | | | `description` | string | yes | | | `image` | string | no | | | `imageData` | string | no | | | `externalUrl` | string | yes | | | `licenseUrl` | string | yes | | | `youtubeUrl` | string | no | | | `condition` | string | no | | | `animationUrl` | string | no | | | `attributes` | object[] | no | | | `bundleUuid` | string | yes | | | `seller` | object | yes | | | `items` | object[] | yes | | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # store_product_v1_metadata URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/store_product_v1_metadata > Stores a ProductV1 metadata object to IPFS. # `store_product_v1_metadata` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Stores a ProductV1 metadata object to IPFS. Call before create_offer to get metadataUri and metadataHash. Returns: { metadataUri: 'ipfs://...', metadataHash: '0x...' }. **Category:** Offer 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 | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `PRODUCT_V1` | yes | | | `uuid` | string | yes | | | `name` | string | yes | | | `description` | string | yes | | | `externalUrl` | string | yes | | | `licenseUrl` | string | yes | | | `youtubeUrl` | string | no | | | `condition` | string | no | | | `image` | string | yes | | | `imageData` | string | no | | | `animationUrl` | string | no | | | `attributes` | object[] | yes | | | `product` | object | yes | | | `variations` | object[] | no | | | `seller` | object | yes | | | `shipping` | object | yes | | | `exchangePolicy` | object | yes | | | `productOverrides` | object | no | | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # update_seller URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/update_seller > Updates an existing seller account. # `update_seller` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Updates an existing seller account. Caller must be the current seller admin (signerAddress). Use get_sellers_by_address to retrieve the seller id first. Returns unsigned transaction data. **Category:** Seller & buyer. **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'. | | `type` | string | yes | | | `name` | string | no | | | `description` | string | no | | | `legalTradingName` | string | no | | | `kind` | string | yes | | | `website` | string | no | | | `images` | object[] | no | | | `contactLinks` | object[] | no | | | `contactPreference` | string | yes | | | `socialLinks` | object[] | no | | | `salesChannels` | object[] | no | | | `authTokenId` | string | yes | NFT token ID used as auth token (e.g. Lens profile ID). Pass '0' if not using auth tokens. | | `authTokenType` | number | yes | Auth token type: 0=None, 1=Lens Protocol profile NFT. | | `id` | — | yes | Numeric ID of the existing seller entity to update. Obtain from get_sellers_by_address. | | `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` | string | 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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # validate_metadata URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/validate_metadata > Validates a metadata object against the Boson Protocol schema (PRODUCT_V1, BUNDLE, BASE, etc.) without storing it. # `validate_metadata` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Validates a metadata object against the Boson Protocol schema (PRODUCT_V1, BUNDLE, BASE, etc.) without storing it. Use before store_*_metadata to catch errors early. Read-only. Returns: validation result with any errors. **Category:** Offer management. **Returns unsigned tx?** No — read-only or returns signed payload. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `metadata` | object | yes | | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # void_non_listed_offer URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/void_non_listed_offer > Voids a private (non-listed) offer before it is fulfilled. # `void_non_listed_offer` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Voids a private (non-listed) offer before it is fulfilled. Prerequisite: call sign_full_offer and sign the returned typed data locally with your wallet (EIP-712) to obtain the signature. Returns unsigned transaction data. **Category:** Offer 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 | | --- | --- | --- | --- | | `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. | | `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'. | | `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. | | `collectionIndex` | — | no | Index of the seller's NFT collection for vouchers. Omit to use default (index 0). | | `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). | | `royaltyInfo` | object | no | | | `creator` | `SELLER` \| `BUYER` | no | 'SELLER' (default) = seller creates offer. 'BUYER' = buyer-initiated offer, quantity must be 1. | | `drMutualizerAddress` | — | no | Optional dispute resolver mutualizer contract address that pools resolution funds. | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # void_non_listed_offer_batch URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/void_non_listed_offer_batch > Voids multiple private offers atomically. # `void_non_listed_offer_batch` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Voids multiple private offers atomically. Same prerequisite as void_non_listed_offer, but for an array of full offer objects. Returns unsigned transaction data. **Category:** Offer 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 | | --- | --- | --- | --- | | `fullOffers` | object[] | yes | | | `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](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # void_offer URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/void_offer > Voids a listed offer so it can no longer be committed to. # `void_offer` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Voids a listed offer so it can no longer be committed to. Caller must be the seller assistant. Existing exchanges are unaffected. Returns unsigned transaction data. **Category:** Offer 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 | | --- | --- | --- | --- | | `offerId` | string | yes | ID of the listed offer to void. Caller must be the seller assistant. Existing exchanges are unaffected. | | `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` | string | yes | Ethereum address that will sign and send this transaction. Must match the wallet that will sign the returned transaction locally. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # withdraw_funds URL: https://www.bosonprotocol.io/docs/reference/mcp-tools/withdraw_funds > Withdraws funds from an entity's protocol treasury to the entity's treasury address. # `withdraw_funds` :::info **Generated from `agentic-commerce` MCP tools/list against `https://mcp-staging.bosonprotocol.io/mcp`. Edit the zod schema in the source repo, not this page.** ::: Withdraws funds from an entity's protocol treasury to the entity's treasury address. Sellers withdraw proceeds; buyers withdraw refunds. Caller must control the entity via signerAddress. Returns unsigned transaction data. **Category:** Funds. **Returns unsigned tx?** Likely yes — sign locally and broadcast via `send_signed_transaction` or a meta-tx relay. ## Input schema | Field | Type | Required | Description | | --- | --- | --- | --- | | `entityId` | string | yes | Numeric ID of the seller or buyer entity withdrawing funds. | | `list` | object[] | yes | | | `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. | | `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'. | ## Related - [Reference → MCP tools](/reference/mcp-tools) — full catalogue. - [Build for AI agents → The 3-step signing pattern](/agents/signing) — what to do with returned unsigned transactions. - [Concepts → Signing & meta-transactions](/concepts/signing) — canonical signing reference. --- # Reference — Metadata schemas URL: https://www.bosonprotocol.io/docs/reference/metadata > PRODUCT_V1, BUNDLE, BASE, and the rest of the @bosonprotocol/metadata JSON Schemas. # Metadata schemas :::info **Generated from `@bosonprotocol/metadata` schema.json files. Edit the schemas in the source repo, not this page.** ::: Each Boson offer (and the seller / collection / voucher entities around it) carries an off-chain metadata document pinned to IPFS, with its content hash stored on-chain. The schemas below define those documents. `@bosonprotocol/metadata` wraps each schema with [yup](https://github.com/jquense/yup) (via [schema-to-yup](https://github.com/kristianmandrup/schema-to-yup)) and exposes a validator per type. The JSON Schema is the source of truth. ## Helpers ```ts twoslash // @noErrors import { productV1MetadataSchema, bundleMetadataSchema, validateMetadata, createVariantProductMetadata, } from "@bosonprotocol/metadata" // There are no `*MetadataFactory()` helpers — construct the metadata object // directly against the schema's required fields. `validateMetadata` (Yup) // raises if anything is missing. const metadata = { schemaUrl: "https://schema.org/Product", type: "PRODUCT_V1" as const, uuid: crypto.randomUUID(), // …all other required fields… } validateMetadata(metadata as any) // throws on invalid; no return value ``` For PRODUCT_V1 offers with variants (e.g. multiple sizes), use `createVariantProductMetadata(baseMetadata, variants)` — that's the only metadata-building helper exported by the package. ## `BASE` _Source: [`packages/metadata/src/base/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/base/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `"BASE"` | yes | | | `name` | string | yes | | | `description` | string | yes | | | `image` | string | no | | | `imageData` | string | no | | | `externalUrl` | string | yes | | | `licenseUrl` | string | yes | | | `condition` | string | no | | | `animationUrl` | string | no | | | `youtubeUrl` | string | no | | | `attributes` | object[] — see [attributes\[\]](#attributes-item) | no | | ### `attributes[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `traitType` | string | yes | | | `value` | string | yes | | | `displayType` | string | no | | ## `PRODUCT_V1` _Source: [`packages/metadata/src/product-v1/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/product-v1/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `"PRODUCT_V1"` | yes | | | `uuid` | string | yes | | | `name` | string | yes | | | `description` | string | yes | | | `externalUrl` | string | yes | | | `licenseUrl` | string | yes | | | `youtubeUrl` | string | no | | | `condition` | string | no | | | `image` | string | yes | | | `imageData` | string | no | | | `animationUrl` | string | no | | | `attributes` | object[] — see [attributes\[\]](#attributes-item) | yes | | | `product` | object — see [product](#product) | yes | | | `variations` | object[] — see [variations\[\]](#variations-item) | no | | | `seller` | object — see [seller](#seller) | yes | | | `shipping` | object — see [shipping](#shipping) | yes | | | `exchangePolicy` | object — see [exchangePolicy](#exchangepolicy) | yes | | | `productOverrides` | object — see [productOverrides](#productoverrides) | no | | ### `attributes[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `traitType` | string | yes | | | `value` | string | yes | | | `displayType` | string | no | | ### `product` | Field | Type | Required | Description | | --- | --- | --- | --- | | `uuid` | string | yes | | | `version` | number | yes | | | `title` | string | yes | | | `description` | string | yes | | | `identification_sKU` | string | no | | | `identification_productId` | string | no | | | `identification_productIdType` | string | no | | | `productionInformation_brandName` | string | yes | | | `productionInformation_manufacturer` | string | no | | | `productionInformation_manufacturerPartNumber` | string | no | | | `productionInformation_modelNumber` | string | no | | | `productionInformation_materials` | string[] | no | | | `details_category` | string | no | | | `details_subCategory` | string | no | | | `details_subCategory2` | string | no | | | `details_offerCategory` | `"PHYSICAL"` \| `"PHYGITAL"` \| `"DIGITAL"` | yes | | | `details_tags` | string[] | no | | | `details_sections` | string[] | no | | | `details_personalisation` | string[] | no | | | `visuals_images` | object[] — see [product.visuals_images\[\]](#product-visuals-images-item) | yes | | | `visuals_videos` | object[] — see [product.visuals_videos\[\]](#product-visuals-videos-item) | no | | ### `variations[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `type` | string | yes | | | `option` | string | yes | | ### `seller` | Field | Type | Required | Description | | --- | --- | --- | --- | | `defaultVersion` | number | yes | | | `name` | string | yes | | | `description` | string | no | | | `externalUrl` | string | no | | | `tokenId` | string | no | | | `images` | object[] — see [seller.images\[\]](#seller-images-item) | no | | | `contactLinks` | object[] — see [seller.contactLinks\[\]](#seller-contactlinks-item) | yes | | ### `shipping` | Field | Type | Required | Description | | --- | --- | --- | --- | | `defaultVersion` | number | no | | | `countryOfOrigin` | string | no | | | `supportedJurisdictions` | object[] — see [shipping.supportedJurisdictions\[\]](#shipping-supportedjurisdictions-item) | no | | | `redemptionPoint` | string | no | | | `returnPeriod` | string | yes | | ### `exchangePolicy` | Field | Type | Required | Description | | --- | --- | --- | --- | | `uuid` | string | yes | | | `version` | number | yes | | | `label` | string | no | | | `template` | string | yes | | | `sellerContactMethod` | string | yes | | | `disputeResolverContactMethod` | string | yes | | ### `productOverrides` | Field | Type | Required | Description | | --- | --- | --- | --- | | `title` | string | no | | | `description` | string | no | | | `identification_sKU` | string | no | | | `identification_productId` | string | no | | | `identification_productIdType` | string | no | | | `productionInformation_brandName` | string | no | | | `productionInformation_manufacturer` | string | no | | | `productionInformation_manufacturerPartNumber` | string | no | | | `productionInformation_modelNumber` | string | no | | | `productionInformation_materials` | string[] | no | | | `visuals_images` | object[] — see [productOverrides.visuals_images\[\]](#productoverrides-visuals-images-item) | no | | | `visuals_videos` | object[] — see [productOverrides.visuals_videos\[\]](#productoverrides-visuals-videos-item) | no | | ### `product.visuals_images[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `product.visuals_videos[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `seller.images[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `seller.contactLinks[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | yes | | ### `shipping.supportedJurisdictions[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `label` | string | yes | | | `deliveryTime` | string | yes | | ### `productOverrides.visuals_images[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `productOverrides.visuals_videos[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ## `BUNDLE` _Source: [`packages/metadata/src/bundle/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/bundle/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `"BUNDLE"` | yes | | | `name` | string | yes | | | `description` | string | yes | | | `image` | string | no | | | `imageData` | string | no | | | `externalUrl` | string | yes | | | `licenseUrl` | string | yes | | | `youtubeUrl` | string | no | | | `condition` | string | no | | | `animationUrl` | string | no | | | `attributes` | object[] — see [attributes\[\]](#attributes-item) | no | | | `bundleUuid` | string | yes | | | `seller` | object — see [seller](#seller) | yes | | | `items` | object[] — see [items\[\]](#items-item) | yes | | ### `attributes[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `traitType` | string | yes | | | `value` | string | yes | | | `displayType` | string | no | | ### `seller` | Field | Type | Required | Description | | --- | --- | --- | --- | | `defaultVersion` | number | yes | | | `name` | string | yes | | | `description` | string | no | | | `externalUrl` | string | no | | | `tokenId` | string | no | | | `images` | object[] — see [seller.images\[\]](#seller-images-item) | no | | | `contactLinks` | object[] — see [seller.contactLinks\[\]](#seller-contactlinks-item) | yes | | ### `items[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | ### `seller.images[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `seller.contactLinks[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | yes | | ## `ProductV1 bundle item` _Source: [`packages/metadata/src/productV1Item/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/productV1Item/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `"ITEM_PRODUCT_V1"` | yes | | | `uuid` | string | yes | | | `product` | object — see [product](#product) | yes | | | `variations` | object[] — see [variations\[\]](#variations-item) | no | | | `shipping` | object — see [shipping](#shipping) | yes | | | `exchangePolicy` | object — see [exchangePolicy](#exchangepolicy) | yes | | | `productOverrides` | object — see [productOverrides](#productoverrides) | no | | ### `product` | Field | Type | Required | Description | | --- | --- | --- | --- | | `uuid` | string | yes | | | `version` | number | yes | | | `title` | string | yes | | | `description` | string | yes | | | `identification_sKU` | string | no | | | `identification_productId` | string | no | | | `identification_productIdType` | string | no | | | `productionInformation_brandName` | string | yes | | | `productionInformation_manufacturer` | string | no | | | `productionInformation_manufacturerPartNumber` | string | no | | | `productionInformation_modelNumber` | string | no | | | `productionInformation_materials` | string[] | no | | | `details_category` | string | no | | | `details_subCategory` | string | no | | | `details_subCategory2` | string | no | | | `details_offerCategory` | `"PHYSICAL"` \| `"PHYGITAL"` \| `"DIGITAL"` | yes | | | `details_tags` | string[] | no | | | `details_sections` | string[] | no | | | `details_personalisation` | string[] | no | | | `visuals_images` | object[] — see [product.visuals_images\[\]](#product-visuals-images-item) | yes | | | `visuals_videos` | object[] — see [product.visuals_videos\[\]](#product-visuals-videos-item) | no | | ### `variations[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `type` | string | yes | | | `option` | string | yes | | ### `shipping` | Field | Type | Required | Description | | --- | --- | --- | --- | | `defaultVersion` | number | no | | | `countryOfOrigin` | string | no | | | `supportedJurisdictions` | object[] — see [shipping.supportedJurisdictions\[\]](#shipping-supportedjurisdictions-item) | no | | | `redemptionPoint` | string | no | | | `returnPeriod` | string | yes | | ### `exchangePolicy` | Field | Type | Required | Description | | --- | --- | --- | --- | | `uuid` | string | yes | | | `version` | number | yes | | | `label` | string | no | | | `template` | string | yes | | | `sellerContactMethod` | string | yes | | | `disputeResolverContactMethod` | string | yes | | ### `productOverrides` | Field | Type | Required | Description | | --- | --- | --- | --- | | `title` | string | no | | | `description` | string | no | | | `identification_sKU` | string | no | | | `identification_productId` | string | no | | | `identification_productIdType` | string | no | | | `productionInformation_brandName` | string | no | | | `productionInformation_manufacturer` | string | no | | | `productionInformation_manufacturerPartNumber` | string | no | | | `productionInformation_modelNumber` | string | no | | | `productionInformation_materials` | string[] | no | | | `visuals_images` | object[] — see [productOverrides.visuals_images\[\]](#productoverrides-visuals-images-item) | no | | | `visuals_videos` | object[] — see [productOverrides.visuals_videos\[\]](#productoverrides-visuals-videos-item) | no | | ### `product.visuals_images[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `product.visuals_videos[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `shipping.supportedJurisdictions[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `label` | string | yes | | | `deliveryTime` | string | yes | | ### `productOverrides.visuals_images[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ### `productOverrides.visuals_videos[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | ## `NFT bundle item` _Source: [`packages/metadata/src/nftItem/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/nftItem/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `"ITEM_NFT"` | yes | | | `name` | string | yes | | | `description` | string | no | | | `image` | string | no | | | `imageData` | string | no | | | `externalUrl` | string | no | | | `animationUrl` | string | no | | | `youtubeUrl` | string | no | | | `image_data` | string | no | | | `external_url` | string | no | | | `animation_url` | string | no | | | `youtube_url` | string | no | | | `attributes` | object[] — see [attributes\[\]](#attributes-item) | no | | | `chainId` | number | no | | | `contract` | string | no | | | `tokenId` | string | no | | | `tokenIdRange` | object — see [tokenIdRange](#tokenidrange) | no | | | `terms` | object[] — see [terms\[\]](#terms-item) | no | | | `quantity` | number | no | | ### `attributes[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `traitType` | string | no | | | `trait_type` | string | no | | | `value` | string | yes | | | `displayType` | string | no | | | `display_type` | string | no | | ### `tokenIdRange` | Field | Type | Required | Description | | --- | --- | --- | --- | | `min` | string | no | | | `max` | string | no | | ### `terms[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `key` | string | yes | | | `value` | string | yes | | | `displayKey` | string | no | | ## `rNFT` _Source: [`packages/metadata/src/rNFT/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/rNFT/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `"rNFT"` | yes | | | `name` | string | yes | | | `description` | string | yes | | | `image` | string | no | | | `externalUrl` | string | yes | | | `licenseUrl` | string | yes | | | `condition` | string | no | | | `animationUrl` | string | no | | | `attributes` | object[] — see [attributes\[\]](#attributes-item) | no | | ### `attributes[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `traitType` | string | yes | | | `value` | string | yes | | | `displayType` | string | no | | ## `SELLER` _Source: [`packages/metadata/src/seller/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/seller/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `type` | `"SELLER"` | yes | | | `name` | string | no | | | `description` | string | no | | | `legalTradingName` | string | no | | | `kind` | string | yes | | | `website` | string | no | | | `images` | object[] — see [images\[\]](#images-item) | no | | | `contactLinks` | object[] — see [contactLinks\[\]](#contactlinks-item) | no | | | `contactPreference` | string | yes | | | `socialLinks` | object[] — see [socialLinks\[\]](#sociallinks-item) | no | | | `salesChannels` | object[] — see [salesChannels\[\]](#saleschannels-item) | no | | ### `images[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | no | | | `type` | string | yes | | | `width` | number | no | | | `height` | number | no | | | `fit` | string | no | | | `position` | string | no | | ### `contactLinks[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | yes | | ### `socialLinks[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `url` | string | yes | | | `tag` | string | yes | | ### `salesChannels[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `tag` | string | yes | | | `name` | string | no | | | `settingsUrl` | string | no | | | `settingsEditor` | string | no | | | `link` | string | no | | | `deployments` | object[] — see [salesChannels[].deployments\[\]](#saleschannels-item-deployments-item) | no | | ### `salesChannels[].deployments[]` | Field | Type | Required | Description | | --- | --- | --- | --- | | `product` | object — see [salesChannels[].deployments[].product](#saleschannels-item-deployments-item-product) | no | | | `status` | string | no | | | `link` | string | no | | | `lastUpdated` | string | no | | ### `salesChannels[].deployments[].product` | Field | Type | Required | Description | | --- | --- | --- | --- | | `uuid` | string | no | | | `version` | number | no | | ## `COLLECTION` _Source: [`packages/metadata/src/collection/schema.json`](https://github.com/bosonprotocol/core-components/blob/main/packages/metadata/src/collection/schema.json)_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `schemaUrl` | string | yes | | | `type` | `"COLLECTION"` | yes | | | `name` | string | yes | | | `description` | string | no | | | `image` | string | no | | | `externalLink` | string | no | | | `external_link` | string | no | | | `collaborators` | string[] | no | | ## Source - Package: [`@bosonprotocol/metadata`](https://github.com/bosonprotocol/core-components/tree/main/packages/metadata) - Schemas: [`packages/metadata/src//schema.json`](https://github.com/bosonprotocol/core-components/tree/main/packages/metadata/src) ## Related - [Concepts → The metadata pipeline](/concepts/metadata). - [Troubleshooting → Metadata validation](/troubleshooting/metadata). --- # Reference — React Kit URL: https://www.bosonprotocol.io/docs/reference/react-kit > Auto-generated stub. Components and hooks from @bosonprotocol/react-kit. # React Kit > :::info > **Auto-generated stub** — regenerated from `@bosonprotocol/react-kit`. > ::: :::warning **Pre-release.** Hook and component surfaces are still settling. Pin exact versions. ::: ## Components - `` — wraps your app and constructs the SDK. - `` — drop-in commit button. - `` — buyer-side redemption flow. - `` — treasury management. ## Hooks - `useCoreSdk()` — gets the configured SDK from context. - `useOffers(filter)` — subgraph offers query, React Query-backed. - `useExchanges(filter)` — same for exchanges. - `useDisputes(filter)` — same for disputes. - `useFunds(entityId)` — read available balances. - `useCommit(offerId)` — encapsulates approve + commit. - `useRedeem(exchangeId)` — encapsulates redeem. ## Source - [`@bosonprotocol/react-kit`](https://github.com/bosonprotocol/core-components/tree/main/packages/react-kit) --- # Reference — Subgraph queries URL: https://www.bosonprotocol.io/docs/reference/subgraph > Every GraphQL query and fragment shipped with @bosonprotocol/core-sdk, grouped by domain. # Subgraph queries :::info **Generated from `core-components/packages/core-sdk/src/**/queries.graphql`. Edit the source GraphQL, not this page.** ::: The Boson subgraph (one deployment per chain × env) indexes on-chain events into a GraphQL schema. The SDK and MCP both speak this schema; you can also query it directly with any GraphQL client. For the endpoints, see [Networks → Subgraph endpoints](/networks/subgraph). For the eventing / indexing-lag model, see [Concepts → Eventing & indexing](/concepts/eventing). ## Health-check ```graphql { _meta { block { number, hash } hasIndexingErrors } } ``` Treat the subgraph as degraded if `_meta.block.number` falls more than ~20 blocks behind chain head, or if `hasIndexingErrors == true`. ## Per-domain catalogue ### `accounts` _Source: [`accounts/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/accounts/queries.graphql)_ **Queries (9)** | Name | Variables | | --- | --- | | `getAuthTokenIds` | `($tokenIdSkip: Int $tokenIdFirst: Int $authTokenType: Int)` | | `getBuyerByIdQuery` | `($buyerId: ID! $fundsSkip: Int $fundsFirst: Int $fundsOrderBy: FundsEntity_orderBy $fundsOrderDirection: OrderDirection $fundsFilter: FundsEntity_filter $exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter $logsSkip: Int $logsFirst: Int $logsOrderBy: EventLog_orderBy $logsOrderDirection: OrderDirection $logsFilter: EventLog_filter $includeExchanges: Boolean = false $includeFunds: Boolean = false $includeLogs: Boolean = false)` | | `getBuyersQuery` | `($buyersSkip: Int $buyersFirst: Int $buyersOrderBy: Buyer_orderBy $buyersOrderDirection: OrderDirection $buyersFilter: Buyer_filter $fundsSkip: Int $fundsFirst: Int $fundsOrderBy: FundsEntity_orderBy $fundsOrderDirection: OrderDirection $fundsFilter: FundsEntity_filter $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter $logsSkip: Int $logsFirst: Int $logsOrderBy: EventLog_orderBy $logsOrderDirection: OrderDirection $logsFilter: EventLog_filter $includeExchanges: Boolean = false $includeOffers: Boolean = false $includeFunds: Boolean = false $includeLogs: Boolean = false)` | | `getConditionalCommitAuthorizedEventLogsQuery` | `($conditionalCommitAuthorizedLogsSkip: Int $conditionalCommitAuthorizedLogsFirst: Int $conditionalCommitAuthorizedLogsOrderBy: ConditionalCommitAuthorizedEventLog_orderBy $conditionalCommitAuthorizedLogsOrderDirection: OrderDirection $conditionalCommitAuthorizedLogsFilter: ConditionalCommitAuthorizedEventLog_filter)` | | `getDisputeResolverByIdQuery` | `($disputeResolverId: ID! $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $logsSkip: Int $logsFirst: Int $logsOrderBy: EventLog_orderBy $logsOrderDirection: OrderDirection $logsFilter: EventLog_filter $includeOffers: Boolean = false $includeLogs: Boolean = false)` | | `getDisputeResolversQuery` | `($disputeResolversSkip: Int $disputeResolversFirst: Int $disputeResolversOrderBy: DisputeResolver_orderBy $disputeResolversOrderDirection: OrderDirection $disputeResolversFilter: DisputeResolver_filter $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $logsSkip: Int $logsFirst: Int $logsOrderBy: EventLog_orderBy $logsOrderDirection: OrderDirection $logsFilter: EventLog_filter $includeOffers: Boolean = false $includeLogs: Boolean = false)` | | `getOfferCollectionsQuery` | `($offerCollectionsSkip: Int $offerCollectionsFirst: Int $offerCollectionsOrderBy: OfferCollection_orderBy $offerCollectionsOrderDirection: OrderDirection $offerCollectionsFilter: OfferCollection_filter $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $includeOffers: Boolean = false)` | | `getSellerByIdQuery` | `($sellerId: ID! $fundsSkip: Int $fundsFirst: Int $fundsOrderBy: FundsEntity_orderBy $fundsOrderDirection: OrderDirection $fundsFilter: FundsEntity_filter $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter $logsSkip: Int $logsFirst: Int $logsOrderBy: EventLog_orderBy $logsOrderDirection: OrderDirection $logsFilter: EventLog_filter $includeExchanges: Boolean = false $includeOffers: Boolean = false $includeFunds: Boolean = false $includeLogs: Boolean = false)` | | `getSellersQuery` | `($sellersSkip: Int $sellersFirst: Int $sellersOrderBy: Seller_orderBy $sellersOrderDirection: OrderDirection $sellersFilter: Seller_filter $fundsSkip: Int $fundsFirst: Int $fundsOrderBy: FundsEntity_orderBy $fundsOrderDirection: OrderDirection $fundsFilter: FundsEntity_filter $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter $logsSkip: Int $logsFirst: Int $logsOrderBy: EventLog_orderBy $logsOrderDirection: OrderDirection $logsFilter: EventLog_filter $includeExchanges: Boolean = false $includeOffers: Boolean = false $includeFunds: Boolean = false $includeLogs: Boolean = false)` | **Fragments (18):** `AuthTokenIdFields`, `BaseBuyerFields`, `BaseConditionalCommitAuthorizedEventLogsFields`, `BaseDisputeResolutionTermsEntityFields`, `BaseDisputeResolverFeeFields`, `BaseDisputeResolverFields`, `BaseOfferCollectionFields`, `BaseSellerFields`, `BuyerFields`, `DisputeResolverFields`, `OfferCollectionFields`, `PendingDisputeResolverFields`, `PendingSellerFields`, `SalesChannelFields`, `SellerContactLinkFields`, `SellerFields`, `SellerMetadataMediaFields`, `SellerSocialLinkFields` ### `disputes` _Source: [`disputes/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/disputes/queries.graphql)_ **Queries (2)** | Name | Variables | | --- | --- | | `getDisputeByIdQuery` | `($disputeId: ID! $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $includeOffers: Boolean = false)` | | `getDisputesQuery` | `($disputesSkip: Int $disputesFirst: Int $disputesOrderBy: Dispute_orderBy $disputesOrderDirection: OrderDirection $disputesFilter: Dispute_filter)` | **Fragments (2):** `BaseDisputeFields`, `DisputeFields` ### `erc20` _Source: [`erc20/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/erc20/queries.graphql)_ **Queries (2)** | Name | Variables | | --- | --- | | `getExchangeTokenByIdQuery` | `($exchangeTokenId: ID! $exchangeTokensSkip: Int $exchangeTokensFirst: Int $exchangeTokensOrderBy: ExchangeToken_orderBy $exchangeTokensOrderDirection: OrderDirection $exchangeTokensFilter: ExchangeToken_filter $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $fundsSkip: Int $fundsFirst: Int $fundsOrderBy: FundsEntity_orderBy $fundsOrderDirection: OrderDirection $fundsFilter: FundsEntity_filter $includeOffers: Boolean = false $includeFunds: Boolean = false)` | | `getExchangeTokensQuery` | `($exchangeTokensSkip: Int $exchangeTokensFirst: Int $exchangeTokensOrderBy: ExchangeToken_orderBy $exchangeTokensOrderDirection: OrderDirection $exchangeTokensFilter: ExchangeToken_filter $offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $includeOffers: Boolean = false $fundsSkip: Int $fundsFirst: Int $fundsOrderBy: FundsEntity_orderBy $fundsOrderDirection: OrderDirection $fundsFilter: FundsEntity_filter $includeFunds: Boolean = false)` | **Fragments (2):** `BaseExchangeTokenFields`, `ExchangeTokenFields` ### `event-logs` _Source: [`event-logs/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/event-logs/queries.graphql)_ **Queries (1)** | Name | Variables | | --- | --- | | `getEventLogsQuery` | `($logsSkip: Int $logsFirst: Int $logsOrderBy: EventLog_orderBy $logsOrderDirection: OrderDirection $logsFilter: EventLog_filter)` | **Fragments (1):** `BaseEventLogFields` ### `exchanges` _Source: [`exchanges/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/exchanges/queries.graphql)_ **Queries (3)** | Name | Variables | | --- | --- | | `getExchangeByIdQuery` | `($exchangeId: ID!)` | | `getExchangesQuery` | `($exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter)` | | `getNonListedOfferVoidedQuery` | `($nonListedOfferVoidedsSkip: Int $nonListedOfferVoidedsFirst: Int $nonListedOfferVoidedsOrderBy: NonListedOfferVoided_orderBy $nonListedOfferVoidedsOrderDirection: OrderDirection $nonListedOfferVoidedsFilter: NonListedOfferVoided_filter)` | **Fragments (3):** `BaseExchangeFields`, `ExchangeFields`, `NonListedOfferVoidedFields` ### `funds` _Source: [`funds/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/funds/queries.graphql)_ **Queries (2)** | Name | Variables | | --- | --- | | `getFunds` | `($fundsSkip: Int $fundsFirst: Int $fundsOrderBy: FundsEntity_orderBy $fundsOrderDirection: OrderDirection $fundsFilter: FundsEntity_filter)` | | `getFundsById` | `($fundsId: ID!)` | **Fragments (2):** `BaseFundsEntityFields`, `FundsEntityFields` ### `groups` _Source: [`groups/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/groups/queries.graphql)_ _No queries._ **Fragments (1):** `BaseConditionFields` ### `metadata` _Source: [`metadata/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/metadata/queries.graphql)_ **Queries (11)** | Name | Variables | | --- | --- | | `getAllProductsWithNotVoidedVariantsQuery` | `($productsSkip: Int $productsFirst: Int $productsOrderBy: ProductV1Product_orderBy $productsOrderDirection: OrderDirection $productsFilter: ProductV1Product_filter)` | | `getBaseMetadataEntitiesQuery` | `($metadataSkip: Int $metadataFirst: Int $metadataOrderBy: BaseMetadataEntity_orderBy $metadataOrderDirection: OrderDirection $metadataFilter: BaseMetadataEntity_filter)` | | `getBaseMetadataEntityByIdQuery` | `($metadataId: ID! $metadataSkip: Int $metadataFirst: Int $metadataOrderBy: BaseMetadataEntity_orderBy $metadataOrderDirection: OrderDirection $metadataFilter: BaseMetadataEntity_filter)` | | `getBundleMetadataEntitiesQuery` | `($metadataSkip: Int $metadataFirst: Int $metadataOrderBy: BundleMetadataEntity_orderBy $metadataOrderDirection: OrderDirection $metadataFilter: BundleMetadataEntity_filter)` | | `getBundleMetadataEntityByIdQuery` | `($metadataId: ID! $metadataSkip: Int $metadataFirst: Int $metadataOrderBy: BundleMetadataEntity_orderBy $metadataOrderDirection: OrderDirection $metadataFilter: BundleMetadataEntity_filter)` | | `getProductV1BrandsQuery` | `($brandsSkip: Int $brandsFirst: Int $brandsOrderBy: ProductV1Brand_orderBy $brandsOrderDirection: OrderDirection $brandsFilter: ProductV1Brand_filter)` | | `getProductV1CategoriesQuery` | `($categoriesSkip: Int $categoriesFirst: Int $categoriesOrderBy: ProductV1Category_orderBy $categoriesOrderDirection: OrderDirection $categoriesFilter: ProductV1Category_filter)` | | `getProductV1MetadataEntitiesQuery` | `($metadataSkip: Int $metadataFirst: Int $metadataOrderBy: ProductV1MetadataEntity_orderBy $metadataOrderDirection: OrderDirection $metadataFilter: ProductV1MetadataEntity_filter)` | | `getProductV1MetadataEntityByIdQuery` | `($metadataId: ID! $metadataSkip: Int $metadataFirst: Int $metadataOrderBy: ProductV1MetadataEntity_orderBy $metadataOrderDirection: OrderDirection $metadataFilter: ProductV1MetadataEntity_filter)` | | `getProductV1ProductsQuery` | `($productsSkip: Int $productsFirst: Int $productsOrderBy: ProductV1Product_orderBy $productsOrderDirection: OrderDirection $productsFilter: ProductV1Product_filter)` | | `getProductV1ProductsWithVariantsQuery` | `($productsSkip: Int $productsFirst: Int $productsOrderBy: ProductV1Product_orderBy $productsOrderDirection: OrderDirection $productsFilter: ProductV1Product_filter)` | **Fragments (23):** `BaseAnimationMetadataFields`, `BaseBaseMetadataEntityFields`, `BaseBundleMetadataEntityFields`, `BaseMetadataEntityFields`, `BaseProductV1BrandFields`, `BaseProductV1CategoryFields`, `BaseProductV1ExchangePolicyFields`, `BaseProductV1MediaFields`, `BaseProductV1MetadataEntityFields`, `BaseProductV1PersonalisationFields`, `BaseProductV1ProductFields`, `BaseProductV1ProductOverridesFields`, `BaseProductV1ProductWithNotVoidedVariantsFields`, `BaseProductV1ProductWithVariantsFields`, `BaseProductV1SectionFields`, `BaseProductV1SellerContactLinkFields`, `BaseProductV1SellerFields`, `BaseProductV1ShippingJurisdictionFields`, `BaseProductV1ShippingOptionFields`, `BaseProductV1TagFields`, `BaseProductV1VariationFields`, `BundleMetadataEntityFields`, `ProductV1MetadataEntityFields` ### `offers` _Source: [`offers/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/offers/queries.graphql)_ **Queries (3)** | Name | Variables | | --- | --- | | `getOfferByIdQuery` | `($offerId: ID! $exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter $includeExchanges: Boolean = false)` | | `getOffersMediaQuery` | `($offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter $includeExchanges: Boolean = false)` | | `getOffersQuery` | `($offersSkip: Int $offersFirst: Int $offersOrderBy: Offer_orderBy $offersOrderDirection: OrderDirection $offersFilter: Offer_filter $exchangesSkip: Int $exchangesFirst: Int $exchangesOrderBy: Exchange_orderBy $exchangesOrderDirection: OrderDirection $exchangesFilter: Exchange_filter $includeExchanges: Boolean = false)` | **Fragments (3):** `BaseOfferFields`, `BaseRangeFields`, `OfferFields` ### `search` _Source: [`search/queries.graphql`](https://github.com/bosonprotocol/core-components/blob/main/packages/core-sdk/src/search/queries.graphql)_ **Queries (1)** | Name | Variables | | --- | --- | | `searchProductsQuery` | `($productsSkip: Int $productsFirst: Int $productsOrderBy: ProductV1Product_orderBy $productsOrderDirection: OrderDirection $productsFilter: ProductV1Product_filter)` | **Fragments (1):** `ProductSearchResultFields` ## Source - SDK queries: [`packages/core-sdk/src/**/queries.graphql`](https://github.com/bosonprotocol/core-components/tree/main/packages/core-sdk/src) - Subgraph mappings & schema: [`@bosonprotocol/subgraph`](https://github.com/bosonprotocol/core-components/tree/main/packages/subgraph) ## Related - [Concepts → Eventing & indexing](/concepts/eventing) - [Networks → Subgraph endpoints](/networks/subgraph) --- # Reference — Widget URL params URL: https://www.bosonprotocol.io/docs/reference/widget-params > Every parameter accepted by hosted widgets. # Widget URL params > :::info > Hand-maintained today; will be auto-generated from `widgets/` repo prop types in a future pass. > ::: Every hosted widget reads the same parameters from either `data-*` attributes (script + button), URL query string (iframe), or Zoid props. ## Universal | Param | Required? | Notes | | --- | --- | --- | | `configId` | Yes | See [Networks → ConfigIds matrix](/networks/configids) | | `account` | No | Restrict to a single wallet | | `lookAndFeel` | No | `"modal"` (default) or `"regular"` | | `themeOverrides` | No | JSON string of CSS variable overrides | | `postbackUrl` | No | Server URL for HMAC-signed lifecycle posts | | `postbackSecret` | No | HMAC secret (omit for unsigned posts) | ## Commit Widget | Param | Notes | | --- | --- | | `sellerId` | Show offers from one seller | | `productUuid` | Targets a product (incl. variants) | | `bundleUuid` | Targets a bundle | | `offerId` | Targets a single offer | | `redirectUrl` | Where to redirect after commit | ## Redemption Widget | Param | Notes | | --- | --- | | `sellerId` | Filter to one seller | | `exchangeId` | Open directly to one exchange | | `deliveryInfoUrl` | Endpoint to POST collected delivery info | ## Finance Widget | Param | Notes | | --- | --- | | `role` | `"seller"`, `"buyer"`, `"disputeResolver"`, `"agent"` | | `accountId` | The on-chain ID for that entity | ## Source - Widgets: [`bosonprotocol/widgets`](https://github.com/bosonprotocol/widgets) --- # Reference — x402-actions URL: https://www.bosonprotocol.io/docs/reference/x402/x402-actions > State machine and nextActions envelope builder. # `@bosonprotocol/x402-actions` > :::info > **Auto-generated stub.** > ::: ## Exports - `Channel` — `"onchain" | "facilitator" | "server" | "mcp"`. - `ChannelAdapter` — interface; one adapter per channel. - `FacilitatorChannelAdapter`, `OnchainChannelAdapter`, etc. - `computeNextActions({ state, role })` — return legal transitions. - `buildNextActionsEnvelope({ state, channels, endpoints })`. ## Source - [`x402-actions`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-actions/src) ## Related - [Build with x402 → State-machine integration](/x402/state-machine) --- # Reference — x402-client URL: https://www.bosonprotocol.io/docs/reference/x402/x402-client > Framework-agnostic buyer-side SDK for x402b. # `@bosonprotocol/x402-client` (+ `-fetch`) > :::info > **Auto-generated stub.** > ::: ## Exports (x402-client) - `createX402bClient({ signer, preferences })`. - `buildPayment(challenge)` — produce the `X-PAYMENT` header value. - `parseChallenge(rawResponse)` — decode a 402 response. ## Exports (x402-client-fetch) - `createX402bClientFetch({ signer, preferences })` — drop-in replacement for `fetch` that handles 402s transparently. ## Source - [`x402-client`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-client/src) - [`x402-client-fetch`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-client-fetch/src) --- # Reference — x402-core URL: https://www.bosonprotocol.io/docs/reference/x402/x402-core > Schemas, zod validators, EIP-712 builders, and the state machine for x402b. # `@bosonprotocol/x402-core` > :::info > **Auto-generated stub** — regenerated from `x402b/typescript/packages/x402-core`. > ::: The primitive layer of the x402b stack. Other packages depend on this. ## Exports - **Schemas**: zod validators for the `escrow` scheme wire format (402 response shape, X-PAYMENT header shape). - **EIP-712 builders**: typed-data domain + types for `FullOffer`, the meta-tx envelope, and four token-auth strategies. - **State machine**: states (`awaiting_redemption`, `awaiting_fulfillment`, `delivered`, `completed`, `disputed`, `accepted`, `shipped`, `finalized`), legal transitions, and `boson-*` action IDs. - **Errors**: tagged `EscrowError` types with codes. ## Source - [`x402b/typescript/packages/x402-core/src`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-core/src) --- # Reference — x402-evm URL: https://www.bosonprotocol.io/docs/reference/x402/x402-evm > EVM calldata builders for the deferred and atomic x402b flows. # `@bosonprotocol/x402-evm` > :::info > **Auto-generated stub.** > ::: EVM-specific calldata for the two x402b flows. ## Exports - `buildCreateOfferAndCommitCalldata(...)` — deferred flow: commit now, redeem later. - `buildCreateOfferCommitAndRedeemCalldata(...)` — atomic flow. - `walletClientToWeb3LibAdapter(viemClient)` — viem → SDK adapter bridge. - `RelayerSubmitError` — tagged error for facilitator failures. ## Source - [`x402b/typescript/packages/x402-evm/src`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-evm/src) --- # Reference — x402-facilitator URL: https://www.bosonprotocol.io/docs/reference/x402/x402-facilitator > Reference relayer for x402b. # `@bosonprotocol/x402-facilitator` (+ `-express`) > :::info > **Auto-generated stub.** > ::: ## Exports (x402-facilitator) - `verify(paymentPayload, config)`. - `settle(paymentPayload, config)` → `{ ok, exchangeId, txHash } | { ok: false, code, reason }`. - `performAction(payload, config)` — settle and advance the exchange. - `FacilitatorChannelAdapter` — for `nextActions[]` envelope integration. ## Exports (x402-facilitator-express) - `createX402bFacilitatorExpress(opts)` — express handler. ## Source - [`x402-facilitator`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-facilitator/src) - [`x402-facilitator-express`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-facilitator-express/src) --- # Reference — x402-fulfillment URL: https://www.bosonprotocol.io/docs/reference/x402/x402-fulfillment > Pluggable fulfillment channels. # `@bosonprotocol/x402-fulfillment` > :::info > **Auto-generated stub.** > ::: ## Exports - `FulfillmentChannel` — interface (`id`, `fulfill(ctx)`). - `ChannelRegistry` — registers channels by id, picks one based on advertised options. - Built-in channels: `inline`, `email`, `xmtp`, `webhook`, `ipfsPointer` (when shipped). ## Source - [`x402-fulfillment`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-fulfillment/src) ## Related - [Concepts → Fulfillment channels](/concepts/fulfillment) - [Build with x402 → Fulfillment channels](/x402/fulfillment) --- # Reference — x402-server URL: https://www.bosonprotocol.io/docs/reference/x402/x402-server > Framework-agnostic resource-server SDK for x402b. # `@bosonprotocol/x402-server` (+ `-express`) > :::info > **Auto-generated stub.** > ::: ## Exports (x402-server) - `createX402bServer({ network, chainId, escrow, signer, facilitator, channelRegistry })`. - `buildPaymentRequirements({ offer, asset, amount, tokenAuthStrategies, channelRegistry })`. - `verifyPaymentHeader(headerValue)`. ## Exports (x402-server-express) - `createX402bServerExpress(opts)` — express middleware. ## Source - [`x402-server`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-server/src) - [`x402-server-express`](https://github.com/bosonprotocol/x402b/tree/main/typescript/packages/x402-server-express/src) --- # Networks & addresses URL: https://www.bosonprotocol.io/docs/networks > Every deployment, contract address, subgraph endpoint, MCP server URL, and supported token, in one place. # Networks & addresses This section is a set of **everything-as-a-table** pages auto-generated from the canonical sources: - ConfigIds — from `getConfigFromConfigId()` / `getEnvConfigs()` in `@bosonprotocol/common`. - Contract addresses — from `boson-protocol-contracts/addresses/*.json`. - Subgraph endpoints — from per-config metadata in `@bosonprotocol/common`. - MCP server URLs — from the `agentic-commerce` deployment config. - Supported tokens — from `get_supported_tokens` (MCP) and config metadata. ## Pages - [ConfigIds matrix](./networks/configids) — env × chain × index → string. - [Contract addresses](./networks/addresses) — Diamond, voucher, forwarder, Permit2, etc. - [Subgraph endpoints](./networks/subgraph) — GraphQL URLs per chain × env. - [MCP server URLs](./networks/mcp-urls) — staging vs production. - [Supported tokens](./networks/tokens) — accepted ERC-20s per chain. ## Why a separate section These tables are queried constantly during integration ("what's the Diamond on Base?", "where do I point the subgraph?"). Keeping them in one place — and machine-readable — lets: - Build pages and recipes link to a single canonical row. - LLM clients fetch the JSON-rendered version via the auto-generated machine surface. - Reference pages stay short. --- # Networks — Contract addresses URL: https://www.bosonprotocol.io/docs/networks/addresses > Diamond, voucher, forwarder, Permit2, and helper contract addresses per chain × env. # Contract addresses :::info **Generated from `boson-protocol-contracts`/addresses. Edit the source JSON, not this page.** ::: Each chain × env has its own deployment. The `ProtocolDiamond` is the main entry point; cast it to any facet interface. For the canonical JSON, browse [`boson-protocol-contracts/addresses`](https://github.com/bosonprotocol/boson-protocol-contracts/tree/main/addresses). ## Read at runtime ```ts twoslash // @noErrors import { getConfigFromConfigId } from "@bosonprotocol/common" const config = getConfigFromConfigId("production-137-0") console.log(config.contracts.protocolDiamond) ``` ## Verifying Before integrating, verify the address you got against the table below. The Diamond is the same address per chain × env × index for the lifetime of that deployment. ## Deployments ### Ethereum mainnet — production _ConfigId: `production-1-0` · chainId: `1` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x59A4C19b55193D5a2EAD0065c54af4d516E18Cb5` | ### Optimism — production _ConfigId: `production-10-0` · chainId: `10` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x59A4C19b55193D5a2EAD0065c54af4d516E18Cb5` | ### Polygon — production _ConfigId: `production-137-0` · chainId: `137` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x59A4C19b55193D5a2EAD0065c54af4d516E18Cb5` | ### Base — production _ConfigId: `production-8453-0` · chainId: `8453` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x59A4C19b55193D5a2EAD0065c54af4d516E18Cb5` | ### Arbitrum One — production _ConfigId: `production-42161-0` · chainId: `42161` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x59A4C19b55193D5a2EAD0065c54af4d516E18Cb5` | ### Polygon Amoy — staging _ConfigId: `staging-80002-0` · chainId: `80002` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x26f643746cbc918b46c2d47edca68c4a6c98ebe6` | ### Base Sepolia — staging _ConfigId: `staging-84532-0` · chainId: `84532` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x26f643746cbc918b46c2d47edca68c4a6c98ebe6` | ### Arbitrum Sepolia — staging _ConfigId: `staging-421614-0` · chainId: `421614` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x26f643746cbc918b46c2d47edca68c4a6c98ebe6` | ### Sepolia (Ethereum testnet) — staging _ConfigId: `staging-11155111-0` · chainId: `11155111` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x26f643746cbc918b46c2d47edca68c4a6c98ebe6` | ### Optimism Sepolia — staging _ConfigId: `staging-11155420-0` · chainId: `11155420` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x26f643746cbc918b46c2d47edca68c4a6c98ebe6` | ### Custom test — testing _ConfigId: `testing-1234-0` · chainId: `1234` · protocol `2.0.0-rc.1`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x1F14e71c47ED9496D8383F8FcD18D0F488915746` | ### Polygon Amoy — testing _ConfigId: `testing-80002-0` · chainId: `80002` · protocol `2.5.0-rc.2`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x7de418a7ce94debd057c34ebac232e7027634ade` | ### Base Sepolia — testing _ConfigId: `testing-84532-0` · chainId: `84532` · protocol `2.5.0`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x7de418a7ce94debd057c34ebac232e7027634ade` | ### Arbitrum Sepolia — testing _ConfigId: `testing-421614-0` · chainId: `421614` · protocol `2.5.0-rc.2`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x7de418a7ce94debd057c34ebac232e7027634ade` | ### Sepolia (Ethereum testnet) — testing _ConfigId: `testing-11155111-0` · chainId: `11155111` · protocol `2.5.0-rc.2`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x7de418a7ce94debd057c34ebac232e7027634ade` | ### Optimism Sepolia — testing _ConfigId: `testing-11155420-0` · chainId: `11155420` · protocol `2.5.0-rc.2`_ | Contract | Address | | --- | --- | | `ProtocolDiamond` | `0x7de418a7ce94debd057c34ebac232e7027634ade` | ## Related - [Quickstart → Call Boson from Solidity](/quickstart/solidity) - [Concepts → Architecture](/concepts/architecture) --- # Networks — ConfigIds matrix URL: https://www.bosonprotocol.io/docs/networks/configids > Every known ConfigId, the chain it points to, and the protocol version deployed. # ConfigIds matrix :::info **Generated from `boson-protocol-contracts`/addresses. Edit the source JSON, not this page.** ::: ConfigId format: `${envName}-${chainId}-${index}`. See [Concepts → Networks & ConfigIds](/concepts/networks-and-configids) for the model. ## Production | ConfigId | Chain | Chain ID | Protocol version | | --- | --- | --- | --- | | `production-1-0` | Ethereum mainnet | 1 | 2.5.0 | | `production-10-0` | Optimism | 10 | 2.5.0 | | `production-137-0` | Polygon | 137 | 2.5.0 | | `production-8453-0` | Base | 8453 | 2.5.0 | | `production-42161-0` | Arbitrum One | 42161 | 2.5.0 | ## Staging (testnets) | ConfigId | Chain | Chain ID | Protocol version | | --- | --- | --- | --- | | `staging-80002-0` | Polygon Amoy | 80002 | 2.5.0 | | `staging-84532-0` | Base Sepolia | 84532 | 2.5.0 | | `staging-421614-0` | Arbitrum Sepolia | 421614 | 2.5.0 | | `staging-11155111-0` | Sepolia (Ethereum testnet) | 11155111 | 2.5.0 | | `staging-11155420-0` | Optimism Sepolia | 11155420 | 2.5.0 | ## Test | ConfigId | Chain | Chain ID | Protocol version | | --- | --- | --- | --- | | `testing-1234-0` | Custom test | 1234 | 2.0.0-rc.1 | | `testing-80002-0` | Polygon Amoy | 80002 | 2.5.0-rc.2 | | `testing-84532-0` | Base Sepolia | 84532 | 2.5.0 | | `testing-421614-0` | Arbitrum Sepolia | 421614 | 2.5.0-rc.2 | | `testing-11155111-0` | Sepolia (Ethereum testnet) | 11155111 | 2.5.0-rc.2 | | `testing-11155420-0` | Optimism Sepolia | 11155420 | 2.5.0-rc.2 | ## Discover at runtime ```ts twoslash // @noErrors import { getEnvConfigs } from "@bosonprotocol/common" const ids = (["local", "testing", "staging", "production"] as const) .flatMap((env) => getEnvConfigs(env).map((c) => c.configId)) ``` Or via MCP: `get_config_ids`. ## Related - [Networks → Contract addresses](./addresses) - [Networks → Subgraph endpoints](./subgraph) - [Concepts → Networks & ConfigIds](/concepts/networks-and-configids) --- # Networks — MCP server URLs URL: https://www.bosonprotocol.io/docs/networks/mcp-urls > The hosted Boson MCP endpoints. # MCP server URLs | Env | URL | | --- | --- | | Staging | `https://mcp-staging.bosonprotocol.io/mcp` | | Production | `https://mcp.bosonprotocol.io/mcp` | ## Self-hosting ```bash npx @bosonprotocol/agentic-commerce boson-mcp-server --mode http --port 8080 ``` See [Build for AI agents → Hosted vs self-hosted MCP](/agents/mcp-deployment). ## Fermion (high-value asset module) MCP > Separate hosted server with verifier / custodian tools. URL TBD; see [Build for AI agents → High-value asset module](/agents/fermion). ## Related - [Tooling → MCP / agent stack](/tooling/mcp) - [Quickstart → Buy with an AI agent](/quickstart/ai-agent-buyer) --- # Networks — Subgraph endpoints URL: https://www.bosonprotocol.io/docs/networks/subgraph > GraphQL endpoint URLs per chain × env. # Subgraph endpoints > :::info > **Auto-generated** — list pulled from `@bosonprotocol/common` config at build time. > ::: Each chain × env has its own subgraph hosted on The Graph (or a self-hosted equivalent). The SDK and MCP both read from these. ## At runtime ```ts twoslash // @noErrors import { getConfigFromConfigId } from "@bosonprotocol/common" const config = getConfigFromConfigId("production-137-0") console.log(config.subgraphUrl) ``` ## Direct GraphQL access You can query the subgraph directly with any GraphQL client: ```ts twoslash // @noErrors import { request, gql } from "graphql-request" const data = await request( config.subgraphUrl, gql`{ offers(first: 10, where: { voided: false }) { id, price, exchangeToken } }`, ) ``` ## Health-check ```graphql { _meta { block { number } hasIndexingErrors } } ``` Treat the subgraph as degraded if `_meta.block.number` is more than ~20 behind chain head, or if `hasIndexingErrors == true`. ## Related - [Concepts → Eventing & indexing](/concepts/eventing) - [Reference → Subgraph queries](/reference/subgraph) --- # Networks — Supported tokens URL: https://www.bosonprotocol.io/docs/networks/tokens > Which ERC-20 tokens are accepted as offer exchangeToken on which chain. # Supported tokens > :::info > **Auto-generated** — pulled from `get_supported_tokens` (MCP) and `@bosonprotocol/common` configs. > ::: Each chain has a set of tokens accepted as `exchangeToken` on offers. Native gas tokens (ETH, MATIC) are always supported and represented as `0x0000…0000`. ## Reading at runtime ```ts twoslash // @noErrors import { CoreSDK } from "@bosonprotocol/core-sdk" const sdk = CoreSDK.fromDefaultConfig({ web3Lib, configId: "production-137-0" }) const tokens = await sdk.getSupportedTokens() // → [{ address, name, symbol, decimals }, …] ``` Or via MCP: `get_supported_tokens`. ## Typical lineup | Chain | Native | USDC | USDT | DAI | EURC | Other | | --- | --- | --- | --- | --- | --- | --- | | Polygon (137) | MATIC | ✅ | ✅ | ✅ | ✅ | (subject to update) | | Ethereum (1) | ETH | ✅ | ✅ | ✅ | ✅ | | | Base (8453) | ETH | ✅ | — | — | ✅ | | | Optimism (10) | ETH | ✅ | ✅ | ✅ | — | | | Arbitrum (42161) | ETH | ✅ | ✅ | ✅ | — | | _The actual list is config-driven and may differ; always check at runtime._ ## Common gotchas - **Token addresses are chain-specific.** USDC on Polygon ≠ USDC on Base. Don't reuse addresses across chains. - **Decimals vary.** USDC is 6 decimals; DAI is 18. Don't hard-code. - **Adding a token is a config change.** If a token you want isn't listed, open an issue or PR against the config. ## Related - [Concepts → Funds, escrow & payouts](/concepts/funds) - [Troubleshooting → Approve · Permit · Permit2](/troubleshooting/approvals) --- # Recipes URL: https://www.bosonprotocol.io/docs/recipes > Copy-paste end-to-end flows — each page is a single context window for an LLM. # Recipes Each recipe is a **single MDX page** with a complete copy-paste flow. You can lift the whole page into an LLM's context, point it at your stack, and get a working integration. Recipes pull from `agentic-commerce/e2e/boson/tests/complete-marketplace-journeys.test.ts` — the canonical end-to-end reference. ## Full flows - [E2E seller flow](./recipes/e2e-seller) — register → list → fulfill → withdraw. - [E2E buyer flow](./recipes/e2e-buyer) — browse → commit → redeem. - [Mutual dispute resolution](./recipes/mutual-dispute) — both sides sign, one submits. ## Common patterns - [Token-gated launch](./recipes/token-gated) — restrict offers to NFT holders. - [Digital + physical bundle](./recipes/bundle) — one offer, two items. - [ERC-20 approve + commit](./recipes/erc20-commit) — the two-step path. - [Gas-less commit (Biconomy)](./recipes/gasless-commit) — meta-tx via relayer. - [Threshold-buy agent](./recipes/threshold-buy-agent) — autonomous buyer that watches and pulls the trigger. - [Webhook server for state changes](./recipes/webhook-server) — production-grade event listener. ## x402 recipes - [x402 buyer paying for a digital asset](./recipes/x402-buyer). - [x402 server email-fulfillment](./recipes/x402-email). ## Non-code - [Sell via WooCommerce](./recipes/woocommerce) — plugin install and configuration. ## Migration - [Migrate from legacy v2](./recipes/migrate-v2) — for teams coming from the older Boson stack. ## Why recipes are separate from Build **Build** pages explain a single task ("publish an offer") with stack-tabbed snippets. **Recipes** combine multiple tasks into a working program. The same content might appear in both, but Build is task-focused didactics and Recipes is copy-paste integration. Pick whichever matches what you're trying to do. --- # Recipe — Digital + physical bundle URL: https://www.bosonprotocol.io/docs/recipes/bundle > One offer that ships a physical good and a digital access pass together. # Recipe: Digital + physical bundle A bundle is a single offer that represents multiple items. The buyer commits once; redemption delivers all items. ```ts twoslash // @noErrors // Build BUNDLE metadata directly per the schema — there's no // bundleMetadataFactory export. See Reference → Metadata schemas for the // full shape (required top-level fields: schemaUrl, type, uuid, name, // description, externalUrl, licenseUrl, image, attributes, items, seller). const uuid = crypto.randomUUID() const metadata = { schemaUrl: "https://schema.org/Product", type: "BUNDLE" as const, uuid, name: "Hoodie + Discord access", description: "A limited hoodie and one year of Discord access.", externalUrl: `https://example.com/${uuid}`, licenseUrl: `https://example.com/${uuid}/license`, image: "https://cdn.example.com/bundle.jpg", attributes: [ { traitType: "Type", value: "Bundle" }, { traitType: "Items", value: "2" }, ], items: [ { type: "ITEM_PRODUCT_V1", productV1: { /* full PRODUCT_V1 item — see Reference → Metadata schemas */ } }, { type: "ITEM_NFT", nft: { name: "Discord access pass", description: "1 year of access to our Discord.", image: "https://cdn.example.com/pass.png" } }, ], seller: { defaultVersion: 1, name: "Your brand", contactLinks: [{ tag: "email", url: "mailto:hi@example.com" }] }, } const metadataUri = await sdk.storeMetadata(metadata) await sdk.createOffer({ /* … */, metadataUri, metadataHash: metadataUri.replace(/^ipfs:\/\//, "") }) ``` ## At redemption When the buyer redeems, your fulfillment system delivers both items: - Physical: ship the hoodie via your normal logistics. - Digital: send the Discord invite via email / XMTP / postback. Boson doesn't separate the two — they're a single exchange with a single redemption. If something goes wrong with one item, the dispute is over the whole bundle. ## Related - [Reference → Metadata schemas → BUNDLE](/reference/metadata) - [Build → Sellers → Bundles & variants](/build/sellers/bundles-variants) --- # Recipe — E2E buyer flow URL: https://www.bosonprotocol.io/docs/recipes/e2e-buyer > Browse → commit → redeem. Including ERC-20 approval and indexing-lag handling. # Recipe: End-to-end buyer flow ```ts twoslash // @noErrors import { CoreSDK } from "@bosonprotocol/core-sdk" import { EthersAdapter } from "@bosonprotocol/ethers-sdk" import { ethers } from "ethers" const CONFIG_ID = "staging-84532-0" as const const ENV_NAME = "staging" as const async function main() { const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL) const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider) const sdk = CoreSDK.fromDefaultConfig({ web3Lib: new EthersAdapter(provider, wallet), envName: ENV_NAME, configId: CONFIG_ID, }) // 1. Find an offer const offers = await sdk.getOffers({ where: { voided: false, exchangeToken: USDC_ADDRESS }, orderBy: "price", orderDirection: "asc", first: 10, }) const pick = offers[0] const tokenAddr = pick.exchangeToken.address ?? pick.exchangeToken console.log("buying offer", pick.id, "for", pick.price, tokenAddr) // 2. Approve the ERC-20 (first arg is the TOKEN address, not the offer id) await (await sdk.approveExchangeToken(tokenAddr, pick.price)).wait() // 3. Commit — commitToOffer(offerId, overrides?); buyer is the signer. const commitTx = await sdk.commitToOffer(pick.id) const receipt = await commitTx.wait() await sdk.waitForGraphNodeIndexing(receipt.blockNumber) const exchangeId = sdk.getCommittedExchangeIdFromLogs(receipt.logs) console.log("committed. exchangeId =", exchangeId) // 4. Wait for delivery (off-chain, your system) await waitForDelivery(exchangeId) // 5. Redeem await (await sdk.redeemVoucher(exchangeId)).wait() console.log("redeemed.") } ``` ## Common variations - **Native-token offers** — skip step 2; pass `{ value: pick.price }` on step 3. - **Atomic commit-and-redeem** — see [Buyers → Atomic commit-and-redeem](/build/buyers/atomic-commit-redeem); the SDK currently exposes two-step commit+redeem, with a single-tx variant available via the Diamond's `OrchestrationHandlerFacet`. - **Gas-less commit** — see [Recipe → Gas-less commit](./gasless-commit). - **Token-gated** — same flow; the commit reverts if you don't hold the gating token. ## Related - [Build → Buyers](/build/buyers) - [Quickstart → Build a marketplace](/quickstart/marketplace) --- # Recipe — E2E seller flow URL: https://www.bosonprotocol.io/docs/recipes/e2e-seller > Register → list → handle redemption → withdraw. A working script you can adapt. # Recipe: End-to-end seller flow A complete seller lifecycle in one script. Adapted from [`agentic-commerce/e2e/boson/tests/complete-marketplace-journeys.test.ts`](https://github.com/bosonprotocol/agentic-commerce/blob/main/e2e/boson/tests/complete-marketplace-journeys.test.ts). **Stack**: TypeScript, ethers v5, `@bosonprotocol/core-sdk`. **Network**: Base Sepolia. ## Setup ```bash pnpm add @bosonprotocol/core-sdk @bosonprotocol/ethers-sdk @bosonprotocol/metadata @bosonprotocol/ipfs-storage ethers@^5 export PRIVATE_KEY=0x... export RPC_URL=https://sepolia.base.org # IPFS — use an authenticated pinning endpoint. The protocol default points at # Infura, which now requires a project id. Pinata, web3.storage, or your own # Kubo node all work; pass an authenticated URL via process.env.IPFS_URL. export IPFS_URL=https://your-pinning-endpoint ``` ## The script ```ts twoslash // @noErrors import { CoreSDK } from "@bosonprotocol/core-sdk" import { EthersAdapter } from "@bosonprotocol/ethers-sdk" import { IpfsMetadataStorage } from "@bosonprotocol/ipfs-storage" import { validateMetadata } from "@bosonprotocol/metadata" import { getConfigFromConfigId } from "@bosonprotocol/common" import { ethers } from "ethers" import fs from "node:fs" const CONFIG_ID = "staging-84532-0" as const const ENV_NAME = "staging" as const async function main() { const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL) const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider) const sdk = CoreSDK.fromDefaultConfig({ web3Lib: new EthersAdapter(provider, wallet), envName: ENV_NAME, configId: CONFIG_ID, metadataStorage: new IpfsMetadataStorage(validateMetadata, { url: process.env.IPFS_URL! }), }) // 1. Create the seller (if not already created) let seller = (await sdk.getSellersByAddress(wallet.address))[0] if (!seller) { const tx = await sdk.createSeller({ assistant: wallet.address, admin: wallet.address, treasury: wallet.address, contractUri: "ipfs://Qm…", royaltyPercentage: "0", authTokenId: "0", authTokenType: 0, metadataUri: "ipfs://Qm…", }) const receipt = await tx.wait() await sdk.waitForGraphNodeIndexing(receipt.blockNumber) seller = (await sdk.getSellersByAddress(wallet.address))[0] } console.log("seller.id =", seller.id) // 2. Build & pin metadata. There's no productV1MetadataFactory — construct // the PRODUCT_V1 object directly per the schema. const uuid = crypto.randomUUID() const metadata = { schemaUrl: "https://schema.org/Product", type: "PRODUCT_V1" as const, uuid, name: "Test mug", description: "Stoneware, 12 oz.", externalUrl: `https://example.com/${uuid}`, licenseUrl: `https://example.com/${uuid}/license`, image: "https://example.com/mug.jpg", attributes: [ { traitType: "Material", value: "Stoneware" }, { traitType: "Size", value: "12 oz" }, ], product: { uuid, version: 1, title: "Test mug", description: "Stoneware, 12 oz.", productionInformation_brandName: "Your brand", details_offerCategory: "PHYSICAL", visuals_images: [{ url: "https://example.com/mug.jpg", tag: "product" }], }, seller: { defaultVersion: 1, name: "Your brand", contactLinks: [{ tag: "email", url: "mailto:hi@example.com" }] }, shipping: { returnPeriod: "14" }, exchangePolicy: { uuid: crypto.randomUUID(), version: 1, label: "fairExchangePolicy", template: "ipfs://Qm-template", sellerContactMethod: "email", disputeResolverContactMethod: "email" }, } const metadataUri = await sdk.storeMetadata(metadata) // 3. Create the offer const offerTx = await sdk.createOffer({ price: "1000000", sellerDeposit: "0", buyerCancelPenalty: "0", quantityAvailable: "10", exchangeToken: USDC_ADDRESS, metadataUri, metadataHash: metadataUri.replace(/^ipfs:\/\//, ""), // IPFS CID is the hash validFromDateInMS: Date.now(), validUntilDateInMS: Date.now() + 30 * 24 * 60 * 60 * 1000, voucherRedeemableFromDateInMS: Date.now(), voucherRedeemableUntilDateInMS: 0, voucherValidDurationInMS: 30 * 24 * 60 * 60 * 1000, disputePeriodDurationInMS: 7 * 24 * 60 * 60 * 1000, resolutionPeriodDurationInMS: 7 * 24 * 60 * 60 * 1000, collectionIndex: "0", disputeResolverId: "5", // your chain's DR; look up via sdk.getDisputeResolvers() agentId: "0", feeLimit: ethers.constants.MaxUint256.toString(), // accept any fee }) const offerReceipt = await offerTx.wait() await sdk.waitForGraphNodeIndexing(offerReceipt.blockNumber) console.log("offer published.") // 4. Listen for VoucherRedeemed and "deliver". No sdk.getDiamondContract() — // build the contract yourself using the relevant facet ABI. const exchangeAbi = JSON.parse(fs.readFileSync( "node_modules/@bosonprotocol/common/dist/cjs/abis/IBosonExchangeHandler.json", "utf8" )) const config = getConfigFromConfigId(CONFIG_ID) const diamond = new ethers.Contract(config.contracts.protocolDiamond, exchangeAbi, provider) diamond.on("VoucherRedeemed", async (offerId, exchangeId) => { console.log("redeemed:", exchangeId.toString()) // (your delivery system here) }) // 5. After the dispute window, complete & withdraw // (in production, schedule this as a periodic job) const redeemed = await sdk.getExchanges({ where: { seller: seller.id, state: "REDEEMED" }, }) for (const ex of redeemed) { if (Date.now() > Number(ex.disputePeriodEnd) * 1000) { await (await sdk.completeExchange(ex.id)).wait() } } // getFunds takes a subgraph query-vars object, not a positional id. const funds = await sdk.getFunds({ fundsFilter: { accountId: seller.id } }) await (await sdk.withdrawFunds( seller.id, funds.map(f => f.token.address), funds.map(f => f.availableAmount), )).wait() } main().catch(console.error) ``` ## Production hardening - Persist offer / exchange / withdrawal state to your own DB. - Use a managed signer (KMS, Vault, Fireblocks, Privy, Turnkey). - Wrap `completeExchange` calls in a periodic job + monitoring. - See [Going to production](/concepts/production). ## Related - [Build → Sellers](/build/sellers) - [Quickstart → Build a marketplace](/quickstart/marketplace) --- # Recipe — ERC-20 approve + commit URL: https://www.bosonprotocol.io/docs/recipes/erc20-commit > The straightforward two-step path for ERC-20-priced offers. # Recipe: ERC-20 approve + commit For ERC-20-priced offers, the buyer must approve the Diamond to pull tokens before committing. This is two transactions; both paid by the buyer. ```ts twoslash // @noErrors const sdk = CoreSDK.fromDefaultConfig({ web3Lib, envName: "production", configId: "production-137-0", }) // 1. Approve (idempotent — skip if already approved >= amount). The SDK helper // takes the token address and queries against the protocol Diamond by default. const allowance = await sdk.getExchangeTokenAllowance(USDC) if (allowance.lt(offer.price)) { // First arg is the token address, not the offer id. await (await sdk.approveExchangeToken(USDC, offer.price)).wait() } // 2. Commit — commitToOffer(offerId, overrides?); buyer is the signer. const tx = await sdk.commitToOffer(offer.id) const receipt = await tx.wait() const exchangeId = sdk.getCommittedExchangeIdFromLogs(receipt.logs) ``` ## Tips - **Approve more than `price`** if you intend to commit to several offers in the same token. Saves one `approve` per commit. - **Use `MaxUint256`** for "unlimited" approval — common UX pattern. Risk: if your buyer's private key is compromised, attacker can drain the approved amount. - **For one-shot UX, use the token-auth meta-tx flow** to combine approve + commit in a single signed envelope. See [Recipe → Gas-less commit](./gasless-commit). ## Common reverts - `InsufficientAllowance` — the buyer didn't approve enough; or they approved the wrong spender (e.g. the voucher contract instead of the Diamond). - `InsufficientBalance` — the wallet's USDC balance < `price`. - `OfferVoided` / `OfferHasExpired` — pre-flight your reads to surface this to the user. ## Related - [Build → Buyers → Commit to an offer](/build/buyers/commit) - [Troubleshooting → Approve · Permit · Permit2](/troubleshooting/approvals) --- # Recipe — Gas-less commit (Biconomy) URL: https://www.bosonprotocol.io/docs/recipes/gasless-commit > A buyer signs an EIP-712 envelope; Biconomy relays the tx and pays gas. # Recipe: Gas-less commit (Biconomy) The buyer never pays gas. They sign an EIP-712 envelope; a Biconomy relayer pays the gas, calls the Diamond's `executeMetaTransaction`, and the commit happens. For the full signing reference, see [Concepts → Signing & meta-transactions → Boson meta-tx (Biconomy)](/concepts/signing#boson-meta-tx-biconomy). ## Buyer side ```ts twoslash // @noErrors import { CoreSDK } from "@bosonprotocol/core-sdk" const sdk = CoreSDK.fromDefaultConfig({ web3Lib, envName: "production", configId: "production-137-0", }) // The meta-tx helpers live on the top-level SDK (not under a `metaTx` namespace). // // 1. Build and sign the meta-tx envelope const signedMetaTx = await sdk.signMetaTxCommitToOffer({ buyer: wallet.address, offerId, }) // 2. Relay it through the configured Biconomy endpoint const txHash = await sdk.relayMetaTransaction(signedMetaTx) console.log("commit relayed:", txHash) ``` `relayMetaTransaction` calls the configured Biconomy endpoint. The buyer's wallet never broadcasts; only the signature crosses the wire. ## For ERC-20 offers You also need the token allowance. Two options: 1. **Pre-approve** with a one-time on-chain tx (buyer pays gas once, never again). 2. **Use the token-auth meta-tx flow** to combine approve + commit in one signed envelope: ```ts twoslash // @noErrors const signed = await sdk.signMetaTxWithTokenTransferAuthorization({ functionName: "commitToOffer", functionArgs: { buyer, offerId }, tokenAuth: { type: "ERC3009", /* USDC etc. */ }, }) await sdk.relayForwardedMetaTransaction(signed) ``` See [Concepts → Signing → Token-auth meta-tx](/concepts/signing#token-auth-meta-tx) and [Reference → Core SDK → MetaTx mixin](/reference/core-sdk/meta-tx). ## Common gotchas - **Biconomy may rate-limit your relayer.** Have a fallback to direct on-chain. - **The buyer's wallet must support EIP-712 signing.** Most modern wallets do; hardware wallets need firmware updates for some payloads. ## Related - [Concepts → Signing & meta-transactions](/concepts/signing) - [Recipes → ERC-20 approve + commit](./erc20-commit) --- # Recipe — Migrate from legacy v2 URL: https://www.bosonprotocol.io/docs/recipes/migrate-v2 > For teams that integrated against the older Boson v2 docs and want to update. # Recipe: Migrate from legacy v2 The protocol surface has been stable across v2 → current, but the docs IA, package names, and best practices have shifted. This page maps old concepts to new ones. ## Concept renames | Old (v2 docs) | Now | | --- | --- | | dCommerce ecosystem | _(removed from dev docs; marketing concept)_ | | Boson Protocol v2 | _(current protocol, just called "Boson")_ | | dApp | [The Boson dApp](/tooling/dapp) | | Boson for WooCommerce | [WooCommerce plugin](/tooling/woocommerce) | | Metaverse toolkit | _(deprecated)_ | | Commit button widget | [Commit Widget](/widgets/commit) | ## Package map | Old import | Now | | --- | --- | | `@bosonprotocol/core-sdk` | _(same; current version)_ | | `@bosonprotocol/common` | _(same)_ | | `@bosonprotocol/ethers-sdk` | _(same)_ | | `@bosonprotocol/metadata` | _(same)_ | | `@bosonprotocol/ipfs-storage` | _(same)_ | | `@bosonprotocol/eth-connect-sdk` | _(unchanged; rarely used)_ | | Subgraph clients | _(part of `@bosonprotocol/subgraph`; rarely imported directly)_ | The on-chain Diamond is backwards compatible; existing exchanges from v2 continue to work. ## Doc URL redirects The new site doesn't host a `/legacy/*` namespace. Old links land on a redirect page; key ones map to: | Old URL | New URL | | --- | --- | | `legacy-docs/learning-resources/quick-start-tutorials/seller-side/selling-on-the-dapp/*` | `/build/sellers/dapp` | | `legacy-docs/learning-resources/quick-start-tutorials/seller-side/boson-for-woocommerce.md` | `/build/sellers/woocommerce` | | `legacy-docs/learning-resources/quick-start-tutorials/buyer-side/*` | `/build/buyers/dapp` | | `legacy-docs/core-concepts/dispute-resolution.md` | `/concepts/dispute-state-machine` | | `legacy-docs/core-concepts/fees.md` | `/concepts/funds` | | `legacy-docs/technical-documentation/smart-contracts/architecture.md` | `/concepts/architecture` | ## When you'll have to change code - **Import paths**: largely unchanged. - **`configId` adoption**: if your v2 integration used per-chain env vars, switch to a single `configId` per environment. - **Subgraph indexing lag**: if you weren't calling `waitForGraphNodeIndexing` after writes, start. See [Concepts → Eventing & indexing](/concepts/eventing). - **Meta-tx**: if you're on Biconomy v1, look at switching to a token-auth meta-tx — fewer steps and cleaner UX. ## Related - [Tooling overview](/tooling) - [Going to production](/concepts/production) --- # Recipe — Mutual dispute resolution URL: https://www.bosonprotocol.io/docs/recipes/mutual-dispute > Buyer and seller sign the same EIP-712 payload; whoever submits broadcasts the resolution. # Recipe: Mutual dispute resolution When a buyer raises a dispute, the simplest happy-path is mutual resolution: one party signs an EIP-712 payload agreeing on `buyerPercentBasisPoints` (0–10000) and the counterparty submits the on-chain call with that signature. ```ts twoslash // @noErrors const buyerPercentBasisPoints = 7000 // 70% to buyer // 1. Counterparty signs the proposal (here the buyer signs; either side can) const sig = await buyerSdk.signDisputeResolutionProposal({ exchangeId, buyerPercentBasisPoints, }) // sig is { r, s, v } // 2. The other party (seller in this example) submits with the signature await (await sellerSdk.resolveDispute({ exchangeId, buyerPercentBasisPoints, sigR: sig.r, sigS: sig.s, sigV: sig.v, })).wait() ``` Only one counterparty signature is required — the submitter is recovered from the calling wallet. ## When negotiation fails If the parties can't agree, the buyer can escalate to the dispute resolver — see [Buyers → Raise a dispute](/build/buyers/raise-dispute) and [Build → Dispute Resolvers](/build/dispute-resolvers). ## Common gotchas - **The signed `buyerPercentBasisPoints` must match the value the submitter passes.** Mismatch reverts. - **The signature must come from the actual buyer or seller wallet** (or a contract via EIP-1271). The Diamond verifies the recovered address against the on-chain entity. - **The dispute must be in `RESOLVING` state** when the tx submits. If escalation happened in the meantime, the resolution fails. ## Related - [Concepts → Dispute state machine](/concepts/dispute-state-machine) - [Concepts → Signing & meta-transactions](/concepts/signing) --- # Recipe — Threshold-buy agent URL: https://www.bosonprotocol.io/docs/recipes/threshold-buy-agent > An autonomous agent that watches Boson offers and commits when the price drops below a threshold. # Recipe: Threshold-buy agent An autonomous agent that finds offers matching a criteria, commits to one when the price is right, redeems, and reports. This combines [Build for AI agents](/agents), the MCP stack, and the idempotency patterns. ```ts twoslash // @noErrors import { generateText } from "ai" import { anthropic } from "@ai-sdk/anthropic" import { bosonProtocolPlugin } from "@bosonprotocol/agentic-commerce" import { getOnChainTools } from "@goat-sdk/adapter-vercel-ai" import { viem } from "@goat-sdk/wallet-viem" const tools = await getOnChainTools({ wallet: viem(walletClient), plugins: [bosonProtocolPlugin({ url: MCP_URL })], }) const SYSTEM = ` You are a Boson Protocol buyer agent on Base Sepolia. You buy items matching the user's criteria — but only if the price is below the threshold. Rules: - Never commit twice for the same goal. Persist the result to your memory store. - Always wait for indexing before reading state you just wrote. - On any error you can't classify, abort and report. ` async function tryBuyOnce(goal: { keyword: string; maxPriceUSDC: bigint }) { if (await alreadyBoughtFor(goal)) return await generateText({ model: anthropic("claude-sonnet-4-6"), tools, maxSteps: 12, system: SYSTEM, prompt: `Find an offer matching "${goal.keyword}" priced ≤ ${goal.maxPriceUSDC} USDC base units. If you find one, commit. Otherwise report no match.`, }) } // Cron loop setInterval(() => { tryBuyOnce({ keyword: "GPU", maxPriceUSDC: 500_000_000n }).catch(console.error) }, 5 * 60_000) ``` ## Required state The agent persists per-goal idempotency keys, so re-runs after crashes don't double-buy. See [Build for AI agents → Idempotency & retry](/agents/idempotency) and [Memory & state](/agents/memory). ## Production hardening - Wrap the agent in a circuit breaker — pause if the wallet balance drops or if reverts spike. - Cap max-spend per day at the wallet level (use a session key on a Safe). - Log every tool call with a correlation ID. - See [Going to production](/concepts/production). ## Related - [Quickstart → Buy with an AI agent](/quickstart/ai-agent-buyer) - [Build for AI agents](/agents) --- # Recipe — Token-gated launch URL: https://www.bosonprotocol.io/docs/recipes/token-gated > Restrict who can commit to your offer based on token holdings. # Recipe: Token-gated launch A seller restricts an offer to holders of a specific ERC-20, ERC-721, or ERC-1155. ```ts twoslash // @noErrors // Holders of >= 1 of NFT 0xabc... can buy, once each await sdk.createOfferWithCondition({ offer: { price: "1000000", quantityAvailable: "100", exchangeToken: USDC_ADDRESS, metadataUri, metadataHash, // … dates, dispute resolver, agent … }, condition: { method: 1, // 1 = Threshold tokenType: 1, // 0=ERC20, 1=ERC721, 2=ERC1155 tokenAddress: "0xabc…", tokenId: "0", // unused for threshold-721 (any token in collection) threshold: "1", // hold at least 1 maxCommits: "1", // each holder can buy once gating: 0, // 0=PerAddress, 1=PerTokenId }, }) ``` ## Variations - **Per-tokenId drops** — use `gating: 1` and each `tokenId` can be used `maxCommits` times. - **Open after threshold** — set `threshold` to e.g. `5` to require holding 5+ NFTs. - **ERC-20 thresholds** — pass `tokenType: 0` and threshold in token base units. ## Caveats - The Diamond reads the buyer's token balance at commit time. **Flash-loaning the gating token won't work** for ERC-721 (balance is checked atomically inside the tx), but the buyer could buy + commit + sell in one bundle. For very high-value drops, consider a snapshot. - Condition enum naming has drifted in older SDK versions (`SpecificToken` ↔ `TokenRange`). Pin SDK version. ## Related - [Build → Marketplace operators → Token-gated launches](/build/marketplace/token-gated) - [Reference → Core SDK → Groups mixin](/reference/core-sdk/groups) --- # Recipe — Webhook server for state changes URL: https://www.bosonprotocol.io/docs/recipes/webhook-server > A reorg-safe, idempotent event listener that posts Boson state changes to your backend. # Recipe: Webhook server for state changes Listen to the Diamond's events on your target chains, dedupe across reorgs, and POST to your fulfillment system. ```ts twoslash // @noErrors import express from "express" import { ethers } from "ethers" // There is no ProtocolDiamondABI export — combine per-facet ABIs from // @bosonprotocol/common/dist/cjs/abis/*.json. Use getConfigFromConfigId, not // getDefaultConfig. import { getConfigFromConfigId } from "@bosonprotocol/common" import offerAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonOfferHandler.json" import exchangeAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonExchangeHandler.json" import disputeAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonDisputeHandler.json" import { Pool } from "pg" const db = new Pool({ connectionString: process.env.DATABASE_URL }) const config = getConfigFromConfigId("production-137-0") const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL) const diamond = new ethers.Contract( config.contracts.protocolDiamond, [...offerAbi, ...exchangeAbi, ...disputeAbi], provider, ) const CONFIRMATIONS = 3 async function processEvent(evt: ethers.Event) { const dedupeKey = `${evt.transactionHash}:${evt.logIndex}` const { rowCount } = await db.query( "INSERT INTO processed_events (key) VALUES ($1) ON CONFLICT DO NOTHING", [dedupeKey], ) if (rowCount === 0) return // already processed // Wait for confirmations const confirmations = await provider.getTransactionReceipt(evt.transactionHash) .then(r => provider.getBlockNumber().then(head => head - r.blockNumber + 1)) if (confirmations < CONFIRMATIONS) { await db.query("DELETE FROM processed_events WHERE key=$1", [dedupeKey]) return // try again on next pass } // Forward to your backend await fetch(process.env.BACKEND_WEBHOOK_URL!, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ event: evt.event, args: evt.args, txHash: evt.transactionHash, logIndex: evt.logIndex, blockNumber: evt.blockNumber, }), }) } for (const event of ["BuyerCommitted", "VoucherRedeemed", "ExchangeCompleted", "DisputeRaised"]) { diamond.on(event, (...args) => processEvent(args.at(-1))) } // Health endpoint const app = express() app.get("/health", (_, res) => res.json({ ok: true })) app.listen(3000) ``` ## Schema ```sql CREATE TABLE processed_events ( key TEXT PRIMARY KEY, processed_at TIMESTAMPTZ NOT NULL DEFAULT now() ); ``` ## Catch-up on restart For a long-running listener, use a `last_block_number` checkpoint: ```ts twoslash // @noErrors const last = await db.query("SELECT last_block FROM listener_state") const events = await diamond.queryFilter("*", last + 1, "latest") for (const evt of events) await processEvent(evt) ``` ## Production hardening - **Alert on subgraph staleness** alongside this — your event listener might miss events under RPC instability; the subgraph is the fallback. - **HMAC-sign the POST body** before sending to your backend. - **Retry with exponential backoff** on backend failures. ## Related - [Concepts → Eventing & indexing](/concepts/eventing) - [Build → Marketplace operators → Webhooks & events](/build/marketplace/webhooks) --- # Recipe — Sell via WooCommerce URL: https://www.bosonprotocol.io/docs/recipes/woocommerce > Install the Boson for WooCommerce plugin and start selling. # Recipe: Sell via WooCommerce A no-code path for sellers who already run a WordPress / WooCommerce store. Detailed walkthrough lives at [Build → Sellers → Sell via WooCommerce](/build/sellers/woocommerce). ## Quick steps 1. Install the **Boson for WooCommerce** plugin from the WordPress plugin marketplace. 2. Connect a wallet (the plugin uses WalletConnect). 3. Run the setup wizard to create your Boson seller account. 4. In the plugin admin, map WooCommerce products → Boson offers. 5. Pick a dispute resolver from the dropdown (chain-dependent; see [Build → Dispute Resolvers](/build/dispute-resolvers)). 6. (Optional) Configure token-gating per product. 7. Save. Your storefront's checkout is now Boson-powered. ## What buyers see When a buyer reaches checkout, the plugin renders the [Boson Commit Widget](/widgets/commit) configured for that product. Commitment lands as a WooCommerce order with status "Boson committed". ## After redemption `VoucherRedeemed` events flip the WooCommerce order status to "Boson redeemed", which triggers your normal WooCommerce fulfillment flow (shipping, status emails, etc.). ## Related - [Tooling → WooCommerce plugin](/tooling/woocommerce) - [Build → Sellers → Sell via WooCommerce](/build/sellers/woocommerce) --- # Recipe — x402 buyer paying for a digital asset URL: https://www.bosonprotocol.io/docs/recipes/x402-buyer > A buyer client that makes a paid HTTP request and receives the digital asset inline. # Recipe: x402 buyer paying for a digital asset ```ts twoslash // @noErrors import { createX402bClientFetch } from "@bosonprotocol/x402-client-fetch" import { ethers } from "ethers" const wallet = new ethers.Wallet(process.env.BUYER_PRIVATE_KEY!) const fetchWithPayment = createX402bClientFetch({ signer: wallet, preferredTokenAuth: ["ERC3009", "Permit2", "Permit"], preferredFulfillment: ["inline", "ipfsPointer"], maxValue: { token: USDC_ADDRESS, amount: 5_000_000n }, // ≤ 5 USDC }) const res = await fetchWithPayment("https://api.example.com/premium-data") if (!res.ok) { console.error("payment failed:", await res.text()) process.exit(1) } const asset = await res.json() console.log("got it:", asset) ``` ## What just happened 1. Plain GET → server returned 402 with a Boson escrow option. 2. Client signed a meta-tx + ERC-3009 token authorization. 3. Re-issued with `X-PAYMENT` header. 4. Server forwarded to the facilitator → on-chain commit → atomic redeem. 5. Server returned the asset inline. ## Common gotchas - **No matching token-auth** — if the server advertises only `approve` and your client only accepts signed authorizations, the call fails. Loosen preferences or fall back to a manual approve. - **Server's facilitator is down** — you'll get 503 from the server. Retry with backoff; ultimately, you may need to find a different seller. ## Related - [Quickstart → Accept x402 escrow payments](/quickstart/x402-server) - [Build with x402 → Buyer side](/x402/buyer) - [Recipe → x402 server email-fulfillment](./x402-email) --- # Recipe — x402 server email-fulfillment URL: https://www.bosonprotocol.io/docs/recipes/x402-email > An x402b server that delivers digital codes by email after on-chain settlement. # Recipe: x402 server email-fulfillment A server protecting a "get me a license key" endpoint. After on-chain settlement, it emails the buyer. ```ts twoslash // @noErrors import express from "express" import { createX402bServerExpress } from "@bosonprotocol/x402-server-express" import { ChannelRegistry, type FulfillmentChannel } from "@bosonprotocol/x402-fulfillment" import { Resend } from "resend" import { ethers } from "ethers" const resend = new Resend(process.env.RESEND_API_KEY) const wallet = new ethers.Wallet(process.env.SELLER_PRIVATE_KEY!) const emailChannel: FulfillmentChannel = { id: "email", async fulfill({ buyer, exchangeId, deliveryInfo }) { const licenseKey = await mintLicenseKey(exchangeId) await resend.emails.send({ from: "licenses@example.com", to: deliveryInfo!.email, subject: "Your license key", text: `Thanks! Your key: ${licenseKey}`, }) }, } const x402 = createX402bServerExpress({ network: "polygon", chainId: 137, escrow: { configId: "production-137-0", sellerId: "12", productUuid: "ec00f1a5-2c96-4d22-9d80-2a7c12345678", fulfillment: { channels: ["email"] }, }, signer: wallet, facilitator: { url: "https://facilitator.bosonprotocol.io" }, channelRegistry: new ChannelRegistry([emailChannel]), }) const app = express() app.get("/api/license", x402.middleware(), async (_, res) => { // Middleware already fulfilled via the email channel. res.json({ ok: true, exchangeId: req.x402!.exchangeId }) }) app.listen(3000) ``` ## Buyer side The buyer client supplies their email in the `X-PAYMENT` envelope: ```ts twoslash // @noErrors await fetchWithPayment("https://api.example.com/license", { headers: { "x402-fulfillment": JSON.stringify({ channel: "email", email: "buyer@example.com" }), }, }) ``` ## Idempotency Persist `(exchangeId) -> emailedAt` in your DB. If a reorg or replay re-fires the redemption event, don't re-email. ## Related - [Build with x402 → Fulfillment channels](/x402/fulfillment) - [Concepts → Fulfillment channels](/concepts/fulfillment) --- # Troubleshooting URL: https://www.bosonprotocol.io/docs/troubleshooting > Things that go wrong, what they mean, and what to do. # Troubleshooting A page per common class of failure. Each page has the symptoms, the cause, and the fix. ## Pages - [Subgraph indexing lag](./troubleshooting/indexing-lag) — _the most common footgun_. - [Reverts & error codes](./troubleshooting/reverts) — decoding on-chain reverts. - [Signature mismatches](./troubleshooting/signatures) — EIP-712 didn't recover. - [Approve · Permit · Permit2](./troubleshooting/approvals) — ERC-20 authorization gotchas. - [Metadata validation](./troubleshooting/metadata) — `validate_metadata` errors and how to read them. - [Gas estimation](./troubleshooting/gas) — per-chain quirks. - [FAQ](./troubleshooting/faq) — questions that don't fit elsewhere. ## When to ask for help If you've checked the relevant page and your issue persists: 1. Reproduce on staging. 2. Capture: SDK version, `configId`, exact tool call args (redact keys), full error. 3. Post in the [Boson Discord](https://discord.gg/QSdtKRaap6) or open an issue on the relevant repo. --- # Troubleshooting — Approve · Permit · Permit2 URL: https://www.bosonprotocol.io/docs/troubleshooting/approvals > ERC-20 authorization gotchas across the four token-auth strategies. # Approve · Permit · Permit2 ## Symptom You call `commitToOffer` on an ERC-20-priced offer and the tx reverts with `InsufficientAllowance`, `ERC20: insufficient allowance`, or a similar transfer error. ## Causes ### 1. Spender mismatch You approved the wrong contract. The spender must be the **Diamond**, not the voucher (rNFT) contract. ```ts twoslash // @noErrors // WRONG await token.approve(voucherContract, amount) // RIGHT await token.approve(diamondAddress, amount) // EVEN BETTER (handled by the SDK) await sdk.approveExchangeToken(offerId, amount) ``` ### 2. Amount too small You approved `price` but didn't account for protocol/agent fees, or the offer has a buyer deposit. For a typical offer: - Buyer pays `offer.price`. - Approval must be ≥ `offer.price`. For offers with non-zero buyer deposit: - Buyer pays `offer.price + offer.buyerCancelPenalty`... no, wait: `buyerCancelPenalty` only matters on cancel. The amount transferred at commit is `offer.price`. Approve a comfortable surplus (e.g. `offer.price * 2`) to avoid this. ### 3. EIP-2612 Permit vs. ERC-3009 confusion USDC uses **ERC-3009** (`receiveWithAuthorization`), not EIP-2612 Permit. If you sign a Permit and send it for USDC, it'll either revert or be silently ignored. Use: - `ERC3009` for USDC, EURC, and other ERC-3009-supporting tokens. - `Permit` (EIP-2612) for DAI, USDS, and others. - `Permit2` as a universal fallback. See [Concepts → Signing → Token-auth meta-tx](/concepts/signing#token-auth-meta-tx) and [x402 → Token-auth strategies](/x402/token-auth). ### 4. Permit2 not pre-approved Permit2 requires a one-time approval of the Permit2 contract itself for each token. Once that's done, per-use authorizations are signed envelopes (no on-chain tx). If your buyer hasn't pre-approved Permit2 for the token, the per-use authorization will fail. ```ts twoslash // @noErrors const PERMIT2 = "0x000000000022D473030F116dDEE9F6B43aC78BA3" await token.approve(PERMIT2, ethers.constants.MaxUint256) // now Permit2-style signed envelopes work ``` ### 5. ERC-20 race conditions Some tokens (USDT, classic implementations) refuse to update allowance from a non-zero value. You must approve `0` first, then the new amount: ```ts twoslash // @noErrors await token.approve(spender, 0).then(t => t.wait()) await token.approve(spender, amount).then(t => t.wait()) ``` The SDK's `approveExchangeToken` handles this for known-problematic tokens. ## Fix summary For 95 % of cases: ```ts twoslash // @noErrors await (await sdk.approveExchangeToken(offerId, /* amount */ offer.price)).wait() await (await sdk.commitToOffer(buyer, offerId)).wait() ``` For gas-optimized UX: ```ts twoslash // @noErrors const signed = await sdk.metaTx.signMetaTxWithTokenTransferAuthorization({ functionName: "commitToOffer", functionArgs: { buyer, offerId }, tokenAuth: { type: "ERC3009" }, // for USDC }) await sdk.metaTx.relayForwardedMetaTransaction(signed) ``` ## Related - [Concepts → Signing & meta-transactions](/concepts/signing) - [Build → Buyers → Commit to an offer](/build/buyers/commit) - [Recipes → ERC-20 approve + commit](/recipes/erc20-commit) --- # Troubleshooting — FAQ URL: https://www.bosonprotocol.io/docs/troubleshooting/faq > Questions that don't fit elsewhere. # FAQ ## "Why is my transaction unsigned?" The MCP server **never signs**. State-changing tools return an unsigned tx; your code signs and broadcasts. See [Build for AI agents → The 3-step signing pattern](/agents/signing). ## "How long is the dispute window?" Set per-offer via `OfferDurations.disputePeriod`. It starts at `REDEEMED`. Typical: 7–30 days. ## "Can a seller and buyer be the same wallet?" Yes. The protocol treats them as distinct entities even if they share an address. Common for testing. ## "What happens if the voucher window expires before I redeem?" The exchange transitions to `EXPIRED`. The buyer recovers `price`; the seller keeps `sellerDeposit`. Either party can call `expireVoucher`. ## "Can I update an offer after publishing?" No. Offers are immutable. Void and re-create. ## "How do I cancel an exchange after I commit?" `cancelVoucher(exchangeId)`. You pay `buyerCancelPenalty` to the seller; rest is refunded. ## "Are gas fees included in the listed price?" No. Listed `price` is what the seller receives (minus protocol/agent fees). The buyer pays gas separately (unless using meta-tx). See [Concepts → Funds, escrow & payouts](/concepts/funds). ## "Can a smart account commit?" Yes. The Diamond accepts EIP-1271 signatures. Safe, ERC-4337 accounts, and other contract wallets work. ## "What's the difference between `cancelVoucher` and `revokeVoucher`?" `cancelVoucher` is buyer-initiated (penalty paid to seller). `revokeVoucher` is seller-initiated (seller deposit forfeited to buyer). Both end the exchange. ## "What's an `agentId` of `0`?" No protocol agent attached. The protocol fee goes entirely to Boson; no third-party cut. Set a real `agentId` only if you have a registered protocol agent. ## "How do I find my seller ID?" `sdk.getSellersByAddress(yourAddress)` or `mcp.getSellersByAddress({ wallet: yourAddress })`. ## "Does Boson work on EVM L3s / app chains?" If the chain has a Diamond deployment in the address files, yes. If not, no. Adding a new chain is a config + deployment process; open an issue. ## "Can I run Boson against a forked node?" Yes. Deploy the contracts (use `scripts/deploy-suite.js` in `boson-protocol-contracts`) and use a `local-*` ConfigId. ## "Where do I report a security issue?" Email `security@bosonprotocol.io` per the [boson-protocol-contracts security policy](https://github.com/bosonprotocol/boson-protocol-contracts/blob/main/SECURITY.md). --- # Troubleshooting — Gas estimation URL: https://www.bosonprotocol.io/docs/troubleshooting/gas > Per-chain gas quirks and how to handle them. # Gas estimation ## Symptom Tx reverts with "out of gas" despite estimation; or estimation succeeds but the tx fails on certain chains. ## Causes ### Polygon's gas dynamics Polygon's L1 fee and base fee fluctuate fast; estimation captured at time _t_ may be 30 % low at time _t+1_. Bump the gas limit ~20–30 % above the SDK's estimate for write-heavy paths. ### Base / Optimism / Arbitrum L1 data fee L2s have two gas components: L2 execution gas + L1 data fee. The L1 data fee is computed against the call data size; very large calldata (e.g. heavy metadata in a meta-tx) can spike it. Use viem / ethers' `estimateGas` and bump cautiously; over-estimating doesn't waste much on L2 (you only pay for what you use), but reverts cost the full reserved amount. ### Diamond's facet routing overhead Diamond calls have a small constant overhead (~3-5k gas) for the routing. Inside an `OrchestrationHandlerFacet` call that batches multiple operations, this overhead is paid once — but the inner operations each touch many storage slots. `createOfferAndCommitAndRedeem` is one of the heaviest paths. Reserve generously. ### MetaTx envelope overhead Meta-tx adds signature verification + nonce bumping (~30k gas) on top of the inner call. If your buyer client's estimator forgets to include this, the relayed tx reverts. The SDK's `relayMetaTransaction` accounts for this; if you build the envelope yourself, add 50k gas as a safety margin. ## Fix ### Always wait and bump ```ts twoslash // @noErrors const estimate = await sdk.estimateGas.commitToOffer(buyer, offerId) const tx = await sdk.commitToOffer(buyer, offerId, { gasLimit: estimate.mul(120).div(100), // +20% }) ``` ### Watch chain congestion Use a paid RPC for production. Free-tier RPCs (default Alchemy demo, public RPCs) throttle aggressively and give stale gas estimates under load. ### Monitor on a dashboard Track median gas per tx type per chain. Alert when median jumps > 2x — usually a chain-congestion event you'll want to ride out, not retry into. ## Related - [Concepts → Going to production](/concepts/production) - [Build for AI agents → Wallet patterns](/agents/wallets) --- # Troubleshooting — Subgraph indexing lag URL: https://www.bosonprotocol.io/docs/troubleshooting/indexing-lag > The number-one source of "the protocol is broken" reports. It isn't broken; it's lagging. # Subgraph indexing lag ## Symptom You just performed a write (commit, redeem, create offer, …), then immediately read state from the SDK or MCP, and got stale data — your new exchange isn't there, your new offer doesn't show up, etc. ## Cause The Boson subgraph (a Graph Protocol deployment) processes on-chain events asynchronously. It typically lags 1–3 blocks behind the chain head — sometimes more under load. When you call `sdk.getOffers()`, `mcp.getExchanges()`, or any SDK / MCP read method that hits the subgraph, you're querying its current view — not the chain head. ## Fix After every write, call: ```ts twoslash // @noErrors const tx = await sdk.commitToOffer(buyer, offerId) const receipt = await tx.wait() await sdk.waitForGraphNodeIndexing(receipt.blockNumber) // safe to read now ``` `waitForGraphNodeIndexing(blockNumber)` polls the subgraph's `_meta { block { number } }` until it catches up to your tx's block, or until the timeout (default ~30 s). ## For agents Make this a mandatory step in your loop. See [Build for AI agents → Idempotency & retry](/agents/idempotency). ## Alternative: read from RPC If you need real-time state (e.g. "is the offer sold out?"), read directly from the Diamond: ```ts twoslash // @noErrors // Build the Diamond contract yourself — there's no sdk.getDiamondContract() helper. import { getConfigFromConfigId } from "@bosonprotocol/common" import offerAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonOfferHandler.json" import { ethers } from "ethers" const config = getConfigFromConfigId(CONFIG_ID) const diamond = new ethers.Contract(config.contracts.protocolDiamond, offerAbi, provider) const remaining = await diamond.getAvailableQuantity(offerId) ``` RPC reads are zero-lag but have lower throughput and no convenience joins. ## When the lag persists If `waitForGraphNodeIndexing` _times out_, the subgraph is genuinely behind. Check its health: ```graphql { _meta { block { number } hasIndexingErrors } } ``` If `hasIndexingErrors == true`, report it in [Boson Discord](https://discord.gg/QSdtKRaap6). ## Related - [Concepts → Eventing & indexing](/concepts/eventing) - [Build for AI agents → Idempotency & retry](/agents/idempotency) --- # Troubleshooting — Metadata validation URL: https://www.bosonprotocol.io/docs/troubleshooting/metadata > validate_metadata errors and what to do about them. # Metadata validation ## Symptom ``` { "valid": false, "errors": [ { "path": "/productV1/title", "message": "required" }, { "path": "/productV1/images/0/url", "message": "must match format" } ] } ``` Or the on-chain `createOffer` reverts with an opaque "metadata hash mismatch" or similar. ## Causes ### 1. Schema mismatch You're using `PRODUCT_V1` fields with a `BASE` schema (or vice versa). Check `type` on the top-level metadata object. ### 2. Required field missing The error `path` tells you where. Look at the corresponding zod schema in `@bosonprotocol/metadata` — every field is required unless explicitly optional. ### 3. URL format issues Image / file URLs must be: - HTTPS (`https://...`), or - IPFS (`ipfs://Qm...`). `http://` is rejected. Some clients also reject data URLs and relative paths. ### 4. UUID format `uuid` must be a v4 UUID string (the `crypto.randomUUID()` output). Random strings won't pass. ### 5. Length overflow Metadata is capped at **20 MB**. If you embed images in `dataUrl` form, you'll blow this. Use CDN URLs or IPFS references for images. ### 6. Metadata-hash mismatch on-chain If `validate_metadata` passes but `createOffer` reverts, your `metadataHash` doesn't match what `metadataUri` resolves to. The simplest fix is to derive the hash from the URI you got back from `storeMetadata` — the IPFS CID is the hash: ```ts twoslash // @noErrors const metadataUri = await sdk.storeMetadata(metadata) const metadataHash = metadataUri.replace(/^ipfs:\/\//, "") // pass both into createOffer ``` ## Debugging Always run `validate_metadata` _before_ `storeMetadata`. Iterate until clean, then pin. This saves wasted IPFS writes. ```ts twoslash // @noErrors const { valid, errors } = await sdk.validateMetadata(metadata) if (!valid) { console.error(errors); process.exit(1) } const uri = await sdk.storeMetadata(metadata) ``` ## Schema source - [`@bosonprotocol/metadata/src`](https://github.com/bosonprotocol/core-components/tree/main/packages/metadata/src) - [Reference → Metadata schemas](/reference/metadata) ## Related - [Concepts → The metadata pipeline](/concepts/metadata) - [Build → Sellers → Publish an offer](/build/sellers/publish-offer) --- # Troubleshooting — Reverts & error codes URL: https://www.bosonprotocol.io/docs/troubleshooting/reverts > Decoding "execution reverted" into something actionable. # Reverts & error codes ## Symptom ``` Error: execution reverted (unknown custom error) ``` or with a selector like `0x82b42900`. ## Cause The Diamond's facets emit **custom errors** (Solidity 0.8.4+). The 4-byte selector identifies which error; without the ABI you can't decode it. ## Fix ### Use `sdk.parseError` ```ts twoslash // @noErrors try { await sdk.commitToOffer(buyer, offerId) } catch (err) { const parsed = sdk.parseError(err) console.error(parsed) // { code: "OfferVoided", name: "OfferVoided", args: { offerId: "123" } } } ``` ### Or decode against the merged ABI ```ts twoslash // @noErrors import offerAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonOfferHandler.json" import exchangeAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonExchangeHandler.json" import disputeAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonDisputeHandler.json" import fundsAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonFundsHandler.json" import priceAbi from "@bosonprotocol/common/dist/cjs/abis/IBosonPriceDiscoveryHandler.json" import { ethers } from "ethers" const iface = new ethers.utils.Interface([...offerAbi, ...exchangeAbi, ...disputeAbi, ...fundsAbi, ...priceAbi]) try { iface.parseError(err.data ?? err.error?.data) } catch { /* not a known custom error */ } ``` ## Common errors and their meaning | Error | Cause | Fix | | --- | --- | --- | | `RegionPaused` | Protocol region paused | Wait; check `pausedRegions()` | | `OfferHasExpired` | `validUntilDate < now` | Use a different offer | | `OfferVoided` | Seller voided the offer | Use a different offer | | `QuantityExceeded` | Sold out | Wait or try a variant | | `CannotCommit` | Token-gating condition not met | Acquire the gating token | | `ExchangeIsNotInRedeemableState` | Wrong state or window closed | Check exchange state | | `VoucherNotExpired` | Tried to expire voucher early | Wait | | `DisputeNotEscalatable` | Dispute not yet eligible to escalate | Wait for resolution window | | `InvalidNonce` | Meta-tx nonce already used | Re-fetch nonce, re-sign | | `SignatureValidationFailed` | EIP-712 didn't recover to expected signer | See [Signature mismatches](./signatures) | | `InsufficientValueReceived` | `msg.value` < price for native offer | Send more | | `InsufficientAllowance` | ERC-20 not approved | Approve first | For the full catalog, see [Reference → Contracts → Custom errors](/reference/contracts/errors). ## Logging Always log the parsed error code, not just the message. The code is grep-able; the message is wrapped by RPC providers and varies. ## Related - [Reference → Contracts → Custom errors](/reference/contracts/errors) - [Build for AI agents → Idempotency & retry](/agents/idempotency) --- # Troubleshooting — Signature mismatches URL: https://www.bosonprotocol.io/docs/troubleshooting/signatures > When EIP-712 signatures don't recover to the expected signer. # Signature mismatches ## Symptom A meta-tx or mutual-resolve call reverts with `SignatureValidationFailed` (or "recovered address doesn't match expected"). ## Causes (in rough order of likelihood) 1. **Wrong typed-data structure.** Hand-built typed-data drifts from the on-chain verifier. 2. **Wrong domain separator.** Chain ID or verifying-contract mismatch. 3. **Hardware wallet quirk.** Some HW wallets corrupt long typed-data; check firmware. 4. **EIP-1271 smart-account signature** when the verifier expects EOA, or vice versa. 5. **Stale nonce.** Signature for nonce N submitted at nonce N+1. 6. **Wrong signer.** Someone other than the expected user signed. ## Fix ### Always use the SDK / MCP signing helpers ```ts twoslash // @noErrors // CORRECT const signed = await sdk.metaTx.signMetaTxCommitToOffer({ buyer, offerId }) // WRONG: do not hand-build const signed = await wallet._signTypedData(domain, types, message) // domain drifts! ``` The SDK builds the typed-data identically to the on-chain verifier. Hand-built typed-data is the #1 cause of mismatches. ### Check the domain The EIP-712 `domain` must match the on-chain verifier exactly: ```ts { name: "BosonProtocolDiamond", version: "V2", chainId: , verifyingContract: , } ``` A `chainId` mismatch causes recovered addresses to be junk. If you're on Polygon production, the chainId must be 137 — not 1, not 80002. ### For smart accounts The Diamond accepts EIP-1271 signatures. If your buyer is a Safe, the signing flow is: 1. Safe owners sign the inner data offline. 2. Combine into a Safe signature blob. 3. The blob is what gets passed as the meta-tx signature. The Diamond calls `IERC1271.isValidSignature(hash, sig)` on the buyer address. Make sure your Safe is deployed at the address you're using. ### Nonce check ```ts twoslash // @noErrors const nonce = await diamond.getNonce(userAddress) // ensure the signature you produce uses exactly this nonce ``` ## Debugging If `SignatureValidationFailed` is intermittent under concurrency, you have a nonce race. Serialize signing or generate fresh nonces. ## Related - [Concepts → Signing & meta-transactions](/concepts/signing) - [Reference → Core SDK → MetaTx mixin](/reference/core-sdk/meta-tx) --- # Glossary URL: https://www.bosonprotocol.io/docs/glossary > Canonical definitions for Boson Protocol terminology. # Glossary Every protocol term used in these docs is defined here, exactly once. If you see a term in another page that isn't linked, that's a bug — open an issue. The rule: **one canonical name per concept**. We use the name on the left of each entry; alternate names (right of em-dash) are listed only so search finds them. ## A ### Agent (protocol role) — _aka dACP agent, protocol agent_ A registered entity that earns a fee for facilitating an exchange. **Distinct from AI agent.** Configured on an offer at creation time; the agent's wallet receives a percentage cut on completion. See [Roles](/concepts/roles#agent). ### Agent (AI) — _aka autonomous agent, agent_ An AI program (Vercel AI · LangChain · Claude SDK · etc.) that calls Boson via MCP or the SDK. Never use "agent" without a qualifier in the same paragraph where the protocol role appears. ### Atomic commit-and-redeem A single transaction that both commits to an offer and redeems the voucher. Used for instant digital deliveries. ## B ### Buyer The protocol entity that commits to an offer. Created on-chain via `createBuyer()`. One wallet can be both a buyer and a seller. ### Bundle An offer that ships multiple items together (e.g. a digital license + a physical t-shirt). Modeled by the `BUNDLE` metadata schema. ## C ### Commit The act of a buyer accepting an offer. Burns the buyer's deposit into escrow, issues an rNFT to the buyer, and transitions the new exchange to `COMMITTED`. ### ConfigId A string that uniquely identifies a protocol deployment: `${envName}-${chainId}-${index}` — e.g. `production-137-0` (Polygon mainnet, index 0) or `staging-84532-0` (Base Sepolia). Every SDK, MCP tool, and widget call takes one. Full list in [Networks & ConfigIds](/concepts/networks-and-configids). ### Core SDK The TypeScript SDK at `@bosonprotocol/core-sdk`. The primary developer entry point for human-facing apps. See [Tooling → Core SDK](/tooling/core-sdk). ## D ### dACP — _Decentralized Agentic Commerce Protocol_ Boson Protocol's product-tier name, emphasizing the agent-commerce thesis. In these docs, "Boson" and "dACP" are interchangeable; we prefer "Boson". ### Diamond The on-chain entry point. An EIP-2535 proxy aggregating 21 handler facets (offers, exchanges, disputes, funds, …). All write paths go through it. See [Architecture](/concepts/architecture). ### Dispute resolver — _DR_ A third party registered on-chain to arbitrate disputed exchanges. Can be a centralised entity, a multisig, or an external decentralised arbitration system (e.g. [Kleros](https://kleros.io)). ## E ### EIP-712 typed-data Signed structured data, used by Boson for meta-transactions and for `FullOffer` signing. See [Signing & meta-transactions](/concepts/signing). ### Escalation A dispute that has run out the resolution window without mutual agreement is escalated to the dispute resolver for a binding decision. ### Exchange A specific, on-chain instance of a buyer's commitment to a seller's offer. Has a numeric `exchangeId`, a state, and links to a single buyer, seller, and offer. The unit of state in Boson. See [Exchange state machine](/concepts/exchange-state-machine). ## F ### Facet One of the 21 handler contracts that make up the Diamond. Each facet groups related entry points (e.g. `OfferHandlerFacet`, `ExchangeHandlerFacet`). See [Reference → Contracts → Diamond facets](/reference/contracts/facets). ### Facilitator In the x402 stack, a server that relays signed meta-transactions to the Diamond on behalf of buyers. Optional. See [x402 → Facilitator](/x402/facilitator). ### Fermion — _high-value asset module_ A module of the protocol for premium / fractionalized assets, with additional roles (verifier, custodian). Surfaced as a separate MCP server. See [Build for AI agents → High-value asset module](/agents/fermion). ### FullOffer A signed EIP-712 payload representing an offer that hasn't yet been written on-chain. Used for non-listed (private / EIP-712) flows and for x402. ## G ### GOAT SDK plugin A drop-in plugin for the [GOAT SDK](https://github.com/goat-sdk/goat) that auto-registers all 56 Boson MCP tools for use with Vercel AI, LangChain, Anthropic SDK, etc. See [Tooling → MCP](/tooling/mcp). ## I ### Indexing lag The 1–3 block delay between a transaction being mined and the subgraph reflecting its effects. The number-one footgun in agent code. Handle with `coreSdk.waitForGraphNodeIndexing(blockNumber)`. See [Eventing & indexing](/concepts/eventing) and [Troubleshooting → Indexing lag](/troubleshooting/indexing-lag). ## M ### MCP — _Model Context Protocol_ Anthropic's open protocol for exposing tools to LLM agents. Boson ships a hosted MCP server at `boson-mcp-server-{staging,production}-…run.app/mcp` with ~56 tools. ### Meta-transaction A transaction signed by one party (the user) but submitted on-chain by another (a relayer or facilitator). Enables gas-less UX. Boson supports direct meta-tx, Biconomy-relayed, and token-auth variants. See [Signing & meta-transactions](/concepts/signing). ### Metadata Off-chain JSON describing an offer (title, description, images, attributes, contractual agreement). Pinned to IPFS; the URI is stored on-chain. Schemas: `PRODUCT_V1`, `BUNDLE`, `BASE`. See [The metadata pipeline](/concepts/metadata). ## O ### Offer The seller's listing. Includes price, deposit, validity window, dispute resolver, metadata URI, and (optionally) a token-gating condition. Lives on-chain after `createOffer()`. ### Orchestration A family of facets that atomically combine multiple operations (e.g. `createOfferAndCommit()`, `createOfferCommitAndRedeem()`). Used to reduce round-trips and to enable atomic commit-and-redeem. ## P ### Permit, Permit2, ERC-3009 Three on-chain token-authorization standards, all supported in Boson meta-transactions via the token-auth meta-tx flow. See [Signing & meta-transactions](/concepts/signing). ### Pre-minted voucher A voucher rNFT minted before any buyer commits. Used for limited drops. ### PRODUCT_V1 The canonical metadata schema for physical products. Distinct from `BASE` (minimum) and `BUNDLE`. See [Reference → Metadata schemas](/reference/metadata). ## R ### Redemption The buyer's act of claiming the goods or services. Transitions the exchange from `COMMITTED` to `REDEEMED` and starts the dispute window. ### rNFT — _redemption NFT, voucher_ The ERC-721 token minted to the buyer's wallet when they commit. Burned on redemption. _Within these docs, prefer "voucher" in user-facing copy and "rNFT" only when discussing on-chain mechanics._ ### Royalty recipient An entity registered to receive a percentage of secondary sales. May be the seller or a third party. ## S ### Seller The protocol entity that publishes offers. Created on-chain via `createSeller()`. Has an assistant key (operational signer) and an admin key (privileged signer). ### Sequential commit The protocol allows the same offer to be committed to by multiple buyers in sequence; each commit issues a new exchange. The protocol adds explicit batch / expiration semantics on top. ### Subgraph A Boson-maintained [Graph Protocol](https://thegraph.com) deployment that indexes on-chain events and exposes a GraphQL API for reading offers, exchanges, disputes, etc. The SDK's `Search`, `Marketplace`, and per-domain `subgraph` modules hit this. Lags 1–3 blocks behind chain. See [Eventing & indexing](/concepts/eventing). ## T ### Token-gated offer An offer with a `condition` that restricts who may commit (e.g. "must hold ≥ 1 of NFT X"). Configured at offer creation. ## V ### Voucher See **rNFT**. ## W ### Web3LibAdapter The pluggable interface that abstracts the Ethereum library (ethers v5 today; viem bridged via `walletClientToWeb3LibAdapter()`). `CoreSDK` is instantiated with one. See [Reference → Core SDK → Adapters](/reference/core-sdk/adapters). ## X ### x402 [x402.org](https://x402.org) is an open standard for in-band HTTP-402 payments. Boson's `x402b` repo extends it with on-chain escrow, fulfillment channels, and a facilitator service. See [Build with x402](/x402). --- # Pick your integration URL: https://www.bosonprotocol.io/docs/pick-your-integration > A decision tree for choosing between the SDK, MCP, widgets, x402, the dApp, and WooCommerce. # Pick your integration Boson exposes six interaction surfaces. Pick one — they all talk to the same on-chain protocol. | If you want to… | Use | | --- | --- | | Accept payment over HTTP with escrow | [x402 escrow stack](/tooling/x402) | | Build an autonomous buyer/seller agent | [MCP stack](/tooling/mcp) | | Add a buy button to an existing site | [Commit Widget](/tooling/widgets) | | Sell from a WordPress / WooCommerce store | [WooCommerce plugin](/tooling/woocommerce) | | Sell without writing code | [The Boson dApp](/tooling/dapp) | | Build a marketplace, drop, or storefront | [Core SDK](/tooling/core-sdk) (+ [React Kit](/tooling/react-kit)) | | Integrate at the contract level | [Solidity / contracts](/tooling/contracts) | ## Decision tree ```mermaid flowchart TD Start{Are you
writing code?} Start -- No --> dApp[The Boson dApp
web UI, no code] Start -- No --> Woo[WooCommerce plugin
if you run WordPress] Start -- Yes --> Audience{Building for
humans or agents?} Audience -- Humans --> NeedUI{What do
you need?} NeedUI -- Drop-in UI --> Widgets[Embeddable widgets] NeedUI -- Full marketplace --> SDK[Core SDK
+ React Kit] NeedUI -- Just the contract --> Sol[Solidity / contracts] Audience -- AI agents --> AgentTool{What rails?} AgentTool -- Typed MCP toolkit --> MCP[MCP stack
GOAT plugin or BosonMCPClient] AgentTool -- HTTP-402 payments --> X402[x402 escrow stack] ``` ## Stack capabilities at a glance See [Tooling overview → Stack comparison](/tooling) for a full feature × maturity table. ## What's the same regardless of stack These five things apply to every integration. Bookmark them: - [Networks & ConfigIds](/concepts/networks-and-configids) — which chain you're talking to. - [Signing & meta-transactions](/concepts/signing) — how to sign, who pays gas. - [Exchange state machine](/concepts/exchange-state-machine) — what states a commitment can be in and who can move it. - [Eventing & indexing](/concepts/eventing) — how to watch for state changes (and why the subgraph lags). - [Going to production](/concepts/production) — the security and operational checklist.