{
  "openapi": "3.0.3",
  "info": {
    "title": "LeadVox Estoque — API pública",
    "version": "1.0.0",
    "description": "Endpoints públicos (sem autenticação) para consumir o estoque publicado de uma loja e as mídias dos veículos. Use no seu site (GitHub Pages, n8n, etc.)."
  },
  "servers": [
    { "url": "https://upload.leadvox.com.br", "description": "Produção" }
  ],
  "paths": {
    "/api/public/estoque/{slug}": {
      "get": {
        "summary": "Lista os veículos publicados de uma loja",
        "description": "Retorna apenas veículos com status publicado. Campos internos (chassi, renavam, preços/informações de classificados e identificadores do proprietário) nunca são expostos.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Slug da loja (disponível na página Integração do painel).",
            "schema": { "type": "string" },
            "example": "a1b2c3d4e5f6"
          }
        ],
        "responses": {
          "200": {
            "description": "Estoque publicado da loja",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EstoqueResponse" },
                "example": {
                  "loja": { "nome": "Auto Center Modelo", "slug": "a1b2c3d4e5f6" },
                  "gerado_em": "2026-09-01T22:10:00.000Z",
                  "total": 1,
                  "veiculos": [
                    {
                      "id": "0f2b9a7c-1111-2222-3333-444455556666",
                      "condicao": "usado",
                      "tipo": "carro",
                      "combustivel": "flex",
                      "marca": "Toyota",
                      "modelo": "Corolla",
                      "versao": "XEI 2.0",
                      "cor": "Prata",
                      "cambio": "automatico",
                      "ano_fabricacao": 2021,
                      "ano_modelo": 2022,
                      "km": 48000,
                      "portas": 4,
                      "carroceria": "sedan",
                      "preco_site": 129900,
                      "video_url": "https://youtu.be/exemplo",
                      "observacao_site": "Único dono, revisões em dia.",
                      "caracteristicas": ["Airbag", "ABS"],
                      "opcionais": ["Ar condicionado", "Multimídia"],
                      "created_at": "2026-08-31T12:00:00.000Z",
                      "updated_at": "2026-09-01T09:30:00.000Z",
                      "fotos": ["https://upload.leadvox.com.br/api/public/media/9a8b7c6d-0000-1111-2222-333344445555"],
                      "videos": []
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Loja não encontrada",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Erro" },
                "example": { "error": "Loja não encontrada" }
              }
            }
          },
          "500": {
            "description": "Erro ao consultar o estoque",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/Erro" } }
            }
          }
        }
      },
      "options": {
        "summary": "Preflight CORS",
        "responses": { "204": { "description": "Sem conteúdo" } }
      }
    },
    "/api/public/media/{id}": {
      "get": {
        "summary": "Redireciona para o arquivo de mídia (foto ou vídeo)",
        "description": "Retorna um redirecionamento 302 para uma URL assinada temporária do arquivo. Use o link diretamente em tags <img> ou <video>. Só funciona para mídias de veículos publicados.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identificador da mídia, obtido nos arrays fotos/videos do endpoint de estoque.",
            "schema": { "type": "string", "format": "uuid" }
          }
        ],
        "responses": {
          "302": { "description": "Redireciona para a URL assinada do arquivo" },
          "404": { "description": "Mídia inexistente ou veículo não publicado" }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Erro": {
        "type": "object",
        "properties": { "error": { "type": "string" } }
      },
      "Loja": {
        "type": "object",
        "properties": {
          "nome": { "type": "string" },
          "slug": { "type": "string" }
        }
      },
      "Veiculo": {
        "type": "object",
        "properties": {
          "id": { "type": "string", "format": "uuid" },
          "condicao": { "type": "string", "example": "usado" },
          "tipo": { "type": "string", "example": "carro" },
          "combustivel": { "type": "string", "nullable": true },
          "marca": { "type": "string" },
          "modelo": { "type": "string" },
          "versao": { "type": "string", "nullable": true },
          "cor": { "type": "string", "nullable": true },
          "cambio": { "type": "string", "nullable": true },
          "ano_fabricacao": { "type": "integer", "nullable": true },
          "ano_modelo": { "type": "integer", "nullable": true },
          "km": { "type": "integer", "nullable": true },
          "portas": { "type": "integer", "nullable": true },
          "carroceria": { "type": "string", "nullable": true },
          "preco_site": { "type": "number", "nullable": true },
          "video_url": { "type": "string", "nullable": true },
          "observacao_site": { "type": "string", "nullable": true },
          "caracteristicas": { "type": "array", "items": { "type": "string" } },
          "opcionais": { "type": "array", "items": { "type": "string" } },
          "created_at": { "type": "string", "format": "date-time" },
          "updated_at": { "type": "string", "format": "date-time" },
          "fotos": { "type": "array", "items": { "type": "string", "format": "uri" } },
          "videos": { "type": "array", "items": { "type": "string", "format": "uri" } }
        }
      },
      "EstoqueResponse": {
        "type": "object",
        "properties": {
          "loja": { "$ref": "#/components/schemas/Loja" },
          "gerado_em": { "type": "string", "format": "date-time" },
          "total": { "type": "integer" },
          "veiculos": { "type": "array", "items": { "$ref": "#/components/schemas/Veiculo" } }
        }
      }
    }
  }
}
