Sahl سهل - Payments Made Easy icon

Sahl data API: bills, NFC meters and wallet

EgyptPay · Payments 4.7 ★

Sahl سهل - Payments Made Easy is EgyptPay's consumer bill-pay and prepaid-meter app for Egypt — the NFC-charge client Globaltronics / EgyptPay ships for households that still top up electricity, water and gas cards at a kiosk. After a phone-number and password sign-in (Google, Facebook and Apple are also wired), the home grid covers fifty-plus Egyptian services: prepaid and postpaid electricity including Egyptian Electricity Holding Company meters and NFC cards from Elsewedy, Korra, Taqa, Prime Energy and Travco; prepaid and postpaid water; gas; mobile top-up and postpaid; landline; TV; donations; university fees; game vouchers; insurance; syndicates; taxes; clubs; microfinance; installments; Ministry of Justice claims; and GoBus / Blue Bus tickets. Users pay with a Visa, Mastercard or Meeza card, a Meeza wallet, Valu installments, InstaPay, or the in-app Sahl Balance, then keep receipts and prepaid consumption charts; a retailer mode mirrors the same catalog for shopkeepers who collect on behalf of customers. The Play listing rates it 4.7 stars from about 302,000 reviews with 5 million-plus downloads and ranks it among Egypt's top free finance apps. Support sits at [email protected] and 0235372501, and EgyptPay also issues a pickup Sahl Card (CBE / Visa) after KYC. Copy is Arabic and English. In-market it sits beside Fawry, Bee and the Vodafone, Orange and e& Egypt self-care apps.

Prepaid-meter units and postpaid totalAmount come back in one bill-lookup payload keyed by serviceCode, cardId and companyId, with debtsAmount whenever a meter still owes its distribution company. A card tap then yields the remaining balance plus a month-by-month units series by month and year, and fulfilment returns the cardPayLoad that is written back onto the card.

Checkout stamps orderId, transactionId, fees, serviceFees and paymentStatus onto an EGP receipt whichever rail settles it — InstaPay, Meeza, Valu, a card or the in-app wallet balance. Utility-reconciliation teams, household-finance apps and micro-lenders pull those receipts and meter histories to match kiosk and NFC top-ups, chart family spend and size installments; openData Studio turns the same fields into callable open data.

Screenshots

  • Sahl سهل - Payments Made Easy screenshot 1
  • Sahl سهل - Payments Made Easy screenshot 2
  • Sahl سهل - Payments Made Easy screenshot 3
  • Sahl سهل - Payments Made Easy screenshot 4
  • Sahl سهل - Payments Made Easy screenshot 5
  • Sahl سهل - Payments Made Easy screenshot 6
  • Sahl سهل - Payments Made Easy screenshot 7
  • Sahl سهل - Payments Made Easy screenshot 8

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Phone-number login

    POST /v1/auth/sessions osint

    Exchanges the registered Egyptian mobile and password for accessToken, refreshToken and the customerId that gate every later bill, NFC and wallet call.

    Auth: Unauthenticated. Body is phoneNumber and password; response accessToken is sent as Authorization: Bearer on later calls, with refreshToken for renewal.

    • phoneNumber
    • password
    • deviceId
    • accessToken
    • refreshToken
    • customerId
    • userId
    • fullName
    • email
    • locale
    • success
    POST /v1/auth/sessions HTTP/1.1
    Content-Type: application/json
    
    {
      "phoneNumber": "01012345678",
      "password": "********",
      "deviceId": "android-udid-9f3a"
    }
    {
      "success": true,
      "accessToken": "<access-token>",
      "refreshToken": "rt-sahl-7c21",
      "customerId": "cust-88421",
      "userId": "usr-10482",
      "fullName": "Mona Said",
      "phoneNumber": "01012345678",
      "email": "[email protected]",
      "locale": "ar"
    }
  • Bill and top-up lookup

    POST /v1/billers/quotes opendata

    Looks up the amount due or allowed top-up for any catalog service — prepaid/postpaid electricity, water, gas, mobile, landline, donations, education, taxes, syndicates, clubs, microfinance, insurance — returning totals, fees and meter debts in EGP.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • serviceCode
    • serviceName
    • companyName
    • companyId
    • cardId
    • accountNumber
    • totalAmount
    • fees
    • serviceFees
    • adminFees
    • debtsAmount
    • debtValueInEgp
    • currency
    • units
    • bills
    • billId
    • amount
    • issueDate
    • success
    POST /v1/billers/quotes HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "serviceCode": "ELECTRICITY_PREPAID",
      "cardId": "GT-889120045",
      "companyId": 12,
      "accountNumber": "314572891"
    }
    {
      "success": true,
      "serviceCode": "ELECTRICITY_PREPAID",
      "serviceName": "Prepaid electricity",
      "companyName": "South Cairo Electricity",
      "companyId": 12,
      "cardId": "GT-889120045",
      "accountNumber": "314572891",
      "totalAmount": 250.0,
      "fees": 5.0,
      "serviceFees": 3.5,
      "adminFees": 1.5,
      "debtsAmount": 40.0,
      "debtValueInEgp": 40.0,
      "currency": "EGP",
      "units": 87.5,
      "bills": [{"billId": "b-4419", "amount": 250.0, "issueDate": "2026-10-01"}]
    }
  • Prepaid meter consumption history

    POST /v1/meters/usage opendata

    Returns remaining prepaid credit and the month-by-month units/amount series that powers the electricity, water and gas consumption charts.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • serviceCode
    • cardId
    • companyId
    • balance
    • units
    • currency
    • month
    • year
    • amount
    • success
    POST /v1/meters/usage HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "serviceCode": "ELECTRICITY_PREPAID",
      "cardId": "GT-889120045",
      "companyId": 12
    }
    {
      "success": true,
      "cardId": "GT-889120045",
      "companyId": 12,
      "balance": 163.25,
      "units": 87.5,
      "currency": "EGP",
      "monthlyConsumptionData": [
        {"month": 8, "year": 2026, "units": 92.0, "amount": 210.5},
        {"month": 9, "year": 2026, "units": 87.5, "amount": 198.0}
      ]
    }
  • NFC card balance check

    POST /v1/cards/balance-check openbanking

    Reads remaining credit on a Globaltronics / Elsewedy prepaid electricity card after the phone NFC-taps it, via the card vendor's meter-reading service.

    Auth: Session after login; body is the NFC card dump from the on-device meter reader.

    • cardId
    • companyId
    • vendorId
    • payload
    • balance
    • units
    • debtsAmount
    • currency
    • success
    POST /v1/cards/balance-check HTTP/1.1
    Content-Type: application/json
    
    {
      "cardId": "GT-889120045",
      "companyId": 12,
      "vendorId": "ELSEWEDY",
      "payload": "<nfc-card-bytes>"
    }
    {
      "success": true,
      "cardId": "GT-889120045",
      "companyId": 12,
      "vendorId": "ELSEWEDY",
      "balance": 163.25,
      "units": 87.5,
      "debtsAmount": 0.0,
      "currency": "EGP"
    }
  • NFC card read

    POST /v1/cards/read opendata

    Identifies the tapped prepaid card — cardId, disco companyId, vendor (Elsewedy / Korra / Taqa) and current units — before a top-up is priced.

    Auth: Session after login; body is the raw NFC meter dump from the on-device reader.

    • payload
    • deviceId
    • cardId
    • cardUUID
    • companyId
    • companyName
    • vendorId
    • units
    • balance
    • success
    POST /v1/cards/read HTTP/1.1
    Content-Type: application/json
    
    {
      "payload": "<nfc-card-bytes>",
      "deviceId": "android-udid-9f3a"
    }
    {
      "success": true,
      "cardId": "GT-889120045",
      "cardUUID": "c9e1-44aa-91f0",
      "companyId": 12,
      "companyName": "South Cairo Electricity",
      "vendorId": "ELSEWEDY",
      "units": 87.5,
      "balance": 163.25
    }
  • Create a payment order

    POST /v1/orders/prepare openfinance

    Opens a checkout order for the enquired bill or prepaid top-up and returns the payable totalAmount plus fee split before a payment method is chosen.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • serviceCode
    • cardId
    • amount
    • totalAmount
    • fees
    • serviceFees
    • adminFees
    • currency
    • orderId
    • paymentStatus
    • success
    POST /v1/orders/prepare HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "serviceCode": "ELECTRICITY_PREPAID",
      "cardId": "GT-889120045",
      "amount": 250.0,
      "currency": "EGP"
    }
    {
      "success": true,
      "orderId": "ord-220184",
      "totalAmount": 255.0,
      "amount": 250.0,
      "fees": 5.0,
      "serviceFees": 3.5,
      "adminFees": 1.5,
      "currency": "EGP",
      "paymentStatus": "PENDING"
    }
  • Checkout order

    POST /v1/orders/checkout openfinance

    Commits the checkout against InstaPay, Meeza wallet, card, Valu or Sahl Balance and returns transactionId plus any paymentCode the user must confirm.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • orderId
    • transactionId
    • paymentStatus
    • totalAmount
    • amount
    • currency
    • instapay
    • paymentCode
    • success
    POST /v1/orders/checkout HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "orderId": "ord-220184",
      "paymentMethod": "INSTAPAY",
      "amount": 255.0,
      "currency": "EGP"
    }
    {
      "success": true,
      "orderId": "ord-220184",
      "transactionId": "txn-918273",
      "paymentStatus": "PENDING_CONFIRMATION",
      "totalAmount": 255.0,
      "currency": "EGP",
      "instapay": {"paymentCode": "IPA-mona@bank"}
    }
  • Fulfil a paid order

    POST /v1/orders/fulfil openfinance

    Fulfils a paid prepaid order: returns the NFC cardPayLoad the on-device meter library writes onto the electricity, water or gas card, or flags confirmDelivery when a charge is still in transit.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • orderId
    • cardId
    • cardPayLoad
    • paymentStatus
    • units
    • balance
    • confirmDelivery
    • success
    POST /v1/orders/fulfil HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "orderId": "ord-220184",
      "cardId": "GT-889120045",
      "cardPayLoad": "<nfc-write-bytes>"
    }
    {
      "success": true,
      "orderId": "ord-220184",
      "paymentStatus": "PAID",
      "cardPayLoad": "<recharge-apdu>",
      "units": 175.0,
      "balance": 413.25,
      "confirmDelivery": false
    }
  • Order receipt search

    POST /v1/receipts/search openfinance

    Pages the signed-in customer's payment history — the receipts screen — filterable by serviceCode and date, with totals, fees and paymentStatus per order.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • customerId
    • serviceCode
    • serviceName
    • receiptId
    • orderId
    • transactionId
    • totalAmount
    • fees
    • currency
    • paymentStatus
    • createdAt
    • success
    POST /v1/receipts/search HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "customerId": "cust-88421",
      "serviceCode": "ELECTRICITY_PREPAID",
      "fromDate": "2026-09-01",
      "toDate": "2026-10-20"
    }
    {
      "success": true,
      "receipts": [
        {
          "receiptId": "rcpt-77102",
          "orderId": "ord-220184",
          "transactionId": "txn-918273",
          "serviceCode": "ELECTRICITY_PREPAID",
          "serviceName": "Prepaid electricity",
          "totalAmount": 255.0,
          "fees": 5.0,
          "currency": "EGP",
          "paymentStatus": "PAID",
          "createdAt": "2026-10-18T19:04:11Z"
        }
      ]
    }
  • Order receipt by id

    POST /v1/receipts/lookup openfinance

    Returns the full receipt for one order, including fee split, meter/card identifiers and paymentStatus, for the receipt-detail screen.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • receiptId
    • orderId
    • transactionId
    • serviceCode
    • totalAmount
    • amount
    • fees
    • serviceFees
    • adminFees
    • currency
    • paymentStatus
    • createdAt
    • accountNumber
    • cardId
    • success
    POST /v1/receipts/lookup HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "orderId": "ord-220184"
    }
    {
      "success": true,
      "receiptId": "rcpt-77102",
      "orderId": "ord-220184",
      "transactionId": "txn-918273",
      "serviceCode": "ELECTRICITY_PREPAID",
      "totalAmount": 255.0,
      "amount": 250.0,
      "fees": 5.0,
      "serviceFees": 3.5,
      "adminFees": 1.5,
      "currency": "EGP",
      "paymentStatus": "PAID",
      "createdAt": "2026-10-18T19:04:11Z",
      "accountNumber": "314572891",
      "cardId": "GT-889120045"
    }
  • Sahl Balance accounts

    GET /v1/wallet/accounts openbanking

    Reads the in-app Sahl Balance wallet used as a payment method and as the destination for cash-in / cash-out.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • customerId
    • accountId
    • accountNumber
    • balance
    • currency
    • status
    • success
    GET /v1/wallet/accounts HTTP/1.1
    Authorization: Bearer <accessToken>
    {
      "success": true,
      "customerId": "cust-88421",
      "accountId": "bal-1001",
      "accountNumber": "SAHL-1001",
      "balance": 840.50,
      "currency": "EGP",
      "status": "ACTIVE"
    }
  • Savings fund balances

    GET /v1/savings/holdings openfinance

    Returns holdings on Sahl's savings / WallStreet funds — fundId, nav, units and marked-to-market balance in EGP.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • fundId
    • nav
    • units
    • balance
    • currency
    • success
    GET /v1/savings/holdings HTTP/1.1
    Authorization: Bearer <accessToken>
    {
      "success": true,
      "funds": [
        {
          "fundId": "azimut-gold",
          "nav": 18.42,
          "units": 120.0,
          "balance": 2210.40,
          "currency": "EGP"
        }
      ]
    }
  • Payment-code lookup

    POST /v1/payment-codes/resolve openfinance

    Resolves a Sahl Pay merchant payment code so the payer can see totalAmount and codeStatus before paying it from the wallet or a card.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • paymentCode
    • codeValue
    • codeStatus
    • totalAmount
    • currency
    • serviceName
    • description
    • success
    POST /v1/payment-codes/resolve HTTP/1.1
    Authorization: Bearer <accessToken>
    Content-Type: application/json
    
    {
      "paymentCode": "SAHL-992811",
      "serviceCode": "SAHLPAY_ENQUIRE"
    }
    {
      "success": true,
      "paymentCode": "SAHL-992811",
      "codeValue": "SAHL-992811",
      "codeStatus": "UNPAID",
      "totalAmount": 175.0,
      "currency": "EGP",
      "serviceName": "Merchant collect",
      "description": "Cafe bill"
    }
  • Card payment capture

    POST /v1/card-payments/charge openfinance

    Captures a saved Visa/Mastercard/Meeza method through the card-acceptance gateway after the scoped token is minted.

    Auth: Payment-scoped accessToken minted by a separate scoped-token call, sent as Authorization: Bearer.

    • orderId
    • amount
    • currency
    • cardId
    • transactionId
    • paymentStatus
    • totalAmount
    • success
    POST /v1/card-payments/charge HTTP/1.1
    Authorization: Bearer <payment-scoped-token>
    Content-Type: application/json
    
    {
      "orderId": "ord-220184",
      "amount": 255.0,
      "currency": "EGP",
      "cardId": "pm-visa-4411"
    }
    {
      "success": true,
      "orderId": "ord-220184",
      "transactionId": "txn-918273",
      "paymentStatus": "PAID",
      "totalAmount": 255.0,
      "currency": "EGP"
    }
  • Quick Pay saved services

    GET /v1/saved-services opendata

    Lists the customer's saved Quick Pay meters, bills and donation targets so the home screen can re-enquire them in one tap.

    Auth: Authorization: Bearer accessToken from POST /v1/auth/sessions, plus deviceId.

    • serviceCode
    • serviceName
    • cardId
    • accountNumber
    • companyName
    • success
    GET /v1/saved-services HTTP/1.1
    Authorization: Bearer <accessToken>
    {
      "success": true,
      "items": [
        {
          "serviceCode": "ELECTRICITY_PREPAID",
          "serviceName": "Prepaid electricity",
          "cardId": "GT-889120045",
          "accountNumber": "314572891",
          "companyName": "South Cairo Electricity"
        }
      ]
    }

Data categories

  • bills
  • balances
  • transactions
  • prepaid-meters
  • payments
  • receipts
  • identity

Where teams use this data

  • Utility-disco prepaid reconciliation

    An electricity distribution company matches nightly AvailOrder rows — cardId, companyId, units and cardPayLoad — against meter writes so kiosk top-ups and Sahl NFC charges land on the same subscriber ledger.

  • EGP bill-pay spend analytics

    A household-finance app pages FilteredOrderReceipts for totalAmount, fees, serviceCode and createdAt to chart what a family spends on electricity, water, gas, mobile and donations in EGP.

  • Lending stack income proxy

    A micro-lender reads EnquireConsumption month/year units plus Sahl Balance and fund nav holdings as a cash-flow proxy before quoting a Tamweely- or Forsa-style installment.

  • Merchant Sahl Pay collect

    A cafe or retailer issues a paymentCode, then watches codeStatus and totalAmount on inquire so InstaPay and Meeza captures close the same till as card checkout.

Frequently asked questions

What bill and meter data does Sahl expose?

The bill-lookup call returns totalAmount, fees, serviceFees, debtsAmount and units for prepaid and postpaid electricity, water, gas, mobile, landline, donations, education, taxes and more, keyed by serviceCode, cardId and companyId. A usage-history call adds the month/year units series used on the prepaid consumption chart.

How does Sahl charge an NFC electricity card?

After an NFC tap, the card-read and balance-check calls identify cardId, vendorId and the remaining balance. The payment-order calls collect EGP, then fulfilment returns a cardPayLoad that the on-device meter library writes back onto the card.

Which payment methods appear on the checkout API?

Checkout and the card-capture call cover Visa/Mastercard/Meeza cards, Meeza wallets, Valu installments, InstaPay (with a paymentCode) and the in-app Sahl Balance. Receipts stamp paymentStatus, transactionId and the fee split.

How does the app authenticate?

A phone number and password exchanged at POST /v1/auth/sessions mint an accessToken and refreshToken. Later bill, wallet and receipt calls send Authorization: Bearer plus a deviceId; card capture uses a short-lived payment-scoped token.

Apps similar to Sahl سهل - Payments Made Easy

  • myfawry — myfawry is Fawry's Egypt consumer app for paying bills from a saved debit or credit card, with a Banque Misr / Meeza yellowcard prepaid card that can be funded via InstaPay and used at Fawry Plus stores.
  • InstaPay Egypt — InstaPay Egypt is the Central Bank of Egypt instant-payment app that links bank accounts and Meeza prepaid cards so users can send money 24/7 and pay telecom, utility and recharge bills.
  • OPay Egypt — OPay Egypt is a bill-payment app for electricity, water, gas and internet bills, mobile recharge, installments, government fees, school and university fees, and donations.
  • WE Pay EG — WE Pay EG is Telecom Egypt's Banque Misr wallet for cash-in/out, transfers to other Egyptian e-wallets, WE bills, and electricity, water and gas payments including NFC electricity-card recharge.
  • Orange Max it - Egypt — Orange Max it is Orange Egypt's subscriber app for managing Orange mobile and home-internet lines and using Orange Cash to send money, recharge lines and pay utility bills.
  • etisalat money - EG — etisalat money is e& Egypt's mobile-wallet app for transfers to other wallets, utility-bill payments, cash-out at etisalat stores and ATMs, merchant purchases, airtime recharge and donations.
  • Ana Vodafone — Ana Vodafone is Vodafone Egypt's subscriber app for managing internet, minutes and other Vodafone services from a phone in Egypt or while roaming.
  • eKhales — eKhales is e-finance's Egypt payments app for settling bills in one place, with multiple payment methods and a history of past payments.

Topics

  • Sahl API
  • Sahl Pay Egypt
  • EgyptPay bill pay
  • NFC electricity card Egypt
  • bill enquiry API
  • InstaPay Meeza
  • prepaid meter units
  • Sahl Balance
  • EGP receipts
  • Globaltronics Sahl

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote