Liquid Agent Tokenized Stock Index and Gas Sponsor API

Agent-facing REST API on Base (eip155:8453). Free reads (basket constituents and live prices, vault NAV and weights, an address's vaults and shares, a purchase quote, the plain-English guide) and free transaction builders (create-vault, set-weights, buy via EIP-2612 permit, rebalance, redeem to USDC or in-kind, send shares) that return unsigned {to,data,value,chainId} for the caller to sign and broadcast. Paid over x402 v2 (exact scheme, EIP-3009 USDC on Base or Polygon, Solana USDC for the Solana lane): GET /v1/signals ($0.04), POST /v1/publish ($0.25), and the gas sponsor at POST /v1/gas and POST /v1/gas/solana (from $0.03, dynamic). No API key, no account; SIWX (EIP-4361) wallet identity is optional on free calls.

Operations 17

GET /v1/guide START HERE. Plain-English guide: how to open your account, buy the tokenized-stock index from $1, check it, rebalance, and cash out. One call explains every other endpoint. #
GET /v1/basket Discover the tokenized stock index: invest in NVIDIA, Apple, Meta and Alphabet, with live prices and fees. #
GET /v1/vault/{address} Check a vault: its value (NAV), holdings, current vs target weights, and whether it needs rebalancing. #
GET /v1/balance/{agent} List what an address owns: every vault it holds, its shares, and current USD value. #
GET /v1/quote Preview a purchase before you buy: shares you would receive and the fee, for a given USDC amount. #
POST /v1/create-vault Open your own vault (you control it, no one else). Returns a transaction for you to sign. #
POST /v1/set-weights Set your custom stock allocation (default is equal weight). Returns a transaction for you to sign. #
POST /v1/buy Buy tokenized stocks: invest USDC into your vault from $1. One tx via EIP-2612 permit (no approve), or legacy approve + deposit. Own NVIDIA, Apple, Meta and Alphabet on-chain. #
POST /v1/redeem SELL / cash out: redeem your basket shares to USDC, or take the raw stock tokens in-kind (un-trappable, any block). Anyone holding these shares can sell this way — no vault needed. #
POST /v1/rebalance Rebalance your vault back to its target weights. Returns a transaction for you to sign. #
POST /v1/send Send your basket to anyone: transfer your tokenized-stock shares (LQMAG4) to any wallet — gift or hand off to another agent, no vault needed on their end. The recipient can then ho #
GET /v1/signals Basket signals: the whole basket's rebalancing signal in one call — returns, volatility, RSI, trend, relative strength, correlation, plus an inverse-volatility target-weight signal #
POST /v1/publish Publish a live, shareable portfolio page for a vault (24h keep-alive). #
GET /v1/gas/solana Solana gas sponsor info: fee payer address, fee asset, and how to call it. #
POST /v1/gas/solana GAS SPONSOR (Solana): POST your transaction with our sponsor as fee payer; pay the exact fee in Solana USDC over x402; get it back co-signed. #
GET /v1/gas Gas sponsor info: paymaster addresses, price rule, and how to call it. #
POST /v1/gas GAS SPONSOR: pay per operation in USDC over x402 and we cover the gas on Base or Polygon (add chainId: 137 for Polygon). Pay the fee in USDC on Base or Polygon. One endpoint for pl #

Documentation

Specifications

Other Resources

🔗
Examples
https://github.com/LiquidAgent/liquidagentx402/tree/main/examples
🔗
LLMsTxt
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/llms/liquidagent-ai-llms.txt
🔗
LLMsTxt
https://api.liquidagent.ai/llms.txt
🔗
Conventions
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/conventions/liquidagent-ai-conventions.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/errors/liquidagent-ai-problem-types.yml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/data-model/liquidagent-ai-data-model.yml
🔗
Overlay
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/overlays/liquidagent-ai-openapi-overlay.yaml
🔗
Plans
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/plans/liquidagent-ai-plans-pricing.yml
🔗
Conformance
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/conformance/liquidagent-ai-conformance.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/lifecycle/liquidagent-ai-lifecycle.yml
🔗
AgentSkill
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/skills/liquidagent-ai-liquid-agent-stocks.md
🔗
AgentSkill
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/skills/liquidagent-ai-liquid-gas-sponsor.md
🔗
AgenticAccess
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/agentic-access/liquidagent-ai-agentic-access.yml
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/liquidagent-ai/refs/heads/main/apis.yml

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/liquid-agent-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

liquidagent-ai-openapi.yml Raw ↑
# Verbatim conversion of https://api.liquidagent.ai/openapi.json (fetched 2026-09-19) from JSON to YAML.
# Original bytes: openapi/_original/liquidagent-ai-openapi-original.json. No content was changed.
openapi: 3.1.0
info:
  title: Liquid Agent — Buy & Invest in Tokenized Stocks On-Chain
  version: 1.0.0
  description: 'Part of Liquid Agent, the money layer for humans and their agents: one USDC balance for yield, payments, and tokenized stocks, for people through the app and for agents over x402. This API lets you buy and invest in tokenized US stocks and ETFs on-chain from $1: NVIDIA, Apple, Meta and Alphabet. Mint your own vault holding a band-rebalanced stock basket, equal-weight or your custom portfolio, and rebalance or cash out any block. Self-priced NAV (no oracle), in-kind exit, no brokerage account, no project token. Reads are free; transactions return unsigned calldata the agent signs and broadcasts with its own gas.'
  contact:
    name: Liquid Agent
    url: https://api.liquidagent.ai
    email: liquidagentai@gmail.com
  x-guidance: 'Liquid Agent is the money layer for humans and their agents: one USDC balance for yield, payments, and tokenized stocks, for people through the app and for agents over x402. This API is the agent-facing tokenized-stock index. It lets an agent mint its OWN vault holding a band-rebalanced basket of Coinbase''s tokenized NVDA/META/AAPL/GOOGL on Base (eip155:8453). Reads are FREE; every POST returns an UNSIGNED {to,data,value,chainId} that YOU sign and broadcast with your own gas (the server never signs). Amounts are USDC-6 (2000000 = $2). weightsBps are basis points summing to 10000. FLOW: 1) GET /v1/basket — discover constituents + live prices + fees. 2) GET /v1/quote?usdc=<amount6> — preview shares + mint fee. 3) POST /v1/create-vault — unsigned createVault(); sign+broadcast (you become the sole strategist, the protocol Safe owns it for fees). 4) GET /v1/balance/<your-address> — your new vault address. 5) POST /v1/set-weights {vault,weightsBps:[4]} — optional custom allocation.
    6) POST /v1/buy {vault,usdc,permit:true,owner} — EIP-712 permit to sign off-chain, then re-POST with permit:{deadline,signature} for ONE unsigned depositWithPermit tx (no approve; omit permit for legacy approve+deposit). 7) POST /v1/rebalance {vault} — move to your target. 8) GET /v1/vault/<vault> — NAV + weights (self-priced TWAP, no oracle). 9) POST /v1/redeem {vault,shares,inKind?} — exit to USDC or raw tokens (un-trappable, any block). REUSE: create-vault is a ONE-TIME step. To add funds later do NOT create again — GET /v1/balance/<you>, take vaults[0].vault, and POST /v1/buy into that same vault (each buy mints more shares). create-vault always makes a brand-new separate vault. Contracts: factory 0x1B205660780CbC57849019Df2BA64B719b00AEA8, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. Broadcast over any Base RPC (e.g. an x402 RPC); deposits swap precompile tokens so pass an explicit gas limit ~3,000,000.'
servers:
- url: https://api.liquidagent.ai
externalDocs:
  description: Open-source code examples (JavaScript/viem, Python/web3, curl) + README for the full create/buy/rebalance/exit flow.
  url: https://github.com/LiquidAgent/liquidagentx402
components:
  securitySchemes:
    siwx:
      type: apiKey
      in: header
      name: SIGN-IN-WITH-X
      description: Sign-In with X wallet identity (EIP-4361). Optional; no payment.
    x402:
      type: http
      scheme: x402
      description: Pay-per-call via x402 (exact scheme, EIP-3009 USDC on Base eip155:8453 or Polygon eip155:137). Sign a USDC authorization; no account, no key held by the server.
paths:
  /v1/guide:
    get:
      operationId: get_v1_guide
      summary: 'START HERE. Plain-English guide: how to open your account, buy the tokenized-stock index from $1, check it, rebalance, and cash out. One call explains every other endpoint.'
      tags:
      - Liquid Agent
      description: 'START HERE. Plain-English guide: how to open your account, buy the tokenized-stock index from $1, check it, rebalance, and cash out. One call explains every other endpoint. Returns: {service,what,howItWorks,steps:[{step,do,call,why}],amounts,signing,network,fees,fullSpec}. Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      responses:
        '200':
          description: '{service,what,howItWorks,steps:[{step,do,call,why}],amounts,signing,network,fees,fullSpec}'
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/basket:
    get:
      operationId: get_v1_basket
      summary: 'Discover the tokenized stock index: invest in NVIDIA, Apple, Meta and Alphabet, with live prices and fees.'
      tags:
      - Liquid Agent
      description: 'Discover the tokenized stock index: invest in NVIDIA, Apple, Meta and Alphabet, with live prices and fees. Returns: {protocol,chainId,factory,usdc,feeSink,constituents:[{symbol,address,decimals,priceUsd}],fees,minDepositUsdc,flow}. Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      responses:
        '200':
          description: '{protocol,chainId,factory,usdc,feeSink,constituents:[{symbol,address,decimals,priceUsd}],fees,minDepositUsdc,flow}'
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/vault/{address}:
    get:
      operationId: get_v1_vault_address
      summary: 'Check a vault: its value (NAV), holdings, current vs target weights, and whether it needs rebalancing.'
      tags:
      - Liquid Agent
      description: 'Check a vault: its value (NAV), holdings, current vs target weights, and whether it needs rebalancing. Input: path: vault address. Returns: {vault,strategist,owner,navUsdc,nav,weightsBps[4],rebalanceNeeded,rebalanceBandBps,maxTvlUsdc,mintFeeBps}. Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      parameters:
      - name: address
        in: path
        required: true
        schema:
          type: string
          pattern: ^0x[a-fA-F0-9]{40}$
      responses:
        '200':
          description: '{vault,strategist,owner,navUsdc,nav,weightsBps[4],rebalanceNeeded,rebalanceBandBps,maxTvlUsdc,mintFeeBps}'
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/balance/{agent}:
    get:
      operationId: get_v1_balance_agent
      summary: 'List what an address owns: every vault it holds, its shares, and current USD value.'
      tags:
      - Liquid Agent
      description: 'List what an address owns: every vault it holds, its shares, and current USD value. Input: path: agent address. Returns: {agent,vaultCount,vaults:[{vault,shares,valueUsdc,value}]}. Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      parameters:
      - name: agent
        in: path
        required: true
        schema:
          type: string
          pattern: ^0x[a-fA-F0-9]{40}$
      responses:
        '200':
          description: '{agent,vaultCount,vaults:[{vault,shares,valueUsdc,value}]}'
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/quote:
    get:
      operationId: get_v1_quote
      summary: 'Preview a purchase before you buy: shares you would receive and the fee, for a given USDC amount.'
      tags:
      - Liquid Agent
      description: 'Preview a purchase before you buy: shares you would receive and the fee, for a given USDC amount. Input: query: usdc=<amount USDC-6>. Returns: {usdcIn,mintFeeUsdc,netUsdc}. Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      parameters:
      - name: usdc
        in: query
        required: true
        schema:
          type: string
        description: amount in USDC-6 (2000000 = $2)
      responses:
        '200':
          description: '{usdcIn,mintFeeUsdc,netUsdc}'
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/create-vault:
    post:
      operationId: post_v1_create-vault
      summary: Open your own vault (you control it, no one else). Returns a transaction for you to sign.
      tags:
      - Liquid Agent
      description: 'Open your own vault (you control it, no one else). Returns a transaction for you to sign. Input: {} (empty body). Returns: unsigned {to,data,value,chainId} for createVault(). Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: unsigned {to,data,value,chainId} for createVault()
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/set-weights:
    post:
      operationId: post_v1_set-weights
      summary: Set your custom stock allocation (default is equal weight). Returns a transaction for you to sign.
      tags:
      - Liquid Agent
      description: 'Set your custom stock allocation (default is equal weight). Returns a transaction for you to sign. Input: {vault:address, weightsBps:[4 ints, sum 10000]}. Returns: unsigned {to,data,value,chainId} for setTargetWeights(uint16[]). Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: unsigned {to,data,value,chainId} for setTargetWeights(uint16[])
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/buy:
    post:
      operationId: post_v1_buy
      summary: 'Buy tokenized stocks: invest USDC into your vault from $1. One tx via EIP-2612 permit (no approve), or legacy approve + deposit. Own NVIDIA, Apple, Meta and Alphabet on-chain.'
      tags:
      - Liquid Agent
      description: 'Buy tokenized stocks: invest USDC into your vault from $1. One tx via EIP-2612 permit (no approve), or legacy approve + deposit. Own NVIDIA, Apple, Meta and Alphabet on-chain. Input: {vault:address, usdc:string(USDC-6), minShares?:string, permit?:true|{deadline,signature}, owner?:address}. Returns: permit:true -> {typedData} to sign; permit:{deadline,signature} -> ONE unsigned depositWithPermit tx; no permit -> {steps:[approve,deposit]}. Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: permit:true -> {typedData} to sign; permit:{deadline,signature} -> ONE unsigned depositWithPermit tx; no permit -> {steps:[approve,deposit]}
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/redeem:
    post:
      operationId: post_v1_redeem
      summary: 'SELL / cash out: redeem your basket shares to USDC, or take the raw stock tokens in-kind (un-trappable, any block). Anyone holding these shares can sell this way — no vault needed. Returns a transaction for you to sign.'
      tags:
      - Liquid Agent
      description: 'SELL / cash out: redeem your basket shares to USDC, or take the raw stock tokens in-kind (un-trappable, any block). Anyone holding these shares can sell this way — no vault needed. Returns a transaction for you to sign. Input: {vault:address, shares:string, minUsdcOut?:string, inKind?:bool}. Returns: unsigned {to,data,value,chainId} for redeem() (USDC) or redeemInKind() (raw tokens). Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: unsigned {to,data,value,chainId} for redeem() (USDC) or redeemInKind() (raw tokens)
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/rebalance:
    post:
      operationId: post_v1_rebalance
      summary: Rebalance your vault back to its target weights. Returns a transaction for you to sign.
      tags:
      - Liquid Agent
      description: 'Rebalance your vault back to its target weights. Returns a transaction for you to sign. Input: {vault:address}. Returns: unsigned {to,data,value,chainId} for rebalance(). Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: unsigned {to,data,value,chainId} for rebalance()
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/send:
    post:
      operationId: post_v1_send
      summary: 'Send your basket to anyone: transfer your tokenized-stock shares (LQMAG4) to any wallet — gift or hand off to another agent, no vault needed on their end. The recipient can then hold it, SELL it (redeem to USDC or in-kind), or forward it. Returns a transaction for you to sign.'
      tags:
      - Liquid Agent
      description: 'Send your basket to anyone: transfer your tokenized-stock shares (LQMAG4) to any wallet — gift or hand off to another agent, no vault needed on their end. The recipient can then hold it, SELL it (redeem to USDC or in-kind), or forward it. Returns a transaction for you to sign. Input: {vault:address, to:address, shares:string}. Returns: unsigned {to,data,value,chainId} for transfer(to,shares). Free (optional SIWX wallet identity, no payment). New here? Read GET /v1/guide first.'
      security:
      - siwx: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: unsigned {to,data,value,chainId} for transfer(to,shares)
          content:
            application/json:
              schema:
                type: object
        '400':
          description: validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /v1/signals:
    get:
      operationId: getV1Signals
      summary: 'Basket signals: the whole basket''s rebalancing signal in one call — returns, volatility, RSI, trend, relative strength, correlation, plus an inverse-volatility target-weight signal.'
      tags:
      - Liquid Agent
      description: 'PAID: $0.04 USDC per call via x402 (exact scheme, EIP-3009, USDC on Base eip155:8453 or Polygon eip155:137). Quantitative signals for the tokenized NVDA/META/AAPL/GOOGL basket so an agent can decide weights in one call instead of visiting four sites, then execute via the free /v1/set-weights + /v1/rebalance. Aggregated data, not investment advice.'
      security:
      - x402: []
      parameters:
      - name: vault
        in: query
        required: false
        schema:
          type: string
          pattern: ^0x[a-fA-F0-9]{40}$
        description: Optional. Your vault address. If provided, the response adds that vault's current weights and their drift vs the suggested (inverse-vol) weights, so you know exactly what to change.
      x-payment:
        price: '0.04'
        currency: USDC
        network: eip155:8453
        asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
        payTo: '0x487b28A4FbbA8Cf46eb6E1d72e6959202Bb75e90'
        scheme: exact
      x-payment-info:
        protocols:
        - x402:
            scheme: exact
            network: eip155:8453
            asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
            payTo: '0x487b28A4FbbA8Cf46eb6E1d72e6959202Bb75e90'
        price:
          mode: fixed
          currency: USD
          amount: '0.04'
      responses:
        '200':
          description: basket signals
          content:
            application/json:
              schema:
                type: object
        '402':
          description: x402 payment required (returns the payment challenge)
          content:
            application/json:
              schema:
                type: object
  /v1/publish:
    post:
      operationId: postV1Publish
      summary: Publish a live, shareable portfolio page for a vault (24h keep-alive).
      tags:
      - Liquid Agent
      description: 'PAID: $0.25 USDC flat per publish via x402 (exact scheme, EIP-3009, USDC on Base eip155:8453 or Polygon eip155:137). Mints or extends a shareable page at /v/<slug> showing the vault''s holdings, allocation, live prices and signals for 24 hours; re-publish to keep it alive. Returns {viewUrl, slug, expiresAt}; your user opens the viewUrl with no wallet.'
      security:
      - x402: []
      x-payment:
        price: '0.25'
        currency: USDC
        network: eip155:8453
        asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
        payTo: '0x487b28A4FbbA8Cf46eb6E1d72e6959202Bb75e90'
        scheme: exact
      x-payment-info:
        protocols:
        - x402:
            scheme: exact
            network: eip155:8453
            asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
            payTo: '0x487b28A4FbbA8Cf46eb6E1d72e6959202Bb75e90'
        price:
          mode: fixed
          currency: USD
          amount: '0.25'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - vault
              properties:
                vault:
                  type: string
                  pattern: ^0x[a-fA-F0-9]{40}$
                  description: The vault to publish a page for.
                label:
                  type: string
                  description: Optional page title, e.g. the user's name.
                brand:
                  type: object
                  description: Optional agent branding {name,color,iconUrl}.
      responses:
        '200':
          description: '{viewUrl, slug, expiresAt}'
          content:
            application/json:
              schema:
                type: object
        '402':
          description: x402 payment required (returns the payment challenge)
          content:
            application/json:
              schema:
                type: object
  /v1/gas/solana:
    get:
      operationId: getV1GasSolana
      summary: 'Solana gas sponsor info: fee payer address, fee asset, and how to call it.'
      tags:
      - Liquid Agent
      security: []
      description: Free. Returns the sponsor's fee-payer address (build your transaction with it as feePayer), the fee network/asset (USDC on Solana mainnet), limits and the flow.
      responses:
        '200':
          description: lane info
          content:
            application/json:
              schema:
                type: object
    post:
      operationId: postV1GasSolana
      summary: 'GAS SPONSOR (Solana): POST your transaction with our sponsor as fee payer; pay the exact fee in Solana USDC over x402; get it back co-signed.'
      tags:
      - Liquid Agent
      description: 'PAID, dynamic (from $0.03 USDC, max $2.00; the 402 is the quote, issued only after a successful simulation). Body {transaction:<base64 v0 or legacy, signed by you, feePayer = the sponsor address from GET>, send?:true}. Without payment: 402 with the exact price = (network fee + priority fee + rent for token accounts it opens) x 1.3. Payment: one USDC TransferChecked of exactly `amount` from your token account to the sponsor''s USDC account, sponsor as fee payer, signed by you, wrapped as {x402Version:2, scheme:''exact'', network, accepted, payload:{transaction}} and base64d into PAYMENT-SIGNATURE (X-PAYMENT also works). The same POST then returns {transaction (co-signed), feePayer, priceUsd, lamports, feePaymentSig, settledBy, signature? when send:true, next}. Limits: sponsor only as fee payer and payer of <= 8 ATA creates; compute limit <= 1.4M units, price <= 50,000 micro-lamports/unit; 500 sponsorships per payer per day; 503 and no charge when the sponsor is low on
        SOL.'
      security:
      - x402: []
      x-payment:
        price: 0.03+
        currency: USDC
        network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
        asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
        payTo: BBcAL97dyJPGmsjQ7pPxCdUsFk1wgZ6jqYQ4DFvCVHkn
        scheme: exact
        mode: dynamic
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - transaction
              properties:
                transaction:
                  type: string
                  description: base64 Solana transaction (v0 or legacy), signed by you, with feePayer = the sponsor
                send:
                  type: boolean
                  description: true = we broadcast the co-signed transaction and return its signature
      responses:
        '200':
          description: co-signed transaction
          content:
            application/json:
              schema:
                type: object
        '402':
          description: x402 Payment Required (the quote, in Solana USDC)
  /v1/gas:
    get:
      operationId: getV1Gas
      summary: 'Gas sponsor info: paymaster addresses, price rule, and how to call it.'
      tags:
      - Liquid Agent
      security: []
      description: Bare GET returns the 402 quote (how x402 indexers recognise a paid resource); GET /v1/gas?docs=1 returns the docs. Describes the ERC-4337 paymaster paid over x402 (EntryPoint v0.8 on Base).
      responses:
        '200':
          description: info
          content:
            application/json:
              schema:
                type: object
    post:
      operationId: postV1Gas
      summary: 'GAS SPONSOR: pay per operation in USDC over x402 and we cover the gas on Base or Polygon (add chainId: 137 for Polygon). Pay the fee in USDC on Base or Polygon. One endpoint for plain wallets ({sender, calls}), any EntryPoint v0.8 smart account ({userOperation}, bring your own operation) and smart-wallet SDKs (ERC-7677 JSON-RPC). No ETH, no account, no API key.'
      tags:
      - Liquid Agent
      description: 'PAID, dynamic (from $0.03 USDC per operation; the 402 is the quote, valid 120 s). ONE endpoint, the body picks the lane. (A) Smart-wallet SDKs: standard ERC-7677 JSON-RPC {jsonrpc:"2.0", method: pm_getPaymasterStubData | pm_getPaymasterData, params:[userOperation, entryPoint, chainId, context]} — HTTP is always 200 and an unpaid pm_getPaymasterData returns a JSON-RPC error {code:402, data:<x402 PaymentRequired>}; put the x402 payment object in params[3].context.x402 and retry. (B) Plain wallets, no ETH: POST {sender, calls:[{to,data,value?}]} -> 402 with the exact price; pay it (X-PAYMENT) and the same call returns {userOperation (sponsored), typedData, authorization? (EIP-7702, only if the EOA is not delegated yet), validUntil}. Sign typedData with the sender''s key, sign the authorization if given, then POST {userOperation, authorization?} back to this URL: we submit it and our deposit pays the gas. No further charge; only operations we sponsored are accepted, once
        each. EntryPoint v0.8. Price = max($0.03, 1.3× the op''s gas cap) and the signed sponsorship locks the gas limits and max fee, so the sponsor can never charge more than quoted. (C) Bring your own operation, for any EntryPoint v0.8 smart account (a wallet already delegated to another EIP-7702 implementation, or a deployed Kernel / Safe / Nexus account): POST {userOperation} unsigned (your sender, calldata and gas limits; no paymaster fields) -> 402 with the exact price; pay it and repeat -> {userOperation with paymaster fields, typedData, validUntil}; sign it the way your account expects (viem: account.signUserOperation) and POST {userOperation} back: we dry-run it through the EntryPoint (a failing dry run returns 400 with the reason and costs nothing) and then submit it from our wallet. No bundler, no stake. Lane B note: if the EOA is already delegated to another implementation the first call returns 409; add "redelegate": true to the same body and the returned authorization (signed
        by you, applied in the same transaction, reversible) re-points the wallet to Simple7702Account.'
      security:
      - x402: []
      x-payment:
        price: 0.03+
        currency: USDC
        network: eip155:8453
        asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
        payTo: '0x487b28A4FbbA8Cf46eb6E1d72e6959202Bb75e90'
        scheme: exact
        mode: dynamic
      x-payment-info:
        protocols:
        - x402:
            scheme: exact
            network: eip155:8453
            asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
            payTo: '0x487b28A4FbbA8Cf46eb6E1d72e6959202Bb75e90'
        price:
          mode: dynamic
          currency: USD
          min: '0.03'
          description: max($0.03, 1.3 × the operation's gas cap); exact amount is in the 402
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - title: ERC-7677 (smart-wallet SDKs)
                type: object
                required:
                - jsonrpc
                - method
                - params
                properties:
                  jsonrpc:
                    const: '2.0'
                  id: {}
                  method:
                    type: string
                    enum:
                    - pm_getPaymasterStubData
                    - pm_getPaymasterData
                    - pm_supportedEntryPoints
                  params:
                    type: array
                    description: '[userOperation (unpacked v0.7+ shape), entryPoint, chainId (0x2105), context ({} or {x402: <payment>})]'
              - title: Direct lane, step 1 (plain wallet)
                type: object
                required:
                - sender
                - calls
                properties:
                  sender:
                    type: string
                    description: your EOA (0x…40 hex)
                  calls:
                    type: array
                    items:
                      type: object
                      required:
                      - to
                      properties:
                        to:
                          type: string
                        data:
                          type: string
                        value:
                          type: string
                    description: any calls, e.g. an unsigned tx from this API
                  redelegate:
                    type: boolean
                    description: 'only if your EOA is already EIP-7702-delegated to another implementation: true = return an authorization (you sign it) that re-points the wallet to Simple7702Account in the same transaction; reversible'
              - title: Bring your own operation, step 1 (any EntryPoint v0.8 smart account)
                type: object
                required:
                - userOperation
                properties:
                  userOperation:
                    type: object
                    description: 'your UNSIGNED EntryPoint v0.8 user operation: sender, nonce, callData, callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas (hex strings), signature ''0x'', factory/factoryData if not deployed; no paymaster fields. The 402 is the quote; pay and repeat to receive the paymaster fields and typedData.'
              - title: Submit (both lanes)
                type: object
                required:
                - userOperation
                properties:
                  userOperation:
                    type: object
                    description: 'the sponsored operation from step 1 with your signature in userOperation.signature (direct lane: eth_signTypedData_v4 of typedData; bring your own: however your account signs). We dry-run it through the EntryPoint, then submit it; our deposit pays the gas.'
                  authorization:
                    type: object
                    description: the signed EIP-7702 authorization from step 1, if one was returned (direct lane only)
      responses:
        '200':
          description: 'JSON-RPC result (paymaster fields) or JSON-RPC error {code:402, data: x402 PaymentRequired}'
          content:
            application/json:
              schema:
                type: object
        '402':
          description: x402 payment required (direct lane, or a bare probe)
          content:
            application/json:
              schema:
                type: object