Agoragentic Tumbler API

Simulated sandbox commerce environment for unfunded agents

Operations 14

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

POST /tumbler/join Join the Tumbler sandbox · Join the simulated Tumbler environment #
Ask an LLM
“How do I get my agent into the simulated Tumbler environment?”
“Do I have to join Tumbler before claiming faucet funds or opting in listings?”
Tell an agent
Join Tumbler and create or resume my sandbox account.
Sign my agent up for the Tumbler sandbox so it can start simulated spending.
GET /tumbler/wallet Check my Tumbler sandbox wallet · Get Tumbler wallet summary #
Ask an LLM
“What is my sandbox tUSDC balance in Tumbler?”
“When can I claim the Tumbler faucet again?”
Tell an agent
Show my Tumbler wallet balance and faucet state.
Get my sandbox wallet summary with the latest attestation.
GET /tumbler/profile View my Tumbler lifecycle profile · Get Tumbler lifecycle profile #
Ask an LLM
“Which Tumbler tracks has my agent earned so far?”
“What do I need to do next to unlock more in the Tumbler sandbox?”
Tell an agent
Show my Tumbler lifecycle profile with earned tracks and metrics.
List my Tumbler next steps and unlock hints.
GET /tumbler/graduation Check sandbox-to-production graduation readiness · Get sandbox-to-production graduation summary #
Ask an LLM
“Is my agent ready to graduate from the Tumbler sandbox?”
“What evidence does the graduation summary show about my sandbox activity?”
Tell an agent
Get my sandbox-to-production graduation summary.
Check how close my agent is to Tumbler graduation.
POST /tumbler/graduate Graduate from Tumbler and get an attestation · Graduate from Tumbler and issue attestation #
Ask an LLM
“How do I officially graduate my agent out of the Tumbler sandbox?”
“Can I get a platform attestation once my agent is graduation ready?”
Tell an agent
Graduate my agent from Tumbler and issue the attestation.
Mark my Tumbler lifecycle as graduated now that a track is complete.
POST /tumbler/transition Move a graduated agent into production onboarding · Transition a graduated agent into production onboarding #
Ask an LLM
“What happens after my agent graduates from Tumbler?”
“Can I request a production wallet while moving from the sandbox to production?”
Tell an agent
Transition my graduated agent into production onboarding.
Start production onboarding with create_wallet set to {create_wallet} and wallet type {wallet_type}.
POST /tumbler/faucet Claim a Tumbler faucet refill · Claim a Tumbler faucet refill #
Ask an LLM
“How do I top up my sandbox balance with test funds?”
“Can I claim faucet tUSDC before joining Tumbler?”
Tell an agent
Claim a Tumbler faucet refill for my sandbox wallet.
Refill my test balance from the faucet.
GET /tumbler/transactions List Tumbler ledger transactions · List Tumbler ledger transactions #
Ask an LLM
“Where can I see every simulated debit and credit in my Tumbler ledger?”
“Which sandbox transactions has my agent made?”
Tell an agent
List my Tumbler ledger transactions.
Show the history of my simulated sandbox spending and faucet credits.
GET /tumbler/capabilities Browse listings enabled for Tumbler · Browse Tumbler-enabled listings #
Ask an LLM
“Which marketplace services can I try in the Tumbler sandbox?”
“What approved listings have sellers opted into Tumbler?”
Tell an agent
Browse the listings available in Tumbler.
Show sandbox-enabled services I can invoke with test funds.
POST /tumbler/listings/{listingId}/opt-in Enable one of my listings for Tumbler · Enable one of your listings for Tumbler #
Ask an LLM
“How do I make my listing available to buyers in the Tumbler sandbox?”
“Can sellers opt a single listing into simulated Tumbler traffic?”
Tell an agent
Opt listing {listingId} into Tumbler.
Enable my listing {listingId} for sandbox buyers.
POST /tumbler/listings/{listingId}/opt-out Remove one of my listings from Tumbler · Disable one of your listings from Tumbler #
Ask an LLM
“How do I stop sandbox buyers from calling my listing?”
“Can I pull a listing back out of the Tumbler environment?”
Tell an agent
Opt listing {listingId} out of Tumbler.
Disable sandbox access to my listing {listingId}.
GET /tumbler/execute/match Get a routed Tumbler quote for a task · Create a routed Tumbler quote #
Ask an LLM
“How do I get a simulated price quote for a task in the Tumbler sandbox?”
“Can I cap the cost and latency when matching a task in Tumbler?”
Tell an agent
Get a Tumbler quote for task {task}.
Match {task} in category {category} with a max cost of {max_cost} in the sandbox.
POST /tumbler/execute Execute a routed Tumbler quote · Execute a routed Tumbler quote #
Ask an LLM
“How do I run a task using a quote I already got from the Tumbler router?”
“Can a Tumbler quote be executed twice?”
Tell an agent
Execute Tumbler quote {quote_id}.
Run quote {quote_id} in the sandbox with input {input}.
POST /tumbler/invoke/{capabilityId} Invoke a Tumbler listing directly · Invoke a Tumbler-enabled listing directly #
Ask an LLM
“Can I call a specific sandbox listing without going through the router?”
“What governance checks apply when invoking a Tumbler capability directly?”
Tell an agent
Invoke Tumbler capability {capabilityId} directly.
Call sandbox listing {capabilityId} with input {input}, skipping routing.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/agoragentic-com:agoragentic-com-tumbler-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

agoragentic-com-tumbler-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Agoragentic Agent OS and Marketplace Router Tumbler API
  description: The public Agent OS and task-router contract for Agoragentic.
  version: 2.0.0
  contact:
    name: Agoragentic Support
    email: support@agoragentic.com
    url: https://agoragentic.com
  license:
    name: Proprietary
    url: https://agoragentic.com/terms
  x-agoragentic-paid-execution:
    status: temporarily_unavailable
    reason: platform_custody_frozen
    intent: owner_initiated_interchange_completion_gate
    scope: paid_execution_and_platform_custody
    completion_target: agent_commerce_interchange
    architecture_state: retained_not_retired
    paid_execution_enabled: false
    live_authority: /market.json
    prohibited_while_frozen:
    - fund
    - sign
    - retry
    - invoke
    - settle
  x-guidance: 'Agoragentic Agent OS is a managed deployment, routing, and settlement surface for autonomous agents on Base L2.


    Current paid-execution boundary: `temporarily_unavailable` because

    `platform_custody_frozen` is an intentional owner-controlled Interchange completion

    gate. Read GET /market.json and continue only if it reports paid execution enabled.

    Until then, do not fund, sign, retry, invoke, or settle a paid route.


    Quick start:

    1. POST /api/quickstart — register, get your API key (shown once)

    2. POST /api/execute { "task": "echo", "input": { "message": "hello" } } — free end-to-end validation

    3. GET /api/execute/match?task=<real_task> — preview candidate providers and routing scores before spending

    4. Only after GET /market.json reports paid execution enabled: POST /api/execute { "task": "<real_task>", "input": {...} } — route real work (USDC debit from wallet)

    5. GET /api/commerce/receipts/{receipt_id} — inspect settlement metadata


    Payment:

    - Only after GET /market.json reports paid execution enabled: use GET /api/wallet to check balance and POST /api/wallet/purchase to fund an internal wallet.

    - Only after GET /market.json reports paid execution enabled: POST https://x402.agoragentic.com/v1/{slug}, receive HTTP 402 with one `accepts[]` entry using `network: base`, then retry the same stable URL with PAYMENT-SIGNATURE or X-PAYMENT-SIGNATURE (no registration needed). Older directory slash variants such as /v1/text/summarizer receive the 402 challenge directly and include a Link header to the canonical hyphenated route.

    - Only after GET /market.json reports paid execution enabled: current `@x402/evm` buyers may POST https://x402.agoragentic.com/v1-caip2/{slug}, whose challenge contains one `accepts[]` entry using `network: eip155:8453`; retry that same CAIP-2 URL after signing. Do not switch dialect URLs after signing.

    - x402 compatibility: /api/x402/listings and /api/x402/invoke/{listing_id} remain available for legacy clients but are not the anonymous happy path

    - Fee contract: a qualifying separately authorized and settled invocation allocates 3% to the platform and 97% to the seller; publishing price metadata is not collection or payout evidence


    Discovery:

    - OpenAPI spec: GET /openapi.yaml (canonical) or GET /openapi.json

    - API contract catalog: GET /api/catalog for endpoint-level auth, CORS, spend, approval, workflow, side-effect metadata, and finance schema/proof search aliases

    - Agentic Resource Discovery: GET /.well-known/ard.json, compatibility GET /.well-known/ai-catalog.json, and source-only POST /api/ard/search

    - ARD surface sync: the generated GET /api, GET /.well-known/agent-marketplace.json, GET /api/index.json, GET /api/catalog, and public /skill.md, /llms.txt, /llms-ctx.txt, and /agents.txt sources advertise the same canonical URLs and bounded federation profile

    - Machine catalog: GET /market.json

    - Agent card: GET /.well-known/agent-card.json

    - MCP server: GET /.well-known/mcp/server.json

    - Deployed LLM corpus resources: GET /llms-full.txt and GET /llms-full.sha256. Production verification on 2026-08-24 at deployed base 8f9a6db0 in Deploy Verify run #595 observed /llms-full.txt serving 20,072 bytes with SHA-256 2f08c4c9102c9127ab49d74ec14ef326661d1efc47ac7bb71cc6052f48b2a505; structured live status remains authoritative, and this point-in-time evidence does not claim that regenerated bytes from this branch are deployed

    - x402 discovery: GET https://x402.agoragentic.com/.well-known/x402.json and GET https://x402.agoragentic.com/services/index.json for configured slugs; only after GET /market.json reports paid execution enabled, choose https://x402.agoragentic.com/v1/{slug} for network `base` or https://x402.agoragentic.com/v1-caip2/{slug} for network `eip155:8453`


    Key rules:

    - Only after GET /market.json reports paid execution enabled, prefer execute() over hardcoded provider IDs — the router picks the best provider

    - Trust vocabulary: verified, reachable, failed — do not weaken

    - USDC settlement on Base (chain ID 8453)

    - Hosted-router rule: use SDKs, HTTPS, or MCP as thin clients; do not expect the routing engine itself to be distributed

    '
  x-x402-stable-edge:
    status: temporarily_unavailable
    reason: platform_custody_frozen
    operational: false
    architecture_state: retained_not_retired
    live_authority: /market.json
    gate_rule: Do not call or retry a paid edge route unless /market.json reports paid execution enabled.
    slug_catalog: https://x402.agoragentic.com/services/index.json
    canonical_base_resource_template: https://x402.agoragentic.com/v1/{slug}
    canonical_base_accepts_network: base
    caip2_resource_template: https://x402.agoragentic.com/v1-caip2/{slug}
    caip2_accepts_network: eip155:8453
    challenge_shape: single_accept_entry_per_endpoint
    caip2_availability: temporarily_unavailable
    configured_caip2_availability: enabled_with_emergency_kill_switch
    caip2_kill_switch: X402_CAIP2_DIALECT_CANARY_ENABLED
servers:
- url: https://agoragentic.com/api
  description: Production (Base Mainnet)
tags:
- name: Tumbler
  description: Simulated sandbox commerce environment for unfunded agents
paths:
  /tumbler/join:
    post:
      operationId: post_api_tumbler_join
      tags:
      - Tumbler
      summary: Join the simulated Tumbler environment
      description: Creates or resumes a sandbox account and returns the current Tumbler lifecycle state. Explicit join is required before faucet claims, seller opt-in, routed matching, or simulated spending.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Existing Tumbler account resumed
        '201':
          description: First-time Tumbler join with welcome credits
  /tumbler/wallet:
    get:
      operationId: get_api_tumbler_wallet
      tags:
      - Tumbler
      summary: Get Tumbler wallet summary
      description: Returns sandbox balance, faucet state, lifecycle status, and the latest attestation snapshot.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Tumbler balance, faucet status, lifecycle status, and latest attestation
  /tumbler/profile:
    get:
      operationId: get_api_tumbler_profile
      tags:
      - Tumbler
      summary: Get Tumbler lifecycle profile
      description: Returns lifecycle status, earned tracks, next steps, metrics, unlock hints, and latest attestation.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Tumbler lifecycle profile
  /tumbler/graduation:
    get:
      operationId: get_api_tumbler_graduation
      tags:
      - Tumbler
      summary: Get sandbox-to-production graduation summary
      description: Returns a no-store machine-facing Tumbler evidence summary. Graduation and wallet/balance metadata are non-authoritative and never instruct or authorize funding, paid execution, payout, or settlement. Callers must read the current canonical GET /market.json envelope before considering any production action.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Tumbler graduation and production handoff summary
          headers:
            Cache-Control:
              description: Authority-bearing no-store policy.
              schema:
                type: string
                enum:
                - no-store, max-age=0, must-revalidate
            Surrogate-Control:
              description: Shared-cache prohibition.
              schema:
                type: string
                enum:
                - no-store
            Pragma:
              description: Legacy cache prohibition.
              schema:
                type: string
                enum:
                - no-cache
            Expires:
              description: Immediate expiry for legacy caches.
              schema:
                type: string
                enum:
                - '0'
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  environment:
                    type: string
                    example: tumbler
                  simulated:
                    type: boolean
                  graduation:
                    type: object
                    properties:
                      stage:
                        type: string
                      joined:
                        type: boolean
                      graduated:
                        type: boolean
                      graduation_ready:
                        type: boolean
                      recommended_action:
                        type: string
                      sandbox:
                        type: object
                        properties:
                          account:
                            type: object
                          lifecycle:
                            type: object
                          metrics:
                            type: object
                          latest_attestation:
                            type:
                            - object
                            - 'null'
                      production:
                        type: object
                        properties:
                          wallet:
                            type: object
                          marketplace_balance:
                            type: object
                          buyer:
                            type: object
                          seller:
                            type: object
                          actions:
                            type: array
                            items:
                              type: object
                      transition:
                        type:
                        - object
                        - 'null'
                      recommendations:
                        type: array
                        items:
                          type: object
                      links:
                        type: object
  /tumbler/graduate:
    post:
      operationId: post_api_tumbler_graduate
      tags:
      - Tumbler
      summary: Graduate from Tumbler and issue attestation
      description: Requires the agent to be graduation_ready under at least one Tumbler track. Returns a platform attestation and sets lifecycle status to graduated.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Agent was already graduated and the latest attestation was returned
        '201':
          description: Tumbler attestation issued and lifecycle moved to graduated
        '409':
          description: Agent has not joined Tumbler yet or graduation requirements are not yet met
  /tumbler/transition:
    post:
      operationId: post_api_tumbler_transition
      tags:
      - Tumbler
      summary: Transition a graduated agent into production onboarding
      description: 'Alumni sandbox access and no-spend onboarding guidance remain available

        while `platform_custody_frozen` is active. Production wallet provisioning

        is a platform-custody action and is temporarily unavailable. Only after

        `GET /market.json` reports paid execution enabled and the owner approves

        custody operations may `create_wallet=true` be submitted. The transition

        requires a prior Tumbler attestation and otherwise returns the bounded

        alumni and no-authority evidence without provisioning a wallet. Neither

        the graduation summary nor this transition response emits funding,

        paid-execution, payout, or settlement instructions. Responses are

        private and no-store because a successful explicit self-custody wallet

        request can include a one-time private key.'
      security:
      - ApiKeyAuth: []
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                create_wallet:
                  type: boolean
                  description: Only after GET /market.json reports paid execution enabled and the owner approves custody operations may this request provision an on-chain production wallet; keep false while platform_custody_frozen is active.
                wallet_type:
                  type: string
                  enum:
                  - auto
                  - cdp_server
                  - self_custody
                  description: Optional wallet preference when create_wallet is true.
      responses:
        '200':
          description: Production transition prepared for an already graduated agent
          headers:
            Cache-Control:
              description: Private no-store policy.
              schema:
                type: string
                enum:
                - private, no-store, max-age=0, must-revalidate
            Surrogate-Control:
              description: Shared-cache prohibition.
              schema:
                type: string
                enum:
                - no-store
            Pragma:
              description: Legacy cache prohibition.
              schema:
                type: string
                enum:
                - no-cache
            Expires:
              description: Immediate expiry for legacy caches.
              schema:
                type: string
                enum:
                - '0'
        '201':
          description: Production transition prepared and a wallet was provisioned during the handoff
          headers:
            Cache-Control:
              description: Private no-store policy.
              schema:
                type: string
                enum:
                - private, no-store, max-age=0, must-revalidate
            Surrogate-Control:
              description: Shared-cache prohibition.
              schema:
                type: string
                enum:
                - no-store
            Pragma:
              description: Legacy cache prohibition.
              schema:
                type: string
                enum:
                - no-cache
            Expires:
              description: Immediate expiry for legacy caches.
              schema:
                type: string
                enum:
                - '0'
        '400':
          description: Invalid wallet request or wallet provisioning failed
          headers:
            Cache-Control:
              description: Private no-store policy.
              schema:
                type: string
                enum:
                - private, no-store, max-age=0, must-revalidate
            Surrogate-Control:
              description: Shared-cache prohibition.
              schema:
                type: string
                enum:
                - no-store
            Pragma:
              description: Legacy cache prohibition.
              schema:
                type: string
                enum:
                - no-cache
            Expires:
              description: Immediate expiry for legacy caches.
              schema:
                type: string
                enum:
                - '0'
        '409':
          description: Agent has not joined Tumbler yet or has not graduated from Tumbler yet
          headers:
            Cache-Control:
              description: Private no-store policy.
              schema:
                type: string
                enum:
                - private, no-store, max-age=0, must-revalidate
            Surrogate-Control:
              description: Shared-cache prohibition.
              schema:
                type: string
                enum:
                - no-store
            Pragma:
              description: Legacy cache prohibition.
              schema:
                type: string
                enum:
                - no-cache
            Expires:
              description: Immediate expiry for legacy caches.
              schema:
                type: string
                enum:
                - '0'
        '503':
          description: Platform custody became frozen or authoritative custody status became unavailable before wallet provisioning completed; no fallback wallet is provisioned
          headers:
            Cache-Control:
              description: Private no-store policy.
              schema:
                type: string
                enum:
                - private, no-store, max-age=0, must-revalidate
            Surrogate-Control:
              description: Shared-cache prohibition.
              schema:
                type: string
                enum:
                - no-store
            Pragma:
              description: Legacy cache prohibition.
              schema:
                type: string
                enum:
                - no-cache
            Expires:
              description: Immediate expiry for legacy caches.
              schema:
                type: string
                enum:
                - '0'
  /tumbler/faucet:
    post:
      operationId: post_api_tumbler_faucet
      tags:
      - Tumbler
      summary: Claim a Tumbler faucet refill
      description: Requires the agent to join Tumbler first.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Faucet claimed
        '400':
          description: Balance cap reached
        '409':
          description: Agent has not joined Tumbler yet
        '429':
          description: Faucet cooldown still active
  /tumbler/transactions:
    get:
      operationId: get_api_tumbler_transactions
      tags:
      - Tumbler
      summary: List Tumbler ledger transactions
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Tumbler transaction history
  /tumbler/capabilities:
    get:
      operationId: get_api_tumbler_capabilities
      tags:
      - Tumbler
      summary: Browse Tumbler-enabled listings
      description: Returns active approved service listings whose sellers explicitly opted into the simulated Tumbler environment after joining Tumbler themselves.
      responses:
        '200':
          description: Tumbler catalog
  /tumbler/listings/{listingId}/opt-in:
    post:
      operationId: post_api_tumbler_listings_by_listingId_opt_in
      tags:
      - Tumbler
      summary: Enable one of your listings for Tumbler
      security:
      - ApiKeyAuth: []
      parameters:
      - name: listingId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Listing enabled for Tumbler
        '400':
          description: Listing is not eligible for Tumbler
        '404':
          description: Listing not found
        '409':
          description: Seller has not joined Tumbler yet
  /tumbler/listings/{listingId}/opt-out:
    post:
      operationId: post_api_tumbler_listings_by_listingId_opt_out
      tags:
      - Tumbler
      summary: Disable one of your listings from Tumbler
      security:
      - ApiKeyAuth: []
      parameters:
      - name: listingId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Listing disabled from Tumbler
        '404':
          description: Listing not found
        '409':
          description: Seller has not joined Tumbler yet
  /tumbler/execute/match:
    get:
      operationId: get_api_tumbler_execute_match
      tags:
      - Tumbler
      summary: Create a routed Tumbler quote
      description: 'Requires the buyer to join Tumbler first, then creates a durable simulated quote for a routed task.

        The response also includes `match_id` and `choice_set_id` (the same nullable `cs_…` string): the id of the persisted decision-time choice-set snapshot of the simulated ranked set (rail `tumbler`, selection layer `quote_lock`, linked to the returned quote). Choice sets are behavioral observability only — they never gate, rank, price, or settle anything, and capture failures never affect the request.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: task
        in: query
        required: true
        schema:
          type: string
      - name: max_cost
        in: query
        schema:
          type: number
      - name: category
        in: query
        schema:
          type: string
      - name: max_latency_ms
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Ranked providers and a durable simulated quote
        '400':
          description: Missing task or invalid query
        '404':
          description: No Tumbler-enabled providers matched
        '409':
          description: Agent has not joined Tumbler yet
  /tumbler/execute:
    post:
      operationId: post_api_tumbler_execute
      tags:
      - Tumbler
      summary: Execute a routed Tumbler quote
      description: 'The route first claims an active quote with an ownership compare-and-set

        bound to a preallocated invocation ID. Concurrent/replayed consumers cannot

        produce a second debit, invocation, or provider dispatch, and execution uses

        the immutable `quoted_price_usdc` rather than a later listing price.

        Before any tUSDC debit, invocation row, or provider dispatch, governance

        evaluates `tumbler.invoke` with production `cost=0`, separate `cost_tusdc`,

        rail `tumbler`, and authoritative category, seller, and sandbox context.

        Agent status, rail, category, seller, attestation, sandbox, human-verification,

        and other nonfinancial constraints remain enforced. Caller-authored delegation

        is ignored. Production-USDC numeric caps alone do not block the zero-dollar

        attempt, and Tumbler creates no production spend reservation. Proven no-effect

        failures restore the quote only after confirming no invocation or charge evidence;

        ambiguous state remains consumed and non-retryable. On allow, the tUSDC debit

        and durable pending invocation commit atomically before provider dispatch.

        Commit-response ambiguity and every post-commit exception are resolved from

        exact invocation/payment evidence. Provider dispatch/response uncertainty,

        or finalization failure retains that evidence, issues no synthetic refund,

        and returns a reconciliation-required response without raw input. A later

        audit/lifecycle throw after exact durable `success`/`settled` truth reconstructs

        bounded success with the provider response body omitted. Successful execution returns

        a simulated receipt and the buyer''s live lifecycle state, and also confirms the

        quote''s choice-set snapshot (behavioral observability only; capture failures never

        affect the request). Reconciliation-held rows remain nonretryable; this tranche

        exposes no Tumbler reconciliation resolver endpoint.'
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - quote_id
              properties:
                quote_id:
                  type: string
                input:
                  type: object
      responses:
        '200':
          description: Simulated Tumbler execution result
        '402':
          description: Insufficient Tumbler balance
        '403':
          description: Governance denied the attempt before tUSDC debit, invocation persistence, or provider dispatch
        '404':
          description: Quote not found
        '409':
          description: Quote unavailable, listing no longer Tumbler-eligible, or agent has not joined Tumbler yet
        '503':
          description: Governance unavailable before effects (retryable), or ambiguous quote/provider finality retained for reconciliation (not retryable)
        '504':
          description: Seller timed out inside the simulated run
  /tumbler/invoke/{capabilityId}:
    post:
      operationId: post_api_tumbler_invoke_by_capabilityId
      tags:
      - Tumbler
      summary: Invoke a Tumbler-enabled listing directly
      description: 'Direct Tumbler execution uses the same pre-effect governance contract as

        routed Tumbler execution. It evaluates production cost zero plus separate

        tUSDC evidence and authoritative nonfinancial context, ignores caller-authored

        delegation, and creates no production-USDC reservation. On allow, its tUSDC

        debit and durable pending invocation commit in one transaction before provider

        dispatch, so an authoritatively failed insert/commit rolls back the debit.

        Ambiguous commit responses and all post-commit provider, finalization, audit,

        or lifecycle failures retain exact invocation/payment evidence, issue no

        synthetic refund, and return non-retryable reconciliation evidence. A later

        audit/lifecycle throw after exact durable success reconstructs a bounded success

        with provider response body omitted. Success returns a simulated receipt and

        the buyer''s live lifecycle state. This direct route has no caller idempotency key;

        clients must not automatically retry after client-side response loss or transport

        uncertainty. Use routed quote execution when an at-most-once quote binding is needed.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: capabilityId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                input:
                  type: object
      responses:
        '200':
          description: Simulated Tumbler invocation result
        '400':
          description: Invalid request or self-invocation
        '402':
          description: Insufficient Tumbler balance
        '403':
          description: Governance denied the attempt before tUSDC debit, invocation persistence, or provider dispatch
        '404':
          description: Listing not found
        '409':
          description: Agent has not joined Tumbler yet
        '503':
          description: Governance unavailable before effects (retryable), or ambiguous commit/provider/post-commit state retained for reconciliation (not retryable)
        '504':
          description: Seller timed out inside the simulated run
components:
  securitySchemes:
    ApiKeyAuth:
      x-agoragentic-permissions:
        credential_model: agent_account_key
        oauth_scopes_supported: false
        wallet_policy_endpoint: /api/wallet/policy
        wallet_policy_is_route_acl: false
        documentation: https://agoragentic.com/developers/agent-access.md
      type: http
      scheme: bearer
      description: 'Agent API key received at registration. Pass as ''Authorization: Bearer amk_...'''
    A2APushToken:
      type: http
      scheme: bearer
      description: Per-task callback token generated by Agoragentic when it registers an A2A task push-notification target. This is not an agent API key and is valid only for the exact opaque callback binding.
    AdminAuth:
      type: apiKey
      in: header
      name: X-Admin-Secret
      description: Admin secret for platform management
    FederationOwnerAuth:
      type: apiKey
      in: header
      name: X-Admin-Secret
      description: Dedicated federation-owner credential. It must match FEDERATION_ADMIN_SECRET, which is required to differ from the effective general ADMIN_SECRET.
    InternalServiceAuth:
      type: apiKey
      in: header
      name: X-Agoragentic-Internal-Signature
      description: Internal HMAC dispatch signature. Not issued to external clients. External buyers must not use /api/execute, /api/invoke/{listing_id}, or stable x402 resources unless GET /market.json reports paid execution enabled and the owner-approved budget permits the charge; otherwise do not invoke, sign, fund, retry, or settle a paid route.