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.

information icon
⚠️ Guarde o order_id retornado 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) e PUT /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_idmerchant_id (raiz do objeto)

Exemplo

Retorno de GET /merchants/{merchant_id} (simplificado):
json
{ "merchant_id": "6a0fc6f29a4f90ca92a8670e", "acquirer_code": "getnet", "merchant_legal_data": {} }
Campo merchant no payload de POST /orders:
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]

Campos obrigatórios de cada item do pedido

Campo no pedido (items[*])Origem no retorno de GET /offeringsObservação
item_sequence_numberSequencial global crescente (1, 2, 3…) considerando todos os itens de todas as ofertas selecionadas.
offering.priced_offering_idoffering.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_idoffering.priced_offering_id (raiz da oferta)Deve ser preenchido com o mesmo valor de priced_offering_id.
productoffering.items[x].productO objeto product deve ser enviado integralmente como retornado na oferta.
quantityoffering.items[x].quantityQuantidade 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 /offeringsQuando presente
settlement_periodoffering.items[x].settlement_periodProdutos do tipo composite (adquirência).
unit_priceoffering.items[x].unit_priceProdutos com precificação (ex.: terminal com aluguel mensal).
total_priceoffering.items[x].total_priceProdutos 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_typeDescrição
scheduledEntrega Agendada
normalEntrega Convencional
expressEntrega 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)

CampoOrigem / Valor
delivery_type"scheduled" (fixo)
delivery_amountdelivery_methods[x].delivery_amount de GET /offerings/delivery-data
delivery_timedelivery_methods[x].delivery_time de GET /offerings/delivery-data
recommended_delivery_periodPeríodo selecionado pelo cliente ("morning", "afternoon" ou "night")
period_gridEntrada de delivery_methods[x].period_grid[] correspondente ao período selecionado pelo cliente
delivery_reference_pointPonto de referência informado pelo cliente
delivery_time_typenull
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" } } }

Convencional (normal)

CampoOrigem / Valor
delivery_type"normal" (fixo)
delivery_amountdelivery_methods[x].delivery_amount de GET /offerings/delivery-data
delivery_timedelivery_methods[x].delivery_time de GET /offerings/delivery-data
delivery_time_typedelivery_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" } } }

Expressa (express)

CampoOrigem / Valor
delivery_type"express" (fixo)
delivery_amountdelivery_methods[x].delivery_amount de GET /offerings/delivery-data
delivery_timedelivery_methods[x].delivery_time de GET /offerings/delivery-data
delivery_time_typedelivery_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" } } }

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 } ] } ]

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 } ] }
information icon
Nota: Os itens da segunda oferta assumem numeração sequencial continuando a partir do último item da primeira oferta (2, 3, 4…). O item_sequence_number original 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 tipo composite (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, enviar null.

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

CampoDescrição
brandBandeira à qual o domicílio se aplica (visa, master, elo, amex, hipercard, pix)
merchant.merchant_idO mesmo merchant_id do campo raiz merchant do pedido
bank_account.bank.bank_countryPaís do banco (ex.: "BR")
bank_account.bank.bank_codeCódigo de compensação do banco (FEBRABAN)
bank_account.bank_branch_codeNúmero da agência
bank_account.bank_account_numberNúmero da conta + dígito verificador
bank_account.bank_account_currencyMoeda da conta (ex.: "BRL")
bank_account.account_typeTipo da conta: cc (corrente), pp (poupança)
payment_centertrue para ativar centralização de pagamentos
merchant_account_restrictionLista 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": [] } ] }

Tipos de conta (account_type)

ValorDescrição
ccConta Corrente
ppConta 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çãoO que fazer
Canal armazena a estrutura do pedido em seu domínioNã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 localmenteBuscar 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âmetroTipoDescrição
order_idstringID 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 pedidopricing_model.pricing_type dos terminais somados
total_fixed_pricefixed_price
total_monthly_rentmonthly_rent
total_affiliation_feeaffiliation_fee
total_recurrentrecurrent
total_payment_pricepayment_price
total_licenselicense
information icon
Itens cujo product.product_type não seja terminal (ex.: composite, service) não entram nos cálculos de totalização.

Exemplo

Suponha que o pedido possui os seguintes itens do tipo terminal:
Itemproduct_typepricing_model.pricing_typetotal_price
1terminalmonthly_rent7990
2terminalmonthly_rent4990
3terminalfixed_price19900
4composite

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 }
information icon
Nota: Campos sem terminais correspondentes devem ser enviados com valor 0.

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.
information icon
⚠️ Importante: O endpoint é opcional, mas é fortemente recomendado. Após a chamada de PUT /orders/{order_id}/submit, caso o pedido seja reprovado, não é possível corrigi-lo — ele será rejeitado definitivamente.

Parâmetro de rota

ParâmetroTipoDescrição
order_idstringID 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:
  1. 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.
  2. Se report.recommended.status = "reproved", verifique a lista report.details[]. Cada item da lista possui o campo detail_description com 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" } } }

Campos relevantes do retorno

CampoDescrição
report.recommended.statusResultado da validação: "approved" ou "reproved"
report.details[]Lista de detalhes dos erros encontrados (presente quando reproved)
report.details[].detail_descriptionDescrição legível do motivo da rejeição
report.details[].detail_typeTipo do erro (ex.: missing_mandatory_data)
report.details[].detail_attributeAtributo do pedido que causou o erro
report.details[].detail_codeCó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.
information icon
⚠️ Atenção: Após a submissão, caso o pedido seja reprovado, não é possível corrigi-lo. Por este motivo, recomenda-se fortemente utilizar POST /orders/{order_id}/validation antes da submissão.

Parâmetro de rota

ParâmetroTipoDescrição
order_idstringID 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:
  1. Verifique se existe error.report.recommended com valor "reproved".
  2. O campo message traz uma mensagem genérica sobre a reprovação.
  3. Para entender o motivo detalhado, verifique report.details[] e leia o campo detail_description de 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" } ] } } }

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" } }

Campos relevantes do retorno de sucesso

CampoDescrição
order_idIdentificador interno do pedido
order_numberNúmero do pedido gerado pela Getnet para acompanhamento pelo cliente
situation.status"submitted" — pedido recebido e em análise pela Getnet
situation.status_nameNome legível do status (ex.: "Submetido")
situation.status_update_dateData 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