🧜‍♀️ Mermaids API Docs

Public-safe API docs for the performance portfolio and booking inquiry. Administrative actions always require PLATPHORM_API_KEY.

Booking delivery is only attempted for an explicitly allowlisted HTTPS webhook. Read-only MCP does not expose mutation or report tools.

Core endpoints

OpenAPI preview

{
  "openapi": "3.1.0",
  "info": {
    "title": "Las Vegas Mermaids API",
    "version": "0.3.0",
    "description": "Public-safe performance, portfolio, booking-inquiry, discovery, and read-only MCP surfaces. Submission delivery is reported honestly as delivered or degraded."
  },
  "servers": [
    {
      "url": "https://mermaids.platphormnews.com"
    }
  ],
  "components": {
    "securitySchemes": {
      "PlatPhormApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-PlatPhorm-API-Key",
        "description": "Shared platform key for protected administrative actions."
      },
      "PlatPhormBearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "PLATPHORM_API_KEY",
        "description": "Authorization: Bearer $PLATPHORM_API_KEY"
      }
    },
    "schemas": {
      "ApiSuccess": {
        "type": "object",
        "required": [
          "ok",
          "data"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "const": true
          },
          "data": {}
        }
      },
      "ApiError": {
        "type": "object",
        "required": [
          "ok",
          "error"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "const": false
          },
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "details": {}
            }
          }
        }
      },
      "JsonRpcRequest": {
        "type": "object",
        "required": [
          "jsonrpc",
          "method"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0"
          },
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "method": {
            "type": "string"
          },
          "params": {}
        }
      }
    }
  },
  "paths": {
    "/api/health": {
      "get": {
        "summary": "Get product and platform health",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health": {
      "get": {
        "summary": "Get versioned health",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/performances": {
      "get": {
        "summary": "List performance concepts",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/performances/{slug}": {
      "get": {
        "summary": "Get a performance concept",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/showcase": {
      "get": {
        "summary": "List bundled portfolio images",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/testimonials": {
      "get": {
        "summary": "List source-attributed reviews or an honest empty state",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/events": {
      "get": {
        "summary": "Get configured external event reference",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/social-links": {
      "get": {
        "summary": "Get configured social references",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/shop": {
      "get": {
        "summary": "Get configured external shop reference",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/booking/request": {
      "post": {
        "summary": "Submit a bounded booking inquiry",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true,
                "maxProperties": 16
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/contact": {
      "post": {
        "summary": "Submit a bounded contact message",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true,
                "maxProperties": 16
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/newsletter/subscribe": {
      "post": {
        "summary": "Submit a bounded newsletter request",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true,
                "maxProperties": 16
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/integrations/status": {
      "get": {
        "summary": "Get configured and unverified integration states",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/integrations/events": {
      "get": {
        "summary": "Get event integration metadata",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/integrations/shop": {
      "get": {
        "summary": "Get shop integration metadata",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/api/mcp": {
      "get": {
        "summary": "Get MCP usage metadata",
        "responses": {
          "200": {
            "description": "Successful REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiSuccess"
                }
              }
            }
          },
          "default": {
            "description": "Error REST envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Call the read-only MCP JSON-RPC endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/JsonRpcRequest"
                  },
                  {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                      "$ref": "#/components/schemas/JsonRpcRequest"
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC 2.0 response or batch."
          }
        }
      }
    },
    "/api/cron/refresh": {
      "post": {
        "summary": "Reserved protected refresh route; currently unsupported",
        "security": [
          {
            "PlatPhormBearer": []
          },
          {
            "PlatPhormApiKey": []
          }
        ],
        "responses": {
          "401": {
            "description": "Key required."
          },
          "501": {
            "description": "No refresh job is implemented."
          }
        }
      }
    }
  },
  "x-mermaids": {
    "productPurpose": "Mermaid performance portfolio and booking inquiry",
    "publicRoutes": [
      "/",
      "/about",
      "/performances",
      "/showcase",
      "/events",
      "/shop",
      "/contact",
      "/booking",
      "/faq",
      "/privacy",
      "/terms",
      "/disclaimer",
      "/api/health",
      "/api/v1/health",
      "/api/docs",
      "/openapi.yaml",
      "/openapi.json",
      "/llms.txt",
      "/llms-full.txt",
      "/llms-index.json",
      "/rss.xml",
      "/feed.xml",
      "/sitemap.xml",
      "/sitemap-index.xml",
      "/sitemap-main.xml",
      "/robots.txt",
      "/.well-known/mcp.json",
      "/.well-known/agents.json",
      "/.well-known/security.txt",
      "/.well-known/trust.json",
      "/manifest.webmanifest",
      "/api/mcp",
      "/api/v1/performances",
      "/api/v1/showcase",
      "/api/v1/testimonials",
      "/api/v1/events",
      "/api/v1/social-links",
      "/api/v1/shop",
      "/api/v1/integrations/status",
      "/api/v1/integrations/events",
      "/api/v1/integrations/shop"
    ],
    "publicSubmissionBoundary": "Booking, contact, and newsletter submissions are rate-limited public product actions.",
    "protectedBoundary": "Administrative actions require PLATPHORM_API_KEY.",
    "unsupported": [
      "MCP mutations",
      "payment processing",
      "availability guarantees",
      "automated platform reports"
    ]
  }
}