Sahl data API: bills, NFC meters and wallet
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
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/sessionsosintExchanges 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
- 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/quotesopendataLooks 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/usageopendataReturns 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-checkopenbankingReads 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/readopendataIdentifies 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/prepareopenfinanceOpens 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/checkoutopenfinanceCommits 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/fulfilopenfinanceFulfils 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/searchopenfinancePages 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/lookupopenfinanceReturns 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/accountsopenbankingReads 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/holdingsopenfinanceReturns 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/resolveopenfinanceResolves 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/chargeopenfinanceCaptures 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-servicesopendataLists 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