Home
Release Notes
Home
Release Notes
Linkedin
  1. Link
  • Baladβ„’ Gateway Documentation πŸ“–
  • Get Started
  • Authorization
  • Responses
  • Go Live!
  • FAQs
  • APIs
    • Authentication
      • Token
    • Core
      • Exchange rate
        • Exchange Rates
      • Balance
        • Get Current Balance
      • Secrets
        • Generate Secret
        • Delete Secret
        • Get Secrets
    • Link
      • Sandbox Testing Guide
      • Error Codes
      • Transaction Lifecycle V2
      • Lookups
        • Purposes List
        • Sources List
        • Banks List
        • Relations
      • Transactions
        • Create transaction
        • Update transaction
        • Cancel transaction
        • Get transaction status V2
        • Transactions List
        • Export Transactions List
        • Calculate receiving amount
        • Validate Account
      • Reconciliation
        • Reconciliation
  • Webhooks
    • Link.Transaction.StatusUpdateV2
  1. Link

Sandbox Testing Guide

This guide details how to use Balad's sandbox environment to simulate transaction flows, validate your API integration, and test various outcomes, including detailed failure reasons.
πŸ’‘
Sandbox responses are predefined and do not impact real balances.

Walkthrough β€” Simulating a Cash Transaction with Compliance Suspension#

This example walks through suffix 103, which simulates a compliance hold that ultimately resolves successfully.
1
Create the Transaction
Navigate to the Create Transaction endpoint.
Set receiver_contact_no to a value ending in 103
Send the request.
{
"transaction_type": 1,
"remitter_reference_no": "{{refNo}}",
"sender_first_name": "SHOHAIB KHAN",
"sender_last_name": "MOHAMMAD",
"sender_address": "KUWAIT ROAD KUWAIT",
"sender_dateofbirth": "10-May-1980",
"sender_identity": 2,
"sender_identity_no": "PK12255100",
"sender_identity_expiry_date": "23-Jul-2027",
"sender_nationality": "EG",
"sender_country_code": "KW",
"sender_contact_no": "96539053100",
"receiver_first_name": "Mohammad Faisal Rashid",
"receiver_last_name": "Mustafa",
"receiver_address": "EGYPT",
"receiver_identity_type": 2,
"receiver_nationality": "EG",
"receiver_contact_no": "01222222103",   // suffix 103 triggers this flow
"sending_currency_code": "EGP",
"amount": "5800",
"account_no": "01234323456",
"receiver_bank_code": "BDC",
"source_of_remittance": "001",
"purpose": "002"
}
2
Monitor Initial Status
The transaction moves to Bank Processing, then into Bank Compliance Suspended (status 16).
3
Simulate Approval via Dashboard
Open the Balad Dashboard and locate the transaction.
Use the simulation controls to trigger the compliance approval and continue processing.
4
Confirm Final State
After approval, the transaction follows this lifecycle:
Created β†’ Bank Processing β†’ Bank Compliance Suspended β†’ Ready for Pickup β†’ Transferred
Verify the final status using the Get Transaction Status endpoint or by monitoring your Webhook Payload.

Account & Wallet Transaction Flows#

Apply the suffix to the account_no field. Any transaction not using a listed suffix follows the Default flow automatically.
SuffixTransaction FlowFailure CategoryFailure CodeFailure Message
DefaultCreated β†’ Bank Processing β†’ Transferredβ€”β€”β€”
101Created β†’ FailedTECH_FAILTECH_FAL_001Technical issue, transaction processing failed
102Created β†’ Bank Processing β†’ Bank Compliance Suspended β†’ Bank Compliance RejectedCOMPLIANCE_RESTRICTIONCMP_001Rejected due to AML / sanctions screening
103Created β†’ Bank Processing β†’ Bank Compliance Suspended β†’ Transferredβ€”β€”β€”
104Created β†’ Bank Processing β†’ Transferred To ACH β†’ Third Party RejectedBEN_BANK_RESTRICTIONBEN_BNK_001Beneficiary bank is temporarily unavailable
105Created β†’ Bank Processing β†’ Transferred To ACH β†’ Transferredβ€”β€”β€”
106Created β†’ Bank Processing β†’ Bank RejectedINVALID_ACCOUNTACC_004Invalid account format / wrong account length
107Created β†’ Bank Processing β†’ Bank RejectedMISCMSC_001Generic bank rejection / unspecified error

Cash Transaction Flows#

Apply the suffix to the receiver_contact_no field. Any transaction not using a listed suffix follows the Default flow automatically.
SuffixTransaction FlowFailure CategoryFailure CodeFailure Message
DefaultCreated β†’ Bank Processing β†’ Ready for Pickup β†’ Transferredβ€”β€”β€”
101Created β†’ FailedTECH_FAILTECH_FAL_001Technical issue, transaction processing failed
102Created β†’ Bank Processing β†’ Bank Compliance Suspended β†’ Bank Compliance RejectedCOMPLIANCE_RESTRICTIONCMP_001Rejected due to AML / sanctions screening
103Created β†’ Bank Processing β†’ Bank Compliance Suspended β†’ Ready For Pickup β†’ Transferredβ€”β€”β€”
104Created β†’ Bank Processing β†’ Ready for Pickup β†’ ReturnedRETURNEDRTN_001Transaction expired and is automatically returned
105Created β†’ Bank Processing β†’ Ready for Pickup β†’ CanceledCANCELLEDCNL_001Transaction cancelled

Compliance Review Simulation#

To trigger Balad's AML compliance review, set sender_first_name or receiver_first_name to Ahmed Hassan in your request payload.
The transaction will enter Balad Compliance Suspended status and remain pending until reviewed. The support team can approve or reject it manually via the Balad Dashboard.
The two payloads below show both trigger positions. The fields marked with a comment are the ones that activate the compliance check.
Ahmed Hassan as Sender
Ahmed Hassan as Receiver
{
  "transaction_type": 1,
  "remitter_reference_no": "{{refNo}}",
  "sender_first_name": "Ahmed Hassan",        // triggers compliance review
  "sender_last_name": "",
  "sender_address": "KUWAIT ROAD KUWAIT",
  "sender_dateofbirth": "10-May-1980",
  "sender_identity": 2,
  "sender_identity_no": "PK12255100",
  "sender_identity_expiry_date": "23-Jul-2027",
  "sender_nationality": "EG",
  "sender_country_code": "KW",
  "sender_contact_no": "96539053100",
  "receiver_first_name": "Mohammad Faisal Rashid",
  "receiver_last_name": "Mustafa",
  "receiver_address": "EGYPT",
  "receiver_identity_type": 2,
  "receiver_nationality": "EG",
  "receiver_contact_no": "01141119177",
  "sending_currency_code": "EGP",
  "amount": "5800",
  "account_no": "01234323456",
  "receiver_bank_code": "BDC",
  "source_of_remittance": "001",
  "purpose": "002"
}

Account Number Validation#

By default, Sandbox accepts any account number format without validation, making it easy to get started.
To simulate an invalid account number response, use the CIB bank code:
Set receiver_bank_code to CIB
Use an account_no with an invalid length (e.g., 3 digits)
The API will return a validation error
Example Error Response:
{
    "data": null,
    "errors": [
        {
            "code": 10,
            "message": "Invalid Input",
            "field": "account_no",
            "additional_info": "The beneficiary account number is invalid"
        }
    ]
}
Previous
Link
Next
Error Codes
Built with