J&T Express Indonesia Data API: coins, outlets, tickets
J&T Express Indonesia is the official customer app of J&T Express in Indonesia, published by PT. Global Jet Express (JET). Shoppers and small sellers track a waybill, book a single or batch pickup, look up freight before they ship, keep an address book, apply coupons, pay outstanding bills, and redeem member points. Sign-in is a phone OTP, a 6-digit PIN, or Google, after which the same account opens nearby drop-point maps, a J&T coin wallet that cashes out to a bound Indonesian bank, and help tickets. The app serves the Indonesian parcel market against JNE, SiCepat, Anteraja, Ninja Xpress and Lion Parcel, and it carries a 2.5-star rating from about 137,000 Google Play reviews.
Manage-coins snapshots split currentCoin into spendable availableCoinNum and cashbackCoinNum, gated by minCoinConfig and a cash-out terms flag (isRead, canWithdraw). Ledger pages filter coinPageDto by transactionType and selectRangeTime, stamping each IN/OUT/WITHDRAW row with waybillNo, operateCoin and createTime. A quote before payout returns exchangeAmount, withdrawFee and actualArrivalAmount for a chosen withdrawBankName/withdrawBankAccount; submitting it yields withdrawCode and withdrawStatus. Linked Indonesian banks carry bankCode, bankAccount and bankUserName (catalog rows add bankId and mappingWithdrawBankName).
Drop-point pins keyed by siteCode pair siteAddr with latitude/longitude, startBusinessTime/endBusinessTime and appCusOutletType; district filters reuse mappingProvince, mappingCity and mappingDistrict. Help tickets expose workOrderNo, the related waybillNo and statusChangeLogs when handlingOpinionsNoClosed is still true. A session mints accessToken, cusCode and userId after OTP, PIN or Google. Marketplace sellers and 3PLs plot those outlets onto pickup maps, finance bots reconcile coin cashback against shipped waybills, treasury checks the IDR quote before a BCA/Mandiri payout, and CX dashboards watch how long a complaint stayed OPEN — openData Studio turns that surface 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.
Find customer login method
POST
/v1/session/login-optionsosintResolves whether a phone signs in with OTP or a 6-digit PIN (loginType, pinFlag) before the login screen.
Auth: None. The phone number is the lookup key before OTP or PIN.
- phoneNumber
- countryCode
- areaCode
- loginType
- firstTypeName
- secondTypeName
- pinFlag
- pinCodeFlag
- smsType
- cusCode
POST /v1/session/login-options HTTP/1.1 Content-Type: application/json { "token": "", "deviceId": "a1b2c3d4e5f6", "params": { "phoneNumber": "081234567890", "countryCode": "62", "areaCode": "+62" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "loginType": "otp", "firstTypeName": "OTP", "secondTypeName": "PIN", "pinFlag": true, "pinCodeFlag": true, "smsType": "OTP", "cusCode": "CUS21090001" } }Send SMS verification code
POST
/v1/session/sms-codeosintSends the OTP used on the SMS verify screen (smsType OTP) for an Indonesian MSISDN.
Auth: None. Phone number plus smsType.
- phoneNumber
- smsType
- countryCode
- retryOver5Times
POST /v1/session/sms-code HTTP/1.1 Content-Type: application/json { "token": "", "deviceId": "a1b2c3d4e5f6", "params": { "phoneNumber": "081234567890", "smsType": "OTP", "countryCode": "62" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "retryOver5Times": false, "smsType": "OTP", "phoneNumber": "081234567890" } }Captcha switch before OTP
POST
/v1/session/captcha-gateosintTells the login screen whether Tencent TCaptcha must run (isOpen) before the SMS OTP is sent; the widget returns ticket and randstr.
Auth: None. Called before SMS OTP; a true isOpen flag then opens Tencent TCaptcha (ticket, randstr).
- isOpen
- ticket
- randstr
POST /v1/session/captcha-gate HTTP/1.1 Content-Type: application/json { "token": "", "deviceId": "a1b2c3d4e5f6", "params": {} }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "isOpen": true } }Customer common login
POST
/v1/session/customer-tokenosintMints the customer session (accessToken, cusCode, userId) after OTP or PIN on the login screen.
Auth: None. Phone plus verifyCode (OTP) or pinCode; response accessToken is the session.
- phoneNumber
- verifyCode
- pinCode
- smsType
- loginType
- deviceId
- deviceNo
- accessToken
- token
- cusCode
- userId
- pinCodeFlag
- sessionId
POST /v1/session/customer-token HTTP/1.1 Content-Type: application/json { "token": "", "deviceId": "a1b2c3d4e5f6", "params": { "phoneNumber": "081234567890", "verifyCode": "123456", "pinCode": "", "smsType": "OTP", "loginType": "otp", "deviceId": "a1b2c3d4e5f6", "deviceNo": "a1b2c3d4e5f6" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "accessToken": "<accessToken>", "token": "<accessToken>", "cusCode": "CUS21090001", "userId": "100861001", "phoneNumber": "081234567890", "loginType": "otp", "pinCodeFlag": true, "sessionId": "sess-9f3a" } }Google sign-in
POST
/v1/session/google-identityosintMints the customer session from a Google Sign-In idToken on the login screen.
Auth: None. Google idToken and serverAuthCode from Google Sign-In; response accessToken is the session.
- idToken
- serverAuthCode
- displayName
- emailAddress
- deviceId
- deviceNo
- accessToken
- token
- cusCode
- userId
- loginType
- pinCodeFlag
- sessionId
POST /v1/session/google-identity HTTP/1.1 Content-Type: application/json { "token": "", "deviceId": "a1b2c3d4e5f6", "params": { "idToken": "<google-id-token>", "serverAuthCode": "<server-auth-code>", "displayName": "Budi Santoso", "email": "[email protected]", "emailAddress": "[email protected]", "deviceId": "a1b2c3d4e5f6", "deviceNo": "a1b2c3d4e5f6" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "accessToken": "<accessToken>", "token": "<accessToken>", "cusCode": "CUS21090001", "userId": "100861001", "displayName": "Budi Santoso", "email": "[email protected]", "loginType": "google", "pinCodeFlag": true, "sessionId": "sess-9f3a" } }Set customer PIN
POST
/v1/account/pin/setosintCreates or rotates the 6-digit PIN used on the PIN login screen (oldPinCode when changing).
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- phoneNumber
- pinCode
- oldPinCode
- pinCodeFlag
- pinFlag
POST /v1/account/pin/set HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "phoneNumber": "081234567890", "pinCode": "147258", "oldPinCode": "" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "pinCodeFlag": true, "pinFlag": true, "cusCode": "CUS21090001" } }Insert referral code
POST
/v1/account/referralopendataBinds a friend's referral code on the post-sign-in referral screen.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- referralCode
- oldReferralCode
POST /v1/account/referral HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "referralCode": "JTBUDI88", "oldReferralCode": "" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "referralCode": "JTBUDI88", "cusCode": "CUS21090001", "oldReferralCode": "" } }Current coin balance
POST
/v1/wallet/coins/snapshotopenfinanceReturns the signed-in customer's J&T coin wallet snapshot shown on the manage-coins screen.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- currentCoin
- availableCoinNum
- cashbackCoinNum
- totalCoinNum
- minCoinConfig
POST /v1/wallet/coins/snapshot HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "currentCoin": 12500, "availableCoinNum": 11800, "cashbackCoinNum": 700, "totalCoinNum": 12500, "minCoinConfig": 1000, "cusCode": "CUS21090001" } }Coin ledger page
POST
/v1/wallet/coins/ledgeropenfinancePages the coin ledger (in/out/withdraw) filterable by transactionType and selectRangeTime.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- coinPageDto
- transactionType
- transactionTypeList
- selectRangeTime
- startTime
- endTime
- coinNum
- operateCoin
- waybillNo
- createTime
- withdrawStatus
- orderId
POST /v1/wallet/coins/ledger HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "coinPageDto": { "transactionType": "ALL", "transactionTypeList": [ "IN", "OUT", "WITHDRAW" ], "selectRangeTime": "0-60", "startTime": "2026-09-01 00:00:00", "endTime": "2026-10-11 23:59:59", "page": 1, "pageSize": 20 } } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "list": [ { "coinNum": 250, "operateCoin": 250, "transactionType": "IN", "waybillNo": "JT1234567890ID", "createTime": "2026-10-02 14:21:03", "withdrawStatus": "", "orderId": "ORD-88921" } ], "page": 1, "pageSize": 20, "total": 36 } }Coin withdraw fee quote
POST
/v1/wallet/coins/payout-quoteopenfinanceQuotes IDR cash-out of J&T coins (exchangeAmount, withdrawFee, actualArrivalAmount) before the withdrawal is submitted.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- operateCoin
- exchangeAmount
- taxFee
- withdrawFee
- actualArrivalAmount
- minCoinConfig
- withdrawBankName
- withdrawBankAccount
- mappingWithdrawBankName
POST /v1/wallet/coins/payout-quote HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "operateCoin": 5000, "withdrawBankAccount": "1234567890", "withdrawBankName": "BCA" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "operateCoin": 5000, "exchangeAmount": 50000, "taxFee": 0, "withdrawFee": 2500, "actualArrivalAmount": 47500, "minCoinConfig": 1000, "withdrawBankName": "BCA", "withdrawBankAccount": "1234567890", "mappingWithdrawBankName": "Bank Central Asia" } }Operate coin withdrawal
POST
/v1/wallet/coins/payoutsopenfinanceSubmits a coin-to-bank cash-out and returns withdrawCode plus withdrawStatus.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- operateCoin
- withdrawAmount
- withdrawFee
- withdrawBankName
- withdrawBankAccount
- bankUserName
- pinCode
- withdrawCode
- withdrawStatus
- actualArrivalAmount
- createTime
POST /v1/wallet/coins/payouts HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "operateCoin": 5000, "withdrawAmount": 50000, "withdrawFee": 2500, "withdrawBankName": "BCA", "withdrawBankAccount": "1234567890", "bankUserName": "BUDI SANTOSO", "pinCode": "147258" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "withdrawCode": "WD-20261011-8891", "withdrawStatus": "PENDING", "operateCoin": 5000, "withdrawAmount": 50000, "actualArrivalAmount": 47500, "createTime": "2026-10-11 09:14:22" } }Coin withdrawal detail
POST
/v1/wallet/coins/payouts/detailopenfinanceReturns one cash-out request (withdrawStatus, actualArrivalAmount) for the withdrawal-detail screen.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- withdrawCode
- withdrawStatus
- operateCoin
- withdrawAmount
- withdrawFee
- actualArrivalAmount
- withdrawBankName
- withdrawBankAccount
- bankUserName
- createTime
POST /v1/wallet/coins/payouts/detail HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "withdrawCode": "WD-20261011-8891" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "withdrawCode": "WD-20261011-8891", "withdrawStatus": "PENDING", "operateCoin": 5000, "withdrawAmount": 50000, "withdrawFee": 2500, "actualArrivalAmount": 47500, "withdrawBankName": "BCA", "withdrawBankAccount": "1234567890", "bankUserName": "BUDI SANTOSO", "createTime": "2026-10-11 09:14:22" } }Catalog of withdraw banks
POST
/v1/wallet/banks/catalogopenfinanceLists Indonesian banks that can receive coin withdrawals (bankCode, bankName, bankImg).
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- bankName
- bankId
- bankCode
- bankImg
- mappingWithdrawBankName
POST /v1/wallet/banks/catalog HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "bankName": "" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "list": [ { "bankId": "014", "bankCode": "CENAIDJA", "bankName": "BCA", "bankImg": "https://static.example.com/bank/bca.png", "mappingWithdrawBankName": "Bank Central Asia" } ] } }Customer's linked bank accounts
POST
/v1/wallet/banks/linkedopenfinanceReturns bank accounts the customer already bound for coin cash-out.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- bankId
- bankCode
- bankName
- bankAccount
- bankUserName
- bankImg
- bankFileImg
POST /v1/wallet/banks/linked HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "list": [ { "bankId": "014", "bankCode": "CENAIDJA", "bankName": "BCA", "bankAccount": "1234567890", "bankUserName": "BUDI SANTOSO", "bankImg": "https://static.example.com/bank/bca.png", "bankFileImg": "" } ] } }Bind withdraw bank account
POST
/v1/wallet/banks/linkopenfinanceBinds an Indonesian bank account for coin cash-out after PIN confirm on the add-bank screen.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- pinCode
- appBindBankDto
- bankId
- bankCode
- bankName
- bankAccount
- bankUserName
- bankImg
- bankFileImg
POST /v1/wallet/banks/link HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "pinCode": "147258", "appBindBankDto": { "bankId": "014", "bankCode": "CENAIDJA", "bankName": "BCA", "bankAccount": "1234567890", "bankUserName": "BUDI SANTOSO", "bankImg": "https://static.example.com/bank/bca.png", "bankFileImg": "" } } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "bankId": "014", "bankCode": "CENAIDJA", "bankName": "BCA", "bankAccount": "1234567890", "bankUserName": "BUDI SANTOSO", "cusCode": "CUS21090001" } }Nearby drop points by GPS
POST
/v1/outlets/nearbyopendataLists nearby J&T drop points/outlets for the nearby map, with hours and distance.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- latitude
- longitude
- localLatitude
- localLongitude
- siteCode
- siteName
- siteAddr
- sitePhone
- siteLeader
- siteUrl
- distance
- startBusinessTime
- endBusinessTime
- businesshours
- street
- appCusOutletName
- appCusOutletType
- mappingCity
- mappingProvince
- mappingDistrict
- postalCode
POST /v1/outlets/nearby HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "latitude": -6.2088, "longitude": 106.8456, "localLatitude": -6.2088, "localLongitude": 106.8456 } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "list": [ { "siteCode": "CGK001", "siteName": "J&T Drop Point Menteng", "siteAddr": "Jl. Menteng Raya No. 12, Jakarta Pusat", "sitePhone": "0213900000", "siteLeader": "Andi", "siteUrl": "", "latitude": -6.1967, "longitude": 106.8326, "distance": 1.4, "startBusinessTime": "08:00", "endBusinessTime": "20:00", "businesshours": "08:00-20:00", "street": "Jl. Menteng Raya No. 12", "appCusOutletName": "Drop Point Menteng", "appCusOutletType": "DROP_POINT", "mappingCity": "Jakarta Pusat", "mappingProvince": "DKI Jakarta", "mappingDistrict": "Menteng", "postalCode": "10310" } ] } }Drop points by city district
POST
/v1/outlets/by-districtopendataLists drop points for a province/city/district picked on the city-area list.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- mappingProvince
- mappingCity
- mappingDistrict
- mappingCountyarea
- cityID
- siteCode
- siteName
- siteAddr
- sitePhone
- latitude
- longitude
- appCusOutletType
- startBusinessTime
- endBusinessTime
- postalCode
POST /v1/outlets/by-district HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "mappingProvince": "DKI Jakarta", "mappingCity": "Jakarta Pusat", "mappingDistrict": "Menteng", "mappingCountyarea": "Menteng", "cityID": "JK01" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "list": [ { "siteCode": "CGK001", "siteName": "J&T Drop Point Menteng", "siteAddr": "Jl. Menteng Raya No. 12, Jakarta Pusat", "sitePhone": "0213900000", "latitude": -6.1967, "longitude": 106.8326, "appCusOutletType": "DROP_POINT", "startBusinessTime": "08:00", "endBusinessTime": "20:00", "mappingCity": "Jakarta Pusat", "mappingDistrict": "Menteng", "cityID": "JK01", "postalCode": "10310" } ] } }Help FAQ list
POST
/v1/help/articlesopendataReturns grouped FAQ articles for the help-center screen (faqCode, title, content).
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- lang
- faqList
- faqCode
- title
- content
- groupName
POST /v1/help/articles HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "lang": "EN" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "faqList": [ { "faqCode": "FAQ-TRACK-01", "title": "How do I track a shipment?", "content": "Enter the waybill number on the tracking screen.", "groupName": "Tracking" } ] } }Work-order ticket list
POST
/v1/support/ticketsopendataPages the customer's help tickets (workOrderNo, waybillNo, open handling opinions).
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- handlingOpinionsNoClosed
- workOrderNo
- waybillNo
- orderId
- status
- creatorPhone
- groupName
- createTime
- title
POST /v1/support/tickets HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "page": 1, "pageSize": 20, "handlingOpinionsNoClosed": true } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "list": [ { "workOrderNo": "WO-20261009-441", "waybillNo": "JT1234567890ID", "orderId": "ORD-88921", "status": "OPEN", "handlingOpinionsNoClosed": true, "creatorPhone": "081234567890", "groupName": "Delivery", "createTime": "2026-10-09 11:02:18", "title": "Failed delivery attempt" } ], "page": 1, "total": 4 } }Work-order ticket detail
POST
/v1/support/tickets/detailopendataReturns one ticket with statusChangeLogs for the ticket-detail screen.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- workOrderNo
- cusCode
- waybillNo
- orderId
- status
- title
- content
- creatorPhone
- groupName
- handlingOpinionsNoClosed
- statusChangeLogs
- createTime
POST /v1/support/tickets/detail HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "workOrderNo": "WO-20261009-441", "cusCode": "CUS21090001" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "workOrderNo": "WO-20261009-441", "waybillNo": "JT1234567890ID", "orderId": "ORD-88921", "status": "OPEN", "title": "Failed delivery attempt", "content": "Courier could not reach the recipient.", "creatorPhone": "081234567890", "groupName": "Delivery", "handlingOpinionsNoClosed": true, "statusChangeLogs": [ { "status": "OPEN", "createTime": "2026-10-09 11:02:18" } ], "createTime": "2026-10-09 11:02:18" } }Check customer PIN
POST
/v1/account/pin/verifyosintValidates the 6-digit PIN on the PIN login screen before coin cash-out or bank bind.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- phoneNumber
- pinCode
- pinCodeFlag
- pinFlag
POST /v1/account/pin/verify HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "phoneNumber": "081234567890", "pinCode": "147258" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "pinCodeFlag": true, "pinFlag": true, "cusCode": "CUS21090001" } }Change customer phone number
POST
/v1/account/phone/rebindosintRebinds the signed-in customer's MSISDN on the safe-setting screen after SMS verify.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- phoneNumber
- verifyCode
- smsType
- userId
POST /v1/account/phone/rebind HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "phoneNumber": "081298765432", "verifyCode": "654321", "smsType": "OTP" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "cusCode": "CUS21090001", "phoneNumber": "081298765432", "userId": "100861001" } }Unbind withdraw bank account
POST
/v1/wallet/banks/unlinkopenfinanceRemoves a previously bound cash-out bank after PIN confirm on the bank list screen.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- pinCode
- bankId
- bankCode
- bankAccount
POST /v1/wallet/banks/unlink HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001", "pinCode": "147258", "bankId": "014", "bankCode": "CENAIDJA", "bankAccount": "1234567890" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "cusCode": "CUS21090001", "bankAccount": "1234567890", "bankCode": "CENAIDJA", "bankId": "014" } }Coin withdrawal terms unread flag
POST
/v1/wallet/coins/terms-statusopenfinanceTells the manage-coins screen whether the customer has accepted coin-cash-out terms (isRead / judgeIsRead) before a withdrawal is allowed (canWithdraw).
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- isRead
- judgeIsRead
- canWithdraw
POST /v1/wallet/coins/terms-status HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "isRead": false, "judgeIsRead": false, "canWithdraw": false, "cusCode": "CUS21090001" } }Coin withdrawal terms body
POST
/v1/wallet/coins/termsopenfinanceReturns the coin-cash-out terms body shown on the terms screen (content) together with the current isRead flag.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- content
- isRead
POST /v1/wallet/coins/terms HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "content": "J&T coin cash-out terms…", "isRead": false, "cusCode": "CUS21090001" } }Mark coin withdrawal terms read
POST
/v1/wallet/coins/terms-ackopenfinanceRecords that the customer accepted coin-cash-out terms so canWithdraw flips true on the next terms-status check.
Auth: Customer session: JSON body field token (accessToken issued at sign-in), plus method/params envelope and deviceId.
- cusCode
- isRead
- canWithdraw
POST /v1/wallet/coins/terms-ack HTTP/1.1 Content-Type: application/json { "token": "<accessToken>", "deviceId": "a1b2c3d4e5f6", "params": { "cusCode": "CUS21090001" } }{ "code": "1", "success": true, "message": "ok", "flag": true, "data": { "isRead": true, "canWithdraw": true, "cusCode": "CUS21090001" } }
Data categories
- customer login tokens
- SMS OTP and PIN flags
- J&T coin wallet balances
- coin ledger and cash-out
- linked bank accounts
- drop-point and outlet locations
- FAQ articles
- customer work-order tickets
- Google sign-in tokens
- referral codes
- bound bank account writes
- PIN verification
- phone-number rebind
- Tencent TCaptcha switch
- coin cash-out terms acceptance
Where teams use this data
Pickup-network coverage map
A 3PL or marketplace plots siteCode, siteAddr, latitude/longitude and startBusinessTime/endBusinessTime from the GPS and district locators so sellers see which J&T drop points are open near a pickup.
Seller coin reconciliation
Finance bots pull currentCoin and availableCoinNum, then page coinPageDto rows (waybillNo, operateCoin, transactionType) to match cashback against shipped parcels.
Payout-rail verification
Before a cash-out, treasury checks linked bank rows (bankAccount, bankUserName, bankCode) and the coin-to-IDR quote (withdrawFee, actualArrivalAmount) so IDR lands on the right BCA/Mandiri account.
Support-ticket SLA watch
A CX dashboard pages handlingOpinionsNoClosed tickets and reads statusChangeLogs on each ticket detail to see how long a waybill complaint stayed OPEN.
Frequently asked questions
How does J&T Express Indonesia authenticate customers?
A login-method lookup tells the app whether a phone uses OTP or a 6-digit PIN (loginType, pinFlag). An SMS code is issued, then a common login — or a Google idToken exchange — returns accessToken, cusCode and userId. Later calls send that token in a JSON body field named token, together with a method/params envelope.
What coin-wallet fields can I read?
The wallet snapshot returns currentCoin, availableCoinNum, cashbackCoinNum and minCoinConfig. A paged ledger lists waybillNo, operateCoin and transactionType; a cash-out quote returns exchangeAmount, withdrawFee and actualArrivalAmount before the withdrawal is submitted as withdrawCode/withdrawStatus.
Can I list J&T drop points and linked banks?
Yes. A GPS locator takes latitude/longitude and returns siteCode, siteAddr, distance and startBusinessTime/endBusinessTime; a district locator filters the same outlet cards by mappingProvince, mappingCity and mappingDistrict. Bound cash-out banks expose bankCode, bankAccount and bankUserName.
Are these public developer APIs?
No. They are first-party calls the signed-in customer app makes. They require the customer's accessToken except for the login, OTP and captcha-gate methods.
Apps similar to J&T Express Indonesia
- JNE Express — JNE Express (PT Tiki Jalur Nugraha Ekakurir) is a Jakarta courier founded in 1990 that tracks shipments and quotes rates for nationwide Indonesian parcels, the long-running domestic alternative to J&T.
- SiCepat Ekspres — SiCepat Ekspres is an Indonesian logistics company founded in 2014 whose site and app track a waybill, book a pickup, look up postage, and sell BEST next-day, regular, HALU economy and COD products.
- Anteraja — Anteraja is the parcel brand of PT Tri Adi Bersama, a Jakarta logistics unit of Adi Sarana Armada founded in March 2019 that sells next-day, same-day and regular deliveries through its customer app.
- Ninja Xpress — Ninja Xpress is Ninja Van's Indonesian last-mile brand; the Singapore courier, founded in 2014, runs hub-and-spoke parcel delivery in Indonesia and works with Tokopedia, Lazada and Shopee.
- Lion Parcel — Lion Parcel is PT Lion Express, the Lion Air Group courier founded in 2013 that books economy or express parcels with COD across Indonesia and more than 50 countries.
- TIKI — TIKI (Titipan Kilat) is an Indonesian courier whose site tracks a waybill, quotes postage and books same-day, overnight, regular, economy, trucking and international parcels.
- Pos Indonesia — Pos Indonesia is the state-owned postal operator that runs PosAja for letters and packages plus a national counter network, the public-post alternative to private J&T waybills.
- DHL Express Mobile — DHL Express Mobile is the official DHL Android client for shipment tracking, the time-definite international express app Indonesian senders run next to a domestic J&T waybill.
Topics
- J&T Express Indonesia API
- J&T coin wallet
- J&T drop point locator
- J&T work order tickets
- J&T coin cash-out IDR
- PT Global Jet Express 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