MBWay

MB WAY

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.

information icon
Important: MB WAY is asynchronous. The initial API response returns WAITING, 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.
information icon

To enable MB WAY, contact your Account Manager. They validate eligibility and activate the payment method for your seller account.

Check Market Requirements

Market-specific requirements apply to every Getnet solution. MB WAY is available only in Portugal and supports only the 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.

CapabilityDetails
Integration typeAsynchronous mobile wallet payment with no external browser redirect
Customer interactionPush notification sent to the customer's mobile device through the MB WAY app
Credentials requiredCustomer's MB WAY-enabled phone number in countryCode#phoneNumber format
Initial statusThe initial API response returns WAITING while the payment awaits customer authorization
ConfirmationAsynchronous: the customer approves or declines the payment through the MB WAY app
Authorization timeThe MB WAY payment notification expires 4 minutes and 30 seconds after the payment intent is created
Recurring and One Click Buy paymentsThe 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 periodYou can request refunds for up to 15 months from the original payment date
NotificationsTrack asynchronous status updates through webhooks or status polling
CurrencyEUR only
Country availabilityPortugal 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 flowSupported countriesPurchasesRecurringRefundsPartial refundsMultiple refundsPre-authorizations
WalletPortugal✅✅✅✅✅❌

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.

AttributeDescriptionRequired value
idempotency_keyUnique identifier used to prevent duplicate processingUUID
request_idUnique identifier used to trace the requestUUID
order_idMerchant reference used for reconciliationUnique string with a maximum of 35 characters.
data.amountTransaction amount in centsInteger, for example 5000 for €50.00
data.currencyISO 4217 currency codeEUR
data.payment.payment_methodWallet payment methodWALLET
data.payment.brandMB WAY brand identifierMBWAY
data.additional_data.customer.phone_numberCustomer's MB WAY-enabled phone numbercountryCode#phoneNumber
information icon
Phone number format: Use countryCode#phoneNumber, for example 351#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:

text
351#912345678

Invalid examples:

text
+351912345678 351 912 345 678 351-912345678 351#912-345-678

The following sample request creates an MB WAY payment with only the minimum required customer information.

bash
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.

bash
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

The API returns a WAITING status, as in the example below.
json
{ "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.

AttributeDescription
payment_idPayment identifier used to query the payment status and correlate asynchronous updates
order_idMerchant order reference used for reconciliation
amountTransaction amount in cents
currencyTransaction currency. For MB WAY, this value is EUR
statusCurrent payment status. The initial successful response returns WAITING
received_atDate and time when the payment request was received
transaction_idTransaction identifier associated with the payment
reason_codeProcessing reason code returned by the API
reason_messageHuman-readable description associated with the processing status
acquirer_transaction_idTransaction identifier assigned by the acquirer or payment provider
information icon
Use the status field to track the payment lifecycle. Don't use reason_code alone to decide whether to fulfill the order.

3. Wait for Customer Approval

After the API call, the following sequence occurs:

  1. Payment request: Getnet creates the payment and returns the initial WAITING status.
  2. Push notification: MB WAY sends a notification to the customer's registered mobile device.
  3. MB WAY app: The customer opens the MB WAY app and reviews the merchant and payment information.
  4. Customer action:
    • Approves payment → Status becomes APPROVED, and Getnet sends an APPROVED_TRANSACTIONS webhook event.
    • Declines or rejects payment → Status becomes DECLINED, and Getnet sends a REJECTED_TRANSACTIONS webhook event.
    • Doesn't respond within 4 minutes and 30 seconds → The notification expires, and Getnet can send a REJECTED_TRANSACTIONS webhook event.
  5. Payment confirmation: Getnet receives the result and updates the payment status asynchronously.
  6. Order fulfillment: You fulfill the order only after you confirm the final APPROVED status.
information icon
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:

  1. Don't fulfill the order.
  2. Wait for the final payment status through a webhook, or query the Get Transaction endpoint.
  3. Create a new payment request if the customer wants to try again.
information icon
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.

You can also check the payment status with the Get Transaction endpoint. Use the payment_id returned in the initial response.
bash
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.
information icon

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.

The initial authorization doesn't charge the customer. It exists only so the customer can set the limit.

Choose a Transaction Type

Pick the type that matches how you charge the customer. The requests and responses are the same for both types. Only the credentials_on_file_type values change.
Recurring TransactionOne Click Buy Transaction
Use it forSubscriptions and payment plansOne-off purchases by a customer who saved their details for a faster checkout
Charge patternCharges at regular intervals, usually for a fixed amountCharges for each specific purchase the customer makes, usually for a different amount each time
Initial authorizationRECURRINGONE_CLICK
Subsequent paymentsRECURRING_PAYMENTONE_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.

  1. You create the initial authorization through the Create – Authorize endpoint with RECURRING or ONE_CLICK.
  2. Getnet returns the WAITING status and a transaction_id. Store the transaction_id securely.
  3. MB WAY sends a push notification to the customer's mobile device.
  4. The customer opens the MB WAY app, sets the maximum monthly limit, and approves the authorization.
  5. You create subsequent payments with the stored transaction_id and RECURRING_PAYMENT or ONE_CLICK_PAYMENT. Each payment must stay within the customer's limit.
information icon
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

The initial request uses the same structure as a one-time payment, with two differences: data.amount is optional, and you add the fields below.
AttributeDescriptionRequired value
data.payment.credentials_on_file_typeMarks the request as the first transaction of a Recurring or One Click Buy sequenceRECURRING or ONE_CLICK
data.payment.payment_idPayment identifier for this requestUUID
data.additional_data.customer.nameCustomer's name. Required in every Recurring and One Click Buy requestString

The following sample request creates the initial authorization for a Recurring Transaction.

bash
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" } } } }'
For a One Click Buy Transaction, send the same request with credentials_on_file_type set to ONE_CLICK.
bash
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" } } } }'
information icon
Important: The initial authorization doesn't charge the customer, so amount is optional. If you don't send it, the response returns amount as 0.
The initial authorization always returns 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.
json
{ "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" }
Store the transaction_id from this response securely. You send it in every subsequent payment.
information icon
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.

AttributeDescriptionRequired value
data.payment.credentials_on_file_typeMarks the request as a subsequent payment in a Recurring or One Click Buy sequenceRECURRING_PAYMENT or ONE_CLICK_PAYMENT. Match the type of the initial authorization
data.payment.transaction_idLinks the payment to the customer's authorizationThe transaction_id returned by the initial authorization
data.payment.payment_idPayment identifier for this requestUUID
data.additional_data.customer.nameCustomer's nameString

The following sample request charges €10.00 against the Recurring Transaction authorization created above.

bash
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" } } } }'
For a One Click Buy Transaction, set 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.
bash
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.

json
{ "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" }
Store the 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.

EventDescription
PENDING_TRANSACTIONSSent when a payment request or initial authorization is created and awaits customer authorization.
APPROVED_TRANSACTIONSSent when the customer approves the payment, or when a subsequent payment is processed.
REJECTED_TRANSACTIONSSent when the customer rejects the payment or initial authorization, or when the request expires without approval.
CANCELLED_TRANSACTIONSSent when a payment or initial authorization is cancelled before completion.
information icon
Getnet may deliver a webhook event more than once. Process each notification idempotently, and use the payment_id to 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_id or order_id to 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.

StatusWebhook eventDescriptionNext action
WAITINGPENDING_TRANSACTIONSPayment 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.
APPROVEDAPPROVED_TRANSACTIONSCustomer approved the payment, or a subsequent payment was processed.Fulfill the order and record the payment for reconciliation.
DECLINEDREJECTED_TRANSACTIONSPayment 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.
CANCELLEDCANCELLED_TRANSACTIONSPayment or initial authorization was cancelled before completion.Record the cancellation and stop fulfillment.
information icon
Treat only APPROVED as 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#phoneNumber format.
  • 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_key for 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_id from 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.