Konnash bookkeeping data API: ledgers, wallet, bills
inyad Konnash is an offline-first merchant bookkeeping app whose data API syncs credit-book customers and cash drawers, then moves money through inyad Pay. A session starts at /v1/session/bootstrap, which returns accessToken, refreshToken, customers, ledger entries, drawers and walletAccounts. Later writes go to paths such as /v1/ledger/customers/sync and /v1/wallet/transfers/execute.
inyad Konnash is a merchant bookkeeping app for credit ledgers, cash drawers and inyad Pay wallet transfers. After a session bootstrap the client syncs customers, credit-book entries and cashbook in/out offline, then calls wallet pay/top-up, payment-link collection, unpaid-bill lookup and KYC status when the merchant needs to move money or settle utilities.
Screenshots
API surface
Connect merchant session
POST
/v1/session/bootstrapopenfinanceOpens a Konnash mobile session and returns the merchant snapshot used to hydrate local books: tokens, account, customers, credit-book transactions, cashbook rows, drawers, wallet accounts, billers and payment links.
Auth: Authorization Bearer token (Firebase/session) plus Accept-Language; response issues accessToken and refreshToken used on later calls.
- accessToken
- refreshToken
- newAccount
- account.id
- account.accountReference
- account.name
- account.subscriptionPlanId
- customers
- transactions
- cashbookTransactions
- drawers
- walletAccounts
- billers
- paymentLinks
- payoutChannels
- users
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/session/bootstrap HTTP/1.1 Authorization: Bearer <firebase-or-prior-accessToken> Accept-Language: en{ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example", "refreshToken": "rt_8c21f0ab", "newAccount": false, "account": { "id": 10482, "accountReference": "ACC-EG-10482", "name": "Cairo Grocery", "creationDate": 1719926400000, "modificationDate": 1758960000000, "expirationDate": 1790496000000, "subscriptionPlanId": 3 }, "customers": [{"uuid": "c-1a2b", "firstName": "Mona", "lastName": "Said", "phone": "+201001111111", "totalAmount": 1250.5}], "transactions": [{"uuid": "t-9c3d", "amount": 250.0, "isIn": true, "customerUuid": "c-1a2b"}], "cashbookTransactions": [], "drawers": [{"uuid": "d-aa01", "name": "Front till", "status": "OPEN"}], "walletAccounts": [{"phone": "+201000000001", "balanceInCents": 540000, "currency": "EGP", "status": "ACTIVE"}], "billers": [{"code": "EEHC", "displayName": "Electricity", "countryCode": "EG"}], "paymentLinks": [], "payoutChannels": [], "users": [] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's merchant sign-in and first-run account hydrationfield set mirrors the dashboard snapshot: tokens, account, customers, ledger entries, drawers, wallet accounts, billers and payment links
Synchronize credit-book customers
POST
/v1/ledger/customers/syncopendataPushes offline-created credit-book customers (debtors and suppliers) and receives server ids, running totalAmount and sync flags so the merchant ledger can work without a constant network.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- uuid
- firstName
- lastName
- phone
- emailAddress
- address
- city
- country
- notes
- totalAmount
- isSupplier
- autoReminder
- collectionDate
- situationReference
- customerTagUuids
- userUuid
- deleted
- isSynchronized
- modificationDate
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ledger/customers/sync HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json [ { "uuid": "c-1a2b3c4d", "firstName": "Mona", "lastName": "Said", "phone": "+201001111111", "emailAddress": "[email protected]", "address": "12 Tahrir St", "city": "Cairo", "country": "EG", "notes": "Weekly bread account", "totalAmount": 1250.5, "isSupplier": false, "autoReminder": true, "collectionDate": "2026-10-01", "situationReference": "SIT-88", "customerTagUuids": ["tag-retail"], "userUuid": "u-merchant-1", "deleted": false, "isSynchronized": false, "modificationDate": 1758960000000 } ]{ "items": [ { "id": 55120, "uuid": "c-1a2b3c4d", "firstName": "Mona", "lastName": "Said", "phone": "+201001111111", "emailAddress": "[email protected]", "city": "Cairo", "country": "EG", "totalAmount": 1250.5, "isSupplier": false, "situationReference": "SIT-88", "userId": 10482, "userUuid": "u-merchant-1", "isSynchronized": true, "modificationDate": 1758960120000 } ] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's credit-book customer list and its offline-first syncfield set mirrors the debtor/supplier edit form and the running-balance column
Synchronize credit-book transactions
POST
/v1/ledger/entries/syncopenfinanceUploads credit/debit lines against a customer (multipart so receipt photos can ride along) and returns server ids plus imageUrl for the credit book.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- uuid
- amount
- isIn
- date
- notes
- customerId
- customerUuid
- storeId
- storeUuid
- isArchived
- archivalDate
- imageBody
- imageUrl
- deleted
- isSynchronized
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ledger/entries/sync HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: multipart/form-data { "uuid": "t-9c3d", "amount": 250.0, "isIn": true, "date": "2026-09-27", "notes": "Partial collection", "customerUuid": "c-1a2b3c4d", "storeUuid": "st-main", "isArchived": false, "imageUrl": null, "deleted": false, "isSynchronized": false }{ "items": [ { "id": 88011, "uuid": "t-9c3d", "amount": 250.0, "isIn": true, "date": "2026-09-27", "notes": "Partial collection", "customerId": 55120, "customerUuid": "c-1a2b3c4d", "storeId": 12, "storeUuid": "st-main", "isArchived": false, "imageUrl": "https://cdn.example/tx/t-9c3d.jpg", "isSynchronized": true, "modificationDate": 1758960400000 } ] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's credit-book entry flow with receipt-photo attachmentfield set mirrors the per-customer in/out ledger rows
Synchronize cashbook transactions
POST
/v1/cashbook/movements/syncopenfinanceSyncs cash in/out against a named drawer and cashbook category so the till can be reconciled independently of the credit book.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- uuid
- amount
- isIn
- date
- notes
- drawerId
- drawerUuid
- cashbookCategoryId
- cashbookCategoryUuid
- deleted
- isSynchronized
- modificationDate
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/cashbook/movements/sync HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: multipart/form-data { "uuid": "cb-44ee", "amount": 80.0, "isIn": false, "date": "2026-09-27", "notes": "Change float", "drawerUuid": "d-aa01", "cashbookCategoryUuid": "cat-opex", "deleted": false, "isSynchronized": false }{ "items": [ { "id": 22019, "uuid": "cb-44ee", "amount": 80.0, "isIn": false, "date": "2026-09-27", "notes": "Change float", "drawerId": 3, "drawerUuid": "d-aa01", "cashbookCategoryId": 7, "cashbookCategoryUuid": "cat-opex", "isSynchronized": true, "modificationDate": 1758960500000 } ] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's cash drawer in/out flowfield set mirrors the till reconciliation rows grouped by drawer and category
Unlock inyad Pay wallet
POST
/v1/wallet/unlockopenbankingGates inyad Pay operations behind the merchant wallet password before pay, withdraw or topup can run.
Auth: Bearer accessToken from session bootstrap, plus wallet password in the body.
- password
- status
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/wallet/unlock HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "password": "********" }{ "status": "OK" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's inyad Pay lock screen shown before wallet operations
Read wallet account
GET
/v1/wallet/accountopenbankingReads the merchant inyad Pay wallet: balanceInCents, currency, phone, status and linked bankAccountNumber shown on the wallet home screen.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- id
- phone
- type
- status
- balanceInCents
- currency
- customerFullName
- customerFirstName
- customerLastName
- bankAccountNumber
- creationDate
- modificationDate
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/wallet/account HTTP/1.1 Authorization: Bearer <accessToken>{ "id": 9001, "phone": "+201000000001", "type": "MERCHANT", "status": "ACTIVE", "balanceInCents": 540000, "currency": "EGP", "customerFullName": "Cairo Grocery", "customerFirstName": "Cairo", "customerLastName": "Grocery", "bankAccountNumber": "000123456789", "creationDate": 1719926400000, "modificationDate": 1758960000000 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's wallet home screen showing balance, currency, phone and linked bank account
Initiate wallet transaction
POST
/v1/wallet/transfers/prepareopenbankingReserves a wallet movement and returns walletTransactionReference that subsequent pay or withdraw calls must present with the operation PIN.
Auth: Bearer accessToken from session bootstrap; wallet unlock required first.
- amountInCents
- customerUuid
- destinationAccountNumber
- destinationBankCode
- inyadPayReceptionMode
- inyadPayService
- notes
- paymentRequestReference
- walletTransactionReference
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/wallet/transfers/prepare HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "amountInCents": 150000, "customerUuid": "c-1a2b3c4d", "destinationAccountNumber": "000123456789", "destinationBankCode": "NBE", "inyadPayReceptionMode": "WALLET", "inyadPayService": "P2P", "notes": "Settle Mona ledger", "paymentRequestReference": null }{ "walletTransactionReference": "wtx-9f2a1c" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's send-money confirmation step that reserves a transfer reference before PIN entry
Pay from inyad Pay wallet
POST
/v1/wallet/transfers/executeopenbankingExecutes a previously initiated inyad Pay send to a beneficiary (national id, name, phone) and returns status, transactionId and optional cash-pickup codes.
Auth: Bearer accessToken from session bootstrap, plus pin and operationPin in the body.
- beneficiary.cin
- beneficiary.firstName
- beneficiary.lastName
- beneficiary.phoneNumber
- operationPin
- pin
- walletTransactionReference
- status
- transactionId
- cashPickUpCode
- cashPickUpReference
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/wallet/transfers/execute HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "beneficiary": { "cin": "A123456789", "firstName": "Ahmed", "lastName": "Hassan", "phoneNumber": "+201009998887" }, "operationPin": "2580", "pin": "1470", "walletTransactionReference": "wtx-9f2a1c" }{ "status": "COMPLETED", "transactionId": 4412901, "walletTransactionReference": "wtx-9f2a1c", "cashPickUpCode": "CP-8821", "cashPickUpReference": "CPR-8821" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's beneficiary send flow and its cash-pickup result codesfield set mirrors the beneficiary form (national id, name, phone) plus PIN confirmation
Top up inyad Pay wallet
POST
/v1/wallet/depositsopenbankingStarts a cash-in for the merchant wallet and returns cashInReference plus a paymentLink the payer can open to fund the account.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- amountInCents
- status
- cashInReference
- paymentLink.reference
- paymentLink.amountInCents
- paymentLink.currency
- paymentLink.status
- paymentLink.paymentLinkUrl
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/wallet/deposits HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "amountInCents": 200000 }{ "status": "PENDING", "cashInReference": "CIN-4402", "paymentLink": { "reference": "PL-topup-4402", "amountInCents": 200000, "currency": "EGP", "status": "OPEN", "paymentLinkUrl": "https://pay.example/pl/PL-topup-4402" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's wallet cash-in flow that returns a funding payment link
Quote wallet transfer fees
POST
/v1/wallet/transfers/quoteopenbankingQuotes feesAmountInCents and currency for an inyad Pay send before the merchant confirms pay or withdraw.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- amountInCents
- InyadPayReceptionMode
- recipientPhoneNumber
- walletService
- currency
- feesAmountInCents
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/wallet/transfers/quote HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "amountInCents": 150000, "InyadPayReceptionMode": "WALLET", "recipientPhoneNumber": "+201009998887", "walletService": "P2P" }{ "currency": "EGP", "feesAmountInCents": 750 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's pre-send fee quote shown before confirming a transfer
Create payment link
POST
/v1/checkout/linksopenbankingCreates a shareable payment link for a credit-book balance so the customer can pay remotely; returns paymentLinkUrl, reference and status.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- id
- reference
- amountInCents
- currency
- countryCode
- language
- status
- paymentLinkUrl
- customerId
- areFeesOnPayer
- isInactive
- deleted
- expirationDate
- paymentRequestType
- paymentRequestId
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/checkout/links HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "reference": "PL-mona-1250", "amountInCents": 125000, "currency": "EGP", "countryCode": "EG", "language": "ar", "expirationDate": 1760553600000, "customerId": 55120, "areFeesOnPayer": true, "isInactive": false, "deleted": false, "paymentRequestType": "PAYMENT_LINK", "status": "OPEN" }{ "id": 33108, "reference": "PL-mona-1250", "amountInCents": 125000, "currency": "EGP", "countryCode": "EG", "language": "ar", "status": "OPEN", "paymentLinkUrl": "https://pay.example/pl/PL-mona-1250", "customerId": 55120, "areFeesOnPayer": true, "isInactive": false, "expirationDate": 1760553600000 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's share-payment-link flow for collecting credit-book balances remotely
List billers
GET
/v1/billpay/providersopendataReturns the bill-pay catalog (utilities and similar) with code, displayName, kycLevel and countryCode used to start an unpaid-bill lookup.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- code
- displayName
- displayNameCode
- fullName
- category
- countryCode
- description
- kycLevel
- logoUrl
- status
- websiteUrl
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/billpay/providers HTTP/1.1 Authorization: Bearer <accessToken>[ { "code": "EEHC", "displayName": "Electricity", "displayNameCode": "biller.eehc", "fullName": "Egyptian Electricity Holding Company", "category": "UTILITIES", "countryCode": "EG", "description": "Electricity bills", "kycLevel": "L1", "logoUrl": "https://cdn.example/billers/eehc.png", "status": "ACTIVE", "websiteUrl": "https://www.eehc.gov.eg" } ]Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's bill-pay catalog listing utilities with their KYC level
Fetch unpaid bills
POST
/v1/billpay/invoices/lookupopenfinanceLooks up unpaid utility bills for a biller account and returns each bill's amountInCents, dueDate, customerName and fee fields before payment.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- billingRequestId
- requestId
- billRefNumber
- billSelectType
- billsPaymentRule
- status
- totalAmountInCents
- feesAmountInCents
- feeType
- isPartialPayment
- bills.billNumber
- bills.amountInCents
- bills.currency
- bills.customerName
- bills.dueDate
- bills.deadlineDate
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/billpay/invoices/lookup HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "billingRequestId": "8f14e45f-ea52-4c6b-9b1b-1c9a4d2e7a01", "formWizard": { "billerCode": "EEHC", "accountNumber": "314159265" } }{ "requestId": "br-4401", "billingRequestId": "8f14e45f-ea52-4c6b-9b1b-1c9a4d2e7a01", "billRefNumber": "EEHC-314159265", "billSelectType": "MULTI", "billsPaymentRule": "ANY", "status": "OK", "totalAmountInCents": 48500, "feesAmountInCents": 250, "feeType": "FLAT", "feePercentage": 0.0, "isPartialPayment": false, "additionalMessage": null, "bills": [ { "billNumber": "2026-09-01", "billRefNumber": "EEHC-314159265-09", "label": "September electricity", "type": "ELECTRICITY", "amountInCents": 48500, "currency": "EGP", "customerName": "Cairo Grocery", "customerAddress": "12 Tahrir St", "dueDate": "2026-10-05", "deadlineDate": "2026-10-15", "issueDate": "2026-09-01", "feesAmountInCents": 250, "penaltyAmountInCents": 0, "isRequired": true } ] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's unpaid-bill lookup for a biller account before payment
Pay unpaid bills
POST
/v1/billpay/invoices/settleopenbankingPays selected unpaid bills and returns operationStatus, merchantCommissionAmountInCents and a billsReceipt for the merchant copy.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- billingRequestId
- billRefNumber
- totalAmountInCents
- feesAmountInCents
- bills
- operationStatus
- status
- merchantCommissionAmountInCents
- billsReceipt
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/billpay/invoices/settle HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "billingRequestId": "8f14e45f-ea52-4c6b-9b1b-1c9a4d2e7a01", "billRefNumber": "EEHC-314159265", "totalAmountInCents": 48500, "feesAmountInCents": 250, "bills": [ { "billNumber": "2026-09-01", "billRefNumber": "EEHC-314159265-09", "amountInCents": 48500, "currency": "EGP" } ] }{ "billingRequestId": "8f14e45f-ea52-4c6b-9b1b-1c9a4d2e7a01", "operationStatus": "SUCCESS", "status": "OK", "merchantCommissionAmountInCents": 150, "billsReceipt": { "receiptNumber": "RCPT-9912" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's bill settlement flow returning a merchant receipt and commission
Read KYC verification status
POST
/v1/identity/verification/statusopenfinanceChecks which KYC documents are approved or pending for a financial_service_type and amount so wallet and bill-pay features can be gated.
Auth: Bearer accessToken from POST /v1/session/bootstrap
- financial_service_type
- amountInCents
- currency
- documents.type
- documents.status
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/identity/verification/status HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "financial_service_type": "WALLET", "amountInCents": 150000, "currency": "EGP" }{ "documents": [ {"type": "NATIONAL_ID_FRONT", "status": "APPROVED"}, {"type": "NATIONAL_ID_BACK", "status": "APPROVED"}, {"type": "SELFIE", "status": "PENDING"} ] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
documented from the app's identity verification gate before higher-value wallet and bill-pay operations
Data categories
- balances
- transactions
- customers
- bills
- kyc
Where teams use this data
Credit-book to ERP reconciliation
Nightly jobs pull customers and credit-book lines from /v1/ledger/customers/sync and /v1/ledger/entries/sync (uuid, totalAmount, isIn, customerUuid) and post them into the merchant's accounting system.
Wallet payout from the ledger
A collections bot quotes /v1/wallet/transfers/quote, reserves /v1/wallet/transfers/prepare, then posts /v1/wallet/transfers/execute with beneficiary cin/phone and walletTransactionReference when a customer settles in cash-out.
Utility bill desk for the shop
A counter flow lists /v1/billpay/providers, looks up /v1/billpay/invoices/lookup for the subscriber account, and settles via /v1/billpay/invoices/settle, recording merchantCommissionAmountInCents on the till.
KYC gate before large transfers
Before a high amountInCents send, the app calls /v1/identity/verification/status with financial_service_type WALLET and blocks pay until documents[].status is APPROVED.
Frequently asked questions
What data does the Konnash API expose?
A session bootstrap call hydrates the merchant snapshot: customers, credit-book transactions, cashbook rows, drawers, walletAccounts, billers and paymentLinks. Incremental sync endpoints then push local edits for those same entities.
How does inyad Pay send money?
After wallet unlock, the client quotes fees, calls /v1/wallet/transfers/prepare for a walletTransactionReference, then POST /v1/wallet/transfers/execute with beneficiary cin, names, phoneNumber, pin and operationPin.
Can Konnash look up utility bills?
Yes. /v1/billpay/providers lists the catalog; /v1/billpay/invoices/lookup returns bills[].amountInCents, dueDate and customerName; /v1/billpay/invoices/settle settles the selected bills.
Does the ledger work offline?
Entities carry uuid, deleted, isSynchronized and modificationDate. The app writes locally then POSTs /v1/ledger/customers/sync, /v1/ledger/entries/sync and /v1/cashbook/movements/sync when the network is back.
Topics
- Konnash data API
- inyad Konnash endpoints
- Konnash customer ledger sync
- inyad Pay wallet pay
- Konnash cashbook transactions
- Konnash unpaid bills
- Konnash payment links
- Konnash KYC verification status
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.