Paymob-docs ## Sections • [Overview](https://developers.paymob.com/paymob-docs/getting-started/overview.md): Who is this for ​ -​ ​Anyone involved in setting up or managing payments with Paymob, including Merchants, Developers, and Product or technical teams Outcome ​ -​ ​know where to start, what you need, and which path makes the most sense for you Last Updated Date ​ - ​August 3, 2026 Paymob helps businesses accept online and in-person payments securely and at scale. Whether you’re just getting started with payment links, setting up an online store, or building a custom checkout from scratch, Paymob gives you a few different ways to integrate so you can choose what fits your business and technical setup. This overview will help you understand what Paymob offers, which payment methods are available, and how to get up and running with the right integration. Who Is This For? In our documentation, to help you with navigation, visual indicators are used to clarify the intended audience. When you see the People figure, the content applies to all users, including marketers and non-technical roles. When you see a code figure, the content is intended specifically for developers and may include technical or implementation-focused details. Everyone Essential information for anyone getting started with Paymob. Developers Detailed API documentation, integration guides, and technical specifications. Ideal for those implementing Paymob's payment solutions directly into applications or platforms. How Our Docs Are Organized Our documentation is split into three tabs, so you can quickly find what fits what you're doing. Documentation Guides and step-by-step instructions to help you get started and integrate with Paymob. Developers API references, technical specifications, and implementation details for building your integration. AI Solutions AI-driven and agent-based integrations with Paymob, covering protocols, skills, and other AI-focused tools we add over time. Payment methods available Paymob supports a range of payment methods commonly used, so your customers can pay the way they prefer: Cards Methods included: ​ Visa, Mastercard, Amex, MADA, OmanNet When to use ​: Standard online card payments with 3D Secure Mobile Wallets Methods included: ​ Vodafone Cash, Orange Cash, e& money, We Pay, … in Egypt. Stc Pay in KSA ​ When to use: ​Basic banking services are provided by banks and their agents (e.g., mobile network operators). Quick Payments Methods included ​: Apple Pay, Google Pay When to use: ​ Faster checkout using cards saved on the user’s device or browser BNPL Methods included: ​ (Tabby, Tamara) in the UAE and KSA(vaLU, Sympl, Souhoola, Halan, TRU, MOGO, …) in Egypt When to use: ​ Allow customers to split payments into installments In-Person Payments Methods included: ​ Tap to Pay When to use ​: Accept contactless payments on supported devices using the Paymob App Not all payment methods are enabled by default. Availability depends on your merchant account setup. Reach out to your Paymob account manager if you need specific methods enabled. Integration option Best For Time to launch (Estimated) Technical level Payment links / PayMe Freelancers, invoicing, social selling Minutes None E-commerce plugins Shopify, WooCommerce, Magento Hours Low Hosted checkout PCI-compliant payment redirection Days Medium Pixel (Embedded) Embedded checkout experience Days–Weeks High Mobile SDKs iOS, Android, Flutter, React Native Days–Weeks High You can always switch or expand later as your business grows. 1 A customer starts a payment on your website or app 2 Payment details are collected through a hosted or embedded checkout 3 Paymob processes the payment and handles authentication 4 Your system gets the result through a webhook 5 The customer sees a success or failure confirmation Ways to integrate with Paymob There’s more than one way to integrate Paymob. The right option depends on how technical your setup is and how quickly you want to launch. Sandbox (Test) What it's for: Development and testing When to use it: While building and QA Production (Live) What it's for: Real payments When to use it: After go-live approval Not sure where to start? Use this quick guide: No developers involved? ​ → Start with Payment Links Running a Shopify or WooCommerce store? ​ → Use an ​ E-commerce Plugin Want a hosted payment page ​ → Go with ​ Hosted Checkout Want an embedded payment experience, not redirection ​ → Go with ​ Pixel Building a mobile app? ​ → Use the ​ Mobile SDKs Egypt ​: ​ https://accept.paymob.com/ Oman ​: ​ https://oman.paymob.com/ Saudi Arabia: ​ ​ https://ksa.paymob.com/ United Arab Emirates: ​ ​ https://uae.paymob.com/ How payments work (at a high level) No matter which integration you choose, the payment flow stays mostly the same: Always use test credentials while developing. You don’t need to handle sensitive card data yourself. Paymob takes care of that. Test vs. live environments Paymob gives you two environments to work with: For all integrations A Paymob merchant account Access to the Paymob Dashboard Completed business verification Test and live use the same regional base URL for each region. The mode is controlled by the keys and integration IDs you use. For API or SDK integrations API Secret Key and Public Key Integration ID(s) for your payment methods A webhook endpoint Success and failure redirect URLs What you’ll need before you begin Here’s a quick checklist to help you prepare. For e-commerce plugins Admin access to your platform Integration ID(s) API key, secret key, and public key Where to go next Depending on what you want to do, here’s where to continue: Your goal Start here Set up API credentials Getting Integration Credentials Test your integration Test credentials Prepare for production Integration checklist Get guided setup Onboarding wizard Build with AI agents or tools AI Solutions Something isn't working as expected FAQs Need help? If you get stuck, you’re not on your own: Documentation: ​ Use the sidebar to explore all topics API reference: ​ Full API details live under Developer Reference Postman collection: ​ Try the APIs quickly using Postman Support: ​ support@paymob.com Community: ​ Join the Paymob Developer Community • [Integration Checklist](https://developers.paymob.com/paymob-docs/getting-started/integration-checklist.md): Who is this for - Developers, product managers, and business owners who are preparing to launch Paymob in production Outcome - Confirm that your integration is complete, tested, and ready for a smooth go-live Last Updated Date - July 14, 2026 Overview Within this section, we will help outline the end-to-end onboarding and go-live journey for integrating with our platform. It shows the required business, technical, and risk steps from account setup and documentation through testing, approvals, and credential issuance. Each stage must be completed in sequence to ensure a secure, compliant, and smooth transition to production. Account Creation The merchant account is created, granting access to the dashboard and test environment. Paperwork Validation Business and legal documents are reviewed to verify the merchant’s information and compliance. Contract Finalization Commercial terms are confirmed and the contract is signed by both parties. Risk Approvals The merchant is assessed by the risk team based on business model and transaction activity. Integration Cycle The merchant integrates the payment solution using APIs, SDKs, or plugins in the test environment. Test & Validation Test transactions are completed to ensure correct payment flow and system behavior. Technical Approval The integration is reviewed to confirm it meets technical and security requirements. Live Credentials Production credentials are issued to enable live transactions. Going Live The merchant starts accepting real customer payments. Don’t skip steps; each one is required for a successful launch. • [Onboarding Wizard](https://developers.paymob.com/paymob-docs/getting-started/onboarding-wizard.md): Who is this for - Everyone Outcome - Build the integration plan using this interaction wizard Last Updated Date - June 1, 2026 Overview The Onboarding Wizard is an interactive tool designed to help you build a clear and tailored integration plan based on your business needs and technical setup. Through a series of simple choices, such as your platform, preferred checkout experience, and required features, the wizard maps out the recommended Paymob integration path for your use case • [Dashboard](https://developers.paymob.com/paymob-docs/getting-started/dashboard.md): Who is this for - Everyone Outcome - Full and quick guide for the Paymob dashboard Last Updated Date - June 1, 2026 Overview Our Dashboard allows you to monitor and analyze all payment activities from a single, centralized platform. You will have access to detailed payment histories, transaction insights, and comprehensive analytics to support leading informed business decisions. Through the video below, we will guide you from the first steps of Signing Up until your full Account Creation . Sign-up Account Configuration Manage and control your account’s core settings directly from the Settings tab, including: Business Branding Update your business name, account type, sector, and industry Add and manage social media links Upload and manage your business logo Contact Information Edit company name Manage phone numbers Update email addresses Account Information Access integration credentials (Secret Key, Public Key, API Key, HMAC Secret) View account mode and status (Live / Test) Notifications & Reports Enable or disable selected notification settings Control reporting and alert preferences Checkout Customization From the Merchant Dashboard , you can fully personalize the checkout experience to align with your brand and business needs. Branding Customization Add your business logo and details Customize brand colors Select fonts that match your brand identity Choose button styles (Rounded or Rectangular) Payment Experience Choose how payment methods are displayed (Tabs or List) Enable or disable specific payment methods Show or hide billing address fields Display purchased item details Enable the “Save Card” option Activate Split Payments and control the number of cards allowed Display Terms & Conditions link Enable or disable payment retries Post-Payment Experience Show a custom thank-you message Customize the post-payment redirection flow Notes: - Changes will only take effect after you click " Apply changes ". - If you wish to revert to the default settings provided by Paymob, click " Reset ". Payment Integrations Manage all payment integrations from the Payment Integrations tab: Retrieve integration credentials based on selected mode (Live / Test) Add test integrations for payment methods: Cards (MIGS) Wallets Kiosk payments Update callback URLs for each integration Make sure that you have selected the desired mode ( live / test ) Transactions Management From the Transactions tab, you can monitor and manage all transaction activities: Filter transactions using: Date range Transaction ID Order ID Merchant Order ID Transaction status Access full transaction details, including: Transaction and order details Shipping and billing information Installment details (if applicable) Perform supported actions based on transaction status: Refund Void Capture Orders Management Use the Orders tab to track and manage all orders efficiently: View orders by selected mode (Live / Test) Filter orders using: Date range Order ID Merchant Order ID • [New Dashboard](https://developers.paymob.com/paymob-docs/getting-started/new-dashboard.md): Who is this for - Everyone Outcome - Full and quick guide for the new Paymob dashboard Last Updated Date - June 1, 2026 Overview Our Dashboard allows you to monitor and analyze all payment activities from a single, centralized platform. You will have access to detailed payment histories, transaction insights, and comprehensive analytics to support leading informed business decisions. Home Page The Home section provides a high-level summary of your business performance. Filters Time period Channels (Online, POS, Paymob App) Currency Performance Comparison Total Sales (Current vs Previous) Net Sales (Current vs Previous) Terminals Revenue (Current vs Previous) Payment Methods Usage Insights & Highlights Top Failure Reasons Performance Highlights Transactions The Transactions section allows you to view and manage all transactions. Summary View Provides a quick overview of: Total Sales Total Transactions Refunded Transactions Actions Depending on the transaction status and type, you can: Refund Void Capture Filters Time period Status (Success, Pending, Declined Currency Payment Method (Cards, Mobile Wallets, Valu, etc.) Transaction Type (3D Secure, Capture, Void, Refund, etc.) Channels (Online, POS, Paymob App) Transaction ID Order ID Terminal ID Integration ID Merchant Order ID Phone Number Fingerprint (unique card identifier across the merchant account) Transaction Details Selecting a transaction opens a detailed view with: Details (Transaction & Order information) Payment Method Transaction Breakdown (amount details) Customer (customer information) Orders The Orders section displays all created orders. Filters Time period Status (Paid, Unpaid) Currency Split Payments Order ID Merchant Order ID Order URL Created By Phone Number Last four digits of the card Order Details Selecting an order opens its full details view. If the order is paid, the Shipping and Client details will appear. Actions Delete Order : Hides the order from the dashboard (does not delete it from the system) Quick Links The Quick Links section allows you to manage payment links. Filters Time period Status (Paid, Unpaid, Canceled) Currency Merchant Payment Link ID Payment Link URL Phone Number Quick Link Details Selecting a link shows its full details. Actions Cancel Share For a detailed overview, refer to the Quick Links page. Settings The Settings section allows you to manage your account configuration. Business Profile Business Info Update business name, account type, sector, and industry Upload and manage business logo Social Media Add and manage social media links Profile Details Contact Info Manage phone numbers Account Information View account details Change password Checkout Customization From the Merchant Dashboard , you can fully personalize the checkout experience to align with your brand and business needs. Branding Add your business logo and details Customize brand colors Select fonts that match your brand identity Choose button styles (Rounded or Rectangular) Payment Choose how payment methods are displayed (Tabs or List) Enable or disable specific payment methods Show or hide billing address fields Display purchased item details Enable the “Save Card” option Activate Split Payments and control the number of cards allowed Display Terms & Conditions link Enable or disable payment retries Post-Payment Show a custom thank-you message Customize the post-payment redirection flow Notes: - Changes will only take effect after you click " Apply changes ". - If you wish to revert to the default settings provided by Paymob, click " Reset ". Payment Integrations Manage all payment integrations from the Payment Integrations tab Retrieve integration credentials based on selected mode (Live / Test) Add test integrations for payment methods: Cards (MIGS) Wallets Kiosk payments Update callback URLs for each integration Make sure that you have selected the desired mode (live/test) API Keys Access and manage your credentials: Secret Key Public Key API Key HMAC Secret Users & Permissions The Users & Permissions section allows you to define roles, control access levels, and add sub-users to your account. Roles The system has the following roles, and you can edit them or add your own custom roles. Role Description Admin Manages daily operations, including orders, products, payments, and staff access. Owner Full access to manage the account, payments, integrations, team, and security settings. Developer Manages payment integrations, API keys, and iframes. Finance View-only access to orders, transactions, payment links, and transfers. Operations Manages orders, products, transactions, payment links, payment actions (capture, refund, void), payment integrations, and transfers. Sales View-only access to orders, products, iframes, payment links, transactions, payment integrations, and transfers. Actions Add role Update Role permissions Users You can filter and manage the users Filters Name Phone Number Email Role Status (Active, Pending, and Expired) Actions Invite Member Update role Delete user • [Overview](https://developers.paymob.com/paymob-docs/integration-paths/overview.md): Who is this for - Product managers and developers who need a high-level overview to plan the payment feature for their app or website Outcome - Understand the overall payment flow and the available integration options Last Updated Date - June 1, 2026 Overview The figure below is a high-level view of the payments architecture, from user touchpoints to transaction execution, designed to guide decisions across wallets, cards, installments, and post-payment actions. This will help you map what you’re building, how you’re integrating, and which payment methods and flows you support. Phase 1: Define Your Product & Integration Method Start by defining what you are building and how you will connect to us. 1 What are you building? Website Mobile Application 2 How are you building it? Custom-built website or mobile application with our web UI (through a webview in case of mobile app) E-commerce platform SDK The webview doesn't support the Apple Pay payment method; you should integrate through the SDK . Phase 2: Choose Your Payment Options Select the payment methods and types that match your needs. 1 Which Payment method will you offer? Please check the supported Payment Methods section to get full guidance on each payment method and the integration ways that support it. 2 Which payment feature will you use? Normal 3D Secure (3DS) : Please check the 3D Secure (3DS) explained in the Card payment method page to know more about it. Auth/Cap : Please check the Auth/Cap page to know more about it. Pay with saved tokens : Please check the Pay With Saved Cards section to know more about it and its types ( MIT and CIT ), and how to implement each of them. For the subscription module, which enables you to configure subscriptions that Paymob will use in the future to deduct an amount periodically without your intervention in the next billings, please check the Subscriptions section. Phase 3: The Payment Actions you can take Determine what payment actions you’ll perform. 1. What are the payment actions you'll perform? Please check the Managing Payment Actions section to know more about the available payment actions and how to do each one through the Paymob dashboard or APIs . If you are still confused regarding the path you'll follow to implement your needed payment experience, please send an email to support@paymob.com , and we'll be glad to help you get the best payment experience for your business. • [No Code](https://developers.paymob.com/paymob-docs/integration-paths/no-code.md): Who is this for - Product managers and Merchants (non-technical) who want to start accepting online payments without any coding or development Outcome - Start accepting online payments using Payment Links even without a website or development team Last Updated Date - June 1, 2026 Overview Payment Links (fastest start) Ideal when you don't have a website. Share via WhatsApp, social media, or any communication tool. Good for : Event tickets, reservations, small businesses, electronic invoices Option A: Payment Links (fastest start) Payment links are ideal when you don’t have a website. You can share them via WhatsApp, social media, or any communication tool, and your customer pays on a hosted checkout page. Common use cases Event tickets and reservations Small businesses selling without a website or POS Adding a payment link to an electronic invoice Option B: PayMe PayMe is ideal when you want one permanent link for your whole business instead of generating a new link for every sale. Set it up once, share it anywhere, and keep collecting payments through it indefinitely. Good for: Ongoing social selling, a permanent link in your bio/profile, recurring or walk-in customers, businesses with physical branches PayMe is only available in Live Mode. Payment Links vs. PayMe Feature Payment Links PayMe Lifespan Single-use / per-sale, can expire Permanent, never expires Amount Set per link Customer enters amount at checkout Best for One-off invoices, event tickets, single transactions Ongoing sales, standing storefront link Branches Not applicable Supports a separate link per branch Setup Create a new link each time Create once, reuse indefinitely Security and compliance With hosted checkout, your customers complete payment on a payment page handled by the payment provider, which helps keep sensitive card data off your website. Go live checklist Confirm your business profile is complete and approved (documents). Make sure the payment methods you want are enabled on your account. Run a full test: link creation → payment → confirmation → refund/void (if applicable). Train your team on what “paid” looks like in the dashboard (so orders don’t get missed). • [Payment Links](https://developers.paymob.com/paymob-docs/integration-paths/no-code/payment-links.md): Who is this for - Merchants who want to accept payments without any technical integration Outcome - Create and share payment links in minutes, receive payments via any channel Last Updated Date - June 1, 2026 What are Payment Links? Payment Links are shareable URLs that allow your customers to pay you directly. No website, no code, no technical setup required. When to use Payment Links? Social Selling Share links on Instagram, WhatsApp, Facebook Email Invoicing Send payment requests to clients via email Creating a Payment Link 1 QuickLink Button From your Paymob dashboard, click the Create button in the top-right corner, then select Quick Link . 2 Link Configuration Configure the payment link details, such as Currency, Amount, Reference ID, Image, ... 3 Choose Payment Methods Select the payment methods you want to offer to your customers, then choose the relevant integration ID . 4 Share the Link Once created, you can share the payment link through multiple channels, including QR, WhatsApp, Facebook, Instagram, and share directly via SMS or email Cancel Payment Link You can cancel the unpaid Payment Links Payment Link via API You can create automated payment links through your system, using APIs. Check the technical implementation guide in the QuickLink APIs guide under the Developers Reference sections • [PayMe](https://developers.paymob.com/paymob-docs/integration-paths/no-code/payme.md): Who is this for - Merchants who want a permanent, reusable payment link tied to their business Outcome - Create your PayMe handle and start collecting payments in minutes Last Updated Date - August 3, 2026 What Is PayMe? PayMe is your business's permanent payment identity on Paymob. It gives you one reusable URL that never expires, so customers can pay you at any time, from anywhere, without you creating a new link for each sale. Important: PayMe is only available in Live Mode. Make sure your account is switched to Live Mode before activating your handle. Creating Your Handle 1 Go to PayMe From your Paymob dashboard, go to Payment Links → PayMe . 2 Review Your Handle A suggested handle will be pre-filled based on your Business Name (or Company Name if no business name is set). Review and edit if desired. 3 Create the Handle Click Create PayMe Handle to activate it. 4 You're Live Your link is immediately live and shareable. Handle name tip: You can edit your main handle name once after it's activated. Choose carefully — any further name changes require back-office approval and a risk review. Handle Settings Access your handle settings by clicking Settings on the PayMe page. Settings apply to both the Main Handle and all Branch Handles. Setting Description PayMe link status Toggle to Activate or Deactivate your handle at any time Mandatory Billing Data Choose what to collect from customers: Mobile Number (default), Email, or Both Customer Name Optional — ask customers to enter their name at checkout Notes / Purpose of Payment Optional — let customers add a note describing what the payment is for Currency If multiple currencies are enabled, select which currency your PayMe link will use Checkout Customisation Link to your Checkout Customisation section to update branding, colors, and logo Click Save Settings to apply any changes. Branch Handles If your business has multiple physical branches, you can create a separate branch handle for each one. Branch handles extend your main handle with a query parameter, e.g.: accept.paymob.com/payme/yourbusiness?branch=Maadi There's no limit to how many branch handles you can create, and branch names can be updated at any time. 1 Add a Branch On the PayMe page, click + Add branch PayMe link . 2 Name the Branch Enter the branch name (up to 50 characters). 3 Create the Branch Link Click Create branch PayMe link . You can then share or toggle (Activate/Deactivate) each branch handle independently. Note: Deactivating the Main Handle automatically deactivates all branch handles. Reactivating the Main Handle automatically reactivates all branch handles. Deactivating a single branch handle does not affect any other handles. Sharing Your Handle Click Share on the PayMe page (or next to any branch handle) to open the sharing options. Email Send the link directly to a customer's email address SMS Enter a mobile number — SMS can only be sent to numbers in Egypt WhatsApp Share a pre-filled message with your payment link Facebook Post directly to your business page Instagram Copy the link for your bio or story QR Code Generate a branded QR code to print, display at your counter, or use digitally Transaction Tracking All payments collected through your PayMe handle appear in the dedicated PayMe tab, filterable by: Transaction ID Order ID Currency Payment Method Mobile Number Email Customer Name Branch Name Date Range Handle States & Security State Description Active The handle is live. Customers can visit the link and pay immediately. Inactive The handle is temporarily disabled by the merchant. Security: Every handle is permanently tied to your Merchant ID ( MID ) and can never be reassigned to another merchant, even if deactivated. Old handle names (after editing) are also permanently reserved; no other merchant can claim them. If a customer visits a deactivated handle, they'll see: " This payment link is no longer active. Please contact the merchant. " • [APIs](https://developers.paymob.com/paymob-docs/integration-paths/apis.md): Who is this for - Product managers and developers who need a high-level overview of how to integrate through APIs and our available checkout experiences Outcome - Understand the overall API payment flow, the available checkout options, and how payment results are securely communicated back to your system Last Updated Date - June 1, 2026 When should you use APIs? Use Paymob APIs if you are: Building a custom website without a CMS or ready-made plugin Using a platform that allows calling third-party APIs but has no direct Paymob integration Building a mobile app and choosing to use a web-based checkout in a WebView instead of a native SDK APIs give you flexibility while still relying on Paymob’s secure payment infrastructure. Integration flow 1 Create a payment intention Every payment starts by calling the Intention Creation API from your backend. You can check it in the Intention APIs section. This step initializes the payment by defining: Amount and currency Allowed payment methods Your internal order or reference ID The response includes a reference (client secret) that is used to launch the checkout experience. 2 Display a checkout experience to the customer Once the intention is created, you present one of Paymob’s checkout experiences: Unified Checkout (Redirect) Customer is redirected to a Paymob-hosted checkout page Fastest integration with minimal frontend effort Paymob handles UI, validation, and security Embedded Checkout (Pixel) Paymob checkout UI component ( Pixel ) is embedded inside your website or WebView More control over the checkout look and feel Sensitive payment data is still handled securely by Paymob 3 Customer completes or cancels the payment The customer enters their payment details and completes any required authentication (such as 3D Secure). Paymob processes the transaction and determines the final payment status. 4 Callbacks (Webhooks) After processing the payment, Paymob sends callbacks to your backend to notify you of the payment result and redirects the customer back to your website or app. Callbacks should be used to: Confirm the final payment status Update order records Trigger business actions (e.g., fulfillment, notifications) Redirects are mainly for user experience Callbacks are the source of truth for payment status 5 Callback security (HMAC) Each callback can be authenticated using HMAC verification to ensure it was sent by Paymob and was not altered. Always verify callbacks before trusting their data. • [Plugins](https://developers.paymob.com/paymob-docs/integration-paths/plugins.md): Who is this for: Everyone Outcome: Integrate Paymob payments into your existing e-commerce platform without writing code Last Updated Date ​ - ​June 1, 2026 When should you use Plugins? Use Paymob Plugins if you are: Running an online store on a ​ supported e-commerce platform Looking for a ​ no-code or low-code ​ integration solution Want to be up and running ​ quickly ​ without custom development Plugins available Shopify Wordpress OpenCart Magento Odoo WHMCS Cs-Cart ZenCart OsCommerce Laravel-Bagisto Drupal PrestaShop Joomla Staah • [WordPress (WooCommerce)](https://developers.paymob.com/paymob-docs/integration-paths/plugins/wordpress.md): Who is this for ​ - For merchants and developers using WooCommerce who want to enable Paymob payments on their store. Outcome ​- Explore, install, and Configure Paymob's powerful ​ WooCommerce plugin Last Updated Date ​ - ​August 12, 2026 Overview The ​ Paymob WooCommerce plugin ​ enables merchants to accept payments directly on their WooCommerce stores while maintaining full control over the checkout experience and payment features. It supports multiple checkout options and advanced payment capabilities, allowing businesses to tailor the payment flow to their needs without custom development. The plugin integrates seamlessly with WooCommerce, ensuring a smooth customer journey from checkout to payment confirmation. Key Capabilities Multiple Checkout Experiences ​ Support both ​ Unified Checkout ​ (hosted redirection) and ​ Pixel ​ (embedded checkout) to match your store’s flow. Easy Configuration ​ Manage checkout settings and enable payment methods directly from the ​ Paymob Dashboard ​. Saved Cards ​ Let registered customers save and reuse cards securely for faster repeat purchases. Flexible Payment Display ​ Show payment methods individually on the checkout page for better clarity and customization. Subscription Support ​ Enable recurring payments for WooCommerce subscription products. Steps of Installation and Activation You have two ways to install our WooCommerce plugin. Please check them below From WooCommerce Marketplace 1 Place an order for Paymob Payments for free from ​ woocommerce.com ​, click on the ​ Add to Cart ​ button, and click on the Proceed to ​ Checkout ​ button. 2 Download the ​ .zip ​ file from the ​ My subscriptions ​ section of your WooCommerce account . 3 Navigate to ​ Plugins ​> ​ Add New Plugin ​, click on the “​ Upload Plugin ​", and then browse and select the downloaded Zip File from your system. After the file has been uploaded, click ​ "Install Now ​“. After the plugin has been installed successfully, click on “​ Activate Plugin ​”. From WordPress Marketplace Navigate to ​ Plugins ​> ​ Add New Plugin ​, search for "​ Paymob for WooCommerce ​", click on “​ Install Now ​”, and once installed, click on “​ Activate ​” to activate the Plugin Configurations and Settings After activation, the plugin will be listed under the ​ Plugins ⇒ Installed Plugins ​section as "​ Paymob for WooCommerce ​". Click on ​ Paymob Settings Main Configuration Page Connect with your Paymob account You can connect the plugin with your Paymob account in two ways. Please check them below Connect by signing in Click on "​ Connect your Paymob Account ​" to go to the sign-in page Select your ​ country ​, enter your ​ username ​or ​ mobile number ​, and ​ password Verify your account using the ​ OTP Congratulations, your plugin is connected now with your Paymob account, and you should be redirected to the "​ Main Configuration ​" page. Manual Setup Click on ​ "Manual Setup" ​ and enter the ​ API Key, Public Key, and Secret Key. Click ​ Confirm ​ to connect your account. Congratulations, your plugin is connected now with your Paymob account. The plugin should be enabled by default on your store, and you should be redirected to the "​ Main Configuration ​" page. Disconnect and Change Mode From the Main Configuration page, you can disconnect and change mode (​ Live ​/​ Test ​) Payment Configurations Page On this page, you can control and configure your payment methods. It displays both ​ Live ​and ​ Test ​payment method integrations. You can switch between them as needed. From this page, you can do: Enable or disable Payment methods. Edit (Name, Description, and integration ID, change the logo) by pressing the ​ Edit ​button beside each payment method. Reorder the payment methods by dragging the icon ​ ( ​≡​ ) ​ up or down. Update the ​ Webhook URLs ​by pressing ​ Webhool URL ​ button. Important notes The ​ Pay With Paymob ​ option will avail all the payment methods on one option. Please change the logos only if you have your own and want to use them to avoid corrupting the default ones. Card Embedded Settings This feature allows users to complete payments directly on your WooCommerce store. Enabled by default. ​ To disable it, go to ​ Payment Integrations ​ and turn off ​ "paymob-pixel" ​. If you wish to hide a specific payment method, simply avoid selecting its integration ID. Main Configurations You can: Change the title Select the Integration ID to be used for Cards, Apple Pay, and Google Pay payment seperatly Control the save card option in the Pixel component UI Customizations You can control a lot of the UI, like (Fonts, Colors, Sizes, …) Subscription Who Can Use It? Any WooCommerce merchant with the WooCommerce Subscription Plugin installed. This section would only be shown if you have installed the WooCommerce Subscription Plugin. Configurations From this page, you can: Enable or disable the Subscription feature. Change the title and the description of the method in the WooCommerce Checkout page. Configure the ​ 3DS ​and ​ Moto ​integrations 3DS Integration ​: The integration ID that will be used for the first transaction while the customer is subscribing. Moto Integration ​: The integration ID that will be used for the future auto deductions for the already created subscriptions.​ ​If you don’t have one or both of these IDs, you can contact your account manager or send an email to support@paymob.com for assistance on getting the IDs. How to Create Subscription Products on WooCommerce? You can create Simple or Variable subscription products using WooCommerce’s existing setup. Required fields: Subscription Price Frequency Make sure to choose the equivalent for one of the frequencies (​ Weekly, Monthly, Two months, Quarterly, Half annual ​) Optional fields: Stop Renewing After = Number of billing cycles before the subscription auto stops. Free Trial Period = Delays the start of the subscription. Upfront Amount / Sign-Up Fee = One-time initial payment. WordPress (WooCommerce) Source: https://developers.paymob.com/paymob-docs/integration-paths/plugins/wordpress Who is this for ​ - For merchants and developers using WooCommerce who want to enable Paymob payments on their store. Outcome ​- Explore, Install, and Configure Paymob's powerful ​ WooCommerce ​plugin Last Updated Date ​ - ​June 1, 2026 Overview The ​ Paymob WooCommerce plugin ​ enables merchants to accept payments directly on their WooCommerce stores while maintaining full control over the checkout experience and payment features. It supports multiple checkout options and advanced payment capabilities, allowing businesses to tailor the payment flow to their needs without custom development. The plugin integrates seamlessly with WooCommerce, ensuring a smooth customer journey from checkout to payment confirmation. Key Capabilities Multiple Checkout Experiences ​ Support both ​ Unified Checkout ​ (hosted redirection) and ​ Pixel ​ (embedded checkout) to match your store's flow. Easy Configuration ​ Manage checkout settings and enable payment methods directly from the ​ Paymob Dashboard ​. Saved Cards ​ Let registered customers save and reuse cards securely for faster repeat purchases. Flexible Payment Display ​ Show payment methods individually on the checkout page for better clarity and customization. Subscription Support ​ Enable recurring payments for WooCommerce subscription products. Affordability Widget ​ Display Bank Installment Plans on the Product and Cart pages so shoppers can pick a plan upfront. Steps of Installation and Activation You have two ways to install our WooCommerce plugin. Please check them below From WordPress Marketplace Navigate to ​ Plugins ​> ​ Add New Plugin ​, search for "​ Paymob for WooCommerce ​", click on "​ Install Now ​", and once installed, click on "​ Activate ​" to activate the Plugin Configurations and Settings After activation, the plugin will be listed under the ​ Plugins ⇒ Installed Plugins ​ section as "​ Paymob for WooCommerce ​". Click on ​ Paymob Settings Main Configuration Page Connect with your Paymob account You can connect the plugin with your Paymob account in two ways. Please check them below Connect by signing in Click on "​ Connect your Paymob Account ​" to go to the sign-in page Select your ​ country ​, enter your **username **or ​ mobile number ​, and ​ password Congratulations, your plugin is now connected to your Paymob account, and you should be redirected to the "​ Main Configuration ​" page. Click on ​ "Manual Setup" ​ and enter the ​ API Key, Public Key, and Secret Key. Congratulations, your plugin is now connected to your Paymob account. The plugin should be enabled by default on your store, and you should be redirected to the "​ Main Configuration ​" page. Disconnect and Change Mode From the Main Configuration page, you can disconnect and change the mode (​ Live ​/​ Test ​) Payment Configurations Page On this page, you can control and configure your payment methods. It displays both ​ Live ​ and ​ Test ​ payment method integrations. You can switch between them as needed. From this page, you can do: Enable or disable Payment methods. Edit (Name, Description, and integration ID, change the logo) by pressing the ​ Edit ​ button beside each payment method. Reorder the payment methods by dragging the icon ​ ( ​≡​ ) ​ up or down. Update the ​ Webhook URLs ​ by pressing ​ Webhool URL ​ button. Important notes The ​ Pay With Paymob ​ option will avail all the payment methods on one option. Please change the logos only if you have your own and want to use them to avoid corrupting the default ones. Card Embedded Settings This feature allows users to complete payments directly on your WooCommerce store. Enabled by default. ​ To disable it, go to ​ Payment Integrations ​ and turn off ​ "paymob-pixel" ​. If you wish to hide a specific payment method, simply avoid selecting its integration ID. Main Configurations You can: Change the title Select the Integration ID to be used for Cards, Apple Pay, and Google Pay payments separately Control the save card option in the Pixel component UI Customizations You can control a lot of the UI, like (Fonts, Colors, Sizes, …) Subscription Who Can Use It? Any WooCommerce merchant with the WooCommerce Subscription Plugin installed. This section will only be shown if you have installed the WooCommerce Subscription Plugin. Configurations From this page, you can: Enable or disable the Subscription feature. Change the title and the description of the method on the WooCommerce Checkout page. Configure the ​ 3DS ​ and ​ Moto ​ integrations 3DS Integration ​: The integration ID that will be used for the first transaction while the customer is subscribing. Moto Integration ​: The integration ID that will be used for future auto-deductions for the already created subscriptions.​ ​If you don't have one or both of these IDs, you can contact your account manager or send an email to support@paymob.com for assistance on getting the IDs. How to Create Subscription Products on WooCommerce? You can create Simple or Variable subscription products using WooCommerce's existing setup. Required fields: Subscription Price Frequency Make sure to choose the equivalent for one of the frequencies (​ Weekly, Monthly, Two months, Quarterly, Half annual ​) Optional fields: Stop Renewing After = Number of billing cycles before the subscription auto-stops. Free Trial Period = Delays the start of the subscription. Upfront Amount / Sign-Up Fee = One-time initial payment. Affordability Widget Displays Bank Installment Plans directly on the Product and Cart pages. Shoppers can pick a plan upfront, and it carries through automatically to Paymob's checkout, so they don't have to choose again. Currently available for ​ Egypt ​ only. Bank Installment Configuration A new "​ Affordability Widget ​" section has been added under the plugin's Settings. Toggle ​ Enable widget ​ to turn it on, then set the ​ Bank Installment Integration ID ​; it's auto-populated if only one exists, or select one manually if multiple exist. Only Bank Installment Integration IDs enabled under the ​ Payment Integrations ​ section will appear in this dropdown. Optional Settings Setting Description Minimum product amount Hides the widget on the Product Page when the product price is below a defined amount (EGP). Minimum cart amount Hides the widget on the Cart Page when the cart subtotal is below a defined amount (EGP). Theme Merchant can optionally select a visual theme for the widget: Primary (branded, prominent), Light (subtle, neutral), or Dark (dark-mode storefronts). A live preview is shown before saving. Since installment plans typically require a minimum order value of ​ EGP 1,000 ​, merchants should configure the minimum amount thresholds accordingly. Once saved, the widget renders on both the ​ Product Page ​ and ​ Cart Page ​. Customer Flow 1 Customer selects a plan on the widget and clicks ​ Buy Now ​. 2 Customer is redirected to the WooCommerce Checkout page, with the Bank Installment Integration option pre-selected. 3 Upon proceeding, the customer is redirected to Paymob Checkout, with the previously selected plan already passed. 4 The customer only needs to enter card details to complete the payment. • [Shopify](https://developers.paymob.com/paymob-docs/integration-paths/plugins/shopify.md): Who is this for - Merchants and developers who want to integrate the Paymob payment gateway with their Shopify store Outcome - Successfully activate Paymob payment services on your Shopify store and process transactions Last Updated Date - June 3, 2026 Overview Paymob provides multiple Shopify apps to support different payment experiences and payment methods. These apps are designed to integrate seamlessly with Shopify stores, allowing merchants to accept payments using Paymob without custom development. All Paymob Shopify apps follow the same configuration flow . The main difference between them is the checkout experience and the payment methods they offer to customers. Available Shopify Apps Multi App (Redirection App) This app redirects customers from the Shopify checkout to Paymob Unified Checkout , where all enabled payment methods, based on your configured integration IDs, are displayed. This option is suitable for merchants who want to offer multiple payment methods through a single hosted checkout experience. App link: https://apps.shopify.com/paymob-accept-card-alpha The Multi App can also be installed through your Shopify Payments settings: 1. Log in to your Shopify Dashboard → Settings . 2. Select Payments → Add Payment Method . 3. Select Search By Provider → search for Paymob . 4. Install the app. Card App (Embedded App) This app allows customers to enter their card details directly on the Shopify checkout page , then redirects them to the bank’s OTP page to complete authentication. It also enables Apple Pay on the Shopify checkout, providing a native and streamlined card payment experience. App link: https://apps.shopify.com/paymob-debit-credit-card valU App The valU app redirects customers to Paymob Unified Checkout , where the valU Buy Now, Pay Later option only is displayed. This app is intended for merchants who want to offer valU as a dedicated payment option on Shopify Checkout. App link: https://apps.shopify.com/paymob-valu Sympl App The Sympl app redirects customers to Paymob Unified Checkout , where the Sympl BNPL payment option is available. It is used when Sympl is enabled as a payment method for the merchant. App link: https://apps.shopify.com/paymob-sympl Configuration Steps 1 Select the Region , then press the Next button 2 Enter your Paymob username and Password 3 You will be redirected back to the app. Make sure that the Test mode is enabled if you don't have live Shopify integrations. Press the Activate Button Ensure that Payment Capture is set to Automatic in your Shopify Payments settings; otherwise, the payment will not be processed. • [Magento 2](https://developers.paymob.com/paymob-docs/integration-paths/plugins/magento.md): Who is this for - Merchants and developers using Magento who want to integrate Paymob payments into their store using an officially supported plugin. Outcome - Explore, Install, and Configure Paymob's Magento plugin Last Updated Date - June 1, 2026 Overview The Paymob Magento plugin enables you to accept online payments securely on your Magento store using Paymob’s payment gateway. It supports a wide range of payment methods and provides a seamless checkout experience for your customers. You can check it on the Adobe Marketplace Installation Steps 1 Run the below command to install the Paymob Payment via composer PowerShell composer require paymob/magento-payment 2 Run the Magento commands below to enable the Paymob Module PowerShell php -f bin/magento module:enable --clear-static-content Paymob_Payment php bin/magento setup:upgrade php bin/magento setup:di:compile php bin/magento setup:static-content:deploy -f php bin/magento cache:clean php bin/magento cache:flush Plugin Configuration 1 In Magento Admin Panel Menu Stores → Configuration 2 Expand Sales Menu ⇒ select Payment Methods ⇒ Accept Paymob payment , then paste each key of the below in its place in the settings page. Secret Key Public Key API key HMAC secret You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 3 Enter the integration IDs separated by a comma ( , ). 4 Copy the integration callback URL that exists in the Paymob Magento setting page. Then, paste it into each payment integration in the Paymob dashboard. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 5 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Odoo](https://developers.paymob.com/paymob-docs/integration-paths/plugins/odoo.md): Who is this for : For merchants and developers using Odoo who want to enable Paymob payments on their store. Outcome : Explore, Install, and Configure Paymob's powerful Odoo modules Last Updated Date - June 1, 2026 Overview Paymob offers multiple Odoo integrations to support different Odoo versions and deployment models. Odoo 18 , 17 , 16 , and 15 Built and maintained by Paymob, these modules are available for merchants using Odoo.sh and Odoo On-Premise. Odoo Version 18 The Odoo Payment Plugin is available for merchants using Odoo.sh and Odoo On-Premise. Installation & Configuration Steps 1 Merchants can access the plugin via Paymob | Odoo Apps Store . 2 Once you deploy the plugin on the Odoo Instance, navigate to Configuration ⇒ Payment Providers . 3 Activate the Paymob Plugin. 4 After activation is complete, you will be directed to the screen below: 5 Credential Section If the "Enabled" state is selected, the plugin will be in the Published state. Enter the Live Mode API Key, Secret Key, and Public Key. If the "Test Mode" state is selected, the plugin will be in the Unpublished state. Enter the Test Mode API Key, Secret Key, and Public Key. If you select LIVE Mode, all transactions will involve real money. To get your keys, you can check the Getting Integration Credentials page The secret and public keys for Test and Live Mode are different. 6 After entering the keys, click on “Validate” . If the keys are validated successfully, all the Payment Methods will be enabled for the given set of keys. 7 Merchants can view the available payment methods on the Configuration Page. 8 The merchant can click on “Enable Payment Methods” to view all the Payment Integrations for the entered Keys. By default, the Payment Methods will be in a disabled state. Merchants will need to enable the Payment Methods. Merchants can edit the logo of Payment Methods and change the name of Payment Method by clicking on the respective Payment Methods. It’s recommended not to edit the name and logo of Payment Methods. In Odoo 18, payment methods will be displayed as a list. Payments that are in an Active State will be shown on Odoo's Checkout 9 Webhook Configurations - Once the merchant enables any Payment Method, the webhook will be automatically configured in the Paymob System for that integration ID. 10 Card Tokenization In case the merchant wants to enable the “Pay with Saved Card” feature for the consumer, the following steps need to be followed: If the user consents to save the card during the initial transaction, the user will be shown the option to pay with saved cards for subsequent transactions. To enable the Save Card checkbox in the Unified Checkout, you can check the Checkout Customization part in the Dashboard guide. FAQs 1 Regions supported? The plugin is available in Egypt , UAE , KSA , and Oman . 2 Features supported? Auth + Capture Model. Full and Partial Refunds . Odoo Version 17 The Odoo Payment Plugin is available for merchants using Odoo.sh and Odoo On-Premise. Installation & Configuration Steps 1 Merchants can access the plugin via Paymob | Odoo Apps Store . 2 Once you deploy the plugin on the Odoo Instance, navigate to Configuration → Payment Providers . 3 Activate the Paymob Plugin. 4 After activation is complete, you will be directed to the screen below: 5 Credential Section If the "Enabled" state is selected, the plugin will be in the Published state. Enter the Live Mode API Key, Secret Key, and Public Key. If the "Test Mode" state is selected, the plugin will be in the Unpublished state. Enter the Test Mode API Key, Secret Key, and Public Key. If you select LIVE Mode, all transactions will involve real money. To get your keys, you can check the Getting Integration Credentials page The secret and public keys for Test and Live Mode are different. 6 After entering the keys, click on “Validate” . If the keys are validated successfully, all the Payment Methods will be enabled for the given set of keys. 7 Merchants can view the available payment methods on the Configuration Page. 8 The merchant can click on “Enable Payment Methods” to view all the Payment Integrations for the entered Keys. By default, the Payment Methods will be in a disabled state. Merchants will need to enable the Payment Methods. Merchants can edit the logo of Payment Methods and change the name of Payment Method by clicking on the respective Payment Methods. It’s recommended not to edit the name and logo of Payment Methods. In Odoo 17, payment methods will be displayed as a list. Payments that are in an Active State will be shown on Odoo's Checkout 9 Webhook Configurations - Once the merchant enables any Payment Method, the webhook will be automatically configured in the Paymob System for that integration ID. 10 Card Tokenization In case the merchant wants to enable the “Pay with Saved Card” feature for the consumer, the following steps need to be followed: If the user consents to save the card during the initial transaction, the user will be shown the option to pay with saved cards for subsequent transactions. To enable the Save Card checkbox in the Unified Checkout, you can check the Checkout Customization part in the Dashboard guide. FAQs 1 Regions supported? The plugin is available in Egypt , UAE , KSA , and Oman . 2 Features supported? Auth + Capture Model. Full and Partial Refunds . Odoo Version 16 The Odoo Payment Plugin is available for merchants using Odoo.sh and Odoo On-Premise. Installation & Configuration Steps 1 Merchants can access the plugin via Paymob | Odoo Apps Store . 2 Once you deploy the plugin on the Odoo Instance, navigate to Configuration ⇒ Payment Providers . 3 Activate the Paymob Plugin. 4 After activation is complete, you will be directed to the screen below: 5 Credential Section If the state "Enabled" is selected, the plugin will be in the Published state. Enter the Live Mode API Key, Secret Key, Public Key & the LIVE Payment Integration IDs are to be made available on Paymob’s Checkout. If the state "Test Mode" is selected, the plugin will be in the Unpublished state. Enter the Test Mode API Key, Secret Key, Public Key & the TEST Payment Integration ID are to be made available on Paymob’s Checkout for testing Purposes. Note: The keys for Test and Live Mode are different.. To get your keys, you can check the Getting Integration Credentials page The secret and public keys for Test and Live Mode are different. 6 After entering the keys & the integration id’s, click on "Validate." If the keys are successfully validated, all the payment methods associated with the entered integration IDs will be enabled. 7 Merchants can view the available payment methods on the Configuration Page under the Payment Form section. In Odoo 16, payment methods will not be displayed as a list. Instead, only the provider name or the The name set by the merchant in the "Displayed as" label will appear on Odoo's checkout. 8 Webhook Configurations - Once merchants enter the Integration IDs in the Credentials section and the keys are validated, the webhook will be automatically configured in the Paymob system for those integration IDs. 09 Card Tokenization In case the merchant wants to enable the “Pay with Saved Card” feature for the consumer, the following steps need to be followed: If the user consents to save the card during the initial transaction, the user will be shown the option to pay with saved cards for subsequent transactions. To enable the Save Card checkbox in the Unified Checkout, you can check the Checkout Customization part in the Dashboard guide. FAQs 1 Regions supported? The plugin is available in Egypt , UAE , KSA , and Oman . 2 Features supported? Auth + Capture Model. Full and Partial Refunds . Odoo Version 15 The Odoo Payment Plugin is available for merchants using Odoo.sh and Odoo On-Premise. Installation & Configuration Steps 1 Merchants can access the plugin via Paymob | Odoo Apps Store . 2 Once you deploy the plugin on the Odoo Instance, navigate to Configuration ⇒ Payment Acquirers. 3 Activate the Paymob Plugin. 4 After activation is complete, you will be directed to the screen below: 5 Credential Section If the state "Enabled" is selected, the plugin will be in the Published state. Enter the API Key, Secret Key, Public Key & the LIVE Payment Integration IDs are to be made available on Paymob’s Checkout. If the state "Test Mode" is selected, the plugin will be in the Unpublished state. Enter the API Key, Secret Key, Public Key & the TEST Payment Integration ID are to be made available on Paymob’s Checkout for testing Purposes. To get your keys, you can check the Getting Integration Credentials page The secret and public keys for Test and Live Mode are different. 6 After entering the keys & the integration id’s, click on "Validate." If the keys are successfully validated, all the payment methods associated with the entered integration IDs will be enabled. 7 Merchants can view the available payment methods on the Configuration Page under the Payment Form section. In Odoo 15, payment methods will not be displayed as a list. Instead, only the provider name, or the name set by the merchant in the "Displayed as" label will appear on Odoo's checkout. 8 Webhook Configurations - Once merchants enter the Integration IDs in the Credentials section and the keys are validated, the webhook will be automatically configured in the Paymob system for those integration IDs. 09 Card Tokenization In case the merchant wants to enable the “ Pay with Saved Card ” feature for the consumer, the following steps need to be followed: If the user consents to save the card during the initial transaction, the user will be shown the option to pay with saved cards for subsequent transactions. To enable the Save Card checkbox in the Unified Checkout, you can check the Checkout Customization part in the Dashboard guide. FAQs 1 Regions supported? The plugin is available in Egypt , UAE , KSA , and Oman . 2 Features supported? Auth + Capture Model. Full and Partial Refunds . Odoo enterprise It's the standard version of Odoo and allows its users to utilize all its modules with limited customization. Currently, Paymob is available as a payment provider on its invoicing, sales, website, and e-commerce apps, providing merchants with a streamlined onboarding process and an embedded payment experience. How to Accept Payments using Paymob on Odoo? 1 Navigate to Configuration ⇒ Payment Providers. 2 Find Paymob in the list of available providers. 3 Click Install to add Paymob as a payment option. 4 After installation, click Activate to begin configuration. 5 You will be directed to the Paymob configuration screen. 6 Set up Paymob credentials in the Credential Section Configuration Based on Mode: • If “Enabled” is selected, the plugin will be in the Published state. → Enter your Live HMAC, API Key, Secret Key, and Public Key. • If “Test Mode” is selected, the plugin will be in the Unpublished state. → Enter your Test HMAC, API Key, Secret Key, and Public Key. To get your keys, you can check the Getting Integration Credentials page Select the Account Country (e.g., Egypt). 7 Navigate to the Configuration Section 8 Click Enable Payment Methods. 9 Select the payment methods you'd like to activate on Odoo's checkout 10 After selecting your payment methods: • Click the “ Synchronize with Paymob ” button. • This confirms your configuration and finalizes the setup. Once synchronization is successful: • Your Paymob integration is complete. • You can now accept payments directly on your Odoo store. Feel free to contact support@paymob.com if you have any issues or inquiries. We will be glad to help you. • [OpenCart](https://developers.paymob.com/paymob-docs/integration-paths/plugins/opencart.md): Who is this for - Merchants and non-technical users who want to accept online payments on their OpenCart store without building a custom integration Outcome : Explore, Install, and Configure Paymob's OpenCart plugin Last Updated Date - June 1, 2026 Overview The Paymob OpenCart plugin enables you to accept online payments directly on your OpenCart store using Paymob’s secure payment gateway. It supports a smooth checkout experience. Installation Steps 1 Download the Paymob OpenCart plugin from the provided link 2 Log in to your OpenCart admin panel , then navigate to Extensions ⇒ Installer . Click the Upload button at the top of the page and upload the plugin file. 3 From the left sidebar menu, go to Extensions ⇒ Extensions . Select Payments from the Extension Type dropdown, locate Paymob Payment, and click Install . Plugin Configuration 1 After installation, click Edit next to Paymob Payment. 2 Choose to enable or disable the plugin, then enter your Paymob integration details, including: • Secret Key • Public Key • API key You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 3 Click on the Validate Paymob API key button to ensure the data provided keys are valid and return the needed information. 4 Select the integration IDs that you need the end-user pay with or see in the Paymob payment page. 5 Copy the integration callback URL that exists in the Paymob OpenCart setting page. Then, paste it into each payment integration in the Paymob dashboard. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 6 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [PrestaShop](https://developers.paymob.com/paymob-docs/integration-paths/plugins/prestashop.md): Who is this for - For PrestaShop merchants and technical admins who want to enable Paymob payments on their store without building a custom integration Outcome - Explore, Install, and Configure Paymob's PrestaShop plugin Last Updated Date - June 1, 2026 Overview The Paymob PrestaShop plugin allows merchants to accept online payments directly on their PrestaShop store through a ready-to-use integration. It supports multiple payment methods and handles the full checkout flow securely, enabling a smooth payment experience without requiring custom development. Supported versions: 1.6, 1.7, and 8 Installation Steps 1 Download the Paymob PrestaShop module from this link . 2 Login into Prestashop admin panel ⇒ Modules ⇒ Module Manager ⇒ Upload a module. 3 Select the Paymob downloaded .zip file. 4 You will see that the module is now uploaded and installed, and the Paymob module will appear on the module list. Plugin Configuration 1 From the Prestashop admin panel, in the left menu, Payments ⇒ payment methods . 2 Click on the Configure button beside the Paymob payment method to start the configuration. 3 You can name your payment method according to the one you need to display in the checkout page. 4 Add all the credentials needed by pasting each key in its place. You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 5 Enter the integration IDs separated by a comma ( , ). 6 Copy the integration callback URL that exists in the Paymob PrestaShop setting page, then paste it into each payment integration in the Paymob account. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 7 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [WHMCS](https://developers.paymob.com/paymob-docs/integration-paths/plugins/whmcs.md): Who is this for - For Business Owners & Operations Teams & Developers who want to accept online payments on WHMCS Outcome - Explore, Install, and Configure Paymob's WHMCS plugin Last Updated Date - June 1, 2026 Overview The Paymob WHMCS plugin allows you to add Paymob as a payment gateway for invoices and recurring charges generated by WHMCS . Once configured, customers can complete payments directly from the WHMCS client area, while Paymob handles payment processing and confirmation. Installation Steps 1 Download the Paymob WHMCS plugin from the marketplace 2 Extract the downloaded WHMCS module .zip file into your server in the path of the WHMCS project. 3 Log in to the WHMCS admin panel, navigate to Setup ⇒ Apps & integrations ⇒ Browse ⇒ Payments . 4 Search for Paymob Payment, then click on the Manage button. Plugin Configuration 1 In WHMCS admin, navigate to Addons => Apps & integrations => Payments Apps . 2 Configure the new module in the Manage Existing Gateways tab. 3 Add all the credentials needed by pasting each key in its place. You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 4 Copy the integration callback URL that exists in the Paymob WHMCS setting page, then paste it into each payment integration ID in the Paymob account. 5 Save the changes. To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [CS-Cart](https://developers.paymob.com/paymob-docs/integration-paths/plugins/cs-cart.md): Who is this for - Merchants and non-technical users who want to accept online payments on their CS-Cart store using a ready-to-use Paymob plugin Outcome - Explore, Install, and Configure Paymob's CS-Cart plugin Last Updated Date - June 1, 2026 Overview The Paymob CS-Cart plugin allows you to accept online payments securely on your CS-Cart store using Paymob’s payment gateway. It provides a smooth checkout experience for customers. Installation Steps 1 Download the Paymob Cs-Cart Addon from the marketplace 2 Login into Cs-Cart admin panel, from the upper menu, click on Add-ons => Manage add-ons. 3 Click on the tools => settings icon in the upper right corner. 4 Choose Manual installation => Local and select the Paymob downloaded file .zip file, then click on the Upload & Install button. 5 The Paymob addon will appear on the Add-ons list. Plugin Configuration 1 From the Cs-Cart admin panel, in the upper menu, click on " Administration " => " Payment Methods ". 2 Click on the Add button on the top right to add the payment method. 3 You can name your payment method according to the one you need to add, and then choose Paymob in the " Processor " dropdown list. 4 Click on " Configure ". 5 Add all the credentials needed by pasting each key in its place in the Paymob Cs-Cart setting page. You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 6 Click on the Validate PayMob API key button to ensure the data provided keys are valid and return the needed information. 7 Select the Integration IDs that you want to enable for your customers during checkout. 8 Copy the integration callback URL that exists in the Paymob Cs-Cart setting page. Then, paste it into each payment integration in the Paymob account. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 9 Save the changes. To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [ZenCart](https://developers.paymob.com/paymob-docs/integration-paths/plugins/zencart.md): Who is this for - ZenCart store owners and administrators looking to add Paymob as a payment option without building a custom integration Outcome - Explore, Install, and Configure Paymob's ZenCart plugin Last Updated Date - June 1, 2026 Overview The Paymob ZenCart integration enables merchants to connect their store to Paymob’s payment gateway using a dedicated payment module, allowing customers to complete payments securely during checkout. Installation Steps 1 Download the Paymob PrestaShop module from this link . 2 Extract the downloaded ZenCart module .zip file into your server in the path of the ZenCart project. 3 Log in to the ZenCart admin panel, navigate to Modules → Payment . 4 Search for Paymob Payment , then click on it and install the module. Plugin Configuration 1 In Modules ⇒ Payment ⇒ Paymob Payment (on the right side), paste each key in its place, select Paymob payment , paste each key in its place in the settings page You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 2 Enter the integration IDs separated by a comma ( , ). 3 Copy the integration callback URL that exists in the Paymob ZenCart Configuration page, then paste it into each payment integration in the Paymob account. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 4 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Joomla](https://developers.paymob.com/paymob-docs/integration-paths/plugins/joomla.md): Who is this for - For Joomla site owners and technical administrators who want to integrate Paymob payments into their website Outcome - Explore, Install, and Configure Paymob's Joomla plugin Last Updated Date - June 1, 2026 Overview The Paymob Joomla plugin allows you to accept online payments through a simple plugin-based setup, enabling card and supported alternative payment methods without custom development. Installation Steps 1 Download the Paymob Joomla plugin from the marketplace 2 Log into admin panel of your Joomla store. Browse to your admin panel ⇒ Extensions ⇒ Manage ⇒ Install . 3 Click on " Browse for file ", then choose our plugin .zip file in the plugin list. 4 Click on VirtueMart ⇒ Payment Methods . 5 Click on the " New " button. You will be redirected to the payment method information page. 6 You will then fill in the payment method information based on which one you will integrate, then you will click " Save ", and then click on the " Configuration " tab. Plugin Configuration 1 Paste each key in its place in the Paymob Virtuemart Configuration page. You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 2 Click on the Validate API key button to ensure the data provided keys are valid and return the needed information. 3 Select the Integration IDs that you want to enable for your customers during checkout. 4 Copy the integration callback URL that exists in the Paymob Virtuemart Configuration page. Then, paste it into each payment integration in the Paymob account. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 5 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Laravel-Bagisto](https://developers.paymob.com/paymob-docs/integration-paths/plugins/laravel-bagisto.md): Who is this for - For developers working with Laravel Bagisto stores who want to add Paymob as a payment option. Outcome - Explore, Install, and Configure Paymob's Laravel-Bagisto plugin Last Updated Date - June 1, 2026 Overview The Paymob Laravel Bagisto plugin enables merchants to accept online payments through Paymob within Bagisto’s Laravel-based e-commerce framework, integrating smoothly with Bagisto’s checkout flow. Installation Steps for Bagisto 1.x 1 Install the Paymob Payment package for Laravel Bagisto 1.x e-commerce via paymob/laravel-bagisto1.x composer. In the server CMD terminal, run the following command to install the Paymob Payment Package PowerShell composer require paymob/laravel-bagisto1.x 2 Then, run the commands below PowerShell php artisan migratephp artisan optimize 3 Go to app/Http/Middleware/VerifyCsrfToken.php file. Then, add paymob/callback in the protected array $except as below PowerShell protected $except = ['paymob/callback',]; 4 After that, run the following command PowerShell php artisan config:cache Installation Steps for Bagisto 2.x 1 Install the Paymob Payment module for Laravel Bagisto 2.x e-commerce via paymob/laravel-bagisto2.x composer. In the server cmd terminal, run the following command to install the Paymob Payment Package PowerShell composer require paymob/laravel-bagisto2.x 2 Run the commands below PowerShell php artisan vendor:publish --force --tag=paymob php artisan migrate php artisan optimize 3 Go to app/Http/Middleware/VerifyCsrfToken.php file. Then, add paymob/callback in the protected array $except as below PowerShell protected $except = ['paymob/callback',]; 4 After that, run the following command PowerShell php artisan config:cache Plugin Configuration 1 In the Bagisto Admin Panel Menu, configuration ⇒ sales ⇒ payment methods , search for Paymob payment , then paste each key in its place in the settings page. You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 2 Enter the integration IDs separated by a comma ( , ). 3 Copy the integration callback URL that exists in the Paymob Bagisto setting page, then paste it into each payment integration/method in the Paymob account. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 4 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [OsCommerce](https://developers.paymob.com/paymob-docs/integration-paths/plugins/oscommerce.md): Who is this for - OsCommerce store owners and administrators looking to add Paymob as a payment option without building a custom integration Outcome - Explore, Install, and Configure Paymob's ZenCart plugin Last Updated Date - June 1, 2026 Overview The Paymob osCommerce plugin provides a straightforward way to connect your osCommerce store to Paymob, enabling secure payment processing without altering the platform’s core files. Installation Steps 1 Download the Paymob PrestaShop module from this link . 2 Extract the downloaded osCommerce module .zip file into your server in the path of the osCommerce project. 3 Log in to the Oscommerce admin panel, navigate to Modules ⇒ Payment ⇒ Online . 4 Click on the Show not installed checkbox, then search for Paymob Payment , then click on it and install the module. Plugin Configuration 1 Paste each key in its place in the Paymob Oscommerce Settings page. You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 2 Enter the integration IDs separated by a comma ( , ). 3 Copy the integration callback URL that exists in the Paymob Oscommerce Configuration page, then paste it into each payment integration in the Paymob account. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 5 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Drupal](https://developers.paymob.com/paymob-docs/integration-paths/plugins/drupal.md): Who is this for - For developers or site administrators managing Drupal websites who need to add Paymob payments to a custom or Drupal Commerce–based setup Outcome - Explore, Install, and Configure Paymob's Drupal plugin Last Updated Date - June 1, 2026 Overview The Paymob Drupal module allows you to integrate Paymob’s payment gateway into a Drupal-based website, enabling secure online payments while leveraging Drupal’s flexible content and commerce capabilities. You can check the Paymob Drupal Commerce module from the Drupal marketplace . Installation Steps 1 In the server cmd terminal, install the Paymob Payment module for Drupal Commerce e-commerce via Composer using the following command. PowerShell composer require paymob_drupal/commerce_paymob 2 In the admin panel , the Extend tab, search for the Paymob module , select it, and click the install button to install it. Plugin Configuration 1 In the Drupal Commerce Admin Panel Menu Commerce ⇒ Configuration ⇒ Payments ⇒ Payment Gateways section, paste each key in its place, select Paymob payment , paste each key in its place in the settings page You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 2 Enter the integration IDs separated by a comma ( , ). 3 Copy the integration callback URL that exists in the Paymob Drupal Commerce setting page. Then, paste it into each payment integration/method in the Paymob account. You check the Getting Integration Credentials page for more guidance on how to update the callback URLs on the Paymob dashboard. 4 Save the changes To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Staah](https://developers.paymob.com/paymob-docs/integration-paths/plugins/staah.md): Who is this for - For Business Owners & Operations Teams & Developers who want to accept online payments on Staah Outcome - Explore, Install, and Configure Paymob's Staah plugin Last Updated Date - June 1, 2026 Overview What is STAAH? STAAH is a hotel distribution and revenue management platform that enables hotels to manage inventory, room rates, and bookings across multiple online channels from a single system. STAAH × Paymob Integration STAAH is integrated with Paymob using the Intention-based setup. Any merchant using STAAHʼs platform for their hotel website can choose Paymob as their payment provider. Installation Steps 1 Go to Booking Engine ⇒ Settings ⇒ Payment Gateway 2 Scroll down to the “ Other Partners ” section ⇒ Search for and select Paymob 3 Click on " Connect " ⇒ A pop-up will appear ⇒ Click " Proceed to Connect " Plugin Configuration 1 Fill in the following details Choose Payment Gateway: Paymob API Key Secret Key Public Key HMAC Display Name (shown on the Booking Engine) Payment Type (select supported card networks) You can get all the credentials from your Paymob dashboard. Check the Getting Integration Credentials . 2 Verify the configured Callback URLs Verify the callback URLs configured in your Integration IDs through the Paymob Dashboard. These URLs should match the fixed callback URLs listed below, which are also available on the Paymob Staah Configuration page. If the URLs are not configured correctly, copy the values below and update the callback URL field in each payment integration within your Paymob account. Fixed URLs Transaction Processed Callback: https://securepay.staah.net/PG/paymob/webhook.php Transaction Response Callback: https://securepay.staah.net/PG/paymob/response.php You check the Getting Integration Credentials page for more guidance on how to validate and edit the callback URLs on the Paymob dashboard. 3 Click " Sync ". FAQs 1 Where can a merchant find the Transaction ID for any booking on STAAH? When a user clicks on any booking, the Transaction ID will be displayed under the Payment ID field • [Mobile SDKs](https://developers.paymob.com/paymob-docs/integration-paths/mobile-sdks.md): Who is this for - Product managers and developers who need a high-level overview of how to integrate through Mobile SDKs Outcome - Understand the overall Mobile flow, the available checkout options, and how payment results are securely communicated back to your system Last Updated Date - June 1, 2026 When should you use Mobile SDKs? Use Paymob Mobile SDKs if you are building a native mobile application and want a checkout experience that feels fully integrated with your app. Mobile SDKs are recommended when you want a native UI experience without using WebViews Supported Features: Embedded experience (Pay inside the merchant's checkout) for the Card Payment Method Discount Management for the Card Payment Method Convenience Fee for the Card Payment Method Integration flow 1 Create a payment intention Every SDK payment starts from your backend by calling the Intention Creation API . This step is responsible for: Defining the amount and currency Selecting the allowed payment methods Linking the payment to your internal order or reference ID The response includes an intention reference (client secret) that will be passed to the Mobile SDK. 2 Initialize the Mobile SDK In your mobile app (iOS or Android), you initialize the Paymob Mobile SDK using the intention reference received from your backend. At this stage: The SDK is configured with the payment intention No sensitive payment data is handled by your app This keeps your mobile application outside the PCI scope. 3 Present the native checkout UI Once initialized, the SDK will handle presenting the checkout experience based on the selected integration flow: Normal (Hosted) Checkout: The SDK presents Paymob’s full checkout screen as a separate UI Embedded Checkout: The SDK renders the checkout UI inside your app screen (within the configured view) In both cases: The customer completes the payment inside the SDK Paymob handles input validation, security, and authentication (e.g. 3D Secure) 5 Callbacks and SDK result handling After the payment is processed, Paymob sends callbacks to your backend with the final payment result and returns a status to the mobile app via the SDK callback . Backend callbacks must be used to confirm the final payment status, update orders, and trigger business actions. They are the source of truth. SDK callbacks should be used only to update the UI and show success or failure messages. Always rely on backend callbacks, not SDK responses alone, to confirm payment success. 6 Callback security (HMAC) Each callback can be authenticated using HMAC verification to ensure it was sent by Paymob and was not altered. Always verify callbacks before trusting their data Technical Implementation Check the technical implementation guide in the SDKs guide under the Developers Reference sections • [Overview](https://developers.paymob.com/paymob-docs/payments-and-features/overview.md): Who is this for - Product managers, business owners, and stakeholders who need a high-level overview of Paymob’s supported payment methods and features Outcome - Identify the supported payment methods and features, and decide which ones best fit your business needs Last Updated Date - June 1, 2026 Paymob enables businesses to accept and manage digital payments through a wide range of payment methods and Core features . Payment Methods Paymob supports multiple payment methods to serve different customer preferences and markets, including: Card payments for online credit and debit card transactions Mobile wallets for fast, wallet-based payments Bank installments & BNPLs for spreading payments over time Kiosk payments for cash-based transactions Each payment method has its own availability, flow, and requirements, which are covered in detail on its respective page. Core Features Paymob also provides features that help optimize payment operations and customer experience, such as: Pay With Saved cards for faster repeat payments through checkout Authorization and capture for flexible fund settlement Subscriptions Module for recurring payments Split Features for splitting the amount through multiple parties ( Split Amount ), or using up to 3 cards to fulfill the same payment ( Split Payment ) Further details about each feature can be found in the dedicated feature pages. • [Payment Methods](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods.md): Who is this for - Product managers, business owners, and stakeholders who need a high-level overview of Paymob’s supported payment methods and their use cases. Outcome - Identify the supported payment methods and decide which ones best fit your business needs Last Updated Date - June 1, 2026 Overview Paymob supports a wide range of payment methods to help businesses accept payments across different customer preferences and markets. Each payment method serves a specific use case and may vary in terms of availability, customer experience, and supported features. Supported Payment Method Types Card Payments Allow customers to pay using debit or credit cards. This is the most common payment method and supports standard online card payment flows Mobile Wallets Enable payments using mobile wallets linked to a customer’s phone number Buy Now, Pay Later (BNPL) Allow customers to split payments into installments over time. This option helps increase affordability and conversion rates Apple Pay Provide a fast and secure payment experience for Apple users using their saved cards on supported Apple devices Google Pay Enable quick checkout for Android and Chrome users using cards saved to their Google account Kiosk Allow customers to generate a payment reference and complete the payment later through supported offline kiosks • [Cards [All regions]](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods/cards-all-regions.md): Who is this for - Product managers, business owners, and stakeholders who want to understand card payments Outcome - Understand how card payments work, the supported card networks, the regions where they are available, and the supported transaction actions (refund, void, and capture) Last Updated Date - July 29, 2026 Card payments offer you trusted payment methods, enabling your customers to pay securely using debit and credit cards. Paymob supports card payments across major international and local schemes, delivering secure processing and high authorization rates. Supported Card Networks EGY : VISA, Mastercard, Amex (Conditional; coordinate with the account manager to enable) KSA : VISA, Mastercard, Amex, and MADA UAE : VISA, Mastercard, Amex OMN : VISA, Mastercard, Amex, and Omannet Supported for Regions It's supported in all regions ( EGY , KSA , UAE , OMN ) Card Payment Types Normal 3DS The customer completes 3D Secure authentication (e.g., a bank OTP) during checkout. Moto A transaction where the card is not physically present, typically used for back-to-back requests without customer interaction. Passes OTP and CVV. Card On File A payment using card details securely stored by the merchant after an initial transaction. Used for faster future checkouts. Passes OTP only. Auth/Cap (Authorization and Capture) A two-step process where funds are first authorized (reserved) and then later captured (settled). Commonly used when fulfilling orders takes time. Verification A transaction that validates a card's details and available balance without transferring funds or authorizing (reserving) funds. Used to check card validity before real future charges using Moto or Verification . Supported Payment Actions Void for all types Refund (Full/Partial) for all types Capture (Full/Partial) for Auth/Cap Supported Integration Channels APIs Mobile SDKs Plugins Payment Links The Card payment method can have both test and Live integration IDs. • [Mobile Wallets [EGY]](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods/mobile-wallets-egy-ksa.md): Who is this for - Product managers, business owners, and stakeholders who want to understand mobile wallet payments. Outcome - Understand how mobile wallet payments work, the supported wallet providers, the regions where they are available, and the customer payment experience Last Updated Date - June 1, 2026 Mobile wallets enable you to store payment details digitally and complete transactions quickly using customers mobile devices. Paymob allows you to accept a wide range of local and regional mobile wallets, improving checkout speed and conversion rates. This method supports mobile-first payment experiences across key markets.. Supported Mobile Wallets EGY : Vodafone Cash, Orange Cash, e& money, We Pay, and Bank Wallets Supported for Regions It's supported in the regions EGY Supported Payment Actions Refund (Full/Partial) Supported Integration Channels APIs Mobile SDKs Plugins Payment Links The Wallet payment method can have both test and Live integration IDs. • [BNPLs [EGY, KSA, UAE]](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods/bnpls-egy-ksa-uae.md): Who is this for - Product managers, business owners, and stakeholders who want to offer installment-based payment options to their customers Outcome - Understand how BNPL payments work, the supported providers, regional availability, and how customers complete payments Last Updated Date - June 16, 2026 BNPLs allow merchants to offer their customers flexible payment options, letting them split purchases into installments while receiving the full payment upfront. BNPL helps increase conversion rates, average order value, and customer satisfaction by providing more affordable and manageable payment options. Valu EGY Souhoola EGY Aman Installments EGY Tabby KSA, UAE Tamara KSA, UAE Premium EGY MOGO EGY Sympl EGY Halan EGY Klivvr EGY Forsa EGY Contact EGY TRU EGY Seven EGY Mylo EGY How BNPL works Customer selects BNPL at checkout The customer chooses to split the payment into multiple installments. The merchant receives full payment upfront Paymob pays the merchant immediately while collecting installments from the customer. Customer repays in installments The customer pays the agreed amounts over time according to the chosen schedule. Key Providers Valu [EGY] Supported Integration Channels APIs Mobile SDKs Plugins Payment Links Supports Full / Partial refunds Souhoola [EGY] Supported Integration Channels APIs Mobile SDKs Plugins Payment Links Supports Full / Partial refunds Aman Installments [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds Tabby [KSA, UAE] Supported Integration Channels APIs Mobile SDKs Plugins Payment Links Supports Full / Partial refunds Tamara [KSA, UAE] Supported Integration Channels APIs Mobile SDKs Plugins Payment Links Supports Full refund only Forsa [EGY] Supported Integration Channels APIs Mobile SDKs Plugins Payment Links Supports Full / Partial refunds Contact [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds Sympl [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds Seven [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full refund only TRU [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds KLIVVR [EGY] There's another option, which is collecting the fees with the first installment (first installment = installment amount + fees). Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds MOGO (MID Takseet) [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds Halan [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds Premium [EGY] Supported Integration Channels APIs Mobile SDKs Plugins Payment Links Supports Full refund only Mylo [EGY] Supported Integration Channels APIs Plugins Payment Links Supports Full / Partial refunds • [Apple Pay [All regions]](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods/apple-pay-all-regions.md): Who is this for - Product managers, business owners, and stakeholders who want to understand Apple Pay payments. Outcome - Understand how BNPL payments work, the supported providers, regional availability, and how customers complete payments Last Updated Date - June 1, 2026 Apple Pay provides you with a fast and secure payment experience using Apple devices with biometric authentication. Paymob enables Apple Pay acceptance across supported markets, helping you to reduce friction and improve checkout completion. Supported for Regions It's supported in all regions ( EGY, KSA, UAE, OMN ) Supported Payment Actions Refund (Full/Partial) Supported Integration Channels APIs Mobile SDKs Plugins Payment Links If you're integrating through SDK , you need to create Apple Pay certificates . If you're integrating through Pixel (Embedded experience) through APIs or the WooCommerce plugin , you need to verify your domain , and you need to create Apple Pay certificates . The Apple Pay payment method has Live integration IDs only. • [Google Pay [KSA, UAE, OMN]](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods/google-pay-ksa-uae-omn.md): Who is this for - Product managers, business owners, and stakeholders who want to understand Google Pay payments. Outcome - Understand how Google Pay works, the supported regions, and the customer payment experience Last Updated Date - June 1, 2026 Google Pay enables secure, fast payments using Android devices and Google accounts without manual card entry. Paymob supports Google Pay integration, allowing you to offer a convenient and trusted payment option. Supported for Regions It's supported in the regions KSA, UAE, and OMN Supported Payment Actions Refund (Full/Partial) Supported Integration Channels APIs Mobile SDKs Plugins Payment Links The Google Pay payment method has Live integration IDs only. • [Bank Installments [EGY]](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods/bank-installments-egy.md): Who is this for - Product managers, business owners, and stakeholders who want to understand bank installment payments. Outcome - Understand how bank installments work and the customer payment experience Last Updated Date - June 1, 2026 Bank installments allow you to split purchases into monthly payments, increasing affordability for higher-value transactions. Paymob integrates with partner banks to offer flexible installment plans through a seamless checkout experience. Supported for Regions It's supported in EGY only Supported Payment Actions Refund (Full/Partial) Supported Integration Channels APIs Plugins Payment Links The Bank Installments payment method has Live integration IDs only. • [Kiosk [EGY]](https://developers.paymob.com/paymob-docs/payments-and-features/payment-methods/kiosk-egy.md): Who is this for - Product managers, business owners, and stakeholders who want to understand kiosk payments Outcome - Understand how kiosk payments work and the end-to-end customer payment experience Last Updated Date - June 1, 2026 Paymob enables you to accept kiosk payments, allowing customers to generate a payment reference and complete the payment in cash at supported kiosk locations. Supported for Regions It's supported in the region EGY only Supported Payment Actions This payment methods doesn't support refunds . Supported Integration Channels APIs Plugins Payment Links The Kiosk payment method can have both test and Live integration IDs. • [Core Features](https://developers.paymob.com/paymob-docs/payments-and-features/core-features.md): Who is this for ​: Product managers, business owners, and stakeholders who want a ​ high-level overview of Paymob’s core capabilities ​, without diving into technical implementation details Outcome ​: Understand the key payment management and value-added features offered by Paymob, and identify which features are most relevant to your business mode Last Updated Date ​ - ​June 1, 2026 Paymob provides a set of ​ core payment features ​ that help merchants manage transactions, enhance customer experience, and optimize business operations. Each feature addresses specific business needs, from controlling funds to enabling flexible payments and generating insights. Core Features Overview Subscription Module Automate recurring payments by charging customers periodically based on predefined subscription plans. Pay With Saved Cards Allows returning customers to pay quickly without re-entering card details, streamlining checkout and increasing repeat purchases. Authorization & Capture (Auth/Cap) A two-step payment flow that lets merchants reserve funds first and collect them later, offering control over settlement timing and flexibility in transaction amounts. Split Features Split a single payment across multiple parties (Split Amount) or allow customers to use up to three cards to complete the same payment (Split Payment). Convenience Fee Merchants can add additional charges to cover transaction processing costs or service fees, clearly presented to customers at checkout. Transaction Inquiry & Reports Provides insights into payments through detailed reports and Transaction Inquiry APIs, helping merchants track performance and reconcile accounts. • [Subscriptions](https://developers.paymob.com/paymob-docs/payments-and-features/core-features/subscriptions.md): Who is this for - Product managers, business owners, and stakeholders who want to offer subscription-based payments without building or managing complex recurring billing logic Outcome - understand what Paymob Subscriptions are and how they work, when to use subscriptions instead of manual recurring charges, the key benefits and limitations of the feature Last Updated Date - June 1, 2026 Paymob's Subscriptions feature allows merchants to charge customers automatically on a recurring basis without the need to manually initiate a back-to-back request for each payment. Once a customer is enrolled, Paymob handles the recurring charges according to the defined schedule. This feature is designed to simplify recurring billing while providing a consistent and secure payment experience. Key points Automatic recurring payments No repeated manual or API calls. Customer-friendly Consistent, on-time charges without repeated checkouts. Operational efficiency Reduces manual effort and integration complexity. Flexible Supports fixed amounts, custom intervals, and retries for failed payments. Key Components Subscription Plan Defines the recurring payment terms, including amount, interval, and rules. It serves as the blueprint for recurring charges. Subscription Represents a customer’s active enrollment in a plan, with payments deducted automatically. It is the execution of the plan for a specific customer. Ideal use cases Subscription services (monthly, yearly) Memberships and loyalty programs Digital content platforms Recurring utilities or services Technical Implementation Check the technical implementation guide in the Subscriptions guide under the Developers Reference sections • [Pay With Saved Cards](https://developers.paymob.com/paymob-docs/payments-and-features/core-features/pay-with-saved-cards.md): Who is this for - Product managers, business owners, and stakeholders who want to streamline the checkout process for returning customers and increase repeat sales Outcome - Understand what “Pay With Saved Cards” is, how it benefits your business and customers Last Updated Date - June 1, 2026 What is Pay With Saved Cards? This feature securely stores a customer’s card information after their first successful payment. For subsequent purchases, the customer can select the saved card and pay without manually entering card details or completing full authentication flows, making the checkout process faster and more convenient . Card Types to use with Normal 3DS Auth Card On File Moto When to use Pay With Saved Cards Enable this feature if your business: Has frequent returning customers Wants to increase checkout speed Seeks to boost repeat sales and loyalty How it works Customer saves card (First Payment): During checkout, the customer opts to save their card for future purchases, and the merchant's system receives a token that represents the card. Use the saved cards (Future Payments): When the customer gets back and wants to pay with his saved card, the merchant's system should pass the card token again to Paymob, then redirect the customer to one of Paymob's UIs Processing the Payment: According to the Card Integration type used, Paymob will process the payment, applying the relevant validation and security checks before completing the transaction. Card Types to use with Normal 3DS Auth Card On File Moto Technical Implementation Check the technical implementation guide in the Pay With Saved Cards guide under the Developers Reference sections • [Auth/Cap](https://developers.paymob.com/paymob-docs/payments-and-features/core-features/auth-cap.md): Who is this for - Product managers, business owners, and stakeholders who need a high-level understanding of Authorization & Capture transactions and when to use them Outcome - Understand how Authorization & Capture works, when to use it, and how it helps control when customer funds are reserved and collected Last Updated Date - June 1, 2026 Authorization & Capture (Auth/Cap) Authorization & Capture (Auth/Cap) is a two-step payment flow that allows merchants to reserve a specific amount on a customer’s card first , then capture the full or partial amount later once the final transaction details are confirmed. What is an Authorization Transaction? An authorization transaction places a temporary hold on a specified amount on the customer’s card. The funds are reserved but not yet transferred to the merchant. What is a Capture Transaction? A capture transaction is the step where the merchant collects the authorized funds or a part of it . How Auth/Cap Works Authorization is created Funds are held Final amount is confirmed Capture is performed The remaining amount is voided at the release time Common Use Cases Authorization & Capture is ideal when: The final amount is not known upfront Orders are shipped later Services are confirmed after checkout Partial fulfillment is possible Merchants want control over settlement timing • [Split Features](https://developers.paymob.com/paymob-docs/payments-and-features/core-features/split-features.md): Who is this for - Product managers, business owners, and stakeholders who want to understand how Paymob supports flexible payment handling through split payments and fund distribution Outcome - Understand the available split options, how each one works at a high level, and determine which split feature best fits your business model Last Updated Date - June 1, 2026 What Are Split Features? Split Features enable flexible payment handling by allowing a single payment to be either distributed across multiple parties or fulfilled using more than one card . This helps merchants support complex business models and improve payment success rates without changing the customer checkout experience. Paymob supports two split modes: Split Amount : One payment, multiple recipients Split Payment : One payment, multiple cards Each mode serves a different business need and is configured according to your account setup. Split Amount Overview Split Amount allows you to divide a single payment amount among multiple parties . Each party receives its predefined share from the same transaction. How It Works The customer completes one payment The total amount is automatically split Each party receives its allocated portion The customer experiences a normal checkout flow, while settlement is handled according to the defined split rules. Common Use Cases Marketplaces with multiple sellers Platforms taking commissions Partnerships and revenue-sharing models Split Payment Overview Split Payment allows customers to use more than one card to complete a single payment , with support for up to three cards per transaction. How It Works The total payment amount is divided across multiple cards The customer selects the number of cards and provides card details for each portion The payment is completed once all parts are successfully processed This is still treated as a single payment, even though multiple cards are used. Common Use Cases Customers with card limits High-value purchases Corporate or shared payments Scenarios where one card cannot cover the full amount Technical Implementation Check the technical implementation guide in the Split Features Implementation guide under the Developers Reference sections • [Convenience Fee](https://developers.paymob.com/paymob-docs/payments-and-features/core-features/convenience-fee.md): Who is this for - Product managers and developers who need to understand how Paymob supports convenience fees and how to configure them for various payment methods. Outcome - Understand what convenience fees are, the supported configuration options, and how they can be applied to card and wallet payments Last Updated Date - June 1, 2026 What is a Convenience Fee A convenience fee is an additional charge applied on top of the base price of a product or service. Merchants typically use it to offset transaction costs imposed by payment service providers or to cover processing overheads. A convenience fee is an additional charge applied by a business on top of the base price of a product or service. Merchants typically use this fee to offset the transaction costs imposed by payment service providers. Configuration Options General Configurations Paymob provides flexible configuration for convenience fees: Fee Type : Percentage (%), Fixed amount, and Combination of both Maximum Fee : Optional limit on the fee amount Refundable : Fee can be refundable or non-refundable Card Payments Convenience fees can be applied with the following options: Uniform Fee for all card types Different Fees for debit and credit cards BIN-Based Fees for specific card ranges Domestic vs International Cards – separate fees for local and cross-border transactions Wallet Payments Currently supports uniform fees for all wallet types • [Transaction inquiry & Reports](https://developers.paymob.com/paymob-docs/payments-and-features/core-features/transaction-inquiry-and-reports.md): Who is this for - Product managers, business owners, finance teams, and developers who need visibility into payment activity, reporting, or card token data Outcome - Understand the available ways to access transaction data and card tokens, and identify which option best fits your needs Last Updated Date - August 4, 2026 Paymob provides multiple ways to track, review, and analyze payment activity , allowing merchants to monitor transactions, investigate issues, and support financial reporting needs. Available Options Paymob supports four ways to inquire about transactions and access payment data: 1. Transaction Inquiry APIs Transaction Inquiry APIs allow you to retrieve transaction details programmatically using identifiers such as transaction ID , order ID , or merchant order ID . This option is suitable if you need to access transaction data from internal systems Paymob provides a callback mechanism that should be used as the primary method for receiving transaction details after every payment or payment-related action. Callbacks ensure timely and reliable updates to your system. Transaction Inquiry APIs should be used only for manual checks from your system or as a fallback mechanism in case a callback is missed. Check the technical implementation guide in the Transaction Inquiry APIs guide under the Developers Reference sections 2. Card Token Inquiry The Card Token Inquiry API lets you retrieve the card token saved against a specific order , using the order ID. This is useful if you need to look up a customer's tokenized card details (e.g. masked PAN, token ID) tied to a previous order. Check the technical implementation guide in the Card Token Inquiry guide under the Developers Reference sections 3. Reports via Dashboard The Paymob Dashboard enables you to generate reports for transactions and transfers . With dashboard reports, you can: Select date ranges and relevant criteria Create the report Export reports for accounting, auditing, or internal analysis This option is ideal for finance and operations teams who rely on periodic reporting . The selected date range must be within one month, starting from the chosen start date. How to create a report 1 Navigate to the Reports Tab Go to the Reports tab from the left navigation sidebar 2 Choose the Report Type Choose if you need a report for Transactions or transfers, or another report type. If Transactions is selected, you need to select the transaction status also ( All Transactions, Successful Transactions, or Declined Transactions ) 3 Press the Generate Button Once you press the Generate button, a report with the status pending will be generated. It'll take a while to be ready for download. 4 Download the Report Once you press the Download button, a CSV file will be downloaded to your device. 4. Transaction Filtering in the Dashboard You can also view and filter transactions directly from the Paymob Dashboard for day-to-day monitoring and quick lookups. This option is covered in detail in the Dashboard documentation and is intended for operational use rather than reporting or automation purposes. Choosing the Right Option Use Case Recommended Option Automated or system-based transaction checks Transaction Inquiry APIs Retrieve a saved card token for an order Card Token Inquiry Financial reporting and reconciliation Dashboard Reports Quick transaction lookup or status check Dashboard Filtering • [Affordability Widget](https://developers.paymob.com/paymob-docs/payments-and-features/core-features/affordability-widget.md): Who is this for ​- Merchants, product managers, and business owners Outcome ​- Understand what the Affordability Widget does and how it helps customers decide to buy Last Updated Date ​ - ​August 23, 2026 What is the Affordability Widget? The Affordability Widget shows customers their bank installment options right on the ​ Product Page ​ or ​ Cart Page ​, before they even reach checkout. Why it matters: ​ Customers often leave without buying because the full price looks too high, even if installment plans are available. Showing "starting from EGP 166.67/month" early, instead of only at checkout, helps price-sensitive customers commit to the purchase sooner. Widget Modes View Widget Read-only. Shows available installment plans so the customer can browse them. No selection, no "Buy Now" button. Conversion Widget Interactive. The customer picks a bank and a plan, and that choice carries through automatically to Paymob Checkout. How the Customer Experiences It View Widget Flow 1 Sees the widget Customer sees a banner like "​ 0% Interest Plans - starting from EGP 166.67/month ​" on the Product or Cart page. 2 Views plans Clicking "​ View all plans ​" opens a list of banks (e.g. NBE, CIB) with their monthly options. The customer can browse but not select a plan here. Conversion Widget Flow 1 Sees the widget Customer sees a banner like "​ 0% Interest Plans - starting from EGP 166.67/month ​" on the Product or Cart page. 2 Views plans Clicking "​ View all plans ​" opens a list of banks (e.g. NBE, CIB) with their monthly options. 3 Selects a plan Customer selects a plan and clicks "​ Buy Now ​" 4 Completes checkout Customer is redirected to Paymob Checkout with the plan already pre-filled - they just enter card details to pay. Currently available for ​ Egypt ​ only. Where to go next Your goal Start here Add this to a custom-built website Affordability Widget Through APIs Add this to a WooCommerce store WooCommerce Plugin - Affordability Widget section • [Managing Payments](https://developers.paymob.com/paymob-docs/payments-and-features/managing-payments.md): Who is this for - Product managers, business owners, and stakeholders who want a clear understanding of how to manage payments Outcome - Understand the different types of payment management actions and when to use each one Last Updated Date - June 1, 2026 Paymob gives you flexible control over how payments are handled throughout their lifecycle. This section focuses on the actions available to manage transactions once they exist , allowing you to cancel, reverse, or finalize payments based on your business needs. Available Actions The following actions help you manage different payment scenarios. Each action is covered in detail in its own dedicated page. Refund Used when you need to return funds to a customer. Void Used when you need to cancel a transaction, mostly available on the same business day. Capture Used when you need to collect funds from a previously authorized transaction. • [Refund](https://developers.paymob.com/paymob-docs/payments-and-features/managing-payments/refund.md): Who is this for - Product managers, business owners, and stakeholders who need a high-level overview of refund transactions and how they are handled through Paymob Outcome - Understand what refund transactions are, when to use them, and how to initiate refunds using the Paymob Dashboard Last Updated Date - June 1, 2026 What is a Refund? A refund is a transaction that returns all or part of a previously successful payment to the customer. Refunds are always linked to an original transaction and cannot exist on their own. Refunds can be: Full refunds – returning the entire transaction amount Partial refunds – returning only part of the original amount Common Use Cases Refunds are typically used when: An order is canceled after payment A customer returns a product A service cannot be fulfilled An incorrect amount was charged Customer support approves a compensation request Payment methods that refund is supported for: All payment methods except Kiosk Important Considerations Refunds are always tied to a successful transaction The refunded amount is returned to the same payment method Processing time may vary depending on the payment method and issuing bank Partial refunds can be issued until the full amount is refunded Refunds cannot exceed the original transaction amount Dashboard Refund Full Refund 1 Select the successful transaction you want to refund 2 Click the Refund button, which will show the refund pop-up 3 Click the Refund button in the refund pop-up Partial Refund 1 Select the successful transaction you want to refund 2 Click the Refund button, which will show the refund pop-up 3 Click the Make a partial refund checkbox 4 Fill in the amount you want to refund 5 Click the Refund button in the refund pop-up • [Void](https://developers.paymob.com/paymob-docs/payments-and-features/managing-payments/void.md): Who is this for - Product managers, business owners, and stakeholders who need a high-level overview of void transactions and how they are handled through Paymob Outcome - Understand what void transactions are, when to use them, and how to initiate voids using the Paymob Dashboard Last Updated Date - June 1, 2026 What is a Void Transaction? A void cancels a successful payment before settlement . Since the transaction is stopped early in the process, the funds are not transferred to the merchant, and the customer does not receive a separate refund. Mostly, it will be available on the same business day, before settlement occurs. Common Use Cases Voids are typically used when a customer cancels immediately after checkout Payment methods that void is supported for: Card payment method only Dashboard Void 1 Select the successful card transaction you want to void 2 Click the Void button, which will show the void pop-up 3 Click the Void button in the void pop-up • [Capture](https://developers.paymob.com/paymob-docs/payments-and-features/managing-payments/capture.md): Who is this for - Product managers, business owners, and stakeholders who need a high-level understanding of capture transactions and when to use them Outcome - Understand what capture is, how it works at a high level, and when to capture the authorized amount or a lesser amount before it is automatically voided Last Updated Date - June 1, 2026 What is Capture? Capture is the step that finalizes an authorized transaction . While authorization reserves the funds on the customer’s account, capture is what transfers the money to the merchant. Captures can be: Full capture – capturing the entire transaction amount Partial captures – capturing only part of the authorized amount. Common Use Cases Capture is typically used when: Services are confirmed after authorization Partial fulfillment is possible Payment methods that capture is supported for: Card payment method with the Auth transaction type only Important Considerations Captures must occur before the authorization expires Partial captures cannot exceed the authorized amount Dashboard Capture 1 Select the successful Auth transaction you want to capture 2 Click the capture button, which will show the capture pop-up 3 Fill in the amount you want to capture 4 Click the capture button in the capture pop-up • [Authentication Request (Generate Auth Token)](https://developers.paymob.com/paymob-docs/authentication-request-generate-auth-token-1.md): Outcome ​- Generate an Auth token to use for authentication across multiple API endpoints (e.g., Subscription APIs, create QuickLink). Last Updated Date ​ - ​June 1, 2026 You'll need to pass your ​ API Key ​in the body of the request. To know how to get your API key, please check the Getting Integration Credentials page. • [Overview](https://developers.paymob.com/paymob-docs/intention-apis/overview.md): Outcome - Understand what Paymob's Payment Intention is and its APIs Last Updated Date - June 28, 2026 Definition Intention : The initial component of any payment that contains key details such as the payment amount, customer information, currency, and the available payment methods. Download the Postman Collection from this link . When will it be used? It will be used each time you need to create a payment. It will be used with: Normal redirection integration on a website Embedded experience (Pixel) on a website Integrating with our SDKs Create subscription Auth/Cap payment model Pay with saved cards Available actions Create Intention You can create an intention by using the Create Intention API , passing the amount that should be paid, customer info, and other information. Update Intention You can update an already existing intention by using the Update Intention API , passing the amount that should be paid, customer info, and other information. - If you're integrating through SDK , you need to create Apple Pay certificates . - If you're integrating through Pixel (Embedded experience), you need to verify your domain , and you need to create Apple Pay certificates . • [Create Intention](https://developers.paymob.com/paymob-docs/intention-apis/create-intention.md): Outcome - Create an Intention that will be used to complete a payment, either via APIs or through one of our UI options. Last Updated Date - June 1, 2026 Authorization Add your “ secret key “ in the authorization header preceded by the word " Token ". To know how to get your secret key, please check the Getting Integration Credentials page. Key values in the response You'll receive a response, which is an object that represents an intention and includes all the intention details. Important parameters: Order ID : Paymob order ID, which will be received in the transaction callback and can be used to correlate the transaction to the order on your system. Intention ID : Paymob intention ID can be used to do the same as the Order ID. Client Secret : A unique, intention-specific token used to redirect the customer to Paymob’s Unified Checkout or to render Paymob’s Pixel component. Common Errors Using a wrong or not well-configured integration ID Status Code : 404 Not Found JSON { "detail": "Integration ID/Name does not exist in our system . You can find the list of Integration ID’/Names from Merchant Dashboard under Developers → Payment Integrations Tab" } Solution : Make sure to use an integration ID that has the following criteria: 1 - Has the same status as the used secret key (Test/Live) 2 - Valid ID related to your account and for online integration. To know how to get your integration ID, please check the Getting Integration Credentials page. 3 - Well-configured integration ID. You can contact support@paymob.com to help with checking the integration ID configurations. Missing item name or amount Status Code : 400 Bad Request JSON { "items": { "name": [ "This field is required." ] } } JSON { "items": { "amount": [ "This field is required." ] } } Solution : Make sure to include the name and amount fields in each object within the items array. Missing phone number in the billing data object Status Code : 400 Bad Request JSON { "billing_data": { "phone_number": [ "This field is required." ] } } Solution : Make sure to enter a phone number. • [Update Intention](https://developers.paymob.com/paymob-docs/intention-apis/update-intention.md): Outcome - Update the ( amount, payment_methods, items , billing_data, special_reference, notification_url, and redirection_url ) of an existing intention. Last Updated Date - June 22, 2026 Authorization Add your “ secret key “ in the authorization header preceded by the word " Token ". To know how to get your secret key, please check the Getting Integration Credentials page. Important Notes: The endpoint used in the notification URL will receive the transaction callback (transaction details) and the card token (for pay with saved card features) Common errors Missing Accept Order ID parameter Status Code : 400 Bad Request JSON { accept_order_id": [ "This field is required." ] } { accept_order_id": [ "This field is required." ] } Solution: Make sure to pass the order ID related to the client secret you passed as a path parameter • [Overview](https://developers.paymob.com/paymob-docs/checkout-experiences/overview.md): Outcome - Understand the checkout experiences supported by Paymob, and know when to use Unified Checkout vs. Pixel . Last Updated Date - June 1, 2026 Paymob offers two flexible checkout experiences to help you accept payments online. Each experience supports different merchant needs and integration preferences, while both rely on Paymob’s Intention API as the initial step. Checkout Options Unified Checkout Unified Checkout is Paymob’s redirect-based payment experience . When a customer is ready to pay, you redirect them to Paymob’s hosted checkout page, where they enter their payment details and complete the transaction. The flow generally involves creating a payment intention , then directing the customer’s browser to the hosted checkout using the generated client secret You can customize the Unified Checkout appearance through the Checkout Customization section in the dashboard . Pixel Pixel is Paymob’s JavaScript SDK that enables an embedded checkout experience directly on your site or application. Instead of redirecting the customer to a separate page, Pixel allows you to integrate payment elements inside your own UI. Pixel is ideal for: Seamless, branded checkout experiences Embedded Card, Apple Pay, and Google Pay Businesses that want checkout UI inside their website without redirection Pixel accepts configuration (such as payment methods and an HTML container ID) and uses the client secret from the previously created intention to render the payment UI in place. How They Work Both checkout experiences share the same initial requirement : Create an intention Use the intention API to specify the payment amount, currency, and available methods. This returns a client secret that is unique to that payment attempt. Render checkout Unified Checkout: Redirect the customer to a hosted payment page using the client secret. Pixel: Embed the payment UI inside your site using the SDK and client secret. The client secret serves as the bridge between your backend (where you create the intention) and the checkout UI (hosted or embedded) that the customer interacts with. Choosing Between Unified Checkout and Pixel Feature Unified Checkout Pixel Checkout location Redirect to hosted page Embedded on your site Branding control Standard Paymob look, with simple customization Matches your UI Setup complexity Simple Requires SDK integration Best for Quick integration Custom embedded experience • [Unified Checkout (Redirection)](https://developers.paymob.com/paymob-docs/checkout-experiences/unified-checkout-redirection.md): Outcome - Redirect the customers to Paymob's Unified Checkout to process and complete the payment, and customize the Unified Checkout. Last Updated Date - July 22, 2026 Unified Checkout URLs Region Endpoint Egypt https://eg.checkout.paymob.com/?publicKey={your_public_key}&clientSecret={your_client_secret} UAE https://uae.checkout.paymob.com/?publicKey={your_public_key}&clientSecret={your_client_secret} Oman https://om.checkout.paymob.com/?publicKey={your_public_key}&clientSecret={your_client_secret} KSA https://ksa.checkout.paymob.com/?publicKey={your_public_key}&clientSecret={your_client_secret} After creating a payment intention, redirect the customer's browser to the URL matching their region. Replace {your_public_key} and {your_client_secret} with your values. Query Parameters Client Secret You can get a client secret by calling the Create Intention API request . Public Key To know how to get your public key, please check the Getting Integration Credentials page. Test Credentials To test the payment cycle before going live, use test credentials for Card and Wallet in place of your live public key and client secret in the URLs above. Please check the Test Credentials page. • [Pixel (Embedded)](https://developers.paymob.com/paymob-docs/checkout-experiences/pixel-embedded.md): Outcome - Integrate Paymob's pre-built UI (Pixel) in the merchant's checkout. Last Updated Date - June 1, 2026 Pre-Requisites Integrate the Intention API as described in the documentation for the Create Payment Intention API. Include the following script and stylesheets in your HTML file HTML <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/styles.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.css"> <script src="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.js" type="module"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/styles.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.css"> <script src="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.js" type="module"></script> Usage Create a new Pixel instance JavaScript new Pixel({ publicKey: 'egy_pk_live_XXXX', clientSecret: 'egy_csk_live_XXXX', paymentMethods: [ 'card','google-pay','apple-pay'], elementId: 'paymob-elements', disablePay: false, showSaveCard :true, forceSaveCard : true, beforePaymentComplete: async (paymentMethod) => { console.log('Before payment start'); return true }, afterPaymentComplete: async (response) => { console.log('After Bannas payment'); }, onPaymentCancel: () => { console.log('Payment has been canceled'); }, cardValidationChanged: (isValid) => { console.log("Is valid ? ", isValid) }, customStyle: { Font_Family: 'Gotham', Font_Size_Label: '16', Font_Size_Input_Fields: '16', Font_Size_Payment_Button: '14', Font_Weight_Label: 400, Font_Weight_Input_Fields: 200, Font_Weight_Payment_Button: 600, Color_Container: '#FFF', Color_Border_Input_Fields: '#D0D5DD', Color_Border_Payment_Button: '#A1B8FF', Radius_Border: '8', Color_Disabled: '#A1B8FF', Color_Error: '#CC1142', Color_Primary: '#144DFF', Color_Input_Fields: '#FFF', Text_Color_For_Label: '#000', Text_Color_For_Payment_Button: '#FFF', Text_Color_For_Input_Fields: '#000', Color_For_Text_Placeholder: '#667085', Width_of_Container: '100%', Vertical_Padding: '40', Vertical_Spacing_between_components: '18', Container_Padding: '0' }, }); </script> Note : If Google Pay is passed as a Payment Method, you must include the Google Pay SDK <script src="https://pay.google.com/gp/p/js/pay.js"></script> Google Pay isn't supported in Egypt yet; it's coming soon. Stay tuned. Properties The full list of properties is as follows: Property name Type Definition publicKey String To know how to get your public key, please check the Getting Integration Credentials page. clientSecret String Once you fire the Intention API, you will receive “ client_secret ” in the API Response, which will be used in the Pixel SDK. Client Secret is unique for each Order, and it expires in an hour. paymentMethods Array of String Pass “card” for Card Payments, "google-pay" for Google Pay, and “apple-pay” for Apple Pay. elementId String ID of the HTML element where the checkout pixel will be embedded. disablePay Boolean Pass true. If you don’t want to use Paymob’s Pay Button for Card Payment, in this case, you will dispatchEvent with the name (payFromOutside) to fire the pay. showSaveCard Boolean If this option is set to TRUE, users will have the option to save their card details for future payment. forceSaveCard Boolean If this option is set to true, the user's card details will be saved automatically without requiring their consent afterPaymentComplete Function This Functionality will be processed after payment is processed by Paymob. Check the full example below. customStyle Object You can pass custom styles; for more details, check the full example below. Events We have one event that will be used if you want to trigger the payment from a custom Pay button, not Pixel's Pay button: Title Description Event Definition payFromOutside In case you need to use you pay button instead of the SDK pay button. HTML <button id="payFromOutsideButton">Pay From Outside Button</button> <button id="payFromOutsideButton">Pay From Outside Button</button> JavaScript const button = document.getElementById('payFromOutsideButton'); button?.addEventListener ('click', function () { // Calling pay request const event = new Event('payFromOutside'); window.dispatchEvent(event); }); Functions The full list of functions is as follows: Function Definition What should you do with? cardValidationChanged This Functionality will be processed whenever the card validation status changes. Writes the function logic beforePaymentComplete Merchants can implement their own custom logic or functions before the payment is processed by Paymob. Check the full example below. Writes the function logic afterPaymentComplete This Functionality will be processed after payment is processed by Paymob. Check the full example below. Writes the function logic onPaymentCancel This function applies exclusively to Apple Pay. Merchants can implement their own custom logic to handle scenarios where a user cancels the Apple Pay payment by closing the Apple Pay SDK. Writes the function logic updateIntentionData Update the intention data within the SDK if any changes occur to the intention. For more details, refer to the Intention Update API documentation . Calls the function Full sample HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Pixel Experience</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/styles.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.css"> <style> .content { display: flex; flex-direction: column; gap: 1rem; justify-content: center; align-items: center; margin-top: 2rem; } #paymob-elements { width: 50%; } #payFromOutsideButton { padding: 0.5rem; background-color: blue; color: white; border-radius: 0.2rem; } </style> </head> <body> <div class="header" style="padding: 1rem; background-color: rgb(233, 255, 207);"> Hello in my website </div> <div class="wrapper"> <div class="content"> <div id="paymob-elements"></div> <button id="payFromOutsideButton">Pay From Outside Button</button> </div> </div> <div class="footer"></div> <script src="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.js" type="module"></script> <script> // Configuration const BASE_URL= { "EGY": "https://accept.paymob.com/", "OMN": "https://oman.paymob.com/", "KSA": "https://ksa.paymob.com/", "UAE": "https://uae.paymob.com/" } const CONFIG = { PUBLIC_KEY: 'egy_pk_test_yVnwxxxxxxxxxxxxxxxxxxxxxxx', SECRET_KEY: 'egy_sk_test_3f1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', CLIENT_SECRET: 'egy_csk_test_cad1xxxxxxxxxxxxxxxxxxxxx', INTENTION_API_URL: BASE_URL.EGY + 'v1/intention/' }; console.log(CONFIG.INTENTION_API_URL) // Merchant button logic const button = document.getElementById('payFromOutsideButton'); button?.addEventListener('click', async function() { console.log('Updating payment intention...'); const myHeaders = new Headers(); myHeaders.append("Authorization", `Token ${CONFIG.SECRET_KEY}`); myHeaders.append("Content-Type", "application/json"); const raw = JSON.stringify({ "accept_order_id": 446579232, "amount": 3000, "items": [ { "name": "Item name", "amount": 2000, "description": "Item description", "quantity": 1 }, { "name": "Item name", "amount": 1000, "description": "Item description", "quantity": 1 } ], "billing_data": { "apartment": "dumy", "first_name": "test", "last_name": "update", "street": "dumy", "building": "dumy", "phone_number": "01010101010", "city": "dumy", "country": "dumy", "email": "test@email.com", "floor": "dumy", "state": "dumy" }, "extras": { "ee": 22 }, "notification_url": "https://webhook.site/e4081416-3343-4c06-878b-sds55dfd37", "redirection_url": "https://google.com/" }); const requestOptions = { method: "PUT", headers: myHeaders, body: raw, redirect: "follow" }; try { console.log(CONFIG.CLIENT_SECRET); console.log(CONFIG.INTENTION_API_URL+CONFIG.CLIENT_SECRET) const response = await fetch(`${CONFIG.INTENTION_API_URL}${CONFIG.CLIENT_SECRET}`, requestOptions); console.log(response); } catch (error) { console.error('Error updating intention:', error); } console.log('Updating Pixel'); const update_pixel_response = await Pixel.updateIntentionData(); console.log('Pixel Updated', update_pixel_response); // Calling pay request const event = new Event('payFromOutside'); window.dispatchEvent(event); }); onload = (event) => { button.style = "display: none;" let pixel_instance = new Pixel({ publicKey: CONFIG.PUBLIC_KEY, clientSecret: CONFIG.CLIENT_SECRET, paymentMethods: ['card', 'google-pay', 'apple-pay'], elementId: 'paymob-elements', disablePay: true, showSaveCard: false, forceSaveCard: true, beforePaymentComplete: async () => { console.log('Before payment start'); console.log('Waiting for 5 seconds...'); await new Promise(res => setTimeout(() => res(''), 5000)); console.log('Before payment end'); }, afterPaymentComplete: async (response) => { console.log('After payment logic'); console.log(response); await new Promise(res => setTimeout(() => res(''), 5000)); }, onPaymentCancel: () => { console.log('Payment has been canceled'); }, cardValidationChanged: (isValid) => { if (isValid === true) { button.style = "display: block;" console.log("valid"); } else { button.style = "display: none;" console.log("not valid"); } }, customStyle: { Font_Family: 'Gotham', Font_Size_Label: '16', Font_Size_Input_Fields: '16', Font_Size_Payment_Button: '14', Font_Weight_Label: 400, Font_Weight_Input_Fields: 200, Font_Weight_Payment_Button: 600, Color_Container: '#FFF', Color_Border_Input_Fields: '#D0D5DD', Color_Border_Payment_Button: '#A1B8FF', Radius_Border: '8', Color_Disabled: '#A1B8FF', Color_Error: '#CC1142', Color_Primary: '#144DFF', Color_Input_Fields: '#FFF', Text_Color_For_Label: '#000', Text_Color_For_Payment_Button: '#FFF', Text_Color_For_Input_Fields: '#000', Color_For_Text_Placeholder: '#667085', Width_of_Container: '100%', Vertical_Padding: '40', Vertical_Spacing_between_components: '18', Container_Padding: '0' } }); }; </script> </body> </html> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Pixel Experience</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/styles.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.css"> <style> .content { display: flex; flex-direction: column; gap: 1rem; justify-content: center; align-items: center; margin-top: 2rem; } #paymob-elements { width: 50%; } #payFromOutsideButton { padding: 0.5rem; background-color: blue; color: white; border-radius: 0.2rem; } </style> </head> <body> <div class="header" style="padding: 1rem; background-color: rgb(233, 255, 207);"> Hello in my website </div> <div class="wrapper"> <div class="content"> <div id="paymob-elements"></div> <button id="payFromOutsideButton">Pay From Outside Button</button> </div> </div> <div class="footer"></div> <script src="https://cdn.jsdelivr.net/npm/paymob-pixel@latest/main.js" type="module"></script> <script> // Configuration const BASE_URL= { "EGY": "https://accept.paymob.com/", "OMN": "https://oman.paymob.com/", "KSA": "https://ksa.paymob.com/", "UAE": "https://uae.paymob.com/" } const CONFIG = { PUBLIC_KEY: 'egy_pk_test_yVnwxxxxxxxxxxxxxxxxxxxxxxx', SECRET_KEY: 'egy_sk_test_3f1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', CLIENT_SECRET: 'egy_csk_test_cad1xxxxxxxxxxxxxxxxxxxxx', INTENTION_API_URL: BASE_URL.EGY + 'v1/intention/' }; console.log(CONFIG.INTENTION_API_URL) // Merchant button logic const button = document.getElementById('payFromOutsideButton'); button?.addEventListener('click', async function() { console.log('Updating payment intention...'); const myHeaders = new Headers(); myHeaders.append("Authorization", `Token ${CONFIG.SECRET_KEY}`); myHeaders.append("Content-Type", "application/json"); const raw = JSON.stringify({ "accept_order_id": 446579232, "amount": 3000, "items": [ { "name": "Item name", "amount": 2000, "description": "Item description", "quantity": 1 }, { "name": "Item name", "amount": 1000, "description": "Item description", "quantity": 1 } ], "billing_data": { "apartment": "dumy", "first_name": "test", "last_name": "update", "street": "dumy", "building": "dumy", "phone_number": "01010101010", "city": "dumy", "country": "dumy", "email": "test@email.com", "floor": "dumy", "state": "dumy" }, "extras": { "ee": 22 }, "notification_url": "https://webhook.site/e4081416-3343-4c06-878b-sds55dfd37", "redirection_url": "https://google.com/" }); const requestOptions = { method: "PUT", headers: myHeaders, body: raw, redirect: "follow" }; try { console.log(CONFIG.CLIENT_SECRET); console.log(CONFIG.INTENTION_API_URL+CONFIG.CLIENT_SECRET) const response = await fetch(`${CONFIG.INTENTION_API_URL}${CONFIG.CLIENT_SECRET}`, requestOptions); console.log(response); } catch (error) { console.error('Error updating intention:', error); } console.log('Updating Pixel'); const update_pixel_response = await Pixel.updateIntentionData(); console.log('Pixel Updated', update_pixel_response); // Calling pay request const event = new Event('payFromOutside'); window.dispatchEvent(event); }); onload = (event) => { button.style = "display: none;" let pixel_instance = new Pixel({ publicKey: CONFIG.PUBLIC_KEY, clientSecret: CONFIG.CLIENT_SECRET, paymentMethods: ['card', 'google-pay', 'apple-pay'], elementId: 'paymob-elements', disablePay: true, showSaveCard: false, forceSaveCard: true, beforePaymentComplete: async () => { console.log('Before payment start'); console.log('Waiting for 5 seconds...'); await new Promise(res => setTimeout(() => res(''), 5000)); console.log('Before payment end'); }, afterPaymentComplete: async (response) => { console.log('After payment logic'); console.log(response); await new Promise(res => setTimeout(() => res(''), 5000)); }, onPaymentCancel: () => { console.log('Payment has been canceled'); }, cardValidationChanged: (isValid) => { if (isValid === true) { button.style = "display: block;" console.log("valid"); } else { button.style = "display: none;" console.log("not valid"); } }, customStyle: { Font_Family: 'Gotham', Font_Size_Label: '16', Font_Size_Input_Fields: '16', Font_Size_Payment_Button: '14', Font_Weight_Label: 400, Font_Weight_Input_Fields: 200, Font_Weight_Payment_Button: 600, Color_Container: '#FFF', Color_Border_Input_Fields: '#D0D5DD', Color_Border_Payment_Button: '#A1B8FF', Radius_Border: '8', Color_Disabled: '#A1B8FF', Color_Error: '#CC1142', Color_Primary: '#144DFF', Color_Input_Fields: '#FFF', Text_Color_For_Label: '#000', Text_Color_For_Payment_Button: '#FFF', Text_Color_For_Input_Fields: '#000', Color_For_Text_Placeholder: '#667085', Width_of_Container: '100%', Vertical_Padding: '40', Vertical_Spacing_between_components: '18', Container_Padding: '0' } }); }; </script> </body> </html> Never put the Secret Key in frontend code. Backend creates/updates intentions; frontend only receives public key and client secret. The above sample is for testing only. Test Credentials To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Affordability Widget](https://developers.paymob.com/paymob-docs/checkout-experiences/affordability-widget.md): Outcome ​ - Add the Affordability Widget to your Product or Cart page and connect a selected plan to checkout. Last Updated Date ​ - August 23, 2026 New to the Affordability Widget? Check the ​ Overview page ​ first to understand what it does and the two available modes. Step 1: Add the Script Add the widget script to your Product or Cart page: HTML <script src="https://cdn.jsdelivr.net/npm/paymob-widget@latest/main.js" type="module"></script> <script src="https://cdn.jsdelivr.net/npm/paymob-widget@latest/main.js" type="module"></script> Step 2: Add a Container Add an empty container element in the DOM where the widget should render: HTML <div id="paymob-widget"></div> <div id="paymob-widget"></div> Step 3: Initialize the Widget JavaScript new PaymobWidget({ publicKey: 'egy_pk_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', elementId: 'paymob-widget', amount: 100000, // order total in cents — this is 1,000 EGP currency: 'EGP', integrationId: 5661185, theme: 'primary' }); If installment plans are available for the given ​ integrationId ​ and ​ amount ​, the widget automatically renders them. Configuration Reference Parameter Type Required Description publicKey string Yes Merchant's Paymob public key. elementId string Yes The id of the HTML container the widget mounts into. amount number Yes Order total in cents (must be a positive number). currency string No Currency. Default: EGP. integrationId number | number[] No If passed, installment plans load for that integration. If omitted, plans are fetched from the most recently created one. theme "primary" | "light" | "dark" No Visual theme. Default: primary. customerCanSelect boolean No Enables plan selection. Default: false (read-only View Widget). onSubmit function No Callback fired when the customer selects a plan and clicks "Buy Now." If omitted, the "Buy Now" button is hidden. View-Only Setup Set ​ customerCanSelect: false ​ and omit ​ onSubmit ​ entirely. Plans display in read-only mode — customers can see them but can't select one, and no "Buy Now" button appears. JavaScript new PaymobWidget({ publicKey: 'egy_pk_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', elementId: 'paymob-widget', amount: 100000, // 1,000 EGP currency: 'EGP', integrationId: 5661185, theme: 'primary', customerCanSelect: false, // read-only mode // onSubmit intentionally omitted — no Buy now button }); Conversion Setup Set ​ customerCanSelect: true ​ and provide an ​ onSubmit ​ callback. This fires in the customer's browser when they pick a plan and click "Buy Now" — it does ​ not ​ call Paymob's API. It just hands your code the selected plan. JavaScript new PaymobWidget({ publicKey: 'egy_pk_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', elementId: 'paymob-widget', amount: 100000, currency: 'EGP', integrationId: 5661185, theme: 'primary', customerCanSelect: true, onSubmit: (plan) => { // plan = { id: 123, tenure: 12, amount: 25000 } console.log('Customer selected plan', plan); // → continue your own purchase/checkout flow here }, }); onSubmit Payload Structure Field Type Description id string | number Installment plan ID. tenure number Number of months. amount number Monthly installment amount, in cents. Completing the Purchase Once a plan is selected via ​ onSubmit ​, pass its ​ id ​ into your Intention creation request using the ​ pre_selected_plan ​ field. Other parameters are explained in the Create Intention API documentation . JSON "pre_selected_plan": 123 This carries the customer's selected installment plan into Paymob Checkout, so they only need to enter card details to complete payment. Full Sample HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Affordability Widget Example</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <div class="product-page"> <h2>Product Name — EGP 600</h2> <div id="paymob-widget"></div> </div> <script src="https://cdn.jsdelivr.net/npm/paymob-widget@latest/main.js" type="module"></script> <script> // Configuration const CONFIG = { PUBLIC_KEY: 'egy_pk_test_yVnwxxxxxxxxxxxxxxxxxxxxxxx', SECRET_KEY: 'egy_sk_test_3f1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', INTEGRATION_ID: 5661185, // Bank Installment Integration ID INTENTION_API_URL: 'https://accept.paymob.com/v1/intention/', CHECKOUT_URL: 'https://eg.checkout.paymob.com/' }; onload = (event) => { new PaymobWidget({ publicKey: CONFIG.PUBLIC_KEY, elementId: 'paymob-widget', amount: 60000, // 600 EGP in cents currency: 'EGP', integrationId: CONFIG.INTEGRATION_ID, theme: 'primary', customerCanSelect: true, onSubmit: async (plan) => { // plan = { id: 123, tenure: 3, amount: 20441 } console.log('Customer selected plan', plan); const myHeaders = new Headers(); myHeaders.append("Authorization", `Token ${CONFIG.SECRET_KEY}`); myHeaders.append("Content-Type", "application/json"); const raw = JSON.stringify({ "amount": 60000, "currency": "EGP", "payment_methods": [CONFIG.INTEGRATION_ID], "pre_selected_plan": plan.id, "items": [ { "name": "Product name", "amount": 60000, "description": "Product description", "quantity": 1 } ], "billing_data": { "apartment": "dumy", "first_name": "test", "last_name": "customer", "street": "dumy", "building": "dumy", "phone_number": "01010101010", "city": "Cairo", "country": "EG", "email": "test@email.com", "floor": "dumy", "state": "dumy" }, "notification_url": "https://webhook.site/your-webhook-id", "redirection_url": "https://your-store.com/order-confirmation" }); const requestOptions = { method: "POST", headers: myHeaders, body: raw, redirect: "follow" }; try { const response = await fetch(CONFIG.INTENTION_API_URL, requestOptions); const intention = await response.json(); // Redirect the customer to Paymob's Unified Checkout // with the pre-selected plan already applied window.location.href = `${CONFIG.CHECKOUT_URL}?publicKey=${CONFIG.PUBLIC_KEY}&clientSecret=${intention.client_secret}`; } catch (error) { console.error('Error creating intention:', error); } }, }); }; </script> </body> </html> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Affordability Widget Example</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <div class="product-page"> <h2>Product Name — EGP 600</h2> <div id="paymob-widget"></div> </div> <script src="https://cdn.jsdelivr.net/npm/paymob-widget@latest/main.js" type="module"></script> <script> // Configuration const CONFIG = { PUBLIC_KEY: 'egy_pk_test_yVnwxxxxxxxxxxxxxxxxxxxxxxx', SECRET_KEY: 'egy_sk_test_3f1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', INTEGRATION_ID: 5661185, // Bank Installment Integration ID INTENTION_API_URL: 'https://accept.paymob.com/v1/intention/', CHECKOUT_URL: 'https://eg.checkout.paymob.com/' }; onload = (event) => { new PaymobWidget({ publicKey: CONFIG.PUBLIC_KEY, elementId: 'paymob-widget', amount: 60000, // 600 EGP in cents currency: 'EGP', integrationId: CONFIG.INTEGRATION_ID, theme: 'primary', customerCanSelect: true, onSubmit: async (plan) => { // plan = { id: 123, tenure: 3, amount: 20441 } console.log('Customer selected plan', plan); const myHeaders = new Headers(); myHeaders.append("Authorization", `Token ${CONFIG.SECRET_KEY}`); myHeaders.append("Content-Type", "application/json"); const raw = JSON.stringify({ "amount": 60000, "currency": "EGP", "payment_methods": [CONFIG.INTEGRATION_ID], "pre_selected_plan": plan.id, "items": [ { "name": "Product name", "amount": 60000, "description": "Product description", "quantity": 1 } ], "billing_data": { "apartment": "dumy", "first_name": "test", "last_name": "customer", "street": "dumy", "building": "dumy", "phone_number": "01010101010", "city": "Cairo", "country": "EG", "email": "test@email.com", "floor": "dumy", "state": "dumy" }, "notification_url": "https://webhook.site/your-webhook-id", "redirection_url": "https://your-store.com/order-confirmation" }); const requestOptions = { method: "POST", headers: myHeaders, body: raw, redirect: "follow" }; try { const response = await fetch(CONFIG.INTENTION_API_URL, requestOptions); const intention = await response.json(); // Redirect the customer to Paymob's Unified Checkout // with the pre-selected plan already applied window.location.href = `${CONFIG.CHECKOUT_URL}?publicKey=${CONFIG.PUBLIC_KEY}&clientSecret=${intention.client_secret}`; } catch (error) { console.error('Error creating intention:', error); } }, }); }; </script> </body> </html> Never put the Secret Key in frontend code. In production, your backend should create the Intention using the Secret Key — the frontend should only receive back the Client Secret needed to launch checkout. The above sample is for testing only. • [Overview](https://developers.paymob.com/paymob-docs/mobile-sdks/overview.md): Outcome - Know the available Mobile SDKs and how it works. Last Updated Date - June 16, 2026 Paymob’s Mobile SDKs enable native payment acceptance within mobile applications. They support multiple mobile platforms and frameworks, allowing merchants to integrate Paymob’s checkout experience directly into their apps using a consistent payment flow. Native Android and IOS SDKs now support the embedded checkout experience. Supported Mobile SDKs IOS SDK Android SDK Flutter SDK React Native SDK How does it work? Mobile SDKs use the same backend flow as other Paymob checkout experiences. Before starting a payment in the mobile app, your system must create a payment intention and obtain a client secret, which will be used to initialize the SDK. 1 Create Intention You need to call the Intention Creation API to get a client secret 2 Initialize the SDK Initialize the Mobile SDK by passing: The client secret obtained from the previous step Your public key , available in the Paymob dashboard Optional configuration parameters that control how the checkout UI is rendered 3 Receive the payment results After the payment is completed, the SDK triggers predefined callback functions based on the payment status. You are required to implement the logic for these callbacks to define how your application should behave in each scenario. • [IOS SDK](https://developers.paymob.com/paymob-docs/mobile-sdks/ios-sdk.md): Outcome - Integrate Paymob's native iOS SDK Last Updated Date - July 22, 2026 Supported payment methods Cards Wallets Apple Pay Google Pay Bank Installments vaLU Souhoola Forsa Premium6 Aman Installments Installation You can install the iOS SDK in one of two ways . Choose only one method. Option 1: Cocoa installation PaymobSDK is available through CocoaPods . Add Pod Dependency Simply add the following line to your Podfile: Swift pod 'Paymob' Install Pods Run pod install command in the terminal Open Workspace Open your project using the .xcworkspace file Change the embedding option to "Embed & Sign" In the general settings of your project, under libraries and frameworks, change the library from " Do not embed " to " Embed and Sign " Manual Installation Download the SDK Download the SDK from the provided link and extract it on your local machine. Add the SDK files to your project Copy the extracted SDK files and place them inside your project’s folder structure. Add the SDK to Xcode Open your project in Xcode, then drag and drop the PaymobSDK.xcframework into General → Frameworks, Libraries, and Embedded Content . Embed and sign the SDK In Frameworks, Libraries, and Embedded Content , change the SDK option from Do Not Embed to Embed & Sign . Usage Normal Checkout Flow Import the framework Swift import PaymobSDK Add the delegate to the class, and add the protocol stubs Swift class ViewController: UIViewController, PaymobSDKDelegate { It should look like this. Swift extension ViewController: PaymobSDKDelegate{ func transactionRejected(message : String) { print("Transaction Rejected \(message)") } func transactionAccepted(transactionDetails: [String : Any]) { print("Transaction Successfull: \(transactionDetails)") } func transactionPending() { print("Transaction Pending") } func transactionCancelled() { print("Transaction Cancled") //If the customer manually canceled the payment, we suggest using the Transaction Inquiry API in this case, as the customer could cancel it at different stages. } } Canceled status available starting from version 1.5.3 You should configure the response callback URL for the integration ID in use to the appropriate URL listed below, based on the region. This is required in order to run the callback functions ( transactionAccepted , transactionRejected , and transactionPending ). Egypt : https://accept.paymob.com/api/acceptance/post_pay Oman : https://oman.paymob.com/api/acceptance/post_pay Saudi Arabia: https://ksa.paymob.com/api/acceptance/post_pay United Arab Emirates: https://uae.paymob.com/api/acceptance/post_pay Create a constant Swift let paymob = PaymobSDK() Pass self to delegate Swift paymob.delegate = self Create the variables Swift // Replace this string with your payment key let client_secret = "" //Put Client Secret Here let public_key = "" // Put Public Key Here Client Secret A unique, intention-specific token used to redirect the customer to Paymob’s Unified Checkout or to render Paymob’s Pixel component. You can get a client secret by calling the Create Intention API request . Public Key To know how to get your public key, please check the Getting Integration Credentials page. If you’re using saved cards, pass the saved token as a string in the card_tokens array when calling the intention creation request For generating a save card token to be used within a Moto transaction later, please refer to this link for generating a save card token. Customize the UI of the SDK You can customize the UI of the SDK, such as Swift // the extra UI Customization parameters are //sets the title to be the image you want appIcon //sets the title to be the name you want appName //changes the color of the buttons throughout the SDK, the default is black buttonBackgroundColor //changes the color of the buttons Texts throughout the SDK, the default is white buttonTextColor //set save card checkbox initial value saveCardDefault //set whether or not should show save card checkbox showSaveCard //used like this let paymob = PaymobSDK() paymob.paymobSDKCustomization.appIcon = UIImage() paymob.paymobSDKCustomization.appName = "" paymob.paymobSDKCustomization.buttonBackgroundColor = UIColor.black paymob.paymobSDKCustomization.buttonTextColor = UIColor.white paymob.paymobSDKCustomization.showSaveCard = true paymob.paymobSDKCustomization.saveCardDefault = false try paymob.presentPayVC(VC: self, PublicKey: public_key, ClientSecret: client_secret) paymob.paymobSDKCustomization.saveCardDefault = false Run the SDK Swift do{ try paymob.presentPayVC(VC: self, PublicKey: public_key, ClientSecret: client_secret) } catch let error { } Embedded Checkout Flow Add Container View to your view controller 1 Drag a UIView into your view controller in the storyboard. 2 Set Custom Class Select your view and set Custom Class ⇒ PaymobCheckoutView . This marks the view as the default checkout UI for the SDK. 3 Set Height Constraint Select your container view in the storyboard. Add a Height constraint . Change the Relation to Greater Than or Equal zero . This allows the SDK to dynamically resize the view. 4 Create an outlet for the checkout container view. Swift @IBOutlet weak var paymobCheckoutView: PaymobCheckoutView! 5 Set Delegate Swift override func viewDidLoad() { super.viewDidLoad() paymobCheckoutView.delegate = self } Configure the Embedded Checkout View After adding the SDK view and implementing the Callbacks, the final step is to configure the SDK view Swift let checkoutUICustomization = "" override func viewDidLoad() { super.viewDidLoad() paymobCheckoutView.configure( uiCustomization: checkoutUICustomization, showAddNewCard: true, payFromOutside: false, showSaveCard: true, saveCardDefault: false ) } Set Payment Keys Whenever you make any update to the intention via API , you will need to update the intention data inside the SDK Swift paymobCheckoutView.setPaymentKeys( publicKey: "YOUR_Public_Key", clientSecret: "Your_Client_Secret" ) Client Secret A unique, intention-specific token used to redirect the customer to Paymob’s Unified Checkout or to render Paymob’s Pixel component. You can get a client secret by calling the Create Intention API request . Public Key To know how to get your public key, please check the Getting Integration Credentials page. UI Customization (Optional) Swift let checkoutUICustomization = """ { "Font_Family": "System", "Font_Size_Label": "16", "Font_Size_Input_Fields": "11", "Font_Size_Payment_Button": "16", "Font_Weight_Label": "500", "Font_Weight_Input_Fields": "500", "Font_Weight_Payment_Button": "900", "Color_Border_Input_Fields": "#DBE1EA", "Color_Disabled": "#00000080", "Color_Error": "#FF0000", "Color_Primary": "#144DFF", "Color_Input_Fields": "#FFFFFF", "Text_Color_For_Label": "#000000", "Text_Color_For_Payment_Button": "#FFFFFF", "Text_Color_For_Input_Fields": "#000000", "Color_For_Text_Placeholder": "#C7C7CD", "Payment_Button_Title": "Pay Now", "Radius_Border": "6", "Container_Padding": "16" } """ override func viewDidLoad() { super.viewDidLoad() // Configure the containerView with the UI customization and other parameters paymobCheckoutView.delegate = self paymobCheckoutView.configure( uiCustomization: checkoutUICustomization, ) } Always call configure(uiCustomization:) inside viewDidLoad. Use the same JSON structure and value types. Missing keys will fall back to default values. Trigger Payment from a Custom Button (Optional) You can use the payFromOutside function only if you set the payFromOutside parameter to TRUE while configuring the SDK view. 1 Pass payFromOutside property to TRUE Swift let checkoutUICustomization = "" override func viewDidLoad() { super.viewDidLoad() paymobCheckoutView.configure( uiCustomization: checkoutUICustomization, showAddNewCard: true, payFromOutside: true, showSaveCard: true, saveCardDefault: false ) } 2 Call the payFromOutside function whenever you want to start the payment Swift @IBAction func payButtonTapped(_ sender: Any) { paymobCheckoutView.payFromOutside() } Test Credentials To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Android SDK](https://developers.paymob.com/paymob-docs/mobile-sdks/android-sdk.md): Outcome - Integrate Paymob's native Android SDK Last Updated Date - June 1, 2026 Supported payment methods Cards Wallets Google Pay Bank Installments vaLU Souhoola Forsa Premium6 Aman Installments Manual installation Download SDK files (.jar/.aar) Download the SDK from this link and unzip the “Sdk package” folder. Locate the SDK files in app/libs/ folder Copy the SDK folder into the libs directory of your Android project. Add the repository to settings.gradle.kts Add required local Repositories as follows: Kotlin repositories { maven { url = rootProject.projectDir.toURI().resolve("libs") } maven { url = uri("https://jitpack.io") } } Add a dependency in app/build.gradle.kts Kotlin implementation("com.paymob.sdk:Paymob-SDK:{{latest version}}")//Please change this version number to match the version number of the downloaded sdk Enable data binding in app/build.gradle.kts Add your data-binding feature in BaseAppModuleExtensions as follows: Kotlin android { buildFeatures { dataBinding = true } } Sync gradle project Usage imports Kotlin import com.paymob.paymob_sdk.PaymobSdk import com.paymob.paymob_sdk.domain.model.CreditCard import com.paymob.paymob_sdk.domain.model.SavedCard import com.paymob.paymob_sdk.ui.PaymobSdkListener Implement Paymob Sdk listener interface Kotlin class MainActivity : AppCompatActivity(), PaymobSdkListener { override fun onCreate(savedInstanceState: Bundle?) {…} override fun onSuccess() { //If the Payment is successful } override fun onFailure() { //If The Payment is declined } override fun onPending() { //If The Payment is pending } } override fun onCancelled() { //If the customer manually canceled the payment, we suggest using the Transaction Inquiry API in this case, as the customer could cancel it at different stages. } Canceled status available starting from version 1.9.3 You should configure the response callback URL for the integration ID in use to the appropriate URL listed below, based on the region. This is required in order to run the callback functions ( onSuccess , onFailure , and onPending ). Egypt : https://accept.paymob.com/api/acceptance/post_pay Oman : https://oman.paymob.com/api/acceptance/post_pay Saudi Arabia: https://ksa.paymob.com/api/acceptance/post_pay United Arab Emirates: https://uae.paymob.com/api/acceptance/post_pay Normal Checkout Flow Create a PaymobSdk instance You can create the PaymobSdk instance using PaymobSdk.Builder() Kotlin val paymobsdk = PaymobSdk.Builder( context = this@MainActivity, clientSecret = “CLIENT_SECRET”,//Place Client Secret here publicKey = “PUBLIC_KEY”,//Place Public Key here paymobSdkListener = this ) .build() Client Secret A unique, intention-specific token used to redirect the customer to Paymob’s Unified Checkout or to render Paymob’s Pixel component. You can get a client secret by calling the Create Intention API request . Public Key To know how to get your public key, please check the Getting Integration Credentials page. To pass the saved token to the SDK, you should pass the token as a string to the card_tokens array while calling the intention creation request For generating a save card token to be used within a Moto transaction later, please refer to this link for generating a save card token. Customize the SDK payment sheet (Optional) You can set the SDK buttons' color and buttons' text color using this builder object, for example: Kotlin val paymobsdk = PaymobSdk.Builder( context = this@MainActivity, clientSecret = “CLIENT_SECRET”,//Place Client Secret here publicKey = “PUBLIC_KEY”,//Place Public Key here paymobSdkListener = this, ) .setButtonBackgroundColor(Color.BLACK)//changes the color of button backgrounds throughout the SDK, and set by default to black .setButtonTextColor(Color.WHITE)//changes the color of button texts throughout the SDK, and set by default to white .showSaveCard(showSaveCard ?: true) //changes the ability for the sdk to save the card info or no .saveCardByDefault(saveCardDefault ?: false) //changes the ability for the sdk if the save card checkbox is checked ot not .build() Finally: Run the SDK You can start the SDK by calling Kotlin sdk.start() Embedded Checkout Flow Add PaymobCheckoutView to Layout Add the SDK view to your layout XML file. This view will be responsible for rendering the payment UI inside your screen. XML <com.paymob.paymob_sdk.ui.embedded.PaymobCheckoutView android:id="@+id/paymob_checkout_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> <com.paymob.paymob_sdk.ui.embedded.PaymobCheckoutView android:id="@+id/paymob_checkout_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> Configure the Embedded Checkout View After adding the SDK view, the final step is to configure the SDK view. Kotlin class MainActivity : AppCompatActivity(), PaymobSdkListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val paymobCheckoutView = findViewById<PaymobCheckoutView>(R.id.paymob_checkout_view) val uiCustomizationJson = "" paymobCheckoutView.configure( activity = this@MainActivity, uiCustomization = uiCustomizationJson, showAddNewCard = true, showSaveCard = true, saveCardByDefault = false, payFromOutside = false, paymobSdkListener = this ) } } Set Payment Keys Whenever you make any update to the intention via the API , you need to update the intention data inside the SDK. Kotlin paymobCheckoutView.setPaymentKeys( publicKey = "PUBLIC_KEY", clientSecret = "CLIENT_SECRET" ) Client Secret A unique, intention-specific token used to redirect the customer to Paymob’s Unified Checkout or to render Paymob’s Pixel component. You can get a client secret by calling the Create Intention API request . Public Key To know how to get your public key, please check the Getting Integration Credentials page. UI Customization (Optional) You can customize the UI using a JSON configuration (All customization attributes are optional): Kotlin val fontId = R.id.my_font val uiCustomizationJson = """ { "Font_Family": $fontId, "Font_Size_Label": "17", "Font_Size_Input_Fields": "11", "Font_Size_Payment_Button": "16", "Font_Weight_Label": "500", "Font_Weight_Input_Fields": "500", "Font_Weight_Payment_Button": "700", "Color_Border_Input_Fields": "#DBE1EA", "Color_Disabled": "#00000080", "Color_Error": "#FF0000", "Color_Primary": "#144DFF", "Color_Input_Fields": "#FFFFFF", "Text_Color_For_Label": "#000000", "Text_Color_For_Payment_Button": "#FFFFFF", "Text_Color_For_Input_Fields": "#000000", "Color_For_Text_Placeholder": "#C7C7CD", "Payment_Button_Title": "Pay Now", "Radius_Border": "30", "Container_Padding": "40" } """.trimIndent() paymobCheckoutView.configure( activity = this@MainActivity, uiCustomization = uiCustomizationJson, paymobSdkListener = this ) Trigger Payment from a Custom Button (Optional) By default, the embedded component includes its own Pay button . If the merchant wants to trigger payment from a custom button , follow these steps: 1 Enable the external trigger while configuring the Embedded Checkout View Kotlin paymobCheckoutView.configure( activity = this@MainActivity, uiCustomization = uiCustomizationJson, showAddNewCard = true, showSaveCard = true, saveCardByDefault = false, payFromOutside = true, paymobSdkListener = this ) 2 Call the payment function Inside the button click logic, call the PayFromOutside function: Kotlin paymobCheckoutView.PayFromOutside() Test Credentials To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Flutter SDK](https://developers.paymob.com/paymob-docs/mobile-sdks/flutter-sdk.md): Outcome - Integrate Paymob's official Flutter SDK Last Updated Date - July 1, 2026 The Flutter SDK connects your Flutter app to the native Paymob iOS and Android SDKs. Both native SDKs are bundled inside the SDK; no separate downloads or manual native code changes are required on either platform. Supported payment methods Cards Wallets Apple Pay Google Pay Bank Installments vaLU Souhoola Forsa Premium6 Aman Installments The Flutter SDK plugin supports a minimum Android SDK version of 23 (Android 6.0) and a minimum iOS version of 13.0. Installation Add the dependency In your pubspec.yaml Add the SDK under dependencies: Dart dependencies: flutter_paymob_sdk: git: url: https://github.com/PaymobAccept/flutter_sdk.git Then run: Dart flutter pub get Android configurations Configure Gradle repositories In android/settings.gradle.kts , add the following inside the dependencyResolutionManagement block: Kotlin dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { google() mavenCentral() maven { url = uri("https://storage.googleapis.com/download.flutter.io") } maven { url = uri("https://jitpack.io") } val flutterPluginsDeps = file("../.flutter-plugins-dependencies") if (flutterPluginsDeps.exists()) { @Suppress("UNCHECKED_CAST") val json = groovy.json.JsonSlurper().parse(flutterPluginsDeps) as Map<String, Any> @Suppress("UNCHECKED_CAST") val androidPlugins = ((json["plugins"] as? Map<String, Any>)?.get("android") as? List<Map<String, Any>>) ?: emptyList() androidPlugins.find { it["name"] == "flutter_paymob_sdk" } ?.get("path") ?.let { maven { url = uri("${it}android/libs") } } } } } Enable Data Binding In android/app/build.gradle.kts , inside the android {} block: Kotlin android { buildFeatures { dataBinding = true } } IOS Run pod install The PaymobSDK.xcframework Is bundled inside the SDK and picked up automatically by CocoaPods. Usage Import and initialize In your Dart file, import the plugin and create a PaymobService instance: Dart import 'package:flutter_paymob_sdk/flutter_paymob_sdk.dart'; final service = PaymobService(); Launch the payment SDK Dart final result = await paymobService.payWithPaymob( publicKey: publicKey, clientSecret: clientSecret, customization: PaymobCustomization( appName: 'My Store', buttonBackgroundColor: Colors.blue, buttonTextColor: Colors.white, showSaveCard: true, saveCardDefault: false, ), ); if (result.isSuccessful) { // Payment succeeded } else if (result.isFailure) { // Payment failed } else if (result.isPending) { // Payment is pending } The result is an instance object of the PaymobPaymentResult class. It will also include the two parameters below: Title Description Property Type Description transactionDetails Map<String, dynamic>? Transaction data ( successful payments only) errorMessage String? Error description if status is isFailure You should configure the response callback URL for the integration ID in use to the appropriate URL listed below, based on the region. This ensures your after-payment actions run correctly based on the actual payment status returned by Paymob. Egypt : https://accept.paymob.com/api/acceptance/post_pay Oman : https://oman.paymob.com/api/acceptance/post_pay Saudi Arabia: https://ksa.paymob.com/api/acceptance/post_pay United Arab Emirates: https://uae.paymob.com/api/acceptance/post_pay Client Secret A unique, intention-specific token used to redirect the customer to Paymob’s Unified Checkout or to render Paymob’s Pixel component. You can get a client secret by calling the Create Intention API request . Public Key To know how to get your public key, please check the Getting Integration Credentials page. To pass the saved token to the SDK, you should pass the token as a string to the card_tokens array while calling the intention creation request For generating a save card token to be used within a Moto transaction later, please refer to this link for generating a save card token. Optional UI customization The following optional parameters can be passed inside PaymobCustomization to customize the SDK appearance and behavior: Dart PaymobCustomization( // Branding appName: 'My Store', androidAppLogo: 'ic_launcher', // Android: drawable/mipmap resource name iosAppLogo: 'assets/logo.png', // iOS: Flutter asset path // Button buttonBackgroundColor: Colors.blue, buttonTextColor: Colors.white, // Card saving showSaveCard: true, saveCardDefault: false, // Screens showTransactionResult: true, // Show/hide the built-in result screen after payment // iOS only isKeyboardHandlingEnabled: true, // SDK keyboard avoidance behavior ) App logo The logo parameter is split into two androidAppLogo and iosAppLogo , because each platform stores image assets differently. Android : Pass the name of an image resource that already exists in your Android project under res/drawable/ or res/mipmap/ . Every Flutter app comes with ic_launcher by default, so you can use that or add your own. IOS Pass the path of a Flutter asset. The image must first be added to your pubspec.yaml under flutter: assets: , Then pass the same path to the plugin. • [React Native SDK](https://developers.paymob.com/paymob-docs/mobile-sdks/react-native-sdk.md): Outcome - Integrate Paymob's React Native SDK Last Updated Date - June 1, 2026 Supported payment methods Cards Wallets Apple Pay Google Pay Bank Installments vaLU Souhoola Forsa Premium6 Aman Installments Installation Steps for React Native SDK To get started with the paymob-reactnative package, follow these steps: Open your terminal, navigate to your React Native project directory, and install the paymob-reactnative package using yarn: yarn add paymob-reactnative@https://github.com/PaymobAccept/paymob-reactnative-sdk.git Enable data binding for Android Add the following snippet to your app-level build.gradle file. Java android { buildFeatures { dataBinding = true } } Using Paymob To begin using the Paymob SDK in your react native application, start by importing the module in your component: Javascript import Paymob, { PaymentResult, CreditCardType } from 'paymob-reactnative'; Customize the SDK You can adjust the SDK’s look and behavior to match your app’s branding before showing the payment screen. Javascript Paymob.setAppIcon(base64Image); // Set your merchant logo using a base64 encoded image Paymob.setAppName('Paymob SDK'); // Customize merchant app name displayed in the Paymob interface Paymob.setButtonTextColor('#FFFFFF'); // Set the text color of buttons in the SDK Paymob.setButtonBackgroundColor('#000000'); // Set the background color of buttons in the SDK Paymob.setShowSaveCard(true); // Enable the option for users to save their cards Paymob.setSaveCardDefault(true); // Set saved card option as default for transactions These options help keep the payment experience consistent with your app’s design. Important Notice Make sure all customization is done before calling Paymob.presentPayVC() . Any changes made after that won’t appear on the payment screen. Listen for payment results To handle payment results effectively, you can add a listener that will respond to different transaction statuses. This is crucial for providing feedback to users about their payment transactions: Javascript Paymob.setSdkListener((status: PaymentResult) => { switch (status) { case PaymentResult.SUCCESS: // Handle successful payment break; case PaymentResult.FAIL: // Handle failed payment break; case PaymentResult.PENDING: // Handle pending payment status break; } }); This listener will allow you to implement logic based on the result of the payment process, enhancing the user experience. Invoking the SDK After configuring the SDK, you can invoke the Paymob payment interface with the following code: Javascript const savedBankCards = [ { maskedPan: '1234', // The masked card number displayed to the user savedCardToken: 'CARD_TOKEN', // The token representing the saved card creditCard: CreditCardType.MASTERCARD, // The type of the credit card (e.g., Mastercard) }, ]; Paymob.presentPayVC('CLIENT_SECRET', 'PUBLIC_KEY', savedBankCards); Note: The savedBankCards parameter is optional. If you do not have saved bank cards to provide, you can simply call the presentPayVC method without it. This function call opens the Paymob payment interface, allowing users to complete their transactions securely. Make sure to replace 'CLIENT_SECRET' and 'PUBLIC_KEY' with your actual credentials. Here’s the updated explanation with a revised first sentence and the inclusion of the repository cloning step: Example App To explore the SDK or test its features, you can clone the repository and run the example app by following these steps: Clone the Repository Clone the repository to your local machine. yarn 2. Run the Example App You can run the example app for both iOS and Android platforms: To run the app on iOS, use the following command: yarn example ios To run the app on Android, use this command: yarn example android By following these steps, you can explore the functionality of the SDK in the example app. Test Credentials To test the payment cycle, you need to use test credentials for Card and Wallet. Please check the Test Credentials page. • [Overview](https://developers.paymob.com/paymob-docs/webhook-callbacks-and-hmac/overview.md): Outcome - Understand the different types of Paymob callbacks, their purposes, and HMAC calculation. Last Updated Date - June 1, 2026 Definition Transaction callbacks are mechanisms used by Paymob to notify your system about payment-related events and transaction statuses. They ensure your platform stays in sync with what happens during and after a customer completes a payment. When does Paymob send the transaction callback? Paymob sends the transaction callback only if the transaction succeeds or is declined Types of Transaction Callbacks Paymob provides two types of transaction callbacks to keep both your system and your customers informed about payment results: Transaction Processed Callback Used to notify your backend system about transaction events and status changes, allowing you to update orders, trigger business logic, and keep your records in sync. Transaction Response Callback Used to redirect the customer back to your platform after payment, so you can display the payment result and guide the next user action. Each callback serves a different purpose and is designed to support both system-level handling and customer-facing communication . Detailed technical implementation for each callback is covered in the following sub-page. Webhook Testing Tool We provide a dedicated tool to help you test webhooks. For detailed instructions and usage, please refer to the Webhook Testing Tool page. • [Transaction callbacks](https://developers.paymob.com/paymob-docs/webhook-callbacks-and-hmac/transaction-callbacks.md): Outcome - Understand the different types of Paymob callbacks and the purpose of each one. Last Updated Date - June 1, 2026 Transaction Processed Callback This is an endpoint in your web application where you will receive notifications with the transaction details after the payment or after any action on the payment. The callback will be sent as a POST request containing a JSON object with key details about the transaction. You can check the action that can be taken on the payment from the Managing Payments section . Main keys to observe their values: id ⇒ Transaction ID success ⇒ Status of the transaction (True/False) order.id ⇒ Paymob order ID, which you'll mostly use to correlate between the transaction you received its callback and the order on your system, which you bound to the Paymob order ID while creating the intention. is_refunded ⇒ Indicates whether the transaction has been refunded or not (True/False) refunded_amount_cents ⇒ The total of the refunded amount. (The payment transaction can have more than one partial refund transaction) is_voided ⇒ Indicates whether the transaction has been voided or not (True/False) is_captured ⇒ Indicates whether the transaction has been captured or not (True/False) captured_amount ⇒ The total of the captured amount. (The payment transaction can have more than one partial capture transaction) On the right side of this page, you'll see an example of a request that you would receive on your transaction-processed callback endpoint for a successful transaction. While you don’t need to use all the keys included, the table below describes some of the key details within the callback object: Transaction Response Callback After a customer completes a payment, Paymob will redirect them back to your platform on the URL you'll specify as a response callback URL in the integration ID. Prepare this endpoint to show a page with a clear message indicating the status of the payment they just made. The transaction response callback consists of a set of query parameters that we append to the URL of your endpoint. After the payment is processed, we will redirect the customer to this endpoint. You can then parse these parameters and display an appropriate message to the customer based on the payment status. These query parameters correspond to the same keys found in the transaction processed callback JSON object listed in the above table. Transaction Response Callback sample: https://webhook.site/de237c03-271f-40ba-8327-f667ce71ee90?id=316004&pending=false&amount_cents=50000&success=true&is_auth=false&is_capture=false&is_standalone_payment=true&is_voided=false&is_refunded=false&is_3d_secure=true&integration_id=2936&profile_id=106&has_parent_transaction=false&order=378804&created_at=2024-06-25T15%3A16%3A25.910710%2B04%3A00¤cy=EGP&merchant_commission=0&discount_details=%5B%5D&is_void=false&is_refund=false&error_occured=false&refunded_amount_cents=0&captured_amount=0&updated_at=2024-06-25T15%3A16%3A46.544538%2B04%3A00&is_settled=false&bill_balanced=false&is_bill=false&owner=211&data.message=Approved&source_data.type=card&source_data.pan=2346&source_data.sub_type=MasterCard&acq_response_code=00&txn_response_code=APPROVED&hmac=8aa3e005de7f639dac10952884963d47a65b2b85d3381803b3f22ff2cd372e57ef881dea2c94a9e171c9df7cef4fd898f2fc92f229dc4369d61d5acfb6b311ce Transaction Processed Callbacks vs Transaction Response Callbacks Transaction Processed Callbacks Transaction Response Callbacks Request Type POST GET Request Content JSON Query Param Direction Server Side Client Side To know how to set the callback URLs for your integration ID, please check the Getting Integration Credentials page. Useful Testing Tools To receive transaction callbacks, your app must be deployed on a publicly accessible endpoint. If you are developing your app locally and need to test receiving callbacks, you may need to set up a secure, introspectable tunnel to your localhost webhook. One recommended tool for this is ngrok , which generates a public URL that you can use as your callback URL. If you are not receiving callbacks and need to debug the issue, you can use one of the following HTTP request inspection tools: Webhook , RequestBin , or RequestWatch . These tools generate endpoint URLs that you can add to your transaction processed/response callbacks, allowing you to verify whether the callbacks are being received after a payment is processed. Caution! In order to verify that these requests are received from Accept's endpoint, you have to implement the HMAC authentication to validate the source of the callbacks. • [HMAC](https://developers.paymob.com/paymob-docs/webhook-callbacks-and-hmac/hmac.md): Outcome -Understand the HMAC calculation mechanism. Last Updated Date - June 1, 2026 What is HMAC Authentication? HMAC (Hash-based Message Authentication Code) is a widely used cryptographic technique designed to ensure both the integrity and authenticity of a message. It combines a cryptographic hash function (such as SHA-512) with a secret key and a string of data to produce a unique signature, known as an HMAC. This signature serves as a guarantee that the message has not been altered during transmission and confirms the identity of the sender. Whenever you receive a callback from Accept, even if it's ( Processed, Response , or Card token ), it includes an HMAC query parameter. You should calculate the HMAC using the received data and compare it with the provided value to verify the callback’s authenticity. Calculation steps guidelines At a high level, HMAC authentication works as follows: Paymob sends transaction data along with an HMAC value. You recreate this HMAC using the received data and your hmac secret key. You compare your generated HMAC with the one received. If both values match, the callback is verified and trusted. This mechanism ensures that your system only processes valid callbacks sent by Paymob. • [HMAC Transaction Callback](https://developers.paymob.com/paymob-docs/webhook-callbacks-and-hmac/hmac/hmac-transaction-callback.md): Outcome - Understand how to calculate the hmac value for the transaction callbacks (Processed and Response) Last Updated Date - June 1, 2026 Step 1: Sort the Data Lexicographically by Key Sort the parameters received in the callback in lexicographical order based on their keys. The keys/parameters should be in the same order as shown in the list below. Shape of data received: POST callbacks: data is received as a JSON object GET callbacks: data is received as query parameters You can check the callbacks guide to know more about each type of callback. HMAC String Keys: Plain text amount_cents created_at currency error_occured has_parent_transaction obj.id // for Processed (POST) | id for Response (GET) integration_id is_3d_secure is_auth is_capture is_refunded is_standalone_payment is_voided order.id // for Processed (POST) | order_id for Response (GET) owner pending source_data.pan source_data.sub_type source_data.type success amount_cents created_at currency error_occured has_parent_transaction obj.id // for Processed (POST) | id for Response (GET) integration_id is_3d_secure is_auth is_capture is_refunded is_standalone_payment is_voided order.id // for Processed (POST) | order_id for Response (GET) owner pending source_data.pan source_data.sub_type source_data.type success Step 2: Concatenate the Values Concatenate the values of the keys/parameters into a single string in the same order as they are listed. This string will be used to calculate the HMAC in the next step. For example, if we consider the sample transaction processed callback, the resultant string would look like this: HMAC Concatenated String: Plain text 1000002024-06-13T11:33:44.592345EGPfalsefalse1920364654097558truefalsefalsefalsetruefalse217503754302852false2346MasterCardcardtrue 1000002024-06-13T11:33:44.592345EGPfalsefalse1920364654097558truefalsefalsefalsetruefalse217503754302852false2346MasterCardcardtrue Step 3: Calculate the HMAC Use your HMAC secret and the SHA-512 hashing algorithm to generate an HMAC from the concatenated string. To know how to get your hmac secret, please check the Getting Integration Credentials page. HMAC Calculated Sample: Plain text fa8ac0b7f3852e60c50e7fdd4ea5ef0bda96030c19dea1d55df8c76d6c08ab1877774662cbb049 81dc84839ad4da560bcc8cb53b8973548657f7e8f8d2e79930 fa8ac0b7f3852e60c50e7fdd4ea5ef0bda96030c19dea1d55df8c76d6c08ab1877774662cbb049 81dc84839ad4da560bcc8cb53b8973548657f7e8f8d2e79930 Step 4: Compare the Calculated HMAC Compare the HMAC value you calculated with the hmac value received in the callback’s query parameters (e.g., ...?hmac=generated_hash ) to verify the integrity and authenticity of the data. • [HMAC Card Token Callback:](https://developers.paymob.com/paymob-docs/webhook-callbacks-and-hmac/hmac/hmac-for-card-tokens.md): Outcome ​- Understand how to calculate the hmac value for the card token callback Last Updated Date ​ - ​August 24, 2026 Step 1: Sort the Data Lexicographically by Key Sort the parameters received in the callback in lexicographical order based on their keys. The keys/parameters should be in the same order as shown in the list below. Shape of data received: POST callbacks: data is received as a JSON object HMAC String Keys: Plain text card_subtype created_at email id masked_pan merchant_id order_id token card_subtype created_at email id masked_pan merchant_id order_id token Step 2: Concatenate the Values Concatenate the values of the keys/parameters into a single string in the same order as they are listed. This string will be used to calculate the HMAC in the next step. For example, if we consider the sample card token callback, the resultant string would look like this: HMAC Concatenated String: Plain text MasterCard2026-08-24T13:28:31.015314kiyedi3052@claspira.com15978654xxxx-xxxx-xxxx-234610539285938815813f22ce8a4e77125c70f0bc69830e34c36df469351e2fa6be76428be4 MasterCard2026-08-24T13:28:31.015314kiyedi3052@claspira.com15978654xxxx-xxxx-xxxx-234610539285938815813f22ce8a4e77125c70f0bc69830e34c36df469351e2fa6be76428be4 Step 3: Calculate the HMAC Use your ​ HMAC secret ​ and the ​ SHA-512 ​ hashing algorithm to generate an HMAC from the concatenated string. To know how to get your hmac secret, please check the Getting Integration Credentials ​page. HMAC Calculated Sample: Plain text 4c0480c8c5afdba5294dee8ec01e5aa0203c5df0a8b3a45eadf11f2b01c974725d205587dabba70709f3ac2d0c7d7ec93fe69ec462b5a3018190bfd681ebf1d3 4c0480c8c5afdba5294dee8ec01e5aa0203c5df0a8b3a45eadf11f2b01c974725d205587dabba70709f3ac2d0c7d7ec93fe69ec462b5a3018190bfd681ebf1d3 Step 4: Compare the Calculated HMAC Compare the HMAC value you calculated with the ​ hmac ​ value received in the callback’s ​ query parameters ​ (e.g., ​ ...?hmac=generated_hash ​) to verify the integrity and authenticity of the data. • [Webhook Testing Tool](https://developers.paymob.com/paymob-docs/webhook-callbacks-and-hmac/webhook-testing-tool.md): Outcome - Allow developers to capture and inspect webhook requests to verify that callback events are triggered correctly and contain the expected data Last Updated Date - June 1, 2026 Overview Webhook testing tool allows developers to generate a temporary endpoint to capture incoming webhook requests. It helps inspect the request payload, headers, and event data sent by Paymob after a transaction succeeds , fails , or when an action ( Refund , Void , or Capture ) is performed on a parent transaction. This makes it easier to validate and debug webhook integrations before implementing a production endpoint. It can also be used to test Subscription callback webhooks. You can check it independently (not embedded in the documentation) from this link . How to Configure the Endpoint in Your Integration ID You can check on how to set up callback URLs for detailed instructions. • [Refund](https://developers.paymob.com/paymob-docs/manage-payment-apis/refund.md): Outcome - Refund transactions through API Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Authorization Add your “ secret key “ in the authorization header preceded by the word ” Token ”. To know how to get your secret key, please check the Getting Integration Credentials page. Note! Upon processing a refund transaction, you will receive callbacks for the parent transaction associated with it. These callbacks will include the flag, "is_refunded": true indicating that the transaction has been refunded. You can find the ID of the parent transaction in the "parent_transaction" key within the callbacks of the refund transaction. Common errors Passing an amount greater than the transaction amount Status Code : 400 Bad Request JSON { "message": "Requested Refund Amount is greater than the maximum refund amount permissible. Maximum Refund Amount is EGP 100.0" } Solution : The passed amount should be less than or equal to the transaction amount. • [Void](https://developers.paymob.com/paymob-docs/manage-payment-apis/void.md): Outcome - Void transactions through API Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Authorization Add your “ secret key “ in the authorization header preceded by the word ” Token ”. To know how to get your secret key, please check the Getting Integration Credentials page. Note! After processing a void transaction, you will receive callbacks for the associated parent transaction. These callbacks will include the flag "is_voided": true , indicating that the transaction has been successfully voided. The ID of the parent transaction can be found in the "parent_transaction" key within the callbacks related to the void transaction. Common errors Passing amount greater than the transaction amount Status Code : 400 Bad Request JSON { "message": "Requested Refund Amount is greater than the maximum refund amount permissible. Maximum Refund Amount is EGP 100.0" } Solution : The passed amount should be less than or equal to the transaction amount. • [Capture](https://developers.paymob.com/paymob-docs/manage-payment-apis/capture.md): Outcome - Capture Auth transactions through API Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Authorization Add your “ secret key “ in the authorization header preceded by the word ” Token ”. To know how to get your secret key, please check the Getting Integration Credentials page. Common errors Passing an amount greater than the transaction amount Status Code : 400 Bad Request JSON { "detail": "Capture amount cannot exceed auth amount" } Solution : The passed amount should be less than or equal to the transaction amount. Passing a not Auth transaction or a declined one Status Code : 404 Not Found JSON { "detail": "Invalid transaction id" } Solution : Make sure to pass a successful Auth transaction • [Create Subscription plan](https://developers.paymob.com/paymob-docs/subscription/create-subscription-plan.md): Outcome - Create a subscription plan that defines the characteristics of periodic subscription deductions per user Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Important Notes: - Please make sure to use the Moto integration ID while creating a subscription plan. - You need to set the parameter ' webhook_url ' while creating the plan request, then you will start receiving the response on the webhook on any action (subscription level only). Common errors Wrong frequency 400 Bad Request JSON { "frequency": [ "\"5\" is not a valid choice." ] } Solution : Make sure to use a valid frequency value from ( 7, 15, 30, 60, 90, 180, 360 ). Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Create Subscription](https://developers.paymob.com/paymob-docs/subscription/create-subscription.md): Outcome - Create a subscription for a user under a specific subscription plan. Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Subscription Creation Mechanism Subscription creation is being done by completing one 3DS transaction to save the customer's card and connect it with the subscription. To implement this, please check the Create Intention API documentation Below are the specific technical details related to the subscription itself, not the Intention in general. Request Body Below are the parameters related to the subscription creation; other parameters are explained in the Create Intention API documentation Field Description Mandatory Subscription Plan ID (subscription_plan_id) The subscription plan ID from which the subscription inherits its characteristics. Yes Subscription Start Date (subscription_start_date) The date from which the subscription will start. It's effective if the use_transaction_amount value is false. No Common errors Wrong secret key was used for authentication 404 Not Found JSON { "message": "invalid subscription plan id" } Solution : Make sure that the secret key and plan ID belong to the same Paymob account. • [Plan actions](https://developers.paymob.com/paymob-docs/subscription/plan-actions.md): Outcome - know briefly the actions that can be executed on the subscription plan. Last Updated Date - June 28, 2026 Overview There are some actions that can be executed on the subscription plan through APIs. Download the Postman Collection from this link . Actions can be executed on the subscription plan Update the parameters (number of deductions, plan amount, Moto integration ID) Suspend the plan temporarily Resume a suspended plan List the plans • [Update Subscription Plan](https://developers.paymob.com/paymob-docs/subscription/plan-actions/update-subscription-plan.md): Outcome - Change a subscription plan’s amount, number of deductions, and integration ID for a specific plan Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [List Subscription Plans](https://developers.paymob.com/paymob-docs/subscription/plan-actions/list-subscription-plans.md): Outcome - Restore all subscription plans associated with a specific merchant Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Suspend Subscription Plan](https://developers.paymob.com/paymob-docs/subscription/plan-actions/suspend-subscription-plan.md): Outcome - Suspend a subscription plan Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Resume Subscription Plan](https://developers.paymob.com/paymob-docs/subscription/plan-actions/resume-subscription-plan.md): Outcome - Resume a suspended subscription plan Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Subscription actions](https://developers.paymob.com/paymob-docs/subscription/subscription-actions.md): Outcome - A brief about the actions that can be executed on the subscription plans Last Updated Date - June 28, 2026 Overview There are some actions that can be executed on the subscription plan through APIs. Download the Postman Collection from this link . Actions can be executed on the subscription plan Update the parameters (number of deductions, plan amount, Moto integration ID) Suspend the plan temporarily Resume a suspended plan List the plans • [Update Subscription](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/update-subscription.md): Outcome - Modifying the subscription amount and the subscription end date for a specific subscription Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [List Subscription Details](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/list-subscription-details.md): Outcome - Retrieving detailed information for a specific subscription using its unique subscription ID, or fetching all subscriptions associated with a specific merchant. Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Query Parameters You can filter subscriptions using the following parameters: Transaction P lan Subscription state Refer to the query parameters listed below for more details. Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) Passing a non-valid subscription ID 404 Not Found JSON { "detail":"not found." } Solution : Make sure to pass a valid subscription ID for the subscription you want to retrieve its details. • [Suspend Subscription](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/suspend-subscription.md): Outcome - Suspending a subscription and temporarily stopping its active billing Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) Invalid subscription ID 404 Not Found JSON { "message":"Subscription not found." } Solution : Make sure to pass a valid subscription ID for the subscription you want suspend • [Resume Subscription](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/resume-subscription.md): Outcome - Reactivating a subscription and resuming billing Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) Invalid subscription ID 404 Not Found JSON { "message":"Subscription not found." } Solution : Make sure to pass a valid subscription ID for the subscription you want resume The subscription isn't suspended 400 Bad Request JSON { "message":"The subscription isn't suspended" } Solution : Make sure to pass an ID for an active subscription (Not cancelled or suspended) • [Cancel Subscription](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/cancel-subscription.md): Outcome - Permanently terminate subscription Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [List Subscription Cards](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/list-subscription-cards.md): Outcome - List all the cards related to a specific subscription Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Add Secondary Card](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/add-secondary-card.md): Outcome - Add a secondary card for an existing subscription Last Updated Date - June 1, 2026 To add a secondary card for an existing subscription you need to follow the steps below. 1 Create an Intention You need to first create a payment intention. Please check the Create Intention API documentation Card Types can be used In this step, you can use one of the following Card Integration ID types : Verification (Recommended in this case) Auth Normal 3DS Body Request include the subscription ID in the subscriptionv2_id parameter in the Intention Creation API ; other parameters are explained in the Create Intention API documentation . Response Important Parameter from Intention Response client_secret : Will be used in Step 2. 2 Render Paymob UI You need to render one of Paymob UIs, so the customer can complete the payment and save their card. UI Optins Redirect the customer to Paymob's Unified Checkout Render Paymob's Pixel component for an embedded checkout experience 3 Processing the payment and saving the card In the UI experience you used, the customer enters their card data and chooses to save their card for future use. 4 Receive Subscription Callback You receive a Subscription callback in the endpoint registered to the subscription with the trigger_type parameter that contains the value “ add_secondry_card ” The webhook_url is inherited from the Subscription Plan by default. If no webhook_url is defined in the plan, or if you need to register a different webhook_url for a specific subscription, you can use the Register Webhook API . Sample Callback JSON { "paymob_request_id": "f605f179-86ec-4b23-beab-1d2aa8f84892", "subscription_data": { "id": 7923, "client_info": { "email": "seofo@ss.com", "full_name": "Sayoufa Ahmed", "phone_number": "01010101010" }, "frequency": 7, "created_at": "2026-01-19T12:35:27.455111", "updated_at": "2026-01-19T12:35:27.455124", "name": "Seifoplantrue", "reminder_days": 3, "retrial_days": null, "plan_id": 6977, "state": "active", "amount_cents": 20000, "starts_at": "2026-01-19", "next_billing": "2026-01-26", "reminder_date": "2026-01-23", "ends_at": "2026-02-02", "resumed_at": null, "suspended_at": null, "reactivated_at": null, "webhook_url": "https://webhook.site/286bcaf4-fc87-4f4d-a21c-409fe502cd6e", "integration": 4586631, "initial_transaction": 400122656 }, "trigger_type": "add_secondry_card", "hmac": "68ea52c07a5988144fdf616378c438ac207c68449d75f88e63f532820a8e11b1d5293c5f1d65fbe6fb1c0ffd5e1b24b6d422247f1cd13fe1c0c176d2c53840a0", "card_data": { "token": "c97803acc667b5bb1f22a0ead71e17d8e89dd2077455df30654b1d38", "is_primary": false, "masked_pan": "xxxx-xxxx-xxxx-0008" } } HMAC Calculation Check it's the HMAC Subscription Callback guide under the callback section Now, you have added a secondary card to the subscription, you can make it the primary card to be used in future deductions for this subscription. You can use the Change Subscription Primary Card . • [Delete Secondary Card](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/delete-secondary-card.md): Outcome - Delete a secondary card for a specific subscription Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Change Subscription Primary card](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/change-subscription-primary-card.md): Outcome - Changing the primary card associated with a specific subscription Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) Passing a wrong card ID 404 Not Found JSON { "message":"Card not found." } Solution : Make sure to pass a valid ID for the card you want to set as a primary one. • [Register Webhook](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/register-webhook.md): Outcome - Register a webhook endpoint to an existing subscription Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Last Transaction Subscription](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/last-transaction-subscription.md): Outcome - Retrieving the last transaction details associated with a specific subscription Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [List Subscription Transactions](https://developers.paymob.com/paymob-docs/subscription/subscription-actions/list-subscription-transactions.md): Outcome - Retrieve all transactions associated with a specific subscription ID Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common errors Invalid Auth Token 401 Unauthorized JSON { "detail":"incorrect credentials" } Solution : Make sure to pass a valid and fresh auth token. (Each auth token is valid for an hour) • [Subscription Callback and HMAC Calculation](https://developers.paymob.com/paymob-docs/subscription/hmac-calculation-for-subscription-callback.md): Outcome - Understand the subscription callback and calculate its HMAC Last Updated Date - June 1, 2026 Overview When a webhook is registered to a subscription, any actions performed on the subscription will trigger a callback. This callback is sent as a POST request to the registered webhook, containing the updated subscription data. The HMAC value for this callback is provided in the body of the subscription callback request as a parameter named hmac (unlike transaction or card token callbacks, where it is typically sent as a query parameter). Subscription Callback Sample JSON { "paymob_request_id": "df9e4ecf-12e0-4925-b258-65423f32bc98", "subscription_data": { "id": 1264, "client_info": { "email": "test@test.com", "full_name": "mo ay", "phone_number": "01010101010" }, "frequency": 365, "created_at": "2024-12-03T22:11:02.280164", "updated_at": "2024-12-03T22:11:02.280179", "name": "Testplan 3", "reminder_days": null, "retrial_days": null, "plan_id": 1186, "state": "suspended", "amount_cents": 330, "starts_at": "2024-12-20", "next_billing": "2024-12-20", "reminder_date": null, "ends_at": null, "resumed_at": null, "suspended_at": "2024-12-03", "webhook_url": "https://webhook.site/a16ba9d5-4f4a-47dc-8005-e6ec2d197f26", "integration": 4565330, "initial_transaction": 241322967 }, "trigger_type": "suspended", "hmac": "dd5b3018888d9f98574cd180793db10d969b522e08c62baf2ea33357d1546b567b7fd79760e90046e90eaacf30024ede5539cbd0748bd9e6c005faf5117e0e7b" } Subscription Trigger Types Catalog Each subscription action triggers a webhook containing the relevant trigger_type value. Action trigger_type CREATED "Subscription Created" SUSPENDED "suspended" CANCELED "canceled" RESUMED "resumed" UPDATED "updated" SECONDRY_CARD "add_secondry_card" PRIMARY_CARD "change_primary_card" DELETE_SECONDARY_CARD “delete_card” REGISTER_WEBHOOK "register_webhook" Next billing cycle "Successful Transaction" Failed deduction transaction “Failed Transaction“ Failed retrial deduction transaction “Failed Overdue Transaction” HMAC Calculation Method 1. Extract the Relevant Parameters subscription_data.id : Subscription ID ( 1264 in the example). trigger_type : The action taken on the subscription ( suspended in the example). 2. Create the Concatenated String The string format is the concatenation of the trigger_type + “for” + subscription_data.id ”{trigger_type}for{subscription_data.id}” Example: The string for the above object is “ suspendedfor1264 “ 3. Hash the String Use the SHA-512 hashing algorithm. Hash the concatenated string using the merchant’s HMAC secret key. (This step is the same as calculating HMAC for normal callbacks ) To know how to get your hamc secret, please check the Getting Integration Credentials page . 4. Compare the HMAC Compare the HMAC value sent in the request body ( hmac parameter) with the calculated HMAC. If they match, the request is authenticated. • [Create Card Token](https://developers.paymob.com/paymob-docs/pay-with-saved-cards/create-card-token.md): Outcome ​- Create a Card Token to be used in future payments Last Updated Date ​ - ​August 24, 2026 Download the Postman Collection from this link . 1 Create an Intention You need to first create a payment intention. Please check the Create Intention API documentation Card Types can be used In this step, you can use one of the following Card Integration ID types : Verification Normal 3DS Auth Important Parameters from Intention Response client_secret ​: Will be used in ​ Step 2 ​. intention_order_id ​: The Paymob order ID, which you'll receive on both the transaction callback and the card token callback. Will be used to correlate the transaction or the card token to the order or customer on your system. id ​: The intention ID, which you'll receive on both the transaction callback and the card token callback. Will be used to correlate the transaction or the card token to the order or customer on your system. (Same use of Order ID) 2 Render Paymob UI You need to render one of Paymob UIs, so the customer can complete the payment and save their card. UI Options Redirect the customer to Paymob's Unified Checkout Render Paymob's Pixel component for an embedded checkout experience 3 Processing the payment and saving the card In the UI experience you used, the customer enters their card data and chooses to save their card for future use. 4 Receiving the Card Token You receive a ​ Card Token ​ object in the endpoint sent in the ​ notification_url ​parameter while creating the intention (​ Step 1 ​), or in the endpoint configured as a processed callback URL in the integration ID you used. Sample Card Token Object JSON { "type": "TOKEN", "obj": { "id": 15978654, "token": "3f22ce8a4e77125c70f0bc69830e34c36df469351e2fa6be76428be4", "masked_pan": "xxxx-xxxx-xxxx-2346", "merchant_id": 1053928, "card_subtype": "MasterCard", "created_at": "2026-08-24T13:28:31.015314", "email": "kiyedi3052@claspira.com", "order_id": "593881581", "user_added": false, "next_payment_intention": "pi_test_a9cb89a214f640c88a1d58094b3bf8e2", "cardholder_name": "TEST ACCOUNT", "expiry_month": "01", "expiry_year": "38" } } HMAC Calculation Check it's the HMAC Card Token Callback guide under the callback section Now, you have the token that represents the customer's card, and you can use it in future payments, either a Customer Initiated Transaction ​ (​ CIT) or a Merchant Initiated Transaction ​ (​ MIT) • [CIT (Customer Initiated Transaction)](https://developers.paymob.com/paymob-docs/pay-with-saved-cards/cit.md): Outcome - Make the customer pay with the saved card through one of Paymob UIs without reentering their card details Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Pre-requisites Create a card token; you can check the Create Card Token guide. 1 Create an Intention You need to first create a payment intention. Please check the Create Intention API documentation Card Types can be used In this step, you can use one of the following Card Integration ID types : Normal 3DS Auth Card On File Body Request Include the card token as a string in the card_tokens array when calling the Create Intention API; other parameters are explained in the Create Intention API documentation . card_tokens array accepts up to 3 card tokens. Response Important Parameters from Intention Response client_secret : Will be used in Step 2. 2 Render Paymob UI You need to render one of Paymob UIs, so the customer can complete the payment and save their card. UI Optins Redirect the customer to Paymob's Unified Checkout Render Paymob's Pixel component for an embedded checkout experience 3 Processing the payment and saving the card In the UI experience you used, the customer enters their card data and chooses to save their card for future use. For the callbacks and HMAC calculation, you can check the Webhook (Callbacks) & HMAC section. • [MIT (Merchant Initiated Transaction)](https://developers.paymob.com/paymob-docs/pay-with-saved-cards/mit.md): Outcome - Make the merchant deduct from a saved card without the customer's interaction Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Pre-requisites Create a card token. You can check the Create Card Token guide. 1 Create an Intention You need to first create a payment intention. Please check the Create Intention API documentation Card Types can be used In this step, you can use one of the following Card Integration ID types : Moto Response Important Parameters from Intention Response payment_keys[0].key : The Moto payment token that will be used in Step 2 . Payment Token: is a unique identifier for payment with specific payment method. 2 Call The Pay Request You need to pass the card token and the payment token to the Pay Request . Which we'll deep dive into below. For the callbacks and HMAC calculation, you can check the Webhook (Callbacks) & HMAC section. • [Overview](https://developers.paymob.com/paymob-docs/quicklink-apis/overview.md): Outcome - Understand what QuickLinks APIs are used for Last Updated Date - June 28, 2026 QuickLinks APIs allow you to programmatically create and manage payment links using Paymob’s backend APIs. These links can then be shared with customers to complete payments through a Paymob-hosted checkout experience. Download the Postman Collection from this link . What Are QuickLinks APIs? QuickLinks APIs enable you to: Create secure, Paymob-hosted payment links programmatically Define payment details such as amount, currency, and allowed payment methods Cancel payment links from your backend Once created, a QuickLink can be shared with customers through any communication channel, allowing them to complete the payment without additional integration steps. Available API Operations Create QuickLink Use this API to generate a new payment link with predefined payment details and configurations. Cancel QuickLink Use this API to invalidate an existing payment link and prevent it from being used for future payments. Always rely on backend callbacks, not the response (redirection) callback alone, to confirm payment success. • [Create QuickLink](https://developers.paymob.com/paymob-docs/quicklink-apis/create-quicklink.md): Outcome - Create a QuickLink through API Last Updated Date - June 28, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) Common Errors 400 Bad Request JSON { "message": "Reference ID already exists." } Solution : Make sure to pass a unique reference_id each time. Passing Wrong Auth Token Or Not Passing Auth Token 401 Unauthorized JSON { "detail": "incorrect credentials" } Solution : Make sure to pass a valid and non-expired Auth Token each time. Passing an expiry date in the past 400 Bad Request JSON { "message": "expires_at - expires_at can't be in the past.", "errors": { "expires_at": [ "expires_at can't be in the past." ] } } Solution : Make sure to pass an expiry date in the future. Passing an integration ID not in the same status (Test/Live) of is_live parameter 404 Not Found JSON { "detail": "Integration ID/Name does not exist in our system . You can find the list of Integration ID’/Names from Merchant Dashboard under Developers → Payment Integrations Tab" } Solution : Make sure that the passed integration ID is in the same status of is_live parameter • [Cancel QuickLink](https://developers.paymob.com/paymob-docs/quicklink-apis/cancel-quicklink.md): Outcome - Cancel a QuickLink through API Last Updated Date - June 1, 2026 Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) • [Transaction Inquiry](https://developers.paymob.com/paymob-docs/transaction-inquiry-apis/transaction-inquiry.md): Outcome - Understand the available Transaction Inquiry endpoints and which one to use to retrieve transaction details Last Updated Date - August 4, 2026 The Transaction Inquiry APIs let you retrieve transaction details programmatically, using identifiers such as transaction ID , order ID , or merchant order ID (Special Reference Number) . Paymob provides a callback mechanism that should be used as the primary method for receiving transaction details after every payment or payment-related action. Callbacks ensure timely and reliable updates to your system. Transaction Inquiry APIs should be used only for manual checks from your system or as a fallback mechanism in case a callback is missed. Available Endpoints By Transaction ID Retrieve transaction details using the transaction ID . By Order ID or Reference Retrieve transaction details using the order ID or merchant order ID (Special Reference Number) . • [By Transaction ID](https://developers.paymob.com/paymob-docs/transaction-inquiry-apis/transaction-inquiry/by-transaction-id.md): Outcome - Retrieve transaction details by transaction ID Last Updated Date - June 28, 2026 Download the Postman Collection from this link . Authorization You should send a valid auth token as a Bearer Token. You can get a valid auth token by Authentication Request (Generate Auth Token) • [By Order ID or Reference](https://developers.paymob.com/paymob-docs/transaction-inquiry-apis/transaction-inquiry/by-order-id-or-reference.md): Outcome - Retrieve the last transaction details by the Order ID or the Merchant Order ID Last Updated Date - June 28, 2026 You can retrieve the last transaction related to an order ID or a Merchant Order ID (Which you sent while creating an Intention as a special_reference ) Download the Postman Collection from this link . You can get a valid auth token by Authentication Request (Generate Auth Token) • [Card Token Inquiry](https://developers.paymob.com/paymob-docs/transaction-inquiry-apis/card-token-inquiry.md): Outcome - Retrieve card token details by the Order ID Last Updated Date - August 4, 2026 You can retrieve the card token related to an order ID. Download the Postman Collection from this link . You can get a valid auth token by Authentication Request (Generate Auth Token) • [Split Features Implementation](https://developers.paymob.com/paymob-docs/split-features-implementation.md): Outcome - Implement Split Payment and Split Amount using the Intention Creation API, and explain how each split type is represented in the payment request. Last Updated Date - June 1, 2026 Split Features are implemented during payment intention creation . Both Split Payment and Split Amount are configured by adding specific parameters to the Create Intention API request. The checkout experience, payment method selection, and confirmation flow remain unchanged. The split logic is handled internally by Paymob based on the parameters you provide. Each feature will require configuration on your account from our side, so if you want any of them, please contact support@paymob.com Split Amount Request Body Below are the parameters related to the Split Amount ; other parameters are explained in the Create Intention API documentation Title Description Title Field Description Mandatory Split Amounts (split_amounts) An array of objects, each of which represents one sub-split amount Yes JSON "split_amounts": [ { "mid": {{connected_MID1}}, "amount_cents": {{splitted_amount1}}, "description": "{{description1}}" }, { "mid": {{connected_MID2}}, "amount_cents": {{splitted_amount2}}, "description": "{{description2}}" } ] Split Payment Request Body Below are the parameters related to the Split Payment ; other parameters are explained in the Create Intention API documentation Title Description Title Field Description Mandatory Split Payment Methods (split_payment_methods) An array of integers will contain an Auth Integration ID that will be used for split. Yes JSON "split_payment_methods": [ {{auth_integration_id}} ] Callback Below is a sample callback request sent to your configured Processed Callback URL . The callback includes an array of transactions. For each sub-payment , two transactions are returned: Authorization (Auth) Capture This means the total number of transactions in the callback is two per sub-payment . You can configure your endpoint in your integration ID by following the steps in the Getting Integration Credentials page. JSON { "order_id":453550057, "is_split_payment":true, "transactions":[ { "id":399618139, "pending":false, "amount_cents":500, "success":true, "is_auth":false, "is_capture":true, "is_standalone_payment":false, "is_voided":false, "is_refunded":false, "is_3d_secure":false, "integration_id":1999062, "profile_id":164295, "has_parent_transaction":true, "order":{ "id":453550057, "created_at":"2026-01-18T08:08:55.240695", "delivery_needed":false, "merchant":{ "id":164295, "created_at":"2022-03-24T20:13:47.852384", "phones":[ "+201010101011", "+201010101010" ], "company_emails":[ "mohamedabdelsttar97@gmail.com", "test@test.com" ], "company_name":"Parmagly", "state":"", "country":"EGY", "city":"Cairo", "postal_code":"", "street":"" }, "collector":null, "amount_cents":1000, "shipping_data":{ "id":218335393, "first_name":"test", "last_name":"test", "street":"15 street", "building":"16", "floor":"1", "apartment":"NA", "city":"NA", "state":"NA", "country":"Egypt", "email":"testtest@gmail.com", "phone_number":"01010101010", "postal_code":"NA", "extra_description":"", "shipping_method":"UNK", "order_id":453550057, "order":453550057 }, "currency":"EGP", "is_payment_locked":false, "is_return":false, "is_cancel":false, "is_returned":false, "is_canceled":false, "merchant_order_id":null, "wallet_notification":null, "paid_amount_cents":1000, "notify_user_with_email":false, "items":[ { "name":"Item name 2", "amount_cents":1000, "quantity":1 } ], "order_url":"NA", "commission_fees":0, "delivery_fees_cents":0, "delivery_vat_cents":0, "payment_method":"tbc", "merchant_staff_tag":null, "api_source":"OTHER", "data":{ }, "payment_status":"PAID", "terminal_version":null }, "created_at":"2026-01-18T08:14:12.262774", "transaction_processed_callback_responses":[ ], "currency":"EGP", "source_data":{ "pan":"2346", "type":"card", "tenure":null, "sub_type":"MasterCard" }, "api_source":"OTHER", "terminal_id":null, "merchant_commission":0, "accept_fees":0, "installment":null, "discount_details":[ ], "is_void":false, "is_refund":false, "data":{ "klass":"MigsPayment", "amount":500.0, "acs_eci":"", "message":"Approved", "batch_no":20260118, "card_num":"512345xxxxxx2346", "currency":"EGP", "merchant":"TESTMERCH_AUS_2P", "card_type":"MASTERCARD", "created_at":"2026-01-18T06:14:13.475067", "migs_order":{ "id":"453550057-399617899", "amount":5.0, "status":"CAPTURED", "currency":"EGP", "reference":"_399617899_453", "chargeback":{ "amount":0, "currency":"EGP" }, "creationTime":"2026-01-18T06:12:01.894Z", "merchantAmount":5.0, "lastUpdatedTime":"2026-01-18T06:14:13.307Z", "merchantCurrency":"EGP", "totalCapturedAmount":5.0, "totalRefundedAmount":0.0, "merchantCategoryCode":"7299", "totalAuthorizedAmount":5.0 }, "order_info":"453550057-399617899", "receipt_no":"601806006448", "migs_result":"SUCCESS", "secure_hash":"", "authorize_id":"006448", "transaction_no":"123456789", "avs_result_code":"", "captured_amount":5.0, "refunded_amount":0.0, "merchant_txn_ref":"399618139", "migs_transaction":{ "id":"399618139", "stan":"333047", "type":"CAPTURE", "amount":5.0, "source":"INTERNET", "receipt":"601806006448", "acquirer":{ "id":"BMNF_S2I", "date":"0118", "batch":20260118, "timeZone":"+0200", "merchantId":"MERCH_AUS_2P", "transactionId":"123456789", "settlementDate":"2026-01-18" }, "currency":"EGP", "terminal":"BMNF0578", "reference":"_399618139", "authorizationCode":"006448" }, "acq_response_code":"00", "authorised_amount":5.0, "txn_response_code":"APPROVED", "avs_acq_response_code":"00", "gateway_integration_pk":1999062 }, "is_hidden":false, "payment_key_claims":null, "error_occured":false, "is_live":false, "other_endpoint_reference":null, "refunded_amount_cents":0, "source_id":-1, "is_captured":false, "captured_amount":0, "merchant_staff_tag":null, "updated_at":"2026-01-18T08:14:13.480424", "is_settled":false, "bill_balanced":false, "is_bill":false, "owner":302852, "parent_transaction":399617899, "hmac":"c04cc61424f704ca64541d0aa1b8950f249be7cad5e8145a74b8cfb12c1b5d9a9a8cc3d0abde9b09346fbc2dccf3e6e68719c5bc19abca79cc8dca6a1331d36c" }, { "id":399617899, "pending":false, "amount_cents":500, "success":true, "is_auth":true, "is_capture":false, "is_standalone_payment":true, "is_voided":false, "is_refunded":false, "is_3d_secure":true, "integration_id":1999062, "profile_id":164295, "has_parent_transaction":false, "order":{ "id":453550057, "created_at":"2026-01-18T08:08:55.240695", "delivery_needed":false, "merchant":{ "id":164295, "created_at":"2022-03-24T20:13:47.852384", "phones":[ "+201010101011", "+201010101010" ], "company_emails":[ "mohamedabdelsttar97@gmail.com", "test@test.com" ], "company_name":"Parmagly", "state":"", "country":"EGY", "city":"Cairo", "postal_code":"", "street":"" }, "collector":null, "amount_cents":1000, "shipping_data":{ "id":218335393, "first_name":"test", "last_name":"test", "street":"15 street", "building":"16", "floor":"1", "apartment":"NA", "city":"NA", "state":"NA", "country":"Egypt", "email":"testtest@gmail.com", "phone_number":"01010101010", "postal_code":"NA", "extra_description":"", "shipping_method":"UNK", "order_id":453550057, "order":453550057 }, "currency":"EGP", "is_payment_locked":false, "is_return":false, "is_cancel":false, "is_returned":false, "is_canceled":false, "merchant_order_id":null, "wallet_notification":null, "paid_amount_cents":1000, "notify_user_with_email":false, "items":[ { "name":"Item name 2", "amount_cents":1000, "quantity":1 } ], "order_url":"NA", "commission_fees":0, "delivery_fees_cents":0, "delivery_vat_cents":0, "payment_method":"tbc", "merchant_staff_tag":null, "api_source":"OTHER", "data":{ }, "payment_status":"PAID", "terminal_version":null }, "created_at":"2026-01-18T08:11:42.794271", "transaction_processed_callback_responses":[ ], "currency":"EGP", "source_data":{ "pan":"2346", "type":"card", "tenure":null, "sub_type":"MasterCard" }, "api_source":"IFRAME", "terminal_id":null, "merchant_commission":0, "accept_fees":0, "installment":null, "discount_details":[ ], "is_void":false, "is_refund":false, "data":{ "klass":"MigsPayment", "amount":500.0, "acs_eci":"02", "message":"Approved", "batch_no":20260118, "card_num":"512345xxxxxx2346", "currency":"EGP", "merchant":"TESTMERCH_AUS_2P", "card_type":"MASTERCARD", "created_at":"2026-01-18T06:12:07.996712", "migs_order":{ "id":"453550057-399617899", "amount":5.0, "status":"AUTHORIZED", "currency":"EGP", "reference":"_399617899_453", "chargeback":{ "amount":0, "currency":"EGP" }, "description":"PAYMOB Parmagly", "creationTime":"2026-01-18T06:12:01.894Z", "merchantAmount":5.0, "lastUpdatedTime":"2026-01-18T06:12:07.800Z", "merchantCurrency":"EGP", "acceptPartialAmount":false, "totalCapturedAmount":0.0, "totalRefundedAmount":0.0, "authenticationStatus":"AUTHENTICATION_SUCCESSFUL", "merchantCategoryCode":"7299", "totalAuthorizedAmount":5.0 }, "order_info":"453550057-399617899", "receipt_no":"601806006448", "migs_result":"SUCCESS", "secure_hash":"", "authorize_id":"006448", "transaction_no":"123456789", "avs_result_code":"", "captured_amount":0.0, "refunded_amount":0.0, "merchant_txn_ref":"399617899", "migs_transaction":{ "id":"399617899", "stan":"6448", "type":"AUTHORIZATION", "amount":5.0, "source":"INTERNET", "receipt":"601806006448", "acquirer":{ "id":"BMNF_S2I", "date":"0118", "batch":20260118, "merchantId":"MERCH_AUS_2P", "transactionId":"123456789" }, "currency":"EGP", "terminal":"BMNF0577", "reference":"_399617899", "authorizationCode":"006448", "authenticationStatus":"AUTHENTICATION_SUCCESSFUL" }, "acq_response_code":"00", "authorised_amount":5.0, "txn_response_code":"APPROVED", "avs_acq_response_code":"00", "gateway_integration_pk":1999062 }, "is_hidden":false, "payment_key_claims":{ "extra":{ "NID":"2970874765694775", "merchant_order_id":null }, "user_id":302852, "currency":"EGP", "order_id":453550057, "created_by":302852, "is_partner":false, "amount_cents":1000, "billing_data":{ "city":"NA", "email":"testtest@gmail.com", "floor":"1", "state":"NA", "street":"15 street", "country":"Egypt", "building":"16", "apartment":"NA", "last_name":"test", "first_name":"test", "postal_code":"NA", "phone_number":"01010101010", "extra_description":"NA" }, "redirect_url":"https://accept.paymob.com/unifiedcheckout/payment-status?payment_token=ZXlKaGJHY2lPaUpJVXpVeE1pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SjFjMlZ5WDJsa0lqb3pNREk0TlRJc0ltRnRiM1Z1ZEY5alpXNTBjeUk2TVRBd01Dd2lZM1Z5Y21WdVkza2lPaUpGUjFBaUxDSnBiblJsWjNKaGRHbHZibDlwWkNJNk1UazVPVEEyTWl3aWIzSmtaWEpmYVdRaU9qUTFNelUxTURBMU55d2lZbWxzYkdsdVoxOWtZWFJoSWpwN0ltWnBjbk4wWDI1aGJXVWlPaUowWlhOMElpd2liR0Z6ZEY5dVlXMWxJam9pZEdWemRDSXNJbk4wY21WbGRDSTZJakUxSUhOMGNtVmxkQ0lzSW1KMWFXeGthVzVuSWpvaU1UWWlMQ0ptYkc5dmNpSTZJakVpTENKaGNHRnlkRzFsYm5RaU9pSk9RU0lzSW1OcGRIa2lPaUpPUVNJc0luTjBZWFJsSWpvaVRrRWlMQ0pqYjNWdWRISjVJam9pUldkNWNIUWlMQ0psYldGcGJDSTZJblJsYzNSMFpYTjBRR2R0WVdsc0xtTnZiU0lzSW5Cb2IyNWxYMjUxYldKbGNpSTZJakF4TURFd01UQXhNREV3SWl3aWNHOXpkR0ZzWDJOdlpHVWlPaUpPUVNJc0ltVjRkSEpoWDJSbGMyTnlhWEIwYVc5dUlqb2lUa0VpZlN3aWJHOWphMTl2Y21SbGNsOTNhR1Z1WDNCaGFXUWlPbVpoYkhObExDSmxlSFJ5WVNJNmV5Sk9TVVFpT2lJeU9UY3dPRGMwTnpZMU5qazBOemMxSWl3aWJXVnlZMmhoYm5SZmIzSmtaWEpmYVdRaU9tNTFiR3g5TENKemFXNW5iR1ZmY0dGNWJXVnVkRjloZEhSbGJYQjBJanBtWVd4elpTd2lZM0psWVhSbFpGOWllU0k2TXpBeU9EVXlMQ0pwYzE5d1lYSjBibVZ5SWpwbVlXeHpaU3dpYm1WNGRGOXdZWGx0Wlc1MFgybHVkR1Z1ZEdsdmJpSTZJbkJwWDNSbGMzUmZOV1EzTldSa1pXUmpPVE13TkRjME5qazBZMkZoWWpNMFpETXlaVFkwWW1FaUxDSnpjR3hwZEY5d1lYbHRaVzUwWDIxbGRHaHZaSE1pT2xzeE9UazVNRFl5WFgwLnpNTmdweVJWWDZMNWl4eEtZZGptRXVHTzhhZlNyV2w1Wk1ENHBFdzNsX0VPdWE0YzBWOC1vNmFRZEs0bkg1TGFtSUprcE9KYzNneW5weU5QZmV5WEVn&trx_id=399617899", "integration_id":1999062, "lock_order_when_paid":false, "split_payment_methods":[ 1999062 ], "next_payment_intention":"pi_test_5d75ddedc930474694caab34d32e64ba", "single_payment_attempt":false }, "error_occured":false, "is_live":false, "other_endpoint_reference":null, "refunded_amount_cents":0, "source_id":-1, "is_captured":true, "captured_amount":500, "merchant_staff_tag":null, "updated_at":"2026-01-18T08:14:13.477801", "is_settled":false, "bill_balanced":false, "is_bill":false, "owner":302852, "parent_transaction":null, "hmac":"db615e406e32d30ca22d3ce48aeb7f9ff98b35997f6cf73fe887664be3cb468ca0ce2d8a72b385df5a4ae03638ae6067d3883fd120966fce13fd69daefd48d2d" }, { "id":399618134, "pending":false, "amount_cents":500, "success":true, "is_auth":false, "is_capture":true, "is_standalone_payment":false, "is_voided":false, "is_refunded":false, "is_3d_secure":false, "integration_id":1999062, "profile_id":164295, "has_parent_transaction":true, "order":{ "id":453550057, "created_at":"2026-01-18T08:08:55.240695", "delivery_needed":false, "merchant":{ "id":164295, "created_at":"2022-03-24T20:13:47.852384", "phones":[ "+201010101011", "+201010101010" ], "company_emails":[ "mohamedabdelsttar97@gmail.com", "test@test.com" ], "company_name":"Parmagly", "state":"", "country":"EGY", "city":"Cairo", "postal_code":"", "street":"" }, "collector":null, "amount_cents":1000, "shipping_data":{ "id":218335393, "first_name":"test", "last_name":"test", "street":"15 street", "building":"16", "floor":"1", "apartment":"NA", "city":"NA", "state":"NA", "country":"Egypt", "email":"testtest@gmail.com", "phone_number":"01010101010", "postal_code":"NA", "extra_description":"", "shipping_method":"UNK", "order_id":453550057, "order":453550057 }, "currency":"EGP", "is_payment_locked":false, "is_return":false, "is_cancel":false, "is_returned":false, "is_canceled":false, "merchant_order_id":null, "wallet_notification":null, "paid_amount_cents":1000, "notify_user_with_email":false, "items":[ { "name":"Item name 2", "amount_cents":1000, "quantity":1 } ], "order_url":"NA", "commission_fees":0, "delivery_fees_cents":0, "delivery_vat_cents":0, "payment_method":"tbc", "merchant_staff_tag":null, "api_source":"OTHER", "data":{ }, "payment_status":"PAID", "terminal_version":null }, "created_at":"2026-01-18T08:14:10.912635", "transaction_processed_callback_responses":[ ], "currency":"EGP", "source_data":{ "pan":"2346", "type":"card", "tenure":null, "sub_type":"MasterCard" }, "api_source":"OTHER", "terminal_id":null, "merchant_commission":0, "accept_fees":0, "installment":null, "discount_details":[ ], "is_void":false, "is_refund":false, "data":{ "klass":"MigsPayment", "amount":500.0, "acs_eci":"", "message":"Approved", "batch_no":20260118, "card_num":"512345xxxxxx2346", "currency":"EGP", "merchant":"TESTMERCH_AUS_2P", "card_type":"MASTERCARD", "created_at":"2026-01-18T06:14:12.219505", "migs_order":{ "id":"453550057-399618094", "amount":5.0, "status":"CAPTURED", "currency":"EGP", "reference":"_399618094_453", "chargeback":{ "amount":0, "currency":"EGP" }, "creationTime":"2026-01-18T06:14:00.335Z", "merchantAmount":5.0, "lastUpdatedTime":"2026-01-18T06:14:12.038Z", "merchantCurrency":"EGP", "totalCapturedAmount":5.0, "totalRefundedAmount":0.0, "merchantCategoryCode":"7299", "totalAuthorizedAmount":5.0 }, "order_info":"453550057-399618094", "receipt_no":"601806333045", "migs_result":"SUCCESS", "secure_hash":"", "authorize_id":"333045", "transaction_no":"123456789", "avs_result_code":"", "captured_amount":5.0, "refunded_amount":0.0, "merchant_txn_ref":"399618134", "migs_transaction":{ "id":"399618134", "stan":"14614", "type":"CAPTURE", "amount":5.0, "source":"INTERNET", "receipt":"601806333045", "acquirer":{ "id":"BMNF_S2I", "date":"0118", "batch":20260118, "timeZone":"+0200", "merchantId":"MERCH_AUS_2P", "transactionId":"123456789", "settlementDate":"2026-01-18" }, "currency":"EGP", "terminal":"BMNF0573", "reference":"_399618134", "authorizationCode":"333045" }, "acq_response_code":"00", "authorised_amount":5.0, "txn_response_code":"APPROVED", "avs_acq_response_code":"00", "gateway_integration_pk":1999062 }, "is_hidden":false, "payment_key_claims":null, "error_occured":false, "is_live":false, "other_endpoint_reference":null, "refunded_amount_cents":0, "source_id":-1, "is_captured":false, "captured_amount":0, "merchant_staff_tag":null, "updated_at":"2026-01-18T08:14:12.225703", "is_settled":false, "bill_balanced":false, "is_bill":false, "owner":302852, "parent_transaction":399618094, "hmac":"0abf79f3f36c916cfe1f73eab0894519a5c5907f05ef7df7169d74ac4c38ee742db8867f0eb3f923410a4d1c534c83ded46d9476a78ba84c3022c373d14a7347" }, { "id":399618094, "pending":false, "amount_cents":500, "success":true, "is_auth":true, "is_capture":false, "is_standalone_payment":true, "is_voided":false, "is_refunded":false, "is_3d_secure":true, "integration_id":1999062, "profile_id":164295, "has_parent_transaction":false, "order":{ "id":453550057, "created_at":"2026-01-18T08:08:55.240695", "delivery_needed":false, "merchant":{ "id":164295, "created_at":"2022-03-24T20:13:47.852384", "phones":[ "+201010101011", "+201010101010" ], "company_emails":[ "mohamedabdelsttar97@gmail.com", "test@test.com" ], "company_name":"Parmagly", "state":"", "country":"EGY", "city":"Cairo", "postal_code":"", "street":"" }, "collector":null, "amount_cents":1000, "shipping_data":{ "id":218335393, "first_name":"test", "last_name":"test", "street":"15 street", "building":"16", "floor":"1", "apartment":"NA", "city":"NA", "state":"NA", "country":"Egypt", "email":"testtest@gmail.com", "phone_number":"01010101010", "postal_code":"NA", "extra_description":"", "shipping_method":"UNK", "order_id":453550057, "order":453550057 }, "currency":"EGP", "is_payment_locked":false, "is_return":false, "is_cancel":false, "is_returned":false, "is_canceled":false, "merchant_order_id":null, "wallet_notification":null, "paid_amount_cents":1000, "notify_user_with_email":false, "items":[ { "name":"Item name 2", "amount_cents":1000, "quantity":1 } ], "order_url":"NA", "commission_fees":0, "delivery_fees_cents":0, "delivery_vat_cents":0, "payment_method":"tbc", "merchant_staff_tag":null, "api_source":"OTHER", "data":{ }, "payment_status":"PAID", "terminal_version":null }, "created_at":"2026-01-18T08:13:38.716883", "transaction_processed_callback_responses":[ ], "currency":"EGP", "source_data":{ "pan":"2346", "type":"card", "tenure":null, "sub_type":"MasterCard" }, "api_source":"IFRAME", "terminal_id":null, "merchant_commission":0, "accept_fees":0, "installment":null, "discount_details":[ ], "is_void":false, "is_refund":false, "data":{ "klass":"MigsPayment", "amount":500.0, "acs_eci":"02", "message":"Approved", "batch_no":20260118, "card_num":"512345xxxxxx2346", "currency":"EGP", "merchant":"TESTMERCH_AUS_2P", "card_type":"MASTERCARD", "created_at":"2026-01-18T06:14:04.578434", "migs_order":{ "id":"453550057-399618094", "amount":5.0, "status":"AUTHORIZED", "currency":"EGP", "reference":"_399618094_453", "chargeback":{ "amount":0, "currency":"EGP" }, "description":"PAYMOB Parmagly", "creationTime":"2026-01-18T06:14:00.335Z", "merchantAmount":5.0, "lastUpdatedTime":"2026-01-18T06:14:04.394Z", "merchantCurrency":"EGP", "acceptPartialAmount":false, "totalCapturedAmount":0.0, "totalRefundedAmount":0.0, "authenticationStatus":"AUTHENTICATION_SUCCESSFUL", "merchantCategoryCode":"7299", "totalAuthorizedAmount":5.0 }, "order_info":"453550057-399618094", "receipt_no":"601806333045", "migs_result":"SUCCESS", "secure_hash":"", "authorize_id":"333045", "transaction_no":"123456789", "avs_result_code":"", "captured_amount":0.0, "refunded_amount":0.0, "merchant_txn_ref":"399618094", "migs_transaction":{ "id":"399618094", "stan":"333045", "type":"AUTHORIZATION", "amount":5.0, "source":"INTERNET", "receipt":"601806333045", "acquirer":{ "id":"BMNF_S2I", "date":"0118", "batch":20260118, "merchantId":"MERCH_AUS_2P", "transactionId":"123456789" }, "currency":"EGP", "terminal":"BMNF0571", "reference":"_399618094", "authorizationCode":"333045", "authenticationStatus":"AUTHENTICATION_SUCCESSFUL" }, "acq_response_code":"00", "authorised_amount":5.0, "txn_response_code":"APPROVED", "avs_acq_response_code":"00", "gateway_integration_pk":1999062 }, "is_hidden":false, "payment_key_claims":{ "extra":{ "NID":"2970874765694775", "merchant_order_id":null }, "user_id":302852, "currency":"EGP", "order_id":453550057, "created_by":302852, "is_partner":false, "amount_cents":1000, "billing_data":{ "city":"NA", "email":"testtest@gmail.com", "floor":"1", "state":"NA", "street":"15 street", "country":"Egypt", "building":"16", "apartment":"NA", "last_name":"test", "first_name":"test", "postal_code":"NA", "phone_number":"01010101010", "extra_description":"NA" }, "redirect_url":"https://accept.paymob.com/unifiedcheckout/payment-status?payment_token=ZXlKaGJHY2lPaUpJVXpVeE1pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SjFjMlZ5WDJsa0lqb3pNREk0TlRJc0ltRnRiM1Z1ZEY5alpXNTBjeUk2TVRBd01Dd2lZM1Z5Y21WdVkza2lPaUpGUjFBaUxDSnBiblJsWjNKaGRHbHZibDlwWkNJNk1UazVPVEEyTWl3aWIzSmtaWEpmYVdRaU9qUTFNelUxTURBMU55d2lZbWxzYkdsdVoxOWtZWFJoSWpwN0ltWnBjbk4wWDI1aGJXVWlPaUowWlhOMElpd2liR0Z6ZEY5dVlXMWxJam9pZEdWemRDSXNJbk4wY21WbGRDSTZJakUxSUhOMGNtVmxkQ0lzSW1KMWFXeGthVzVuSWpvaU1UWWlMQ0ptYkc5dmNpSTZJakVpTENKaGNHRnlkRzFsYm5RaU9pSk9RU0lzSW1OcGRIa2lPaUpPUVNJc0luTjBZWFJsSWpvaVRrRWlMQ0pqYjNWdWRISjVJam9pUldkNWNIUWlMQ0psYldGcGJDSTZJblJsYzNSMFpYTjBRR2R0WVdsc0xtTnZiU0lzSW5Cb2IyNWxYMjUxYldKbGNpSTZJakF4TURFd01UQXhNREV3SWl3aWNHOXpkR0ZzWDJOdlpHVWlPaUpPUVNJc0ltVjRkSEpoWDJSbGMyTnlhWEIwYVc5dUlqb2lUa0VpZlN3aWJHOWphMTl2Y21SbGNsOTNhR1Z1WDNCaGFXUWlPbVpoYkhObExDSmxlSFJ5WVNJNmV5Sk9TVVFpT2lJeU9UY3dPRGMwTnpZMU5qazBOemMxSWl3aWJXVnlZMmhoYm5SZmIzSmtaWEpmYVdRaU9tNTFiR3g5TENKemFXNW5iR1ZmY0dGNWJXVnVkRjloZEhSbGJYQjBJanBtWVd4elpTd2lZM0psWVhSbFpGOWllU0k2TXpBeU9EVXlMQ0pwYzE5d1lYSjBibVZ5SWpwbVlXeHpaU3dpYm1WNGRGOXdZWGx0Wlc1MFgybHVkR1Z1ZEdsdmJpSTZJbkJwWDNSbGMzUmZOV1EzTldSa1pXUmpPVE13TkRjME5qazBZMkZoWWpNMFpETXlaVFkwWW1FaUxDSnpjR3hwZEY5d1lYbHRaVzUwWDIxbGRHaHZaSE1pT2xzeE9UazVNRFl5WFgwLnpNTmdweVJWWDZMNWl4eEtZZGptRXVHTzhhZlNyV2w1Wk1ENHBFdzNsX0VPdWE0YzBWOC1vNmFRZEs0bkg1TGFtSUprcE9KYzNneW5weU5QZmV5WEVn&trx_id=399618094", "integration_id":1999062, "lock_order_when_paid":false, "split_payment_methods":[ 1999062 ], "next_payment_intention":"pi_test_5d75ddedc930474694caab34d32e64ba", "single_payment_attempt":false }, "error_occured":false, "is_live":false, "other_endpoint_reference":null, "refunded_amount_cents":0, "source_id":-1, "is_captured":true, "captured_amount":500, "merchant_staff_tag":null, "updated_at":"2026-01-18T08:14:12.222190", "is_settled":false, "bill_balanced":false, "is_bill":false, "owner":302852, "parent_transaction":null, "hmac":"1a51585b4c249e9eacec8a6140ebac1561e16c22b9a434db4f50cdad430579625f1ed07dc1661fc4db9c0b529b5e95610899edd955372b80fae934813a18952d" } ] } HMAC calculation The HMAC calculation method is similar to the one followed for normal transactions, but each transaction in the array received in the callback has its own hmac parameter, which will be used to compare with after following the guide in the HMAC documentation . • [Overview](https://developers.paymob.com/paymob-docs/payouts/overview-1.md): Who is this for - Everyone Outcome - Understand what Paymob Payout is, how to use it, and how to get started Last Updated Date - July 15, 2026 Paymob Payout (Paymob Send) is Paymob's outbound disbursement solution. It lets you send money directly to recipients (employees, suppliers, drivers, or customers) across mobile wallets and bank accounts, individually or in bulk. Unlike Paymob Accept, which handles incoming payments, Payout is built for sending money out. Supported Regions Paymob Payout is currently available in Egypt , UAE , and KSA . Ways to Use Payout Dashboard (Paymob Send Portal) For operations and finance teams managing disbursements without code. Upload files, review batches, and track transactions from a browser-based portal. API For developers automating disbursements programmatically — trigger payouts, check balance, and receive real-time status updates via callbacks. Integration Checklist There are no self-signup steps. Your account is provisioned by Paymob. Here's how the onboarding process works: Contact your account manager Reach out to your Paymob Payout account manager to request access. If you don't have one, please contact support@paymob.com . Legal Complete the required legal agreement with Paymob. Receive staging credentials Once the legal step is complete, Paymob sets up your staging environment and sends your credentials via email. Integration cycle Build your Payout integration against the staging environment. Test & validation Run test disbursements to verify your integration works as expected. Technical approval Paymob reviews and approves your integration. Go live on production Once approved, your production account is provisioned, and you're ready to disburse. Don't skip steps; each one is required for a successful launch. Where to Go Next Your goal Start here Understand the full disbursement flow How It Works Compare channels and pick the right one Disbursement Channels Use the portal to disburse Dashboard Integrate via API Payout APIs Overview • [How It Works](https://developers.paymob.com/paymob-docs/payouts/how-it-works-1.md): Who is this for - Business owners, finance teams, and operations managers who want to understand how Paymob Payout works before getting started Outcome - Understand the end-to-end disbursement flow, from funding your balance to money reaching your recipients Last Updated Date - July 29, 2026 Once your account is set up, every disbursement follows the same core flow. 1. Fund Your Budget Every disbursement is charged from a pre-funded balance called your budget . No budget, no disbursements — Paymob will never process a payout that exceeds your available balance. Your Payout budget is separate from your Paymob Accept balance, though your Accept balance can be used to top it up. How to top up: Bank Transfer: Submit a transfer request with your source and destination bank details and attach proof of transfer Accept Balance Transfer: Move balance directly from your Paymob Accept account The Accept balance can be used to top up the Payout balance 2. Trigger a Disbursement Via the portal, there follows a two-step Maker/Checker authorization model. The Maker uploads and validates the disbursement file, then notifies the Checker. The Checker reviews, approves, and executes using a PIN. Via the API: A single authorized role triggers disbursements directly. The Maker/Checker model does not apply to API integrations. For details, see Payout APIs Overview . If a disbursement is triggered without sufficient budget, the request will be declined, and the transaction will not proceed. How Budget Is Deducted The amount deducted depends on who bears the fees: Mode What is deducted from budget Merchant bears fees (default) Amount + fees + VAT. The recipient gets the full amount. Customer bears fees Only the transaction amount. Fees and VAT are deducted from what the recipient receives. 3. Funds Are Sent Once a disbursement is approved and executed, Paymob routes funds through the selected channel. Settlement timing varies: Channel Settlement Mobile Wallets (Vodafone, Etisalat, Orange, Bank Wallet) Instant Bank Card Up to 3 working days Instant Bank Hours (async) Egypt Post Next business day (submitted before 2:00 PM) / 2 business days (submitted after 2:00 PM) 4. Track Your Disbursement Wallet transactions resolve immediately; the final status is returned in the same response, and no further tracking is needed. Bank and Egypt Post transactions are asynchronous. You have two options to track them: Callback: Configure a disbursement callback URL from the dashboard to receive real-time status updates automatically Inquiry API: Use the Inquiry APIs to poll the status manually • [Disbursement Channels](https://developers.paymob.com/paymob-docs/payouts/disbursement-channels.md): Who is this for - Business owners and operations teams choosing how to send money to recipients Outcome - Understand the available disbursement channels, what each one requires, and how to pick the right one for your use case Last Updated Date - July 15, 2026 Paymob Send supports multiple disbursement channels across mobile wallets, bank accounts, and more. The right channel depends on what information you have about your recipient and how quickly they need to receive the funds. Channels at a Glance Briefly: When to Use Each Channel Mobile Wallets — when speed matters most Bank Card — for the lowest cost Instant Bank — when you need a faster bank transfer Egypt Post — when your recipient has no bank account or wallet Channel Recipient receives via Settlement Available in Relative Speed Vodafone Cash Vodafone mobile wallet Instant Egypt █████████████ Etisalat Cash Etisalat mobile wallet Instant Egypt █████████████ Orange Cash Orange mobile wallet Instant Egypt █████████████ Bank Wallet Bank-linked mobile wallet Instant Egypt █████████████ Bank Card Bank card, account, or IBAN Up to 3 working days Egypt, UAE, KSA ████ Instant Bank Bank account or IBAN Hours (async) Egypt █████████ Egypt Post Egypt Post network Next business day Egypt ██████ Real-Time Channels Mobile Wallets Includes Vodafone Cash, Etisalat Cash, Orange Cash, and Bank Wallet. What you need: The recipient's registered mobile number. Settlement: Resolved immediately - the transaction status is final in the portal or API response. Limits (per recipient): Title Description Minimum per transaction 1 EGP Maximum per transaction 60,000 EGP Maximum per day 60,000 EGP Maximum per month 200,000 EGP These limits (Maximum per day and Maximum per month) apply to the recipient's wallet, not your account. A disbursement may fail if the recipient has reached their wallet limit. Asynchronous Channels Bank Card Sends funds to a recipient's bank card, bank account, or IBAN (Recommended as others have a lower acceptance ratio). What you need: a card or account number, a bank code, and the recipient's full name. Settlement: Up to 3 working days depending on the recipient's bank. Minimum per transaction: 5 EGP Instant Bank Sends funds to a recipient's bank account or IBAN through a faster processing channel. What you need: Account number or IBAN, bank code, and the recipient's full name. Settlement: Typically, within hours of the transaction submission, the final status is returned asynchronously. Minimum per transaction: 112 EGP Bank Card vs. Instant Bank Both channels send money to bank accounts and accept IBANs, but they differ in speed and cost. Bank Card Instant Bank Settlement Up to 3 working days Hours (async) Cost Lower Higher Minimum amount 5 EGP 112 EGP Use Instant Bank when speed matters. Use Bank Card when cost efficiency is the priority. Egypt Post Sends funds through the Egypt Post network, reaching recipients who may not have a bank account or mobile wallet. What you need: The recipient's national ID and full name. Settlement: Submitted before 2:00 PM → next business day Submitted after 2:00 PM → within 2 business days Minimum per transaction: 5 EGP Who Pays the Fees By default, disbursement fees are charged to your Payout balance on top of the sent amount. Optionally, fees can be deducted from what the recipient receives instead. This can be configured per disbursement, either through the dashboard or the API. • [Dashboard](https://developers.paymob.com/paymob-docs/payouts/dashboard.md): Who is this for ​- Admins, Makers, and Checkers using the Paymob Send portal Outcome ​- Full guide for using the Paymob Send dashboard to manage disbursements Last Updated Date ​ - ​July 29, 2026 Overview The Paymob Send portal lets you set up your disbursement process, fund your balance, upload and review disbursement files, and track every transaction, all from a single platform. Roles & Responsibilities Admin Sets the PIN used to fire transactions Creates Maker and Checker users Defines authority levels and execution privileges (amount limits, checker levels, and so on) Can export transaction reports Maker Uploads the disbursement file Views and validates the file after upload Notifies Checkers once the file is ready for review Checker Logs in using two-factor authentication (2FA) Reviews and validates the uploaded file Approves and executes bulk disbursements using the PIN Can execute a single bank transfer directly without a file Admin Setup The Admin completes a one-time guided setup on first login: 1 Add PIN, used when firing any transaction 2 Add Maker users 3 Define authority levels, set the maximum amount each level can disburse 4 Add Checker users, assign each to an authority level 5 Set file format, configure the disbursement file headers, and column positions The file format configured in step 5 applies to Vodafone/Etisalat uploads only. Bank Wallets/Orange Cash and Bank Accounts/Cards have their own fixed format; download the sample file from the upload screen for reference. Topping Up Add a Top-Up Request Go to "Top-up balance" ⇒ "Add top-up balance request", fill in the transfer details, and submit. Transfer type can be: Bank Transfer Accept Balance View All Top-Up Requests Go to "Top-up balance" ⇒ "All top-up balance requests" to review every top-up submitted on your account. Maker: Uploading a Disbursement File Upload Drag and drop a file into the relevant disbursement tab: Vodafone/Etisalat/Aman Bank Wallets/Orange Cash Bank Accounts/Cards Validation The file is validated automatically after upload. A confirmation email is sent once validation completes and the file status updates to "Validated Successfully". Notify Checkers Once the file is reviewed, press "Notify Checkers" to flag it as ready for execution. Checker: Reviewing & Disbursing First-Time Setup Activate the account from the email link Enable Two-Factor Authentication using Google Authenticator Scan the portal QR code and enter the token to complete setup Review Enter the OTP from Google Authenticator, then open a file via "View" and accept or reject it. Accept ​ → proceed to disbursement Reject ​ → enter a rejection reason; the Maker is notified Disburse Press "Disburse", enter the PIN, and submit to finalize the batch. Single Step Transaction Checkers can disburse a single bank transfer without uploading a file. From "Single Step Transactions" → "Make New Bank Transaction", fill in the account number, amount, recipient's full name, transaction type, and bank name, then enter the PIN and submit. Reports & Exports Wallet Disbursements After processing, export a report (All / Success / Failed) via "Export". The file is sent to the Checker's email. Bank Accounts/Cards & Single Transactions Admin, Maker, and Checker users can export a per-transaction PDF report by opening a transaction and pressing "Export PDF Report". Admin Home Export From "Home", select a Start Date, End Date, and Issuer, then press "Export". The report is sent to the Admin's email. • [Need Help?](https://developers.paymob.com/paymob-docs/need-help.md): Who is this for - Everyone Outcome - Quickly find the right resource: complete setup steps, resolve common issues, or check a definition or security detail Last Updated Date - juky 28, 2026 Overview This section is your starting point whenever something isn't working, you need a definition, or you're missing a required setup step. Setup Guides Credentials, test cards, and Apple Pay configuration FAQs Quick answers to common issues and errors Security & Privacy How security is embedded across our platform Glossary Definitions for terms used across our docs, dashboard, and APIs When to Use This Section: Use Need Help? When you: Are stuck during setup or configuration Want a quick definition or clarification Hit an error and need the fix, not a full guide Need to confirm a security or compliance detail Still stuck? Reach out at support@paymob.com or join the Paymob Developer Community. • [Setup Guides](https://developers.paymob.com/paymob-docs/need-help/setup-guides.md): Who is this for - Everyone Outcome - Determine which Apple Pay setup steps your integration method requires, and complete domain verification and certificate creation Last Updated Date - July 28, 2026 Overview Required setup steps to get your integration credentials, test environment, and Apple Pay configuration ready. These are one-time or occasional tasks you complete before or during integration Getting Integration Credentials Find your Secret Key, Public Key, API Key, and Integration ID(s) Test Credentials Card and wallet numbers for testing your integration Apple Pay Setup Domain verification and certificate creation Note: Always use test credentials while developing. Switch to live only after go-live approval. When to Use This Section : You're starting a new integration and need your credentials You're testing before going live and need test cards or wallet numbers You're adding Apple Pay as a payment method • [Getting Integration Credentials](https://developers.paymob.com/paymob-docs/need-help/setup-guides/getting-integration-credentials.md): Who is this for - Anyone can implement the integration Outcome - Get the Paymob credentials that will be used during the integration Last Updated Date - July 21, 2026 Overview When you integrate with Paymob, even through APIs, Plugins, or Mobile SDKs, you'll need to use some of your Paymob credentials (e.g., secret key, public key, API key, …). How to get each credential API Keys Go to your " Accept Dashboard ", then click on the " Settings " tab, then select " API Keys " under the Developers section. Make sure you have enabled the appropriate mode ( live / test ) using the toggle at the top right. Secret Key and Public Key are mode-specific; each will show a different value depending on the mode selected. The API Key is the same for both environments. Once you're on the right page and mode, press the View button beside the credential you need: Secret Key Press View beside Secret key , then copy the value shown. Switching to Live mode shows the same modal with a sk live prefix instead. Public Key Press View beside Public key , then copy the value shown. Switching to Live mode shows the same modal with a pk live prefix instead. API Key Press View beside API key , then copy the value shown. It's the same key for both environments ( Test/Live ). Integration ID(s) Go to your " Accept Dashboard ", then click on the " Payment Integrations " card directly from the Settings page sidebar. Make sure to select the proper mode ( Test/Live ); the table will refresh with a different set of Integration IDs depending on the mode. Switching to Live mode shows the same table with the live integration IDs instead. Get the Integration ID(s) The Integration ID column in the table above lists all IDs for the selected mode. Copy the ID(s) relevant to your integration. Change Callback for the Integration IDs From the table above, click on the Integration ID you want to update — this opens its details page directly in edit mode. Fill in the Webhook URL and/or Redirect URL fields. Press Save Changes . • [Test Credentials](https://developers.paymob.com/paymob-docs/need-help/setup-guides/test-credentials.md): Who is this for - Everyone Outcome - Get the test credentials to make test transactions while using test integration IDs Last Updated Date - June 1, 2026 Here are the test credentials for the Online Card and Wallet payment methods: Mastercard (2 Cards) Title Description Card number 5123456789012346 Cardholder Name Test Account Expiry Month 01 Expiry Year 39 CVV 123 Title Description Card number 5123450000000008 Cardholder Name Test Account Expiry Month 01 Expiry Year 39 CVV 123 Visa (1 Card) Title Description Card number 4111111111111111 Cardholder Name Test Account Expiry Month 01 Expiry Year 39 CVV 123 Mobile Wallet (1 phone number) Title Description Wallet Number 01010101010 MPin Code 123456 OTP 123456 • [Apple Pay Setup](https://developers.paymob.com/paymob-docs/need-help/setup-guides/apple-pay-setup.md): Who is this for - Everyone Outcome - Understand which setup steps your integration method requires and complete domain verification and certificate creation for Apple Pay Last Updated Date - July 28, 2026 Overview Apple Pay requires up to two setup steps ( domain verification and certificate creation ), but not every integration needs both. The steps you complete depend on how you're integrating Apple Pay, so start by checking your integration method below. What You Need, By Integration Type: Mobile SDKs Certificates only, no domain verification required Pixel (Embedded) Domain verification and certificates required WooCommerce Plugin Domain verification and certificates required Note: Apple Pay isn't supported through webview integrations (mobile app webviews). Use the SDK instead. Setup Steps 1 Domain Verification Confirms you own the domain that will render Apple Pay. Required for Pixel and plugin-based integrations. 2 Certificates Creation Two certificates are required for every Apple Pay integration: Merchant Identity Certificate, which verifies your business Payment Processing Certificate, which encrypts payment data • [Apple Pay - Domain Verification](https://developers.paymob.com/paymob-docs/need-help/setup-guides/apple-pay-setup/apple-pay-domain-verification.md): How to verify? 1 Access Apple Developer Portal 🔵 For Everyone: Go to Apple Developer Portal Sign in with your Apple ID Click "Certificates, Identifiers & Profiles" 2 Create or Select Merchant ID 🔵 For Everyone: In the left sidebar, click "Identifiers" Click the dropdown and select "Merchant IDs" You have two options: Option A: Create New Merchant ID Click the "+" button Choose "Merchant IDs" Enter a description (e.g., "My Shop Apple Pay") Enter an identifier (e.g., merchant.com.myshop ) Click "Continue" then "Register" Option B: Use Existing Merchant ID Click on your existing Merchant ID 3 Enable Domain Verification 🔵 For Everyone: On your Merchant ID page, scroll down to "Merchant Domains" Click "Add Domain" 4 Enter Your Domain 🔵 For Everyone: Enter your domain name: yourwebsite.com Click "Next" Don't include https:// or www. Just the domain: myshop.com 5 Download Verification File 🔵 For Everyone: Apple will generate a file with this exact name: “ apple-developer-merchantid-domain-association ”. Please click "Download" and save it to your computer. Please don't rename it or add any extensions like .txt , .json , … 6 Upload to Your Website Place this file in a specific location on your website, like below: https://yourdomain/.well-known/apple-developer-merchantid-domain-association Please check the below for more guidance 🟢 For WordPress Users Method 1: Using cPanel File Manager Log in to your hosting cPanel Open "File Manager" Navigate to public_html/ (your WordPress root folder) Click "New Folder" Use a folder name .well-known (include the dot!) Open the .well-known folder Click "Upload" Upload the Apple verification file Done! Method 2: Using FTP (FileZilla) Connect to your website via FTP Navigate to the root directory (where you see wp-config.php ) Create a new folder: .well-known Enter the .well-known folder Upload the Apple verification file Done! Visual Guide: 🟢 For non CMS Websites Ubuntu/Linux Server: Bash # Navigate to your web root cd /var/www/html/ # Create .well-known directory mkdir -p .well-known # Upload your file (use SCP, SFTP, or manual upload) # Place it at: /var/www/html/.well-known/apple-developer-merchantid-domain-association # Set proper permissions chmod 644 .well-known/apple-developer-merchantid-domain-association Windows Server: PowerShell # Navigate to your web root (typically) cd C:\inetpub\wwwroot\ # Create .well-known folder mkdir .well-known # Place the verification file inside this folder Validate the verification 1 Test File Accessibility 🔵 For Everyone: Open your browser (use Incognito/Private mode) Visit: https://yourdomain.com/.well-known/apple-developer-merchantid-domain-association You should see a long string of text (the certificate content) If you see the text →→ Perfect! Continue to next step. If you see 404 Not Found →→ File not in the right place, review Step 1.6 If you see 403 Forbidden →→ Permission issue - set file permissions to 644 2 Complete Verification 🔵 For Everyone: Return to Apple Developer Portal Click "Verify" button Apple will check if the file is accessible Wait 30 seconds to 2 minutes If you see Success! →→ Your domain will appear under "Registered Domains" • [Apple Pay - Certificates Creation](https://developers.paymob.com/paymob-docs/need-help/setup-guides/apple-pay-setup/apple-pay-certificates-creation.md): What You'll Create Certificate 1: Merchant Identity Certificate (verifies your business) Certificate 2: Payment Processing Certificate (encrypts payment data) At the end of this page, you'll find a tool that will guide and help you while creating the certificates. Prerequisites Check 🟢 For Developers: Before starting, verify OpenSSL is installed: Bash openssl version If you see a version number →→ You're ready! If you see "command not found" →→ Install OpenSSL: 1 macOS Bash brew install openssl 2 Ubuntu/Debian Bash sudo apt update sudo apt install openssl 3 Windows Download OpenSSL Installer How to create the Merchant Identity Certificate? 1 Generate RSA Private Key 🟢 For Developers: Bash openssl genpkey -algorithm RSA -out merchant_identity.key This creates the RSA private key (2048-bit) named merchant_identity.key 2 Generate CSR for Merchant Certificate 🟢 For Developers: Bash openssl req -new -key merchant_identity.key -out merchant_identity.csr This creates the CSR file named merchant_identity.csr 3 Upload CSR to Apple 🔵 For Everyone: Go to Apple Developer Portal → Your Merchant ID Scroll to "Apple Pay Merchant Identity Certificate" Click "Create Certificate" Upload your merchant_identity.csr file Click "Continue" Download the generated certificate (e.g., merchant_id.cer ) 4 Convert Certificate Format 🟢 For Developers: Bash openssl x509 -inform DER -in merchant_id.cer -out merchant_certificate.pem This creates the PEM file named merchant_certificate.pem 5 Certificate 1 Complete! You now have: merchant_identity.key (private key) merchant_id.cer (certificate) merchant_certificate.pem (certificate) How to create the Payment Processing Certificate? 1 Generate Private Key 🟢 For Developers: Bash openssl ecparam -genkey -name prime256v1 -out payment_processing.key This creates the RSA private key (2048-bit) named payment_processing.key 2 Generate Certificate Signing Request (CSR) 🟢 For Developers: Critical Fields: Country Name: Must be 2 letters Common Name: Must be your exact domain Note : Skip optional fields by pressing Enter This creates the CSR file named payment_processing.csr 3 Upload CSR to Apple 🔵 For Everyone: Go to Apple Developer Portal → Your Merchant ID Scroll to "Apple Pay Payment Processing Certificate" Click "Create Certificate" Click "Choose File" Select your payment_processing.csr file Click "Continue" Apple generates your certificate - Click "Download" Save the file (it will be named something like apple_pay.cer ) 4 Convert Certificate Format 🟢 For Developers: Apple provides the certificate in .cer format, but we need .pem format: Bash openssl x509 -inform DER -in apple_pay.cer -out payment_certificate.pem This creates the PEM file named payment_certificate.pem 5 Certificate 2 Complete! You now have: payment_processing.key (private key) apple_pay.cer (certificate) payment_certificate.pem (certificate) All Certificate Files Ready! You should now have these 6 files: payment_processing.key (Payment private key) apple_pay.cer (Payment certificate) payment_certificate.pem (Payment certificate) merchant_identity.key (Merchant private key) merchant_id.cer (Merchant certificate) merchant_certificate.pem (Merchant certificate) Secure File Sharing 🔵 For Everyone: Password-Protected ZIP (Recommended) Place all files in a folder Compress to ZIP with password protection Send ZIP via email to support@paymob.com Send password via separate channel (SMS/WhatsApp) Helper Tool • [FAQs](https://developers.paymob.com/paymob-docs/need-help/faqs.md): Who is this for: Everyone Outcome: Explore common issues and the most commonly raised inquiries for faster resolution Last Updated Date - August 3, 2026 Common Issues "Unable to authorize store ownership" in Shopify Description Facing the error “Unable to authorize store ownership” while trying to log into the Paymob Shopify app. Solution Log in with the correct account Use your main account credentials Log in using the same username and password you use to access the Paymob dashboard. If you’ve logged in before Make sure to use the same credentials from your first successful login, as the app is linked to that account. Need to switch accounts? Switching accounts isn’t supported directly within the app. To proceed, either: Submit a support ticket at support@paymob.com , or Contact your account manager for assistance Integration ID/Name does not exist Descritpion Facing the error (Integration ID/Name does not exist in our system. You can find the list of Integration ID’/Names from Merchant Dashboard under Developers → Payment Integrations Tab) while calling the intention creation API request Solution Make sure that the used integration ID meets the following 4 criteria: The integration ID related to your account. The integration ID matches the status of the used secret key ( Live / Test ) The integration ID is passed to the intention API as an integer, not as a string. The integration ID is well configured; if all the above steps have been followed, and you are still facing the same issue, then please contact your account manager or submit a support ticket to support@paymob.com . Be sure to include detailed information about the problem. Refund Failure Error Description Occurs when a refund request cannot be processed. This may be due to an insufficient account balance or other issues indicated by the error message returned on the dashboard or within the API response. Solution Follow the steps below to troubleshoot refund issues: Verify your balance Ensure that your account has sufficient balance to process the refund, as insufficient funds are a common cause of failure. Check the error message Review the error message displayed on the dashboard or returned in the API response. This usually indicates the reason for the failure. Handle generic error messages If you receive a generic message such as “ Oops, something went wrong. ”, follow these steps: Open your browser’s Developer Tools (press Ctrl Shift I) and go to the Network tab. Attempt the refund again. Locate the failed request (highlighted in red) with the name refund. Capture a screenshot of the request. Copy and share the Request Headers and Response details for further investigation. In the Headers tab, find the x-paymob-id value and include it in your report. "accept.paymobsolutions.com refused to connect" in Shopify Description Facing the error "accept.paymobsolutions.com refused to connect" while you try to reach the Paymob shopify apps configuration on the Shopify store Solution To successfully connect and configure the Paymob Shopify apps, please follow these steps: Log in to your Shopify Admin Dashboard . Go to Settings (located at the bottom-left corner of the dashboard). Select Payments from the list of settings. Manage the desired Paymob Shopify app. Next user doesn't exist Description Facing the error " Next user doesn't exist " while creating a Quick Link through Paymob's dashboard Solution Please contact your account manager or submit a support ticket to support@paymob.com to configure your account for the new experience. Be sure to include detailed information about the problem. Can't create IFrames Description Occurs when a merchant requires setting up a new IFrame integration Solution We recommend using Unified Checkout , our latest checkout experience, designed to provide an improved and seamless user interface. All new merchants are encouraged to adopt this experience. If you are an existing merchant currently using the IFrame integration and require a new IFrame setup, please note that this request must be handled by our team. To proceed, contact your account manager or submit a support ticket at support@paymob.com . Common Inquiries How do I set up a global account? Answer Currently, Paymob does not support the creation of a global account. You can only create an account for a specific region at this time. How to Confirm Payment Status After Completion? Answer Yes, after a successful payment attempt, Paymob triggers two types of callbacks: 1. Transaction Processed Callback (Server-to-Server) A POST request is sent to your backend endpoint. Includes key details such as transaction status (success or declined), order ID, transaction ID, and other relevant data. Used for securely updating your system with the final transaction result. 2. Transaction Response Callback (Redirect) Redirects the customer back to your platform after payment. Includes query parameters that can be used to display a success or failure message. If you are using the mobile SDKs, this step is handled automatically. Please check the details in the callback section. How can I configure custom callback URLs for each payment? Answer You can define or override callback URLs directly in the intention creation request using the following parameters: notification_url : Used for the Transaction Processed Callback redirection_url : Used for the Transaction Response Callback T he redirection_url It is supported only with card and wallet payment methods. How to Retrieve Details of a Specific Transaction? Answer Paymob provides the ability to inquire about a specific transaction status using the Transaction ID , Order ID , or Special Reference Number . For detailed instructions on each method, please refer to the Transaction Inquiry API section. How to Retrieve the Subscription ID After Creation? Answer There are two ways, please check them below: In the Subscription Callback returned after subscription creation. By Subscription Inquiry using the first 3DS transaction ID (The transaction that created the subscription). Can I force saving the customer's card? Answer Yes, this can be enabled using a dedicated Integration ID configured to enforce card saving. To request this configuration, please contact your account manager or submit a support ticket at support@paymob.com Can I use PayMe in Test Mode? No. PayMe is only available in Live Mode. If I deactivate my main handle, do my branch handles also get deactivated? Yes, and reactivating the main handle reactivates them too. • [Security & Privacy](https://developers.paymob.com/paymob-docs/need-help/security-and-privacy.md): Who is this for - Everyone Outcome - Understand how security is embedded throughout Paymob's product lifecycle Last Updated Date - July 22, 2026 Security Overview At Paymob, security is a core part of how we design, build, and operate our platform. We incorporate security throughout the entire lifecycle of our products from initial design and software development to deployment, monitoring, and continuous improvement. Our security is built around protecting the confidentiality, integrity, and availability of customer information while maintaining resilient and reliable payment services. Our approach includes: Secure system architecture Continuous risk management Secure software development practices Strong access controls Encryption of sensitive data Continuous monitoring Incident response and recovery Regular security assessments Compliance with recognized industry standards Security is reviewed continuously to adapt to evolving threats and changing regulatory requirements. Secure Software Development Security is integrated into every phase of the software development lifecycle rather than being treated as a final validation step. Before new features or system changes are released, they undergo structured development and review processes designed to identify and reduce security risks. Our development practices include: Security requirements defined during design Secure coding practices Security reviews throughout development Controlled testing before deployment Change management procedures Documented release approvals Rollback planning for production changes Applications are regularly reviewed to identify vulnerabilities and ensure they continue to meet current security expectations. API Security Our APIs are designed with multiple layers of security to help protect customer data and maintain service availability. Security measures include: Strong authentication and authorization mechanisms Secure transmission of API traffic Protection against unauthorized access Request validation Rate limiting to prevent abuse Continuous monitoring of API activity Regular security assessments and testing API security controls are continuously reviewed as our platform evolves. Infrastructure Security Our infrastructure is designed using layered security principles that help isolate systems, restrict access, and reduce operational risk. Infrastructure security includes: Secure network architecture Segmentation between critical environments Multi-factor authentication for administrative access Role-based access controls Secure remote administration Infrastructure hardening Continuous monitoring of critical systems Regular maintenance and security updates Access to production infrastructure is limited to authorized personnel with a legitimate business need. Identity & Access Management Access to systems and customer information follows the principle of least privilege. This means individuals receive only the level of access required to perform their responsibilities. Our access management practices include: Role-based access control Multi-factor authentication Restricted administrative privileges Periodic access reviews Authentication for privileged operations Removal of unnecessary access when roles change These controls help reduce the risk of unauthorized access while maintaining operational efficiency. Encryption Sensitive information is protected using encryption throughout its lifecycle. Encryption is applied whenever appropriate to protect customer information during transmission and storage. Our encryption program includes: Encryption of sensitive data in transit Encryption of sensitive data at rest Secure cryptographic key management Restricted access to encryption keys Periodic review of cryptographic standards We continuously evaluate our encryption practices to align with accepted industry standards. Data Protection Protecting customer information is one of our highest priorities. We implement administrative, technical, and organizational safeguards designed to reduce the risk of unauthorized access, disclosure, alteration, or destruction of customer data. Our data protection practices include: Data classification Need-to-know access controls Least privilege access Secure storage Secure transmission Data retention controls Secure disposal of information Confidentiality requirements for employees and authorized third parties Customer information is only accessible to authorized personnel who require access to perform their responsibilities. Privacy We are committed to processing personal information responsibly and transparently. We collect and process personal data only for legitimate business purposes, legal obligations, or where consent has been provided when required. Our privacy is based on principles including: Transparency Data minimization Purpose limitation Accuracy Secure processing Privacy by Design Privacy by Default Security Monitoring Our security team continuously monitors our environment to detect, investigate, and respond to potential security events. Monitoring activities include: Security event monitoring Centralized logging Threat detection Anomaly identification Investigation of suspicious activity Operational security reviews These activities help us quickly identify potential risks and respond appropriately. Vulnerability Management Security is an ongoing process. We continuously evaluate our environment to identify potential vulnerabilities and reduce risk before issues can affect customers. Our vulnerability management includes: Regular vulnerability assessments Security testing Patch management Secure configuration reviews Risk prioritization Timely remediation of identified issues Security findings are evaluated according to their potential impact and addressed through established remediation processes. Incident Response We maintain documented procedures for identifying, managing, and responding to security incidents. Our incident response process is designed to: Detect potential security events Assess impact and severity Contain affected systems Investigate root causes Recover services safely Implement corrective actions Improve future response capabilities Following significant incidents, we perform post-incident reviews to strengthen our security posture and reduce the likelihood of recurrence. Business Continuity & Resilience We design our services with resilience in mind to support business continuity and minimize service disruption. Our resilience program includes: Business continuity planning Disaster recovery capabilities Backup processes Recovery procedures Redundant system design where appropriate Ongoing testing and review of recovery processes These measures help us maintain the availability of critical services and recover efficiently from unexpected events. Compliance Meeting industry standards Our security and privacy are designed to align with recognized industry standards and applicable regulatory requirements. Our compliance program includes: Security governance Risk management Security policies and procedures Regular internal reviews Third-party security oversight Ongoing compliance assessments Compliance Frameworks & Certifications Where applicable, we maintain strict adherence to recognized industry standards and regional frameworks to support the protection of customer information: PCI-DSS ISO/IEC 27001 & 27701 SOC 2 Type II Regional & Central Bank Regulations • [Glossary](https://developers.paymob.com/paymob-docs/need-help/glossary.md): Who is this for - Everyone Outcome - Quickly understand key Paymob terms and payment concepts so you can navigate the documentation, dashboard, and APIs with confidence Last Updated Date - July 29, 2026 A Acquirer: A bank or processor that acquires card transactions and settles funds to the merchant. Accept (Paymob Accept / Checkout) Paymob’s online checkout supports cards, wallets, and BNPL. Available via hosted pages, plugins, SDKs, or APIs. API Keys (Secret / Public) Credentials used for API authentication. Secret Key: Server-side only. Public Key: Safe for client-side initialization. Rotate keys on go-live and during security incidents. Apple Pay: Wallet-based payment method using tokenized credentials from Apple devices. Authorization (Auth): Real-time approval from the issuer that reserves funds. Can later be captured or voided. Auth / Capture (Two-Step Payments): Allows funds to be authorized first and captured later (full or partial). Useful when fulfillment happens after order placement. B BNPL (Buy Now, Pay Later): Installment payment providers such as Valu, Souhoola, Symple, Tabby and Tamara. Terms vary by region and currency. BIN / IIN (Bank Identification Number): First 6–8 digits of a card number. Used for routing, issuer identification, and eligibility checks. C Callback (Webhook / HMAC-Signed) Server-to-server notifications for payment state changes. Must verify HMAC, support retries, and ensure idempotency. Capture Converts an approved authorization into a settled transaction. Can be full or partial. Card on File (CoF) Tokenized card reference stored for future charges (CIT or MIT). PANs must never be stored — use Paymob tokens only. Chargeback / Dispute Issuer or cardholder-initiated reversal after settlement. Different from refunds; involves reason codes and timelines. Checkout (Hosted Checkout) Paymob-hosted payment page. Handles payment methods, 3DS, and redirects users back to your app or site. CIT Customer-Initiated Transaction/Cardholder-Initiated-Transaction D Descriptor Text shown on the cardholder’s statement. Must comply with acquirer length and character rules. Disbursement An outbound payment sent from your Payout balance to a recipient, such as an employee, supplier, or customer, delivered via a bank account or mobile wallet. E Environments (Test / Live) Separate base URLs, API keys, and Integration IDs. Never mix test and live credentials. G Google Pay Wallet payment method for Android and web. Requires gateway configuration and regional enablement. H HMAC (Hash-based Message Authentication Code) Cryptographic signature used to verify webhook authenticity and integrity. I ISO/IEC 27001 & 27701 Alignment with international best practices for information security management systems and privacy management systems. Integration ID Unique identifier linking your account to a specific payment method and environment. Required for API calls. Intention (Payment Intention / Intent) Defines what the customer intends to pay (amount, currency, method, return URLs). Manages redirects, 3DS, and callbacks. Issuer (Issuing Bank) The cardholder’s bank that approves or declines transactions. K KYC (Know Your Customer) Compliance checks are required for onboarding and payment method activation. KSA Regional marker for Saudi Arabia-specific behavior and requirements. L Live Mode (Production) Real-money environment. Verify descriptors, callbacks, and 3DS before enabling. M MCC (Merchant Category Code) Four-digit code defining the merchant’s business type. Impacts risk rules and payment method availability. MCP (Model Context Protocol) Open protocol that lets AI agents and assistants (e.g. Claude, Cursor) connect directly to a service to perform actions on a user's behalf. For Paymob, this means creating payments, sharing payment links, checking balances, and more without manual dashboard steps. MIT (Merchant-Initiated Transaction) Off-session charges, such as subscriptions. Often 3DS-exempt after an initial authenticated CIT. MPGS (Mastercard Payment Gateway Services) Mastercard’s modern gateway is used by many acquirers. MIGS (Mastercard Internet Gateway Service) Legacy Mastercard gateway, largely replaced by MPGS. MOTO (Mail Order / Telephone Order) Charge cards remotely using securely stored tokens. Use Cases: Hotels: Post-checkout charges. Service providers: Follow-up billing. Medical clinics: Charges without re-presenting the card. N Network Token (Scheme Token) Token issued by card schemes to replace PANs and improve authorization rates. O Order vs. Transaction Order: Your business reference (cart or invoice). Transaction: The payment event (auth, capture, or refund). Always reconcile both. P PCI DSS Security standard for handling card data. Hosted checkout and tokenization reduce PCI scope. Pixel (Native Payment Experience / JS SDK) Embedded payment component for web or mobile. Keeps secrets server-side. Use Cases: E-commerce embedded checkout. Mobile apps. Subscriptions. Public Key Client-side initialization key. Cannot authorize payments on its own. Payment Link (Quick Link) Hosted URL to collect payments without a website. Use Cases: Freelancers Small businesses Events Delivery services R Regional & Central Bank Regulations Direct compliance with local data protection laws, regional regulatory mandates, and specific central bank security guidelines across each jurisdiction in which we operate. Refund Merchant-initiated return of captured funds. BNPL and wallets may impose restrictions. Reconciliation Matching Orders, Transactions, and Payouts. Log merchant_order_id and transaction_id . S Saved Card Token A token representing a card for future charges. Scope and expiry depend on Paymob and the acquirer. Settlement / Payout Transfer of funds from the acquirer to the merchant. Timing varies by payment method and currency. SOC 2 Type II Independent verification of our operational controls regarding security, availability, and processing integrity. Skills (For AI coding agents) Structured knowledge files that teach an AI coding agent how to correctly work with a specific product, API, or platform. For Paymob, they cover integration steps and payment method behavior so the agent can generate accurate code without searching the full docs. Split Payments Distribute one payment across multiple beneficiaries. Impacts settlement and reconciliation. Subscriptions Recurring billing using an initial CIT followed by MITs. Use Cases: Streaming platforms Gyms Education services T Tamara / Tabby – UAE & KSA Regional BNPL providers with unique onboarding, settlement, and refund rules. Tokenization Replacing PANs with tokens to reduce PCI scope and enable saved cards. Transaction Reference IDs Identifiers such as merchant_order_id and Paymob transaction_id . Always log both. U UAE Regional marker for United Arab Emirates-specific behavior. V Void Cancels an authorization before capture. Releases funds immediately. Not the same as a refund. W Wallets (Apple Pay, Google Pay, etc.) Tokenized device or browser payments. Require region-specific setup and merchant/domain verification. Webhooks (Events) Payment lifecycle notifications (authorized, captured, failed, refunded, etc.). Verify HMAC, retry safely, and log all events. • [Overview](https://developers.paymob.com/paymob-docs/payouts-apis/overview.md): Outcome - Serve as the entry point to the Payouts API section, giving a quick overview of what each part does. Last Updated Date - July 30, 2026 The Payouts API lets you send funds to recipients across Egypt's mobile wallets, bank accounts, cards, and cash-collection points, and lets you monitor your account's budget and transaction history, all from your backend. Download the Postman Collection from this link . Every integration starts in Auth ; generate an access token there first, since it's required on every other request in this section. What's Inside Here are the sections inside the Payouts APIs, and what each one covers. Auth Generate and refresh the access token that authenticates every other request. Cashin API Disburse funds instantly through mobile wallets, bank wallets, bank cards, bank transfers, or Egypt Post. Inquires Check the status of transactions you've already sent, or check your account's remaining budget, or Topup status. Topup Add funds to your Payouts merchant budget. Callback Understand how Payouts callbacks work. • [Auth](https://developers.paymob.com/paymob-docs/payouts-apis/auth.md): Outcome - Understand what the Auth section is used for Last Updated Date - July 29, 2026 Overview The Auth section lets you generate and refresh the access token required to authenticate every other request in the Payouts API. Payouts uses OAuth2, issuing a short-lived access token alongside a refresh token that can be used to get a new one without re-sending your username and password. What Is Auth Used For? Exchange your client credentials and account username/password for an access token Refresh an expired access token using a refresh token, without re-authenticating from scratch Authenticate every other request in the Payouts API using the returned Bearer token Available API Operations Generate Token Exchange your client_id , client_secret , username , and password for an access token and refresh token. Refresh Token Get a new access token using your refresh token, without re-sending your username and password. • [Generate Auth Token](https://developers.paymob.com/paymob-docs/payouts-apis/auth/generate-auth-token.md): Outcome - Generate an access token to use for authentication across every other Payouts API request. Last Updated Date - July 29, 2026 You'll need to pass your Client ID , Client Secret , Username , and Password in the body of the request. You should have already received your client credentials via email. If you haven't, please contact your Payouts account manager. • [Refresh Token](https://developers.paymob.com/paymob-docs/payouts-apis/auth/refresh-token.md): Outcome : Refresh an expired access token using your refresh token without resending your username and password. Last Updated Date - July 6, 2026 You'll need to pass your Client ID , Client Secret , Refresh Token , and grant_type=refresh_token In the body of the request. The refresh token is returned alongside the access token in the Generate Token response and stays valid until it's used to generate a new access token. • [Cashin API](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api.md): Outcome - Understand what the Cashin API is used for Last Updated Date - July 29, 2026 The Cashin API lets you disburse funds instantly to a recipient through any of the supported channels — mobile wallets, bank wallets, bank cards, bank transfers, or Egypt Post. What Is the Cashin API Used For? Send a disbursement to a recipient's mobile wallet, bank wallet, bank card, bank account, or Egypt Post Use a single endpoint ( /api/secure/disburse/ ) across all channels; only the issuer value and required fields change per channel Calculate fees and VAT for a disbursement before sending it Available API Operations Since every channel shares the same endpoint and just swaps the issuer value, they're summarized here instead of one block each: Title Description Title Channel issuer value Description Vodafone Cashin vodafone Disburse to a recipient's Vodafone Cash mobile wallet. Etisalat Cash etisalat Disburse to a recipient's Etisalat Cash mobile wallet. Orange Cashin orange Disburse to a recipient's Orange Cash mobile wallet. Bank Wallet bank_wallet Disburse to a recipient's bank wallet. Bank Card Cashin bank_card Disburse to a recipient's bank card/account. Bank Instant Cashin instant_bank Disburse instantly to a recipient's bank account. Egyptian POST post Disburse to a recipient via Egypt Post. • [Vodafone Cashin](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api/vodafone-cashin.md): Outcome - Disburse funds instantly to a recipient's Vodafone Cash mobile wallet. Last Updated Date - July 6, 2026 Authorization Add your access token in the Authorization header preceded by the word " Bearer ". To know how to get your access token, please check the Authentication Request (Generate Token) page. • [Etisalat Cash](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api/etisalat-cash.md): Outcome - Disburse funds instantly to a recipient's Etisalat Cash mobile wallet. Last Updated Date - July 29, 2026 Authorization Add your access token in the Authorization header preceded by the word " Bearer ". To know how to get your access token, please check the Authentication Request (Generate Token) page. • [Orange Cashin](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api/orange-cashin.md): Parameters: - issuer: Wallet/network issuer, fixed to "orange" for this request. - amount: Disbursement amount to send to the recipient. - msisdn: Recipient's Orange Cash mobile wallet number. - full_name: Recipient's full name as registered on the wallet. - client_reference_id: Optional client-generated UUID saved as a reference on the transaction, useful for reconciliation if the response times out. - customer_bears_fees: Optional boolean (defaults to false). If true, the recipient/customer pays the transaction fees and VAT instead of the merchant. • [Bank Wallet](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api/bank-wallet.md): Parameters: - issuer: Wallet/network issuer, fixed to "bank_wallet" for this request. - amount: Disbursement amount to send to the recipient. - msisdn: Recipient's bank wallet mobile number. - full_name: Recipient's full name as registered on the bank wallet. - client_reference_id: Optional client-generated UUID saved as a reference on the transaction, useful for reconciliation if the response times out. - customer_bears_fees: Optional boolean (defaults to false). If true, the recipient/customer pays the transaction fees and VAT instead of the merchant. • [Bank Card Cashin](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api/bank-card-cashin.md): Parameters: - bank_code: Destination bank's short code (e.g. "BOA" = Bank of Alexandria). - amount: Disbursement amount to send to the recipient. - full_name: Recipient's full name as registered on the bank card/account. - bank_card_number: Recipient's bank card number. - comment: Free-text note attached to the transaction. - issuer: Wallet/network issuer, fixed to "bank_card" for this request. - bank_transaction_type: Type of bank transaction to execute (e.g. "cash_transfer"). - client_reference_id: Optional client-generated UUID saved as a reference on the transaction, useful for reconciliation if the response times out. - customer_bears_fees: Optional boolean (defaults to false). If true, the recipient/customer pays the transaction fees and VAT instead of the merchant. • [Bank Instant Cashin](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api/bank-instant-cashin.md): Parameters: - issuer: Wallet/network issuer, fixed to "instant_bank" for this request. - amount: Disbursement amount to send to the recipient. Minimum 112 EGP. - full_name: Recipient's full name as registered on the bank account. - bank_card_number: Recipient's bank account number or IBAN (field name is reused from the bank_card request). - bank_code: Destination bank's code, using the instant_bank corp bank list (e.g. "CIB" = Commercial International Bank). This is a different code list than the one used for bank_card. - client_reference_id: Optional client-generated UUID saved as a reference on the transaction, useful for reconciliation if the response times out. - customer_bears_fees: Optional boolean (defaults to false). If true, the recipient/customer pays the transaction fees and VAT instead of the merchant. • [Egyptian POST](https://developers.paymob.com/paymob-docs/payouts-apis/cashin-api/egyptian-post.md): Parameters: - issuer: Wallet/network issuer, fixed to "post" for this request. - amount: Cash-out amount the recipient can collect at an Egypt Post branch. - full_name: Recipient's full name. - national_id: Recipient's national ID number, used for identification when collecting the cash at the post office. - client_reference_id: Optional client-generated UUID saved as a reference on the transaction, useful for reconciliation if the response times out. - customer_bears_fees: Optional boolean (defaults to false). If true, the recipient/customer pays the transaction fees and VAT instead of the merchant. • [Inquires](https://developers.paymob.com/paymob-docs/payouts-apis/inquires.md): Outcome - Understand what the Inquires section is used for Last Updated Date - July 29, 2026 Overview The Inquiries section lets you check the status of transactions you've already sent, or check your account's remaining budget — instead of relying on callbacks alone. What Is the Inquiries Section Used For? Look up the status of one or more disbursement transactions by transaction ID or by your own reference values Check the remaining budget available in your Payouts account Check the status of a topup request Available API Operations Operation Description Bulk Transaction Inquiry – non-banking Look up the status of non-banking disbursement transactions. Bulk Transaction Inquiry – banking Look up the status of banking disbursement transactions. Bulk Transaction Inquiry – by Reference Look up the status of transactions using your own reference values, instead of transaction IDs. User Budget Inquiry Check the remaining budget available in your Payouts account. Topup Inquiry Check the status of a topup request. • [Bulk Transaction Inquiry non banking](https://developers.paymob.com/paymob-docs/payouts-apis/inquires/bulk-transaction-inquiry-non-banking.md): Parameters: - transactions_ids_list: List of transaction IDs to look up (non-bank transactions). • [Bulk Transaction Inquiry banking](https://developers.paymob.com/paymob-docs/payouts-apis/inquires/bulk-transaction-inquiry-banking.md): Parameters: - transactions_ids_list: List of transaction IDs to look up. - bank_transactions: Flag indicating these are bank-related transactions (true for this banking variant of the inquiry). • [Bulk Transaction Inquiry by Reference](https://developers.paymob.com/paymob-docs/payouts-apis/inquires/bulk-transaction-inquiry-by-reference.md): Outcome - Look up the status of transactions using their custom reference values, instead of transaction IDs. Last Updated Date - July 6, 2026 Authorization Add your access token in the Authorization header preceded by the word " Bearer ". To know how to get your access token, please check the Authentication Request (Generate Token) page. You can pass a list of all the reference values you'd like to inquire about in a single request. Any reference that doesn't match a transaction is silently ignored, so no error is returned for it. • [User Budget Inquiry](https://developers.paymob.com/paymob-docs/payouts-apis/inquires/user-budget-inquiry.md): Outcome - Check the remaining budget available in your Payouts account. Last Updated Date - July 29, 2026 Authorization Add your access token in the Authorization header preceded by the word " Bearer ". To know how to get your access token, please check the Authentication Request (Generate Token) page. • [Topup Inquiry](https://developers.paymob.com/paymob-docs/payouts-apis/inquires/topup-inquiry.md): Retrieves the status of previously submitted topup requests (bank transfer or Accept balance transfer), including status (pending/approved/rejected), balance before/after, and rejection reason if applicable. Note: exact endpoint path inferred from naming convention - please verify against the live docs/Swagger before use. • [Topup](https://developers.paymob.com/paymob-docs/payouts-apis/topup.md): Outcome - Understand what the Topup section is used for Last Updated Date - July 29, 2026 Overview The Topup section lets you add funds to your Payouts merchant budget , either via bank transfer or by transferring balance from your Accept account. What Is the Topup Section Used For? Request a topup by bank transfer, attaching proof of transfer Request a topup by transferring balance from your Accept account Track a topup request's approval status via callback or the Topup Inquiry endpoint Available API Operations Topup Request – bank transfer Request a topup to your Payouts merchant budget via bank transfer. Topup Request – accept balance Request a topup to your Payouts merchant budget by transferring balance from your Accept account. • [Topup Request bank transfer](https://developers.paymob.com/paymob-docs/payouts-apis/topup/topup-request-bank-transfer.md): Outcome - Request a top-up to your Payouts merchant budget via bank transfer. Last Updated Date - July 29, 2026 Authorization Add your access token in the Authorization header preceded by the word " Bearer ". To know how to get your access token, please check the Authentication Request (Generate Token) page. • [Topup Request accept balance](https://developers.paymob.com/paymob-docs/payouts-apis/topup/topup-request-accept-balance.md): Outcome - Request a topup to your Payouts merchant budget by transferring balance from your Accept account. Last Updated Date - July 29, 2026 Authorization Add your access token in the Authorization header preceded by the word " Bearer ". To know how to get your access token, please check the Authentication Request (Generate Token) page. • [Payout Callbacks](https://developers.paymob.com/paymob-docs/payouts-apis/payout-callbacks.md): Outcome - Understand how Payouts callbacks work for both disbursements and topups, and how to configure your callback URLs to get notified automatically instead of polling for status. Last Updated Date - July 29, 2026 Usage Payouts sends two kinds of callbacks, each configured separately: Disbursement callbacks — notify you when a disbursement transaction gets a new status. Topup callbacks — notify you when a topup request gets approved or rejected. Both are POST requests sent to a URL you configure, so you don't have to poll the Bulk Transaction Inquiry or Topup Inquiry endpoints for updates. Setup Both callback URLs are configured through the Payouts Dashboard , in separate fields. Disbursement Callbacks Callbacks are currently only sent for bank transactions (bank card, bank wallet, instant bank). Aman is not supported. Key fields Title Description Field Description transaction_id The unique ID of the disbursement transaction — use this to correlate the callback with the request that created it. issuer The channel the transaction went through (e.g. bank_card ). disbursement_status The transaction's current status (e.g. successful , failed , pending ). status_code / status_description A machine-readable code and human-readable message explaining the status. Topup Callbacks Fires when a topup request is: Approved (manual, automatic/trust-user, or Accept balance transfer) Rejected (manual rejection or failed balance transfer) Sample payload On rejection, balance_before / balance_after come back null and reason is populated. HMAC Verification HMAC signing is not enabled by default . To activate it, reach out to your Payout account manager. Once activated, you'll receive your HMAC secret by email; it's a single value per account, shared across both disbursement and topup callbacks, and can be used to verify incoming requests came from Paymob. Your callback endpoint should respond with a 2xx status code to acknowledge receipt. • [Model Context Protocol (MCP)](https://developers.paymob.com/paymob-docs/model-context-protocol-mcp.md): Who is this for ​ - Merchants, product teams, and developers who want to manage Paymob payments through an AI agent or assistant ​ Outcome ​- Connect an MCP client to your Paymob account and start using it to create payment links and more ​ Last Updated Date ​ - July 16, 2026 Overview The Paymob MCP server lets AI agents (whether you're chatting with an assistant or working in a code editor) manage, send information and take real actions on your Paymob account: creating payment links, checking balances, pulling transactions, and more. It's built on MCP (Model Context Protocol) an open standard that lets use use natural language working the same way across supported clients using one server URL to complete business tasks easier. Server URL: ​ https://mcp.paymob.com/mcp You must have an active Paymob Dashboard account to authenticate with the Paymob MCP server. Chat Assistants For everyday conversations with your Paymob account. Connect the Paymob MCP server to your chat assistant to check balances, look up transactions, and manage your account using plain language, right from the chat you already use daily. Claude Desktop 1. Go to ​ Settings → Connectors ​, click ​ Add ​, and choose ​ Add custom connector 2. Enter a name (e.g. "Paymob") and paste ​ https://mcp.paymob.com/mcp ​ as the URL, then click ​ Add 3. Select Paymob from your Connectors list — it will show "You are not connected to Paymob yet." Click ​ Connect 4. Sign in with your Paymob username and password in the window that opens, then approve the requested permissions ChatGPT 1. Open the profile menu (bottom left) → ​ Settings 2. Go to ​ Plugins ​→ click ​ Browse plugins ​ → click the ​ + ​ icon (top right) to add a new plugin 3. Name it (e.g. "​ Paymob ​"), paste ​ https://mcp.paymob.com/mcp ​ as the Connection URL, leave Authentication set to OAuth, and check "I understand and want to continue" → Click ​ Add 4. Click ​ Sign in with Paymob MCP ​, log in with your Paymob username and password, then review the requested permissions and click ​ Connect IDEs & CLIs For developers connecting Paymob directly into their coding workflow. Connect the Paymob MCP server to your IDE or terminal so your AI coding assistant can call the Paymob tools, and debug payment flows without leaving your editor. Claude Code 1. Add the server: Bash claude mcp add --transport http paymob https://mcp.paymob.com/mcp 2. Run ​ claude mcp list ​ (or ​ /mcp ​ inside a session) — Paymob will show as ​ needs authentication 3. Select Paymob → ​ Authenticate ​, then sign in with your Paymob username and password in the browser window that opens Codex CLI 1. Add the server: Bash codex mcp add paymob --url https://mcp.paymob.com/mcp 2. Codex detects OAuth support and starts the flow automatically — open the authorize URL it prints, sign in with your Paymob username and password, and approve the requested permissions Cursor 1. Go to ​ Settings → Tools & MCPs ​ and click ​ Add Custom MCP ​ (or ​ + New MCP Server ​) — this opens ​ mcp.json 2. Add the server with just the URL: JSON { "mcpServers": { "paymob": { "url": "https://mcp.paymob.com/mcp" } } } 3. Back in ​ Tools & MCPs ​, Paymob will show as ​ Needs authentication ​ — click ​ Connect 4. Sign in with your Paymob username and password, then approve the requested permissions. Once connected, it will show as active with its tools enabled VS Code 1. In your project, create a ​ .vscode ​ folder with an ​ mcp.json ​ file inside it, and paste: JSON { "servers": { "Paymob": { "url": "https://mcp.paymob.com/mcp", "type": "http" } } } 2. Click ​ Start ​ above the server config in the editor 3. When prompted "wants to authenticate to accept.paymob.com," click ​ Allow 4. When prompted to open an external website, click ​ Open 5. Sign in with your Paymob username and password, then approve the requested permissions — VS Code will show the server as ​ Running ​ with its tools listed Test your connection Once connected and authenticated (see the steps for your client above), ask your agent something simple first like "list my available payment methods" to confirm everything is working before running real requests. Use a test account while you get familiar with the available tools, then switch to your live account once you're confident in your setup. Available tools The Paymob MCP server exposes the tools below. We recommend enabling human confirmation for actions that create or change data, since these have real effects on your account. Payment Intentions create_payment_intention ​: Create a payment intention. ​ Requires ​amount, billing data, currency, and payment methods; ​ optionally ​sets expiration, items, notification URL, redirection URL, or special reference. update_payment_intention ​: Modify an existing intention. ​ Requires ​the intention reference; ​ optionally ​updates amount, billing data, expiration, items, notification URL, redirection URL, or special reference. Payment Links create_payment_link ​: Single-customer shareable link. ​ Requires ​amount, live/test mode, and payment methods; ​ optionally ​sets description, email, full name, phone number, expiry, notification/redirection URLs, or reference ID. create_scaling_payment_link ​: Multi-customer link with usage limits. ​ Requires ​amount, live/test mode, unlimited flag, and payment methods; ​ optionally ​sets description, expiry, max attempts, or who it's shared with. get_merchant_payment_links ​: List all payment links get_payment_link_by_token ​: Look up a link by token. Requires the token. Transactions get_merchant_transactions ​: All transactions get_filtered_transactions ​: Transactions with filters. ​ Optional ​filters: amount range, currency, dates, status, and more. export_transactions ​: Export transactions to Excel. ​ Optional ​filters: date range and success/pending status. Transfers get_merchant_transfers ​: All transfers get_filtered_transfers ​: Transfers with filters. ​ Optional ​filters: amount range, dates, status, or transfer ID. Balances & Settlement get_merchant_balances ​: Current balances by account/currency request_instant_settlement ​: Request instant settlement. ​ Requires ​the amount. Invoices create_invoice ​: Create an invoice. ​ Requires ​amount and customer name and phone number; ​ optionally ​includes customer email. get_invoices ​: Retrieve all invoices Reference get_available_payment_methods ​: List available payment methods. ​ Optionally ​filtered by currency and live/test mode. Support create_support_ticket ​: Open a support ticket. ​ Requires ​a subject and description. Security Treat your Paymob login like you would any password — don't share it in public chat sessions. Enable confirmation prompts for sensitive actions if your client supports them. Need help? Ask your agent to re-check the connection, or contact support@paymob.com . • [AI Agent Skill](https://developers.paymob.com/paymob-docs/ai-agent-skill.md): Who this is for ​ - Developers integrating Paymob into a codebase with the help of an AI coding agent. Outcome ​- Your agent produces correct, copy-ready Paymob integration code (Intention API, HMAC verification, mobile wallets, BNPLs, Apple Pay) instead of guessing at the API. Last Updated Date ​- August 16, 2026 Title Description Version 3.3.0 Last updated August 14, 2026 Repository https://github.com/PaymobAccept/Paymob-AI-Integration-Skill Cursor Directory https://cursor.directory/plugins/paymob-integration License MIT Agent skills are instructions AI coding agents load to build faster and more accurately. Paymob's skill teaches your agent the correct integration flow, the exact HMAC field order, and which payment methods apply to your region, so it stops inventing endpoints. Published on the Cursor Directory. Not yet listed in Anthropic's plugin directory, OpenAI's, or Lovable's marketplace, if you search one of those for "Paymob" and find nothing, that is expected. No listing is needed either way: every method below installs straight from the repository, and the Claude Code path registers it as a custom marketplace. Install Pick the row that matches your tool. Everything else on this page works the same afterwards. Your tool Go to Anything ​ — the fastest route Just ask your agent Claude Code / Cowork ​ — adds live account access Claude Code plugin Cursor Cursor Directory Codex, Windsurf, Copilot, ChatGPT, Gemini, Lovable Every other tool Option 1 — Just ask your agent (easiest) Works with any agent that can install a skill. Paste this: Text Install the Paymob integration skill from https://github.com/PaymobAccept/Paymob-AI-Integration-Skill/tree/main/skills/paymob-integration The agent fetches it and installs it where its own convention expects. Agent Where it lands OpenAI Codex Via its ​ $skill-installer ​, into ​ ~/.codex/skills/paymob-integration Claude Code As a personal skill in ​ ~/.claude/skills/paymob-integration/ ​, plus the three slash commands in ​ ~/.claude/commands/ Keep the /tree/main/skills/paymob-integration part of the URL. The repository root is a multi-agent plugin package, not a standalone skill directory — an agent pointed at the bare root can install the wrong tree. Then start a fresh session. ​ Skills and commands are read at session start, so they will not appear in the session that installed them. This is the most common reason people think the install failed. This path installs the skill only. It does ​ not ​ register the Paymob MCP server, so there is no live account access — use Option 2 for that. Option 2 — Claude Code plugin (adds live account access) Registers the repository as a custom marketplace, then installs the plugin. This also auto-registers Paymob's live MCP server, so your agent gets integration knowledge ​ and ​ live account access in one step. Bash claude plugin marketplace add PaymobAccept/Paymob-AI-Integration-Skill claude plugin install paymob-integration@paymob A shell claude plugin install does not take effect in a session that is already running. Run /reload-plugins in that session, or restart Claude Code, before the skill and its commands appear. Installs at user scope by default. Pass ​ --scope project ​ to share it with everyone who clones your repository. Cowork (Claude desktop) ​ uses the same package: add ​ PaymobAccept/Paymob-AI-Integration-Skill ​ as a custom marketplace source, then install ​ Paymob Integration ​. Option 3 — Cursor Directory Listed at cursor.directory/plugins/paymob-integration . Open the listing and use ​ Add to Cursor ​ on the components you want: Component What it gives you Skill ​ ​ paymob-integration The full integration guidance MCP Server ​ ​ paymob Live account access — payment links, transactions, balances, settlements Commands ​ ×3 /paymob-test-cards ​, ​ /paymob-explain-error ​, ​ /paymob-check-hmac Install the Skill component alongside the commands. Each command reads the skill's reference files at run time and stops rather than answering from memory when it cannot reach them, so a command installed on its own is safe but inert. Every other tool Tool How Windsurf, Copilot, Codex, Cursor Drop ​ AGENTS.md ​ into your project root (below) ChatGPT, Gemini, Claude.ai, Copilot Chat Paste ​ universal-prompt.md ​ into system prompt / custom instructions Lovable Import the release ZIP under ​ Settings → Skills Claude.ai / ChatGPT upload Upload the release ZIP on the skill-upload screen Local development claude --plugin-dir ./Paymob-AI-Integration-Skill ​ from the parent folder of a clone AGENTS.md ​ is an open standard coding agents read automatically from your project root — supported by Codex, Cursor, Copilot, Windsurf, Gemini CLI, Aider, Zed and more: Bash curl -O https://raw.githubusercontent.com/PaymobAccept/Paymob-AI-Integration-Skill/main/AGENTS.md Already have an ​ AGENTS.md ​? Paste this one's contents into it under a ​ ## Paymob ​ heading. Release ZIP ​ for upload-based tools — do not use GitHub's ​ Code → Download ZIP ​, which is the whole repository: Text https://github.com/PaymobAccept/Paymob-AI-Integration-Skill/releases/latest/download/paymob-integration.zip Prefer a pinned editor rules file? ​ Save ​ universal-prompt.md ​ at the path your tool checks: ​ .cursor/rules/paymob.mdc ​ (Cursor), ​ .windsurf/rules/paymob.md ​ (Windsurf), ​ .github/copilot-instructions.md ​ (Copilot). Same content as ​ AGENTS.md ​, different location — use whichever convention your team already follows. Slash commands Claude Code and Cursor both get three commands for the lookups you would otherwise interrupt your work to search for. Each reads from the skill's own reference files, so nothing drifts out of sync. Command What it does /paymob-test-cards [card|wallet|kiosk|bnpl] Sandbox test cards, wallet numbers and OTPs. Notes the 30-day sandbox expiry, and reports plainly that kiosk and BNPL cannot be tested in sandbox rather than offering a card as a stand-in. /paymob-explain-error <code, status, or message> Looks up a Paymob error, explains the cause, and pulls the corrected snippet for your stack. Falls back to the live docs index for anything not catalogued instead of guessing. /paymob-check-hmac [path] Audits your webhook HMAC implementation: SHA-512 (not SHA-256), exact field order, ​ body.obj ​ sourcing, no ​ obj.id ​/​ obj.order.id ​ mix-up, fail-closed on mismatch, and unique-constraint-backed idempotency. Examples: Text /paymob-test-cards wallet /paymob-explain-error 401 on intention create /paymob-check-hmac src/webhooks/paymob.ts /paymob-check-hmac never asks you to paste your HMAC secret, API key or Secret Key. It audits your code statically, and if it ever needs to compute a signature it reads the secret from an environment variable and never echoes it. Use the HMAC validator at https://wizard.paymob.com/ for isolated testing. Confirm it worked After a ​ fresh session ​, any of these confirms the install: Type ​ /paymob ​ — the three commands should appear in the menu. Ask ​ "What Paymob payment methods do you support?" ​ — you should get specifics (cards, wallets, BNPLs, kiosk, Apple Pay, per region), not a generic answer. For the plugin install, run ​ claude plugin details paymob-integration ​. You should see 4 skills and 1 MCP server. Usage Ask in plain English: "Add Paymob card payments to my checkout" "Add Vodafone Cash wallet payments to my Laravel backend" "My Paymob HMAC validation keeps failing — here's my code…" "Set up Paymob subscriptions with Python/FastAPI" "Reconcile a Paymob order that's stuck pending" The skill routes you by platform first. On Shopify, WooCommerce, Magento, Odoo and other platforms with an official Paymob plugin, it points you at that plugin instead of hand-writing checkout code. Testing before go-live Use the sandbox test cards and wallet numbers from ​ /paymob-test-cards ​, then run the full loop: create intention → checkout → pay with a test card → confirm the callback fires → confirm HMAC verifies → confirm the order updates. Kiosk and BNPL cannot be tested in sandbox at all. This does not block go-live: every method uses the same Intention API, Unified Checkout and callback path, so a passing card test validates effectively all of your integration code. Enable the remaining methods in the Dashboard and launch — then on the first real transaction for each method, confirm the Integration ID is right, log the callback once to confirm your HMAC still matches, and remember kiosk settles asynchronously (the callback can arrive days later) and does not support refunds. Sandbox test data expires after ​ 30 days ​. Paymob does not officially document decline-simulation cards — ask your account manager if you need failure-path testing rather than guessing. Security Only the Public Key (pk_*) is safe in frontend code. The Secret Key, API Key and HMAC Secret are server-side only — never commit them and never ship them in a mobile binary. The HMAC-verified webhook callback is the source of truth ​ for payment status — never the browser redirect parameters, and never a mobile SDK result. Verify with ​ SHA-512 ​ and a timing-safe comparison. A non-matching HMAC must cause ​ no state change ​. Process callbacks atomically: a unique constraint on ​ obj.id ​, a compare-and-set on order state, and a uniquely keyed transactional outbox, all in one transaction. Use ​ order.id ​ / ​ special_reference ​ only for correlation — one order can have several payment attempts. Amounts are in ​ cents/piasters ​ (​ 10000 ​ = 100.00 EGP). Found a security issue in the skill itself? Report it privately to security@paymob.com , or open a GitHub Security Advisory . Please don't file a public issue for an unpatched vulnerability, and don't include real keys in a report. Live account access — Paymob MCP server Beyond generating code, agents can act on a real Paymob account through Paymob's official MCP server: create payment intentions and links, pull transactions and balances, export reports, request settlements (~25 tools). The Claude Code plugin bundles it, and it is a one-click component on the Cursor listing. To add it anywhere else: Bash claude mcp add --transport http paymob https://mcp.paymob.com/mcp codex mcp add paymob --url https://mcp.paymob.com/mcp You authenticate in-session with your own Paymob API credentials. ​ Use test mode first ​ — it includes money-movement tools. It complements but does not replace the HMAC-verified webhook as your source of truth. Troubleshooting Symptom Cause / fix Commands or skill don't appear after install You're still in the session that installed them. Run ​ /reload-plugins ​, or start a fresh session. A command replies that it can't read its reference file It is installed without the skill. Install the ​ Skill ​ component too — the command refuses rather than guessing at a field order it cannot read. Nothing found searching Anthropic's or OpenAI's directory Expected — listed on the Cursor Directory only so far. Use the repo as a custom marketplace source (Option 2). 401 ​ on intention create Wrong or expired Secret Key, or the ​ Authorization ​ header is missing the literal word ​ Token ​ — it is ​ Token <key> ​, not ​ Bearer ​. 404 Integration ID does not exist Test/Live mismatch between Secret Key and Integration ID, wrong region base URL, or the ID is not on this account. HMAC mismatch Wrong secret, wrong field order, or SHA-256 used instead of SHA-512. The POST callback uses ​ obj.id ​ / ​ obj.order.id ​; the GET redirect uses ​ id ​ / ​ order_id ​. Run ​ /paymob-check-hmac ​. Amount wrong by 100× Amounts are in cents/piasters. Checkout not rendering Wrong ​ publicKey ​ (must be the Public Key, not the Secret), or a stale ​ client_secret ​ — it is single-use. Order stuck pending The callback never arrived. Use the Transaction Inquiry fallback to reconcile. Legitimate for kiosk, where the customer pays cash later. Deeper help: developer docs · Integration Wizard · community forum · support@paymob.com