Skip to main content

Developers

MIAMI WEB AI for agents. Read it, then send a person.

Read our services, prices and guidance through the REST API or the MCP server. Both are read-only. Neither needs a key.

Read the OpenAPI fileConnect over MCP

Files an agent can find. Same data everywhere.

Every file below reads from one set of prices and terms. When one changes, they all change.

One dataset

meta.dataVersion2026-10-14

The date our prices or terms last changed. Every JSON answer carries it.

OpenAPI file

Typed v2 operations, answer schemas and the error format.

/openapi.json

Site tools

Tools in the visitor’s tab, their schemas and rollout state.

/site-tools.json

Agent instructions

Use cases, limits and links in one file.

/llms.txt

The REST API. Version 2.

No key. No sign-up. The OpenAPI file gives each call an ID, a typed answer and a JSON error.

GET /api/v2/studio/pricing200
{
  "meta": { "apiVersion": "v2", "dataVersion": "2026-10-14" },
  "currency": "USD",
  "membership": {
    "levels": [
      {
        "id": "embedded",
        "weeklyPriceUsd": 1875,
        "cyclePriceUsd": 7500
      },
      { "id": "growth", "weeklyPriceUsd": 750, "cyclePriceUsd": 3000 },
      { "id": "partner", "weeklyPriceUsd": 375, "cyclePriceUsd": 1500 }
    ],
    …
  },
  …
}

Part of the answerOpen the full answer

One date for the data

Every JSON answer carries two fields: meta.apiVersion and meta.dataVersion. The data version is the day our prices or terms last changed. It now reads 2026-10-14.

Version 1 is gone

Version 1 and the plain /api/studio paths sold an offer we no longer sell. They answer 410 Gone with a Link header that names the v2 path.

Rate limits

Each caller IP gets 60 reads per 60 seconds. The RateLimit and RateLimit-Policy headers say how many are left. A 429 says when to try again in Retry-After.

Browsers and caching

Any origin can read the API from a browser. Send the ETag back in If-None-Match. A match with no Origin header gets a 304. A match with one gets a full 200.

The MCP server. Three calls to an answer.

Streamable HTTP at https://miamiweb.ai/mcp. One JSON-RPC message per POST. No sessions.

  1. server/discoverRevisions, tools and resources
  2. tools/listget_studio_information
  3. tools/callPrices, the AI Plan and the guarantee
Tools
get_studio_information. Read-only. Its sections are overview, services, pricing and agent-guide.
Resources
Agent instructions, pricing, the studio overview, this page and the OpenAPI file.
Revisions
2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26
Modern lifecycle
Use 2026-07-28. Start with server/discover and no initialize. Each request carries its revision in params._meta and matching MCP-Protocol-Version and Mcp-Method headers. Mcp-Name is required for tool calls and resource reads.
Legacy lifecycle
2025-11-25 clients still send initialize at the same URL. The 2025-06-18 and 2025-03-26 revisions stay available.

Check it with the MCP Inspector

npx @modelcontextprotocol/inspector --cli https://miamiweb.ai/mcp --transport http --method tools/list

Site tools. Only in the visitor’s tab.

Browsers with WebMCP find these through document.modelContext while our site owns the tab. Other browsers get the full site.

The tools

  • get_studio_information
  • navigate_site
  • prepare_application
  • submit_application

How sending works

  1. A draft, in the tabPrepare writes a draft in the tab only. Nothing leaves it.
  2. The visitor approvesThe visitor sees the draft and approves it. Only that draft can be sent.
  3. A 15-minute tokenThe approval signs a token. It lasts 15 minutes.
  4. A server switchThe last gate is a switch on our server. It starts off.

When a person is ready, send them to the Application.

The API and MCP never send an Application. A person reviews it and sends it at /apply. It works without JavaScript.

Get your free AI PlanThe command-line client

Our CLI, @miami-web-ai/cli, reads the same v2 API from a terminal. It is not on npm yet.