My DishTV data API: packs, balance and recharge
My DishTV is the official subscriber self-care app of Dish TV India Limited, one of India's largest direct-to-home (DTH) satellite television providers. For households across India it is the everyday control panel for the TV connection: sign-in is a one-time password sent to the registered mobile number, and from there the app covers multi-box account switching, live INR balance and switch-off date, the subscribed pack and its channel lineup, instant recharge over UPI, cards and wallets, invoices and account statements, an electronic programme guide and an issue tracker for service faults.
As a data source, the app exposes the full state of each viewing-card connection. The wallet position comes through balanceAmount, monthlyRechargeAmount and switchOffDate; the subscribed bouquet and per-channel lcn, genre and language rows describe the lineup; and the recharge ledger records txnId, payment mode and GST taxAmount across transactions and invoices. Billing-alert bots, INR cashbook and accounting integrations, content-rights reconciliation dashboards and EPG-aware reminder tools are all built on these fields.
My DishTV is the subscriber self-care app from Dish TV India Limited, one of India's largest direct-to-home satellite television providers. Households use it to manage a DTH connection: live wallet balance and switch-off date, the current pack and channel lineup, instant recharge, invoices and an electronic programme guide. Behind those screens sits a per-connection dataset — subscriber identity, balances, pack and channel catalog rows, recharge transactions and EPG listings — that billing monitors, finance integrations, content-rights dashboards and reminder tools build on.
Screenshots
API surface
Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.
Send login OTP to registered mobile
POST
/api/SubApp/auth/otposintStarts My DishTV login by sending a 6-digit SMS OTP to the subscriber's registered mobile number (RMN) and returns the otpTxnId used to confirm it.
Auth: Unauthenticated. Body is the registered mobile number (RMN). The native encryption plugin JWT-signs the payload. On success an otpTxnId is required by the verify step.
- rmn
- channel
- appVersion
- platform
- status
- message
- otpTxnId
- otpLength
- resendAfterSeconds
- maskedRmn
POST /api/SubApp/auth/otp HTTP/1.1 Content-Type: application/json X-App-Version: 10.1.9 { "rmn": "9876543210", "channel": "SMS", "appVersion": "10.1.9", "platform": "android" }{ "status": "SUCCESS", "message": "OTP sent", "otpTxnId": "otp-7c11e2", "otpLength": 6, "resendAfterSeconds": 30, "maskedRmn": "98XXXX3210" }Source in the app
inferred from the RMN + OTP login screen (same credentials as dishtv.in My Account)Firebase Auth + SMS retriever permissions on the Android host; native_encryption_plugin JWT-signs later payloads
Verify OTP and issue subscriber session
POST
/api/SubApp/auth/verifyosintConfirms the SMS OTP and returns the Bearer session plus the list of viewing-card connections linked to the RMN (DishTV / d2h / Smart+ boxes).
Auth: Unauthenticated. Body carries otpTxnId from /api/SubApp/auth/otp plus the SMS code. The returned accessToken is sent as Authorization: Bearer on later SubApp calls.
- otpTxnId
- otp
- rmn
- status
- accessToken
- refreshToken
- subscriberId
- subscriberName
- connections
- vcNumber
- stbId
- brand
- tokenType
POST /api/SubApp/auth/verify HTTP/1.1 Content-Type: application/json X-App-Version: 10.1.9 { "otpTxnId": "otp-7c11e2", "otp": "482913", "rmn": "9876543210" }{ "status": "SUCCESS", "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session", "refreshToken": "rt-dishtv-9f2a", "subscriberId": "SUB-18482911", "rmn": "9876543210", "subscriberName": "Rahul Sharma", "connections": [ { "vcNumber": "012345678901", "stbId": "STB88421", "brand": "DISHTV", "status": "ACTIVE" } ], "tokenType": "Bearer" }Source in the app
inferred from OTP confirm + multi-connection picker (multiconnection back-arrow and choose_box_setupbox tiles)d2h_new_image / d2hsmart+ / dish_tv branding on the account switcher
Fetch account summary (balance, pack, switch-off)
GET
/api/SubApp/account/summaryopenbankingLoads the home dashboard: viewing-card identity, INR wallet balance, monthly recharge amount, switch-off date and the currently subscribed bouquet.
Auth: Authorization: Bearer accessToken from /api/SubApp/auth/verify. Query vcNumber selects the active connection when the RMN has more than one box.
- vcNumber
- stbId
- subscriberName
- accountStatus
- balanceAmount
- currency
- monthlyRechargeAmount
- switchOffDate
- lastPaymentDate
- lastPaymentAmount
- currentPack
- packId
- packName
- packType
- endDate
GET /api/SubApp/account/summary?vcNumber=012345678901 HTTP/1.1 Authorization: Bearer eyJhbGciOi... X-App-Version: 10.1.9{ "status": "SUCCESS", "vcNumber": "012345678901", "stbId": "STB88421", "subscriberName": "Rahul Sharma", "accountStatus": "ACTIVE", "balanceAmount": 186.50, "currency": "INR", "monthlyRechargeAmount": 399.00, "switchOffDate": "2026-10-12", "lastPaymentDate": "2026-09-12", "lastPaymentAmount": 399.00, "currentPack": { "packId": "PK-SUPER-FAMILY-HINDI", "packName": "Super Family Hindi", "packType": "BOUQUET", "endDate": "2026-10-12" } }Source in the app
inferred from the home balance tile (balance_new_image) and current_pack_detail screenMy Account on dishtv.in exposes the same balance / pack / switch-off fields after RMN login
List current pack and subscribed channels
GET
/api/SubApp/packs/currentopendataReturns the subscribed bouquet, per-channel LCN/genre/language/quality rows and paid add-ons shown on Manage My Pack.
Auth: Authorization: Bearer accessToken. vcNumber query selects the box.
- vcNumber
- packId
- packName
- packType
- monthlyPrice
- hdEnabled
- channelCount
- channels
- channelId
- channelName
- genre
- language
- quality
- lcn
- isAlaCarte
- addOns
- addOnId
- addOnName
GET /api/SubApp/packs/current?vcNumber=012345678901 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "status": "SUCCESS", "vcNumber": "012345678901", "packId": "PK-SUPER-FAMILY-HINDI", "packName": "Super Family Hindi", "packType": "BOUQUET", "monthlyPrice": 399.00, "hdEnabled": true, "channelCount": 312, "channels": [ { "channelId": "CH-101", "channelName": "Star Plus", "genre": "GEC", "language": "Hindi", "quality": "HD", "lcn": 101, "isAlaCarte": false } ], "addOns": [ { "addOnId": "AO-SPORTS-HD", "addOnName": "Sports HD", "monthlyPrice": 49.00 } ] }Source in the app
inferred from current_pack_detail, manage_my_pack_background, chaneels, single_channels and adds_on tilesgenre icons (gec, sports, news, kids, movies, infotainment) on the channel browser
Search recommended packs and a-la-carte channels
GET
/api/SubApp/packs/catalogopendataPages the pack catalog used by Manage My Pack: recommended bouquets, Dish TV combos, value packs and a-la-carte channels filterable by genre and language.
Auth: Authorization: Bearer accessToken. Optional genre, language and q filters from the pack browser.
- genre
- language
- q
- recommended
- packId
- packName
- packType
- monthlyPrice
- channelCount
- isRecommended
- combos
- alaCarte
- channelId
- channelName
GET /api/SubApp/packs/catalog?vcNumber=012345678901&genre=GEC&language=Hindi&q=family HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "status": "SUCCESS", "recommended": [ { "packId": "PK-VALUE-HINDI", "packName": "Value Hindi", "packType": "VALUE_PACK", "monthlyPrice": 249.00, "channelCount": 198, "isRecommended": true } ], "combos": [ { "packId": "PK-DISH-COMBO-1", "packName": "Dish TV Combo", "monthlyPrice": 449.00 } ], "alaCarte": [ { "channelId": "CH-401", "channelName": "Sony Liv Pack", "monthlyPrice": 19.00, "language": "Hindi" } ] }Source in the app
inferred from recommended / recommendedNewPack, dish_tv_combos, economicpack, ic_value_pack and all_in_one_pack tileslanguage chips (hindi, tamil, telugu, bengali, marathi, kannada, malayalam, punjabi) on the catalog filters
Modify pack (add or drop channels)
POST
/api/SubApp/packs/modifyopendataApplies add/drop channel and add-on changes on Manage My Pack and, when the monthly price rises, returns a paymentOrderId handed to the recharge checkout.
Auth: Authorization: Bearer accessToken. Write against the selected vcNumber; a preview quote is returned before payment if the monthly price changes.
- vcNumber
- addChannelIds
- removeChannelIds
- addOnIds
- modificationId
- newMonthlyPrice
- priceDelta
- effectiveFrom
- requiresPayment
- paymentOrderId
POST /api/SubApp/packs/modify HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "vcNumber": "012345678901", "addChannelIds": ["CH-401"], "removeChannelIds": ["CH-218"], "addOnIds": ["AO-SPORTS-HD"] }{ "status": "SUCCESS", "modificationId": "MOD-55291", "vcNumber": "012345678901", "newMonthlyPrice": 448.00, "priceDelta": 49.00, "effectiveFrom": "2026-10-13", "requiresPayment": true, "paymentOrderId": "pay-8f21a4" }Source in the app
inferred from addRemoveChannelImage, adds_on and text_manage_pack screensempty states no_pack_found / noRecommendedPackFound / noChannelDetailFound on the same flow
Initiate instant recharge
POST
/api/SubApp/recharge/initiateopenfinanceCreates a DishTV recharge order for the selected VC (self, friend or pay-later), applies an offer, and returns the Juspay order used by the in-app checkout.
Auth: Authorization: Bearer accessToken. Amount defaults to monthlyRechargeAmount from the account summary; Juspay HyperSDK completes the instrument step.
- vcNumber
- amount
- currency
- offerId
- payLater
- rechargeForFriend
- orderId
- discountAmount
- payableAmount
- juspayClientId
- juspayOrderId
- paymentUrl
- switchOffDateAfter
POST /api/SubApp/recharge/initiate HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "vcNumber": "012345678901", "amount": 399.00, "currency": "INR", "offerId": "OFF-FESTIVE-50", "payLater": false, "rechargeForFriend": false }{ "status": "SUCCESS", "orderId": "DTV-RCH-884291", "vcNumber": "012345678901", "amount": 399.00, "discountAmount": 50.00, "payableAmount": 349.00, "currency": "INR", "juspayClientId": "dishtv", "juspayOrderId": "ordeh_9c1a", "paymentUrl": "https://payments.juspay.in/merchant/pay/ordeh_9c1a", "switchOffDateAfter": "2026-11-12" }Source in the app
inferred from instant_recharge_menu_image, menu_instantrecharge_icon, recharge_friend_image and pay_later tilesJuspay HyperSDK merchant config bundled as dishtv (assets.juspay.in/hyper/configs/dishtv) plus Amazon Pay and PhonePe SDKs
List account statement / recharge transactions
GET
/api/SubApp/transactionsopenbankingPages the account-statement ledger behind All Transactions: recharge, pack-modify and pay-later rows with mode, status and narration.
Auth: Authorization: Bearer accessToken. Paginated by fromDate / toDate and vcNumber.
- fromDate
- toDate
- page
- pageSize
- total
- transactions
- txnId
- txnDate
- txnType
- amount
- currency
- mode
- status
- narration
- vcNumber
GET /api/SubApp/transactions?vcNumber=012345678901&fromDate=2026-07-01&toDate=2026-09-29&page=1&pageSize=20 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "status": "SUCCESS", "page": 1, "pageSize": 20, "total": 14, "transactions": [ { "txnId": "DTV-RCH-884291", "txnDate": "2026-09-12T18:41:02+05:30", "txnType": "RECHARGE", "amount": 399.00, "currency": "INR", "mode": "UPI", "status": "SUCCESS", "narration": "Instant recharge Super Family Hindi", "vcNumber": "012345678901" } ] }Source in the app
inferred from account_statement and all_transaction tilesCompleted / Inprogress / Failed status icons on the transaction list
List invoices
GET
/api/SubApp/invoicesopenfinanceReturns billed periods, tax-inclusive totals and PDF links for the My Invoice screen.
Auth: Authorization: Bearer accessToken. vcNumber scopes the billing account.
- invoiceNumber
- invoiceDate
- periodFrom
- periodTo
- packName
- amount
- taxAmount
- totalAmount
- currency
- pdfUrl
- status
GET /api/SubApp/invoices?vcNumber=012345678901&page=1&pageSize=12 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "status": "SUCCESS", "invoices": [ { "invoiceNumber": "INV-202609-4412", "invoiceDate": "2026-09-01", "periodFrom": "2026-08-13", "periodTo": "2026-09-12", "packName": "Super Family Hindi", "amount": 399.00, "taxAmount": 71.82, "totalAmount": 470.82, "currency": "INR", "pdfUrl": "/invoices/INV-202609-4412.pdf", "status": "PAID" } ] }Source in the app
inferred from the my_invoice tile on the account menuAEM_BASE_URL in the app config hosts CMS/document URLs used for invoice PDFs
Fetch EPG channel guide
GET
/api/SubApp/epg/guideopendataServes the electronic programme guide behind Channel Guide: per-LCN listings, synopsis, favourite flags and reminder state.
Auth: Authorization: Bearer accessToken. date and optional genre / language filter the grid; subscribedOnly=true limits rows to the current pack.
- date
- genre
- subscribedOnly
- channels
- channelId
- channelName
- lcn
- isFavorite
- programmes
- programmeId
- title
- startTime
- endTime
- synopsis
- reminderSet
GET /api/SubApp/epg/guide?vcNumber=012345678901&date=2026-09-29&genre=GEC&subscribedOnly=true HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "status": "SUCCESS", "date": "2026-09-29", "channels": [ { "channelId": "CH-101", "channelName": "Star Plus", "lcn": 101, "isFavorite": true, "programmes": [ { "programmeId": "EPG-101-1840", "title": "Anupamaa", "startTime": "2026-09-29T18:30:00+05:30", "endTime": "2026-09-29T19:00:00+05:30", "synopsis": "Daily soap", "reminderSet": false } ] } ] }Source in the app
inferred from channel_guide_image, welcome_channel_guide_image, set_favroite_icon, set_reminder_image and channelSynopsisEmptyState tilesempty_channel / no_channel_data states on the same guide
List offers and limited packs
GET
/api/SubApp/offersopendataReturns recharge and pack offers (flat/percent, min amount, validity, eligible packIds) shown on the home banners and Offer limited tile.
Auth: Authorization: Bearer accessToken. Optional vcNumber personalises offers to the current pack.
- offers
- offerId
- title
- description
- discountType
- discountValue
- minRechargeAmount
- validTill
- applicablePackIds
- bannerUrl
GET /api/SubApp/offers?vcNumber=012345678901 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "status": "SUCCESS", "offers": [ { "offerId": "OFF-FESTIVE-50", "title": "Festive ₹50 off", "description": "₹50 off on recharge of ₹399 or more", "discountType": "FLAT", "discountValue": 50.00, "minRechargeAmount": 399.00, "validTill": "2026-10-31", "applicablePackIds": ["PK-SUPER-FAMILY-HINDI"], "bannerUrl": "/banners/festive-50.webp" } ] }Source in the app
inferred from Offer_limited, offer_banner, offer_image, offer_watcho_image and no_offers tilesAEM_BASE_URL in the app config is the CMS host for banner artwork
Create issue-tracker ticket
POST
/api/SubApp/issuesopendataOpens a service ticket from Issue Tracker (no-signal, recharge not reflected, box errors) and returns ticketId, status and on-device troubleshoot steps.
Auth: Authorization: Bearer accessToken. Optional photo from the camera permission; ticket is bound to vcNumber.
- vcNumber
- category
- description
- stbOn
- errorCode
- ticketId
- ticketStatus
- createdAt
- etaHours
- troubleshootSteps
POST /api/SubApp/issues HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "vcNumber": "012345678901", "category": "NO_SIGNAL", "description": "No signal after recharge, error 101", "stbOn": true, "errorCode": "101" }{ "status": "SUCCESS", "ticketId": "SR-95017-88421", "vcNumber": "012345678901", "category": "NO_SIGNAL", "ticketStatus": "OPEN", "createdAt": "2026-09-29T18:12:04+05:30", "etaHours": 24, "troubleshootSteps": [ "Keep the set-top box powered on", "Reseat the LNB cable", "Wait for the next signal refresh" ] }Source in the app
inferred from issue_tracker, check_Image_Issue_Tracker and troubleshoot_image1/2/3 screensget_help_new / headphone_home_image / headset_image support entry points on the home menu
Data categories
- identity
- balances
- transactions
- billing
- catalog
- epg
Where teams use this data
DTH balance and switch-off monitoring
A household-billing bot calls GET /api/SubApp/account/summary per vcNumber after the RMN OTP session and alerts when balanceAmount or switchOffDate is inside a chosen window, using monthlyRechargeAmount as the suggested top-up.
Pack and channel-lineup reconciliation
A content-rights dashboard pulls GET /api/SubApp/packs/current (channelId, lcn, genre, quality, addOns) and diffs it against GET /api/SubApp/packs/catalog so operators can see which bouquets and a-la-carte rows a VC actually carries.
Recharge ledger into finance tools
Nightly jobs page GET /api/SubApp/transactions and GET /api/SubApp/invoices to land txnId, mode, payableAmount and GST taxAmount into an INR cashbook, matching Juspay orderId from POST /api/SubApp/recharge/initiate.
EPG-aware viewing reminders
A companion client reads GET /api/SubApp/epg/guide for subscribedOnly=true channels, then uses programmeId / startTime / isFavorite to schedule reminders that match the in-app Channel Guide.
Frequently asked questions
How does My DishTV authenticate a subscriber?
The app sends a 6-digit SMS OTP to the registered mobile number at POST /api/SubApp/auth/otp, then exchanges otpTxnId + otp at /api/SubApp/auth/verify for a Bearer accessToken and the list of VC numbers linked to that RMN. Later SubApp calls attach Authorization: Bearer; request bodies are JWT-signed by the native encryption plugin.
Which fields describe a DishTV connection's money state?
GET /api/SubApp/account/summary returns balanceAmount and currency (INR), monthlyRechargeAmount, switchOffDate, lastPaymentDate / lastPaymentAmount, and the currentPack object (packId, packName, endDate) for the selected vcNumber / stbId.
How does instant recharge work in the API?
POST /api/SubApp/recharge/initiate creates an order for a vcNumber and amount (optionally offerId, payLater, rechargeForFriend). The response includes orderId, payableAmount, juspayClientId / juspayOrderId and paymentUrl; Juspay HyperSDK (merchant dishtv) completes UPI, card, wallet or net-banking. The resulting row appears on GET /api/SubApp/transactions.
Can I read the channel lineup and EPG, not just the balance?
Yes. GET /api/SubApp/packs/current returns subscribed channels (channelId, lcn, genre, language, quality) and add-ons; GET /api/SubApp/packs/catalog pages recommended / combo / a-la-carte rows; GET /api/SubApp/epg/guide returns per-programme title, startTime, synopsis and reminderSet for the Channel Guide screen.
Topics
- My DishTV API
- Dish TV subscriber API
- DTH recharge API
- VC number balance
- DishTV pack catalog
- switch-off date
- DishTV invoices
- EPG channel guide
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