Tala Pesa 贷款数据 API
Tala: Fast & Safe Pesa Loan 是 Tala Mobile 面向肯尼亚的短期数字信贷 Android 客户端(Play 包名 com.inventureaccess.safarirahisi,以 Tala / Inventure Access 栈的 keProd 风味发布)。借款人输入肯尼亚手机号、收取短信 OTP、设置或确认 PIN,再拍摄国民身份证照片,随后贷款卡片展示可借 Pesa 金额、还款计划、CRB 状态与还款指引。提现与缴费用 M-Pesa 及应用内支付方式,客服走 Zendesk。Tala 在其他市场也有姊妹应用,但本列表是肯尼亚 Pesa 产品,与 Branch、Okash 以及 Safaricom 的 M-Shwari / Fuliza 争夺同一批预付费手机借款人。
PIN 登录的 loginSuccess 会签发 sessionId 与 personId,此前先有手机号 loginExists 以及 OTP 标记(otpSent、otpValid),同一载荷还带 mnoCode 与 pinStatus。国民身份证照片上传在写入 idNumber / idName 后返回 image URL;M-Pesa 还款深链以 paymentUrl 与 stopUrl 出现,并附带每种方式的 displayName 与 minPayableAmount。数据采集信封上的设备行含 androidId、deviceId 与 personId。
进件、催收与反欺诈台把这些会话、KYC 与还款记录拼在一起。openData Studio 将其变成可调用的开放数据。
应用截图
API 端点一览
以下端点与请求/响应示例均依据应用界面推导重构,为示意说明,并非实际抓包。
检查手机号是否已注册
POST
/v1/accounts/phone-lookuposint按 loginType/loginValue(手机号)查询是否已注册,返回 loginExists,供登录页在 OTP 注册与 PIN 登录之间分流。
认证方式: 登录前 JSON 信封:data 块加 metadata.country 与 metadata.device(androidId、deviceId、googleAdId、networkType、version)。后续调用复用 PIN 登录返回的 data.sessionId,以会话令牌请求头发送(不是 Bearer JWT)。
- loginType
- loginValue
- loginExists
- status
- statusDescription
- displayMsg
- metadata.country
- device.androidId
- device.deviceId
- device.googleAdId
- device.networkType
- device.version
POST /v1/accounts/phone-lookup HTTP/1.1 Content-Type: application/json { "data": { "loginType": "phone", "loginValue": "254712345678" }, "metadata": { "country": "KE", "device": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "googleAdId": "38400000-8cf0-11bd-b23e-10b96e40000d", "networkType": "WIFI", "version": "7.30.0" } } }{ "status": "SUCCESS", "statusDescription": "OK", "data": { "displayMsg": "", "loginExists": true }, "errors": null }发送登录 OTP
POST
/v1/accounts/verification-codesosint向 loginValue 发送短信 OTP,返回 otpSent,供肯尼亚 Pesa 的 OTP 界面使用。
认证方式: 登录前 JSON 信封,含 metadata.device。OTP 校验与 PIN 登录之后签发 data.sessionId。
- loginType
- loginValue
- otpSent
- displayMsg
- status
POST /v1/accounts/verification-codes HTTP/1.1 Content-Type: application/json { "data": { "loginType": "phone", "loginValue": "254712345678" }, "metadata": { "country": "KE", "device": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "googleAdId": "38400000-8cf0-11bd-b23e-10b96e40000d", "networkType": "WIFI", "version": "7.30.0" } } }{ "status": "SUCCESS", "statusDescription": "OK", "data": { "displayMsg": "OTP sent", "otpSent": true }, "errors": null }校验登录 OTP
POST
/v1/accounts/verification-codes/confirmosint用 authValue(OTP)校验手机号 loginValue,返回 otpValid,供进入 PIN 界面。
认证方式: 登录前 JSON 信封;data.authValue 为 OTP。随后 PIN 登录返回 data.sessionId。
- loginType
- loginValue
- authValue
- otpValid
- status
POST /v1/accounts/verification-codes/confirm HTTP/1.1 Content-Type: application/json { "data": { "loginType": "phone", "loginValue": "254712345678", "authValue": "482913" }, "metadata": { "country": "KE", "device": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "googleAdId": "38400000-8cf0-11bd-b23e-10b96e40000d", "networkType": "WIFI", "version": "7.30.0" } } }{ "status": "SUCCESS", "statusDescription": "OK", "data": { "displayMsg": "", "otpValid": true }, "errors": null }PIN 登录
POST
/v1/logins/pinosint用手机号 PIN(authValue)换取 loginSuccess、sessionId、personId、mnoCode、pinStatus 与 numTriesRemaining。
认证方式: 登录前 JSON 信封;data.authValue 为 PIN。响应 data.sessionId 与 data.personId 以会话令牌请求头用于后续 KYC、还款与设备信号调用(不是 Authorization: Bearer)。
- loginType
- loginValue
- authValue
- loginSuccess
- mnoCode
- numTriesRemaining
- personId
- pinStatus
- sessionId
- status
POST /v1/logins/pin HTTP/1.1 Content-Type: application/json { "data": { "loginType": "phone", "loginValue": "254712345678", "authValue": "135790" }, "metadata": { "country": "KE", "device": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "googleAdId": "38400000-8cf0-11bd-b23e-10b96e40000d", "networkType": "WIFI", "version": "7.30.0" } } }{ "status": "SUCCESS", "statusDescription": "OK", "data": { "displayMsg": "", "loginSuccess": true, "mnoCode": "SAF", "numTriesRemaining": 5, "personId": 1048291, "pinStatus": 1, "sessionId": "sess-7c41d9e2a91f" }, "errors": null }创建认证会话
POST
/v1/logins/bootstraposint在肯尼亚登录服务上签发 sessionId,可在 PIN 登录之前或同时调用。
认证方式: JSON 信封,含 metadata.device。返回后续认证调用使用的 data.sessionId(会话令牌请求头,不是 Bearer JWT)。
- sessionId
- status
- statusDescription
- displayMsg
POST /v1/logins/bootstrap HTTP/1.1 Content-Type: application/json { "data": {}, "metadata": { "country": "KE", "device": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "googleAdId": "38400000-8cf0-11bd-b23e-10b96e40000d", "networkType": "WIFI", "version": "7.30.0" } } }{ "status": "SUCCESS", "statusDescription": "OK", "data": { "displayMsg": "", "sessionId": "sess-7c41d9e2a91f" }, "errors": null }PIN 重置安全问题
POST
/v1/credentials/recovery/questionsosint加载 PIN 重置用的 challengeQuestions(id、hint、value)以及 challengeStatus、challengeType,供安全问题页使用。
认证方式: JSON 信封,含 loginType=phone 与 loginValue。可附带 PIN 登录或会话初始化接口的 sessionId。
- loginType
- loginValue
- challengeStatus
- challengeType
- challengeQuestions
- id
- hint
- value
POST /v1/credentials/recovery/questions HTTP/1.1 Content-Type: application/json { "data": { "loginType": "phone", "loginValue": "254712345678" }, "metadata": { "country": "KE", "device": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "googleAdId": "38400000-8cf0-11bd-b23e-10b96e40000d", "networkType": "WIFI", "version": "7.30.0" } } }{ "status": "SUCCESS", "statusDescription": "OK", "data": { "displayMsg": "", "challengeStatus": 1, "challengeType": "SECURITY_QUESTIONS", "challengeQuestions": [ { "id": 12, "hint": "What is your mother's maiden name?", "value": "What is your mother's maiden name?" } ] }, "errors": null }校验 PIN 重置答案
POST
/v1/credentials/recovery/answersosint提交 challengeDataList 答案,返回 isVerified 以及 PIN 重置剩余 numberOfTries。
认证方式: JSON 信封,含 loginType=phone 与由 id/answer 组成的 challengeDataList。可附带登录或会话接口的 sessionId。
- loginType
- loginValue
- challengeDataList
- id
- answer
- isVerified
- numberOfTries
POST /v1/credentials/recovery/answers HTTP/1.1 Content-Type: application/json { "data": { "loginType": "phone", "loginValue": "254712345678", "challengeDataList": [ { "id": 12, "answer": "Wanjiku" } ] }, "metadata": { "country": "KE", "device": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "googleAdId": "38400000-8cf0-11bd-b23e-10b96e40000d", "networkType": "WIFI", "version": "7.30.0" } } }{ "status": "SUCCESS", "statusDescription": "OK", "data": { "displayMsg": "", "isVerified": true, "numberOfTries": 2 }, "errors": null }列出还款方式
GET
/v1/repayments/payment-channelsopenfinance列出肯尼亚 Pesa 账单页的还款通道:paymentMethods 每行含 displayName(如 M-Pesa)与 minPayableAmount。
认证方式: 使用 PIN 登录返回的 sessionId(data.sessionId、data.personId、data.mnoCode),以会话令牌请求头发送。不是 Bearer JWT。
- paymentMethods
- displayName
- minPayableAmount
GET /v1/repayments/payment-channels HTTP/1.1 X-Session-Id: <session_id>{ "paymentMethods": [ { "displayName": "M-Pesa", "minPayableAmount": 10.0 }, { "displayName": "Airtel Money", "minPayableAmount": 10.0 } ] }M-Pesa 支付参数
POST
/v1/repayments/checkout-linksopenfinance按 amount 生成应用内还款 WebView:paymentUrl 启动 M-Pesa STK,stopUrl 结束流程。
认证方式: 使用 PIN 登录返回的 sessionId(data.sessionId、data.personId),以会话令牌请求头发送。不是 Bearer JWT。
- amount
- paymentUrl
- stopUrl
POST /v1/repayments/checkout-links HTTP/1.1 Content-Type: application/json X-Session-Id: <session_id> { "amount": 2500.0 }{ "paymentUrl": "https://pay.example.com/mpesa/start?ref=<reference>", "stopUrl": "https://pay.example.com/mpesa/stop" }上传 KYC 照片
POST
/v1/identity/documents/imagesopendata上传国民身份证或自拍图像(imageData、type),在 result=success 时返回已存储的 image URL。
认证方式: 使用 PIN 登录的 sessionId,以会话令牌请求头发送。请求体为带 appInfoData 信封(androidId、deviceId、networkType、personId、pwd、type=156、version)的外层,内含 imageData 与 type。
- imageData
- type
- image
- result
- androidId
- deviceId
- personId
- pwd
- version
POST /v1/identity/documents/images HTTP/1.1 Content-Type: application/json X-Session-Id: <session_id> { "appInfoData": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "networkType": "WIFI", "personId": 1048291, "pwd": "********", "type": 156, "version": "7.30.0" }, "data": { "imageData": "/9j/4AAQSkZJRgABAQAAAQABAAD...", "type": 1 } }{ "data": { "result": "success", "image": "https://cdn.example.com/kyc/ke/<person_id>/id-front.jpg" } }修改 KYC 证件号
POST
/v1/identity/documents/numberopendata在照片 KYC 之后把借款人的 idNumber 与 idType(国民身份证)写到 person 记录。
认证方式: 使用 PIN 登录的 sessionId,以会话令牌请求头发送。请求体内层为 idNumber、idType,外加 appInfoData.personId。
- idNumber
- idType
- personId
- displayMsg
POST /v1/identity/documents/number HTTP/1.1 Content-Type: application/json X-Session-Id: <session_id> { "appInfoData": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "networkType": "WIFI", "personId": 1048291, "pwd": "********", "type": 156, "version": "7.30.0" }, "data": { "idNumber": "12345678", "idType": "NATIONAL_ID" } }{ "data": { "displayMsg": "ID number updated" } }修改 KYC 证件类型
POST
/v1/identity/documents/typeopendata用 idName 切换肯尼亚 person 记录上选中的 KYC 证件种类(国民身份证等)。
认证方式: 使用 PIN 登录的 sessionId,以会话令牌请求头发送。请求体内层为 idName,外加 appInfoData。
- idName
- personId
- result
POST /v1/identity/documents/type HTTP/1.1 Content-Type: application/json X-Session-Id: <session_id> { "appInfoData": { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "networkType": "WIFI", "personId": 1048291, "pwd": "********", "type": 156, "version": "7.30.0" }, "data": { "idName": "NATIONAL_ID" } }{ "data": { "result": "success" } }设备信号上报
POST
/v1/signals/deviceopendata上报设备与借款人遥测(androidId、deviceId、networkType、personId、version),供肯尼亚核保与贷款界面一并使用。
认证方式: 登录后请求体携带 personId 与 pwd(来自 PIN 登录),位于 appInfoData 字段内;type 固定为 156,代表通用设备数据。sessionId 不是 Bearer JWT。
- androidId
- deviceId
- networkType
- personId
- pwd
- type
- version
POST /v1/signals/device HTTP/1.1 Content-Type: application/json { "androidId": "a1b2c3d4e5f6g7h8", "deviceId": "ke-dev-88421", "networkType": "WIFI", "personId": 1048291, "pwd": "********", "type": 156, "version": "7.30.0" }{ "status": "SUCCESS", "statusDescription": "OK" }
数据类别
- 手机号身份
- OTP 会话
- PIN 登录
- KYC 照片
- 国民身份证号
- M-Pesa 还款
- 设备遥测
数据使用场景与案例
监控肯尼亚手机号与 PIN 会话
进件台读取 loginExists、otpValid、loginSuccess、personId、mnoCode、pinStatus,区分新 OTP 注册与回访 PIN 登录,无需刮取 Android 界面。
对账 M-Pesa 还款深链
催收把账单的 displayName、minPayableAmount 与按 amount 签发的 paymentUrl / stopUrl 配对,不必等待 M-Pesa 短信截图。
KYC 照片与证件完整度
核保把已存储的 image URL 与同一 personId 上的 idNumber、idType、idName 拼在一起,再决定是否允许 Pesa 复贷。
设备遥测拼接
反欺诈任务把认证信封里的 androidId、deviceId、googleAdId、networkType 与数据采集里的 personId、type=156 载荷对齐。
常见问题
Tala 的接口如何鉴权?
手机 OTP 与 PIN 登录返回 sessionId、personId、mnoCode、pinStatus。后续 KYC、支付与数据采集调用复用该 sessionId,不是 Bearer JWT。请求信封还会盖上 metadata.device 字段,如 androidId、deviceId、googleAdId、networkType、version。
KYC 界面背后有哪些身份字段?
照片上传提交 imageData 与 type,在 result=success 时返回 image URL。随后 person 记录保存 idNumber、idType、idName(国民身份证)。OTP 之前的手机号查询暴露 loginExists。
能否读取 M-Pesa 还款通道,而不只是登录?
可以。还款方式列表返回 displayName 与 minPayableAmount(M-Pesa 等钱包)。按 amount 取参数会返回应用内还款 WebView 的 paymentUrl 与 stopUrl。
肯尼亚核保会附带哪些设备遥测?
认证 metadata.device 含 androidId、deviceId、googleAdId、networkType、version。Android 数据采集再上报同一批标识以及 personId、pwd 与 type 156。
与 Tala: Fast & Safe Pesa Loan 相似的应用
- Branch — Branch 是面向肯尼亚、尼日利亚和印度的数字金融应用,提供手机即时贷款、钱包转账、账单缴费和应用内储蓄。
- Zenka — Zenka 是 Zenka Digital Limited 的肯尼亚现金贷应用,把 500 至 20 万肯尼亚先令打到 M-Pesa,借款人可自选最长 61 天的期限。
- Okash — Okash 是 Opera 面向肯尼亚的短期现金贷应用,媒体在报道该国手机贷款市场时把它与 Tala、Branch 并列。
- M-Shwari — M-Shwari 是 NCBA Bank 与 Safaricom 于 2012 年 11 月推出的产品,让 M-PESA 用户用手机储蓄、借款,存款还可计息。
- KCB M-PESA — KCB M-PESA 是 Safaricom 与 KCB Bank 于 2015 年 3 月推出的储蓄加贷款产品,在 M-PESA 菜单上提供手机信贷与储蓄。
- My OneApp — My OneApp 是 Safaricom PLC 面向肯尼亚的 M-PESA 超级应用,钱包余额不足时可走 Fuliza 透支,并支持 Lipa na M-PESA 付款和 Ziidi 单位信托。
相关主题
- Tala Pesa 贷款 API
- sessionId personId
- 肯尼亚数字信贷
- M-Pesa 还款 paymentUrl
- KYC image idNumber
- loginExists otpValid
- Tala Mobile 数据 API
需要集成这个 App 的数据 API?
我们可为任意指定 App 交付定制集成——源码交付 USD 500 起,或托管 API 按调用计费。告诉我们您需要的数据即可。
- 每个项目均签 NDA 与 SOW
- 3–7 天交付
- 验收通过后才付款
- 仅在授权范围内作业