Skip to content

📥 Importação de Grupos de Pedido

📋 Visão Geral

O módulo de Importação de Grupos de Pedido permite criar grupos de pedido em massa por meio de um arquivo CSV.

Cada linha do CSV representa um item de pedido. Linhas com o mesmo Order group code são agrupadas em um único grupo — quando os itens pertencerem a armazéns diferentes, são criadas remessas separadas dentro do mesmo grupo.

O limite máximo é de 2.500 linhas e 4 MB por arquivo.

🔄 Entidades Envolvidas

Cada importação cria um ou mais Grupos de Pedido (OrderGroup), cada um podendo conter múltiplas Remessas (Order) com seus respectivos Itens (OrderItem).

O Cliente (Customer) e seus Endereços de entrega e cobrança são criados ou vinculados automaticamente a partir das colunas do CSV.

📌 Notas e Considerações

  • Utilize o endpoint GET /orders/groups/import/example para baixar o modelo CSV com o cabeçalho correto antes de montar o arquivo.
  • Grupos com erro são incluídos na resposta com o campo error preenchido — os demais são criados normalmente, sem interrupção do lote.
  • O campo Customer trade name é obrigatório para pessoa jurídica e proibido para pessoa física.
  • Se os endereços de entrega e cobrança forem iguais, preencha ambos com os mesmos valores.

📥 Importação de Grupos de Pedido

POST /orders/groups/import

Importa grupos de pedido em massa a partir de um arquivo CSV

📋 Descrição

Endpoint que permite importar grupos de pedido em massa por meio de um arquivo CSV, criando automaticamente os grupos de pedido, remessas, itens, cliente e endereços associados.

O arquivo deve seguir o modelo disponibilizado no endpoint de exemplo (GET /orders/groups/import/example).

> Cada linha do CSV representa um item de pedido. Múltiplas linhas com o mesmo Order group code são agrupadas em um único grupo de pedido. Quando os itens pertencerem a armazéns diferentes (campo Storage code), serão criadas remessas separadas dentro do mesmo grupo.

O limite máximo é de 2.500 linhas por arquivo.

🔐 Permissão

  • UserAuth — autenticação do usuário administrativo
  • ORDER_WRITE — escopo de permissão para gerenciamento de pedidos

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
AuthorizationBearer {token}Token de autenticação do usuário
Content-Typemultipart/form-dataTipo do conteúdo

📦 Body (multipart/form-data)

ParâmetroTipoObrigatórioDescrição
filefile✅ SimArquivo CSV com os grupos de pedido — máximo 4 MB, mimetype: text/csv

📄 Estrutura do Arquivo CSV

Uma linha = um item de pedido. Agrupe múltiplas linhas pelo mesmo Order group code para criar um grupo com vários itens ou armazéns.

🗂️ Dados do Grupo de Pedido

ColunaTipoObrigatórioDescrição
Order group codestring✅ SimCódigo único do grupo — identifica o grupo de pedido. Linhas com o mesmo código são agrupadas
Sales channel domainstring✅ SimDomínio do canal de venda onde o pedido foi realizado — ex: minhaloja.com.br
Currencystring✅ SimCódigo da moeda — ex: BRL
Created atdatetime✅ SimData e hora de criação do grupo — formato: YYYY-MM-DD HH:MM:SS
Issued atdatetime✅ SimData e hora de emissão do pedido — formato: YYYY-MM-DD HH:MM:SS

🚚 Dados da Remessa (Pedido)

ColunaTipoObrigatórioDescrição
Storage codestring✅ SimCódigo do armazém responsável por atender esta remessa
Order status codestring✅ SimCódigo do status do pedido — deve existir na plataforma
Tracking codestring❌ NãoCódigo de rastreamento da entrega
Shipping carrierstring❌ NãoNome da transportadora
Invoice numberstring❌ NãoNúmero da nota fiscal
Invoice keystring❌ NãoChave de acesso da nota fiscal (NFe)
Invoice seriestring❌ NãoSérie da nota fiscal
Invoice urlstring❌ NãoURL de acesso à nota fiscal
Order total valuedecimal✅ SimValor total da remessa — ex: 349.90
Order shipping valuedecimal✅ SimValor do frete da remessa — ex: 22.50

🛍️ Dados do Item

ColunaTipoObrigatórioDescrição
Order item skustring✅ SimSKU do produto — deve existir na plataforma
Order item namestring✅ SimNome do produto no pedido
Order item quantitydecimal✅ SimQuantidade do item — deve ser maior que zero
Order item unit valuedecimal✅ SimValor unitário do item — ex: 349.90

👤 Dados do Cliente

ColunaTipoObrigatórioDescrição
Customer name corporate namestring✅ SimNome completo (pessoa física) ou razão social (pessoa jurídica)
Customer trade namestring⚠️ CondicionalNome fantasia — obrigatório quando Customer is corporate for true; proibido quando for false
Customer emailstring✅ SimE-mail do cliente
Customer birthdatestring❌ NãoData de nascimento — formato: YYYY-MM-DD
Customer phonestring✅ SimTelefone do cliente
Customer is corporateboolean✅ Simtrue para pessoa jurídica, false para pessoa física
Customer genderstring✅ SimGênero: male, female ou undefined
Customer documentstring❌ NãoCPF (pessoa física) ou CNPJ (pessoa jurídica)
Customer document 2string❌ NãoRG (pessoa física) ou Inscrição Estadual (pessoa jurídica)

🏠 Endereço de Entrega

ColunaTipoObrigatórioDescrição
Delivery address zip codestring✅ SimCEP do endereço de entrega
Delivery address country codestring✅ SimCódigo do país no formato alpha-3 — ex: BRA
Delivery address streetstring✅ SimLogradouro
Delivery address districtstring✅ SimBairro
Delivery address numberstring✅ SimNúmero
Delivery address citystring✅ SimCidade
Delivery address statestring✅ SimNome completo do estado
Delivery address state codestring✅ SimCódigo do estado — ex: BR-SP
Delivery address complementstring❌ NãoComplemento
Delivery address recipientstring✅ SimNome do destinatário

🧾 Endereço de Cobrança

> Se os endereços de entrega e cobrança forem iguais, preencha ambos com os mesmos valores.

ColunaTipoObrigatórioDescrição
Billing address zip codestring✅ SimCEP do endereço de cobrança
Billing address country codestring✅ SimCódigo do país no formato alpha-3 — ex: BRA
Billing address streetstring✅ SimLogradouro
Billing address districtstring✅ SimBairro
Billing address numberstring✅ SimNúmero
Billing address citystring✅ SimCidade
Billing address statestring✅ SimNome completo do estado
Billing address state codestring✅ SimCódigo do estado — ex: BR-SP
Billing address complementstring❌ NãoComplemento
Billing address recipientstring✅ SimNome do destinatário

💡 Exemplo de Requisição

1curl --request POST \
2 --url '{{MAIN_URL}}/orders/groups/import' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI' \
4 --header 'Content-Type: multipart/form-data' \
5 --form 'file=@order-groups.csv'

✅ Resposta de Sucesso

HTTP Status: 200 OK

Retorna um array com o resultado de cada grupo de pedido processado. Grupos com erro são incluídos no resultado com o campo error preenchido — os demais são criados normalmente.

1{
2 "status": true,
3 "data": [
4 {
5 "externalId": "PED-2026-001",
6 "orderGroupId": 142,
7 "error": null
8 },
9 {
10 "externalId": "PED-2026-002",
11 "orderGroupId": null,
12 "error": "UAPPI_STORE_ORDER_DUPLICATED_ORDER_GROUP_CODE"
13 }
14 ]
15}

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Erros Gerais do Arquivo

Código InternoHTTPDescrição
UAPPI_CORE_IMPORT_FILE_HEADER_REQUIRED400❌ O arquivo não possui cabeçalho
UAPPI_CORE_IMPORT_FILE_REQUIRED_FIELDS400❌ O arquivo não possui todos os campos obrigatórios
UAPPI_CORE_IMPORT_FILE_LINE_LIMIT400❌ O arquivo excede o limite de 2.500 linhas

Erros por Linha (campo error)

Código do ErroDescrição
UAPPI_STORE_ORDER_DUPLICATED_ORDER_GROUP_CODE❌ Código de grupo já existe na plataforma
UAPPI_STORE_INVALID_ORDER_CURRENCY❌ Moeda informada inválida
UAPPI_STORE_CUSTOMER_REQUIRED_TRADE_NAME❌ Nome fantasia obrigatório para pessoa jurídica
UAPPI_STORE_CUSTOMER_MISSING_TRADE_NAME❌ Nome fantasia não permitido para pessoa física
UAPPI_STORE_CUSTOMER_INVALID_GENDER❌ Gênero inválido — use male, female ou undefined
UAPPI_STORE_CUSTOMER_INVALID_BIRTHDATE❌ Data de nascimento em formato inválido — use YYYY-MM-DD
UAPPI_STORE_ORDER_INVALID_ADDRESS❌ Endereço inválido — entrega e cobrança são obrigatórios
UAPPI_STORE_CUSTOMER_ADDRESS_COUNTRY_NOT_FOUND❌ Código de país não encontrado
UAPPI_STORE_CUSTOMER_ADDRESS_STATE_NOT_FOUND❌ Código de estado não encontrado para o país informado
UAPPI_STORE_PRODUCT_NOT_FOUND❌ SKU do produto não encontrado na plataforma
UAPPI_STORE_ORDER_INVALID_ITEM_QUANTITY❌ Quantidade do item deve ser maior que zero
UAPPI_STORE_STORAGE_NOT_FOUND❌ Código do armazém não encontrado na plataforma

📥 Exemplo de Arquivo para Importação de Grupos de Pedido

GET /orders/groups/import/example

Retorna o arquivo CSV de exemplo para importação de grupos de pedido

📋 Descrição

Endpoint responsável por retornar um arquivo CSV de exemplo para importação de grupos de pedido.

O arquivo contém o cabeçalho com todas as colunas obrigatórias do modelo de importação, servindo como referência para montagem e validação do arquivo antes do envio.

Utilize este arquivo como base para preparar sua planilha — preencha a partir da segunda linha, mantendo o cabeçalho intacto.

🔐 Permissão

  • UserAuth — autenticação do usuário administrativo
  • ORDER_READ — escopo de permissão para leitura de pedidos

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
AuthorizationBearer {token}Token de autenticação do usuário

💡 Exemplo de Requisição

1curl --request GET \
2 --url '{{MAIN_URL}}/orders/groups/import/example' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI' \
4 --output order-group-example.csv

✅ Resposta de Sucesso

HTTP Status: 200 OK

Content-Type: application/octet-stream

Content-Disposition: attachment; filename="order-example.csv"

O arquivo retornado contém o seguinte cabeçalho:

1Order group code,Sales channel domain,Currency,Created at,Issued at,Storage code,Order status code,Tracking code,Shipping carrier,Invoice number,Invoice key,Invoice serie,Invoice url,Order total value,Order shipping value,Order item sku,Order item name,Order item quantity,Order item unit value,Customer name corporate name,Customer trade name,Customer email,Customer birthdate,Customer phone,Customer is corporate,Customer gender,Customer document,Customer document 2,Delivery address zip code,Delivery address country code,Delivery address street,Delivery address district,Delivery address number,Delivery address city,Delivery address state,Delivery address state code,Delivery address complement,Delivery address recipient,Billing address zip code,Billing address country code,Billing address street,Billing address district,Billing address number,Billing address city,Billing address state,Billing address state code,Billing address complement,Billing address recipient

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código do ErroHTTPDescrição
UAPPI_STORE_IMPORT_MODEL_NOT_FOUND404Modelo de importação não encontrado

📥 Importação de Pedidos em JSON

POST /orders/groups/import/json

Importa grupos de pedidos em lote via payload JSON

📋 Descrição

Endpoint administrativo responsável por importar grupos de pedidos em lote via JSON.

🔐 Permissão

  • UserAuth — autenticação do usuário administrativo
  • ORDER_WRITE — escopo de permissão para gerenciamento de pedidos
  • 📝 Parâmetros

    ⚠️ Regras Importantes

  • Limite máximo por requisição: 100 grupos em orderGroups;
  • Pagamento é obrigatório por grupo em payments;
  • Campos obrigatórios de pagamento: type, value, status, label;
  • payment_option_id é persistido como 0;
  • integration_name é persistido como internal;
  • orders[].statusCode é mapeado diretamente por order_status.code;
  • Alterações de valor (discount e addition) são enviadas no nível de remessa em orders[].values e rateadas entre itens antes da persistência;
  • Idempotência por orderGroups[].code: grupos já existentes ou repetidos na mesma requisição retornam erro por grupo;
  • A persistência do JSON é síncrona;
  • A moeda deve ser informada como seu código alfa-3, exemplos: BRL, USD, EUR, GBP.

🏷️ Headers Obrigatórios

HeaderValorDescrição
AuthorizationBearer {token}Token de autenticação do usuário
Content-Typeapplication/jsonTipo do conteúdo

📦 Parâmetros do Corpo

CampoTipoObrigatórioDescrição
orderGroupsarraySimLista de grupos de pedido. Máximo: 100 itens.
orderGroups[].codestringSimCódigo único do grupo para idempotência. Máximo: 255 caracteres.
orderGroups[].salesChannelDomainstringSimDomínio do canal de venda. Máximo: 255 caracteres.
orderGroups[].currencystringSimMoeda do pedido (ISO 4217). Máximo: 3 caracteres. Ex: BRL.
orderGroups[].issuedAtstringSimData de emissão no formato Y-m-d H:i:s.
orderGroups[].customerobjectSimDados do cliente.
orderGroups[].customer.customerNameCorporateNamestringSimNome ou Razão Social. Máximo: 255 caracteres.
orderGroups[].customer.customerTradeNamestringNãoNome Fantasia. Máximo: 255 caracteres.
orderGroups[].customer.customerEmailstringSimE-mail válido do cliente. Máximo: 255 caracteres.
orderGroups[].customer.customerBirthdatestringNãoData de nascimento. Máximo: 20 caracteres.
orderGroups[].customer.customerPhonestringSimTelefone de contato. Máximo: 50 caracteres.
orderGroups[].customer.customerIsCorporatebooleanSimIndica se é pessoa jurídica (true) ou física (false).
orderGroups[].customer.customerGenderstringSimGênero do cliente. Valores aceitos: male, female, undefined.
orderGroups[].customer.customerDocumentstringSimCPF ou CNPJ (apenas números). Máximo: 100 caracteres.
orderGroups[].customer.customerDocument2stringNãoRG ou Inscrição Estadual. Máximo: 100 caracteres.
orderGroups[].addressesarraySimLista de endereços. Mínimo: 1, Máximo: 2.
orderGroups[].addresses[].customerAddressTypestringSimTipo do endereço. Valores aceitos: both, delivery, billing.
orderGroups[].addresses[].addressZipCodestringSimCEP do endereço. Máximo: 20 caracteres.
orderGroups[].addresses[].addressCountryCodestringSimCódigo do país (alfa-3). Máximo: 3 caracteres. Ex: BRA.
orderGroups[].addresses[].addressStreetstringSimLogradouro/Rua. Máximo: 255 caracteres.
orderGroups[].addresses[].addressDistrictstringSimBairro. Máximo: 255 caracteres.
orderGroups[].addresses[].addressNumberstringSimNúmero. Máximo: 50 caracteres.
orderGroups[].addresses[].addressCitystringSimCidade. Máximo: 255 caracteres.
orderGroups[].addresses[].addressStatestringSimNome do Estado. Máximo: 255 caracteres.
orderGroups[].addresses[].addressStateCodestringSimCódigo do Estado. Máximo: 10 caracteres. Ex: BR-SP ou BR-RJ.
orderGroups[].addresses[].addressComplementstringNãoComplemento do endereço. Máximo: 255 caracteres.
orderGroups[].addresses[].addressRecipientstringSimNome do destinatário. Máximo: 255 caracteres.
orderGroups[].ordersarraySimLista de remessas/pedidos do grupo. Mínimo: 1 item.
orderGroups[].orders[].storageCodestringSimCódigo do armazém de origem. Máximo: 100 caracteres.
orderGroups[].orders[].statusCodestringSimCódigo de status conforme a listagem de status de pedido. Máximo: 100 caracteres.
orderGroups[].orders[].trackingCodestringNãoCódigo de rastreio da remessa. Máximo: 255 caracteres.
orderGroups[].orders[].trackingUrlstringNãoURL de rastreio da remessa. Máximo: 255 caracteres.
orderGroups[].orders[].reverseLogisticsCodestringNãoCódigo de logística reversa da remessa. Máximo: 255 caracteres.
orderGroups[].orders[].shippingCarrierstringNãoNome da transportadora. Máximo: 255 caracteres.
orderGroups[].orders[].invoiceobjectNãoDados da nota fiscal da remessa.
orderGroups[].orders[].invoice.numberstringNãoNúmero da nota fiscal. Máximo: 255 caracteres.
orderGroups[].orders[].invoice.keystringNãoChave de acesso da nota fiscal (44 dígitos). Máximo: 255 caracteres.
orderGroups[].orders[].invoice.seriestringNãoSérie da nota fiscal. Máximo: 255 caracteres.
orderGroups[].orders[].invoice.urlstringNãoURL do XML ou PDF da nota. Máximo: 255 caracteres.
orderGroups[].orders[].values.shippingValuedecimalSimValor de frete. Precisão: decimal:0,6.
orderGroups[].orders[].values.discountValuedecimalSimValor de desconto da remessa. Precisão: decimal:0,6.
orderGroups[].orders[].values.additionValuedecimalSimValor de acréscimo da remessa. Precisão: decimal:0,6.
orderGroups[].orders[].itemsarraySimLista de itens da remessa. Mínimo: 1 item.
orderGroups[].orders[].items[].skustringSimSKU do item. Máximo: 255 caracteres.
orderGroups[].orders[].items[].namestringSimNome do item. Máximo: 255 caracteres.
orderGroups[].orders[].items[].quantityintegerSimQuantidade. Valor deve ser maior que 0.
orderGroups[].orders[].items[].unitValuedecimalSimValor unitário. Precisão: decimal:0,6. Valor deve ser maior que 0.
orderGroups[].paymentsarraySimLista de pagamentos do grupo. Mínimo: 1 item.
orderGroups[].payments[].typestringSimMeio de pagamento. Valores aceitos: credit-card, debit-card, pix, billet, custom.
orderGroups[].payments[].valuedecimalSimValor do pagamento. Precisão: decimal:0,6. Valor deve ser maior que 0.
orderGroups[].payments[].statusstringSimStatus do pagamento conforme os padrões do sistema (ex: paid, waiting-payment, canceled).
orderGroups[].payments[].labelstringSimRótulo/Nome amigável do pagamento. Máximo: 255 caracteres.
orderGroups[].payments[].transactionIdstringSimID da transação na operadora. Máximo: 255 caracteres.

💡 Exemplo de Requisição

1curl --request POST \
2 --url '{{MAIN_URL}}/orders/groups/import/json' \
3 --header 'Authorization: Bearer SEU_TOKEN_AQUI' \
4 --header 'Content-Type: application/json' \
5 --data '{
6 "orderGroups": [
7 {
8 "code": "json-order-group-001",
9 "salesChannelDomain": "loja1.com.br",
10 "currency": "BRL",
11 "issuedAt": "2026-04-22 10:00:00",
12 "customer": {
13 "customerNameCorporateName": "Cliente API",
14 "customerTradeName": "",
15 "customerEmail": "cliente.api@teste.com",
16 "customerBirthdate": "1990-01-01",
17 "customerPhone": "+5511999999999",
18 "customerIsCorporate": false,
19 "customerGender": "male",
20 "customerDocument": "12345678901",
21 "customerDocument2": ""
22 },
23 "addresses": [
24 {
25 "customerAddressType": "both",
26 "addressZipCode": "01001000",
27 "addressCountryCode": "BRA",
28 "addressStreet": "Praca da Se",
29 "addressDistrict": "Se",
30 "addressNumber": "100",
31 "addressCity": "Sao Paulo",
32 "addressState": "Sao Paulo",
33 "addressStateCode": "BR-SP",
34 "addressComplement": "",
35 "addressRecipient": "Cliente API"
36 }
37 ],
38 "orders": [
39 {
40 "storageCode": "MAIN",
41 "statusCode": "pending",
42 "trackingCode": "",
43 "shippingCarrier": "",
44 "invoice": {
45 "number": "",
46 "key": "",
47 "serie": "",
48 "url": ""
49 },
50 "values": {
51 "shippingValue": "5.000000",
52 "discountValue": "10.000000",
53 "additionValue": "0.000000"
54 },
55 "items": [
56 {
57 "sku": "SKU-EXISTENTE-1",
58 "name": "Produto API",
59 "quantity": "1.000000",
60 "unitValue": "100.000000"
61 }
62 ]
63 }
64 ],
65 "payments": [
66 {
67 "type": "pix",
68 "value": "25.000000",
69 "status": "paid",
70 "label": "PIX API",
71 "transactionId": "weLa9yoUfKViV63"
72 },
73 {
74 "type": "billet",
75 "value": "70.000000",
76 "status": "waiting-payment",
77 "label": "Pagamento com boleto bancário",
78 "transactionId": "weLa9yoUfKViV62"
79 }
80 ]
81 }
82 ]
83 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": [
4 {
5 "id": null,
6 "externalId": "json-order-group-001",
7 "error": "UAPPI_STORE_ORDER_DUPLICATED_ORDER_GROUP_CODE"
8 },
9 {
10 "id": 349,
11 "externalId": "json-order-group-002",
12 "error": null
13 }
14 ]
15}

📋 Contrato de data[]

CampoTipoDescrição
idinteger\nullID cadastrado da entidade importada (neste endpoint, normalmente null em erro)
externalIdstringCódigo do grupo enviado em orderGroups[].code
errorstringCódigo interno do erro de negócio

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código do ErroHTTPDescrição
UAPPI_STORE_ORDER_DUPLICATED_ORDER_GROUP_CODE200orderGroups[].code já existe ou foi repetido na mesma requisição
UAPPI_STORE_INVALID_ORDER_CURRENCY200Moeda inválida
UAPPI_STORE_CUSTOMER_MISSING_TRADE_NAME200customerTradeName preenchido para pessoa física
UAPPI_STORE_CUSTOMER_REQUIRED_TRADE_NAME200customerTradeName ausente para pessoa jurídica
UAPPI_CORE_INVALID_PHONE_NUMBER200Telefone inválido
UAPPI_STORE_CUSTOMER_INVALID_GENDER200Gênero inválido
UAPPI_STORE_CUSTOMER_INVALID_BIRTHDATE200Data de nascimento inválida
UAPPI_STORE_ORDER_INVALID_ADDRESS200Endereçamento diferente de both ou delivery + billing
UAPPI_STORE_CUSTOMER_ADDRESS_COUNTRY_NOT_FOUND200País do endereço não encontrado
UAPPI_STORE_CUSTOMER_ADDRESS_STATE_NOT_FOUND200Estado do endereço não encontrado para o país informado
UAPPI_STORE_PRODUCT_NOT_FOUND200SKU não encontrado
UAPPI_STORE_ORDER_INVALID_ITEM_QUANTITY200Quantidade menor ou igual a zero
UAPPI_STORE_STORAGE_NOT_FOUND200Armazém não encontrado
UAPPI_STORE_ORDER_STATUS_NOT_FOUND200orders[].statusCode não corresponde a nenhum order_status.code
UAPPI_STORE_ORDER_INSERT_FAIL200Falha inesperada durante a persistência canônica do grupo

Uappi é a melhor opção para o crescimento da sua loja!

;