AIMEAT Apps API

Hosted single-file HTML apps — publish, fork, version, and per-owner app management

Operations 102

GET /v1/datamap/apps/{owner}/{filename} Where a published app puts what #
PUT /v1/datamap/apps/{owner}/{filename} State where an app puts what #
PUT /v1/datamap/apps/{owner}/{filename}/agents/{agent} State that an app shows the work of one of the owner's agents #
DELETE /v1/datamap/apps/{owner}/{filename}/agents/{agent} Take the tie between an app and an agent away #
GET /v1/apps/cost Per-app EXCHANGE cost & contracts surface (EXCHANGE G3 / TARGET-045) #
GET /v1/apps/visitors Who opened one of my apps, when, and from where #
PUT /v1/apps/visitors/measurement Switch visitor measurement on or off for one of my apps #
GET /v1/apps List published apps (catalogue) #
POST /v1/apps Publish or update an app #
GET /v1/admin/apps List every app for operator moderation #
GET /v1/admin/apps/similar Scan the catalogue for unattributed copies (operator) #
POST /v1/admin/apps/watermark/decode Decode an app watermark to trace a leaked copy (operator) #
POST /v1/admin/apps/{owner}/{filename}/moderate Hide or restore an app (operator moderation) #
POST /v1/admin/apps/{owner}/{filename}/seo-block Block or unblock one app's search visibility (operator) #
POST /v1/admin/apps/{owner}/{filename}/seo-approve Approve an app's request to be findable (operator, review mode only) #
DELETE /v1/admin/apps/{owner}/{filename} Permanently delete an app (operator hard delete) #
PATCH /v1/apps/{filename} Update an app you own (name, description, access code, parked/forkable state… #
DELETE /v1/apps/{filename} Delete an app you own #
GET /v1/apps/{owner}/{filename}/internet-opening Whether an app is open to the internet on a closed node #
POST /v1/apps/{owner}/{filename}/internet-opening Open the caller's own app to the internet, ask an operator, or extend it #
DELETE /v1/apps/{owner}/{filename}/internet-opening Close an app to the internet, or withdraw the waiting request #
POST /v1/apps/{owner}/{filename}/open The address that opens an app needing a sign-in #
GET /v1/apps/{owner}/{filename} Download or render a published app #
GET /v1/apps/ui/catalogue The Atelier mosaic vocabulary #
POST /v1/apps/ui/validate Dry-run a mosaic layout #
GET /v1/apps/{owner}/{filename}/config The config an app declares, with its owner's values #
PUT /v1/apps/{owner}/{filename}/config Change an app's config values #
GET /v1/apps/{owner}/{filename}/ui One app's stored mosaic layout + the catalogue #
PUT /v1/apps/{owner}/{filename}/ui Replace one app's mosaic layout (validated, versioned) #
GET /v1/apps/{owner}/{filename}/ui/versions The layout's history #
POST /v1/apps/{owner}/{filename}/ui/restore Bring one archived layout version back #
GET /v1/designbook Browse the Design Book #
POST /v1/designbook Propose a part (the bench runs first) #
GET /v1/designbook/kits/in-force The style kit a new app starts from #
GET /v1/designbook/kits/defaults Every default style kit the caller sees or chooses #
PUT /v1/designbook/kits/default Choose the default style kit #
POST /v1/designbook/keep The owner is satisfied with one of their apps #
DELETE /v1/designbook/{id} Delete a part outright #
GET /v1/designbook/{id} One part, whole #
GET /v1/designbook/{id}/preview One part rendered as a page #
POST /v1/designbook/{id}/adopt Adopt a part into one of your apps #
POST /v1/designbook/{id}/bench Run the automated guarantee bench on a part #
POST /v1/designbook/{id}/status Move a part through its lifecycle #
GET /v1/apps/{owner}/{filename}/members The app's member roster and the people waiting on a decision #
POST /v1/apps/{owner}/{filename}/members Approve someone, or change the role they hold #
GET /v1/apps/{owner}/{filename}/members/plan What membership of this app means - carried offerings, seats, terms, who reads… #
PUT /v1/apps/{owner}/{filename}/members/plan Declare what membership of this app means #
POST /v1/apps/{owner}/{filename}/members/sweep Close every lapsed membership now, and take back what it was carrying #
GET /v1/apps/{owner}/{filename}/members/me The caller's own standing with this app #
DELETE /v1/apps/{owner}/{filename}/members/{account} Remove a member #
POST /v1/apps/{owner}/{filename}/members/requests Ask the owner for access #
DELETE /v1/apps/{owner}/{filename}/members/requests/{account} Decline an ask #
GET /v1/apps/{owner}/{filename}/members/audit The roster's audit trail - who decided what about whom #
DELETE /v1/apps/{owner}/{filename}/members/invites/{id} Cancel an open invitation to the app's roster #
GET /v1/apps/{owner}/{filename}/news Which version of an app runs, what changed lately, and the draft under way #
GET /v1/apps/{owner}/{filename}/roadmap What has been done to this app, and what people wish would be #
POST /v1/apps/{owner}/{filename}/roadmap Leave a wish, or record what a change did #
PATCH /v1/apps/{owner}/{filename}/roadmap Open the wishes to everybody, or close them again #
DELETE /v1/apps/{owner}/{filename}/roadmap/{entryId} Take one line off the roadmap #
GET /v1/apps/{owner}/{filename}/design-spec The app's design spec, and whether the app has moved past it #
PUT /v1/apps/{owner}/{filename}/design-spec Write the whole design spec #
DELETE /v1/apps/{owner}/{filename}/design-spec Remove the design spec #
GET /v1/apps/{owner}/{filename}/structure The app's structure and status, from the first moment of building #
PUT /v1/apps/{owner}/{filename}/structure Write the app's plan #
GET /v1/app-plans The apps the caller has started, published or not #
GET /v1/apps/{owner}/{filename}/scope-allowance The permissions the app kept when this node moved to 4.0 #
DELETE /v1/apps/{owner}/{filename}/scope-allowance Remove permissions the app kept #
GET /v1/apps/{owner}/{filename}/dev-grants Who, other than the owner, may build this app #
PUT /v1/apps/{owner}/{filename}/dev-grants/{account} Invite somebody to build this app, at one of three rungs #
DELETE /v1/apps/{owner}/{filename}/dev-grants/{account} Take the development right back #
GET /v1/app-dev-grants Everybody you have let build ANY app of yours #
PUT /v1/app-dev-grants/{account} Let somebody build any app of yours, including ones not published yet #
DELETE /v1/app-dev-grants/{account} Take the blanket right back #
GET /v1/apps/{owner}/{filename}/draft Read the app's unpublished draft (staging) content #
PUT /v1/apps/{owner}/{filename}/draft Save the app's unpublished draft (staging) #
DELETE /v1/apps/{owner}/{filename}/draft Discard the app's unpublished draft #
POST /v1/apps/{owner}/{filename}/screenshot/capture Render the published app now and store the screenshot #
POST /v1/apps/{owner}/{filename}/draft/write Append to, or replace, the app's draft #
POST /v1/apps/{owner}/{filename}/draft/replace Replace an exact passage inside the app's draft #
GET /v1/apps/{owner}/{filename}/draft/lines Read a line range of the app's draft #
POST /v1/apps/{owner}/{filename}/draft/seed Copy a published version into the app's draft slot #
POST /v1/apps/{owner}/{filename}/draft/preview-token Mint a preview URL for the app's draft #
POST /v1/apps/{owner}/{filename}/frame-token Mint a frame grant letting ONE origin embed this app #
POST /v1/apps/{owner}/{filename}/publish-draft Publish the draft as a new live version #
POST /v1/apps/{owner}/{filename}/fork Fork an app into your own catalogue #
GET /v1/apps/{owner}/{filename}/forks List the direct forks of an app #
GET /v1/apps/{owner}/{filename}/lineage Get the full cross-owner fork lineage of an app #
POST /v1/apps/{owner}/{filename}/agents/{agentName}/deploy Deploy an app's bundled agent onto YOUR OWN fleet #
POST /v1/apps/{owner}/{filename}/agents/{agentName}/undeploy Undeploy an app's bundled agent from YOUR OWN fleet #
GET /v1/apps/{owner}/{filename}/agents/{agentName}/instances Hosted instances of an app's bundled agent (with public offer prices) #
GET /v1/apps/{owner}/{filename}/agents/{agentName}/status Liveness of an app's bundled agent on YOUR OWN fleet #
GET /v1/apps/{owner}/{filename}/legal The app's own legal pages, as their state, and what it still ought to have #
GET /v1/apps/{owner}/{filename}/legal/{kind} One of the app's own legal pages, as a page #
GET /v1/apps/{owner}/{filename}/audit The owner's audit log of how this app is offered #
POST /v1/apps/{owner}/{filename}/audit/archive Move the app's log entries before a date into the archive #
POST /v1/apps/me/{filename}/audit/archive Archive the signed-in account's own app log before a date #
GET /v1/audit/apps/settings How much of each app's audit log the owner keeps #
PUT /v1/audit/apps/settings Set how much of each app's audit log the owner keeps #
GET /v1/apps/{owner}/{filename}/versions List all published versions of an app #
GET /v1/apps/me/{filename}/legal The signed-in account's own app legal state #
GET /v1/apps/me/{filename}/audit The signed-in account's own app audit log #
DELETE /v1/apps/{owner}/{filename}/members/seen/{account} Dismiss a visitor from the app's guest list #

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-apps-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-apps-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: AIMEAT Protocol Apps 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 (313 KB total) ---
# Full source: https://artifacts.apis.io/aimeat-io/openapi/aimeat-io-apps-api-openapi.yml