{"name":"OrderLoop","description":"Runs each commerce order as a flow graph of steps; people step in at approvals, events and exceptions. Ask about orders, stock and flows, place orders and follow them to their outcome, and decide approvals, all within the role you connect with.","url":"https://orderloop.app/a2a","preferredTransport":"JSONRPC","protocolVersion":"0.3","version":"1.0.0","provider":{"organization":"OrderLoop","url":"https://orderloop.app"},"documentationUrl":"https://docs.orderloop.app/reference/a2a/","capabilities":{"streaming":true,"pushNotifications":true},"supportsAuthenticatedExtendedCard":false,"securitySchemes":{"apiToken":{"type":"http","scheme":"bearer","description":"An OrderLoop API token (ol_live_…), created on the Settings page."},"oauth":{"type":"oauth2","description":"OAuth 2.1 with PKCE. Request the resource https://orderloop.app/a2a; the scope is the role to act with.","oauth2MetadataUrl":"https://orderloop.app/.well-known/oauth-authorization-server","flows":{"authorizationCode":{"authorizationUrl":"https://orderloop.app/oauth/authorize","tokenUrl":"https://orderloop.app/oauth/token","scopes":{"viewer":"Act with the viewer role","approver":"Act with the approver role","operator":"Act with the operator role","admin":"Act with the admin role"}}}}},"security":[{"apiToken":[]},{"oauth":[]}],"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["text/plain","application/json"],"skills":[{"id":"chat","name":"Ask the assistant","description":"Ask in plain language. The assistant answers from the same tools; an action it proposes waits (input-required) until you reply { \"confirm\": true }. Needs the viewer role.","tags":["assistant","orders"],"examples":["What needs attention?","Which orders over $10k are waiting for approval?"]},{"id":"place_order","name":"Place an order","description":"Start an order on a published flow ({ flowId, version?, input, vars? }, as POST /api/v1/orders). The task follows the order: working while it runs, input-required when it waits for an approval or event, then its outcome. Repeating a message id returns the same order. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"place_order\", \"input\": { \"flowId\": \"flow_b2b\", \"input\": { … } } }"]},{"id":"needs_attention","name":"Needs attention","description":"What is waiting on people: open approvals (oldest first), orders that failed or rolled back in the last 3 days, and orders waiting on a business event for over a day. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"needs_attention\", \"input\": { … } }"]},{"id":"find_orders","name":"Find orders","description":"Search orders. Totals compare in USD. Returns the count and total of all matches plus up to `limit` rows. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"find_orders\", \"input\": { … } }"]},{"id":"get_order","name":"Get an order","description":"One order: status, what it waits on (with where each decision leads), steps run so far and recent activity. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"get_order\", \"input\": { … } }"]},{"id":"assess_order","name":"Assess an order","description":"Ask typed questions about one order and get a probability for every option: noul (yes/no, the probability of yes), choice (pick one of 2–255 options) or score (an ordered rubric of 2–10 levels, lowest first). Optionally pass up to 4 images (the order’s R2 document keys, https or data URLs; PNG, JPEG or WebP). Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"assess_order\", \"input\": { … } }"]},{"id":"find_products","name":"Find products","description":"Products with stock, reserved and available quantities and reorder points. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"find_products\", \"input\": { … } }"]},{"id":"list_carts","name":"List carts","description":"Carts people are building before they become orders, most recently changed first: title, status, customer and, once submitted, its order. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"list_carts\", \"input\": { … } }"]},{"id":"get_cart","name":"Get a cart","description":"One cart: its lines (with each line’s id) at the prices its flow quoted, promo codes, problems the quote found, and why it can’t be submitted yet. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"get_cart\", \"input\": { … } }"]},{"id":"list_flows","name":"List flows","description":"All flows and their published versions. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"list_flows\", \"input\": { … } }"]},{"id":"get_flow","name":"Get a flow","description":"A flow’s saved draft: its steps, connections and validation problems. Needs the viewer role.","tags":["orders","read"],"examples":["{ \"skill\": \"get_flow\", \"input\": { … } }"]},{"id":"propose_flow_change","name":"Propose a flow change","description":"Draft a change to a flow from an instruction. Nothing is saved: a person reviews the proposal in the flow editor and applies it there. Needs the operator role.","tags":["orders","read"],"examples":["{ \"skill\": \"propose_flow_change\", \"input\": { … } }"]},{"id":"draft_plugin","name":"Draft a business-rule plugin","description":"Draft a plugin of business-rule flow steps from an instruction (e.g. “hold orders over $5,000 shipping outside the US”), with test cases. Nothing runs: an admin reviews it on the Plugins page, runs its cases and approves it there. Give pluginId to revise a drafted plugin. Needs the admin role.","tags":["orders","write"],"examples":["{ \"skill\": \"draft_plugin\", \"input\": { … } }"]},{"id":"draft_product_content","name":"Draft product content","description":"Draft a catalog product’s missing text (titles, descriptions, text attributes and image alt text, locale by locale) from what it says in its other locales. Name fields and locales to draft those instead. The drafts are saved on the product; nothing goes live until a person accepts and publishes them. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"draft_product_content\", \"input\": { … } }"]},{"id":"create_cart","name":"Open a cart","description":"Open a cart priced by a published flow that prices orders, for a customer if given. Nothing is ordered until the cart is submitted. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"create_cart\", \"input\": { … } }"]},{"id":"change_cart","name":"Change a cart","description":"Change an open cart, op by op in order: add a SKU, set a line’s quantity (0 removes it), set several lines’ quantities in one change (set_qtys, all or none), remove lines, clear it, add or remove a promo code, set or clear the ship-to address, choose a shipping option from the quote, lock, unlock or rename it. The cart’s flow prices it again; nothing is ordered. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"change_cart\", \"input\": { … } }"]},{"id":"decide_approval","name":"Decide an approval","description":"Approve or reject an approval an order is waiting on. Needs the approver role.","tags":["orders","write"],"examples":["{ \"skill\": \"decide_approval\", \"input\": { … } }"]},{"id":"decide_approvals","name":"Decide several approvals","description":"Approve or reject up to 25 open approvals at once, with one note for all. Each is checked and decided on its own; one that can’t be decided is skipped and says why. Needs the approver role.","tags":["orders","write"],"examples":["{ \"skill\": \"decide_approvals\", \"input\": { … } }"]},{"id":"deliver_event","name":"Deliver an event","description":"Deliver a business event (e.g. payment.received) to the order waiting for it. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"deliver_event\", \"input\": { … } }"]},{"id":"cancel_order","name":"Cancel an order","description":"Cancel an order and undo what it did (release stock, void payment, cancel shipments). Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"cancel_order\", \"input\": { … } }"]},{"id":"submit_cart","name":"Submit a cart","description":"Submit a priced cart as an order of its flow, with its lines, customer and promo codes. The order is priced again by its flow when it runs, as any order is. The cart ends. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"submit_cart\", \"input\": { … } }"]},{"id":"publish_flow","name":"Publish a flow","description":"Publish a flow’s saved draft as a new version. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"publish_flow\", \"input\": { … } }"]},{"id":"run_stock_review","name":"Run the stock review","description":"Run the daily stock review now; it starts reorders for SKUs at or below their reorder point. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"run_stock_review\", \"input\": { … } }"]},{"id":"start_order","name":"Start an order","description":"Start a new order on a published flow: its lines (SKU and quantity), and optionally a customer or a guest contact, fulfilment (pickup and carry-out need a store), currency, title and document text for the flow to read. It runs the flow for real. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"start_order\", \"input\": { … } }"]},{"id":"restart_order","name":"Restart an order","description":"Start a fresh order like an existing one: same customer, lines and fulfilment, on its flow’s current version. The old order stays as it is. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"restart_order\", \"input\": { … } }"]},{"id":"cancel_cart","name":"Cancel a cart","description":"Cancel an open or locked cart. Nothing is ordered, and the cart ends. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"cancel_cart\", \"input\": { … } }"]},{"id":"create_flow","name":"Create a flow","description":"Create a new, unpublished flow for a commerce model: from its template, a blank start, or drafted from a description of the steps. Nothing runs until it is published. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"create_flow\", \"input\": { … } }"]},{"id":"duplicate_flow","name":"Duplicate a flow","description":"Copy a flow’s current draft as a new, unpublished flow. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"duplicate_flow\", \"input\": { … } }"]},{"id":"archive_flow","name":"Archive or restore a flow","description":"Archive (or restore) a draft that was never published, so it leaves the flows list. Published flows can’t be archived. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"archive_flow\", \"input\": { … } }"]},{"id":"test_flow","name":"Test a flow","description":"Run a test order on a flow: publishes its saved draft first when it changed since the live version, then starts an order with a demo input where the demo data is loaded. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"test_flow\", \"input\": { … } }"]},{"id":"publish_catalog","name":"Publish catalog edits","description":"Publish the staged edits of up to 500 products to the live catalog, each product all or none. Needs the operator role.","tags":["orders","write"],"examples":["{ \"skill\": \"publish_catalog\", \"input\": { … } }"]},{"id":"set_plugin_enabled","name":"Turn a plugin on or off","description":"Turn an installed plugin on or off. Off, flows that use it can’t be published and their running steps fail. Needs the admin role.","tags":["orders","write"],"examples":["{ \"skill\": \"set_plugin_enabled\", \"input\": { … } }"]},{"id":"approve_plugin","name":"Approve a plugin version","description":"Approve an uploaded or drafted plugin version so it runs. Needs a step-up; a plugin that asks for buyers’ details needs them granted. Needs the admin role.","tags":["orders","write"],"examples":["{ \"skill\": \"approve_plugin\", \"input\": { … } }"]},{"id":"rollback_plugin","name":"Roll a plugin back","description":"Run an earlier version of an installed plugin again. Needs a step-up. Needs the admin role.","tags":["orders","write"],"examples":["{ \"skill\": \"rollback_plugin\", \"input\": { … } }"]},{"id":"uninstall_plugin","name":"Uninstall a plugin","description":"Uninstall a plugin installed at runtime. Needs a step-up. Needs the admin role.","tags":["orders","write"],"examples":["{ \"skill\": \"uninstall_plugin\", \"input\": { … } }"]}],"supportedInterfaces":[{"url":"https://orderloop.app/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"},{"url":"https://orderloop.app/a2a","protocolBinding":"JSONRPC","protocolVersion":"0.3"}]}