{"name":"ai.bitroad/bitroad","slug":"bitroad","title":null,"description":"Marketplace for AI agents: buy goods and services under spending caps, with returns and disputes.","url":"https://mcp.market/server/bitroad","rating":null,"grade":"B","score":77,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":15,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-07T20:12:30.000Z","license":"MIT"},"uptime":{"percent":54,"checks":28,"ok":15,"last_checked_at":"2026-11-04T11:25:35.816Z","last_ok_at":"2026-11-04T11:25:35.816Z","latency_ms":434},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/bitroadai/bitroad-mcp","website":null,"version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://app.bitroad.ai/api/v1/mcp"}],"packages":[],"tools":[{"name":"addresses_create","description":"Save a new shipping address. Set is_default_shipping=true to make it the default.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"recipient_name":{"description":"Full name of the delivery recipient.","type":"string","minLength":1,"maxLength":120},"line1":{"description":"First address line (street address).","type":"string","minLength":1,"maxLength":200},"line2":{"description":"Second address line, if any.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"town":{"description":"Town or city.","type":"string","minLength":1,"maxLength":120},"region":{"description":"Two-letter US state code (e.g. CA); required for country=US, unused for GB.","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"postcode":{"description":"UK postcode for GB; US ZIP as 12345 or 12345-6789.","type":"string","minLength":2,"maxLength":12},"country":{"description":"Destination country code: GB (default) or US.","default":"GB","type":"string","enum":["GB","US"]},"phone":{"description":"Contact phone number for delivery, if any.","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"is_default_shipping":{"description":"When true, make this the buyer's default shipping address. Defaults to false.","default":false,"type":"boolean"}},"required":["recipient_name","line1","town","postcode","country","is_default_shipping"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"addresses_list","description":"List the principal's saved shipping addresses. The agent does NOT need to call this every purchase — purchase_create_intent will use the principal's default shipping address if `address_id` is omitted.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"auth_revoke_self","description":"Disconnect this OAuth connection by revoking the access+refresh chain that issued the token making this call. Idempotent: a second call returns `{ revoked: false, reason: 'already_revoked' }`. Refuses with `not_oauth_token` when called under an br_ik_* instance key — rotate those from the dashboard instead.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"auth_whoami","description":"Return who this MCP credential acts as: principal email/role, agent name, client (Claude install) that issued the token, and when it was last used. Works for both br_ik_* instance keys and br_oat_* OAuth tokens; OAuth-specific fields are null when called under an instance key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"catalog_describe_category","description":"Fetch one category by slug, including the spec JSON Schema for leaf categories. Useful before building a structured purchase intent so the agent emits a valid spec query.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"description":"Slug of the category to describe, e.g. \"electronics/phones/smartphones\".","type":"string","minLength":1}},"required":["slug"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"catalog_get_product","description":"Fetch a single product by id. Returns full description, structured spec values, seller id, live stock, and any restricted-goods flags. Prefer this over re-running search when the agent already has the product id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product_id":{"description":"UUID of the product to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["product_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"catalog_list_categories","description":"List the marketplace's category taxonomy. Optionally pass `slug` to scope to a subtree (e.g. 'electronics'). Each leaf carries its JSON Schema for specs, plus filterable / rangeable arrays so agents know which spec keys are queryable.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"description":"Category slug to root the listing at (that node plus descendants); omit for the full tree.","type":"string"}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"catalog_search_products","description":"Search marketplace products by free-text query, optional category, or seller. Returns a paginated list of summaries with pence-denominated prices, available stock, and restricted-goods flags. Pass a concise phrase, not a full sentence.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"q":{"description":"Free-text query matched case-insensitively against product title and description.","type":"string","maxLength":200},"category":{"description":"Category slug to filter by (see catalog_list_categories); unknown slugs return no hits.","type":"string","maxLength":120},"category_subtree":{"description":"When true, also match products in descendant categories of `category`. Defaults to false.","default":false,"type":"boolean"},"seller_id":{"description":"Filter to one seller's listings.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"certifications":{"description":"Only products carrying at least one of these certification strings.","type":"array","items":{"type":"string"}},"restricted":{"description":"Restricted-goods filter: exclude_age (default) hides age-restricted items, exclude_all hides all restricted, allow hides none.","default":"exclude_age","type":"string","enum":["allow","exclude_age","exclude_all"]},"min_seller_tier":{"description":"Minimum seller verification tier: basic (default) < verified < premium.","default":"basic","type":"string","enum":["basic","verified","premium"]},"improves_on_statutory":{"description":"When true, only products whose return policy improves on the statutory minimum.","type":"boolean"},"spec":{"description":"Exact-match filters on category spec fields, as key/value pairs.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"spec_min":{"description":"Numeric lower bounds on spec fields; keys must be rangeable for the given leaf `category`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"spec_max":{"description":"Numeric upper bounds on spec fields; keys must be rangeable for the given leaf `category`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"page_size":{"description":"Results per page, 1-100. Defaults to 20.","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from next_cursor in the previous page; omit for the first page.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["category_subtree","restricted","min_seller_tier","page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"disputes_add_evidence","description":"Attach an evidence item to an open dispute. The body is base64-encoded; per-item cap is 25 MB and per-dispute cap is 200 MB. Either the filing buyer or the seller-owner can upload.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dispute_id":{"description":"UUID of the open dispute to attach evidence to.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"kind":{"description":"What the evidence item is.","type":"string","enum":["image","document","delivery_proof","communication_log","other"]},"mime_type":{"description":"MIME type of the file, e.g. 'image/jpeg'.","type":"string","minLength":1,"maxLength":120},"body_b64":{"description":"File contents, base64-encoded. Max 25 MB per item.","type":"string","maxLength":34952536},"caption":{"description":"Optional caption shown alongside the evidence item.","anyOf":[{"type":"string","maxLength":500},{"type":"null"}]}},"required":["dispute_id","kind","mime_type","body_b64"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"disputes_file","description":"File a dispute on a goods order (order_id; reasons: not_as_described, defective, not_received, fraud_unauthorized_charge, duplicate_charge, other) or a service quote (service_quote_id; reasons: service_not_delivered, service_quality, service_scope_mismatch, plus the generic three). Exactly one target. Filing on a service quote pauses its payout auto-release. A deterministic auto-classifier resolves clear-cut cases; the rest route to admin review with a 72h seller SLA.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"UUID of the goods order in dispute. Provide exactly one of order_id / service_quote_id.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"service_quote_id":{"description":"UUID of the service quote in dispute. Provide exactly one of order_id / service_quote_id.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"reason":{"description":"Dispute reason. not_as_described/defective/not_received are goods-only; service_* reasons are service-quote-only.","type":"string","enum":["not_as_described","defective","not_received","fraud_unauthorized_charge","duplicate_charge","other","service_not_delivered","service_quality","service_scope_mismatch"]},"summary":{"description":"Plain-text account of the problem, max 4000 chars.","type":"string","minLength":1,"maxLength":4000},"desired_outcome":{"description":"What the buyer wants, e.g. a full refund. Max 500 chars.","anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"claimed_amount_pence":{"description":"Amount claimed, in pence (minor units); cannot exceed the charged total. Omit if unsure.","anyOf":[{"anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},{"type":"null"}]}},"required":["reason","summary"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"disputes_get","description":"Fetch one dispute by id with the full evidence trail and timeline. Buyer-side or seller-side caller — returns 404 if the dispute doesn't belong to either of the calling actor's roles.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dispute_id":{"description":"UUID of the dispute to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["dispute_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"disputes_list","description":"List disputes for the authenticated principal (buyer-side: ones they filed; seller-side: ones filed against their orders). Filter by `status` (admin_review, awaiting_seller, resolved_for_buyer, resolved_for_seller, withdrawn).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"description":"Filter to a single dispute status; omit for all statuses.","type":"string","enum":["filed","triaged","auto_resolved_buyer","auto_resolved_seller","admin_review","resolved_buyer","resolved_seller","resolved_split","withdrawn","expired"]},"page_size":{"description":"Results per page, 1-100. Defaults to 20.","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from next_cursor in the previous page; omit for the first page.","type":"string"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"disputes_respond","description":"Seller-side response to a dispute. Requires the seller delegation's `respond_dispute` action. Free-form text 1–4000 chars.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dispute_id":{"description":"UUID of the dispute being responded to.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"text":{"description":"The seller's response, free-form text.","type":"string","minLength":1,"maxLength":4000}},"required":["dispute_id","text"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"disputes_withdraw","description":"Buyer-only: withdraw an open dispute. Closed disputes cannot be withdrawn.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dispute_id":{"description":"UUID of the open dispute to withdraw.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["dispute_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"envelopes_get","description":"Fetch a single envelope by id. Returns the same shape as envelopes_list. Returns 404 when the envelope is not bound to the calling agent instance.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"envelope_id":{"description":"UUID of the payment envelope to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["envelope_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"envelopes_list","description":"List the active and historical payment envelopes the calling agent instance can draw against. Each entry shows balance, scope, validity, and per-tx / per-day caps. Read-only — envelopes are created, topped up, and revoked by the principal in the dashboard.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"orders_get","description":"Fetch a single order with line items, shipment / tracking, payment status, and any associated returns or disputes. Buyer-side view — for seller-side use seller_get_order.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"UUID of the order to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["order_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"orders_list","description":"List orders the authenticated principal placed (buyer-side view), paginated with a cursor. Optional status filter (e.g. 'paid_awaiting_fulfillment', 'delivered', 'cancelled'). Use this to find an order id before calling orders_get.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"description":"Filter to a single order status; omit for all statuses.","type":"string","enum":["paid_awaiting_fulfillment","shipped","delivered","cancelled","refunded"]},"page_size":{"description":"Results per page, 1-100. Defaults to 20.","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from next_cursor in the previous page; omit for the first page.","type":"string"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"payment_methods_create","description":"Returns a one-time Stripe Checkout URL to hand the user so they can add a payment card. The card is saved to their account automatically when they complete the hosted flow — no charge is made (setup mode only). Present the `checkout_url` to the user as a link to open in a browser; there is nothing else for the agent to do. Buyer principals only. Pass `kind: 'bacs_debit'` instead to set up a Bacs Direct Debit mandate that settles the monthly tab; business accounts only (others get 409 `bacs_business_only`), and only while Bacs settlement is enabled.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"kind":{"description":"What to set up: a payment card (the default), or a Bacs Direct Debit mandate. Direct Debit is for business accounts only and settles the monthly tab.","default":"card","type":"string","enum":["card","bacs_debit"]}},"required":["kind"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"payment_methods_list","description":"List the principal's saved payment methods (last4 + brand only — full card numbers are never exposed to agents). purchase_confirm_intent uses the principal's default method if no `payment_method_id` is passed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"platforms_get","description":"Fetch a platform's public reputation profile by slug: KYC status, rolling-window orders/disputes/refunds, on-time-ship rate, dispute resolution p50/p95, anomaly-pause count. Decommissioned platforms include the banner and reason.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"description":"URL slug of the platform to fetch (not a UUID).","type":"string","minLength":1,"maxLength":120}},"required":["slug"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"purchase_cancel_intent","description":"Cancel a pending purchase intent and release the stock reservation.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"intent_id":{"description":"UUID of the pending intent to cancel.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["intent_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"purchase_confirm_intent","description":"Confirm a purchase intent — re-validates price within 1p tolerance, charges via Stripe Connect destination charges (per-seller application fee on item only), and creates the order. May return SCA / payment-action-required / declined errors.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"intent_id":{"description":"UUID of the purchase intent to confirm.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"acknowledged_confirmation":{"description":"Set true to acknowledge an intent that requires explicit confirmation. Defaults to false.","default":false,"type":"boolean"},"confirmation_token":{"description":"Token from the confirmation_required response; must match when acknowledging a confirmation.","anyOf":[{"type":"string"},{"type":"null"}]},"__outcomeForTesting":{"description":"Test-only override of the simulated card outcome. Omit in normal use.","type":"string","enum":["ok","requires_action","declined","provider_error"]}},"required":["intent_id","acknowledged_confirmation"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"purchase_create_intent","description":"Create a purchase intent for a product. Reserves stock, snapshots price + VAT + shipping, and consults the delegation policy. Returns an intent id; intents expire after 15 minutes if not confirmed. Combined postage: same-seller purchases to the same address while earlier orders are unshipped are only charged the postage difference, so confirm each purchase before creating the next intent; an intent created while the previous one is unconfirmed pays full postage.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"product_id":{"description":"UUID of the product to purchase.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"quantity":{"description":"Units to buy, 1-100. Defaults to 1.","default":1,"type":"integer","minimum":1,"maximum":100},"address_id":{"description":"UUID of a saved shipping address; defaults to the buyer's default address.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"payment_method_id":{"description":"UUID of a saved payment method owned by the buyer; defaults to the buyer's default card.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["product_id","quantity"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"returns_get","description":"Fetch a single return by id, including reason, status, restocking fee (if any), refund ledger, and the inspection trail once the parcel has arrived.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"return_id":{"description":"UUID of the return to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["return_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"returns_get_label","description":"Fetch a short-lived signed URL for the return shipping label PDF. URL expires within minutes; re-call to get a fresh one. Only available once the return has progressed to label_ready.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"return_id":{"description":"UUID of the return whose label is being fetched.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["return_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"returns_initiate","description":"Initiate a return on a delivered order. Uniform platform policy: a 30-day change-of-mind window from delivery, FREE, full refund, NO restocking fee, and the SELLER funds the return label. Reasons: cooling_off_statutory (days 0–14) and cooling_off_extended (days 15–30) are change-of-mind; defective is a faulty-item (CRA 2015) claim — full refund within 30 days, and past that it is recorded and routed for manual repair/replacement handling rather than denied. The seller must upload a prepaid label within 2 business days of approval or the buyer is auto-refunded. Idempotent on order_id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"UUID of the order to return.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"reason":{"description":"Why the item is coming back: statutory 14-day cooling-off, seller's extended cooling-off window, or defective goods.","type":"string","enum":["cooling_off_statutory","cooling_off_extended","defective"]},"description":{"description":"Free-text detail about the return, max 2000 chars.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["order_id","reason"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"returns_list","description":"List returns the authenticated principal filed (buyer-side view), paginated. Filter by `order_id` to find returns on a specific order, or by `status` (initiated, label_ready, in_transit, received, refunded, rejected).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"Filter to returns for one order.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"status":{"description":"Filter to a single return status; omit for all statuses.","type":"string","enum":["requested","approved","received","refunded","rejected","expired"]},"page_size":{"description":"Results per page, 1-100. Defaults to 20.","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from next_cursor in the previous page; omit for the first page.","type":"string"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_accept_return","description":"Acknowledge that a returned parcel arrived and was inspected. Moves return: approved → received. The refund engine runs idempotently afterwards via the existing webhook flow.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"return_id":{"description":"UUID of the return to accept. Acceptance refunds the buyer immediately (idempotent).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"inspection_notes":{"description":"Optional inspection notes recorded on the return (max 2000 chars).","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["return_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_archive_listing","description":"Soft-delete a listing (is_active=false). Refuses while any purchase intents are still pending against it.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product_id":{"description":"UUID of the listing to archive (deactivate). Refused while purchase intents are pending.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["product_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_attach_tracking","description":"Attach or update tracking on an already-shipped order. Use mark_shipped for first ship; this is for late-arriving tracking only.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"UUID of the order to attach tracking to (must be awaiting fulfilment or shipped).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"carrier":{"description":"Carrier handling the shipment.","type":"string","enum":["royal_mail","dpd","other"]},"tracking_number":{"description":"Carrier tracking number; replaces any tracking already on the shipment.","type":"string","minLength":1,"maxLength":120}},"required":["order_id","carrier","tracking_number"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_create_listing","description":"Create a product listing. Validates the payload against the leaf category's spec schema and the structured return policy. Restricted-goods classifier runs at write time; flagged listings are inserted but invisible until cleared.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"title":{"description":"Product title shown to buyers (1-300 chars).","type":"string","minLength":1,"maxLength":300},"description":{"description":"Full product description (max 20000 chars).","type":"string","maxLength":20000},"category_slug":{"description":"Slug of a leaf catalog category to list under.","type":"string","minLength":1},"price_pence":{"description":"Item price in pence (integer minor units of the seller's currency).","anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"shipping_pence":{"description":"Shipping charge in pence (integer minor units). Defaults to 0.","default":0,"anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"vat_rate_bp":{"description":"VAT rate in basis points, 0-2500 (2000 = 20%). Defaults to 0.","default":0,"type":"integer","minimum":0,"maximum":2500},"stock":{"description":"Initial units in stock. Defaults to 0.","default":0,"type":"integer","minimum":0,"maximum":9007199254740991},"images":{"description":"Image URLs (https, max 12); the first entry becomes the primary image.","default":[],"maxItems":12,"type":"array","items":{"type":"string","maxLength":2000,"format":"uri"}},"weight_grams":{"description":"Item weight in grams.","type":"integer","minimum":0,"maximum":9007199254740991},"length_mm":{"description":"Package length in millimetres.","type":"integer","minimum":0,"maximum":9007199254740991},"width_mm":{"description":"Package width in millimetres.","type":"integer","minimum":0,"maximum":9007199254740991},"height_mm":{"description":"Package height in millimetres.","type":"integer","minimum":0,"maximum":9007199254740991},"country_of_origin":{"description":"ISO 3166-1 alpha-2 country of origin (e.g. GB).","type":"string","minLength":2,"maxLength":2},"certifications":{"description":"Certification labels the product holds (free-form strings).","default":[],"type":"array","items":{"type":"string"}},"specs":{"description":"Category-specific spec values; must match the category's spec schema.","default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"return_policy":{"description":"Return-policy object; omit to use the seller-country default. Validated against platform floors."},"slug":{"description":"URL slug base (lowercase letters, digits, hyphens); a random suffix is appended. Omit to derive from title.","type":"string","maxLength":200,"pattern":"^[a-z0-9][a-z0-9-]*$"}},"required":["title","description","category_slug","price_pence","shipping_pence","vat_rate_bp","stock","images","certifications","specs"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_get_listing","description":"Fetch a single listing the bound seller owns, including its full description, current stock + reserved counts, spec values, and any moderation state. Refuses if the listing belongs to a different seller.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product_id":{"description":"UUID of the listing to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["product_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_get_me","description":"Fetch the seller record bound to the calling principal or seller-side agent instance. Refuses when the caller has no seller record.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_get_order","description":"Fetch a single seller-scoped order with buyer shipping address (PII-redacted where the policy requires it), items, shipment, payment status, and any associated return/dispute. Refuses if the order isn't against this seller.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"UUID of the order to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["order_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_get_return","description":"Fetch a single return filed against one of the bound seller's orders, with reason, status, restocking fee, inspection notes, and the refund ledger. Refuses if the return isn't on a seller-owned order.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"return_id":{"description":"UUID of the return to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["return_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_list_listings","description":"List the bound seller's product listings, paginated. Includes archived/flagged listings by default — pass `is_active: true` to filter to live listings only. Returns slug, category, stock, price, and any moderation flags.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"is_active":{"description":"Filter by active status; omit to include archived listings too.","type":"boolean"},"page_size":{"description":"Results per page (1-100, default 20).","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from the previous page's next_cursor.","type":"string"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_list_orders","description":"List orders placed against the bound seller's products (seller-side view), paginated. Filter by `status` (e.g. 'paid_awaiting_fulfillment' to find orders that need shipping). This is the seller-equivalent of orders_list.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"description":"Filter by order status; omit for all orders.","type":"string","enum":["paid_awaiting_fulfillment","shipped","delivered","cancelled","refunded"]},"page_size":{"description":"Results per page (1-100, default 20).","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from the previous page's next_cursor.","type":"string"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_list_returns","description":"List returns filed against the bound seller's orders, paginated. Filter by `status` (initiated, label_ready, in_transit, received, refunded, rejected) to triage what needs inspection. Seller-equivalent of returns_list.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"description":"Filter by return status; omit for all returns.","type":"string","enum":["requested","approved","received","refunded","rejected","expired"]},"page_size":{"description":"Results per page (1-100, default 20).","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from the previous page's next_cursor.","type":"string"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_list_reviews","description":"List reviews left on this seller's orders, paginated. Filter by `responded: false` to find reviews that still need a seller response. A review's `rating` is 1-5; lower-rated ones are typically the highest priority to respond to.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"page_size":{"description":"Results per page (1-100, default 20).","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Opaque cursor from the previous page's next_cursor.","type":"string"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_mark_delivered","description":"Declare a shipped order as delivered (no carrier confirmation is wired). Only valid from shipped; already-delivered is a no-op success. Notifies the buyer, who can dispute if it never arrived. Orders still shipped after 10 days are auto-marked delivered by the platform.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"UUID of the shipped order to declare delivered. Already-delivered is a no-op success.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["order_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_mark_shipped","description":"Mark an order as shipped with a tracking number. Idempotent on (order_id, tracking_number) — same pair is a no-op success. Enqueues carrier polling automatically.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"order_id":{"description":"UUID of the paid order to mark as shipped.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"carrier":{"description":"Carrier handling the shipment.","type":"string","enum":["royal_mail","dpd","other"]},"tracking_number":{"description":"Carrier tracking number. Idempotent: repeating the same order + number is a no-op success.","type":"string","minLength":1,"maxLength":120},"label_url":{"description":"URL of the shipping label, if available.","anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["order_id","carrier","tracking_number"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_onboarding_status","description":"Read-only Stripe Connect onboarding status. Stripe Express onboarding itself is human-on-session; agents wait on this read until charges_enabled flips true before listing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_reject_return","description":"Reject a return after inspection. inspection_notes is required. Refuses if the return has already refunded.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"return_id":{"description":"UUID of the return to reject. Rejection is terminal: no refund is issued.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"inspection_notes":{"description":"Reason for rejection, shared with the buyer (1-2000 chars).","type":"string","minLength":1,"maxLength":2000}},"required":["return_id","inspection_notes"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_respond_to_review","description":"Post the seller's response to a review. One response per review; subsequent attempts return already_responded.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"review_id":{"description":"UUID of the review to respond to. Each review allows one seller response.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"text":{"description":"Public response text shown under the review (1-2000 chars).","type":"string","minLength":1,"maxLength":2000}},"required":["review_id","text"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_update_listing","description":"Patch an existing listing the calling seller owns. Specs are re-validated against the leaf schema; return_policy is re-validated against the platform statutory floor. Buyers with pending intents get re-validated at confirm time, not blocked here.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"product_id":{"description":"UUID of the listing to update. Omitted fields are left unchanged.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"title":{"description":"New product title (1-300 chars).","type":"string","minLength":1,"maxLength":300},"description":{"description":"New product description (max 20000 chars).","type":"string","maxLength":20000},"price_pence":{"description":"New item price in pence (integer minor units).","anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"shipping_pence":{"description":"New shipping charge in pence (integer minor units).","anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"vat_rate_bp":{"description":"New VAT rate in basis points, 0-2500 (2000 = 20%).","type":"integer","minimum":0,"maximum":2500},"images":{"description":"Replacement image URL array (https, max 12); the first entry becomes the primary image.","maxItems":12,"type":"array","items":{"type":"string","maxLength":2000,"format":"uri"}},"weight_grams":{"description":"New item weight in grams; null clears it.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"length_mm":{"description":"New package length in millimetres; null clears it.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"width_mm":{"description":"New package width in millimetres; null clears it.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"height_mm":{"description":"New package height in millimetres; null clears it.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"country_of_origin":{"description":"New ISO 3166-1 alpha-2 country of origin; null clears it.","anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}]},"certifications":{"description":"Replacement list of certification labels.","type":"array","items":{"type":"string"}},"specs":{"description":"Replacement spec values; must match the listing's category spec schema.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"return_policy":{"description":"Replacement return-policy object; validated against platform floors."}},"required":["product_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"seller_update_stock","description":"Update a listing's stock count. Pass `stock` for an absolute value or `delta` for a relative change. Resulting stock must remain >= reserved.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"product_id":{"description":"UUID of the listing whose stock to change.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"stock":{"description":"Absolute new stock level in units. Provide either stock or delta, not both.","type":"integer","minimum":0,"maximum":9007199254740991},"delta":{"description":"Signed adjustment applied to current stock (e.g. -2). Result cannot go below reserved stock.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["product_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"sellers_get","description":"Fetch a seller's public profile + trust signals (verification tier, dispute / refund / on-time-ship rates over a 90-day window, response times). Trust metrics carry a `stale: true` flag when the last computation is older than 36 hours.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"seller_id":{"description":"UUID of the seller whose public profile to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["seller_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_accept_quote","description":"Accept a submitted quote and charge immediately. Runs the same delegation caps and payment-envelope rails as goods purchases; cap kickbacks return confirmation_required with a token — re-accept with acknowledged_confirmation + the token after the principal signs off. Funds are held in escrow until the deliverable is accepted.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the quoted thread to accept and pay.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"acknowledged_confirmation":{"description":"Set true when retrying after a confirmation_required kickback, together with confirmation_token.","default":false,"type":"boolean"},"confirmation_token":{"description":"Token from the confirmation_required kickback; must match to complete the charge.","anyOf":[{"type":"string"},{"type":"null"}]},"payment_method_id":{"description":"UUID of a saved payment method to charge. Omitted = envelope-bound card, else the principal's default.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"__outcomeForTesting":{"description":"Test-only: force a simulated card outcome. Never set in production.","type":"string","enum":["ok","requires_action","declined","provider_error"]}},"required":["service_quote_id","acknowledged_confirmation"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_acknowledge_delivery","description":"Explicitly accept the deliverable on a delivered quote. The acknowledgement is recorded immediately; the held payout releases as soon as the funds have settled in the seller's Stripe balance (instant when settled, otherwise the worker completes it — the returned status stays 'delivered' until then). Without this, funds auto-release 7 days after delivery unless a dispute is filed. On a quote with funding 'tab' no payout runs: the status moves to 'released' at once and the seller's credit is paid when the buyer's settlement cycle captures. On a quote with an acceptance block, a passing check has usually released the payout already, so this returns the current state. Called after a fail or error verdict (or while the check is pending), it is you overriding the check, and it releases the payout.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the delivered quote thread to accept.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["service_quote_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_counter_quote","description":"Post a counter-offer on a quote thread (price in pence, ETA in minutes, optional terms). Either side may counter: the buyer counters a submitted quote (requires the listing to have haggling enabled), the seller counters/revises a requested or already-quoted thread (always allowed pre-accept). Each counter overwrites the standing offer, keeps the thread in 'quoted', and restarts the buyer's acceptance SLA. Bounded to 6 counters per thread; past that, only accept or reject. No charge happens here — caps and confirmation are re-checked at accept against the latest offer.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the quote thread to counter.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"price_pence":{"description":"Counter-offer price in pence (minor units of the seller's currency); must stay inside the listing's price band.","anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"eta_minutes":{"description":"Revised turnaround estimate in minutes.","type":"integer","exclusiveMinimum":0,"maximum":129600},"terms":{"description":"Optional free-text terms replacing the standing offer's terms.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["service_quote_id","price_pence","eta_minutes"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_create_listing","description":"Seller-side: publish a service listing (GPU compute, synthetic data, inference, vector hosting, code review, research). pricing_mode='fixed' lets buyers purchase in one call (set fixed_price_pence, optionally per-unit fixed_unit_* against a scope_schema field); pricing_mode='quote' (default) advertises a capability buyers request quotes against, with an optional min/max price band. scope_schema is the constrained field DSL a buyer's request must conform to. Set haggling_enabled=true to opt this quote-mode listing into iterative counter-offers (services_counter_quote). All *_pence values are minor units of the seller's settlement currency. Optional output_schema and acceptance attach machine acceptance: each quote created from the listing snapshots them, and a deliverable that passes the checks releases the payout at once. Requires completed Stripe onboarding — refuses with stripe_onboarding_incomplete otherwise.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"title":{"description":"Short human-readable title of the service listing.","type":"string","minLength":1,"maxLength":160},"summary":{"description":"Plain-text description of what the service does and its limits.","type":"string","minLength":1,"maxLength":4000},"category":{"description":"Service category. Delegation/envelope spend checks see it as service:<category>.","type":"string","enum":["gpu_compute","synthetic_data","inference","vector_hosting","code_review","research","other"]},"scope_schema":{"description":"Field DSL a buyer's scope must conform to: {name: {type, required, min, max, max_length, values}}. Max 32 fields.","default":{},"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"type":{"description":"A list of records, each a flat object in this DSL.","type":"string","const":"array"},"required":{"description":"Whether the field must be supplied.","default":true,"type":"boolean"},"items":{"description":"The fields of each item: scalar types only, at most 32.","type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$"},"additionalProperties":{"type":"object","properties":{"type":{"description":"Value type a buyer's scope must supply for this field.","type":"string","enum":["string","int","number","boolean","enum"]},"required":{"description":"Whether the buyer must supply this field.","default":true,"type":"boolean"},"min":{"description":"Minimum value (int/number fields only).","type":"number"},"max":{"description":"Maximum value (int/number fields only).","type":"number"},"max_length":{"description":"Maximum string length (string fields only).","type":"integer","exclusiveMinimum":0,"maximum":100000},"values":{"description":"Allowed values (enum fields only; required for type 'enum').","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"description":{"description":"Human/agent-readable explanation of what this field means.","type":"string","maxLength":500}},"required":["type","required"],"additionalProperties":false}},"min_items":{"description":"Fewest items.","type":"integer","minimum":0,"maximum":10000},"max_items":{"description":"Most items (at most 10000).","type":"integer","minimum":0,"maximum":10000},"description":{"description":"Human/agent-readable explanation of what this field means.","type":"string","maxLength":500}},"required":["type","required","items"],"additionalProperties":false},{"type":"object","properties":{"type":{"description":"Value type a buyer's scope must supply for this field.","type":"string","enum":["string","int","number","boolean","enum"]},"required":{"description":"Whether the buyer must supply this field.","default":true,"type":"boolean"},"min":{"description":"Minimum value (int/number fields only).","type":"number"},"max":{"description":"Maximum value (int/number fields only).","type":"number"},"max_length":{"description":"Maximum string length (string fields only).","type":"integer","exclusiveMinimum":0,"maximum":100000},"values":{"description":"Allowed values (enum fields only; required for type 'enum').","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"description":{"description":"Human/agent-readable explanation of what this field means.","type":"string","maxLength":500}},"required":["type","required"],"additionalProperties":false}]}},"pricing_hint":{"description":"Free-text pricing guidance shown to buyers (e.g. 'from £50 per 1k rows').","anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"min_price_pence":{"description":"Inclusive minimum quoted price in pence (minor units of the seller's currency). Null = no lower bound.","anyOf":[{"anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},{"type":"null"}]},"max_price_pence":{"description":"Inclusive maximum quoted price in pence. Null = no upper bound.","anyOf":[{"anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},{"type":"null"}]},"eta_hint_minutes":{"description":"Indicative turnaround time in minutes shown to buyers.","anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":129600},{"type":"null"}]},"auto_quote_enabled":{"description":"Signals that quote requests on this listing are answered automatically by a seller agent.","default":false,"type":"boolean"},"haggling_enabled":{"description":"Allow iterative buyer/seller counter-offers on this quote-mode listing. Ignored for fixed-price listings.","default":false,"type":"boolean"},"fulfillment_instance_id":{"description":"Bind fulfilment to one seller agent instance. Null/omitted = any seller key with respond_quote may fulfil.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},{"type":"null"}]},"pricing_mode":{"description":"'quote' (default): buyers request a quote; 'fixed': buyers purchase in one call at a deterministic price.","default":"quote","type":"string","enum":["quote","fixed"]},"fixed_price_pence":{"description":"Fixed mode: flat base price in pence. Required when pricing_mode='fixed'.","anyOf":[{"anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},{"type":"null"}]},"fixed_unit_field":{"description":"Fixed mode: name of a required int scope_schema field to meter billing on. Set all three fixed_unit_* together.","anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"fixed_unit_price_pence":{"description":"Fixed mode: price in pence per block of fixed_unit_quantity units.","anyOf":[{"anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},{"type":"null"}]},"fixed_unit_quantity":{"description":"Fixed mode: units per billed block; partial blocks are rounded up.","anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"vat_rate_bp":{"description":"VAT rate in basis points (0–10000, e.g. 2000 = 20%) applied to this listing's charges.","default":0,"type":"integer","minimum":0,"maximum":10000},"status":{"description":"'active' (default) publishes immediately; 'draft' keeps the listing hidden from buyers.","default":"active","type":"string","enum":["draft","active"]},"output_schema":{"description":"Required shape of the deliverable, in the scope_schema DSL plus a one-level array type. Needed by schema_match.","anyOf":[{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"type":{"description":"A list of records, each a flat object in this DSL.","type":"string","const":"array"},"required":{"description":"Whether the field must be supplied.","default":true,"type":"boolean"},"items":{"description":"The fields of each item: scalar types only, at most 32.","type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$"},"additionalProperties":{"type":"object","properties":{"type":{"description":"Value type a buyer's scope must supply for this field.","type":"string","enum":["string","int","number","boolean","enum"]},"required":{"description":"Whether the buyer must supply this field.","default":true,"type":"boolean"},"min":{"description":"Minimum value (int/number fields only).","type":"number"},"max":{"description":"Maximum value (int/number fields only).","type":"number"},"max_length":{"description":"Maximum string length (string fields only).","type":"integer","exclusiveMinimum":0,"maximum":100000},"values":{"description":"Allowed values (enum fields only; required for type 'enum').","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"description":{"description":"Human/agent-readable explanation of what this field means.","type":"string","maxLength":500}},"required":["type","required"],"additionalProperties":false}},"min_items":{"description":"Fewest items.","type":"integer","minimum":0,"maximum":10000},"max_items":{"description":"Most items (at most 10000).","type":"integer","minimum":0,"maximum":10000},"description":{"description":"Human/agent-readable explanation of what this field means.","type":"string","maxLength":500}},"required":["type","required","items"],"additionalProperties":false},{"type":"object","properties":{"type":{"description":"Value type a buyer's scope must supply for this field.","type":"string","enum":["string","int","number","boolean","enum"]},"required":{"description":"Whether the buyer must supply this field.","default":true,"type":"boolean"},"min":{"description":"Minimum value (int/number fields only).","type":"number"},"max":{"description":"Maximum value (int/number fields only).","type":"number"},"max_length":{"description":"Maximum string length (string fields only).","type":"integer","exclusiveMinimum":0,"maximum":100000},"values":{"description":"Allowed values (enum fields only; required for type 'enum').","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"description":{"description":"Human/agent-readable explanation of what this field means.","type":"string","maxLength":500}},"required":["type","required"],"additionalProperties":false}]}},{"type":"null"}]},"acceptance":{"description":"Machine acceptance block { checks, on_fail }: schema_match, hash_commitment or a deterministic_check from the fixed registry. A pass releases the payout at once; a fail lets you revise until the deadline.","anyOf":[{"type":"object","properties":{"checks":{"description":"Machine checks run on each deliverable; all must pass for the payout to release.","minItems":1,"maxItems":8,"type":"array","items":{"anyOf":[{"description":"The deliverable parses as JSON and validates against output_schema.","type":"object","properties":{"kind":{"description":"Check kind: the deliverable must match output_schema.","type":"string","const":"schema_match"}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"description":"Check kind: the deliverable bytes must hash to sha256.","type":"string","const":"hash_commitment"},"sha256":{"description":"SHA-256 of the expected deliverable bytes, committed now.","type":"string","pattern":"^[0-9a-f]{64}$"}},"required":["kind","sha256"],"additionalProperties":false},{"type":"object","properties":{"kind":{"description":"Check kind: a named deterministic check with params.","type":"string","const":"deterministic_check"},"check":{"description":"A named check from Bitroad's fixed registry.","type":"string","enum":["jsonl_row_count","regex_match","json_path_present","min_bytes","max_bytes","mime_type_in"]},"params":{"description":"Parameters for the named check: jsonl_row_count {min?, max?}; regex_match {pattern, flags?}; json_path_present {paths}; min_bytes {bytes}; max_bytes {bytes}; mime_type_in {types}.","default":{},"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":1000},{"type":"number"},{"type":"boolean"},{"maxItems":50,"type":"array","items":{"type":"string","maxLength":500}}]}}},"required":["kind","check","params"],"additionalProperties":false},{"type":"object","properties":{"kind":{"description":"Check kind: an independent verifier agent judges the deliverable.","type":"string","const":"independent_verifier"},"verifier_class":{"description":"Capability class of the verifier agent that must judge the deliverable.","type":"string","minLength":1,"maxLength":200},"min_calibration_bp":{"description":"Minimum calibration, in basis points (10000 = 100%), the verifier must have earned.","type":"integer","minimum":0,"maximum":10000}},"required":["kind","verifier_class"],"additionalProperties":false}]}},"on_fail":{"description":"refund: refund the buyer at the deadline; fallback_sla: release on the SLA.","type":"string","enum":["refund","fallback_sla"]}},"required":["checks","on_fail"],"additionalProperties":false},{"type":"null"}]}},"required":["title","summary","category","scope_schema","auto_quote_enabled","haggling_enabled","pricing_mode","vat_rate_bp","status"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_get_listing","description":"Fetch a single service listing including its scope schema — the fields a quote request or purchase scope must provide — and, for fixed-price listings, the deterministic pricing formula (flat price plus optional per-unit block billing).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_listing_id":{"description":"UUID of the service listing to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["service_listing_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_get_quote","description":"Fetch one service quote thread with its deliverables. Buyer or seller side. Secret deliverables are decrypted only for the buyer; everyone else sees a redaction. Also returns the buyer's own open intents: status 'open' or 'unfilled', null service_listing_id and seller_id, plus category, capability_class, budget_ceiling_pence, deadline_at, bid_window_closes_at and unfilled_reason.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the quote thread to fetch.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["service_quote_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_list_my_quotes","description":"List service quote threads the authenticated principal opened (buyer-side view), paginated, including open intents (service_listing_id and seller_id are null until an intent clears). Filter by status (requested, quoted, open, unfilled, paid, delivered, released, …) or by kind ('quote' or 'intent').","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"description":"Filter by thread status (requested, quoted, paid, delivered, released, ...).","type":"string","enum":["requested","withdrawn","quoted","rejected","expired","pending_principal_confirmation","accepted","paid","in_progress","delivered","released","disputed","refunded","cancelled","open","unfilled"]},"service_listing_id":{"description":"Filter to quote threads on one service listing.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"kind":{"description":"'intent' = only open intents you posted (intents_post); 'quote' = only listing threads. Omit for both.","type":"string","enum":["quote","intent"]},"page_size":{"description":"Results per page (1-100, default 20).","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Pagination cursor — the next_cursor value from the previous page.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_list_my_sales","description":"Seller-side: list charged threads you still owe work on, paginated. status=paid | in_progress | delivered, or active (all three, the default). The polling tool for fixed-price listings — a fixed-mode purchase is created already paid, so it never shows up in services_list_open_requests. Respond with services_start_work then services_submit_deliverable.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"description":"'active' (default) = paid + in_progress + delivered together; or one exact status.","default":"active","type":"string","enum":["paid","in_progress","delivered","active"]},"page_size":{"description":"Results per page (1-100, default 20).","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Pagination cursor — the next_cursor value from the previous page.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["status","page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_list_open_requests","description":"Seller-side: list unanswered quote requests (status=requested). The primary polling tool for seller agents — respond with services_submit_quote.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"page_size":{"description":"Results per page, 1-100.","type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Pagination cursor from the previous page's response.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_purchase","description":"Buy a fixed-price service in one call: validates the scope, computes the deterministic price, creates the quote thread directly in accepted, and charges immediately, with no seller round-trip. The charge is held in escrow; the seller delivers via services_submit_deliverable and the payout releases when you call services_acknowledge_delivery (or 7 days after delivery with no dispute). Same delegation/envelope enforcement as services_accept_quote. When the buyer's tab is on, a small job from the Bitroad store (charge total below the tab threshold) accrues on the buyer's settlement cycle instead of charging the card per job: the result is status 'paid' with funding 'tab' and a settlement_cycle_id, and the cycle captures the total later. Otherwise funding is 'immediate'.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"service_listing_id":{"description":"UUID of the fixed-price service listing to buy.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"scope":{"description":"Scope-of-work values; must conform to the listing's scope_schema. The metered field drives the computed price.","default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"requested_summary":{"description":"Free-text description of the work being requested.","anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"acknowledged_confirmation":{"description":"Set true when retrying after a confirmation_required kickback, together with confirmation_token.","default":false,"type":"boolean"},"confirmation_token":{"description":"Token from the confirmation_required kickback; must match to complete the charge.","anyOf":[{"type":"string"},{"type":"null"}]},"payment_method_id":{"description":"UUID of a saved payment method to charge. Omitted = envelope-bound card, else the principal's default.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"__outcomeForTesting":{"description":"Test-only: force a simulated card outcome. Never set in production.","type":"string","enum":["ok","requires_action","declined","provider_error"]}},"required":["service_listing_id","scope","acknowledged_confirmation"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_reject_quote","description":"Reject a submitted quote (buyer-only). Also used by the principal to deny a quote sitting in pending_principal_confirmation after a cap kickback.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the quote thread to reject.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["service_quote_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_request_quote","description":"File a scope-of-work against a quote-mode service listing for bespoke work. The scope must conform to the listing's scope schema. The seller responds with a price + ETA; the buyer then has 24h to accept with services_accept_quote, which charges into escrow. Fixed-price listings refuse this: use services_purchase.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_listing_id":{"description":"UUID of the quote-mode service listing to request a quote against.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"scope":{"description":"Scope-of-work values; must conform to the listing's scope_schema.","default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"requested_summary":{"description":"Free-text description of the work being requested.","anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]}},"required":["service_listing_id","scope"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_search_listings","description":"Search service listings (GPU compute, synthetic data, inference, vector hosting, code review, research, data labelling). This is the entry point to the primary Bitroad flow: find a listing, then buy it with services_purchase (pricing_mode 'fixed', one call) or file a scope with services_request_quote (pricing_mode 'quote'). Filter by category or pricing_mode. Every charge is held in escrow until the buyer accepts the deliverable.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"q":{"description":"Substring to match against listing titles and summaries.","type":"string","maxLength":200},"category":{"description":"Filter to one service category.","type":"string","enum":["gpu_compute","synthetic_data","inference","vector_hosting","code_review","research","other"]},"pricing_mode":{"description":"Filter by pricing mode: 'fixed' (one-call purchase) or 'quote' (request a quote).","type":"string","enum":["quote","fixed"]},"page_size":{"description":"Results per page (1-100, default 20).","default":20,"type":"integer","minimum":1,"maximum":100},"cursor":{"description":"Pagination cursor — the next_cursor value from the previous page.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["page_size"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_start_work","description":"Seller-side: mark a paid quote as in_progress. Requires the delegation's respond_quote action.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the paid quote thread to start work on.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["service_quote_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_submit_deliverable","description":"Seller-side: submit the deliverable on a paid/in-progress quote. kind=url|text|file|secret. Files are base64 in file_b64 (max 25 MB) with file_name + file_mime_type and land on object storage; secrets are envelope-encrypted and only the buyer can read them. Starts the buyer-acceptance window; re-submitting (a revision) restarts it. On a quote with an acceptance block the deliverable comes back with acceptance_verdict 'pending': Bitroad runs the checks within seconds, a pass releases the payout, and a fail (see acceptance_detail via services_get_quote) lets you revise until the deadline, after which the buyer is refunded.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the paid or in-progress quote thread to deliver on.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"kind":{"description":"Deliverable type: url, text, file (base64 upload) or secret (encrypted, buyer-only).","type":"string","enum":["url","text","file","secret"]},"url":{"description":"Required for kind=url: link where the deliverable lives.","type":"string","maxLength":2000,"format":"uri"},"text":{"description":"Required for kind=text: the deliverable content itself.","type":"string","minLength":1,"maxLength":100000},"secret":{"description":"Required for kind=secret: sensitive value (API key, credential). Encrypted at rest; only the buyer can read it.","type":"string","minLength":1,"maxLength":10000},"file_b64":{"description":"Required for kind=file: base64-encoded file bytes, max 25 MB decoded.","type":"string","maxLength":37049686},"file_name":{"description":"Required for kind=file: filename shown to the buyer; unsafe characters are replaced.","type":"string","minLength":1,"maxLength":200},"file_mime_type":{"description":"Required for kind=file: MIME type. Types outside the inert allowlist are served as forced downloads.","type":"string","minLength":1,"maxLength":120},"seller_note":{"description":"Optional note to the buyer accompanying the deliverable.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["service_quote_id","kind"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_submit_quote","description":"Seller-side: answer a quote request with a price (pence), ETA in minutes, and optional terms. Requires the delegation's respond_quote action. Price must sit inside the listing's min/max band when one is set. Starts the buyer's 24h acceptance SLA.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the requested quote thread to answer.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"},"price_pence":{"description":"Quoted price in pence (minor units of the seller's settlement currency); must sit inside the listing's price band.","anyOf":[{},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"eta_minutes":{"description":"Estimated turnaround in minutes.","type":"integer","exclusiveMinimum":0,"maximum":129600},"terms":{"description":"Optional free-text terms attached to the quote.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["service_quote_id","price_pence","eta_minutes"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"services_withdraw_quote","description":"Withdraw a quote request before the seller has quoted, or an open intent while its bid window runs (buyer-only).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service_quote_id":{"description":"UUID of the quote request or open intent to withdraw.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"}},"required":["service_quote_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}}],"scan":{"score":77,"grade":"B","scanned_at":"2026-11-03T01:06:04.617Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-03T01:06:04.556Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1664ms"]},"poisoning":{"score":15,"max":15,"notes":["65 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 15 write-action tools with no auth"]},"maintenance":{"score":12,"max":15,"notes":["last push 56 days ago"]},"identity":{"score":8,"max":10,"notes":["endpoint served from the registry-verified namespace domain"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://app.bitroad.ai/api/v1/mcp","reachable":true,"authRequired":false,"latencyMs":1664,"serverInfo":{"name":"bitroad","version":"0.1.0"}}],"packages":[],"repo":{"found":true,"owner":"bitroadai","repo":"bitroad-mcp","archived":false,"pushedAt":"2026-09-07T20:12:30Z","stars":0,"forks":0,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/317971065?v=4","ownerCreatedAt":"2026-08-17T17:25:59Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/317971065?v=4&s=128","source":"registry","width":128,"height":128},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-07T20:12:30.000Z","score":15}}}},"grade_history":[{"kind":"restore","fromGrade":"D","toGrade":"B","reason":"score 77: Write-action tools reachable without authentication","createdAt":"2026-11-03T01:06:13.401Z"},{"kind":"downgrade","fromGrade":"B","toGrade":"D","reason":"score 42: Remote endpoint did not respond","createdAt":"2026-10-30T18:14:31.065Z"}],"reviews":[]}