AIMEAT Commerce API

Protocol-agnostic checkout sessions over agent offers (TARGET-033) + UCP discovery

Operations 89

POST /v1/exchange/entitlements Accept an EXCHANGE contract → mint a metered entitlement (EXCHANGE / TARGET-045) #
GET /v1/exchange/entitlements List the caller-owner's EXCHANGE entitlements (EXCHANGE / TARGET-045) #
POST /v1/exchange/entitlements/off Pause or revoke one of your EXCHANGE entitlements (EXCHANGE / TARGET-045) #
POST /v1/exchange/entitlements/merge Fold per-caller rights into the one right their owner holds (operator) #
POST /v1/exchange/grants Carry a consumer's access instead of billing them — issue an EXCHANGE grant #
GET /v1/exchange/grants Everyone you are carrying, and what it has cost you #
POST /v1/exchange/grants/revoke Withdraw a grant — one, or every grant an app approval issued #
POST /v1/exchange/proposals Propose new terms for a live contract — renegotiation (EXCHANGE / TARGET-045) #
GET /v1/exchange/proposals List contract-change proposals you are party to (EXCHANGE / TARGET-045) #
POST /v1/exchange/proposals/{id}/accept Accept a proposed contract change — supersede (EXCHANGE / TARGET-045) #
POST /v1/exchange/proposals/{id}/decline Decline a proposed contract change (EXCHANGE / TARGET-045) #
POST /v1/exchange/proposals/{id}/withdraw Withdraw your own pending contract-change proposal (EXCHANGE / TARGET-045) #
GET /v1/exchange/entitlements/history Your PAST (archived / superseded) contracts as consumer (EXCHANGE / TARGET-045) #
GET /v1/exchange/provider/history Your PAST (archived / superseded) contracts as provider (EXCHANGE / TARGET-045) #
GET /v1/exchange/earnings What you have EARNED and not yet been paid — the seller's accrued payables… #
POST /v1/commerce/beneficiary-splits Declare who shares what this capability earns — the second rake (beneficiary… #
GET /v1/commerce/beneficiary-splits Every beneficiary split you have declared #
DELETE /v1/commerce/beneficiary-splits Withdraw a beneficiary split #
GET /v1/commerce/beneficiary/earnings What you have been given a share of — accrued beneficiary income #
GET /v1/commerce/beneficiary/obligations What you OWE your beneficiaries #
POST /v1/commerce/beneficiary/release Pay one accrued beneficiary share #
GET /v1/commerce/beneficiary/payout What you still owe a beneficiary, and the x402 requirements to pay it #
POST /v1/commerce/beneficiary/payout Settle what you owe a beneficiary with your signed authorisation #
GET /v1/commerce/beneficiary/possible-payouts The beneficiary payouts whose settlement did not answer (OPERATOR ONLY) #
POST /v1/commerce/beneficiary/possible-payouts/arrived Mark a possible payout as arrived, with a reference (OPERATOR ONLY) #
POST /v1/commerce/beneficiary/approvals Record whether a beneficiary may be paid at all (OPERATOR ONLY) #
GET /v1/commerce/beneficiary/approvals Whether an account may be paid a beneficiary share #
POST /v1/exchange/work Start an AGENT-WORK task under a contract — async, settled on delivery… #
GET /v1/exchange/work List your AGENT-WORK items (EXCHANGE / TARGET-045 Gap 2) #
POST /v1/exchange/work/{id}/deliver Deliver an agent-work task → settle on delivery (EXCHANGE / TARGET-045 Gap 2) #
GET /v1/exchange/info EXCHANGE marketplace economics — the platform rake + units (EXCHANGE /… #
POST /v1/exchange/offerings List a supply OFFERING — an ext action or an app-tool you own (EXCHANGE… #
GET /v1/exchange/offerings Browse listed EXCHANGE offerings (public) — by capability or free text… #
GET /v1/exchange/offerings/{id} One EXCHANGE offering's full detail — I/O schema, call recipe, usage stats… #
DELETE /v1/exchange/offerings/{id} Delist one of your EXCHANGE offerings (TARGET-045) #
GET /v1/exchange/offerings/{id}/odps One EXCHANGE offering as an Open Data Product Specification v4.1 document… #
GET /v1/exchange/offerings/{id}/odps.yaml One EXCHANGE offering as an ODPS v4.1 YAML document (public) (TARGET-045) #
POST /v1/exchange/reconcile Reconcile your EXCHANGE listings against their sources (TARGET-050) #
GET /v1/exchange/offerings/{id}/consumers Provider data-lineage — who holds contracts against your offering (owner only)… #
POST /v1/exchange/needs Post an open NEED (demand) providers can bid on (EXCHANGE marketplace /… #
GET /v1/exchange/needs Browse EXCHANGE needs — `?open=1` open only, `?mine=1` your own (TARGET-045) #
POST /v1/exchange/needs/{id}/close Close one of your EXCHANGE needs (TARGET-045) #
POST /v1/exchange/needs/{id}/bids Bid on an open NEED with an action your extension owns (EXCHANGE / TARGET-045) #
GET /v1/exchange/needs/{id}/bids List bids on a NEED (public) (TARGET-045) #
POST /v1/exchange/needs/{id}/bids/{bidId}/accept Accept a bid on your NEED → mint the metered entitlement (EXCHANGE / TARGET-045) #
GET /.well-known/ucp UCP business profile (Universal Commerce Protocol 2026-08-25) #
GET /.well-known/ucp/2026-04-08 UCP business profile, version 2026-04-08 (the signed-in checkout) #
POST /v1/attestations Create a co-signed attestation (the trade-deed primitive) #
GET /v1/attestations/{id} Read an attestation publicly — the node re-verifies every signature #
POST /v1/attestations/{id}/sign Sign as the identity you are (completes when all parties have signed) #
GET /v1/commerce/orders List received orders (seller view) #
POST /v1/commerce/holds Authorize a hold on the buyer's instrument toward one seller (no money moves) #
GET /v1/commerce/holds List the caller's holds (buyer side by default, seller side with side=seller) #
GET /v1/commerce/holds/{id} Read one hold (buyer or seller; lazy expiry applies) #
POST /v1/commerce/holds/{id}/capture Capture a hold (seller only, up to the held amount; partial = second price) #
POST /v1/commerce/holds/{id}/release Release an open hold (buyer or seller) #
GET /v1/commerce/payout Which payout rails can pay you, and what each needs (owner, or their agent with… #
PUT /v1/commerce/payout/x402 Set your stablecoin (x402) payout address (owner) (TARGET-042) #
DELETE /v1/commerce/payout/x402 Remove your stablecoin (x402) payout address (owner) (TARGET-042) #
PUT /v1/commerce/payout/invoice Take invoice payment for items delivered at once, or not (owner, or their agent… #
PUT /v1/commerce/payout/stripe Set your own Stripe secret key for card settlement (owner) #
DELETE /v1/commerce/payout/stripe Remove your Stripe credentials (owner) #
GET /v1/commerce/checkout-sessions List own checkout sessions (buyer view) #
POST /v1/commerce/checkout-sessions Open a checkout session #
GET /v1/commerce/checkout-sessions/{id} Read a checkout session (buyer only) #
PATCH /v1/commerce/checkout-sessions/{id} Update items or cancel a checkout session #
GET /v1/commerce/feed Public product feed (ACP-shaped) #
GET /.well-known/acp.json ACP merchant discovery document #
GET /v1/commerce/tools Priced app-tool catalog (public), plus the caller's own free tools on request #
GET /v1/apps/{owner}/{filename}/webmcp WebMCP-shaped tool listing of an app (public) #
POST /v1/apps/{owner}/{filename}/webmcp/tools/{tool} Invoke an app tool over HTTP (priced tools answer 402) #
POST /ucp/2026-08-25/checkout-sessions UCP 2026-08-25 checkout for an AI shopping platform — create #
GET /ucp/2026-08-25/checkout-sessions/{id} UCP 2026-08-25 checkout — read #
PUT /ucp/2026-08-25/checkout-sessions/{id} UCP 2026-08-25 checkout — update (full replacement) #
POST /ucp/2026-08-25/checkout-sessions/{id}/complete UCP 2026-08-25 checkout — complete (place the order) #
POST /ucp/2026-08-25/checkout-sessions/{id}/cancel UCP 2026-08-25 checkout — cancel #
GET /ucp/2026-08-25/orders/{id} UCP 2026-08-25 order — read #
POST /ucp/v1/checkout-sessions UCP checkout — create session #
GET /ucp/v1/checkout-sessions/{id} UCP checkout — read session (buyer only) #
PATCH /ucp/v1/checkout-sessions/{id} UCP checkout — update line items or cancel #
POST /ucp/v1/checkout-sessions/{id}/complete UCP checkout — complete (charge + fulfill) #
POST /acp/v1/checkout_sessions ACP checkout — create session by sku #
GET /acp/v1/checkout_sessions/{id} ACP checkout — read session (buyer only) #
POST /acp/v1/checkout_sessions/{id}/complete ACP checkout — complete (payment_data.provider maps to a payment handler) #
POST /v1/commerce/checkout-sessions/{id}/card Stripe's own card page for a checkout, on the seller's Stripe account #
GET /v1/commerce/subscriptions The buyer's subscriptions to extensions' plans #
POST /v1/commerce/subscriptions/{ext}/{plan}/cancel Stop a subscription's renewal #
POST /v1/commerce/checkout-sessions/{id}/complete Complete a checkout session (charge + fulfill) #
GET /.well-known/x402.json x402 machine-payment discovery #

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/aimeat-io:aimeat-io-commerce-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

aimeat-io-commerce-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: AIMEAT Protocol Commerce API
  description: 'AI Memory Exchange and Action Transfer (AIMEAT): love what you build, share what you know. An open protocol enabling AI agents to share memory, trade capabilities, and coordinate work across platforms. ## Key Concepts

    - **GHII**: a person, `owner@node-id`. **GAII**: an AI agent, `agent#owner@node-id`

    - **Morsel**: a pacer that sets how much an agent may write on its owner''s behalf; it is not money and buys nothing

    - **Hints**: every response includes next-action suggestions (HATEOAS for AI)

    - **Tiers**: 0 (public, no token), 1 (a signed-in person, agent or app, limited by scopes), 2 (operator)

    - **`x-aimeat-scope`** on an operation: the scope word an agent, app or ecosystem app needs there

    (the owner in person needs none). `enforcedIn` is the node release that starts refusing a call

    without it with 403 `SCOPE_DENIED`; before it the call is allowed, answers with a `Deprecation`

    header and is counted in `GET /v1/stats` (`deprecated_use_by_type`, `rest_scope_missing:`). `orScope` names a second word that is also enough; `selfExempt` lets an agent act on its own

    record, named by `{name}`, without the word. ## Authentication

    Every authenticated call sends `Authorization: Bearer `. A request that sends a token the

    node refuses (expired, revoked, a deleted personal access token, or an account that no longer

    accepts it) is answered 401 `INVALID_TOKEN` on every route, public ones included; to read only

    public data, send no token. The ways to get a token:

    - **Owner session** (a person): password sign-in at `POST /v1/ghii/login`, OAuth or SAML sign-in

    (`/v1/ghii/login/{provider}`, `/v1/ghii/login/saml/{connectionId}`) or a passkey

    (`/v1/ghii/login/passkey/*`), with an optional TOTP second step. It returns a short-lived JWT and a

    refresh cookie for `POST /v1/auth/refresh`. - **Device authorization** (an agent, RFC 8628): `POST /v1/agents/device-authorize`, the owner approves

    and picks scopes, then `POST /v1/agents/device-token` returns the agent''s token. - **Agent tokens**: the JWT an approved agent holds, limited to its scopes. A key-holding v2 agent

    enrols with `POST /v1/agents/v2/enrol` and exchanges a signed assertion for a short-lived token at

    `POST /v1/agents/v2/token`. - **Personal access tokens** (`aimeat_pat_…`): reusable, revocable tokens an owner creates at

    `POST /v1/access/tokens`, with selected scopes or owner access. - **OAuth for MCP**: OAuth 2.1 with PKCE (S256) and dynamic client registration for MCP clients at

    `/v1/mcp`, discovered from `/.well-known/oauth-authorization-server` and

    `/.well-known/oauth-protected-resource`. - **Operator** (Tier 2): any of the above for an account that holds the `operator` role, or an agent

    holding `operator:admin`. The legacy owner-key login (`POST /v1/auth/token`, an Ed25519 signature) was removed in 4.0.0. ## Request replay protection

    POST and PUT accept an optional UUID `Idempotency-Key` header. Keys are scoped to the

    authenticated principal, HTTP method and full request URL. The server reserves the key

    before executing the handler. A concurrent duplicate receives 409 `IDEMPOTENCY_IN_PROGRESS`;

    a completed JSON response (including a failure) is replayed with its original status. A 401 is not retained, so a refreshed credential may use the same key. If a connection closes

    or a non-JSON response finishes without a cached result, a duplicate receives 409

    `IDEMPOTENCY_RESULT_UNAVAILABLE` instead of starting the work again. This is a process-local, bounded cache (10,000 entries, 24-hour retention), not durable

    exactly-once execution. Completed entries may be evicted for space. Pending or unavailable

    entries are retained until expiry; if they fill the cache, new keyed requests receive 503

    `IDEMPOTENCY_CAPACITY` before their handler runs. Restarting the process clears the cache. Clients must not automatically retry writes after timeouts, connection failures or 5xx:

    the first request may have done its work. Check the result before a deliberate retry.'
  version: 4.2.0
  x-aimeat-protocol: 2026-11
  contact:
    name: Jouni Miikki
    email: jouni.miikki@overscalesolutions.com
    url: https://overscalesolutions.com
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://aimeat-finland-001-genesis.overscalesolutions.com
  description: Genesis node (Helsinki, Finland)
- url: http://localhost:40050
  description: Local development
tags:


# --- truncated at 32 KB (160 KB total) ---
# Full source: https://artifacts.apis.io/aimeat-io/openapi/aimeat-io-commerce-api-openapi.yml