Introdução

Bem-vindo ao KaBuM!

A partir de agora, iniciaremos sua jornada de integração no maior e-commerce de Tecnologia e Games da América Latina.

Nesse portal, você terá acesso às documentações da Mirakl, instruções sobre o seu primeiro acesso, links úteis incluindo acesso exclusivo a IA da Mirakl e ao roteiro de integração.

É muito importante que essa documentação seja sua base de integração.

Todos os documentos de estudo para conhecer nossas API’s e a documentação da Mirakl estão disponíveis nos links abaixo:

📍 Princípios Fundamentais

Antes de codificar, é preciso entender a filosofia da plataforma. A Mirakl trabalha com a separação estrita entre Produto (Ficha Técnica/Catálogo) e Oferta (Preço, Estoque e Logística).

  • Isolamento: A integradora deve operar um seller por vez, utilizando as credenciais exclusivas (API Key) de cada shop.
  • Resiliência: Implementar idempotência (não duplicar ações em retries) e polling incremental (buscar apenas o que mudou).
  • Idempotência: Toda operação de escrita (POST, PUT) deve ser tratada com cautela. Em caso de timeout, implemente mecanismos de verificação antes de retransmitir.
  • Rate Limiting: Respeite os limites de chamadas para evitar o bloqueio temporário da API Key.
  • Fluxo de Pedidos: O operador (KaBuM!) cria os pedidos; a integradora apenas os consome e executa as ações permitidas (aceite, envio, etc.).

Acesso

📍 Marco Zero: Autenticação

Antes de qualquer requisição, a sua aplicação precisa ter permissão para falar com o KaBuM!. O primeiro passo é acessar nosso ambiente de homologação, conhecido como Ambiente DEV.

  1. Acesse: kabum-dev.mirakl.net/login
  2. Entre com o seu e-mail de cadastro e senha.

OBS: Antes de prosseguir, é necessário ter cadastro na plataforma. Caso ainda não tenha informado seu e-mail, solicite o cadastro ao analista responsável pela integração e, em seguida, use o login e a senha enviados por e-mail.

Nosso ambiente de homologação (ou testes) deve ser acessado através do link: kabum-dev.mirakl.net

ATENÇÃO: O ambiente de produção possui um link de acesso diferente: marketplace-kabum.mirakl.net

GERANDO A CHAVE DE API/TOKEN (Mirakl)

  1. No canto superior direito, clique no seu usuário e, em seguida, em Configurações pessoais;
  2. Clique na aba Chave de API;
  3. Clique no botão Ações e, em seguida, em Gerar uma nova chave de API.

Na tela que será exibida, digite GENERATE para confirmar a criação da chave de API e, em seguida, clique em Gerar.

Em seguida, irá aparecer sua chave API, clique em Copiar chave API e a utilize para iniciar sua integração.

Etapas para Homologação

Etapa 1 — Descoberta de catálogo (categorias e atributos)

Nesta etapa, será feita a obtenção das categorias e dos atributos de produtos através das APIs H11 e PM11. Esta ação é de extrema importância, pois nela será realizado o mapeamento das categorias e atributos necessários para que o envio do produto ocorra corretamente.

Etapa 2 — Importação de produtos (P41), acompanhamento (P42) e relatórios (P44 a P47)

Neste momento, será realizada a importação dos produtos através da API P41, seguindo os atributos e categorias apresentados na Etapa 1. Após a chamada da P42, poderão ser extraídos os relatórios de importação e de erros através das APIs P42, P44, P46 e P47.

Etapa 3 — Gestão de Ofertas

Neste estágio, o produto já existe no banco de dados do KaBuM!, mas ele só aparecerá para o consumidor final quando houver uma oferta ativa vinculada a ele. Enquanto as APIs de produto (P41-P47) lidam com a identidade do item (nome, marca, voltagem), as APIs de oferta lidam com a transação (preço e estoque).

Etapa 4 — Pedidos (Order Management)

A OR11 é o ponto de partida de todo o fluxo de vendas. Se a sua integração falhar aqui, o Seller não fatura e o cliente não recebe. Vamos destrinchá-la com foco total em sincronismo incremental e segurança de dados.

Detalhamento da Etapa 4 — Estrutura de Pagamento (NFe)

Nesta seção, detalhamos a estrutura e o conteúdo dos novos campos de pagamento na API OR11, essenciais para a geração de Notas Fiscais Eletrônicas (NFe) em conformidade com a Nota Técnica 2025.001 da SEFAZ.

Observações:

  • Todos os dados de pagamento eletrônico são agrupados no objeto payment_details.
  • Os códigos são padronizados pelas tabelas oficiais da SEFAZ para bandeiras de cartão e meios de pagamento.

Etapa 1.1 - H11

1.1 | H11 — Descoberta da Árvore de Categorias (Hierarquias)

Esta API retorna a estrutura completa de categorias (pais e filhos) aceitas pelo KaBuM!. Ela é o primeiro passo obrigatório para que o Seller consiga classificar seus produtos corretamente.

Antes de enviar qualquer produto, sua aplicação deve mapear a árvore de categorias e as exigências (atributos) de cada uma delas. Recomenda-se que esta etapa seja executada periodicamente (ex.: uma vez ao dia) para manter o ERP ou a plataforma de integração devidamente atualizados.

GET /api/hierarchies

📌 Parâmetros da API

Para otimizar a performance e a relevância dos dados, utilize os seguintes filtros:

  • hierarchy (String): Permite filtrar por um código de categoria específico. Útil se o Seller atua apenas em um segmento (ex.: somente Informática). A API retornará apenas os níveis superiores (pais) e inferiores (filhos) desse ramo.
  • max_level (Integer): Define a profundidade da árvore que se deseja buscar. Caso queira apenas as categorias principais, utilize max_level=1. Para a árvore completa, deixe o campo vazio ou utilize um valor alto.

🚩 Lista de Falhas e Desafios Comuns na H11

Falha/Cenário Causa Provável Ação Corretiva
Produto Rejeitado (Invalid Hierarchy) O Seller tentou associar o produto a uma categoria "Pai" (ex: Hardware) em vez de uma categoria "Folha" (ex: SSD). No seu ERP, bloqueie a seleção de categorias que possuam o campo children preenchido no JSON da H11.
Timeout na Requisição A árvore de categorias do KaBuM! é grande. Tentar baixar tudo sem filtros em uma conexão lenta pode causar erro. Aumente o timeout da requisição para 60 segundos ou utilize o parâmetro max_level para realizar o download da árvore de categorias por partes (em camadas).
Categoria Inexistente O Seller está usando um código de categoria que foi desativado ou alterado pelo Marketplace. Execute a rotina de atualização da H11 e notifique o Seller para refazer o mapeamento se a categoria sumir.
Código vs Label O desenvolvedor deve salvar o código técnico da categoria (ex.: hardware-01) e não o seu nome de exibição (ex.: "Hardware"). Sempre armazene e utilize o campo code para as integrações.

💡 Lógica de Implementação Recomendada

  • Identificando Categorias Folhas: Como saber se uma categoria aceita produtos? Ao consumir o JSON da H11, verifique o array children.
    • Se children estiver vazio, essa é uma categoria Folha (Pode receber produtos).
    • Se children contiver dados, essa é uma categoria Pai (Não pode receber produtos).
  • Experiência do Usuário (UX): Não mostre milhares de códigos para o Seller. Na interface do seu ERP, mostre o label (nome amigável) e o caminho completo (Breadcrumb), ex: Hardware > Armazenamento > SSD. Isso reduz drasticamente os erros de mapeamento por parte do usuário.
  • HTTP RETURN CODES:
    • 200 OK: Sucesso total. A árvore está no corpo da resposta.
    • 404 Not Found: Se você passou um hierarchy_code que não existe.

⏳ Linha do Tempo da Integração

Esta etapa é a base de tudo e deve ser tratada como um processo de Setup e Manutenção.

  1. Gatilho (Configuração Inicial): Antes de enviar o primeiro produto, a integradora deve baixar a árvore completa via H11.
  2. Interface de Mapeamento (De/Para): No ERP/HUB, o desenvolvedor deve criar uma tela onde o Seller associa:
    "Minha categoria 'Memória RAM' no ERP" → corresponde a → "Categoria 'Hardware > Memórias > Desktop' no KaBuM!".
  3. Rotina Periódica: Implementar um job (ex: 1x ao dia ou semanal) para atualizar a árvore local. O KaBuM! pode criar novas categorias ou desativar antigas para otimizar o site.
  4. Próximo Passo: Após o mapeamento da categoria na H11, a integradora deve chamar a PM11 para descobrir quais atributos aquela categoria exige.

Etapa 1.2 - PM11

1.2 | PM11 — Atributos e Regras de Validação

Esta API apresenta todos os parâmetros de atributos que um produto deve possuir, desde palavras proibidas até campos obrigatórios, detalhando as regras de cada um.

Ela deve ser mapeada após a H11 e antes da P41. Utilize o parâmetro requirement_level para validar se o atributo é REQUIRED (obrigatório) ou OPTIONAL (opcional) no seu payload de produto.

GET /api/products/attributes

📌 Parâmetros da API

Para evitar o download de atributos desnecessários, você deve filtrar a chamada utilizando:

  • hierarchy_code (String): O código da categoria obtido na H11.
  • max (Integer): Define o limite de resultados (recomenda-se 100).
  • shop_id (Integer): Identificador da sua loja.

Ao receber o JSON da PM11, seu código deve focar nos seguintes campos para cada atributo:

  • code: O ID técnico do atributo (ex.: cor-predominante). Este é o código que será utilizado no CSV/JSON da P41.
  • label: O nome amigável para exibição ao Seller (ex.: "Cor Predominante").
  • requirement_level:
    • REQUIRED: Se não enviado, o produto será rejeitado.
    • OPTIONAL: Envio recomendado para melhor SEO, mas não bloqueia a criação.
  • type: Define o formato do dado:
    • LIST: Permite apenas o envio de valores que estejam dentro da lista predefinida.
    • TEXT / NUMBER: Aceita texto livre ou números.
  • values (Array): Se o tipo for LIST, este array conterá o code e o label dos valores permitidos (ex.: AZUL, PRETO).

🚩 Lista de Falhas e Desafios Comuns na PM11

Falha/Cenário Causa Provável Ação Corretiva
Erro de "Valor Inválido" na P41 O desenvolvedor enviou o label do atributo (ex: "Azul") em vez do code (ex: AZUL). Sempre utilize o code dos valores retornados na PM11 para popular o payload.
Atributo Faltante O marketplace tornou um atributo obrigatório recentemente, e o ERP não atualizou o cache. Implemente um sistema de cache inteligente para a PM11 que expire a cada 24h.
Regex Mismatch O valor enviado não respeita a expressão regular definida no campo regex da API. Valide o input do usuário usando a regex fornecida pela própria PM11 antes do envio.
Hierarquia Errada Tentar buscar atributos de uma categoria "Pai" (que não aceita produtos). Certifique-se de que o hierarchy_code usado pertence a uma categoria "Folha".

💡 Lógica de Implementação Recomendada

  • Cache Estratégico: A lista de atributos de uma categoria não muda a cada minuto. Dica: Armazene o retorno da PM11 em um banco de dados ou em cache de disco por categoria. Isso acelera a renderização do formulário no seu ERP e economiza chamadas de API.
  • Tratamento de Unidades de Medida: Alguns atributos vêm com unidades (ex.: weight em gramas ou quilos); a PM11 indica isso. Certifique-se de que seu ERP faça a conversão automática para que o Seller não envie "1" (quilo) quando o marketplace espera "1000" (gramas).
  • HTTP RETURN CODES: Será retornado o código 200 quando a requisição for efetuada com sucesso.

⏳ Linha do Tempo da Integração

  1. Gatilho: O Seller selecionou a categoria "Teclados" (H11) no seu ERP.
  2. Consulta: Sua aplicação chama GET /api/products/attributes?hierarchy_code=teclados-gamer.
  3. Montagem Dinâmica: O ERP renderiza um formulário para o Seller contendo apenas os campos que o KaBuM! exige para aquela categoria.
  4. Validação Local: Antes de disparar a P41, o seu sistema verifica: "O Seller preencheu todos os campos REQUIRED? Os campos do tipo LIST estão com valores válidos?".
  5. Próximo Passo: Com os dados validados pela PM11, o arquivo de importação da P41 está pronto para ser gerado com erro zero.

Guia Prático de Produtos

CARACTERÍSTICAS DO PRODUTO

Os principais recursos e características do produto:

  1. Nome do produto (product_shop_title)
  2. Imagem(s) (product_image1)
  3. Descrição (product_shop_description)
  4. Product_ID (SHOP_SKU)
  5. Dimensões (product_weight, product_height, product_width, product_depth)
  6. Categoria (category_shop)
  7. EAN (ean)

DEFINIÇÕES DOS CAMPOS DE MEDIDAS DO PRODUTO

Atenção: Para cálculo do frete do produto, os campos de MEDIDAS são extremamente IMPORTANTES.

Use as dimensões em centímetros e peso em gramas. Qualquer parâmetro fora desse padrão, a Mirakl automaticamente transforma para números inteiros, arredondado para cima.

  • Altura: deve ser inserido somente os números em centímetros, sem decimal.
    (Exemplo: 38 = 38cm)
  • Largura: deve ser inserido somente os números em centímetros, sem decimal.
    (Exemplo: 59,2 = 59cm)
  • Profundidade: deve ser inserido somente os números em centímetros, sem decimal.
    (Exemplo: 1m = 100cm)
  • Peso: deve ser inserido somente os números em gramas, sem decimal.
    (Exemplo: 2Kg = 2000g)

DEFINIÇÕES DO CAMPO DE “IMAGEM”

As imagens são muito importantes na decisão de compra do cliente, por isso prezamos para que elas tenham uma boa qualidade para a visualização do produto, logo ela precisa cumprir os seguintes requisitos:

  • Fundo branco
  • Boa qualidade
  • Estar de acordo com a realidade
  • Tamanho de 800x800 ou 1000x1000 pixels
  • Não deve ter logotipos, marca d'águas, selo de brindes e etc.

O QUE É KBM?

KBM é um identificador interno do KaBuM! para ser utilizado em produtos com Kits, Exclusivos e usados a fim de evitar o match indevido com produtos que possua EAN correto.

Exemplo: Um celular novo com um celular usado de sellers diferentes. KBM2112896542

  • KBM: KaBuM!
  • Id da Loja: compostos por 4 dígitos
  • SKU de Oferta: com 6 dígitos

IMPORTANTE:

Nosso Marketplace KaBuM! aceita de 12 a 13 dígitos. Números inferiores ou superiores serão rejeitados (seller pode corrigir e enviar de novo o item).

É papel do seller enviar o EAN correto do produto e do KaBuM! checar essa informação.

Vários marketplaces e integradores já adotaram a obrigatoriedade de utilizar EAN corretamente. Utilizar KBM não permite que o produto apareça no Google Shopping, reduzindo a exposição de venda.

Etapa 2.1 - P41

2.1 | P41 - Importação de Produtos

Essa API é responsável por enviar toda a ficha técnica de um produto para aprovação do operador. Diferente da OF01 ela envia apenas o produto, e não a oferta em conjunto.

A criação de produtos é um processo assíncrono. Pense na P41 como uma "caixa de entrada": você deixa o arquivo lá, recebe um comprovante (import_id) e volta mais tarde para ver se os produtos foram aceitos. Essa arquitetura permite que você envie milhares de itens de uma só vez sem travar a conexão do seu ERP.

POST /api/products/imports

📌 Parâmetros da API

Diferente de APIs JSON, a P41 exige um envio do tipo formulário para carregar o arquivo físico.

  • file (Binary - Obrigatório): O arquivo contendo os produtos.
    • Padrão KaBuM!: CSV (separado por ponto e vírgula ;).
    • Encoding: Use sempre UTF-8 para evitar quebras em caracteres especiais (acentos, cedilha).
  • import_mode (String - Recomendado):
    • NORMAL: (Modo Seguro) Ele atualiza produtos que já existem e cria os novos. É o modo que você deve usar em 99% dos casos.
    • REPLACE: (Modo Destrutivo) Ele apaga todos os produtos do Seller que não estiverem no arquivo.
      Dica: Evite este modo para não causar perda de dados acidental.

🚩 Lista de Falhas e Desafios Comuns na P41

Falha/Cenário Causa Provável Ação Corretiva
Erro 413 - Payload Too Large O arquivo enviado é muito pesado (ex: excesso de linhas ou imagens pesadas). Fragmente o envio. Em vez de um arquivo de 50MB, envie 5 arquivos de 10MB.
Erro 400 - Invalid File Format O arquivo não segue a estrutura CSV/XLSX ou o delimitador está errado. Verifique se o CSV está usando ; ou , conforme configurado no portal.
Encoding Error O arquivo foi gerado em ISO-8859-1 ou Windows-1252. Force a geração do arquivo em UTF-8 sem BOM.
Imagens não carregam As URLs das imagens no arquivo estão protegidas por senha ou são inválidas. Certifique-se de que as URLs das imagens sejam públicas e acessíveis pela internet.

💡 Lógica de Implementação Recomendada

  • Gestão de Lotes: Não envie um produto por vez. Agrupe os produtos em lotes (ex: a cada 50 ou 100 itens) para otimizar o uso da API e facilitar a leitura dos relatórios de erro posteriormente.
  • URLs de Imagens: O KaBuM! exige imagens de alta qualidade. Na P41, você envia apenas os Links (URLs) das fotos.
    Dica: Verifique se as fotos têm fundo branco e dimensões mínimas de 800x800 antes mesmo de gerar o arquivo da P41. Isso evita que o produto seja reprovado pelo operador lá na frente.
  • O que fazer com o import_id? Não trate o import_id como um dado descartável. Exiba-o no log de integração do seu ERP. Se o Seller ligar para o suporte do KaBuM!, esse ID será a primeira informação solicitada para localizar o lote.

⏳ Linha do Tempo da Integração

  1. Gatilho (ERP): O Seller terminou de cadastrar os produtos no ERP e solicitou o envio para o KaBuM!.
  2. Pré-Validação (Obrigatória): O seu sistema deve validar o arquivo localmente usando as regras da PM11 (verificar se todos os campos REQUIRED estão lá).
  3. Execução: Chamada POST /api/products/imports.
  4. Resposta de Sucesso (201 Created): A Mirakl devolve um JSON contendo o import_id.
    Ação Crítica: Sua integradora DEVE salvar esse import_id no banco de dados para rastreabilidade.
  5. Próximo Passo: Iniciar o monitoramento de status através da P42.

Etapa 2.2 - P42

2.2 | Obtenha o status de importação de um produto (API P42)

Você não deve assumir que o produto foi criado só porque a P41 retornou 201. A P42 é o "GPS" do seu processamento.

Nessa etapa, utilizamos a API como endpoint de consulta (polling) que informa o estágio atual do processamento do lote de produtos enviados. Ela é o "cérebro" que decide se sua aplicação deve baixar um relatório de erro ou um relatório de sucesso.

GET /api/products/imports/{import_id}

📌 Parâmetros da API

  • Parâmetro de Path (Obrigatório):
    import (Integer): O ID da importação (aquele que você salvou no banco de dados após a P41).
    Exemplo: GET /api/products/imports/5501

Estados do Processamento (import_status)

Sua aplicação deve estar preparada para ler e reagir aos seguintes status:

  • QUEUED / WAITING_IMPORTATION: O arquivo está na fila.
    Ação: Aguarde e consulte novamente em 1 minuto.
  • IMPORTING: A Mirakl está lendo as linhas e validando os atributos (PM11) e hierarquias (H11).
    Ação: Mantenha o polling.
  • COMPLETE: O ciclo de processamento terminou.
    Ação: Pare o polling e verifique as flags de relatório.

🚩 As Flags de Decisão

Dentro do JSON de resposta da P42, existem campos booleanos (true/false) que dizem exatamente o que aconteceu com os produtos:

Campo (Flag) O que significa se for true? Próximo Passo
has_transformation_error_report O arquivo tem erros graves de estrutura (delimitador errado, colunas faltando). Chamar P47 imediatamente.
has_error_report Alguns produtos falharam em regras de negócio (ex: imagem inválida ou atributo obrigatório vazio). Chamar P44 imediatamente.
has_new_product_report Novos produtos foram aceitos e criados com sucesso no catálogo. Chamar P45 para confirmar os IDs.

💡 Lógica de Implementação Recomendada

  • Sugerimos que a integração não deixe o processamento da P42 "escondido". No painel do seu ERP, mostre uma barra de progresso ou o status atual (Ex: "Status no KaBuM!: Processando..."). Isso reduz a ansiedade do Seller e evita que ele tente reenviar o mesmo arquivo várias vezes.
  • Recomendamos também guardar o resultado final da P42 (quantos produtos foram processados, quantos deram erro) no seu banco de dados. Isso serve como um histórico de saúde da conta do Seller.

🚩 Lista de Falhas e Desafios Comuns na P42

Falha/Cenário Causa Provável Ação Corretiva
"Import not found" Você tentou consultar um ID que ainda não foi propagado ou o ID está errado. Verifique se o ID consultado é exatamente o retornado pela P41.
Polling Infinito O status nunca muda para COMPLETE (raro, mas possível em instabilidades). Implemente um timeout global (ex: se em 30 min não completar, alerte o suporte).
Rate Limit (Erro 429) Consultar a P42 muitas vezes por segundo. Respeite o intervalo de 1 minuto entre as chamadas para o mesmo ID.
Ignorar Flags de Erro A aplicação vê COMPLETE e acha que deu tudo certo, mas 100% dos produtos falharam. Nunca ignore as flags has_error_report e has_transformation_error_report.

⏳ Linha do Tempo da Integração

  1. Gatilho: Recebimento do import_id da P41.
  2. Início do Polling: A integradora faz a primeira chamada à P42 após 30-60 segundos.
  3. Loop de Espera: Enquanto o status for diferente de COMPLETE, o sistema repete a consulta (sugestão: use Exponential Backoff).
  4. Análise Final: O status mudou para COMPLETE.
    • Se houver erros: O sistema baixa o relatório (P44/P47) e exibe os erros para o Seller no ERP.
    • Se houver sucessos: O sistema baixa o relatório (P45) e marca os produtos como "Em Validação" no ERP.
  5. Próximo Passo: Com os produtos criados, o Seller deve agora preparar o envio das ofertas (OF24/OF01).

Etapa 2.3 - P44 | P45 | P46 | P47

2.3 | P44 > P45 > P46 > P47 - Baixar relatórios/arquivos gerados pelo import

Depois que o P42 indicar que o processamento terminou, o HUB deve olhar as flags retornadas e baixar os arquivos correspondentes.

P44 — baixar o error report (“Non-integrated products report”)

Use quando has_error_report = true.

Essa é a API mais importante para o suporte técnico do Seller, pois sem ela o Seller fica "cego". A P44 é disparada quando a estrutura do seu arquivo está correta, mas o conteúdo viola as regras do KaBuM!.
Exemplo: você enviou uma "Cor" que não existe na lista da PM11, ou esqueceu o "Peso" que é obrigatório.

GET /api/products/imports/{import_id}/error_report

O que retorna: Um ficheiro (geralmente CSV) contendo as linhas que falharam e a coluna exata com a mensagem de erro (ex: "Valor 'Azul Marinho' não permitido para o atributo 'Cor'").

Importante: Não apenas baixe o ficheiro. Tente ler o erro e exibi-lo de forma amigável no painel do seu ERP/HUB. Isso reduz em 80% os tickets de suporte.

📌 Parâmetros da API
  • Parâmetro de Path (Obrigatório):
    import (Integer): O ID da importação gerado na P41.
🚩 Lista de Falhas Comuns na P44
Erro no Relatório Causa Provável Ação Corretiva
MISSING_MANDATORY_ATTRIBUTE Você não enviou um campo que a PM11 definiu como REQUIRED. Validar o preenchimento no ERP antes de enviar o arquivo.
INVALID_ATTRIBUTE_VALUE O valor enviado para um campo de lista (LIST) não existe na Mirakl. Sincronizar os valores permitidos via PM11.
INVALID_IMAGE_URL A URL da imagem está quebrada ou o servidor bloqueou o robô da Mirakl. Hospedar imagens em servidores públicos e estáveis.
HIE_01 (Hierarquia Inválida) O código da categoria (hierarchy_code) não existe ou não é uma categoria "folha". Revisar o mapeamento feito na H11.
⏳ Linha do Tempo da Integração
  1. Gatilho (P42): O status da importação é COMPLETE e a flag has_error_report é true.
  2. Execução: Sua aplicação faz o GET na P44 e faz o download do arquivo CSV.
  3. Processamento: O sistema deve ler o CSV. A Mirakl adiciona colunas extras ao final de cada linha, descrevendo o erro.
  4. Exibição: O ERP deve mapear o erro ao SKU correspondente e mostrar ao Seller: "Erro no SKU 123: O atributo 'Voltagem' é obrigatório para a categoria 'Eletro'."
  5. Próximo Passo: O Seller corrige o dado no ERP e a integradora reinicia o fluxo na P41.

HTTP RETURN CODES: O código 200 será retornado quando a requisição ocorrer com sucesso.


P45 — baixar o integration report (“Added products report”)

Use quando has_new_product_report = true.

GET /api/products/imports/{import_id}/new_product_report

Essa API retorna a confirmação de que os produtos entraram na base com sucesso com a lista de produtos que foram aceitos e integrados no catálogo.

Use essa API para atualizar o status do produto no seu ERP para "Integrado / Em Validação". Lembre-se que, no KaBuM!, o produto pode ser integrado, mas ainda passar por uma curadoria humana antes de ficar visível.

📌 Parâmetros da API
  • Parâmetro de Path (Obrigatório):
    import (Integer): O ID da importação gerado na P41.
⏳ Linha do Tempo da Integração
  1. Gatilho (P42): O status da importação é COMPLETE e a flag has_new_product_report retornou true.
  2. Execução: A integradora realiza o GET na P45 para baixar o arquivo de sucesso.
  3. Processamento Local: O ERP lê o arquivo (geralmente mapeando o shop_sku enviado com o product_id gerado pela Mirakl).
  4. Atualização de Status Interno: O sistema altera o status do produto no banco de dados do ERP de "Pendente" para "Integrado / Aguardando Oferta".
  5. Próximo Passo: Disparar a API de Ofertas (OF24) para os SKUs listados neste relatório.

P46 — baixar o transformed file (“File in operator format”, CSV)

Use quando has_transformed_file = true.

GET /api/products/imports/{import}/transformed_file

Essa API permite baixar o arquivo de produtos exatamente como ele ficou após passar pelas Regras de Transformação do operador (KaBuM!), sendo muito útil para ver como o dado ficou antes de entrar no banco.

📌 Parâmetros da API
  • Parâmetro de Path (Obrigatório):
    import (Integer): O ID da importação gerado na P41.
🚩 Lista de Falhas e Desafios Comuns na P46
Falha/Cenário Causa Provável Ação Corretiva
Arquivo não disponível A flag has_transformed_file na P42 estava como false. Nem toda importação sofre transformação. Só chame a P46 se a flag for positiva.
Divergência de Dados O operador mudou as regras de transformação sem avisar. Baixe a P46 para entender o novo padrão exigido pelo KaBuM!.
Erro de Leitura (Binary) Tentar ler o retorno da API como JSON. Assim como a P44, a P46 retorna um arquivo (CSV/XLSX). Trate como stream/blob.
404 Not Found O ID de importação expirou ou é inválido. Verifique se o ID consultado é o correto. Arquivos de importação costumam expirar após alguns dias/semanas.
⏳ Linha do Tempo da Integração
  1. Gatilho (P42): O status da importação é COMPLETE e a flag has_transformed_file é true.
  2. Cenário de Uso: O desenvolvedor ou o Seller percebe que um produto foi aceito (P45), mas o nome dele no site está diferente do que foi enviado originalmente no ERP.
  3. Execução: Chamada GET na P46 para baixar o arquivo processado.
  4. Análise: Comparar o arquivo original enviado na P41 com o arquivo retornado pela P46.
  5. Conclusão: Identificar se existe uma regra de transformação no marketplace que está alterando os dados (útil para ajustar o ERP e evitar surpresas).

P47 — baixar o transformation error report (“Source file error report”)

Use quando has_transformation_error_report = true.

GET /api/products/imports/{import}/transformation_error_report

Essa API é voltada para o Desenvolvedor. Antes de validar se a "Cor" ou o "Preço" estão certos, a Mirakl tenta abrir e ler o arquivo. Se o delimitador estiver errado ou o arquivo estiver corrompido, ela gera um erro de transformação e nenhum produto foi sequer analisado.

Se o ficheiro enviado na P41 estiver tão corrompido ou fora do padrão que a Mirakl não conseguiu começar a validar os atributos, o erro aparecerá aqui. É uma situação crítica que deve ser observada e exige atuação imediata.

Exemplo de erro na P47: Colunas em falta, delimitador de CSV errado (usar vírgula em vez de ponto e vírgula), ou ficheiro codificado em formato não suportado (o ideal é UTF-8).

📌 Parâmetros da API
  • Parâmetro de Path (Obrigatório):
    import (Integer): O ID da importação.
Boas práticas operacionais:
  • Guardar os relatórios por seller + data/hora + import_id.
  • Exibir no painel do HUB um resumo do P42 e links para download dos relatórios (P44/P45/P46/P47). Isso reduz muito os chamados de suporte.
🚩 Lista de Falhas Comuns na P47 (Erros do Desenvolvedor)
Erro no Relatório Causa Provável Ação Corretiva
Invalid CSV Delimiter Você usou vírgula (,) mas o portal espera ponto e vírgula (;). Ajustar o gerador de CSV no código da integradora.
Missing Header Uma coluna obrigatória do cabeçalho está faltando ou escrita errada. Validar o layout do arquivo conforme o manual de catálogo do KaBuM!.
Encoding Issue O arquivo contém caracteres "estranhos" por estar em um formato diferente de UTF-8. Forçar o encoding do arquivo para UTF-8 (sem BOM).
File Corrupted O upload foi interrompido ou o arquivo está vazio. Verificar a rotina de upload da P41.
💡 Dicas de Implementação
  • Tratamento de Erros Silenciosos: Muitas vezes o status é COMPLETE, mas o has_error_report é true. Se sua integração apenas olha o status, ela dirá ao Seller que "deu tudo certo" enquanto os produtos foram rejeitados. Sempre cheque as flags booleanas.
  • Shop ID: Use sempre o parâmetro shop_id nas requisições P44, P45, P46 para garantir que está lendo os dados da loja correta, especialmente se o seu HUB gerar múltiplas contas.
  • Histórico de Logs: Guarde o import_id e os ficheiros de erro (P44/P47) por pelo menos 30 dias. Se o Seller reclamar que um produto não subiu, você tem o log técnico para provar o motivo.

Recapitulação do Fluxo de Relatórios (MCM)

# Pseudo-código de Orquestração
status = consultar_P42(import_id)

if status == "COMPLETE":
    if has_transformation_error: 
        baixar_P47() # Erro de código/estrutura - Alerta para a TI
    
    if has_error_report:
        baixar_P44() # Erro de negócio - Alerta para o Seller
    
    if has_new_product_report:
        baixar_P45() # Sucesso - Atualiza banco local

Etapa 3.1 - OF24 vs OF01

3.1 | JSON (OF24) vs Arquivo (OF01)

A Mirakl oferece dois caminhos para gerenciar ofertas, e a escolha vai depender do volume de dados e da frequência de atualização da sua operação. De modo simples, elaboramos um comparativo entre OF24 vs OF01.

🔄 Comparativo Estratégico: Quando usar cada uma?

Característica OF24 (JSON) OF01 (Arquivo)
Velocidade Quase Instantânea (Real-time) Assíncrona (Entra em fila)
Volume Ideal 1 a 50 itens por chamada 100 a 50.000+ itens
Complexidade Média (Exige payload completo) Baixa (Layout de planilha)
Uso Comum Sincronismo de estoque diário Carga inicial ou Black Friday
Acompanhamento Resposta HTTP imediata (200/201) Exige polling na OF02

3.1.1 | OF24 - Atualização de Ofertas via JSON (Recomendado)

Frequência: Recomendado a cada 5 minutos.

POST /api/offers

A OF24 é uma API de escrita direta. Ela é usada para atualizações pontuais e frequentes, sendo a API ideal para o dia a dia, especialmente para sincronização de estoque e mudanças rápidas de preço.

Diferente da P41, a OF24 é processada quase em tempo real. Ela é projetada para que o ERP envie alterações assim que elas ocorrem (ex: uma venda na loja física que baixou o estoque).

⚠️ CUIDADO CRÍTICO: Full-Replacement

Essa API trata o payload como a "verdade absoluta". Se você enviar apenas o preço, mas omitir a descrição ou o estado do produto, a Mirakl pode resetar esses campos para o valor padrão ou apagar a informação anterior. Sempre monte o objeto completo da oferta antes do disparo.

📌 Parâmetros da API

  • shop_sku (String/Obrigatório): Seu código identificador único no ERP.
  • product_id (String/Obrigatório): O ID do produto (EAN ou ID Mirakl) ao qual a oferta se vincula.
  • price (Decimal/Obrigatório): Preço final de venda (Preço "Por").
  • p_list_price (Decimal/Opcional): Preço de tabela (Preço "De"). Deve ser >= price.
  • quantity (Integer/Obrigatório): Saldo físico disponível para o KaBuM!.
  • leadtime_to_ship (Integer/Obrigatório): Dias úteis para postagem.
    Atenção: Erros aqui impactam o cálculo do frete e o SLA de entrega.
  • update_delete (String): Use update para criar/atualizar ou delete para remover a oferta da vitrine.

Resposta Imediata: A API retorna 201 Created ou 200 OK indicando que o pedido de atualização foi recebido.

🚩 Lista de Falhas Comuns na OF24

Falha Causa Provável Ação Corretiva
429 Too Many Requests Excesso de chamadas unitárias por segundo. Implemente um buffer e envie lotes de até 50 SKUs por chamada.
Preço "De" < Preço "Por" Erro na lógica comercial do ERP. Valide localmente: p_list_price deve ser sempre maior ou igual a price.
Reset de Informação Envio de payload incompleto. Garanta que campos como leadtime e description (se houver) sejam reenviados.

⏳ Linha do Tempo da Integração

  1. Gatilho (ERP): Ocorre uma venda em outro canal ou entra uma nota no estoque do Seller.
  2. Preparação: O ERP monta o objeto JSON.
    Dica: Busque os dados atuais da oferta para garantir que o envio seja completo (evitando o efeito do full-replacement).
  3. Execução: Chamada POST /api/offers.
  4. Resposta Imediata: A API retorna 201 ou 200. O processamento é concluído em segundos.
  5. Próximo Passo: Auditoria via OF21 para validar se a oferta está active: true.

💡 Se você enviar uma oferta (OF24) e a Mirakl retornar erro de "Produto Inexistente", não descarte esse dado. Provavelmente, o produto ainda está sendo processado na P41.

Recomendação: Crie uma fila de "Retry", que tenta reenviar a oferta automaticamente a cada 4 horas por até 3 dias.


3.1.2 | OF01 - Importação de Ofertas via Arquivo

POST /api/offers/imports

A OF01 é a "irmã" da P41. Porém, além de ser assíncrona, ela envia o produto + oferta na mesma API. Você envia um arquivo (CSV ou XLSX) e recebe um import_id para acompanhar o processamento. Ideal para cargas massivas (milhares de SKUs de uma vez) ou para a carga inicial.

Use a OF01 quando precisar atualizar centenas ou milhares de itens de uma só vez (ex: uma Black Friday em que 5.000 itens mudam de preço simultaneamente). Enviar 5.000 JSONs individuais via OF24 causaria um Rate Limit (bloqueio por excesso de chamadas), enquanto a OF01 resolve isso em um único upload.

📌 Parâmetros da API

  • file (Binary/Obrigatório): O arquivo físico. No KaBuM!, utilize CSV separado por ponto e vírgula (;).
  • import_mode (String/Obrigatório):
    • NORMAL: (Padrão) Atualiza o que existe e cria o que é novo.
    • REPLACE: CUIDADO EXTREMO. Deleta todas as ofertas do Seller que NÃO estiverem no arquivo enviado.

🧠 A Lógica por trás das Ofertas

Quando chegam no módulo de ofertas, existe um ponto que confunde muitos desenvolvedores: "Mandei a oferta, mas ela não aparece no site do KaBuM!. Por quê?"

A resposta está no status de validação. Para uma oferta ser pública, ela precisa passar por 3 filtros:

  • Filtro Técnico: O JSON ou Arquivo está formatado corretamente? (Erro 400 ou OF03).
  • Filtro de Vínculo: O product_id informado existe no catálogo aprovado? Se o produto ainda estiver "Em Validação" (P41), a oferta ficará oculta com o motivo PRODUCT_STATUS_PENDING, pois, para uma oferta ser ativa no front, precisa majoritariamente de um produto com status aprovado.
  • Filtro Comercial: O preço está dentro das regras de negócio? O estoque é maior que zero?

Esse checklist simples é fundamental para entender o motivo de uma oferta não ter se tornado pública ainda, mas para conferir possíveis erros é possível fazer polling na API OF02, assim como na P42 para saber quando o processamento do arquivo terminou e obter um relatório através da OF03 que dirá a linha exata da falha.

🚩 Lista de Falhas Comuns na OF01

Falha Causa Provável Ação Corretiva
Erro de Layout (P47) Colunas fora de ordem ou delimitador incorreto. Verifique se o cabeçalho do CSV segue exatamente o manual do operador.
Deleção Acidental Uso indevido do modo REPLACE. Bloqueie o uso de REPLACE no código da integradora, permitindo apenas NORMAL.
Lentidão na Fila Grande volume de arquivos sendo processados simultaneamente no marketplace. Implemente um polling de OF02 paciente (intervalos de 1 a 2 minutos).

⏳ Linha do Tempo da Integração

  1. Gatilho (Operacional): O Seller decide atualizar os preços de toda a loja para uma campanha.
  2. Geração: O ERP gera o arquivo (CSV/XLSX) contendo todos os campos exigidos.
  3. Execução: Chamada POST /api/offers/imports.
  4. Recuperação de Ticket: O sistema captura o import_id retornado (201 Created).
  5. Monitoramento: O sistema inicia o polling na OF02 até o status COMPLETE.

Etapa 3.2 - OF02

3.2.1 | OF02 - Monitoramento de Importação

GET /api/offers/imports/{import}

Assim como a P42 serve para produtos, a OF02 é um endpoint de consulta (polling) que retorna o progresso e o resultado final de um lote de ofertas enviado anteriormente via OF01. Ela diz em que estágio o lote de preço/estoque se encontra.

Como o processamento de arquivos pode levar de alguns segundos a alguns minutos (dependendo da fila global da Mirakl), a OF02 serve para que sua integração não precise manter uma conexão aberta esperando o arquivo terminar. Você "pergunta" periodicamente como as coisas estão indo.

📌 Parâmetros Principais

  • import_id (Integer/Obrigatório): O identificador único retornado na resposta da OF01.

Estados do Processamento (import_status)

Diferente de um simples "Sucesso" ou "Erro", a OF02 possui estados intermediários que sua aplicação deve tratar:

  • QUEUED (Na Fila): O arquivo foi recebido com sucesso, mas ainda está na fila de espera dos servidores da Mirakl.
    Ação: Aguarde e tente novamente em 1 minuto.
  • IMPORTING (Processando): A Mirakl está lendo as linhas do seu arquivo e validando os SKUs e preços.
    Ação: Mantenha o polling.
  • COMPLETE (Finalizado): O processamento terminou.
    Ação: Pare o polling. Agora é hora de olhar as flags de resultados (sucesso ou erro).

Recomendação de Polling: Recomendamos realizar consultas periódicas a cada 1 ou 2 minutos enquanto o status não for COMPLETE. Se has_error_report = true, disparar o fluxo da OF03. Se tudo falso, o estoque está teoricamente atualizado.

🚩 Campos Importantes na Resposta

Campo na Resposta Significado O que fazer se for true (ou preenchido)
has_transformation_error_report Erro Crítico de Estrutura. O arquivo nem chegou a ser lido porque o layout está errado (ex: separador errado ou falta de colunas). Corrija o layout do arquivo no seu código e reenvie.
has_error_report Erro de Negócio. O arquivo foi lido, mas alguns SKUs falharam (ex: preço inválido). Chame a OF03 imediatamente para identificar quais linhas falharam.
has_transformed_file O operador (KaBuM!) aplicou alguma regra automática no seu dado. Informativo. Você pode baixar o arquivo transformado via OF04 para auditoria.
offer_inserted_count Quantas ofertas novas foram criadas. N/A (Apenas Informativo)
offer_updated_count Quantas ofertas/SKUs existentes tiveram preço/estoque atualizado. N/A (Apenas Informativo)
offer_deleted_count Se você usou o modo DELETE, mostra quantos itens foram removidos. N/A (Apenas Informativo)

⏳ Passo a Passo da Integração

  1. Gatilho: Você recebe o import_id da OF01.
  2. Início do Loop (Polling):
    • Sua aplicação faz o primeiro GET na OF02 após 30 segundos.
    • Se status == QUEUED ou IMPORTING, agende a próxima chamada para daqui a 60 segundos.
  3. Saída do Loop: O status retornou COMPLETE.
  4. Análise de Desvio:
    • Cenário A: has_transformation_error_report: true → Logar erro de sistema e alertar seu time técnico interno.
    • Cenário B: has_error_report: true → Chamar OF03, processar os erros e mostrar para o Seller no dashboard.
    • Cenário C: has_error_report: false → Marcar o lote como "Sincronizado com Sucesso".
  5. Próximo Passo: Auditoria via OF21 para garantir que o site refletiu a mudança (opcional, para amostragem).

💡 Lógica de Implementação Recomendada

  • Evite o Loop Infinito: Implemente um contador de tentativas ou um tempo máximo (ex: 15 minutos). Se após 15 minutos o status ainda for QUEUED, cancele a operação e alerte sobre uma possível instabilidade na fila da Mirakl. Isso evita que sua aplicação fique gastando recursos infinitamente.
  • Feedback Visual: Se o seu ERP tem uma tela de "Histórico de Sincronização", use os dados da OF02 para mostrar uma barra de progresso ou os contadores (offer_updated_count, offer_inserted_count) para o Seller. Isso dá segurança ao usuário.

Etapa 3.3 - OF21

3.3.1 | OF21 - Listagem e Auditoria de Ofertas

GET /api/offers

Essa API realiza uma consulta síncrona ao banco de dados de ofertas da Mirakl. Ela permite recuperar o estado atualizado de um SKU, incluindo preços, estoque, prazos e, principalmente, o status de visibilidade no KaBuM!.

Diferente das APIs de importação, a OF21 não serve para enviar dados, mas para auditar. Ela é o espelho do que o cliente vê no site. Se um produto está "sem estoque" mesmo que a importação tenha dado "Sucesso", a oferta pode estar inativa por motivos externos (ex: o produto foi desativado pelo operador). A OF21 revela a "saúde" da oferta.

📌 Parâmetros da API

  • offer_state_codes: Para filtrar apenas ofertas ativas ou inativas.
  • sku: Para buscar um item específico do Seller.
  • product_id (String): Se você quiser ver todas as ofertas vinculadas a um EAN ou ID de produto específico.

💡 Campo de alerta: inactivity_reasons

Se no retorno da requisição a flag active retornar false, a oferta não está visível para venda. A Mirakl listará neste array os motivos comerciais ou técnicos. Segue exemplo de motivos:

Motivo (Reason) O que significa? Ação Corretiva
PRODUCT_STATUS_PENDING O produto (ficha técnica) ainda está sendo avaliado pelo KaBuM!. Aguardar. A oferta só ativará automaticamente após a aprovação do produto.
PRODUCT_STATUS_INVALID O operador reprovou a ficha técnica do produto (ex: imagem ruim). Corrigir o produto via P41 e aguardar nova análise.
ZERO_QUANTITY O estoque enviado foi 0. Enviar atualização de estoque via OF24.
OFFER_STAGING A oferta está em uma fila de moderação de preço (preço suspeito). O operador do KaBuM! precisa liberar manualmente.
OFFER_OUT_OF_DATE_RANGE A data de validade da oferta expirou ou ainda não começou. Ajustar os campos available_from ou available_to.
SHOP_STATE_INVALID A loja do Seller está desativada ou suspensa. Verificar a saúde financeira/contratual do Seller com o marketplace.

⏳ Passo a passo da Auditoria

  1. Gatilho: O sistema detecta uma discrepância (ex: o Seller afirma que o produto deveria estar à venda, mas não há pedidos).
  2. Ação: O ERP executa um GET /api/offers?sku={sku_do_seller}.
  3. Análise de Dados:
    • Passo A: Checar active. Se true, a oferta está ok na Mirakl.
    • Passo B: Se false, iterar sobre o array inactivity_reasons.
  4. Alerta ao Usuario: O sistema traduz o código técnico (ex: ZERO_QUANTITY) para uma mensagem amigável no painel do ERP: "Seu produto está inativo no KaBuM! porque o estoque informado é zero."
  5. Próximo Passo: Se o erro for de dado, disparar nova OF24. Se for de aprovação, orientar o Seller a aguardar o fluxo do marketplace.

💡 Dicas de Especialista

  • Consumo de Preços (all_prices): Ao ler a OF21, você verá o campo all_prices. Fique atento, pois a Mirakl suporta "Preços Agendados". Se você vir mais de um preço, o preço que está valendo no site é aquele cujo channel é nulo (ou específico do KaBuM!) e que está dentro do intervalo de data atual.
  • Sincronização Reversa (Dica): Algumas integradoras usam a OF21 para fazer um "check-up" semanal. Elas baixam todas as ofertas e comparam com o banco de dados local do ERP para garantir que nenhum SKU "se perdeu" no meio do caminho. É uma excelente prática de segurança de dados.

API's adicionais — Ofertas

4.3.2 | OF03 - Relatório de Erros de Oferta

GET /api/offers/imports/{import}/error_report

Essa API extrai o detalhamento cirúrgico do que deu errado no lote de ofertas. Diferente dos erros de produto (que são técnicos), os erros de oferta costumam ser comerciais. A OF03 gera um CSV que aponta o erro por linha.

📌 Parâmetros da API

  • Parâmetro de Path (Obrigatório):
    import_id (Integer): Este é o ID que você recebeu no Response da OF01. Ele deve ser injetado diretamente na URL.
    Exemplo: /api/offers/imports/12345/error_report

⚙️ Funcionalidade e Lógica de Negócio

A lógica da OF03 é baseada em segmentação de erro. Ao contrário de erros de sistema (como um JSON mal formado), os erros aqui são de integridade comercial.

O que você encontrará dentro do CSV? O arquivo retornado segue a estrutura da sua planilha original, mas adiciona colunas de erro no final. As falhas mais comuns que o desenvolvedor deve tratar são:

Campo/Erro Significado
price-error / INVALID_PRICE Você tentou enviar um preço abaixo do "Preço Mínimo" estipulado pelo KaBuM! para aquela categoria ou o preço "por" está maior que o preço "de".
stock-error Quantidade enviada é negativa ou o formato do número é inválido.
sku-error / SKU_NOT_FOUND O shop_sku enviado não existe. Isso acontece muito quando a integração de Ofertas (OF01) corre mais rápido que a aprovação do Produto (P41).
logistic-error A logistic-class (classe de frete) informada não existe no cadastro do KaBuM!.
MISSING_REQUIRED_FIELD Você esqueceu de mandar o leadtime ou outro campo comercial obrigatório.

⏳ Passo a Passo do Tratamento de Erros

  1. Gatilho: A API OF02 retornou status COMPLETE e a flag has_error_report: true.
  2. Chamada: Sua aplicação monta a URL com o import_id e executa o GET.
  3. Processamento: O sistema deve ler o CSV programaticamente, identificar as linhas com falha e marcar esses SKUs no banco de dados local como "Erro de Sincronia".
  4. Alerta ao Usuário: O ERP exibe uma mensagem amigável: "O item X não teve o preço atualizado porque o valor está abaixo do mínimo permitido pelo marketplace."
  5. Próximo Passo: Após a correção, reinicie o fluxo com uma OF24 (correção rápida) ou nova OF01.

💡 Dica de Performance

Certifique-se de que sua biblioteca de requisições (Axios, Fetch, etc.) esteja preparada para receber um blob ou stream. Se você tentar ler o retorno da OF03 como um JSON comum, sua integração vai estourar um erro de parsing.

Etapa 4.1 - OR11

4.1 | OR11 - Consumo de Pedidos (Order Retrieval)

Essa API permite listar todos os pedidos do marketplace. Ela é utilizada pela integradora para "puxar" as vendas do KaBuM! para dentro do ERP do Seller, assim como para a validação e atualização de documentos e campos nos pedidos.

Diferente de sistemas que enviam um "push" (Webhook), a prática mais segura e comum na Mirakl é o Polling Incremental. Sua aplicação pergunta à API: "O que aconteceu de novo desde a minha última consulta?". Isso garante que nenhum pedido seja perdido por instabilidades momentâneas de rede.

📌 Parâmetros da API

A OR11 possui muitos filtros, mas para uma integração de alta performance, você deve focar nestes quatro:

  • order_state_codes (String): Filtra os pedidos pelo status.
    Uso Recomendado: No fluxo de importação, use WAITING_ACCEPTANCE (Pedidos pagos e prontos para serem aceitos pelo Seller).
  • start_update_date (Datetime - ISO 8601): Filtra pedidos atualizados após esta data.
    Uso Recomendado: É a base do polling incremental.
  • paginate (Boolean) & max (Integer): Controla o tamanho da resposta.
    Dica: Use max=100 para evitar payloads gigantescos que podem causar timeout.
  • order_ids: Permite uma consulta mais rápida por pedido ao invés de uma lista extensa.

⚠️ Alerta de Arquitetura: Data de Criação vs Atualização

Um erro comum é filtrar pedidos pela "Data de Criação". Não faça isso! Se um pedido foi criado às 10:00 mas o pagamento só foi aprovado às 12:00, ele pode "sumir" da sua consulta se você olhar apenas a criação.

A estratégia correta:

  1. Armazene no seu banco de dados a data/hora da última execução com sucesso (ex: 2023-10-27T14:00:00Z).
  2. Na próxima chamada, use essa data no parâmetro start_update_date.
  3. Ao receber a resposta, atualize sua variável de controle com a data da execução atual.

🚩 Lista de Falhas e Desafios Comuns na OR11

Falha/Cenário Causa Provável Ação Corretiva
Pedido "Sumido" Filtro por data de criação ou intervalo muito curto. Use sempre start_update_date e sobreponha alguns minutos (overlap) por segurança.
Conflito de Timezone A Mirakl trabalha em UTC. O ERP do Seller pode estar em GMT-3. Converta todas as datas para UTC antes de enviar o parâmetro na URL.
Pedido Duplicado O polling trouxe o mesmo pedido duas vezes devido ao overlap. Sua aplicação deve checar se o order_id já existe no banco antes de criar um novo.
429 Too Many Requests Polling em intervalos menores que 1 minuto. Respeite o limite de taxa. 5 em 5 minutos é o ideal para pedidos.

⏳ Linha do Tempo da Integração

  1. Gatilho (Timer): O serviço de agendamento do seu ERP dispara a cada 5 minutos.
  2. Consulta:
    GET /api/orders?order_state_codes=WAITING_ACCEPTANCE&start_update_date={data_ultimo_sucesso}
  3. Processamento Interno: Para cada pedido no JSON:
    • Checar se order_id já existe localmente.
    • Se não existir, criar o pedido no ERP.
    • Baixar todas as informações do pedido.
  4. Confirmação Técnica: Armazenar o ID do pedido Mirakl vinculado ao ID do pedido interno do ERP.
  5. Próximo Passo: Com o pedido salvo no ERP, o sistema deve armazenar todas as informações de pagamento essenciais para a geração de Notas Fiscais Eletrônicas (NFe) em conformidade com a Nota Técnica 2025.001 da SEFAZ.

Etapa 4.2 - NT 2025.001

4.2 | OR11 - Mapeamento Campos de Pagamento (NT 2025.001)

Esta documentação explica a estrutura e o conteúdo dos novos campos de pagamento que estarão disponíveis na API de consulta de pedidos do KaBuM!. Esses dados são essenciais para que nossos parceiros possam gerar Notas Fiscais Eletrônicas (NFe) em conformidade com a Nota Técnica 2025.001 da SEFAZ.

Todos os dados de pagamento eletrônico estarão agrupados dentro do objeto payment_details e todos os códigos foram padronizados de acordo com as tabelas oficiais da SEFAZ: Tabela de bandeiras das Operadoras de Cartão de Crédito e/ou Débito e Tabela de Meios de Pagamento.

Descrição dos Campos

A seguir, apresentamos a descrição detalhada de cada campo que pode ser retornado em nossos payloads de resposta, organizados para facilitar a compreensão e integração com nossos sistemas.

  • payment_method_code: O código padronizado pela SEFAZ que indica a forma de pagamento.
  • payment_amount: O valor total do pagamento da compra.
  • payment_indicator: Um indicador de pagamento. O valor 0 indica pagamento à vista e 1 indica pagamento a prazo (parcelado).
  • card_details: Objeto que contém os detalhes de uma transação eletrônica, como cartão de crédito, PIX ou NuPay. Ele só estará presente em pagamentos que exigem essas informações.
  • integration_type: Indica se o pagamento foi processado de forma integrada (1) ou não integrada (2).
  • acquirer_cnpj: O CNPJ da credenciadora ou da instituição de pagamento que processa a transação.
  • card_brand_code: O código da bandeira do cartão, conforme a tabela da SEFAZ. Para transações que não se enquadram em uma bandeira, o valor será 99 (Outros).
  • authorization_code: O código de autorização da transação, também conhecido como NSU ou, no caso do PIX, o E2EID.

Descrição dos Campos do Payload x Tag da NFe

Esta seção detalha como cada campo do payload da API OR11 do KaBuM! se correlaciona diretamente com as tags específicas da Nota Fiscal eletrônica (NFe), conforme exigido pela SEFAZ.

Campo do Payload (API OR11) Tag da NFe
payment_method_code <tPag>
payment_amount <vPag>
payment_indicator <indPag>
integration_type <tpIntegra>
acquirer_cnpj <CNPJ>
card_brand_code <tBand>
authorization_code <cAut>

Descrição das categorias x Tpag mapeadas no KaBuM!

Esta seção apresenta as categorias de pagamento que o KaBuM! mapeia para o campo tPag da NFe.

Categoria tPag Descrição
Cartão 3 Cartão de Crédito
Cartão 4 Cartão de Débito
Boleto 15 Boleto Bancário
Pix 17 Pagamento Instantâneo (PIX) - Dinâmico
Nupay 18 Transferência Bancária, Carteira Digital

Cenários de Pagamento e Payloads

1. PIX

Para transações via PIX, o grupo card_details é usado para fornecer os dados obrigatórios da instituição de pagamento e da autorização.

{
    "payment_details": [
        {
            "payment_method_code": "17",
            "payment_amount": 99.50,
            "payment_indicator": "0",
            "card_details": {
                "integration_type": "1",
                "acquirer_cnpj": "13121415161718",
                "authorization_code": "E119219398127391827"
            }
        }
    ]
}
  • payment_method_code: "17" indica que o pagamento foi feito via PIX – Código tabela oficial SEFAZ.
  • payment_indicator: "0" indica que foi à vista – Código tabela oficial SEFAZ.
  • O objeto card_details contém os dados para validação da transação:
    • integration_type: "1" (integrado)
    • acquirer_cnpj: CNPJ da instituição que processou o PIX.
    • authorization_code: ID de transação do PIX.
2. NuPay

Neste caso, o NuPay é tratado como um tipo de pagamento "Outros" que exige validação.

{
    "payment_details": [
        {
            "payment_method_code": "99",
            "payment_amount": 99.50,
            "payment_indicator": "0"
        }
    ]
}
  • payment_method_code: "99" indica que a forma de pagamento não se encaixa nas categorias padronizadas.
  • payment_indicator: "0" indica que o pagamento foi à vista.
  • O objeto card_details não é enviado, pois a forma como a transação NuPay é processada não exige essas informações adicionais para o XML da NFe.
3. Boleto

Para o boleto, o card_details não é necessário, pois a transação não é considerada um pagamento eletrônico imediato sob a ótica da NT 2025.001.

{
    "payment_details": [
        {
            "payment_method_code": "15",
            "payment_amount": 1076.40,
            "payment_indicator": "0"
        }
    ]
}
  • payment_method_code: "15" indica que o pagamento foi via boleto.
  • payment_indicator: "0" indica pagamento à vista.
  • Não há informações adicionais, pois a legislação não exige dados de transação eletrônica para boletos.
4. Cartão

Para pagamentos com cartão, todos os detalhes da transação são fornecidos para que o mapeamento para a NFe seja completo.

{
    "payment_details": [
        {
            "payment_method_code": "03",
            "payment_amount": 1076.40,
            "payment_indicator": "1",
            "card_details": {
                "integration_type": "1",
                "acquirer_cnpj": "01234567000189",
                "card_brand_code": "02",
                "authorization_code": "987654321"
            }
        }
    ]
}
  • payment_method_code: "03" indica que o pagamento foi com cartão de crédito.
  • payment_indicator: "1" indica que o pagamento foi a prazo (parcelado).
  • O objeto card_details fornece todos os dados necessários: o integration_type (1), o acquirer_cnpj, o card_brand_code (02 para Mastercard) e o authorization_code.

Etapa 4.3 - OR31 (Parte I)

4.3 | OR31 - Atualizar campos personalizados dos pedidos

Essa API permite atualizar valores em campos que foram criados sob medida pelo KaBuM! dentro da plataforma Mirakl. Esses campos são chamados de Custom Fields e servem para armazenar informações que o padrão global da Mirakl não prevê, facilitando a leitura pelas nossas automações.

No KaBuM!, mesmo enviando o XML via OR74, os dados de nota fiscal e recebimento são campos adicionais. A OR31 escreve esses dados no "corpo" do pedido para permitir buscas rápidas, automações logísticas e validações de segurança.

Importante: O envio desses campos é vital, pois o job de recebimento do KaBuM! valida essas informações para prosseguir com o fluxo do pedido.

📌 Parâmetros da API

  • Parâmetro de Path (Obrigatório):
    order_id (String): O ID do pedido (ex: 123-A).
  • Parâmetro de Body (Obrigatório - JSON):
    order_custom_fields (Array): Lista de objetos contendo code (ID do campo) e value (conteúdo).

Corpo de requisição

Para atualizar os campos de nota fiscal, utilize os seguintes Additional Fields no payload:

  • emission-date-nfe (Texto): Data de emissão (Ex: 15/11/2020).
  • number-nfe (Texto): Número da nota.
  • serial-number-nfe (Texto): Série da nota.
  • nfe-key (Texto): Chave de acesso da NFe.
💡 Observação de Payload

Deve-se seguir a estrutura de lista contendo os objetos de campo customizado:

{
  "order_custom_fields": [
    {
      "code": "chave-nfe",
      "value": "35231000123456000188550010000001231234567890"
    },
    {
      "code": "serie-nfe",
      "value": "001"
    }
  ]
}

⏳ Linha do Tempo da Integração

  1. Gatilho (ERP): Nota Fiscal autorizada pela SEFAZ seguindo a NT2025.001. O ERP já possui Chave, Série e Número.
  2. Preparação: O sistema mapeia os códigos de campos exigidos pelo KaBuM!.
  3. Execução: Chamada PUT /api/orders/{order_id}/custom_fields.
    Nota: Utilize o método PUT, pois estamos alterando um recurso existente.
  4. Resposta: 204 No Content indica sucesso.
  5. Próximo passo: Prosseguir para o upload do arquivo físico na OR74.

🚩 Lista de Falhas e Desafios Comuns na OR31

Falha/Cenário Causa Provável Ação Corretiva
Erro 400 - Unknown Custom Field O code no JSON não existe no Marketplace. Valide o ID exato no painel Mirakl. Case-sensitive importa.
Erro 400 - Invalid Value Tipo de dado incorreto ou excesso de caracteres. Valide se o campo espera números ou texto antes de enviar.
Campo não atualiza Campo definido como "Read Only" pelo operador. Verifique as permissões de escrita do campo com o suporte.
Erro 403 - Forbidden Status do pedido não permite mais edições. Chame a OR31 enquanto o pedido estiver em SHIPPING.

💡 Por que usar a OR31 se já vou enviar a NF na OR74?

Pense na OR31 como dados para a máquina e na OR74 como dados para o humano.

A OR31 alimenta as regras de automação do KaBuM!. Se os dados da nota constarem e o recebimento for confirmado, o sistema altera o status automaticamente.

Dica de Especialista: Faça um GET /api/orders prévio para ver quais campos customizados o pedido já traz. Isso evita erros de mapeamento no PUT.

Etapa 4.4 - OR74

4.4 | OR74 - Upload de Documentos do Pedido (Anexo de NF-e)

Esta API permite o upload de arquivos binários vinculados a um pedido específico. No cenário brasileiro, ela é utilizada quase exclusivamente para o envio do XML da NF-e (item obrigatório para a saúde da integração).

Diferencial Técnico: Diferentemente da maioria das APIs da Mirakl baseadas em JSON, a OR74 trabalha com o padrão multipart/form-data. O envio é um "pacote" contendo arquivos físicos reais.

POST /api/orders/{order_id}/documents?type=INVOICE&shop_id={id}

📌 Parâmetros da API

  • Parâmetro de Path (Obrigatório):
    order_id (String): O ID do pedido Mirakl (ex: 123-A).
  • Parâmetros de Query (Obrigatórios):
    type (String): Define a natureza do arquivo. Para faturamento, utilize obrigatoriamente INVOICE.
    shop_id (Integer): O identificador da sua loja.
  • Parâmetro de Body (Obrigatório - Multipart):
    files (Binary): O arquivo propriamente dito.
    Formatos aceitos: csv, doc, xls, xlsx, ppt, pdf, odt, ods, odp, txt, rtf, png, jpg, gif, zpl, mov, mp4.

Dica de Especialista: Embora a API permita múltiplos arquivos, recomendamos realizar chamadas separadas (uma para o XML e outra para o PDF). Isso facilita rastrear se apenas um dos arquivos está corrompido ou fora do padrão.

🚩 Lista de Falhas e Desafios Comuns na OR74

Falha/Cenário Causa Provável Ação Corretiva
Erro 400 - File extension not allowed Envio de extensões proibidas (ex: .zip, .txt). Garanta que o arquivo seja estritamente .xml ou .pdf.
Erro 413 - Request Entity Too Large Arquivo excede o limite (comum em PDFs com muitas imagens). Otimize o arquivo. A Mirakl limita o upload a 5MB.
Erro 404 - Order not found ID de pedido incorreto ou pedido expurgado. Use o order_id (ex: 123-A) e nunca o commercial_id.
Documento anexado mas não visível O parâmetro type foi enviado diferente de INVOICE. Valide se type=INVOICE consta na URL da requisição.

⏳ Linha do Tempo da Integração

  1. Gatilho (Sucesso na OR31): A integração confirmou o envio dos dados de texto (chave/série) via OR31.
  2. Preparação do Buffer: O sistema lê o arquivo XML/PDF e o prepara em um stream de dados (evite carregar arquivos gigantes inteiros na memória RAM).
  3. Execução: Chamada POST /api/orders/{order_id}/documents?type=INVOICE.
  4. Resposta: 204 No Content. A Mirakl associou o documento ao pedido com sucesso.
  5. Próximo Passo: Com a NF-e vinculada, o status do pedido permite informar o rastreio (OR23) e o despacho (OR24).

💡 Lógica de Implementação Recomendada

  • Content-Type específico: No header do multipart, informe o tipo correto:
    • Para XML: application/xml
    • Para PDF: application/pdf
  • Resiliência (Gargalo): Uploads consomem mais recursos. Implemente uma Queue (Fila). Se o upload falhar por oscilação de rede, o robô deve tentar novamente até receber o status 204.
  • UX do Cliente: Se você enviar ambos (XML e PDF) com type=INVOICE, a Mirakl agrupa-os. Isso é ideal para o KaBuM!, pois o cliente baixa o DANFE para conferir e o XML para fins fiscais.

Etapa 5.1 - SH21

5.1 | SH21 - Listagem de Transportadoras (Carriers)

Antes do envio das informações de rastreio e da alteração do status para "Enviado", é necessário mapear as transportadoras cadastradas na Mirakl. Esta API retorna a lista completa de todas as operadoras logísticas homologadas pelo KaBuM!, fornecendo o code (ID técnico) e o label (nome amigável).

Por que isso é crítico? A Mirakl utiliza o código da transportadora para gerar os links de rastreio automáticos. Se for enviado um código inexistente, a plataforma bloqueia a operação de envio para evitar que o cliente fique sem informação de rastreamento.

Exemplo de Resposta (JSON):

{
  "carriers": [
    {
      "code": "CORREIOS_SEDEX",
      "label": "Correios - SEDEX"
    },
    {
      "code": "LOGGI",
      "label": "Loggi Tecnologia"
    }
  ]
}

O valor do campo code deve ser utilizado obrigatoriamente no campo carrier_code da API OR23.

🚩 Lista de Falhas e Desafios Comuns na SH21

Falha/Cenário Causa Provável Ação Corretiva
"Carrier code not found" na OR23 Tentativa de enviar o label (nome amigável) em vez do code (ID técnico). Garanta que o sistema envie o valor do campo code (ex: CORREIOS_SEDEX).
Transportadora Faltante O KaBuM! homologou uma nova transportadora não sincronizada no seu ERP. Execute uma nova chamada na SH21 para atualizar sua tabela de "De/Para".
Diferença de Case (Maiúsculas) Enviar "correios" quando o código correto é CORREIOS. O código é case-sensitive. Respeite a grafia exata retornada pela API.
Carrier Inativo Transportadora desabilitada para esse Seller específico. Verifique com o suporte do KaBuM! se o Seller possui contrato ativo/liberado.

⏳ Linha do Tempo: O Mapeamento (De/Para)

Esta API faz parte do Setup e da Manutenção Periódica; não deve ser chamada a cada pedido.

  1. Gatilho (Setup): O desenvolvedor cria uma tabela no banco de dados chamada Mapeamento_Transportadoras.
  2. Ação: O sistema consome a SH21 e popula essa tabela com os códigos da Mirakl.
  3. Intervenção do Seller: No painel do ERP, o Seller associa: "Meu 'SEDEX' interno corresponde ao 'CORREIOS_SEDEX' na Mirakl".
  4. Uso Operacional: No despacho, o ERP consulta essa tabela para enviar o código correto na OR23.
  5. Manutenção: Recomenda-se rodar a SH21 uma vez por semana para capturar novas homologações.

💡 Mapeamento Inteligente

Dica de UX: Ao construir a interface de mapeamento, use um Dropdown (lista de seleção). Exiba o label para o Seller, mas armazene o code no valor do campo. Isso elimina 100% dos erros de digitação e case.

Transportadora de Contingência (Fallback):

Se o Seller usar frete próprio ou uma transportadora local que não consta na lista, é permitido o envio do campo vazio. Entretanto, o ideal é solicitar a homologação dessa nova transportadora ao marketplace para garantir a melhor experiência ao cliente.

Etapa 5.2 - OR23

5.2 | OR23 - Informar Dados de Rastreio (Tracking) para um Pedido

Nesta etapa, utilizaremos a API OR23 para vincular as informações logísticas (transportadora, número de rastreio e URL) ao pedido. Diferente de outras plataformas, na Mirakl a OR23 não altera o status do pedido para "Enviado"; ela apenas anexa os dados necessários para que a OR24 possa ser executada com sucesso.

Regra de Negócio: A Mirakl exige que o rastreio seja informado antes da confirmação de envio para garantir que nenhum pedido seja marcado como "despachado" sem que haja uma forma real de o cliente monitorar a entrega.

PUT /api/orders/{order_id}/tracking

📌 Parâmetros da API (JSON)

  • Parâmetro de Path (Obrigatório):
    order_id (String): O ID do pedido Mirakl (ex: 123-A).
  • Parâmetros de Body (Obrigatórios):
    carrier_code (String): O código técnico da transportadora obtido na SH21.
    tracking_number (String): O código de rastreio fornecido pela transportadora.
  • Parâmetro de Body (Opcional / Recomendado):
    tracking_url (String): Link direto para a página de rastreio.
    Nota: No KaBuM!, este campo só é obrigatório se o carrier_code for enviado vazio. Se informar o código, a Mirakl tenta gerar a URL automaticamente.

Exemplo de Payload:

{
  "carrier_code": "CORREIOS_SEDEX",
  "tracking_number": "OI123456789BR",
  "tracking_url": "https://rastreamento.correios.com.br/app/index.php?codigo=OI123456789BR"
}

🚩 Lista de Falhas e Desafios Comuns na OR23

Falha/Cenário Causa Provável Ação Corretiva
"Carrier code not found" O código enviado não existe na lista da SH21. Verifique erros de digitação ou o mapeamento "De/Para" no banco do ERP.
"Duplicate tracking number" A Mirakl proíbe reutilizar o mesmo rastreio nos últimos 30 dias para o mesmo Seller. Gere uma nova etiqueta ou verifique se a transportadora reciclou um código antigo.
URL de Rastreio Inválida A URL não começa com http ou https. Garanta que o link seja completo e funcional.
Erro 403 - Forbidden Pedido em status que não permite tracking (ex: STAGING) ou cancelado. Certifique-se de que o pedido está em status de expedição (SHIPPING).

💡 Lógica de Implementação para o Desenvolvedor

  • Validação de Duplicidade: Implemente um alerta no ERP para que, caso a OR23 retorne erro de duplicidade, o expedidor seja notificado imediatamente para trocar a etiqueta.
  • Montagem de URL Dinâmica: Se a transportadora não fornece a URL, mas tem um padrão fixo, seu código deve concatenar a string automaticamente (ex: site.com/rastreio?id=[NUMERO]).
  • Sequência de Segurança: Nunca dispare a OR24 sem confirmar o status 204 da OR23. Ignorar esse erro deixará o pedido "preso" no status de pendente no Marketplace.

⏳ Linha do Tempo: O Vínculo Logístico

  1. Gatilho (ERP): Nota Fiscal enviada (OR74) e pacote etiquetado com código de rastreio gerado.
  2. Consulta ao Mapeamento: O ERP busca o carrier_code correspondente à transportadora (ex: "Loggi" → LOGGI).
  3. Execução: Chamada PUT /api/orders/{order_id}/tracking.
  4. Resposta: 204 No Content. Dados validados e anexados.
  5. Próximo Passo: Chamar imediatamente a OR24 para mudar o status para SHIPPED.

Etapa 5.3 - OR24

5.3 | OR24 - Validar/Atualizar o Status do Envio de um Pedido

A requisição deste endpoint altera o status do pedido de SHIPPING (Aguardando Envio) para SHIPPED (Enviado). Este é o gatilho oficial que dispara o e-mail de confirmação para o cliente final e atualiza o dashboard do KaBuM!.

Diferentemente da OR23, que apenas anexa dados, a OR24 é uma API de mudança de estado. A plataforma Mirakl valida se todos os pré-requisitos — como o rastreio informado na OR23 e a nota fiscal enviada na OR74 — foram cumpridos. Caso algum dado esteja ausente, o pedido não altera seu status e continua contabilizando atraso no SLA do Seller.

PUT /api/orders/{order_id}/ship

📌 Parâmetros da API

  • Parâmetro de Path (Obrigatório):
    order_id (String): O ID do pedido Mirakl (ex: 123-A).
  • Observação Técnica: Geralmente, esta API não exige um corpo (body) em formato JSON, pois atua estritamente como um gatilho de status. O método utilizado é o PUT.

🚩 Lista de Falhas e Desafios Comuns na OR24

Falha/Cenário Causa Provável Ação Corretiva
"Shipping info missing" Tentativa de chamar a OR24 sem que a OR23 tenha sido processada com sucesso. Garanta que a OR23 retornou 204 antes de disparar a OR24.
"Invalid order state" O pedido já está como SHIPPED, CANCELLED ou ainda está em STAGING. Verifique o status atual do pedido via OR11 antes de tentar mudar o estado.
Erro 403 - Forbidden O prazo de postagem expirou e o pedido foi cancelado automaticamente pelo sistema. Monitore o shipping_deadline para evitar perdas de pedidos por atraso.
Documento Faltante O KaBuM! exige a NF (OR74) antes do envio e ela não foi enviada. Verifique se o upload da NF na OR74 foi concluído com sucesso.

💡 Dica de Resiliência: Race Condition

Devido à natureza assíncrona da Mirakl, às vezes a OR23 demora alguns milissegundos para "propagar" a informação de rastreio.

Dica: Se a OR24 retornar erro de "Shipping info missing" imediatamente após a OR23, implemente um retry automático de 3 tentativas com intervalo de 5 segundos. Isso resolve 99% dos problemas de corrida de processos.

Segurança Operacional

Vários indicadores do Seller no KaBuM! são afetados diretamente pela agilidade no envio da OR24. Pedidos com atraso na confirmação impactam negativamente o score da loja, podendo levar à perda da Buy Box ou até suspensão da conta. Mantenha um log rigoroso de cada chamada bem-sucedida a esta API.

⏳ Linha do Tempo: O Ponto de Não Retorno

  1. Gatilho (Sucesso na OR23): O sistema confirmou que o código de rastreio foi aceito sem erros de duplicidade.
  2. Verificação Final: O ERP checa se o pacote já foi fisicamente bipado/coletado pela transportadora.
  3. Execução: Chamada PUT /api/orders/{order_id}/ship.
  4. Resposta: 204 No Content.
  5. O que isso significa? O pedido agora é oficialmente considerado "Em Trânsito".
  6. Próximo Passo: O fluxo de expedição termina aqui. O sistema deve agora monitorar mensagens de pós-venda (M11) ou possíveis incidentes.

Etapa 5.4 - OR31 (Parte II)

5.4 | OR31 - Confirmação de Recebimento (Received = true)

Esta é uma das etapas mais importantes para o fechamento do fluxo de produtos e pedidos. No KaBuM!, o status de "Recebido" via OR31 funciona como o gatilho final que confirma ao sistema que o consumidor está com o produto em mãos, impactando diretamente no repasse financeiro e na reputação do Seller.

Ao alterar o valor de false para true, a integradora comunica oficialmente ao marketplace que a transportadora concluiu a entrega. Embora o pedido já esteja como SHIPPED, o marketplace depende desse input para encerrar o ciclo operacional.

PUT /api/orders/{order_id}/custom_fields

📌 Parâmetros da API

  • Parâmetro de Path (Obrigatório):
    order_id (String): O ID do pedido Mirakl (ex: 123-A).
  • Parâmetro de Body (JSON):
    order_additional_fields (Array): Lista contendo os campos de recebimento e a data de entrega.

Exemplo de Payload de Recebimento:

{
  "order_additional_fields": [
    {
      "code": "received",
      "type": "BOOLEAN",
      "value": "true"
    },
    {
      "code": "dt-ent",
      "type": "DATE",
      "value": "2023-10-27T10:00:00Z"
    }
  ]
}

⚠️ ATENÇÃO: Pré-requisitos de Status

Para que a mudança de status ocorra, os campos de Nota Fiscal (enviados na Parte I da OR31) devem estar preenchidos:

  • emission-date-nfe, number-nfe, serial-number-nfe e nfe-key.
  • O campo received deve ser definido como true.

⏳ Linha do Tempo: A Entrega Final

  1. Gatilho (Transportadora): O sistema de rastreio (webhook ou leitura de arquivos NOTFIS) confirma a entrega ao destinatário.
  2. Preparação: O ERP identifica o pedido e monta o payload definindo received: true e a data em dt-ent.
  3. Execução: Chamada PUT /api/orders/{order_id}/custom_fields.
  4. Resposta: 204 No Content.
  5. Próximo Passo: O pedido move-se automaticamente para RECEIVED ou CLOSED no ecossistema Mirakl.

🚩 Lista de Falhas e Desafios Comuns

Falha/Cenário Causa Provável Ação Corretiva
Status Não Atualiza O pedido ainda não está como SHIPPED. Garanta a ordem cronológica: primeiro a OR24 (Despacho), depois a OR31 (Entrega).
Código do Campo Errado Uso de entregue ou similar em vez de received. Use exatamente o código received conforme configurado no painel do KaBuM!.
Data Incompatível Data de recebimento (dt-ent) anterior à data de envio. Valide a consistência temporal no ERP antes do disparo.
Erro de Tipagem Enviar o valor como String ("true") em campo Booleano. Verifique se o campo espera o tipo BOOLEAN puro ou TEXT.

💡 Lógica de Implementação: Fluxo de Caixa

Esta API é a que "destrava" o repasse financeiro. Sem ela, o marketplace pode segurar o pagamento até que o prazo estimado expire.

Dica: Automatize este processo vinculando seu integrador de rastreio diretamente a esta chamada. Recebeu o "Entregue" no WMS/ERP? Notifique a Mirakl no mesmo segundo.