JuanHand peso cash-loan data API
JuanHand-online cash loan App is Wefund Lending corp's peso cash-loan client for borrowers in the Philippines. Users sign in with a PH mobile number, complete ID-only KYC (government ID photo plus a handheld ID shot and face liveness), choose Mega Loan or Speedy Loan on the home screen, and wait for a credit decision the client advertises in as little as three minutes. Approved cash is released through GCash, Maya, Lazada or SeaBank; repayment runs through Dragonpay, with an in-app extension when a bill can be delayed. Optional Sun Life credit-life cover is offered to new customers, and the same client surfaces SEC, AMLC and DPO badges, live chat and Manila hotlines. Home-screen copy advertises a PHP 50,000 ceiling, 0.06% per day interest and 90-day-plus terms. Wefund reports 10 million+ downloads and five years online, with an iOS twin on the App Store and a Facebook page at JuanHandOfficial.
Peso bill rows hang on loanId and debtId, with lifeCycleCode values such as UNREPAY, WITHDRAWING and FINISH_4WITHDRAW_FAIL, amounts in loanNum and actualRepayAmount, and a Dragonpay repayCode plus channelFeeAmount. The review snapshot nests personalInfo (loanPurpose, city, address, email), identityInfo (cardNo, firstName, lastName, birthdate, cardPhoto), workInfo (profession, monthlyIncome, companyName) and contactInfoList entries with name, phoneNo and relation. Saved payout methods return modeId, accountNo and channelName; an extension quote adds delayDay, newDueDate, newOwingAmount and a payAmount built from payFixedServiceFee, payServiceFee, payInterest and payPenaltyFee. Repayment coupons expose couponId, couponAmount, loanMinAmount and a canUseFlag split across the validateStartDate–validateDate window, and the confirmation OTP pairs msgType with a 6-digit verifyCode, returning leftRetryTimes on a wrong code inside the result–resultMessage envelope.
Credit-ops and collections desks can watch pending peso bills, reconcile Dragonpay codes against GCash or Maya payout accounts, and check whether ID photos and emergency contacts are complete before a re-loan. openData Studio turns those records 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.
Send SMS or voice OTP
POST
/v1/verifications/otposintSends an SMS (msgType) or voice (voiceMsgType) OTP to mobile, masking accountNo in params. Used to confirm adding a GCash/Maya withdraw method or a Dragonpay repayment. Non-zero result toasts resultMessage.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- mobile
- msgType
- voiceMsgType
- params.accountNo
- result
- resultMessage
POST /v1/verifications/otp HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "mobile": "09171234567", "msgType": "ADD_WITHDRAW_METHOD", "params": { "accountNo": "*******4567" } }{ "result": 0, "resultMessage": "OK", "content": {} }Validate SMS OTP
POST
/v1/verifications/otp/confirmosintChecks a 6-digit verifyCode for mobile and msgType. content.isVerified plus token become flowNo on confirm; leftRetryTimes drives the remaining-attempts copy when the code is wrong.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- mobile
- msgType
- verifyCode
- isVerified
- token
- leftRetryTimes
- flowNo
POST /v1/verifications/otp/confirm HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "mobile": "09171234567", "msgType": "ADD_WITHDRAW_METHOD", "verifyCode": "483920" }{ "result": 0, "resultMessage": "OK", "content": { "isVerified": true, "token": "sms_tok_7c41d9e2", "leftRetryTimes": 4 } }Borrower KYC review snapshot
POST
/v1/borrowers/me/kyc-reviewosintLoads the review page: personalInfo, identityInfo (PhilID/card photos and name), workInfo and contactInfoList. The personal-info, ID, contact and liveness screens collect the same objects before this confirm step.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- personalInfo.loanPurpose
- personalInfo.education
- personalInfo.city
- personalInfo.address
- personalInfo.creditCardNumber
- personalInfo.email
- personalInfo.otherPhoneNo
- personalInfo.childrenNumber
- identityInfo.type
- identityInfo.cardNo
- identityInfo.cardPhoto
- identityInfo.holdCardPhoto
- identityInfo.firstName
- identityInfo.middleName
- identityInfo.lastName
- identityInfo.sex
- identityInfo.birthdate
- identityInfo.maritalStatus
- workInfo.profession
- workInfo.monthlyIncome
- workInfo.payrollCycle
- workInfo.payDay
- workInfo.companyName
- workInfo.companyPhone
- contactInfoList.name
- contactInfoList.phoneNo
- contactInfoList.relation
POST /v1/borrowers/me/kyc-review HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "isCache": false }{ "result": 0, "resultMessage": "OK", "content": { "personalInfo": { "loanPurpose": "BILLS", "education": "COLLEGE", "city": "Quezon City", "address": "123 Commonwealth Ave", "creditCardNumber": "1", "email": "[email protected]", "otherPhoneNo": "09180001111", "childrenNumber": "1" }, "identityInfo": { "type": "PHILID", "cardNo": "1234-5678-9012", "cardPhoto": "https://files.example.com/kyc/front.jpg", "holdCardPhoto": "https://files.example.com/kyc/hold.jpg", "firstName": "Juan", "middleName": "Santos", "lastName": "Dela Cruz", "sex": "M", "birthdate": "1990-05-12", "maritalStatus": "SINGLE" }, "workInfo": { "profession": "EMPLOYEE", "monthlyIncome": "25000", "payrollCycle": "MONTHLY", "payDay": "15", "companyName": "Acme PH", "companyPhone": "0288890000" }, "contactInfoList": [ { "name": "Maria Dela Cruz", "phoneNo": "09175550000", "relation": "SPOUSE" } ] } }KYC dictionary lists
POST
/v1/reference/kyc-optionsopendataReturns code/name dictionaries that label loanPurpose, education, profession, payrollCycle, relation, certificate type, sex and maritalStatus on the review screen.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- loanPurposeList
- educationList
- childrenNumberList
- professionList
- payrollCycleList
- relationList
- certificateList
- sexList
- maritalStatusList
- code
- name
POST /v1/reference/kyc-options HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH {}{ "result": 0, "resultMessage": "OK", "content": { "loanPurposeList": [{"code": "BILLS", "name": "Bills"}], "educationList": [{"code": "COLLEGE", "name": "College"}], "childrenNumberList": [{"code": "1", "name": "1"}], "professionList": [{"code": "EMPLOYEE", "name": "Employee"}], "payrollCycleList": [{"code": "MONTHLY", "name": "Monthly"}], "relationList": [{"code": "SPOUSE", "name": "Spouse"}], "certificateList": [{"code": "PHILID", "name": "PhilID"}], "sexList": [{"code": "M", "name": "Male"}], "maritalStatusList": [{"code": "SINGLE", "name": "Single"}] } }Confirm KYC review
POST
/v1/borrowers/me/kyc-review/confirmopendataConfirms the review page (operate 2, pageNo 99, mainLoanChannel 1 = cash loan). On success the embedded page notifies the native app so the flow continues to product pick and liveness.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- mainLoanChannel
- isCache
- operate
- pageNo
- result
- resultMessage
POST /v1/borrowers/me/kyc-review/confirm HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "mainLoanChannel": 1, "isCache": false, "operate": 2, "pageNo": 99 }{ "result": 0, "resultMessage": "OK", "content": {} }Loan bills by type
POST
/v1/bills/searchopenfinanceLists current or history peso bills. type CURRENT returns content.elements; HISTORY pages with pageNo/pageSize. lifeCycleCode maps to Releasing cash (WITHDRAWING), Pending repayment (UNREPAY), Settle (FINISH) and Withdrawal fail (FINISH_4WITHDRAW_FAIL).
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- type
- pageNo
- pageSize
- elements
- loanId
- debtId
- loanNum
- loanDate
- nextPayTime
- nextPayNum
- originPayNum
- lifeCycleCode
- productType
- canDelayFlag
- delayCount
- delayProcessingFlag
- isUnRepayListing
- loanAgreement
- incAmount
POST /v1/bills/search HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "type": "CURRENT" }{ "result": 0, "resultMessage": "OK", "content": { "elements": [ { "loanId": "LN-77881234", "debtId": "DB-9911", "loanNum": 8000, "loanDate": 1729123200000, "nextPayTime": 1731801600000, "nextPayNum": 8640, "originPayNum": 8640, "lifeCycleCode": "UNREPAY", "productType": 2, "canDelayFlag": true, "delayCount": 0, "delayProcessingFlag": false, "isUnRepayListing": true, "loanAgreement": "https://example.com/legal/loan-agreement" } ], "incAmount": "Pay before the due date to keep your limit" } }Loan or debt detail
POST
/v1/bills/detailopenfinanceLoads one bill for the progress screen (listId) or the repayment breakdown (listId = loanId): term, cash vs Lazada mainLoanChannel, fee rates and installment repaymentItem rows.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- listId
- flowNo
- loanNum
- period
- periodUnit
- productType
- mainLoanChannel
- applyTs
- loanAgreement
- listStatusResults
- repaymentItem.repaymentAmount
- repaymentItem.oriRepaymentAmount
- repaymentItem.periodSeq
- overduePenaltyFee
- apr
- serviceFeeRate
- interestFeeRate
- overduePenaltyRate
- isFirstPayFee
POST /v1/bills/detail HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "listId": "LN-77881234" }{ "result": 0, "resultMessage": "OK", "content": { "listId": "LN-77881234", "flowNo": "JH20251020001", "loanNum": 8000, "period": 90, "periodUnit": "DAY", "productType": 2, "mainLoanChannel": 1, "applyTs": 1729123200000, "loanAgreement": "https://example.com/legal/loan-agreement", "listStatusResults": [{"title": "Approved", "status": 1}], "repaymentItem": { "repaymentAmount": 8640, "oriRepaymentAmount": 8640, "periodSeq": 1 }, "overduePenaltyFee": 0, "apr": 0.219, "serviceFeeRate": 0.12, "interestFeeRate": 0.0006, "overduePenaltyRate": 0.01, "isFirstPayFee": false } }Dragonpay repay channels
POST
/v1/repayments/channelsopenfinanceReturns the amount due (actualRepayAmount vs originalRepayAmount), optional couponInfo, and Dragonpay channelCategoryList. Bank channels with bankSpecialFlag false jump to the Dragonpay payment page; others show a repay code.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- loanId
- couponId
- flowNo
- repayDate
- actualRepayAmount
- originalRepayAmount
- channelFeeType
- canUseCoupon
- couponInfo
- channelFeeDisplayContent
- channelCategoryList
- channelList
- provider
- channelName
- channelFeeAmount
- bankSpecialFlag
POST /v1/repayments/channels HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "loanId": "LN-77881234", "couponId": "CP-1001" }{ "result": 0, "resultMessage": "OK", "content": { "loanId": "LN-77881234", "flowNo": "JH20251020001", "repayDate": 1731801600000, "actualRepayAmount": 8200, "originalRepayAmount": 8640, "channelFeeType": 1, "canUseCoupon": true, "couponInfo": {"couponId": "CP-1001", "couponAmount": 440}, "channelFeeDisplayContent": "Gateway fee may apply", "channelCategoryList": [ { "type": "EWALLET", "channelList": [ { "id": 12, "provider": "DRAGONPAY", "channelName": "GCash", "channelFeeAmount": 15, "bankSpecialFlag": false } ] } ] } }Repayment coupons
POST
/v1/repayments/vouchersopendataLists coupons for a loanId. The app splits content.coupons on canUseFlag into available vs unavailable, and shows couponAmount, loanMinAmount and the validateStartDate–validateDate window.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- loanId
- coupons
- couponId
- title
- couponAmount
- loanMinAmount
- canUseFlag
- validateStartDate
- validateDate
- desc
- useConditions
POST /v1/repayments/vouchers HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "loanId": "LN-77881234" }{ "result": 0, "resultMessage": "OK", "content": { "coupons": [ { "couponId": "CP-1001", "title": "PHP 440 off", "couponAmount": 440, "loanMinAmount": 5000, "canUseFlag": true, "validateStartDate": 1729123200000, "validateDate": 1731801600000, "desc": "Valid on Mega Loan repayment", "useConditions": ["Min PHP 5000 bill"] } ] } }Debt-delay extension quote
POST
/v1/extensions/quoteopenfinanceLoads extension options for a debtId (delayDaySet) and the fee stack that becomes payAmount: fixed service, repayment service, interest, reminder and penalty. The apply screen then posts debtId plus the chosen delayDay.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- debtId
- delayDaySet
- delayDay
- loanAmount
- debt.dueDate
- newDueDate
- newOwingAmount
- payAmount
- payFixedServiceFee
- payServiceFee
- payInterest
- payOverdueNotifyFee
- payPenaltyFee
POST /v1/extensions/quote HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "debtId": "DB-9911" }{ "result": 0, "resultMessage": "OK", "content": { "delayDaySet": [7, 14], "delayDay": 7, "loanAmount": 8000, "debt": { "dueDate": 1731801600000, "debtId": "DB-9911" }, "newDueDate": 1732406400000, "newOwingAmount": 9100, "payAmount": 350, "payFixedServiceFee": 200, "payServiceFee": 80, "payInterest": 40, "payOverdueNotifyFee": 0, "payPenaltyFee": 30 } }Dragonpay repayment code
POST
/v1/repayments/codesopenfinanceIssues a Dragonpay repayCode and repayCodeAmount for a loanId (or debtId on an extension) plus provider/channelId. unpayLoanNum>1 shows a multi-loan tip; channelFeeAmount is the gateway add-on.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- loanId
- debtId
- provider
- channelId
- repayCode
- repayCodeAmount
- unpayLoanNum
- channelFeeAmount
POST /v1/repayments/codes HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "loanId": "LN-77881234", "provider": "DRAGONPAY", "channelId": 12 }{ "result": 0, "resultMessage": "OK", "content": { "repayCode": "DP-88392011", "repayCodeAmount": 8215, "unpayLoanNum": 1 } }Withdraw mode list
POST
/v1/payout-methods/listopenbankingLists saved payout methods for withdrawType CASHLOAN or LAZADA. Each channel carries modeList rows with modeId, masked accountNo and isDefault. The native withdrawal screens read the same list.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- withdrawType
- channelName
- channelList
- modeList
- modeId
- accountNo
- isDefault
POST /v1/payout-methods/list HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "withdrawType": "CASHLOAN" }{ "result": 0, "resultMessage": "OK", "content": [ { "channelName": "GCash", "channelList": [ { "modeId": "MD-1", "accountNo": "09171234567", "channelName": "GCash", "isDefault": true } ] }, { "channelName": "Maya", "channelList": [ { "modeId": "MD-2", "accountNo": "09180001111", "channelName": "Maya", "isDefault": false, "modeList": [] } ] } ] }Add withdraw method
POST
/v1/payout-methodsopenbankingRegisters a GCash/Maya (or bank) payout account. Body is the account form plus the SMS flowNo token. result 101024 re-triggers OTP; success notifies the native app and closes the embedded page.
Auth: Authorization: Bearer <session-token>, the session issued after the Philippine mobile-number login; a client-channel header marks in-app versus browser calls. Success envelope is result==0 with resultMessage and content.
- accountNo
- channelId
- channelName
- isSetDefault
- flowNo
- modeId
- result
POST /v1/payout-methods HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json Accept-Language: en-PH { "accountNo": "09171234567", "channelId": "GCASH", "channelName": "GCash", "isSetDefault": true, "flowNo": "sms_tok_7c41d9e2" }{ "result": 0, "resultMessage": "OK", "content": { "modeId": "MD-3" } }
Data categories
- KYC profiles
- loan bills
- repayment channels
- debt-delay quotes
- withdraw methods
- coupons
Where teams use this data
Watch peso bills and life-cycle codes
A collections bot reads CURRENT elements for loanId, debtId, nextPayNum and lifeCycleCode, and alerts when a row flips to UNREPAY or FINISH_4WITHDRAW_FAIL instead of waiting for a PDF statement.
Reconcile Dragonpay codes to GCash payouts
Finance matches repayCode plus repayCodeAmount and channelFeeAmount to the GCash or Maya modeId/accountNo that received the cash, using actualRepayAmount versus originalRepayAmount when a coupon applied.
KYC completeness before a re-loan
Originations join identityInfo.cardNo, cardPhoto and holdCardPhoto with workInfo.monthlyIncome and contactInfoList (name, phoneNo, relation) before allowing another Mega Loan or Speedy Loan draw.
Extension-fee breakdown
Credit-ops compare delayDaySet quotes: newDueDate, newOwingAmount and the payAmount stack (payFixedServiceFee, payServiceFee, payInterest, payPenaltyFee) against the original nextPayTime.
Frequently asked questions
What loan-bill fields does JuanHand return?
Current and history lists expose loanId, debtId, loanNum, nextPayNum, nextPayTime and lifeCycleCode (WITHDRAWING, UNREPAY, FINISH, FINISH_4WITHDRAW_FAIL). Detail rows add period, periodUnit, flowNo, repaymentAmount, serviceFeeRate, interestFeeRate and overduePenaltyFee.
Can I read Dragonpay repayment channels and codes?
Yes. The channel list returns actualRepayAmount, originalRepayAmount, couponInfo and channelCategoryList (provider, channelName, channelFeeAmount, bankSpecialFlag). Selecting a method issues repayCode and repayCodeAmount; unpayLoanNum flags multiple open bills.
How do these calls authenticate?
After PH-mobile login the app's session token is sent as a Bearer credential on every call, with a client-channel header separating in-app from browser use and an Accept-Language header. Success is result 0 with resultMessage and a content object.
What identity data sits on the review screen?
personalInfo holds loanPurpose, education, city, address, email and childrenNumber. identityInfo holds ID type, cardNo, cardPhoto, holdCardPhoto, firstName, middleName, lastName, sex, birthdate and maritalStatus. workInfo adds profession, monthlyIncome, payrollCycle, payDay, companyName and companyPhone, plus contactInfoList name/phoneNo/relation.
Apps similar to JuanHand-online cash loan App
- Tala — Tala is an SEC- and BSP-registered Philippine cash-loan app that lets residents apply with one valid ID and borrow up to ₱25,000, with payout to Maya, GCash, BPI, GoTyme and other wallets or banks.
- Cashalo — Cashalo is an SEC-registered (CSC201800209) Philippine cash-loan app whose unsecured loans start at Php 1,000 and are capped at Php 13,000 for good-paying customers, with cash-out to a bank account, GCash, or Maya.
- Home Credit Philippines — Home Credit Philippines is HC Consumer Finance Philippines, Inc.'s lending app for cash loans and product installment loans of up to PHP 120,000 on gadgets, appliances and furniture.
- Billease — Billease is a Philippine buy-now-pay-later and cash-loan app (an SEC-licensed financing company) that issues a loan limit of up to ₱50,000 for partner-store installments, QR Ph payments, or cash to a bank or e-wallet.
- Maya — Maya is a BSP-licensed Philippine digital bank and wallet whose app advertises personal loans of up to P250,000 alongside savings, credit cards and QR Ph payments.
- Tonik Bank — Tonik is a BSP-licensed Philippine digital bank whose app offers unsecured loans with no credit-history requirement, including a Credit Builder Loan of up to ₱50,000, plus PDIC-insured savings.
- Atome PH — Atome PH is Neuroncredit Financing Company Inc.'s Philippine app for Atome Cash personal loans of up to ₱55,000, plus Atome Card 0% QR Ph installments and daily-interest savings.
- GCash — GCash is Mynt Inc.'s BSP-regulated Philippine finance super-app that includes GLoan, GGives and GCredit alongside wallet transfers, bills pay and GSave.
Topics
- JuanHand API
- JuanHand peso loan
- loanId debtId
- identityInfo cardNo
- Dragonpay repayCode
- GCash withdraw modeId
- lifeCycleCode UNREPAY
- Philippines cash loan data
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