{
  "openapi": "3.1.0",
  "info": {
    "title": "Luxecar Estética Automotiva (luxecarestetica) API",
    "summary": "Machine-readable surface for luxecarestetica.com.br",
    "description": "Luxecar is a local automotive detailing studio in Ribeirão Preto, Brazil. There is no public booking, pricing, or CRM API. The only write endpoint is the website lead form. Humans schedule by WhatsApp or the contact page. Agents should read /llms.txt and request Accept: text/markdown on public pages.",
    "version": "1.0.0",
    "contact": {
      "name": "Luxecar Estética Automotiva",
      "email": "contato@luxecar.com.br",
      "url": "https://www.luxecarestetica.com.br/developers"
    }
  },
  "servers": [
    {
      "url": "https://www.luxecarestetica.com.br",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Leads",
      "description": "Website quote form. Requires Cloudflare Turnstile."
    },
    {
      "name": "Pages",
      "description": "Public HTML/markdown pages."
    },
    {
      "name": "Discovery",
      "description": "OpenAPI, llms.txt, and sitemap."
    }
  ],
  "paths": {
    "/api/lead": {
      "post": {
        "operationId": "createLead",
        "tags": [
          "Leads"
        ],
        "summary": "Submit a quote / booking lead from the website form",
        "description": "Accepts the public lead form. Requires a Cloudflare Turnstile token. Does not return prices or confirm appointments. Not a general-purpose CRM API.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LeadRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Lead accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Invalid payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Turnstile verification failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Server misconfiguration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Upstream webhook failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/": {
      "get": {
        "operationId": "getPageHome",
        "summary": "Luxecar | Estética Automotiva Premium em Ribeirão Preto",
        "description": "Luxecar é estética automotiva premium em Ribeirão Preto: detalhamento, vitrificação e coatings cerâmicos, e higienização de couro para proteger e valorizar seu veículo. Send Accept: text/markdown for the markdown representation.",
        "tags": [
          "Pages"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "text/html",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Page content as HTML (default) or markdown when Accept prefers text/markdown.",
            "headers": {
              "Vary": {
                "schema": {
                  "type": "string",
                  "example": "Accept, Accept-Encoding"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/about": {
      "get": {
        "operationId": "getPageAbout",
        "summary": "Sobre a Luxecar | Estética Automotiva em Ribeirão Preto",
        "description": "Conheça a Luxecar Estética Automotiva em Ribeirão Preto: detailing premium, coating cerâmico, PPF e proteção de pintura com avaliação presencial. Send Accept: text/markdown for the markdown representation.",
        "tags": [
          "Pages"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "text/html",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Page content as HTML (default) or markdown when Accept prefers text/markdown.",
            "headers": {
              "Vary": {
                "schema": {
                  "type": "string",
                  "example": "Accept, Accept-Encoding"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/contact": {
      "get": {
        "operationId": "getPageContact",
        "summary": "Contato Luxecar | Ribeirão Preto",
        "description": "Fale com a Luxecar em Ribeirão Preto: endereço na Rua Alice Além Saadi, WhatsApp, e-mail e horário de atendimento para agendar estética automotiva. Send Accept: text/markdown for the markdown representation.",
        "tags": [
          "Pages"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "text/html",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Page content as HTML (default) or markdown when Accept prefers text/markdown.",
            "headers": {
              "Vary": {
                "schema": {
                  "type": "string",
                  "example": "Accept, Accept-Encoding"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/privacy": {
      "get": {
        "operationId": "getPagePrivacy",
        "summary": "Privacidade | Luxecar Estética Automotiva",
        "description": "Como a Luxecar Estética Automotiva trata dados pessoais no site e no agendamento, de acordo com a LGPD: contato, finalidades, operadores e direitos do titular. Send Accept: text/markdown for the markdown representation.",
        "tags": [
          "Pages"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "text/html",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Page content as HTML (default) or markdown when Accept prefers text/markdown.",
            "headers": {
              "Vary": {
                "schema": {
                  "type": "string",
                  "example": "Accept, Accept-Encoding"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/developers": {
      "get": {
        "operationId": "getPageDevelopers",
        "summary": "Developer resources | Luxecar Estética Automotiva (luxecarestetica)",
        "description": "luxecarestetica developer resources: OpenAPI at /openapi.json, llms.txt, sitemap, markdown negotiation, and how agents should contact Luxecar. No MCP server or booking API. Send Accept: text/markdown for the markdown representation.",
        "tags": [
          "Pages"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "text/html",
                "text/markdown"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Page content as HTML (default) or markdown when Accept prefers text/markdown.",
            "headers": {
              "Vary": {
                "schema": {
                  "type": "string",
                  "example": "Accept, Accept-Encoding"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApi",
        "tags": [
          "Discovery"
        ],
        "summary": "OpenAPI 3.1 specification for luxecarestetica",
        "responses": {
          "200": {
            "description": "OpenAPI document",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getLlmsTxt",
        "tags": [
          "Discovery"
        ],
        "summary": "Agent instructions, including when to use Luxecar",
        "responses": {
          "200": {
            "description": "Plain-text agent guide",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "LeadRequest": {
        "type": "object",
        "required": [
          "nome",
          "whatsapp",
          "email",
          "marca",
          "modelo",
          "ano",
          "cor",
          "servico",
          "turnstileToken"
        ],
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1
          },
          "whatsapp": {
            "type": "string",
            "minLength": 1,
            "description": "E.164 or international WhatsApp number"
          },
          "email": {
            "type": "string",
            "minLength": 1
          },
          "marca": {
            "type": "string",
            "minLength": 1
          },
          "modelo": {
            "type": "string",
            "minLength": 1
          },
          "ano": {
            "type": "string",
            "minLength": 1
          },
          "cor": {
            "type": "string",
            "minLength": 1
          },
          "servico": {
            "type": "string",
            "minLength": 1,
            "description": "Requested detailing service label"
          },
          "turnstileToken": {
            "type": "string",
            "minLength": 1,
            "description": "Cloudflare Turnstile token from the website form"
          },
          "ga_id": {
            "type": "string"
          },
          "page": {
            "type": "string",
            "description": "Page path where the form was submitted"
          },
          "submittedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "LeadSuccess": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "const": true
          },
          "redirectUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          }
        }
      }
    }
  }
}
