Webhook notifications from SIBS Payment Gateway (SPG) contain sensitive transaction data and are transmitted in encrypted form to protect against fraud and tampering.
To process webhook notifications correctly, the merchant system must:
Decrypt the payload
Validate its integrity and authenticity
Ensure secure handling of all cryptographic material
This section describes the required mechanisms to securely handle webhook notifications.
Security Model
SPG webhook security is based on the following principles:
Confidentiality – webhook payload content is encrypted
Integrity – payload is protected against tampering
Authenticity – webhook payload authenticity is validated through AES-GCM authentication
Replay protection – duplicate or malicious reuse must be handled
Replay protection must therefore combine cryptographic validation with idempotent webhook processing strategies.
Encrypted Webhook Payloads
Webhook payloads are not delivered as plain JSON.
They are transmitted in an encrypted format, where:
The request body contains the encrypted payload (Base64 encoded)
Additional cryptographic parameters are provided via HTTP headers
After decryption, the resulting payload corresponds to the standard webhook structure described in this documentation.
Encryption and Decryption Specifications
Algorithm
Encryption algorithm: AES
Block mode: GCM
Padding: None
Encoding Rules
Encrypted payload (body): Base64 encoded
Initialization Vector (IV): Base64 encoded
Text encoding: UTF-8 (when converting between string and byte representation)
Required Headers
The following HTTP headers are required to decrypt the webhook payload:
Validate the authenticity and integrity of the message (via GCM authentication tag)
Best Practices
Store the secret in a secure vault or key management system
Never expose the secret in logs or client-side code
Restrict access to authorized systems only
Rotate the secret if supported
Secret rotation procedures should include coordinated deployment and validation processes to avoid webhook decryption interruptions during key transitions.
Decryption Process
Webhook notifications are received in encrypted form and must be decrypted using the parameters provided in the HTTP request.
General Flow
Encrypted Body
The request body contains the encrypted payload, encoded in Base64
After Base64 decoding, the result corresponds to the ciphertext to be decrypted
Required HTTP Headers
The decryption process depends on the following headers included in the webhook request:
X-Initialization-Vector
Contains the Initialization Vector (IV) used in the encryption process
Encoding: Base64
Must be decoded before being used in the decryption algorithm
X-Authentication-Tag
Contains the authentication tag generated by the AES-GCM algorithm
Used to verify:
Data integrity
Authenticity of the payload
Encoding: Base64
Must be decoded and provided to the decryption operation
Decryption Inputs
To perform decryption, the following inputs are required:
Authentication Tag (retrieved from the X-Authentication-Tag header and Base64 decoded)
Decryption Operation
The merchant system must:
Decode all Base64-encoded inputs
Apply AES decryption using:
Mode: GCM
Padding: None
Provide:
Key
IV
Authentication Tag
Obtain the original JSON payload (UTF-8 encoded)
Example Decryption Implementation
The following examples illustrate how to perform AES-GCM decryption using the headers and payload received in the webhook request.
The following examples are illustrative and should be adapted to the security, dependency management, and operational standards of the target production environment.
Format of body: Base64 Format of Initialization Vector: Base64
using System;
using System.Security.Cryptography;
using System.Text;
public static class Program {
public static void Main() {
byte[] secret = System.Convert.FromBase64String(“6fNDiYU0T0/evFpmfycNai/AqF24i+rT0OmuVw0/sGQ=”);
byte[] ciphertext = System.Convert.FromBase64String(“9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG/I1GfbSX89JE5DcWh/p8QROC5pRAuYZ7″+“ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s/v3c2nV8″+“1DnUXFCnQER/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl”+“7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh/ZJP21cHCJSF6NPSd+8″+“1gzWFU/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV/5Xk+5XX48″+“XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny/HMgNl16I=”);
byte[] nonce = System.Convert.FromBase64String(“RYjpCMtUmK54T6Lk”);
byte[] tag = System.Convert.FromBase64String(“FUajWHmZjP4A5qaa1G0kxw==”);
using (var aes = new AesGcm(secret))
{
var plaintextBytes = new byte[ciphertext.Length];
aes.Decrypt(nonce, ciphertext, tag, plaintextBytes);
string decrypt = Encoding.UTF8.GetString(plaintextBytes);
Console.WriteLine(decrypt);
}
}
}
Java
import java.security.Security;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import com.google.common.base.Charsets;
import org.apache.commons.lang3.ArrayUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
// For Java and JVM-based languages, you might need to install unrestricted policy file for JVM,
// which is provided by Sun. Please refer BouncyCastle FAQ if you get
// java.lang.SecurityException: Unsupported keysize or algorithm parameters or
// java.security.InvalidKeyException: Illegal key size.
// If you cannot install unrestricted policy file for JVM because of some reason, you can try with reflection: See here.
public class Test {
public static void main(String[] args) {
try {
Security.addProvider(new BouncyCastleProvider());
// Data from configuration
String keyFromConfiguration = "6fNDiYU0T0/evFpmfycNai/AqF24i+rT0OmuVw0/sGQ=";
// Data from server
String ivFromHttpHeader = "RYjpCMtUmK54T6Lk";
String authTagFromHttpHeader = "FUajWHmZjP4A5qaa1G0kxw==";
String httpBody = "9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG/I1GfbSX89JE5DcWh/p8QROC5pRAuYZ7"+"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s/v3c2nV8"+"1DnUXFCnQER/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl"+"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh/ZJP21cHCJSF6NPSd+8"+"1gzWFU/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV/5Xk+5XX48"+"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny/HMgNl16I=";
// Convert data to process
byte[] key = Base64.getDecoder().decode(keyFromConfiguration);
byte[] iv = Base64.getDecoder().decode(ivFromHttpHeader);
byte[] authTag = Base64.getDecoder().decode(authTagFromHttpHeader);
byte[] encryptedText = Base64.getDecoder().decode(httpBody);
// Unlike other programming language, We have to append auth tag at the end of
// encrypted text in Java
byte[] cipherText = ArrayUtils.addAll(encryptedText, authTag);
// Prepare decryption
SecretKeySpec keySpec = new SecretKeySpec(key, 0, 32, "AES");
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv));
// Decrypt
byte[] bytes = cipher.doFinal(cipherText);
System.out.println(new String(bytes, Charsets.UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
}
}
If authentication tag validation fails, the payload must be considered invalid
The payload must not be processed if decryption is unsuccessful
All Base64 values must be decoded before use
All string-to-byte conversions must use UTF-8 encoding
Payload Validation
After decryption, the payload must be validated.
Validation Steps
Ensure valid JSON format
Validate presence of critical fields:
transactionID
paymentStatus
Verify logical consistency
If decryption fails:
The payload must be considered invalid
Processing must be aborted
Replay Protection and Idempotency
Webhook notifications may be retried or duplicated.
Recommended Protections
Use transactionID as the authoritative transaction correlation identifier and notificationID for webhook event deduplication when appropriate
Store processed webhook events or transaction processing state
Ignore duplicates or ensure safe reprocessing
Transport Security
Webhook endpoints must enforce secure communication.
Requirements
HTTPS only
TLS 1.2 or higher
Valid SSL certificate
Error Handling in Decryption
Typical Failure Scenarios
Invalid secret key
Incorrect IV or authentication tag
Corrupted payload
Authentication failure (GCM tag mismatch)
Recommended Behavior
Log the error (without exposing sensitive data)
Do not process the payload
Allow retry if appropriate
Common Decryption Errors
The following issues are commonly observed during webhook integration and may prevent successful decryption or validation of the payload.
Incorrect AES Mode
Using AES-CBC or other modes instead of AES-GCM
Impact:
Decryption may succeed incorrectly or fail entirely
Authentication tag validation is not performed
Missing or Invalid Authentication Tag
Not providing the X-Authentication-Tag header
Using an incorrectly decoded tag
Impact:
Decryption fails with authentication error
Payload integrity cannot be verified
Incorrect Initialization Vector (IV)
Not decoding Base64 correctly
Using an incorrect IV length or value
Impact:
Decryption fails
Output is invalid or corrupted
Invalid Secret Key
Using a wrong or outdated secret
Incorrect key encoding (e.g., treating Base64 as plain text)
Impact:
Decryption fails
Authentication tag validation fails
Incorrect Base64 Handling
Not decoding the request body from Base64
Double decoding or incorrect character encoding
Impact:
Ciphertext is invalid
Decryption produces incorrect results
Ignoring UTF-8 Encoding
Using incorrect string encoding when converting decrypted bytes
Impact:
Payload appears corrupted
JSON parsing fails
Processing Payload Without Valid Decryption
Attempting to parse or use payload before verifying decryption success
Impact:
Invalid data processed
Security vulnerabilities
Not Handling Decryption Failures Properly
Failing silently
Not logging errors
Accepting invalid payloads
Impact:
Loss of observability
Potential data inconsistency or security risks
Recommendation
If decryption fails or authentication cannot be verified, the payload must be considered invalid and must not be processed.
Ensure that:
All cryptographic inputs are correctly decoded
AES-GCM is used as specified
Errors are logged for troubleshooting
Invalid payloads are safely discarded
Common Security Pitfalls
Using incorrect AES mode (e.g., CBC instead of GCM)
Ignoring authentication tag validation
Not decoding Base64 inputs correctly
Logging decrypted sensitive data
Hardcoding secret keys
Skipping payload validation
Relationship with Webhook Processing
Security and validation are part of the webhook handling pipeline.
The correct sequence is:
Webhook acknowledgement must follow the rules defined in E.1.3 – Webhook Delivery, Retries and Idempotency, including the requirement to return HTTP 200 OK with the expected acknowledgement response body.
Validate presence of required fields (e.g., transactionID, paymentStatus)
Ensure payload consistency before further processing
5. Persist or Enqueue Event
Before returning a response:
Store the webhook payload and associated metadata (recommended)
Or enqueue the event into a processing system (queue, event bus, etc.)
This ensures that the event is not lost even if downstream processing fails.
Webhook persistence and asynchronous processing mechanisms should support replay and controlled reprocessing capabilities for operational recovery scenarios.
6. Immediate Acknowledgement
Return:
HTTP 200 OK with the expected JSON response body containing:
statusCode: "000"
statusMsg: "Success"
notificationID equal to the received webhook notificationID
The response must be returned as quickly as possible.
The acknowledgement response must follow the exact structure defined in E.1.3 – Webhook Delivery, Retries and Idempotency. Returning HTTP 200 without the expected response body may result in the notification being considered not acknowledged.
Critical Implementation Rule
The webhook endpoint must not perform business logic or external API calls during request handling.
Status Inquiry validation and reconciliation operations should instead be executed asynchronously after the webhook acknowledgement has already been returned.
Do NOT:
Call SPG APIs (including /status)
Perform database-heavy operations synchronously
Execute business workflows before responding
Block the HTTP response
Asynchronous Processing
All business logic must be executed outside the request lifecycle.
Error Handling Strategy
During Reception
Always return HTTP 200 OK with the expected acknowledgement response body if the event is successfully stored
Do not fail the webhook due to internal processing errors
Webhook notifications in SIBS Payment Gateway (SPG) are delivered using an asynchronous, best-effort model. This means that delivery is not guaranteed to occur exactly once, nor in a specific order.
To ensure reliable processing, merchant systems must be designed to handle retries, duplicated notifications, and potential delays in delivery.
This section describes the delivery behavior of webhooks and the required strategies to safely process them in production environments.
Webhook Delivery Model
SIBS Payment Gateway sends webhook notifications using HTTP POST requests to the configured merchant endpoint.
Key Characteristics
Asynchronous delivery Notifications are sent independently of the original transaction request
No ordering guarantee Events may arrive out of sequence
At-least-once delivery The same notification may be delivered multiple times
Best-effort delivery Delivery depends on network conditions and endpoint availability
Webhook delivery should therefore be treated as an event notification mechanism. When the webhook contains a final paymentStatus, that status can be used for business processing.
To confirm successful delivery, the merchant endpoint must return HTTP 200 OK and a JSON response body containing:
statusCode: "000"
statusMsg: "Success"
notificationID: the same notificationID received in the webhook payload
Important Rules
Any response different from HTTP 200 OK, or a response body not matching the expected acknowledgement structure (including incorrect notificationID), is considered a delivery failure
Timeouts are treated as failures
Slow responses may trigger retries
The endpoint should acknowledge the webhook as quickly as possible and defer processing to asynchronous mechanisms.
The notificationID in the response must exactly match the notificationID received in the webhook payload.
Returning HTTP 200 without the expected response body, or with an incorrect notificationID, may result in the notification being considered not acknowledged and retried by SIBS.
Retry Mechanism
If a webhook delivery fails, SPG will attempt to resend the notification.
Typical Retry Scenarios
Endpoint returns a response different from HTTP 200 OK, or a response body not matching the expected acknowledgement structure
Endpoint is unavailable
Network errors
Request timeout
Expected Behavior
Multiple delivery attempts for the same event
Increasing delays between retries may occur depending on the SPG retry strategy and operational conditions
Duplicate Notifications
Due to the retry mechanism and delivery model, the same webhook may be received multiple times.
Duplicate notifications are expected behavior and must be handled through safe idempotent processing mechanisms.
Failure to handle duplicates correctly may result in:
Duplicate order updates
Incorrect business state transitions
Inconsistent system behavior
Idempotency Strategy
Webhook processing must be idempotent, meaning that processing the same event multiple times produces the same result.
Recommended Identifier
Use transactionID as the primary identifier for idempotent processing.
The notificationID may additionally be used to detect duplicate deliveries of the same webhook event, while transactionID should remain the authoritative transaction correlation identifier.
Implementation Approach
Basic Idempotency Model
Receive webhook
Extract transactionID
Check if already processed
If processed → ignore
If not processed → process and store
Recommended Enhancements
Persist processed transaction identifiers
Store processing status (e.g., success, failed)
Allow safe reprocessing in case of internal failures
Persist idempotency and processing state information in durable storage to ensure safe recovery across service restarts, failover events, or infrastructure disruptions.
Processing Order Considerations
Since webhooks may arrive out of order:
Do not assume chronological sequence
Always evaluate the current transaction state before applying updates
Use webhook events as triggers and use Status Inquiry before applying critical business logic when the webhook does not provide a final state or when additional confirmation, recovery, or reconciliation is required.
SPG webhook delivery follows an asynchronous, at-least-once model, which requires careful handling on the merchant side.
A production-ready implementation must:
Acknowledge notifications with HTTP 200 OK and the expected JSON response body:
statusCode: "000"
statusMsg: "Success"
notificationID: <original notificationID>
Handle retries and duplicate deliveries
Implement idempotent processing using transactionID
Support out-of-order events
Use the Status Inquiry APIs to confirm the final transaction state when no final webhook is available or when additional confirmation, recovery, or reconciliation is required
This ensures reliable and consistent transaction processing across all payment flows.
MB WAY one-off payment webhooks represent customer-initiated payments using a mobile phone number (alias).
These correspond to standard purchase flows where the customer authorizes the payment on their device.
These notifications use:
paymentMethod = MBWAY
paymentType = PURS
The webhook payload does not include a dedicated method-specific object, but includes a token object representing the MB WAY alias used in the transaction.
CARD one-off payment webhooks represent customer-initiated card payments executed as standard purchase transactions.
These correspond to one-off purchase flows where the payment is completed using card details, without mandate management or recurring payment semantics.
These notifications use:
paymentMethod = CARD
paymentType = PURS
For this operation type, the webhook payload may not include any additional method-specific block beyond the generic structure.
2. Extension Block
No additional extension block is required for the standard one-off CARD payment webhook payload.
3. Field Description
No method-specific fields are required beyond the generic webhook structure.
In addition to the generic fields, CARD one-off payment webhooks may include:
Field
Description
internalTransactionId
Internal SIBS transaction identifier
Other card-related extension blocks may exist in different card contexts, such as tokenization or recurring flows, but they are outside the scope of the standard one-off payment webhook.
4. Status Semantics
The result of the payment is primarily represented by:
MB WAY mandate lifecycle webhooks represent the creation and management of mandates used in recurring payment flows.
These notifications are associated with mandate lifecycle operations and not with the actual collection of funds over an existing mandate. Webhook notifications related to payment collection over an existing mandate are described separately in the MANDATE payment flow section of this page.
These notifications use:
paymentMethod = MBWAY
paymentType = AUTH for most lifecycle operations
paymentType = CAUT for mandate cancellation
The webhook payload extends the generic structure with an mbwayMandate block containing mandate-specific data.
CARD recurring payment webhooks for Cardholder Initiated Transactions (CIT) represent transactions where the customer is present and actively involved in the payment.
These transactions are used to:
establish consent for recurring payments
execute customer-initiated recurring transactions
These transactions require active customer interaction and should not be confused with Merchant Initiated Transactions (MIT), which are processed without customer presence.
These notifications use:
paymentMethod = CARD
paymentType = AUTH (initial setup) or PURS (customer-initiated recurring payment)
The webhook payload extends the generic structure with a merchantInitiatedTransaction block that defines the recurring payment context.
CARD recurring payment webhooks for Merchant Initiated Transactions (MIT) represent transactions executed by the merchant without customer interaction, based on previously established consent.
These transactions are used to:
perform recurring collections
execute subsequent payments using stored credentials
These transactions are executed without customer interaction and rely on a previously established CIT authorization.
These notifications use:
paymentMethod = CARD
paymentType = MITR
The webhook payload extends the generic structure with a merchantInitiatedTransaction block that defines the recurring payment context.
As with all webhook notifications, recurring payment events should be treated as transaction lifecycle events and may require confirmation through the Status Inquiry APIs when deterministic reconciliation or operational validation is required.
TOKEN purchase webhooks represent payments executed using a previously generated token.
These transactions use the stored token as the payment instrument, avoiding the need to collect card details again. In this context, the paymentMethod is TOKEN, indicating that the transaction is executed using a stored credential rather than raw card data.
These notifications use:
paymentMethod = TOKEN
paymentType = PURS
The webhook payload extends the generic structure with a token block containing the token used in the payment.
Multiple extension blocks may appear in the same payload Implementations should therefore avoid assuming a one-to-one relationship between payment methods and extension blocks.
Absence of extension blocks is valid
Extension blocks are additive and do not modify the generic structure
Unknown fields or blocks should be safely ignored to ensure forward compatibility
The transactionID should be used as the primary identifier to correlate webhook notifications with previously initiated transactions.
Webhook notifications may be delivered multiple times and should be processed in an idempotent manner.
Represents the technical result of the processing.
A successful returnStatus (e.g., statusCode = "000") indicates that the operation was processed successfully at a technical level, but does not guarantee that the payment itself was successful.
Business outcome must be determined using paymentStatus. Status Inquiry should be used when additional confirmation, reconciliation, recovery, or inconsistency resolution is required.
Merchant transaction Id, sent by the merchant when initiating the transaction
terminalId
Terminal identifier
merchantName
Merchant name associated with the transaction
Additional merchant fields may be present depending on the context.
paymentType
"paymentType": "PURS"
Identifies the type of operation associated with the transaction. Examples depend on the payment flow and are defined in the corresponding payment method sections.
existing fields will retain their meaning and structure
Implementations should therefore be designed to process the generic structure independently from any additional fields.
Forward Compatibility
Webhook payloads may evolve over time as new capabilities are introduced.
To ensure long-term stability of integrations, webhook processing should be implemented in a forward-compatible manner.
In practice, this means:
unknown fields should be ignored without causing processing failures When possible, unknown fields should still be logged or preserved for observability and future compatibility analysis
optional fields should not be assumed to be always present
parsing logic should focus on the generic core structure rather than a fixed schema
Failure to follow these principles may result in:
breaking integrations when new fields are introduced
incorrect processing when optional data is missing
increased maintenance effort due to rigid payload assumptions
By designing for forward compatibility, integrations remain stable across platform updates without requiring frequent changes.
Common Integration Pitfalls
The following are common integration pitfalls when implementing webhook processing.
Understanding and addressing these topics is critical for ensuring a robust and reliable integration.
1. Assuming a Fixed Payload Structure
Webhook payloads are extensible and may include additional fields over time.
Implementations that rely on strict schema validation or fixed object structures may fail when new fields are introduced.
Recommendation
Parse only the required fields from the generic structure
Ignore unknown or additional fields
2. Assuming All Fields Are Always Present
Not all fields are guaranteed to be present in every webhook notification.
For example:
paymentMethod may depend on the event type
internalTransactionId may not be included
some subfields within objects may be omitted
Recommendation
Treat the payload as partially optional
Validate only the fields required for your business logic
The Status Inquiry APIs provide the latest transaction state available through the query API and should be used when deterministic state confirmation is required.
Summary
The SIBS SPG webhook payload follows a consistent, extensible structure defined by:
transaction identification
transaction state
payment classification
financial data
merchant correlation
event identification
This generic structure provides a stable integration contract for webhook processing, while allowing contextual extensions for specific payment methods and operations.
Webhooks are the mechanism used by SIBS Payment Gateway (SPG) to notify the merchant system about transaction events, particularly in scenarios where the outcome of a payment is not immediately available.
They enable a push-based communication model, allowing SPG to send near real-time notifications whenever a relevant change occurs in the lifecycle of a transaction. This is especially important for asynchronous payment methods, where user interaction or external processing is required before a final status is reached.
In SPG, webhook notifications are sent for final states, except for Multibanco Reference generation, where a Pending notification may also be sent when the reference is generated.
Webhooks are a fundamental component of SPG integrations and must be implemented to ensure that the merchant system is informed about final transaction states and applicable asynchronous notification events in a timely manner.
Purpose
The purpose of webhooks is to:
Provide near real-time updates on transaction state changes
Support asynchronous payment flows
Reduce dependency on continuous polling
Enable reactive processing of payment events
Support safe handling of duplicate notifications, retry scenarios, and out-of-order event delivery through idempotent processing mechanisms
Webhook notifications should be processed as transaction event notifications. When the webhook contains a final paymentStatus, that status can be used for business processing. Status Inquiry should be used when additional confirmation, reconciliation, recovery from missed notifications, or investigation of inconsistencies is required.
For the transaction query model and reconciliation strategies between notifications and transaction state queries, see E.2 Status Inquiry / Get Status.
Error conditions and response codes received in webhook payloads must be interpreted according to the model defined in:
Webhook payloads contain technical status information (returnStatus), but correct handling requires applying the classification and interpretation rules defined in these chapters.
Scope of This Section
This section introduces the webhook mechanism and provides a structured approach to understanding and implementing it within an SPG integration.
The detailed documentation is organized into the following topics:
Webhook structure Description of the common payload structure used across notifications
Webhook variants by payment method Specific fields and behaviors depending on the payment method and operation
Security and validation Guidelines for validating and securing webhook notifications
Retries and idempotency Handling delivery retries and ensuring safe processing of repeated events
Processing and operational best practices Recommendations for receiving, handling, monitoring, retry management, and logging webhook events
Backoffice configuration How to configure webhook endpoints in the SPG Backoffice Operational monitoring, webhook delivery visibility, retry analysis, and notification troubleshooting through the SPG Backoffice
This structure ensures a clear separation between conceptual understanding and implementation details, enabling teams to progressively build a robust and production-ready webhook integration.
Omnichannel Transaction Status allows merchants to retrieve operational visibility for transactions that were originally initiated outside standard SIBS Payment Gateway checkout flows.
This capability enables merchants to monitor the state of transactions processed through external SIBS channels while maintaining centralized visibility through the SIBS Payment Gateway.
Unlike traditional transaction status flows that operate on transactions originally created through SPG checkout integrations, Omnichannel Transaction Status is designed for transactions originating from channels such as:
Traditional POS
xPOS
SmartPOS
softPOS
This allows merchants to maintain operational consistency across multiple payment channels through a unified transaction visibility model.
What Is Omnichannel Transaction Status
Omnichannel Transaction Status is an operational capability that allows merchants to retrieve the current state of transactions originally processed through external payment channels.
This model enables merchants to:
Retrieve transaction state information
Verify operational outcomes
Monitor refund outcomes
Support customer service operations
Maintain centralized transaction visibility across channels
From a technical perspective, the original transaction is created outside standard SPG checkout flows, while status retrieval is performed through SIBS Payment Gateway APIs.
When to Use Omnichannel Transaction Status
Omnichannel Transaction Status is appropriate when merchants need operational visibility over externally initiated transactions.
Typical scenarios include:
Verifying transaction completion
Confirming refund execution
Customer support investigations
Operational reconciliation
Investigating failed operational actions
Cross-channel transaction monitoring
This model is particularly useful for merchants operating unified commerce environments.
Supported Status Scenarios
Within the current SIBS ecosystem, Omnichannel Transaction Status may be used to verify:
Original transaction completion
Refund processing status
Final operational outcomes
Transaction history visibility
Available information may vary depending on the originating channel.
Execution Model
The Omnichannel Transaction Status flow typically follows this sequence:
Original transaction is created through an external payment channel
Merchant stores the relevant transaction reference
Merchant performs a Status Inquiry request through SPG
SPG retrieves available transaction information
Current transaction status is returned
This model provides centralized visibility without requiring merchants to interact directly with multiple operational systems.
Transaction Visibility Model
Unlike standard checkout transactions, where merchants typically control the entire payment lifecycle directly, Omnichannel transactions may involve visibility dependencies on external channels.
This means:
Available transaction data may vary
Some operational events may be delayed
Status granularity may differ across channels
Refund visibility may depend on refund lifecycle progression
Merchants should design operational workflows with these visibility differences in mind.
Common Status Use Cases
Merchants frequently use Omnichannel Transaction Status for:
Refund Validation
Confirm whether an Omnichannel refund has been completed successfully.
Verify transaction outcomes during customer service interactions.
Operational Reconciliation
Validate transaction states during internal reconciliation processes.
Exception Handling
Investigate operational anomalies across multiple payment channels.
Particularities in the SIBS Context
When working with Omnichannel Transaction Status in SIBS SPG, merchants should consider:
Original transaction references are mandatory
Status visibility depends on originating channel data
Operational timing may vary across channels
Some transactions may require follow-up verification
Cross-channel reconciliation remains critical
Proper transaction traceability is essential to avoid operational inconsistencies.
The SPG transactionID should be treated as the primary and authoritative identifier for transaction monitoring, operational correlation, status validation, reconciliation, and lifecycle visibility activities.
Practical Omnichannel transaction monitoring examples, Postman collections, and operational testing scenarios are documented in F. Technical Examples and Best Practices.
Integration Context
In the SIBS Payment Gateway, Omnichannel Transaction Status typically requires:
Original transaction identifiers and cross-channel transaction references
Server-to-server API integration
Internal operational monitoring logic
Reconciliation workflows
These operations are typically executed through backend systems and are not customer-facing checkout flows.
Detailed request and response specifications are available in the API reference documentation.
Summary
Omnichannel Transaction Status extends SIBS Payment Gateway operational visibility by allowing merchants to monitor transactions originally created outside standard SPG checkout environments.
This enables centralized transaction monitoring across multiple payment channels while improving operational consistency, customer support capabilities, and reconciliation efficiency.
Understanding transaction visibility limitations and cross-channel operational dependencies is essential before implementing Omnichannel transaction monitoring workflows.
Omnichannel Refund allows merchants to initiate refund operations for transactions that were originally processed outside standard SIBS Payment Gateway checkout flows.
This capability enables merchants to centralize refund operations across multiple payment channels while maintaining operational consistency through the SIBS Payment Gateway.
Unlike traditional refund flows that operate on transactions originally created through SPG checkout integrations, Omnichannel Refund is specifically designed for transactions originating from channels such as:
Traditional POS
xPOS
SmartPOS
softPOS
This allows merchants to manage refunds through a unified operational model across both physical and digital payment environments.
What Is an Omnichannel Refund
An Omnichannel Refund is a post-payment operation that allows a merchant to return funds to the customer after the original transaction has already been completed through another payment channel.
From a technical perspective, the original transaction is created externally, while the refund operation is initiated through SIBS Payment Gateway APIs.
When to Use Omnichannel Refund
Omnichannel Refund is appropriate when merchants need to reverse previously completed transactions that originated through non-standard SPG channels.
Typical scenarios include:
Product returns in physical stores
Order cancellations after in-store payment
Operational refund requests initiated by customer support teams
Unified commerce refund workflows
Partial order reversals
Cross-channel refund management
This model is particularly valuable for merchants operating both online and physical payment channels.
Refund Eligibility
Before initiating a refund, merchants should validate whether the original transaction is eligible for refund processing.
Eligibility may depend on:
Original transaction status
Settlement status
Payment method rules
Refund time limitations
Merchant configuration rules
Channel-specific restrictions
Some transactions may not be eligible for refund if the original payment has not reached a refundable state.
Execution Model
The Omnichannel Refund flow typically follows this sequence:
Original transaction is completed through an external payment channel
Merchant identifies the original transaction
Merchant initiates refund request through SPG
SPG validates refund eligibility
Refund is processed through the appropriate payment infrastructure
Refund result is returned or made available through subsequent status verification
Depending on the originating channel, refund processing timelines may vary.
Full vs Partial Refunds
Depending on merchant configuration and payment channel capabilities, refund operations may support:
Full Refunds
The merchant refunds the entire original transaction amount.
Typical scenarios include:
Order cancellation
Full product return
Service cancellation
Partial Refunds
The merchant refunds only part of the original transaction amount.
Typical scenarios include:
Partial returns
Order adjustments
Service modifications
Partial refund support may depend on the originating payment channel configuration.
Refund Lifecycle
Omnichannel refunds typically follow this lifecycle:
Refund request initiated
Refund validation
Refund processing
Refund accepted or rejected
Final refund confirmation
Some refunds may require additional operational verification depending on the originating channel.
Particularities in the SIBS Context
When working with Omnichannel Refund in SIBS SPG, merchants should consider:
Original transaction identifiers are mandatory
Refund limits may apply
Partial refund rules may vary
Refund eligibility depends on original transaction state
Cross-channel reconciliation must be maintained
Some channels may introduce operational restrictions
Proper transaction traceability is essential to avoid duplicate refunds or reconciliation issues.
The SPG transactionID should be treated as the primary and authoritative identifier for refund execution, refund monitoring, operational correlation, reconciliation, and status validation activities.
In the SIBS Payment Gateway, Omnichannel Refund typically requires:
Original transaction identifiers and cross-channel transaction references
Refund amount information
Server-to-server API integration
Internal reconciliation logic
These operations are executed through backend systems and are not customer-facing checkout flows.
Detailed request and response specifications are available in the API reference documentation.
Summary
Omnichannel Refund extends SIBS Payment Gateway operational capabilities by allowing merchants to refund transactions originally created outside standard SPG checkout environments.
This enables centralized refund management across multiple payment channels while preserving operational consistency, traceability, and financial control.
Understanding refund eligibility, transaction traceability, and reconciliation requirements is essential before implementing Omnichannel refund operations.
Omnichannel operations represent a transaction model that allows merchants to manage transactions originally initiated outside standard SIBS Payment Gateway checkout channels.
Unlike traditional payment flows, where the transaction is created directly through SPG checkout integrations, Omnichannel operations allow merchants to perform operational actions on transactions that may have originated through other SIBS channels such as:
Traditional POS
xPOS
SmartPOS
softPOS
This model extends operational flexibility by allowing merchants to centralize transaction management across multiple payment channels through a unified API layer.
Omnichannel operations are currently focused on post-transaction management activities rather than payment initiation.
What Are Omnichannel Operations
Omnichannel operations allow merchants to interact with transactions that were not originally created through standard SPG checkout flows.
This model enables merchants to:
Perform refunds on externally initiated transactions
Retrieve transaction status information
Maintain operational consistency across multiple payment channels
Centralize transaction lifecycle visibility
From a technical perspective, the original payment may be initiated outside the standard SPG integration model, while operational actions are later performed through SIBS Payment Gateway APIs.
The SPG transactionID should be treated as the primary and authoritative identifier for transaction monitoring, operational correlation, refund execution, reconciliation, and status operations. Originating channel references should be retained where required to support cross-channel traceability and operational correlation.
When to Use Omnichannel Operations
Omnichannel operations are appropriate when merchants operate across multiple payment acceptance channels and require centralized operational management.
Typical scenarios include:
Physical store transactions processed through Traditional POS or SmartPOS
Mobile point-of-sale transactions
softPOS transactions
Unified commerce environments
Merchants operating both online and offline channels
Centralized refund management across multiple payment origins
They are not intended to replace standard checkout integrations for online payment acceptance.
Supported Operations
Within the current SIBS ecosystem, Omnichannel capabilities support:
These operations are performed after the original transaction has already been processed through another channel.
Payment initiation itself remains outside the Omnichannel operational scope.
Execution Model
The Omnichannel model introduces a different execution pattern from traditional payment flows.
Standard payment models typically follow:
Customer payment initiation
Payment authorization
Payment completion
Omnichannel operations typically follow:
Original transaction initiated through another channel
Transaction completed outside SPG checkout
Merchant performs operational action through SPG Omnichannel APIs
This creates a model where transaction execution and transaction management may occur across different channels.
Transaction Lifecycle
The following diagram illustrates the generic operational lifecycle commonly followed by Omnichannel payment transactions in SPG.
Omnichannel operations typically follow this lifecycle:
Original transaction initiation through an external SIBS payment channel
Transaction processing and completion within the originating channel
Merchant operational request initiation through SPG Omnichannel APIs
SPG operational processing and validation
Cross-channel transaction lifecycle synchronization and operational status handling
Final operational confirmation through the operation response, Merchant Notification (webhook), when configured, or Status Inquiry where additional confirmation is required
Cross-channel reconciliation and operational monitoring
Depending on the operation being performed, additional status verification may be required.
Advantages of the Omnichannel Model
From a merchant perspective, Omnichannel operations provide:
Centralized operational management
Cross-channel transaction visibility
Simplified refund processes
Operational consistency across physical and digital channels
Reduced fragmentation across payment infrastructures
Centralized operational reconciliation across heterogeneous payment channels
This model is particularly valuable for merchants operating unified commerce strategies.
Particularities in the SIBS Context
When working with Omnichannel operations in SIBS SPG, several platform-specific considerations should be understood:
The original transaction may not have been created through SPG checkout APIs
Transaction identifiers and cross-channel operational references must be preserved consistently across systems to guarantee accurate reconciliation and operational traceability
Operational permissions may vary depending on merchant configuration
Refund eligibility may depend on the original transaction state
Omnichannel transaction status visibility depends on the information provided by the originating channel
Proper transaction correlation across systems is critical to ensure operational consistency.
Practical implementation examples, Postman collections, operational workflows, and Omnichannel testing scenarios are documented in F. Technical Examples and Best Practices.
Omnichannel vs Other Payment Models
To position Omnichannel operations within the broader ecosystem:
Model
Description
One-Off
Single transaction initiated directly through SPG
Recurring
Repeated merchant-initiated transactions
Two-Step
Authorization followed by later capture
Omnichannel
Operational actions performed on externally initiated transactions
This section focuses exclusively on Omnichannel operational models.
For standard checkout payment flows initiated directly through SPG, refer to D.1 – One-Off Payments.
For recurring payment models and Merchant Initiated Transactions (MIT), refer to D.2 – Recurring Payments.
Omnichannel operations extend the SIBS Payment Gateway beyond traditional payment initiation by allowing merchants to manage transactions that originate through external payment channels.
They provide greater operational flexibility and centralized operational governance for merchants operating across multiple commerce environments while maintaining centralized control over key post-payment actions.
Understanding this operational model is essential before implementing Omnichannel refund and transaction status workflows.
You need the following credentials and configuration elements before calling the SIBS SPG APIs:
AuthToken : used as Authorization: Bearer <AuthToken> for REST calls
TerminalId : the terminal ID assigned to the merchant, by the SIBS OnBoarding team
X-IBM-Client-Id : merchant application identifier assigned by the SIBS OnBoarding team
Choose the appropriate API environment URL (<ROOT_URL>) for the target environment.
Please refer to A.3 – API Requests for the complete list of environment-specific URLs.
IMPORTANT – PCI DSS REQUIREMENT
In Credit Card Server-to-Server integrations, the merchant collects, processes and transmits cardholder data (PAN, CVV, expiry date).
This means:
The merchant environment must be PCI DSS compliant
Card data must never be logged
Card data must never be stored unless explicitly allowed under PCI scope
Secure transmission (HTTPS/TLS 1.2+) is mandatory
If PCI scope reduction is required, use the Form Integration instead.
API Request Flow
The following diagram summarizes the complete Credit Card Two-Step Server-to-Server flow, including checkout creation, card authorization, authentication handling, authorization validation, capture execution, and final settlement validation.
In a Two-step Credit Card (AUTH → CAPTURE) Server-to-Server Integration, the process is divided into:
Card Authorization (server-to-server – card data submitted via API)
Authorization status validation (backend)
Capture the authorized transaction (server-to-server)
Capture status validation (backend)
1) Create the Checkout Session (server-to-server)
Goal: Create a checkout session configured for Authorization only (paymentType = AUTH) and obtain the identifiers required for the subsequent server-to-server operations (authorization, status validation and capture).
paymentMethod must include "CARD" (i.e., ["CARD"])
merchantTransactionId must be unique per transaction
Headers
Authorization: Bearer <AuthToken>
X-IBM-Client-Id: <ClientId>
Content-Type: application/json
Accept: application/json
What you do in this step
Create a new payment session.
Define the payment type (AUTH for the first step for the two-step payment).
Restrict the payment method to "CARD".
Provide customer information as required by the merchant configuration defined during onboarding.
Send the total amount and currency.
1.2. Store from the successful response:
From the Checkout response, you must store:
transactionID : used for authorization tracking, capture operations, status validation, and reconciliation
transactionSignature: required to authorize the card authorization call
Also, the following values will have an important role after the authorization, namely:
merchantTransactionId : internal reconciliation id
Authorization amount : amount reserved by the issuer (from the AUTH step)
The SPG transactionID should be treated as the authoritative identifier for transaction monitoring, webhook correlation, authorization tracking, capture operations, reconciliation, refund operations, and Status Inquiry requests throughout the transaction lifecycle.
Pending : Additional authentication or processing in progress (e.g., 3DS challenge)
Timeout
Error
The merchant should confirm the final state via Merchant Notification (webhook), when configured, or via Status Inquiry when no final notification is available, especially in case of Pending.
3) Validate the final transaction status (back-end)
Goal: Confirm the final payment outcome after the card authorization (and 3DS authentication, if applicable).
Even though Credit Card is a near real-time payment method, the final result must be obtained from the Merchant Notification (webhook), when configured, or confirmed via Status Inquiry when no final notification is available.
3.1 When to check status
Confirm the final authorization result using one of the following paths:
Listen to Merchant Notifications (recommended)
Optionally poll the transaction status
3.2 Status endpoints you can use
The following Status Inquiry options are commonly used:
GET <ROOT_URL>/payments/{transactionID}/status
GET <ROOT_URL>/payments/status?merchantTransactionId=... (query by your merchant transaction id)
{transactionID} is the original authorized transaction identifier (from the Checkout/AUTH flow) to be captured.
The capture must only be considered successful when (capture transaction):
paymentStatus = "Success“
returnStatus.statusCode = "000“
What happens
SPG validates that the transaction is in a capturable state (Authorized).
If valid, SPG captures the amount (full or partial if supported/configured).
The transaction moves toward a final state where settlement is completed.
What to store from the response
Store at least:
Capture result status (success/failure)
The transactionID returned in the capture response (it is different from the original authorization transactionID).
Your merchantTransactionId for reconciliation/audit
Captured amount
Important Notes
The capture amount must not exceed the authorized amount.
Partial capture depends on merchant configuration / scheme rules.
Capture operations must be implemented idempotently to prevent duplicate settlement in case of retry scenarios or network failures.
If the authorization expires before capture, the funds are released and capture will fail.
5) Check Payment (Capture) Status (Back-End)
Goal: Confirm the final capture outcome after the capture operation.
5.1 When to check status
The capture transaction must only be considered finalized after a final capture result is received, either in the capture response or Merchant Notification, or, where needed, via Status Inquiry.
5.2 Status endpoints you can use
The following Status Inquiry options are commonly used:
GET <ROOT_URL>/payments/{transactionID}/status (where {transactionID} is the transactionID returned by the Capture operation)
Where {transactionID} is the value returned by the Capture operation (Step 4).
5.3 Required headers (status call)
Authorization: Bearer <AuthToken>
X-IBM-Client-Id: <clientid>
Content-Type: application/json
Accept: application/json
5.4 What statuses to expect (high level)
The response includes paymentStatus, typically with values such as:
Success
Declined
Error
Pending
Timeout
Credit Card Behavior
Success : Capture approved and funds settled.
Declined : Capture refused or cancelled
Error : Technical or processing error
Pending : Temporary state while the capture is being processed by SPG.
The capture must only be considered successful when:
paymentStatus = "Success“
returnStatus.statusCode = "000“
Only then should the transaction be considered Captured and Settled.
Authorization request examples, capture request examples, and end-to-end Credit Card two-step transaction flows are documented in F. Technical Examples and Best Practices.