{
  "openapi": "3.1.1",
  "info": {
    "title": "Film My Business Public Information API",
    "version": "1.0.0",
    "description": "Read published services, packages, and contact links. No booking, payments, client records, or Sell For Me account access.",
    "contact": {
      "name": "Film My Business Services",
      "email": "hello@filmmybusiness.com",
      "url": "https://filmmybusiness.com/contact"
    }
  },
  "servers": [
    {
      "url": "https://filmmybusiness.com"
    }
  ],
  "externalDocs": {
    "description": "Agent usage, representations, and errors",
    "url": "https://filmmybusiness.com/docs"
  },
  "security": [],
  "paths": {
    "/api/business": {
      "get": {
        "operationId": "getFilmMyBusinessInformation",
        "summary": "Read FMB services and packages",
        "description": "Retrieve public business details, package scope and booking links. No parameters or body are accepted. No authentication is required. Cache for five minutes; do not poll frequently. Does not create a booking or promise availability, prices, or sales outcomes.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Published business information",
            "headers": {
              "Cache-Control": {
                "description": "Public responses may be cached for five minutes.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Business"
                }
              }
            }
          },
          "400": {
            "description": "Unsupported query parameters or request body",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are supported",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                },
                "description": "GET, HEAD"
              }
            }
          },
          "406": {
            "description": "No acceptable JSON representation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "414": {
            "description": "Request URI is too long",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Shared capacity of 600 API requests per minute exceeded",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds until the next request may be attempted.",
                "schema": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 60
                }
              }
            }
          },
          "431": {
            "description": "Accept header is too long",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "Public catalogue temporarily unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Business": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "url",
          "description",
          "email",
          "phone",
          "location",
          "audience",
          "bookingUrl",
          "services",
          "packages",
          "limitations"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "phone": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "audience": {
            "type": "string"
          },
          "bookingUrl": {
            "type": "string",
            "format": "uri"
          },
          "services": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "name",
                "description"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "packages": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "scope",
                "description",
                "features",
                "bookingUrl"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "starter",
                    "growth",
                    "dominate"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "scope": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "features": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "bookingUrl": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Problem": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "code",
          "resolution"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer",
            "minimum": 400,
            "maximum": 599
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "resolution": {
            "type": "string"
          }
        }
      }
    }
  }
}
