openapi: 3.2.0 info: title: Produto API version: v1 description: API para gerenciamento de produtos servers: - url: https://api-v2.contaazul.com description: Servidor de produção security: - bearerAuth: [] tags: - name: Produto paths: /v1/produto/busca: get: summary: Obter produtos por filtro operationId: getProductsByFilter parameters: - name: pagina in: query required: false schema: type: integer default: 1 example: 1 - name: tamanho_pagina in: query required: false schema: type: integer default: 10 example: 10 - name: campo_ordenacao in: query required: false schema: type: string default: NOME enum: - NOME - CODIGO - VALOR_VENDA - ESTOQUE example: NOME - name: direcao_ordenacao in: query required: false description: Direção da ordenação (ASC para ascendente, DESC para descendente). schema: type: string default: ASC enum: - ASC - DESC - name: busca in: query required: false description: Buscar produtos por nome ou código. example: Produto schema: type: string - name: status in: query required: false description: Status do produto. schema: type: string enum: - ATIVO - INATIVO - TODOS default: TODOS - name: inicio in: query required: false schema: type: number example: 10.5 - name: fim in: query required: false schema: type: number example: 100.5 responses: '200': description: Resposta bem-sucedida content: application/json: schema: $ref: '#/components/schemas/ListagemDeProdutosPorFiltroResponse' tags: - Produto /v1/produto: post: summary: Criar um novo produto operationId: createProduct tags: - Produto requestBody: description: Ao cadastrar um novo produto, deve-se observar o formato. Caso seja VARIACAO, o item "variação" é obrigatório. required: true content: application/json: schema: $ref: '#/components/schemas/CriacaoProdutoRequest' responses: '200': description: Produto criado com sucesso content: application/json: schema: $ref: '#/components/schemas/ProdutoResponse' /v1/produto/{id}: delete: summary: Excluir um produto existente operationId: deleteProduct parameters: - name: id in: path required: true example: 123e4567-e89b-12d3-a456-426614174000 schema: type: string format: uuid responses: '204': description: Produto excluído com sucesso '404': description: Produto não encontrado tags: - Produto /v1/produto/desativar: post: summary: Desativar produtos description: Desativa uma lista de produtos pelo ID. operationId: deactivateProducts requestBody: required: true content: application/json: schema: type: array items: description: Lista de IDs dos produtos a serem desativados. type: string format: uuid example: - 123e4567-e89b-12d3-a456-426614174000 - 34471cce-67a2-48b8-a526-1120c0704ed3 responses: '200': description: Produtos desativados com sucesso. content: application/json: schema: $ref: '#/components/schemas/ProdutoDesativadoResponse' '400': description: Requisição inválida. '500': description: Erro interno do servidor. tags: - Produto components: schemas: ProductListResponse: type: object properties: id: type: string format: uuid example: 34471cce-67a2-48b8-a526-1120c0704ed3 id_legado: type: integer description: ID Legado do produto. example: 12345 nome: type: string description: Nome do Produto. example: Produto Exemplo codigo_sku: type: string description: Código SKU. example: SKU123456 codigo_ean: type: string description: Código EAN. example: '1234567890123' tipo: type: string description: Tipo do produto. example: VARIACAO enum: - PRODUTO - VARIACAO - KIT_PRODUTOS status: type: string description: Status do produto example: ATIVO enum: - ATIVO - INATIVO - TODOS estoque: type: number format: double description: Estoque. example: 50 valor_venda: type: number format: double description: Valor de venda. example: 99.99 custo_medio: type: number format: double description: Custo médio. example: 50 filhos: type: array description: Lista de produtos filhos. items: $ref: '#/components/schemas/ProductListChildResponse' example: - id: 123e4567-e89b-12d3-a456-426614174000 id_legado: 12345 nome: Produto Filho 1 codigo_sku: SKU123456 codigo_ean: '1234567890123' tipo: PRODUTO status: ATIVO estoque: 20 valor_venda: 49.99 custo_medio: 25 filhos: [] variacao: 0 nivel_estoque: MINIMO estoque_minimo: 5 estoque_maximo: 100 movimentado: true id_pai: 34471cce-67a2-48b8-a526-1120c0704ed3 integracao_ecommerce_ativa: true - id: 123e4567-e89b-12d3-a456-426614174001 id_legado: 12346 nome: Produto Filho 2 codigo_sku: SKU123457 codigo_ean: '1234567890124' tipo: VARIACAO status: INATIVO estoque: 10 valor_venda: 29.99 custo_medio: 15 filhos: [] variacao: 0 nivel_estoque: MAXIMO estoque_minimo: 2 estoque_maximo: 50 movimentado: false id_pai: 34471cce-67a2-48b8-a526-1120c0704ed3 integracao_ecommerce_ativa: false variacao: type: integer description: Quantidade de filhos/variações. example: 2 nivel_estoque: type: string description: Nível do estoque example: MINIMO enum: - MINIMO - MAXIMO - PADRAO estoque_minimo: type: number format: double description: Estoque mínimo. example: 10 estoque_maximo: type: number format: double description: Estoque máximo. example: 200 movimentado: type: boolean description: Indica se o produto foi movimentado example: true id_pai: type: string format: uuid description: ID do produto pai example: 34471cce-67a2-48b8-a526-1120c0704ed3 integracao_ecommerce_ativa: type: boolean description: Indica se a integração com o e-commerce está ativa. example: true ProdutoResponse: type: object properties: id: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 identificador_legado: type: string example: '123' ativo: type: boolean example: true versao: type: integer example: 1 nome: type: string example: Nome do Produto codigo_sku: type: string example: PROD123 codigo_ean: type: string example: '1234567890123' observacao: type: string example: Descrição do Produto status: type: string description: Status do produto example: ATIVO enum: - ATIVO - INATIVO formato: type: string example: VARIACAO description: Formato do produto. enum: - SIMPLES - VARIACAO estoque: $ref: '#/components/schemas/Estoque' dimensoes: $ref: '#/components/schemas/Dimensao' ecommerce: $ref: '#/components/schemas/Ecommerce' variacao: description: Caso o formato não seja do tipo VARIACAO, este campo será nulo. $ref: '#/components/schemas/VariacaoResponse' EcommerceRequestProduto: type: object properties: condicao: type: string example: NOVO enum: - NOVO - USADO integracao_habilitada: type: boolean example: false observacao_adicional: type: string example: Descrição adicional.... titulo_seo: type: string example: Produto 1.0 descricao: type: string example: Lorem ipsum url_seo: type: string example: produto-x-1-0 VariacaoRequest: type: object properties: tipos: description: O tipo deve conter pelo menos uma opção. Que será utilizada para criar as variações do produto. type: array items: $ref: '#/components/schemas/TipoVariacaoRequest' produtos: type: array description: O produto deve conter pelo menos uma opção. Cada item conterá os dados do produto e as opções de variação. items: $ref: '#/components/schemas/ItemVariacaoRequest' TipoVariacaoRequest: type: object required: - descricao - opcoes properties: descricao: type: string example: Tamanho opcoes: type: array items: $ref: '#/components/schemas/ProductVariationOptionRequest' CriacaoProdutoRequest: type: object required: - nome - formato - estoque - dimensao properties: nome: type: string example: Nome do Produto codigo_sku: type: string example: SKU12345 codigo_ean: type: string example: '1234567890123' observacao: type: string example: Descrição do produto formato: type: string example: VARIACAO enum: - SIMPLES - VARIACAO estoque: $ref: '#/components/schemas/EstoqueCriacaoProduto' dimensao: $ref: '#/components/schemas/Dimensao' variacao: $ref: '#/components/schemas/VariacaoRequest' ecommerce: $ref: '#/components/schemas/EcommerceRequestProduto' VariacaoResponse: type: object properties: tipos: type: array items: $ref: '#/components/schemas/TipoVariacao' produtos: type: array items: $ref: '#/components/schemas/ItemVariacao' Estoque: type: object properties: estoque_total: type: number format: double example: 100 valor_venda: type: number format: double example: 99.99 custo_medio: type: number format: double example: 50 estoque_disponivel: type: number format: double example: 80 estoque_minimo: type: number format: double example: 10 estoque_maximo: type: number format: double example: 200 ItemVariacaoRequest: type: object required: - nome - codigo - estoque - opcoes properties: nome: type: string example: Produto Variado - Tamanho G codigo: type: string example: PROD123 codigo_ean: type: string example: '1234567890123' versao: type: integer example: 1 valor_venda: type: number format: double example: 99.99 estoque: type: number format: double example: 50 opcoes: type: array items: $ref: '#/components/schemas/ProductVariationOptionRequest' TipoVariacao: type: object properties: id: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 descricao: type: string example: Tamanho opcoes: type: array items: $ref: '#/components/schemas/ProductVariationOptionResponse' ProdutoDesativadoResponse: type: object properties: todos: type: array example: - 34471cce-67a2-48b8-a526-1120c0704ed3 - 123e4567-e89b-12d3-a456-426614174000 items: type: string format: uuid description: Lista de todos os produtos. produtos_desativados: type: array items: type: string format: uuid description: Lista de produtos desativados. example: - 34471cce-67a2-48b8-a526-1120c0704ed3 - 123e4567-e89b-12d3-a456-426614174000 EstoqueCriacaoProduto: type: object properties: valor_venda: description: Valor de venda do produto. type: number format: double example: 99.99 custo_medio: description: Valor de custo médio do produto. type: number format: double example: 50 estoque_disponivel: description: Quantidade de estoque disponível do produto. type: number format: double example: 50.5 estoque_minimo: description: Quantidade mínima de estoque do produto. type: number format: double example: 1 estoque_maximo: description: Quantidade máxima de estoque do produto. type: number format: double example: 100 Ecommerce: type: object properties: condicao: type: string example: NOVO enum: - NOVO - USADO integracao_ativa: type: boolean example: true descricao_adicional: type: string example: Descrição adicional do produto titulo_seo: type: string example: Título SEO descricao_seo: type: string example: Descrição SEO url_seo: type: string example: url-seo ItemVariacao: type: object properties: id: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 nome: type: string example: Produto Variado - Tamanho G codigo: type: string example: PROD123 codigo_ean: type: string example: '1234567890123' versao: type: integer example: 1 valor_venda: type: number format: double example: 99.99 estoque: type: number format: double example: 50 opcoes: type: array items: $ref: '#/components/schemas/ProductVariationOptionResponse' ProductListChildResponse: type: object properties: id: type: string format: uuid example: 34471cce-67a2-48b8-a526-1120c0704ed3 id_legado: type: integer description: ID Legado do produto. example: 12345 nome: type: string description: Nome do Produto. example: Produto Exemplo codigo_sku: type: string description: Código SKU. example: SKU123456 codigo_ean: type: string description: Código EAN. example: '1234567890123' tipo: type: string description: Tipo do produto. example: VARIACAO enum: - PRODUTO - VARIACAO - KIT_PRODUTOS status: type: string description: Status do produto example: ATIVO enum: - ATIVO - INATIVO - TODOS estoque: type: number format: double description: Estoque. example: 50 valor_venda: type: number format: double description: Valor de venda. example: 99.99 custo_medio: type: number format: double description: Custo médio. example: 50 filhos: type: array description: Lista de produtos filhos. Neste nível retorna vazio. items: {} variacao: type: integer description: Quantidade de filhos/variações. Neste nível retorna 0. example: 0 nivel_estoque: type: string description: Nível do estoque example: MINIMO enum: - MINIMO - MAXIMO - PADRAO estoque_minimo: type: number format: double description: Estoque mínimo. example: 10 estoque_maximo: type: number format: double description: Estoque máximo. example: 200 movimentado: type: boolean description: Indica se o produto foi movimentado example: true id_pai: type: string format: uuid description: ID do produto pai example: 34471cce-67a2-48b8-a526-1120c0704ed3 integracao_ecommerce_ativa: type: boolean description: Indica se a integração com o e-commerce está ativa. example: true ListagemDeProdutosPorFiltroResponse: type: object properties: itens: type: array items: $ref: '#/components/schemas/ProductListResponse' itens_totais: type: integer example: 1 ProductVariationOptionRequest: type: object required: - id - descricao properties: id: description: Identificador único da opção de variação é obrigatório. Cada opção de variação deve ter um identificador único em cada cadastro de produto. Ao informar a variação no produto, o mesmo identificador do elemento tipos.opcoes deve ser informado em produtos.opcoes. type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 descricao: description: Descrição da opção de variação é obrigatório. type: string example: Descrição da opção de variação Dimensao: type: object properties: altura: type: number format: double example: 10 largura: type: number format: double example: 5 profundidade: type: number format: double example: 2 ProductVariationOptionResponse: type: object properties: id: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 descricao: type: string example: G securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT