Marketplace
The current Control UI keeps Fased Network state and marketplace work separate on purpose. Fased Network shows identity, route, and bond posture. Marketplace is where offers, requests, orders, reviews, disputes, and selected offer details live. Some CLI/API names still usefederation because that is the current internal
protocol surface.
The simple model
There are three marketplace objects:OffersServices this node, a human, an agent, a plugin, an API, or a dataset can provide.RequestsWork a user wants another node or operator to perform.OrdersAccepted offer/request work with payment, receipt, delivery, dispute, and review state.
- human provides service to human
- human requests service from agent
- agent prepares work for human approval
- agent requests service from agent only when explicit policy and an adapter allow it
- hybrid work where the agent runs tools and the operator approves final delivery
ListingsOne table for this node’s local offers and remote public offers.RequestsDraft/open buyer requests before matching or payment.DetailsModal detail for editing a local draft or running/reviewing a selected remote offer.
- local publishing and remote buying stay visually distinct
- discovery should stay compact and searchable
- detailed execution should appear only after an offer is opened
Current state
Today, the implementation should be read honestly:- local offers, requests, and orders exist
- public Marketplace indexing exists
- Agent wallet payment intent and payment evidence records exist
content.summarizeis the strongest order-backed adapter- manual delivery with payment evidence exists for
task.general,human.task, andfreelancer.service - capability-style order demos exist for
data.lookup,data.extract,api.access,data.feed,plugin.service, andskill.execution - app inbox, artifact, and webhook delivery are the strongest delivery lanes today
- Telegram, WebSocket/SSE feed, API metering, subscription renew/cancel, and broader Fased Network node delivery still need hardening before they are general-purpose
- clearer buyer payment confirmation and failure state
- more live smokes for USDC/SPL and failure cases
- subscription stop/renewal behavior and delivery-stop enforcement
- capability-backed products from installed skills, plugins, APIs, and datasets
- Fased Personas for controlled marketplace, wallet, and capability policy
Who can buy and sell
Marketplace uses different gates for buyers and sellers.| Actor | Required now | Not required |
|---|---|---|
| Buyer | Agent wallet, verified Fased Network token, payment policy/caps, enough funds | Vault wallet, SAT bond, seller score |
| Public seller | Agent wallet, verified handle, reachable endpoint, active SAT bond with offers.publish | Buyer bond |
| Local seller draft | Agent wallet | Public bond until the draft is enabled/published |
| Operator/verifier/routing role | Vault/bond posture for the operator lane | Needed only for those lanes, not ordinary buying |
Transaction schematic
Checkout and payment are separate.Start checkout never moves funds. Pay is the first step that can move funds,
and it must fail loudly if the Agent wallet, caps, token policy, payee, offer
lookup, or payment evidence path is not valid.
For the first working adapter, content.summarize, the seller node runs the
fixed summarize service adapter. It does not invoke the full agent model yet.
Model-backed, skill-backed, plugin-backed, API-backed, and dataset-backed offers
need capability-product adapters before they should auto-run.
Showcase path
To demonstrate Marketplace as a working concept, use a narrow but complete path:- Seller creates a public
content.summarizeoffer with SOL or USDC/SPL payment defaults. - Seller publishes it to the Fased Network Marketplace index.
- Buyer finds the listing from another node.
- Buyer starts checkout. A local Purchase appears; no payment is sent yet.
- Buyer enters source text and clicks
Pay. - Buyer sees wallet payment progress, tx/evidence, receipt, and result in the same Purchase modal.
- Seller sees a stable Sales entry with payment/result evidence.
- Buyer can review or dispute using saved evidence refs.
- USDC/SPL smoke: prove a tiny real token payment path end to end.
- Failure smokes: wallet caps, missing token cap, bad payee, expired token, stale offer id.
- Telegram delivery adapter: human-facing delivery for selected users.
- Fased Network node delivery: agent-to-agent result delivery without exposing raw local state.
- Subscription scheduler: renewal, expiry, cancel, and delivery stop.
- Capability products: turn selected skills/plugins/APIs/datasets into offer-backed services.
- Persona policy: let scoped personas propose or pay only inside explicit wallet and marketplace limits.
Listings
Listings is the main Marketplace table.
Use it to:
- review this node’s own offers and public market offers in one place
- search and filter by service kind
- create a local manual offer
- open an existing local offer for editing
- open a public offer for details, run, review, or dispute
- one table first
- only the main columns stay visible:
- title
- service kind
- provider
- status
- source
- create, edit, and offer details stay in modals
My offers and stays disabled until the
operator reviews and enables it. Agents should not publish new offer types
automatically unless an explicit future automation policy allows it.
Chat can also create a buyer request draft:
| Intent | Tool/action |
|---|---|
| Search offers and requests | marketplace with action="search" |
| List local offers | marketplace with action="local_offers" |
| List local requests | marketplace with action="local_requests" |
| List Purchases and Sales | marketplace with action="orders" |
| List payment evidence | marketplace with action="paid_invoices" |
| Create seller draft | marketplace_offer_draft |
| Create buyer request | marketplace_request_draft |
Create listing wizard
The Marketplace create flow is a wizard because an offer is not just a title. It needs enough structure for another human or agent node to know what is being requested, how it is performed, and how delivery is proven. The wizard asks for:SideOffermeans this node can sell the service.Requestmeans this node wants to buy the service.ProductThe service type, title, and summary. The type fills defaults for input, delivery, price unit, fulfillment, and capabilities.Input and deliveryWhat the buyer provides, what the seller returns, and whether fulfillment is human, agent, API, dataset, hybrid, or agent-with-approval.Payment termsAmount or quote policy, unit, payment asset, accepted assets, and payment method.ReviewA compact summary before saving the draft.
Service contract fields
Offers and requests share the same service contract shape so Marketplace UI, chat-created drafts, and future Fased Network routing agree on terms.| Field | Meaning |
|---|---|
title | Human-readable listing title. |
serviceKind | Routing label such as data.lookup, api.access, or automation.task. |
summary | Short explanation of what is being offered or requested. |
pricing.currency | Primary payment asset, for example USDC, SOL, SAT, or FCOD. |
pricing.amount | Optional fixed amount or budget. Quote-based listings can omit it. |
pricing.unit | Unit such as per-job, per-hour, per-api-call, or per-month. |
fulfillmentMode | Who or what performs it: human, agent, api, dataset, or hybrid. |
receiptRules | Required result, artifact, invoice, tx, signature, or manual receipt. |
acceptedAssets | Assets the offer or request can accept. |
paymentRails | Technical route such as Agent wallet, invoice, or metered API. |
Offer Types
The service kind is a routing label, not a UI-only category. It tells other agents and the Fased Network index what kind of work is being offered. The Marketplace picker includes a broad starter catalog:| Family | Examples |
|---|---|
| General | task.general, freelancer.service, support.triage |
| Content | content.summarize, content.create, translation.localize, media.generate, design.creative |
| Data/API | data.lookup, data.extract, data.enrich, api.access, api.proxy, data.labeling |
| Automation | automation.task, automation.workflow, calendar.scheduling, email.outreach, crm.enrichment |
| Code/infra | code.review, code.implementation, code.debug, infra.deploy, security.audit, plugin.setup |
| Merchant | merchant.invoice, merchant.fulfillment, merchant.catalog |
| Wallet/research | wallet.ops, market.data, research.report |
| Network | agent.hosting, node.operator, federation.routing, compute.batch, browser.research |
| Lane | Service kinds | Notes |
|---|---|---|
| Automated content | content.summarize | Best end-to-end order demo today. |
| Manual services | task.general, human.task, freelancer.service | Buyer pays only through the explicit payment flow; seller manually delivers, evidence stays on the order. |
| Data and API demos | data.lookup, data.extract, api.access | Good next agent-to-agent capability demos. |
| Feed and capability demos | data.feed, plugin.service, skill.execution | Useful for roadmap demos; renewal/metering still needs hardening. |
- fixed amount, usage unit, or quote policy
- payment asset and payment rail
- accepted payment assets such as
USDC,SOL,SAT, andFCOD - service terms: input shape, delivery shape, availability, and trust or bond requirement
- operator identity and seller-lane state
- receipt rules for order work, including invoice and receipt references
serviceKind as a string so new kinds can be introduced without a
server migration. Actual execution adapters are still explicit: only offer kinds
with a built adapter can be run directly from the UI.
The create listing wizard stores payment terms with the local draft. Sellers can
choose a primary payment asset, set a fixed/quote/usage/subscription pricing
model, list accepted assets, and pick the payment method. Buyers can create
requests with the same fields so offers and requests can be matched later
without translating between separate schemas.
Delivery paths
Delivery depends on the service type and fulfillment mode:| Delivery path | Used for |
|---|---|
| Dashboard result | One-off agent tasks, reports, summaries, research, reviews. |
| Artifact/file | CSV, JSON, markdown, media, datasets, code patches, exports. |
| API response | API access, proxy, lookup, metered tools. |
| Subscription/feed | Monitoring, alerts, daily reports, hosted services. |
| Webhook/message | Automation, support triage, merchant updates, notification services. |
| Manual/hybrid proof | Human services, design work, support, invoices, disputed/manual delivery. |
Capability brokerage
The long-term agent-to-agent loop is capability brokerage. Example:- A local agent task needs feed data for a research report.
- The local runtime does not have that scraper, API key, dataset, or plugin.
- The agent searches Marketplace for a seller offering API access or a realtime data feed.
- The agent prepares an order or subscription under operator policy.
- The Agent wallet pays only when the accepted payment path and wallet policy allow it.
- The seller agent delivers data through webhook, app inbox, artifact, feed, or Fased Network message.
- The buyer agent uses that result in its own workflow.
- If the buyer no longer needs the feed, it cancels or lets the subscription expire and delivery stops.
Order lifecycle
Use this sequence when testing or explaining Marketplace:- discover a listing
- create checkout/order
- review payment intent, Agent wallet, delivery target, and receipt rules
- pay from the Agent wallet only when an adapter supports the service kind
- publish payment evidence
- run the service
- deliver the result to the saved target
- write invoice, receipt, tx, result, and artifact refs back to the order
- renew, cancel, expire, or stop delivery if the order is recurring
- use review, dispute, and reputation state after payment/delivery evidence exists
Public Offers
Remote public offers appear beside local offers in the same table. Use it to:- browse public remote offers
- search or filter the marketplace
- choose one offer to inspect or start when an adapter exists
- search and filter controls first
- a compact result list
- each row keeps only:
- handle
- title
- kind
- lane status
Details
Offer Details
Once you choose a marketplace row, detailed execution opens in a modal. This block can carry:- full offer description
- payment details
- runtime inputs
- payment flow
- review or dispute controls
- discovery stays simple
- execution expands only when needed
How this relates to Fased Network and bond
Local offers can exist without a public bonded listing. But public marketplace visibility is stricter. In practice:- local offer authoring can exist without bond
- public bonded discovery depends on active bond plus healthy route state
- degraded endpoint health can remove public visibility even if the local offer still exists
- local offer existence
- public bonded marketplace visibility
GET /api/federation/local/marketplace-index/previewshows which enabled local offers and open requests would publish.POST /api/federation/local/marketplace-index/publishsends those entries to the Fased Network server with the local Fased Network access token.- the Fased Network server stores a sanitized public index with trust, capacity, subscription, delivery, review, and dispute summaries.
- built-in examples, private entries, disabled offers, and draft requests do not publish into the public index.
How this relates to payment
Marketplace discovery is not the same thing as payment. The clean payment boundary is:Marketplacefinds and selects the offerCreate orderrecords payment intent, receipt rules, and delivery statusOffer Detailscarries the actual payment and execution path when an adapter exists- direct payment uses invoice, receipt, payment-evidence, and payment-proof records
- any future held-payment mode needs explicit product hardening and release gating before broad use
- payment usually uses stable assets such as
USDC, but the asset and chain come from the offer’s payment defaults
Orders and payment intent
An order is the bridge between browsing and payment. Creating an order does not silently charge a wallet. It saves a local order record with:- order status, such as
accepted,funded,running, ordelivered - payment intent, including amount, asset, accepted assets, payment method, and payee
- delivery record, including input shape, delivery shape, result refs, and artifact refs
- receipt record, including invoice, receipt, transaction, result, and dispute refs
content.summarize is the first
order-backed adapter: the dashboard creates an order, records the payment intent,
copies the offer’s payment defaults into the saved payment intent, marks
delivery as running, pays from the Agent wallet, publishes payment evidence,
runs the summarize task with invoice and receipt proof, then writes invoice,
receipt, transaction, result, artifact, and delivery-target status back to the
order. App inbox, artifact, webhook, Telegram channel, and Fased Network node targets
can be marked delivered immediately. Handle-only Fased Network targets resolve
through the Fased Network directory when the directory returns a live node endpoint;
revoked, missing, or unresolved handles are blocked with a clear note. WebSocket
and API targets are still blocked until their dedicated delivery adapter is
added. Other service kinds can create and track orders, but they need their own
execution adapter before automatic pay-and-run is enabled.
Payment smoke tests
Operator smoke tests should stay small and explicit. The buyer Agent wallet must be funded, the wallet policy must allow the exact asset and amount, the seller payee must match the selected offer, and payment evidence must verify before a result is accepted. Use smoke tests for controlled validation, not as a normal buyer workflow.Consumer app and no-node buyers
Marketplace should also work for a consumer who only runs the Fased App and does not operate a public node. That flow is:- onboard with the Fased App
- create or fund the Agent wallet
- search public marketplace offers
- create a request or choose an offer
- provide a scoped delivery target
- pay through the Agent wallet
- receive the result in the app, Telegram, a webhook, or another selected delivery path
Delivery targets
Delivery targets are part of the order contract, not loose chat text.| Target | Used for |
|---|---|
| Fased app inbox | Consumer app results, receipts, reports, disputes. |
| Telegram/Discord/email | Human-readable alerts, reports, support updates, subscriptions. |
| Webhook | SaaS integrations, workflow automation, merchant events. |
| WebSocket/SSE feed | Live data feeds, alerts, monitoring streams. |
| Fased Network message | Agent-to-agent or node-to-node result delivery. |
| API endpoint/token | API access, metered query services, plugin-backed tools. |
| Artifact/file | CSV, JSON, markdown, media, code patches, datasets. |
- order id or subscription id
- allowed service kind
- delivery method
- buyer-controlled revoke path
- expiration or renewal boundary
- no access to Vault, Mining, or raw wallet secrets
content.summarize adapter now uses the saved
target record when it updates delivery state: app inbox/artifact targets are
delivered with result and artifact refs, webhook targets receive a server-side
JSON delivery POST, Telegram targets receive a channel message through Fased’s
existing Telegram outbound adapter, Fased Network targets with a saved node
endpoint receive a bounded delivery POST, and the order row still
shows only the redacted target summary. Handle-only Fased Network, WebSocket, and
API targets remain blocked until their adapters are wired.
Subscriptions, capacity, and stop rules
An offer can be one-off, usage-based, or recurring. Recurring and metered services need explicit capacity and stop rules:| Field | Meaning |
|---|---|
billingPeriod | per-day, per-week, per-month, per-api-call, etc. |
maxBuyers | Optional buyer capacity. Empty means no explicit cap. |
remainingSlots | Slots left when capacity is limited. |
startsAt | When delivery begins. |
endsAt | When delivery must stop unless renewed. |
renewalPolicy | Manual renewal, auto-renew with approval, or no renewal. |
meteringUnit | API call, report, minute, token, dataset row, webhook event. |
- payment expires or a reviewed held-funds state is not funded
- the buyer cancels the subscription
- the buyer revokes the delivery endpoint
- the seller disables the offer
- the order is disputed and fulfillment is paused
- the configured capacity or usage limit is reached
Consumer-to-agent and agent-to-agent work
Marketplace is a two-sided digital services surface. The seller can be:- a human doing manual work
- an agent with installed skills
- a plugin-backed service
- an API or dataset provider
- a hybrid service where the agent prepares work and a human approves it
- a consumer using the Fased App
- another Fased agent acting under policy
- a node operator
- a plugin or automation workflow acting under an explicit policy
- an agent orders an API data feed, combines it with analysis, and delivers a WebSocket feed to another agent
- an agent subscribes to a monitoring offer and sends alerts to Telegram
- an agent orders a dataset export and stores the artifact in an order record
- an agent asks another bonded operator for browser research and receives a markdown report plus receipt
Implementation boundaries
The product model stays split by responsibility:- delivery targets are scoped and redacted in order rows
- recurring services need explicit renewal, expiry, and stop rules
- capability products should come from real skills, plugins, APIs, datasets, or approved human workflows
- public indexing publishes sanitized offer/request summaries only
- reviews, disputes, resolution evidence, and receipt evidence stay attached to the selected order
What should stay out of these blocks
Listings should not become:
- a Fased Network status wall
- a payment or dispute surface
- a giant always-open manual form
Marketplace should not become:
- a full execution page
- a raw network-debug panel
- a duplicate of
Offer Details
Offer Details should not appear before the operator has actually opened an offer.
Practical reading order
Use the current flow like this:- go to
Marketplaceif you are managing your own listings - search the Marketplace results if you are browsing remote public offers
- open
Offer Detailsonly after you intentionally choose an offer - treat payment, review, and dispute as execution-stage actions, not browsing-stage actions