MBWay
MB WAY is an asynchronous mobile wallet widely used in Portugal and managed by SIBS. Customers authorize payments in the MB WAY app with the phone number registered at their bank. They never enter or expose card details during checkout.
After you create the payment, MB WAY sends a push notification to the customer's mobile device. The customer opens the MB WAY app to approve or decline the payment.
This guide shows you how to integrate MB WAY payments. It covers one-time payments, expiration handling, Recurring and One Click Buy payments, refunds, cancellations, webhooks, and status checks.
Important: MB WAY is asynchronous. The initial API response returnsWAITING, which means Getnet created the payment request and it awaits customer authorization. The MB WAY notification expires 4 minutes and 30 seconds after the payment intent is created. You get the final payment status through a webhook or by polling the Get Transaction endpoint.
Requirements
Before you integrate MB WAY, complete the following:
- Generate an access token through the Authentication endpoint.
- Make sure your seller account is enabled for MB WAY.
- Collect the customer's MB WAY-enabled phone number during checkout.
- For Recurring and One Click Buy payments, also collect the customer's name.
- Implement webhook event handling or payment status polling.
- Make sure your integration doesn't fulfill the order while the payment status is
WAITING.
To enable MB WAY, contact your Account Manager. They validate eligibility and activate the payment method for your seller account.
Check Market Requirements
EUR currency.Review the resources below for Portugal before you go live:
Characteristics
The table below summarizes the shared behavior and requirements for MB WAY payments.
| Capability | Details |
|---|---|
| Integration type | Asynchronous mobile wallet payment with no external browser redirect |
| Customer interaction | Push notification sent to the customer's mobile device through the MB WAY app |
| Credentials required | Customer's MB WAY-enabled phone number in countryCode#phoneNumber format |
| Initial status | The initial API response returns WAITING while the payment awaits customer authorization |
| Confirmation | Asynchronous: the customer approves or declines the payment through the MB WAY app |
| Authorization time | The MB WAY payment notification expires 4 minutes and 30 seconds after the payment intent is created |
| Recurring and One Click Buy payments | The customer approves an initial authorization once and sets a maximum monthly limit. You then charge subsequent payments, in fixed or variable amounts, within that limit |
| Refund period | You can request refunds for up to 15 months from the original payment date |
| Notifications | Track asynchronous status updates through webhooks or status polling |
| Currency | EUR only |
| Country availability | Portugal only |
After you create the payment request, MB WAY sends a push notification to the customer's device. The customer opens the MB WAY app to approve or decline the payment. You receive status updates through webhooks, or you can retrieve them with the Get Transaction endpoint.
Available Features
Use the matrix below to confirm the scenarios currently supported for MB WAY.
| Payment flow | Supported countries | Purchases | Recurring | Refunds | Partial refunds | Multiple refunds | Pre-authorizations |
|---|---|---|---|---|---|---|---|
| Wallet | Portugal | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Payment Flow
This section walks you through a one-time MB WAY payment. It starts with collecting the customer's phone number and ends with handling the response, expiration, and final status.
The diagram below provides an overview of an MB WAY payment and its possible outcomes:
1. Create the Payment Request
MB WAY uses an asynchronous wallet flow. First, add a payment form to your frontend that collects the customer's MB WAY-enabled phone number.
After you collect it, call the Create – Authorize endpoint with the attributes below.
The table outlines the minimum fields required for an MB WAY payment.
| Attribute | Description | Required value |
|---|---|---|
idempotency_key | Unique identifier used to prevent duplicate processing | UUID |
request_id | Unique identifier used to trace the request | UUID |
order_id | Merchant reference used for reconciliation | Unique string with a maximum of 35 characters. |
data.amount | Transaction amount in cents | Integer, for example 5000 for €50.00 |
data.currency | ISO 4217 currency code | EUR |
data.payment.payment_method | Wallet payment method | WALLET |
data.payment.brand | MB WAY brand identifier | MBWAY |
data.additional_data.customer.phone_number | Customer's MB WAY-enabled phone number | countryCode#phoneNumber |
Phone number format: UsecountryCode#phoneNumber, for example351#912345678. Don't include the+symbol, spaces, parentheses, or hyphens. The country code must contain 1 to 4 digits. The phone number must contain 6 to 15 digits.
Valid example:
Invalid examples:
The following sample request creates an MB WAY payment with only the minimum required customer information.
curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "5befb59b-85be-46cd-b924-ec77f5b75d5c",
"request_id": "c4045e74-ef2e-4f8b-a30d-6ba63c57b407",
"order_id": "MBWAY-20260415-00001",
"data": {
"amount": 5000,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678"
}
}
}
}'curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "5befb59b-85be-46cd-b924-ec77f5b75d5c",
"request_id": "c4045e74-ef2e-4f8b-a30d-6ba63c57b407",
"order_id": "MBWAY-20260415-00001",
"data": {
"amount": 5000,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678"
}
}
}
}'You can also include customer, billing, and shipping information when risk, compliance, fraud prevention, or local configuration requires it.
curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "5befb59b-85be-46cd-b924-ec77f5b75d5c",
"request_id": "c4045e74-ef2e-4f8b-a30d-6ba63c57b407",
"order_id": "MBWAY-20260415-00001",
"data": {
"amount": 5000,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY"
},
"additional_data": {
"customer": {
"email": "customer@example.com",
"document_number": "123456789",
"document_type": "nif",
"name": "Jose da Silva",
"phone_number": "351#912345678",
"billing_address": {
"street": "Avenida da Liberdade",
"number": "10",
"complement": "2A",
"district": "Santo Antonio",
"city": "Lisbon",
"state": "Lisbon",
"country": "PT",
"postal_code": "1250-096"
}
},
"shippings": {
"address": {
"street": "Avenida da Liberdade",
"number": "10",
"complement": "2A",
"district": "Santo Antonio",
"city": "Lisbon",
"state": "Lisbon",
"country": "PT",
"postal_code": "1250-096"
}
}
}
}
}'curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "5befb59b-85be-46cd-b924-ec77f5b75d5c",
"request_id": "c4045e74-ef2e-4f8b-a30d-6ba63c57b407",
"order_id": "MBWAY-20260415-00001",
"data": {
"amount": 5000,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY"
},
"additional_data": {
"customer": {
"email": "customer@example.com",
"document_number": "123456789",
"document_type": "nif",
"name": "Jose da Silva",
"phone_number": "351#912345678",
"billing_address": {
"street": "Avenida da Liberdade",
"number": "10",
"complement": "2A",
"district": "Santo Antonio",
"city": "Lisbon",
"state": "Lisbon",
"country": "PT",
"postal_code": "1250-096"
}
},
"shippings": {
"address": {
"street": "Avenida da Liberdade",
"number": "10",
"complement": "2A",
"district": "Santo Antonio",
"city": "Lisbon",
"state": "Lisbon",
"country": "PT",
"postal_code": "1250-096"
}
}
}
}
}'2. Review the Response
WAITING status, as in the example below.{
"idempotency_key": "5befb59b-85be-46cd-b924-ec77f5b75d5c",
"seller_id": "2ee453aa-3ab6-447b-becf-d9d4360051eb",
"payment_id": "32f5b40a-466c-4640-ad32-5a62f7dd0173",
"order_id": "MBWAY-20260415-00001",
"amount": "5000",
"currency": "EUR",
"status": "WAITING",
"received_at": "2026-04-15T17:52:55.422Z",
"transaction_id": "03170590083743095182",
"reason_code": "00",
"reason_message": "Pending",
"acquirer_transaction_id": "s23iDV9z9GUwpS11Hm9j"
}{
"idempotency_key": "5befb59b-85be-46cd-b924-ec77f5b75d5c",
"seller_id": "2ee453aa-3ab6-447b-becf-d9d4360051eb",
"payment_id": "32f5b40a-466c-4640-ad32-5a62f7dd0173",
"order_id": "MBWAY-20260415-00001",
"amount": "5000",
"currency": "EUR",
"status": "WAITING",
"received_at": "2026-04-15T17:52:55.422Z",
"transaction_id": "03170590083743095182",
"reason_code": "00",
"reason_message": "Pending",
"acquirer_transaction_id": "s23iDV9z9GUwpS11Hm9j"
}The table below describes the main response fields.
| Attribute | Description |
|---|---|
payment_id | Payment identifier used to query the payment status and correlate asynchronous updates |
order_id | Merchant order reference used for reconciliation |
amount | Transaction amount in cents |
currency | Transaction currency. For MB WAY, this value is EUR |
status | Current payment status. The initial successful response returns WAITING |
received_at | Date and time when the payment request was received |
transaction_id | Transaction identifier associated with the payment |
reason_code | Processing reason code returned by the API |
reason_message | Human-readable description associated with the processing status |
acquirer_transaction_id | Transaction identifier assigned by the acquirer or payment provider |
Use thestatusfield to track the payment lifecycle. Don't usereason_codealone to decide whether to fulfill the order.
3. Wait for Customer Approval
After the API call, the following sequence occurs:
- Payment request: Getnet creates the payment and returns the initial
WAITINGstatus. - Push notification: MB WAY sends a notification to the customer's registered mobile device.
- MB WAY app: The customer opens the MB WAY app and reviews the merchant and payment information.
- Customer action:
- Approves payment → Status becomes
APPROVED, and Getnet sends anAPPROVED_TRANSACTIONSwebhook event. - Declines or rejects payment → Status becomes
DECLINED, and Getnet sends aREJECTED_TRANSACTIONSwebhook event. - Doesn't respond within 4 minutes and 30 seconds → The notification expires, and Getnet can send a
REJECTED_TRANSACTIONSwebhook event.
- Approves payment → Status becomes
- Payment confirmation: Getnet receives the result and updates the payment status asynchronously.
- Order fulfillment: You fulfill the order only after you confirm the final
APPROVEDstatus.
The customer has 4 minutes and 30 seconds from the creation of the payment intent to authorize the payment. The countdown starts when the payment intent is created, not when the customer opens the MB WAY app.
4. Handle Payment Expiration
The customer must approve the payment in the MB WAY app within the authorization period. After the notification expires, the customer can't use that payment request anymore.
If the customer doesn't complete the payment within the authorization period:
- Don't fulfill the order.
- Wait for the final payment status through a webhook, or query the Get Transaction endpoint.
- Create a new payment request if the customer wants to try again.
Important: Don't assume the payment failed only because the checkout countdown ended. Always confirm the final transaction status through a webhook or the Get Transaction endpoint.
5. Verify the Payment Status
When the customer approves, declines, or doesn't complete the payment, Getnet sends a webhook with the updated status.
payment_id returned in the initial response.curl --request GET \
--url https://api.pre.globalgetnet.com/dpm/hub-payment-info/v1/payments/info/{payment_id} \
--header 'Authorization: Bearer <your-token>'curl --request GET \
--url https://api.pre.globalgetnet.com/dpm/hub-payment-info/v1/payments/info/{payment_id} \
--header 'Authorization: Bearer <your-token>'Use status polling as a fallback when:
- Webhook delivery is delayed.
- You don't receive a webhook.
- The customer returns to the checkout before the final webhook is processed.
- You need to reconcile an uncertain payment result.
Avoid excessive polling. Use a reasonable interval and stop polling after you receive a final payment status.
Recurring and One Click Buy Payments
MB WAY supports two types of stored payment: Recurring Transactions and One Click Buy Transactions. Both follow the same flow. The customer approves an initial authorization once in the MB WAY app and sets a maximum monthly limit. You then charge subsequent payments within that limit, without asking the customer to approve each one.
Choose a Transaction Type
credentials_on_file_type values change.| Recurring Transaction | One Click Buy Transaction | |
|---|---|---|
| Use it for | Subscriptions and payment plans | One-off purchases by a customer who saved their details for a faster checkout |
| Charge pattern | Charges at regular intervals, usually for a fixed amount | Charges for each specific purchase the customer makes, usually for a different amount each time |
| Initial authorization | RECURRING | ONE_CLICK |
| Subsequent payments | RECURRING_PAYMENT | ONE_CLICK_PAYMENT |
Both types accept variable amounts in subsequent payments. Subscriptions often charge the same amount every time, but Getnet doesn't require it. Getnet processes any amount within the monthly limit the customer set in the MB WAY app.
How It Works
The flow has two stages: one authorization that the customer approves, then any number of subsequent payments.
- You create the initial authorization through the Create – Authorize endpoint with
RECURRINGorONE_CLICK. - Getnet returns the
WAITINGstatus and atransaction_id. Store thetransaction_idsecurely. - MB WAY sends a push notification to the customer's mobile device.
- The customer opens the MB WAY app, sets the maximum monthly limit, and approves the authorization.
- You create subsequent payments with the stored
transaction_idandRECURRING_PAYMENTorONE_CLICK_PAYMENT. Each payment must stay within the customer's limit.
Important: The customer must approve the initial authorization within 10 minutes of its creation. After that, you can't use the authorization and must create a new one.
1. Create the Initial Authorization
data.amount is optional, and you add the fields below.| Attribute | Description | Required value |
|---|---|---|
data.payment.credentials_on_file_type | Marks the request as the first transaction of a Recurring or One Click Buy sequence | RECURRING or ONE_CLICK |
data.payment.payment_id | Payment identifier for this request | UUID |
data.additional_data.customer.name | Customer's name. Required in every Recurring and One Click Buy request | String |
The following sample request creates the initial authorization for a Recurring Transaction.
curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "9d3c1e52-7b4a-4f0e-a8d1-2c6b5f9e0a37",
"request_id": "1f8a6c2d-4e3b-4a7f-9b0c-5d2e8f1a6c49",
"order_id": "MBWAY-REC-20261016-00001",
"data": {
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "RECURRING",
"payment_id": "7a9a2de0-6e6d-48ca-bcff-b42b3b1a5653"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "9d3c1e52-7b4a-4f0e-a8d1-2c6b5f9e0a37",
"request_id": "1f8a6c2d-4e3b-4a7f-9b0c-5d2e8f1a6c49",
"order_id": "MBWAY-REC-20261016-00001",
"data": {
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "RECURRING",
"payment_id": "7a9a2de0-6e6d-48ca-bcff-b42b3b1a5653"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'credentials_on_file_type set to ONE_CLICK.curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "4b8e2f6a-9c1d-4e7b-a3f5-6d2c8e1b9a74",
"request_id": "a7c3e9d1-5b2f-4a8e-9d6c-1f4b7e2a8c53",
"order_id": "MBWAY-OC-20261016-00001",
"data": {
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "ONE_CLICK",
"payment_id": "3c6f8a1e-2d9b-4f7c-8e5a-9b1d4c7f2e86"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "4b8e2f6a-9c1d-4e7b-a3f5-6d2c8e1b9a74",
"request_id": "a7c3e9d1-5b2f-4a8e-9d6c-1f4b7e2a8c53",
"order_id": "MBWAY-OC-20261016-00001",
"data": {
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "ONE_CLICK",
"payment_id": "3c6f8a1e-2d9b-4f7c-8e5a-9b1d4c7f2e86"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'Important: The initial authorization doesn't charge the customer, soamountis optional. If you don't send it, the response returnsamountas0.
WAITING, because the customer still has to approve it in the MB WAY app. The response below is for the Recurring Transaction request. A One Click Buy initial authorization returns the same fields.{
"idempotency_key": "9d3c1e52-7b4a-4f0e-a8d1-2c6b5f9e0a37",
"seller_id": "6f42ca7f-be26-42b7-b25e-f8ccd496a05b",
"payment_id": "7a9a2de0-6e6d-48ca-bcff-b42b3b1a5653",
"order_id": "MBWAY-REC-20261016-00001",
"amount": "0",
"currency": "EUR",
"status": "WAITING",
"received_at": "2026-10-16T13:29:06.120Z",
"transaction_id": "03170589268627277442",
"reason_code": "00",
"reason_message": "Payment processed",
"acquirer_transaction_id": "s2kPzQGvnznaAUMsJtje"
}{
"idempotency_key": "9d3c1e52-7b4a-4f0e-a8d1-2c6b5f9e0a37",
"seller_id": "6f42ca7f-be26-42b7-b25e-f8ccd496a05b",
"payment_id": "7a9a2de0-6e6d-48ca-bcff-b42b3b1a5653",
"order_id": "MBWAY-REC-20261016-00001",
"amount": "0",
"currency": "EUR",
"status": "WAITING",
"received_at": "2026-10-16T13:29:06.120Z",
"transaction_id": "03170589268627277442",
"reason_code": "00",
"reason_message": "Payment processed",
"acquirer_transaction_id": "s2kPzQGvnznaAUMsJtje"
}transaction_id from this response securely. You send it in every subsequent payment.Important: Don't treat the initial authorization as a completed payment. It sets up the monthly limit and doesn't represent a charge.
2. Wait for the Customer to Set the Limit
The customer interacts with MB WAY only during this setup step. In the MB WAY app, the customer:
- Receives a push notification.
- Reviews the authorization.
- Sets the maximum monthly limit for future payments.
- Approves the authorization.
Getnet doesn't charge the customer during this step. After approval, you charge subsequent payments without asking the customer to approve each one. Each amount must stay within the limit.
Keep the following in mind after setup:
- The authorization may expire, the customer may revoke it, or it may become unavailable for operational reasons.
- Each subsequent payment is an independent transaction, with its own lifecycle and status.
3. Create a Subsequent Payment
To charge the customer, send a new request with the fields below. Each payment must stay within the limit the customer set.
| Attribute | Description | Required value |
|---|---|---|
data.payment.credentials_on_file_type | Marks the request as a subsequent payment in a Recurring or One Click Buy sequence | RECURRING_PAYMENT or ONE_CLICK_PAYMENT. Match the type of the initial authorization |
data.payment.transaction_id | Links the payment to the customer's authorization | The transaction_id returned by the initial authorization |
data.payment.payment_id | Payment identifier for this request | UUID |
data.additional_data.customer.name | Customer's name | String |
The following sample request charges €10.00 against the Recurring Transaction authorization created above.
curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "c2b7e4f1-3a9d-4c6e-8f2b-7d1a5e9c3b60",
"request_id": "e6a4d9b2-1c7f-4e8a-b3d5-9f2c6a1e7b84",
"order_id": "MBWAY-REC-20261116-00002",
"data": {
"amount": 1000,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "RECURRING_PAYMENT",
"transaction_id": "03170589268627277442",
"payment_id": "5e1d9b3a-8c2f-4a6d-b7e0-3f9a1c4d8e25"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "c2b7e4f1-3a9d-4c6e-8f2b-7d1a5e9c3b60",
"request_id": "e6a4d9b2-1c7f-4e8a-b3d5-9f2c6a1e7b84",
"order_id": "MBWAY-REC-20261116-00002",
"data": {
"amount": 1000,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "RECURRING_PAYMENT",
"transaction_id": "03170589268627277442",
"payment_id": "5e1d9b3a-8c2f-4a6d-b7e0-3f9a1c4d8e25"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'credentials_on_file_type to ONE_CLICK_PAYMENT. Send the transaction_id from the One Click Buy initial authorization. The following sample request charges €24.90 for a single purchase.curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "8f1a4d7c-6e2b-4c9a-b5d3-2e7f9a1c4b68",
"request_id": "d5b9e2a7-3f6c-4d1e-a8b4-7c2f5e9d1a36",
"order_id": "MBWAY-OC-20261103-00002",
"data": {
"amount": 2490,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "ONE_CLICK_PAYMENT",
"transaction_id": "03170589311845290617",
"payment_id": "6e2c9f4b-1a7d-4b3e-9c8f-5d1a2e6b7c94"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'curl --request POST \
--url https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "8f1a4d7c-6e2b-4c9a-b5d3-2e7f9a1c4b68",
"request_id": "d5b9e2a7-3f6c-4d1e-a8b4-7c2f5e9d1a36",
"order_id": "MBWAY-OC-20261103-00002",
"data": {
"amount": 2490,
"currency": "EUR",
"payment": {
"payment_method": "WALLET",
"brand": "MBWAY",
"credentials_on_file_type": "ONE_CLICK_PAYMENT",
"transaction_id": "03170589311845290617",
"payment_id": "6e2c9f4b-1a7d-4b3e-9c8f-5d1a2e6b7c94"
},
"additional_data": {
"customer": {
"phone_number": "351#912345678",
"name": "Braga Santos"
}
}
}
}'A successful subsequent payment returns its own transaction response and status. The response below is for the Recurring Transaction request. A One Click Buy subsequent payment returns the same fields.
{
"idempotency_key": "c2b7e4f1-3a9d-4c6e-8f2b-7d1a5e9c3b60",
"seller_id": "6f42ca7f-be26-42b7-b25e-f8ccd496a05b",
"payment_id": "5e1d9b3a-8c2f-4a6d-b7e0-3f9a1c4d8e25",
"order_id": "MBWAY-REC-20261116-00002",
"amount": "1000",
"currency": "EUR",
"status": "APPROVED",
"received_at": "2026-11-16T11:20:05.640Z",
"transaction_id": "03170591455027831196",
"reason_code": "00",
"reason_message": "Payment processed",
"acquirer_transaction_id": "s21CSmuJxv4ki6358tt3"
}{
"idempotency_key": "c2b7e4f1-3a9d-4c6e-8f2b-7d1a5e9c3b60",
"seller_id": "6f42ca7f-be26-42b7-b25e-f8ccd496a05b",
"payment_id": "5e1d9b3a-8c2f-4a6d-b7e0-3f9a1c4d8e25",
"order_id": "MBWAY-REC-20261116-00002",
"amount": "1000",
"currency": "EUR",
"status": "APPROVED",
"received_at": "2026-11-16T11:20:05.640Z",
"transaction_id": "03170591455027831196",
"reason_code": "00",
"reason_message": "Payment processed",
"acquirer_transaction_id": "s21CSmuJxv4ki6358tt3"
}payment_id, transaction_id, and final status of each subsequent payment for reconciliation. To charge the customer again, send another request with the transaction_id from the initial authorization.Webhooks
Use webhooks to receive asynchronous status updates for MB WAY payments. Use webhooks in production, and use status polling only as a fallback.
To learn how to configure and receive webhook notifications, see the Webhooks guide.
| Event | Description |
|---|---|
PENDING_TRANSACTIONS | Sent when a payment request or initial authorization is created and awaits customer authorization. |
APPROVED_TRANSACTIONS | Sent when the customer approves the payment, or when a subsequent payment is processed. |
REJECTED_TRANSACTIONS | Sent when the customer rejects the payment or initial authorization, or when the request expires without approval. |
CANCELLED_TRANSACTIONS | Sent when a payment or initial authorization is cancelled before completion. |
Getnet may deliver a webhook event more than once. Process each notification idempotently, and use thepayment_idto match the event to the original payment request.
Your webhook implementation should:
- Validate the webhook according to the security mechanism described in the Webhooks guide.
- Return a successful HTTP response after processing the event.
- Support repeated delivery of the same event.
- Process notifications idempotently.
- Use
payment_idororder_idto match the notification to the original payment. - Retrieve the transaction through the Get Transaction endpoint when the result is uncertain.
Status Reference
The table below describes the MB WAY payment statuses and their webhook events.
| Status | Webhook event | Description | Next action |
|---|---|---|---|
WAITING | PENDING_TRANSACTIONS | Payment or initial authorization created and awaiting customer authorization. | Ask the customer to open the MB WAY app. Await the webhook or poll the Get Transaction endpoint. |
APPROVED | APPROVED_TRANSACTIONS | Customer approved the payment, or a subsequent payment was processed. | Fulfill the order and record the payment for reconciliation. |
DECLINED | REJECTED_TRANSACTIONS | Payment or initial authorization was declined, rejected, or expired. | Don't fulfill the order. For Recurring and One Click Buy payments, create a new authorization if needed. |
CANCELLED | CANCELLED_TRANSACTIONS | Payment or initial authorization was cancelled before completion. | Record the cancellation and stop fulfillment. |
Treat onlyAPPROVEDas confirmation that a payment is complete.
Refunds and Cancellations
MB WAY payments support both cancellations and refunds:
- Cancellations: Available for eligible same-day transactions before the daily cutoff time. MB WAY supports only full cancellations.
- Refunds: Available for eligible transactions after settlement. MB WAY supports full, partial, and multiple refunds.
- Refund period: You can request refunds for up to 15 months from the original payment date.
The total refunded amount can't exceed the original payment amount.
To process a refund or cancellation, follow the instructions in the Refund a Payment guide.
For eligibility, settlement requirements, cutoff times, and country availability, see the payment method availability reference.
Best Practices
Follow these recommendations when you implement MB WAY:
- Collect the phone number in the
countryCode#phoneNumberformat. - Validate the phone number format before you send the request.
- Tell the customer to open the MB WAY app after you create the payment.
- Keep the checkout page available while the payment awaits customer authorization.
- Display a countdown based on the 4-minute-and-30-second authorization period.
- Start the countdown when the payment intent is created, not when the customer opens the MB WAY app.
- Don't classify the payment as declined automatically when the checkout countdown ends.
- Confirm the final status through a webhook or the Get Transaction endpoint.
- Create a new payment request if the notification expires and the customer wants to retry.
- Don't fulfill the order while the status is
WAITING. - Use webhooks in production and status polling only as a fallback.
- Process webhook events idempotently, because Getnet may deliver the same notification more than once.
- Store
payment_id,order_id,transaction_id,amount, and the final payment status for reconciliation. - Use a unique
idempotency_keyfor every payment attempt. - Don't reuse an idempotency key with different request data.
- Make sure refund workflows enforce the maximum period of 15 months from the original payment date.
- Let the customer choose another payment method when the payment is declined or can't be completed.
- Use Recurring Transactions for subscriptions and payment plans, and One Click Buy Transactions for one-off purchases.
- For Recurring and One Click Buy payments, store the
transaction_idfrom the initial authorization securely and send it in every subsequent payment. - Keep each subsequent payment within the monthly limit the customer authorized.
- Monitor authorizations, because they may expire, the customer may revoke them, or they may become unavailable.
Next Steps
Use these resources to continue your MB WAY integration.
- Review Authentication for token management and security best practices.
- Review the Get Transaction endpoint to check the payment status.
- Review the Webhooks guide for asynchronous payment notifications.
- Review the Refund a Payment guide for refund and cancellation instructions.
On this page