Conta Azul Produtos (Inventory)

API para gerenciamento de produtos

OpenAPI Specification

conta-azul-inventory-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Produto
  version: v1
  description: API para gerenciamento de produtos
servers:
  - url: https://api-v2.contaazul.com
    description: Servidor de produção
security:
  - bearerAuth: []
tags:
  - name: v1
    description: Operações relacionadas a produtos
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:
        - v1
  /v1/produto:
    post:
      summary: Criar um novo produto
      operationId: createProduct
      tags:
        - v1
      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:
        - v1
  /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:
        - v1
components:
  schemas:
    ListagemDeProdutosPorFiltroResponse:
      type: object
      properties:
        itens:
          type: array
          items:
            $ref: '#/components/schemas/ProductListResponse'
        itens_totais:
          type: integer
          example: 1
    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'
    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'
    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
    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
    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
    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
    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
    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
    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'
    VariacaoResponse:
      type: object
      properties:
        tipos:
          type: array
          items:
            $ref: '#/components/schemas/TipoVariacao'
        produtos:
          type: array
          items:
            $ref: '#/components/schemas/ItemVariacao'
    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'
    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'
    TipoVariacaoRequest:
      type: object
      required:
        - descricao
        - opcoes
      properties:
        descricao:
          type: string
          example: Tamanho
        opcoes:
          type: array
          items:
            $ref: '#/components/schemas/ProductVariationOptionRequest'
    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'
    ProductVariationOptionResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
        descricao:
          type: string
          example: G
    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
    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
    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
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT