Orders
Visão Geral
O domínio Orders é responsável pelo ciclo de vida dos pedidos na plataforma Getnet. Um pedido representa uma solicitação de credenciamento, compra de equipamento ou alteração de produto feita por um merchant (estabelecimento comercial).
Criação de Pedido — POST /orders
Pré-requisito: Seleção de Ofertas
Antes de criar um pedido, o canal deve ter realizado previamente a chamada ao endpoint
GET /offerings (documentado em offerings.md), exibido as ofertas disponíveis ao cliente e capturado a seleção do estabelecimento.O canal pode ter o retorno de uma ou mais ofertas disponíveis. O cliente seleciona uma ou mais ofertas para contratar.
⚠️ Guarde oorder_idretornado pela criação do pedido — ele é obrigatório em todas as chamadas subsequentes:PUT /orders/{order_id}(atualização),POST /orders/{order_id}/validation(validação) ePUT /orders/{order_id}/submit(submissão). Sem ele não é possível dar continuidade ao pedido.
Preenchimento do campo merchant
O campo
merchant identifica o estabelecimento que está realizando o pedido. O cadastro do merchant deve ter sido realizado previamente conforme descrito em merchants.md.Pré-requisito — Cadastro do merchant
Antes de criar o pedido, o canal deve chamar
GET /merchants/{merchant_id} para confirmar que o merchant existe e obter seu identificador.Regra de mapeamento
O campo
merchant_id está na raiz do objeto retornado por GET /merchants/{merchant_id}. O campo merchant do pedido deve ser preenchido apenas com esse valor:Campo no pedido (merchant) | Origem no retorno de GET /merchants/{merchant_id} |
|---|---|
merchant_id | merchant_id (raiz do objeto) |
Exemplo
Retorno de
GET /merchants/{merchant_id} (simplificado):json
{
"merchant_id": "6a0fc6f29a4f90ca92a8670e",
"acquirer_code": "getnet",
"merchant_legal_data": {}
}json
{
"merchant_id": "6a0fc6f29a4f90ca92a8670e",
"acquirer_code": "getnet",
"merchant_legal_data": {}
}Campo
merchant no payload de POST /orders:json
{
"merchant": {
"merchant_id": "6a0fc6f29a4f90ca92a8670e"
}
}json
{
"merchant": {
"merchant_id": "6a0fc6f29a4f90ca92a8670e"
}
}Preenchimento do campo items
O campo
items do payload de POST /orders é um array que representa, de forma achatada (flat), todos os produtos de todas as ofertas selecionadas pelo cliente.Regra geral de mapeamento
Para cada oferta selecionada pelo cliente, itere sobre o array
items[] da oferta retornada por GET /offerings. Cada entrada desse array vira um objeto dentro do items[] do pedido.text
GET /offerings → offering[n].items[x] → POST /orders → items[sequencial]
text
GET /offerings → offering[n].items[x] → POST /orders → items[sequencial]
Campos obrigatórios de cada item do pedido
Campo no pedido (items[*]) | Origem no retorno de GET /offerings | Observação |
|---|---|---|
item_sequence_number | — | Sequencial global crescente (1, 2, 3…) considerando todos os itens de todas as ofertas selecionadas. |
offering.priced_offering_id | offering.priced_offering_id (raiz da oferta) | O priced_offering_id fica na raiz do objeto da oferta, não dentro de items. |
offering.smart_offering_id | offering.priced_offering_id (raiz da oferta) | Deve ser preenchido com o mesmo valor de priced_offering_id. |
product | offering.items[x].product | O objeto product deve ser enviado integralmente como retornado na oferta. |
quantity | offering.items[x].quantity | Quantidade indicada na oferta para aquele produto. |
Campos opcionais/condicionais de cada item do pedido
Os campos abaixo existem dentro de
items[x] no retorno de GET /offerings para determinados tipos de produto. Quando presentes, devem ser encaminhados no respectivo item do pedido:Campo no pedido (items[*]) | Origem no retorno de GET /offerings | Quando presente |
|---|---|---|
settlement_period | offering.items[x].settlement_period | Produtos do tipo composite (adquirência). |
unit_price | offering.items[x].unit_price | Produtos com precificação (ex.: terminal com aluguel mensal). |
total_price | offering.items[x].total_price | Produtos com precificação (ex.: terminal com aluguel mensal). |
Preenchimento do campo delivery_info
O campo
delivery_info contém as informações de entrega do equipamento.Pré-requisito — Consulta de tipos de frete
Antes de preencher
delivery_info, o canal deve chamar GET /offerings/delivery-data (documentado em offerings.yaml) informando o legal_document_number e o postal_code do cliente. A resposta retorna os tipos de frete disponíveis no array delivery_methods[].O cliente seleciona o tipo de frete desejado entre os disponíveis:
delivery_type | Descrição |
|---|---|
scheduled | Entrega Agendada |
normal | Entrega Convencional |
express | Entrega Expressa |
Endereço de entrega — delivery_address
Deve ser preenchido com o endereço de entrega do equipamento informado pelo cliente. Segue a mesma estrutura dos campos de endereço do merchant (
business_address, residential_address, commercial_address).Campos por tipo de frete
Agendada (scheduled)
| Campo | Origem / Valor |
|---|---|
delivery_type | "scheduled" (fixo) |
delivery_amount | delivery_methods[x].delivery_amount de GET /offerings/delivery-data |
delivery_time | delivery_methods[x].delivery_time de GET /offerings/delivery-data |
recommended_delivery_period | Período selecionado pelo cliente ("morning", "afternoon" ou "night") |
period_grid | Entrada de delivery_methods[x].period_grid[] correspondente ao período selecionado pelo cliente |
delivery_reference_point | Ponto de referência informado pelo cliente |
delivery_time_type | null |
Exemplo:
json
{
"delivery_info": {
"delivery_type": "scheduled",
"delivery_amount": 0,
"delivery_time": "0",
"recommended_delivery_period": "morning",
"period_grid": [
{
"date": "2024-12-04",
"recommended_delivery_period": "M",
"begin_time": "08:00:00",
"end_time": "11:30:00"
}
],
"delivery_reference_point": "Próximo ao mercado da esquina",
"delivery_time_type": null,
"delivery_address": {
"street": "Rua Exemplo",
"number": "123",
"district": "Centro",
"city": "Porto Alegre",
"state": "RS",
"postal_code": "90000000",
"country": "BR"
}
}
}json
{
"delivery_info": {
"delivery_type": "scheduled",
"delivery_amount": 0,
"delivery_time": "0",
"recommended_delivery_period": "morning",
"period_grid": [
{
"date": "2024-12-04",
"recommended_delivery_period": "M",
"begin_time": "08:00:00",
"end_time": "11:30:00"
}
],
"delivery_reference_point": "Próximo ao mercado da esquina",
"delivery_time_type": null,
"delivery_address": {
"street": "Rua Exemplo",
"number": "123",
"district": "Centro",
"city": "Porto Alegre",
"state": "RS",
"postal_code": "90000000",
"country": "BR"
}
}
}Convencional (normal)
| Campo | Origem / Valor |
|---|---|
delivery_type | "normal" (fixo) |
delivery_amount | delivery_methods[x].delivery_amount de GET /offerings/delivery-data |
delivery_time | delivery_methods[x].delivery_time de GET /offerings/delivery-data |
delivery_time_type | delivery_methods[x].delivery_time_type de GET /offerings/delivery-data (D ou H) |
Exemplo:
json
{
"delivery_info": {
"delivery_type": "normal",
"delivery_amount": 0,
"delivery_time": "3",
"delivery_time_type": "D",
"delivery_address": {
"street": "Rua Exemplo",
"number": "123",
"district": "Centro",
"city": "Porto Alegre",
"state": "RS",
"postal_code": "90000000",
"country": "BR"
}
}
}json
{
"delivery_info": {
"delivery_type": "normal",
"delivery_amount": 0,
"delivery_time": "3",
"delivery_time_type": "D",
"delivery_address": {
"street": "Rua Exemplo",
"number": "123",
"district": "Centro",
"city": "Porto Alegre",
"state": "RS",
"postal_code": "90000000",
"country": "BR"
}
}
}Expressa (express)
| Campo | Origem / Valor |
|---|---|
delivery_type | "express" (fixo) |
delivery_amount | delivery_methods[x].delivery_amount de GET /offerings/delivery-data |
delivery_time | delivery_methods[x].delivery_time de GET /offerings/delivery-data |
delivery_time_type | delivery_methods[x].delivery_time_type de GET /offerings/delivery-data (D ou H) |
Exemplo:
json
{
"delivery_info": {
"delivery_type": "express",
"delivery_amount": 2500,
"delivery_time": "3",
"delivery_time_type": "D",
"delivery_address": {
"street": "Rua Exemplo",
"number": "123",
"district": "Centro",
"city": "Porto Alegre",
"state": "RS",
"postal_code": "90000000",
"country": "BR"
}
}
}json
{
"delivery_info": {
"delivery_type": "express",
"delivery_amount": 2500,
"delivery_time": "3",
"delivery_time_type": "D",
"delivery_address": {
"street": "Rua Exemplo",
"number": "123",
"district": "Centro",
"city": "Porto Alegre",
"state": "RS",
"postal_code": "90000000",
"country": "BR"
}
}
}Exemplo de mapeamento
Retorno de GET /offerings (simplificado)
O cliente selecionou duas ofertas: "Adquirência Físico Aluguel" (1 item) e "Oferta E-commerce - Link de Pagamento V2" (7 itens). Abaixo, a estrutura resumida do retorno:
json
[
{
"priced_offering_id": "6a0fc78fd653164a21cf71f8",
"smart_offering_id": "6a0fc78fd653164a21cf71f8",
"name": "Adquirência Físico Aluguel",
"items": [
{
"item_sequence_number": 1,
"product": {
"product_id": "693241e8c4e00969b33efaf1",
"name": "ADQUIRENCIA FÍSICO ALUGUEL",
"product_type": "composite",
"composite_type": "acquirer",
"transaction_channel_types": ["physical"],
"modalities": ["rent"]
},
"quantity": 1,
"settlement_period": "receive_now_2"
}
]
},
{
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201",
"name": "Oferta E-commerce - Link de Pagamento V2",
"items": [
{
"item_sequence_number": 1,
"product": {
"product_id": "69b2ece03abb838e8be1b21d",
"name": "Terminal Ecommerce",
"product_type": "terminal",
"terminal_type": "ecommerce",
"transaction_channel_type": "online",
"modality": "rent",
"delivery_method": "na",
"wireless": false,
"print_receipt": false,
"model": "ecommerce"
},
"quantity": 1,
"unit_price": 0,
"total_price": 0
},
{
"item_sequence_number": 2,
"product": {
"product_id": "52fadc5225294c7781c862c4e4a2d91a",
"name": "Conta SuperGet",
"product_type": "service",
"service_type": "service",
"product_configuration": { "keyword": "prepaid_card", "issuer": "superget" }
},
"quantity": 1
},
{
"item_sequence_number": 3,
"product": {
"product_id": "6781192295d5d10a6194fe15",
"name": "GetPay (link de pagamento)",
"product_type": "service",
"service_type": "ecommerce_service",
"product_configuration": { "keyword": "ecommerce_payment_link" }
},
"quantity": 1
}
]
}
]json
[
{
"priced_offering_id": "6a0fc78fd653164a21cf71f8",
"smart_offering_id": "6a0fc78fd653164a21cf71f8",
"name": "Adquirência Físico Aluguel",
"items": [
{
"item_sequence_number": 1,
"product": {
"product_id": "693241e8c4e00969b33efaf1",
"name": "ADQUIRENCIA FÍSICO ALUGUEL",
"product_type": "composite",
"composite_type": "acquirer",
"transaction_channel_types": ["physical"],
"modalities": ["rent"]
},
"quantity": 1,
"settlement_period": "receive_now_2"
}
]
},
{
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201",
"name": "Oferta E-commerce - Link de Pagamento V2",
"items": [
{
"item_sequence_number": 1,
"product": {
"product_id": "69b2ece03abb838e8be1b21d",
"name": "Terminal Ecommerce",
"product_type": "terminal",
"terminal_type": "ecommerce",
"transaction_channel_type": "online",
"modality": "rent",
"delivery_method": "na",
"wireless": false,
"print_receipt": false,
"model": "ecommerce"
},
"quantity": 1,
"unit_price": 0,
"total_price": 0
},
{
"item_sequence_number": 2,
"product": {
"product_id": "52fadc5225294c7781c862c4e4a2d91a",
"name": "Conta SuperGet",
"product_type": "service",
"service_type": "service",
"product_configuration": { "keyword": "prepaid_card", "issuer": "superget" }
},
"quantity": 1
},
{
"item_sequence_number": 3,
"product": {
"product_id": "6781192295d5d10a6194fe15",
"name": "GetPay (link de pagamento)",
"product_type": "service",
"service_type": "ecommerce_service",
"product_configuration": { "keyword": "ecommerce_payment_link" }
},
"quantity": 1
}
]
}
]Payload resultante para POST /orders — campo items
Todos os itens são achatados em um único array com numeração sequencial global:
json
{
"items": [
{
"item_sequence_number": 1,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf71f8",
"smart_offering_id": "6a0fc78fd653164a21cf71f8"
},
"product": {
"product_id": "693241e8c4e00969b33efaf1",
"name": "ADQUIRENCIA FÍSICO ALUGUEL",
"product_type": "composite",
"composite_type": "acquirer",
"transaction_channel_types": ["physical"],
"modalities": ["rent"]
},
"quantity": 1,
"settlement_period": "receive_now_2"
},
{
"item_sequence_number": 2,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201"
},
"product": {
"product_id": "69b2ece03abb838e8be1b21d",
"name": "Terminal Ecommerce",
"product_type": "terminal",
"terminal_type": "ecommerce",
"transaction_channel_type": "online",
"modality": "rent",
"delivery_method": "na",
"wireless": false,
"print_receipt": false,
"model": "ecommerce"
},
"quantity": 1,
"unit_price": 0,
"total_price": 0
},
{
"item_sequence_number": 3,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201"
},
"product": {
"product_id": "52fadc5225294c7781c862c4e4a2d91a",
"name": "Conta SuperGet",
"product_type": "service",
"service_type": "service",
"product_configuration": { "keyword": "prepaid_card", "issuer": "superget" }
},
"quantity": 1
},
{
"item_sequence_number": 4,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201"
},
"product": {
"product_id": "6781192295d5d10a6194fe15",
"name": "GetPay (link de pagamento)",
"product_type": "service",
"service_type": "ecommerce_service",
"product_configuration": { "keyword": "ecommerce_payment_link" }
},
"quantity": 1
}
]
}json
{
"items": [
{
"item_sequence_number": 1,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf71f8",
"smart_offering_id": "6a0fc78fd653164a21cf71f8"
},
"product": {
"product_id": "693241e8c4e00969b33efaf1",
"name": "ADQUIRENCIA FÍSICO ALUGUEL",
"product_type": "composite",
"composite_type": "acquirer",
"transaction_channel_types": ["physical"],
"modalities": ["rent"]
},
"quantity": 1,
"settlement_period": "receive_now_2"
},
{
"item_sequence_number": 2,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201"
},
"product": {
"product_id": "69b2ece03abb838e8be1b21d",
"name": "Terminal Ecommerce",
"product_type": "terminal",
"terminal_type": "ecommerce",
"transaction_channel_type": "online",
"modality": "rent",
"delivery_method": "na",
"wireless": false,
"print_receipt": false,
"model": "ecommerce"
},
"quantity": 1,
"unit_price": 0,
"total_price": 0
},
{
"item_sequence_number": 3,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201"
},
"product": {
"product_id": "52fadc5225294c7781c862c4e4a2d91a",
"name": "Conta SuperGet",
"product_type": "service",
"service_type": "service",
"product_configuration": { "keyword": "prepaid_card", "issuer": "superget" }
},
"quantity": 1
},
{
"item_sequence_number": 4,
"offering": {
"priced_offering_id": "6a0fc78fd653164a21cf7201",
"smart_offering_id": "6a0fc78fd653164a21cf7201"
},
"product": {
"product_id": "6781192295d5d10a6194fe15",
"name": "GetPay (link de pagamento)",
"product_type": "service",
"service_type": "ecommerce_service",
"product_configuration": { "keyword": "ecommerce_payment_link" }
},
"quantity": 1
}
]
}Nota: Os itens da segunda oferta assumem numeração sequencial continuando a partir do último item da primeira oferta (2, 3, 4…). Oitem_sequence_numberoriginal de cada item dentro da oferta (offering.items[x].item_sequence_number) é descartado — o que vale é a sequência global do pedido.
Regras importantes
1. Sequencial global de itens
O
item_sequence_number é um contador único e incremental para todo o array items do pedido, independente de quantas ofertas foram selecionadas.2. priced_offering_id e smart_offering_id vêm da raiz da oferta
Esses dois campos devem ser preenchidos com o valor de
priced_offering_id que está na raiz do objeto da oferta retornada por GET /offerings — e não dentro de items[x]. Ambos (priced_offering_id e smart_offering_id) recebem o mesmo valor.3. O objeto product é enviado integralmente
O objeto
product deve ser copiado exatamente como retornado em offering.items[x].product, incluindo todos os campos específicos do tipo do produto (terminal_type, modality, delivery_method, product_configuration, etc.). Não omitir campos.4. Campos condicionais por tipo de produto
Alguns campos existem no item da oferta apenas para determinados tipos de produto:
settlement_period: presente em produtos do tipocomposite(adquirência). Deve ser repassado no item do pedido.unit_price/total_price: presentes quando o produto tem um preço definido (ex.: terminal com aluguel mensal). Devem ser repassados no item do pedido. Quando não há preço, enviarnull.
5. Uma oferta pode ter múltiplos itens
Uma única oferta selecionada pode retornar múltiplos produtos em seu array
items[]. Cada produto vira um item separado no pedido, todos compartilhando o mesmo offering.priced_offering_id e offering.smart_offering_id.Preenchimento do campo merchant_accounts
O campo
merchant_accounts é uma lista de domicílios bancários — ou seja, as contas bancárias onde o merchant irá receber os recebíveis das transações realizadas nas máquinas e serviços da Getnet.Deve ser criado um item por bandeira contratada nas ofertas selecionadas.
Estrutura de cada item
| Campo | Descrição |
|---|---|
brand | Bandeira à qual o domicílio se aplica (visa, master, elo, amex, hipercard, pix) |
merchant.merchant_id | O mesmo merchant_id do campo raiz merchant do pedido |
bank_account.bank.bank_country | País do banco (ex.: "BR") |
bank_account.bank.bank_code | Código de compensação do banco (FEBRABAN) |
bank_account.bank_branch_code | Número da agência |
bank_account.bank_account_number | Número da conta + dígito verificador |
bank_account.bank_account_currency | Moeda da conta (ex.: "BRL") |
bank_account.account_type | Tipo da conta: cc (corrente), pp (poupança) |
payment_center | true para ativar centralização de pagamentos |
merchant_account_restriction | Lista de restrições. Enviar [] quando não houver restrições |
Exemplo
No exemplo abaixo, o merchant configura o mesmo domicílio bancário para quatro bandeiras:
json
{
"merchant_accounts": [
{
"brand": "master",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
},
{
"brand": "visa",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
},
{
"brand": "elo",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
},
{
"brand": "amex",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
}
]
}json
{
"merchant_accounts": [
{
"brand": "master",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
},
{
"brand": "visa",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
},
{
"brand": "elo",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
},
{
"brand": "amex",
"merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" },
"bank_account": {
"bank": { "bank_country": "BR", "bank_code": "033" },
"bank_branch_code": "0001",
"bank_account_number": "123456789",
"bank_account_currency": "BRL",
"account_type": "cc"
},
"payment_center": true,
"merchant_account_restriction": []
}
]
}Tipos de conta (account_type)
| Valor | Descrição |
|---|---|
cc | Conta Corrente |
pp | Conta Poupança |
Atualização do Pedido — PUT /orders/{order_id}
Visão geral
O endpoint
PUT /orders/{order_id} permite atualizar os dados de um pedido existente, por exemplo para adicionar ou corrigir informações antes da submissão.⚠️ Substituição total do pedido
O
PUT substitui integralmente o pedido. Nunca envie um payload parcial — os campos omitidos serão removidos. Sempre envie o objeto completo do pedido.Diferença em relação ao merchant
Ao contrário do
PUT /merchants/{merchant_id}, o pedido não sofre enriquecimento após a criação: nenhuma informação nova é adicionada ao objeto pela plataforma. Os dados armazenados no pedido são exatamente os que o canal enviou no POST /orders.Por essa razão, o comportamento recomendado depende de como o canal gerencia o estado do pedido:
| Situação | O que fazer |
|---|---|
| Canal armazena a estrutura do pedido em seu domínio | Não é necessário chamar GET /orders/{order_id}. Basta modificar ou incrementar os campos na estrutura local e enviar o PUT com o objeto completo. |
| Canal não armazena a estrutura do pedido localmente | Buscar o pedido atual com GET /orders/{order_id} (usando o order_id retornado pelo POST /orders), aplicar as alterações e então enviar o PUT. |
Parâmetro de rota
| Parâmetro | Tipo | Descrição |
|---|---|---|
order_id | string | ID retornado na criação do pedido (POST /orders) |
Recalcular campos de totalização
Após qualquer alteração nos itens do pedido, os campos de totalização devem ser recalculados antes de enviar o
PUT. A regra é a mesma da criação — consulte a seção Preenchimento dos campos de totalização abaixo.Preenchimento dos campos de totalização
Os campos de totalização do pedido representam o somatório dos valores dos produtos do tipo
terminal presentes no array items, agrupados pelo tipo de precificação (pricing_model.pricing_type) de cada produto.Regra geral
Para cada item do pedido onde
product.product_type = "terminal", some o valor de total_price do item conforme o product.pricing_model.pricing_type, e preencha o campo correspondente na raiz do pedido:| Campo no pedido | pricing_model.pricing_type dos terminais somados |
|---|---|
total_fixed_price | fixed_price |
total_monthly_rent | monthly_rent |
total_affiliation_fee | affiliation_fee |
total_recurrent | recurrent |
total_payment_price | payment_price |
total_license | license |
Itens cujoproduct.product_typenão sejaterminal(ex.:composite,service) não entram nos cálculos de totalização.
Exemplo
Suponha que o pedido possui os seguintes itens do tipo
terminal:| Item | product_type | pricing_model.pricing_type | total_price |
|---|---|---|---|
| 1 | terminal | monthly_rent | 7990 |
| 2 | terminal | monthly_rent | 4990 |
| 3 | terminal | fixed_price | 19900 |
| 4 | composite | — | — |
O preenchimento dos campos de totalização seria:
json
{
"total_fixed_price": 19900,
"total_monthly_rent": 12980,
"total_affiliation_fee": 0,
"total_recurrent": 0,
"total_payment_price": 0,
"total_license": 0
}json
{
"total_fixed_price": 19900,
"total_monthly_rent": 12980,
"total_affiliation_fee": 0,
"total_recurrent": 0,
"total_payment_price": 0,
"total_license": 0
}Nota: Campos sem terminais correspondentes devem ser enviados com valor0.
Validação do Pedido — POST /orders/{order_id}/validation
Visão geral
Após criar o pedido com
POST /orders, o canal receberá o order_id. Antes de submeter o pedido definitivamente, é altamente recomendado chamar POST /orders/{order_id}/validation.Este endpoint realiza uma validação completa dos dados do pedido — aplicando as mesmas regras de negócio da submissão — sem alterar o status do pedido. Caso existam inconsistências, o canal pode corrigi-las antes da submissão definitiva.
⚠️ Importante: O endpoint é opcional, mas é fortemente recomendado. Após a chamada dePUT /orders/{order_id}/submit, caso o pedido seja reprovado, não é possível corrigi-lo — ele será rejeitado definitivamente.
Parâmetro de rota
| Parâmetro | Tipo | Descrição |
|---|---|---|
order_id | string | ID retornado na criação do pedido (POST /orders) |
Como interpretar o retorno
O retorno contém um campo
report com as informações da validação. Para verificar se a validação aprovou ou reprovou o pedido:-
Verifique o campo
report.recommended.status:"approved"→ O pedido está correto e pode ser submetido."reproved"→ O pedido contém erros que devem ser corrigidos antes da submissão.
-
Se
report.recommended.status = "reproved", verifique a listareport.details[]. Cada item da lista possui o campodetail_descriptioncom a descrição do motivo da rejeição.
Exemplo de retorno com rejeição
json
{
"report": {
"details": [
{
"visible": true,
"detail_type": "missing_mandatory_data",
"detail_attribute": "qualification.order.items",
"detail_description": "Não foi encontrado composite correspondente ao terminal 6932501bc4e00969b33efaf8. Para cada terminal do pedido deve haver um composite com tipo de canal de transação (transaction_channel_type) correspondente.",
"detail_code": "QDOBR-0129"
}
],
"recommended": {
"status": "reproved",
"last_status_update_date": "2026-05-22T12:44:41.365199901Z"
}
}
}json
{
"report": {
"details": [
{
"visible": true,
"detail_type": "missing_mandatory_data",
"detail_attribute": "qualification.order.items",
"detail_description": "Não foi encontrado composite correspondente ao terminal 6932501bc4e00969b33efaf8. Para cada terminal do pedido deve haver um composite com tipo de canal de transação (transaction_channel_type) correspondente.",
"detail_code": "QDOBR-0129"
}
],
"recommended": {
"status": "reproved",
"last_status_update_date": "2026-05-22T12:44:41.365199901Z"
}
}
}Campos relevantes do retorno
| Campo | Descrição |
|---|---|
report.recommended.status | Resultado da validação: "approved" ou "reproved" |
report.details[] | Lista de detalhes dos erros encontrados (presente quando reproved) |
report.details[].detail_description | Descrição legível do motivo da rejeição |
report.details[].detail_type | Tipo do erro (ex.: missing_mandatory_data) |
report.details[].detail_attribute | Atributo do pedido que causou o erro |
report.details[].detail_code | Código interno do erro |
Submissão do Pedido — PUT /orders/{order_id}/submit
Visão geral
O endpoint
PUT /orders/{order_id}/submit representa a confirmação definitiva do pedido pelo cliente. Ao chamá-lo, o canal declara que o cliente revisou todas as informações do pedido e confirma que está de acordo.⚠️ Atenção: Após a submissão, caso o pedido seja reprovado, não é possível corrigi-lo. Por este motivo, recomenda-se fortemente utilizarPOST /orders/{order_id}/validationantes da submissão.
Parâmetro de rota
| Parâmetro | Tipo | Descrição |
|---|---|---|
order_id | string | ID retornado na criação do pedido (POST /orders) |
Retorno em caso de reprovação
Se o pedido for reprovado durante a submissão, o retorno conterá um objeto
error com informações de rejeição:- Verifique se existe
error.report.recommendedcom valor"reproved". - O campo
messagetraz uma mensagem genérica sobre a reprovação. - Para entender o motivo detalhado, verifique
report.details[]e leia o campodetail_descriptionde cada item.
Exemplo de retorno em caso de reprovação:
json
{
"error": {
"message": "Pedido reprovado.",
"report": {
"recommended": "reproved",
"details": [
{
"visible": true,
"detail_type": "missing_mandatory_data",
"detail_attribute": "qualification.order.items",
"detail_description": "Não foi encontrado composite correspondente ao terminal 6932501bc4e00969b33efaf8. Para cada terminal do pedido deve haver um composite com tipo de canal de transação (transaction_channel_type) correspondente.",
"detail_code": "QDOBR-0129"
}
]
}
}
}json
{
"error": {
"message": "Pedido reprovado.",
"report": {
"recommended": "reproved",
"details": [
{
"visible": true,
"detail_type": "missing_mandatory_data",
"detail_attribute": "qualification.order.items",
"detail_description": "Não foi encontrado composite correspondente ao terminal 6932501bc4e00969b33efaf8. Para cada terminal do pedido deve haver um composite com tipo de canal de transação (transaction_channel_type) correspondente.",
"detail_code": "QDOBR-0129"
}
]
}
}
}Retorno em caso de sucesso
Quando a submissão é bem-sucedida, o retorno contém:
situation.status = "submitted"→ indica que o pedido foi recebido pela Getnet e está em processamento.order_number→ número do pedido gerado pela Getnet, que pode ser usado pelo cliente para acompanhar seu pedido.
Exemplo de retorno em caso de sucesso:
json
{
"order_id": "6a1056da1d16baecee8580ee",
"order_number": "MPGXZEGPEE",
"audit_information": {
"creation_date": "2026-05-22T13:15:06.361Z",
"update_date": "2026-05-22T13:16:22.633Z",
"channel_data": {
"channel": "getnet_ecommerce",
"login": "",
"branch": "",
"enrollment_number": "",
"name": "",
"publisher": "ecommerce"
}
},
"situation": {
"status": "submitted",
"status_name": "Submetido",
"status_update_date": "2026-05-22T13:16:22.633Z"
}
}json
{
"order_id": "6a1056da1d16baecee8580ee",
"order_number": "MPGXZEGPEE",
"audit_information": {
"creation_date": "2026-05-22T13:15:06.361Z",
"update_date": "2026-05-22T13:16:22.633Z",
"channel_data": {
"channel": "getnet_ecommerce",
"login": "",
"branch": "",
"enrollment_number": "",
"name": "",
"publisher": "ecommerce"
}
},
"situation": {
"status": "submitted",
"status_name": "Submetido",
"status_update_date": "2026-05-22T13:16:22.633Z"
}
}Campos relevantes do retorno de sucesso
| Campo | Descrição |
|---|---|
order_id | Identificador interno do pedido |
order_number | Número do pedido gerado pela Getnet para acompanhamento pelo cliente |
situation.status | "submitted" — pedido recebido e em análise pela Getnet |
situation.status_name | Nome legível do status (ex.: "Submetido") |
situation.status_update_date | Data e hora da última atualização do status |
Fluxo resumido
text
1. Canal chama 600;">GET /merchants/{merchant_id}
│
├─ merchant_id → merchant.merchant_id no pedido
└─ merchant_id → merchant_accounts[*].merchant.merchant_id
│
▼
2. Canal chama 600;">GET /offerings
│
▼
3. Canal chama 600;">GET /offerings/delivery-data (legal_document_number + postal_code)
│
├─ Cliente seleciona tipo de frete (scheduled / normal / express)
├─ delivery_methods[x].delivery_amount → delivery_info.delivery_amount
├─ delivery_methods[x].delivery_time → delivery_info.delivery_time
├─ delivery_methods[x].delivery_time_type → delivery_info.delivery_time_type (normal/express)
├─ delivery_methods[x].period_grid[y] → delivery_info.period_grid (scheduled)
└─ período selecionado → delivery_info.recommended_delivery_period (scheduled)
│
▼
4. Canal exibe ofertas ao cliente
│
▼
5. Cliente seleciona uma ou mais ofertas
│
▼
6. Para cada oferta selecionada:
└─ Para cada item em offering.items[]:
├─ item_sequence_number = próximo número sequencial global
├─ offering.priced_offering_id = offering.priced_offering_id (raiz da oferta)
├─ offering.smart_offering_id = offering.priced_offering_id (raiz da oferta)
├─ product = item.product (cópia integral)
├─ quantity = item.quantity
├─ settlement_period = item.settlement_period (se presente)
├─ unit_price = item.unit_price (se presente)
└─ total_price = item.total_price (se presente)
│
▼
7. Cliente informa dados bancários → montar merchant_accounts[]:
└─ Um item por bandeira contratada:
├─ brand = bandeira (visa / master / elo / amex / ...)
├─ merchant.merchant_id = merchant_id (passo 1)
├─ bank_account.bank.bank_code = código FEBRABAN do banco
├─ bank_account.bank_branch_code = agência
├─ bank_account.bank_account_number = conta + dígito
├─ bank_account.account_type = cc / pp
├─ payment_center = true/false
└─ merchant_account_restriction = []
│
▼
8. Canal calcula os campos de totalização:
└─ Para cada item onde product.product_type = "terminal":
├─ pricing_type = "monthly_rent" → somar total_price em total_monthly_rent
├─ pricing_type = "fixed_price" → somar total_price em total_fixed_price
├─ pricing_type = "affiliation_fee" → somar total_price em total_affiliation_fee
├─ pricing_type = "recurrent" → somar total_price em total_recurrent
├─ pricing_type = "payment_price" → somar total_price em total_payment_price
└─ pricing_type = "license" → somar total_price em total_license
│
▼
9. Canal chama 600;">POST /orders com merchant, delivery_info, items, merchant_accounts e campos de totalização
│
└─ Recebe o order_id do pedido criado
⚠️ Guardar o order_id — obrigatório nas etapas seguintes
│
▼
9a. (Se necessário) Canal atualiza o pedido via 600;">PUT /orders/{order_id}
│
├─ Se o canal armazena o pedido localmente → alterar estrutura local e enviar 600;">PUT completo
└─ Se não armazena → 600;">GET /orders/{order_id} → aplicar alterações → enviar 600;">PUT completo
(Recalcular campos de totalização se itens foram alterados)
│
▼
10. (Recomendado) Canal chama 600;">POST /orders/{order_id}/validation
│
├─ report.recommended.status = "approved" → pode prosseguir para submissão
└─ report.recommended.status = "reproved" → verificar report.details[].detail_description
e corrigir o pedido antes de submeter
│
▼
11. Canal chama 600;">PUT /orders/{order_id}/submit (cliente confirmou os dados do pedido)
│
├─ Reprovado → error.report.recommended = "reproved"
│ verificar report.details[].detail_description
│ (pedido não pode mais ser corrigido)
│
└─ Aprovado → situation.status = "submitted"
order_number gerado para acompanhamento do pedido pelo cliente
text
1. Canal chama 600;">GET /merchants/{merchant_id}
│
├─ merchant_id → merchant.merchant_id no pedido
└─ merchant_id → merchant_accounts[*].merchant.merchant_id
│
▼
2. Canal chama 600;">GET /offerings
│
▼
3. Canal chama 600;">GET /offerings/delivery-data (legal_document_number + postal_code)
│
├─ Cliente seleciona tipo de frete (scheduled / normal / express)
├─ delivery_methods[x].delivery_amount → delivery_info.delivery_amount
├─ delivery_methods[x].delivery_time → delivery_info.delivery_time
├─ delivery_methods[x].delivery_time_type → delivery_info.delivery_time_type (normal/express)
├─ delivery_methods[x].period_grid[y] → delivery_info.period_grid (scheduled)
└─ período selecionado → delivery_info.recommended_delivery_period (scheduled)
│
▼
4. Canal exibe ofertas ao cliente
│
▼
5. Cliente seleciona uma ou mais ofertas
│
▼
6. Para cada oferta selecionada:
└─ Para cada item em offering.items[]:
├─ item_sequence_number = próximo número sequencial global
├─ offering.priced_offering_id = offering.priced_offering_id (raiz da oferta)
├─ offering.smart_offering_id = offering.priced_offering_id (raiz da oferta)
├─ product = item.product (cópia integral)
├─ quantity = item.quantity
├─ settlement_period = item.settlement_period (se presente)
├─ unit_price = item.unit_price (se presente)
└─ total_price = item.total_price (se presente)
│
▼
7. Cliente informa dados bancários → montar merchant_accounts[]:
└─ Um item por bandeira contratada:
├─ brand = bandeira (visa / master / elo / amex / ...)
├─ merchant.merchant_id = merchant_id (passo 1)
├─ bank_account.bank.bank_code = código FEBRABAN do banco
├─ bank_account.bank_branch_code = agência
├─ bank_account.bank_account_number = conta + dígito
├─ bank_account.account_type = cc / pp
├─ payment_center = true/false
└─ merchant_account_restriction = []
│
▼
8. Canal calcula os campos de totalização:
└─ Para cada item onde product.product_type = "terminal":
├─ pricing_type = "monthly_rent" → somar total_price em total_monthly_rent
├─ pricing_type = "fixed_price" → somar total_price em total_fixed_price
├─ pricing_type = "affiliation_fee" → somar total_price em total_affiliation_fee
├─ pricing_type = "recurrent" → somar total_price em total_recurrent
├─ pricing_type = "payment_price" → somar total_price em total_payment_price
└─ pricing_type = "license" → somar total_price em total_license
│
▼
9. Canal chama 600;">POST /orders com merchant, delivery_info, items, merchant_accounts e campos de totalização
│
└─ Recebe o order_id do pedido criado
⚠️ Guardar o order_id — obrigatório nas etapas seguintes
│
▼
9a. (Se necessário) Canal atualiza o pedido via 600;">PUT /orders/{order_id}
│
├─ Se o canal armazena o pedido localmente → alterar estrutura local e enviar 600;">PUT completo
└─ Se não armazena → 600;">GET /orders/{order_id} → aplicar alterações → enviar 600;">PUT completo
(Recalcular campos de totalização se itens foram alterados)
│
▼
10. (Recomendado) Canal chama 600;">POST /orders/{order_id}/validation
│
├─ report.recommended.status = "approved" → pode prosseguir para submissão
└─ report.recommended.status = "reproved" → verificar report.details[].detail_description
e corrigir o pedido antes de submeter
│
▼
11. Canal chama 600;">PUT /orders/{order_id}/submit (cliente confirmou os dados do pedido)
│
├─ Reprovado → error.report.recommended = "reproved"
│ verificar report.details[].detail_description
│ (pedido não pode mais ser corrigido)
│
└─ Aprovado → situation.status = "submitted"
order_number gerado para acompanhamento do pedido pelo cliente
On this page
Orders