{
  "openapi": "3.1.0",
  "info": {
    "title": "MultiVoice — MCP & agent discovery",
    "version": "2.4.128.0",
    "summary": "Remote MCP for AI audiobooks, subtitles, transcription and dubbing. Prepaid EUR wallet; human confirms every spend.",
    "description": "Agents connect to the Model Context Protocol endpoint with OAuth 2.1 + PKCE.\n\nUnauthenticated POST to /mcp returns HTTP 401 with WWW-Authenticate Bearer resource_metadata (RFC 9728) — expected, not an outage.\n\nHuman docs: https://multivoice.ai/for-agents\n\nTool JSON Schemas: https://multivoice.ai/mcp-schemas/index.json\n\nFull Subtitle Server REST OpenAPI 3.0.4: https://db.multivoice.ai/swagger/v1/swagger.json",
    "contact": {
      "name": "MultiVoice",
      "email": "info@multivoice.ai",
      "url": "https://multivoice.ai"
    },
    "license": {
      "name": "Proprietary",
      "identifier": "LicenseRef-Proprietary"
    }
  },
  "externalDocs": {
    "description": "Agent setup (Cursor, Claude, Codex)",
    "url": "https://multivoice.ai/for-agents"
  },
  "servers": [
    {
      "url": "https://multivoice.ai",
      "description": "Marketing host — discovery documents (no MCP transport)"
    },
    {
      "url": "https://db.multivoice.ai",
      "description": "API / MCP host — OAuth required for /mcp"
    }
  ],
  "tags": [
    {
      "name": "Discovery",
      "description": "Public machine-readable discovery on multivoice.ai"
    },
    {
      "name": "OAuth",
      "description": "Authorization server and protected-resource metadata"
    },
    {
      "name": "MCP",
      "description": "Model Context Protocol Streamable HTTP"
    }
  ],
  "paths": {
    "/openapi.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getOpenApi",
        "summary": "This OpenAPI 3.1 document",
        "responses": {
          "200": {
            "description": "OpenAPI 3.1 JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getLlmsTxt",
        "summary": "llms.txt — agent-oriented site facts",
        "responses": {
          "200": {
            "description": "Plain text",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/mcp-server": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getMcpWellKnown",
        "summary": "MCP discovery manifest",
        "responses": {
          "200": {
            "description": "MCP well-known JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/mcp/server-card.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getMcpServerCard",
        "summary": "MCP server card",
        "responses": {
          "200": {
            "description": "Server card JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/mcp/server.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getMcpRegistryCard",
        "summary": "Official MCP registry server card",
        "responses": {
          "200": {
            "description": "Registry card JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/mcp-schemas/index.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getMcpSchemaIndex",
        "summary": "Index of MCP tool output JSON Schemas",
        "responses": {
          "200": {
            "description": "Schema index",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/oauth-authorization-server": {
      "servers": [
        {
          "url": "https://db.multivoice.ai"
        }
      ],
      "get": {
        "tags": [
          "OAuth"
        ],
        "operationId": "getOauthAuthorizationServer",
        "summary": "OAuth 2.1 Authorization Server Metadata",
        "responses": {
          "200": {
            "description": "AS metadata JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/oauth-protected-resource/mcp": {
      "servers": [
        {
          "url": "https://db.multivoice.ai"
        }
      ],
      "get": {
        "tags": [
          "OAuth"
        ],
        "operationId": "getOauthProtectedResourceMcp",
        "summary": "OAuth Protected Resource Metadata for MCP (RFC 9728)",
        "responses": {
          "200": {
            "description": "PRM JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "servers": [
        {
          "url": "https://db.multivoice.ai"
        }
      ],
      "get": {
        "tags": [
          "MCP"
        ],
        "operationId": "mcpGetNotAllowed",
        "summary": "MCP transport is POST-only",
        "description": "GET returns 405 with Allow: POST. Expected.",
        "responses": {
          "405": {
            "description": "Method Not Allowed — use POST",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "example": "POST"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "MCP"
        ],
        "operationId": "mcpPost",
        "summary": "MCP Streamable HTTP (JSON-RPC)",
        "description": "Canonical URL: https://db.multivoice.ai/mcp\n\nRequires OAuth 2.1 access token (Bearer).\n\nWithout Authorization: HTTP 401 and WWW-Authenticate with resource_metadata pointing at PRM.\n\nAfter OAuth: initialize, tools/list, then Multivoice order tools (prepare_create → human confirm → execute_create).",
        "security": [
          {
            "oauth2": [
              "mcp:connect"
            ]
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "jsonrpc",
                  "method"
                ],
                "properties": {
                  "jsonrpc": {
                    "type": "string",
                    "const": "2.0"
                  },
                  "id": {
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "method": {
                    "type": "string",
                    "examples": [
                      "initialize",
                      "tools/list",
                      "tools/call"
                    ]
                  },
                  "params": {
                    "type": "object",
                    "additionalProperties": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC result or SSE-framed MCP response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token. WWW-Authenticate includes resource_metadata URL for OAuth PRM.",
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string",
                  "examples": [
                    "Bearer resource_metadata=\"https://db.multivoice.ai/.well-known/oauth-protected-resource/mcp\", scope=\"mcp:connect\""
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Wrong HTTP method (GET). Use POST."
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "oauth2": {
        "type": "oauth2",
        "description": "OAuth 2.1 Authorization Code + PKCE S256. Human completes browser login.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://db.multivoice.ai/oauth/authorize",
            "tokenUrl": "https://db.multivoice.ai/oauth/token",
            "refreshUrl": "https://db.multivoice.ai/oauth/token",
            "scopes": {
              "mcp:connect": "Connect to MCP",
              "account:read": "Read account",
              "orders:read": "Read orders",
              "orders:prepare": "Prepare order quotes",
              "orders:execute": "Execute confirmed quotes",
              "orders:create": "Create orders (includes uploads:write)",
              "billing:read": "Read billing",
              "billing:topup": "Prepare wallet top-up",
              "artifacts:download": "Prepare artifact download links"
            }
          }
        }
      }
    }
  }
}
