Orders

Overview

The Orders domain is responsible for the lifecycle of orders on the Getnet platform. An order represents an accreditation request, equipment purchase, or product change made by a merchant (commercial establishment).

Order Creation — POST /orders

Prerequisite: Offering Selection

Before creating an order, the channel must have previously called the GET /offerings endpoint (documented in offerings.md), displayed the available offerings to the customer and captured the establishment's selection.

The channel may receive one or more available offerings. The customer selects one or more offerings to contract.

information icon
⚠️ Save the order_id returned by the order creation — it is required in all subsequent calls: PUT /orders/{order_id} (update), POST /orders/{order_id}/validation (validation) and PUT /orders/{order_id}/submit (submission). Without it, it is not possible to continue with the order.

Filling the merchant field

The merchant field identifies the establishment that is placing the order. The merchant registration must have been performed previously as described in merchants.md.

Prerequisite — Merchant registration

Before creating the order, the channel must call GET /merchants/{merchant_id} to confirm that the merchant exists and obtain its identifier.

Mapping rule

The merchant_id field is at the root of the object returned by GET /merchants/{merchant_id}. The merchant field of the order must be filled only with that value:
Field in the order (merchant)Origin in the return of GET /merchants/{merchant_id}
merchant_idmerchant_id (object root)

Example

Return of GET /merchants/{merchant_id} (simplified):
json
{ "merchant_id": "6a0fc6f29a4f90ca92a8670e", "acquirer_code": "getnet", "merchant_legal_data": {} }
merchant field in the POST /orders payload:
json
{ "merchant": { "merchant_id": "6a0fc6f29a4f90ca92a8670e" } }

Filling the items field

The items field of the POST /orders payload is an array that represents, in a flat way, all products from all offerings selected by the customer.

General mapping rule

For each offering selected by the customer, iterate over the items[] array of the offering returned by GET /offerings. Each entry of that array becomes an object inside the order's items[].
text
GET /offerings → offering[n].items[x] → POST /orders → items[sequencial]

Required fields of each order item

Field in the order (items[*])Origin in the return of GET /offeringsNote
item_sequence_numberGlobal incremental sequence (1, 2, 3…) considering all items of all selected offerings.
offering.priced_offering_idoffering.priced_offering_id (offering root)The priced_offering_id is at the root of the offering object, not inside items.
offering.smart_offering_idoffering.priced_offering_id (offering root)Must be filled with the same value as priced_offering_id.
productoffering.items[x].productThe product object must be sent in full as returned in the offering.
quantityoffering.items[x].quantityQuantity indicated in the offering for that product.

Optional/conditional fields of each order item

The fields below exist within items[x] in the return of GET /offerings for certain product types. When present, they must be forwarded in the respective order item:
Field in the order (items[*])Origin in the return of GET /offeringsWhen present
settlement_periodoffering.items[x].settlement_periodProducts of type composite (acquiring).
unit_priceoffering.items[x].unit_priceProducts with pricing (e.g.: terminal with monthly rent).
total_priceoffering.items[x].total_priceProducts with pricing (e.g.: terminal with monthly rent).

Filling the delivery_info field

The delivery_info field contains the equipment delivery information.

Prerequisite — Shipping types lookup

Before filling delivery_info, the channel must call GET /offerings/delivery-data (documented in offerings.yaml) providing the customer's legal_document_number and postal_code. The response returns the available shipping types in the delivery_methods[] array.

The customer selects the desired shipping type from those available:

delivery_typeDescription
scheduledScheduled Delivery
normalStandard Delivery
expressExpress Delivery

Delivery address — delivery_address

Must be filled with the equipment delivery address provided by the customer. Follows the same structure as the merchant's address fields (business_address, residential_address, commercial_address).

Fields by shipping type

Scheduled (scheduled)

FieldOrigin / Value
delivery_type"scheduled" (fixed)
delivery_amountdelivery_methods[x].delivery_amount from GET /offerings/delivery-data
delivery_timedelivery_methods[x].delivery_time from GET /offerings/delivery-data
recommended_delivery_periodPeriod selected by the customer ("morning", "afternoon" or "night")
period_gridEntry of delivery_methods[x].period_grid[] corresponding to the period selected by the customer
delivery_reference_pointReference point provided by the customer
delivery_time_typenull
Example:
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" } } }

Standard (normal)

FieldOrigin / Value
delivery_type"normal" (fixed)
delivery_amountdelivery_methods[x].delivery_amount from GET /offerings/delivery-data
delivery_timedelivery_methods[x].delivery_time from GET /offerings/delivery-data
delivery_time_typedelivery_methods[x].delivery_time_type from GET /offerings/delivery-data (D or H)
Example:
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" } } }

Express (express)

FieldOrigin / Value
delivery_type"express" (fixed)
delivery_amountdelivery_methods[x].delivery_amount from GET /offerings/delivery-data
delivery_timedelivery_methods[x].delivery_time from GET /offerings/delivery-data
delivery_time_typedelivery_methods[x].delivery_time_type from GET /offerings/delivery-data (D or H)
Example:
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" } } }

Mapping example

Return of GET /offerings (simplified)

The customer selected two offerings: "Adquirência Físico Aluguel" (1 item) and "Oferta E-commerce - Link de Pagamento V2" (7 items). Below, the summarized structure of the return:
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 } ] } ]

Resulting payload for POST /ordersitems field

All items are flattened into a single array with global sequential numbering:
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
Note: The items of the second offering take sequential numbering continuing from the last item of the first offering (2, 3, 4…). The original item_sequence_number of each item within the offering (offering.items[x].item_sequence_number) is discarded — what matters is the global sequence of the order.

Important rules

1. Global item sequence

The item_sequence_number is a unique and incremental counter for the entire items array of the order, regardless of how many offerings were selected.

2. priced_offering_id and smart_offering_id come from the offering root

These two fields must be filled with the value of priced_offering_id that is at the root of the offering object returned by GET /offerings — and not inside items[x]. Both (priced_offering_id and smart_offering_id) receive the same value.

3. The product object is sent in full

The product object must be copied exactly as returned in offering.items[x].product, including all fields specific to the product type (terminal_type, modality, delivery_method, product_configuration, etc.). Do not omit fields.

4. Conditional fields by product type

Some fields exist in the offering item only for certain product types:

  • settlement_period: present in products of type composite (acquiring). Must be forwarded in the order item.
  • unit_price / total_price: present when the product has a defined price (e.g.: terminal with monthly rent). Must be forwarded in the order item. When there is no price, send null.

5. An offering may have multiple items

A single selected offering can return multiple products in its items[] array. Each product becomes a separate item in the order, all sharing the same offering.priced_offering_id and offering.smart_offering_id.

Filling the merchant_accounts field

The merchant_accounts field is a list of bank domiciles — that is, the bank accounts where the merchant will receive the receivables of transactions made on Getnet's machines and services.
One item must be created per brand contracted in the selected offerings.

Structure of each item

FieldDescription
brandBrand to which the domicile applies (visa, master, elo, amex, hipercard, pix)
merchant.merchant_idThe same merchant_id from the order's root merchant field
bank_account.bank.bank_countryBank country (e.g.: "BR")
bank_account.bank_codeBank clearing code (FEBRABAN)
bank_account.bank_branch_codeBranch number
bank_account.bank_account_numberAccount number + verifier digit
bank_account.bank_account_currencyAccount currency (e.g.: "BRL")
bank_account.account_typeAccount type: cc (checking), pp (savings)
payment_centertrue to enable payment centralization
merchant_account_restrictionList of restrictions. Send [] when there are no restrictions

Example

In the example below, the merchant configures the same bank domicile for four brands:

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": [] } ] }

Account types (account_type)

ValueDescription
ccChecking Account
ppSavings Account

Order Update — PUT /orders/{order_id}

Overview

The PUT /orders/{order_id} endpoint allows updating the data of an existing order, for example to add or correct information before submission.

⚠️ Total replacement of the order

The PUT fully replaces the order. Never send a partial payload — omitted fields will be removed. Always send the complete order object.

Difference compared to the merchant

Unlike PUT /merchants/{merchant_id}, the order is not enriched after creation: no new information is added to the object by the platform. The data stored in the order is exactly what the channel sent in POST /orders.

For this reason, the recommended behavior depends on how the channel manages the order state:

SituationWhat to do
Channel stores the order structure in its domainIt is not necessary to call GET /orders/{order_id}. Just modify or increment the fields in the local structure and send the PUT with the complete object.
Channel does not store the order structure locallyFetch the current order with GET /orders/{order_id} (using the order_id returned by POST /orders), apply the changes and then send the PUT.

Route parameter

ParameterTypeDescription
order_idstringID returned in the order creation (POST /orders)

Recalculate totalization fields

After any change in the order items, the totalization fields must be recalculated before sending the PUT. The rule is the same as creation — see the Filling the totalization fields section below.

Filling the totalization fields

The order's totalization fields represent the sum of the values of products of type terminal present in the items array, grouped by the pricing type (pricing_model.pricing_type) of each product.

General rule

For each order item where product.product_type = "terminal", sum the total_price value of the item according to the product.pricing_model.pricing_type, and fill in the corresponding field at the order root:
Field in the orderpricing_model.pricing_type of the summed terminals
total_fixed_pricefixed_price
total_monthly_rentmonthly_rent
total_affiliation_feeaffiliation_fee
total_recurrentrecurrent
total_payment_pricepayment_price
total_licenselicense
information icon
Items whose product.product_type is not terminal (e.g.: composite, service) do not enter the totalization calculations.

Example

Suppose the order has the following items of type terminal:
Itemproduct_typepricing_model.pricing_typetotal_price
1terminalmonthly_rent7990
2terminalmonthly_rent4990
3terminalfixed_price19900
4composite

The totalization fields would be filled as:

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
Note: Fields without corresponding terminals must be sent with value 0.

Order Validation — POST /orders/{order_id}/validation

Overview

After creating the order with POST /orders, the channel will receive the order_id. Before submitting the order definitively, it is highly recommended to call POST /orders/{order_id}/validation.
This endpoint performs a complete validation of the order data — applying the same business rules as the submission — without changing the order status. If there are inconsistencies, the channel can correct them before the definitive submission.
information icon
⚠️ Important: The endpoint is optional, but strongly recommended. After the call to PUT /orders/{order_id}/submit, if the order is rejected, it cannot be corrected — it will be definitively rejected.

Route parameter

ParameterTypeDescription
order_idstringID returned in the order creation (POST /orders)

How to interpret the response

The response contains a report field with the validation information. To check whether the validation approved or rejected the order:
  1. Check the report.recommended.status field:
    • "approved" → The order is correct and can be submitted.
    • "reproved" → The order contains errors that must be corrected before submission.
  2. If report.recommended.status = "reproved", check the report.details[] list. Each item in the list has the detail_description field with the description of the rejection reason.

Example response with rejection

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

Relevant fields of the response

FieldDescription
report.recommended.statusValidation result: "approved" or "reproved"
report.details[]List of details of the errors found (present when reproved)
report.details[].detail_descriptionReadable description of the rejection reason
report.details[].detail_typeError type (e.g.: missing_mandatory_data)
report.details[].detail_attributeOrder attribute that caused the error
report.details[].detail_codeInternal error code

Order Submission — PUT /orders/{order_id}/submit

Overview

The PUT /orders/{order_id}/submit endpoint represents the definitive confirmation of the order by the customer. By calling it, the channel declares that the customer has reviewed all the order information and confirms agreement.
information icon
⚠️ Attention: After submission, if the order is rejected, it cannot be corrected. For this reason, it is strongly recommended to use POST /orders/{order_id}/validation before submission.

Route parameter

ParameterTypeDescription
order_idstringID returned in the order creation (POST /orders)

Response in case of rejection

If the order is rejected during submission, the response will contain an error object with rejection information:
  1. Check whether error.report.recommended exists with the value "reproved".
  2. The message field provides a generic message about the rejection.
  3. To understand the detailed reason, check report.details[] and read the detail_description field of each item.
Example response in case of rejection:
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" } ] } } }

Response in case of success

When the submission is successful, the response contains:

  • situation.status = "submitted" → indicates that the order was received by Getnet and is being processed.
  • order_number → order number generated by Getnet, which can be used by the customer to track their order.
Example response in case of success:
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" } }

Relevant fields of the success response

FieldDescription
order_idInternal order identifier
order_numberOrder number generated by Getnet for customer tracking
situation.status"submitted" — order received and under analysis by Getnet
situation.status_nameReadable name of the status (e.g.: "Submetido")
situation.status_update_dateDate and time of the last status update

Summary flow

text
1. Channel calls 600;">GET /merchants/{merchant_id} │ ├─ merchant_id → merchant.merchant_id in the order └─ merchant_id → merchant_accounts[*].merchant.merchant_id │ ▼ 2. Channel calls 600;">GET /offerings │ ▼ 3. Channel calls 600;">GET /offerings/delivery-data (legal_document_number + postal_code) │ ├─ Customer selects shipping type (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) └─ selected period → delivery_info.recommended_delivery_period (scheduled) │ ▼ 4. Channel displays offerings to the customer │ ▼ 5. Customer selects one or more offerings │ ▼ 6. For each selected offering: └─ For each item in offering.items[]: ├─ item_sequence_number = next global sequential number ├─ offering.priced_offering_id = offering.priced_offering_id (offering root) ├─ offering.smart_offering_id = offering.priced_offering_id (offering root) ├─ product = item.product (full copy) ├─ quantity = item.quantity ├─ settlement_period = item.settlement_period (if present) ├─ unit_price = item.unit_price (if present) └─ total_price = item.total_price (if present) │ ▼ 7. Customer provides bank data → build merchant_accounts[]: └─ One item per contracted brand: ├─ brand = brand (visa / master / elo / amex / ...) ├─ merchant.merchant_id = merchant_id (step 1) ├─ bank_account.bank.bank_code = bank's FEBRABAN code ├─ bank_account.bank_branch_code = branch ├─ bank_account.bank_account_number = account + digit ├─ bank_account.account_type = cc / pp ├─ payment_center = true/false └─ merchant_account_restriction = [] │ ▼ 8. Channel calculates the totalization fields: └─ For each item where product.product_type = "terminal": ├─ pricing_type = "monthly_rent" → sum total_price into total_monthly_rent ├─ pricing_type = "fixed_price" → sum total_price into total_fixed_price ├─ pricing_type = "affiliation_fee" → sum total_price into total_affiliation_fee ├─ pricing_type = "recurrent" → sum total_price into total_recurrent ├─ pricing_type = "payment_price" → sum total_price into total_payment_price └─ pricing_type = "license" → sum total_price into total_license │ ▼ 9. Channel calls 600;">POST /orders with merchant, delivery_info, items, merchant_accounts and totalization fields │ └─ Receives the order_id of the created order ⚠️ Save the order_id — required in subsequent steps │ ▼ 9a. (If necessary) Channel updates the order via 600;">PUT /orders/{order_id} │ ├─ If the channel stores the order locally → modify local structure and send full 600;">PUT └─ If it does not store → 600;">GET /orders/{order_id} → apply changes → send full 600;">PUT (Recalculate totalization fields if items were modified) │ ▼ 10. (Recommended) Channel calls 600;">POST /orders/{order_id}/validation │ ├─ report.recommended.status = "approved" → can proceed to submission └─ report.recommended.status = "reproved" → check report.details[].detail_description and correct the order before submitting │ ▼ 11. Channel calls 600;">PUT /orders/{order_id}/submit (customer confirmed the order data) │ ├─ Rejected → error.report.recommended = "reproved" │ check report.details[].detail_description │ (order can no longer be corrected) │ └─ Approved → situation.status = "submitted" order_number generated for customer's order tracking