My DishTV icon

My DishTV data API: packs, balance and recharge

Dish TV India Limited · Telecom

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

  • My DishTV screenshot 1
  • My DishTV screenshot 2
  • My DishTV screenshot 3
  • My DishTV screenshot 4
  • My DishTV screenshot 5

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/otp osint

    Starts 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/verify osint

    Confirms 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/summary openbanking

    Loads 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 screen
    • My 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/current opendata

    Returns 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 tiles
    • genre icons (gec, sports, news, kids, movies, infotainment) on the channel browser
  • Search recommended packs and a-la-carte channels

    GET /api/SubApp/packs/catalog opendata

    Pages 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 tiles
    • language chips (hindi, tamil, telugu, bengali, marathi, kannada, malayalam, punjabi) on the catalog filters
  • Modify pack (add or drop channels)

    POST /api/SubApp/packs/modify opendata

    Applies 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 screens
    • empty states no_pack_found / noRecommendedPackFound / noChannelDetailFound on the same flow
  • Initiate instant recharge

    POST /api/SubApp/recharge/initiate openfinance

    Creates 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 tiles
    • Juspay 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/transactions openbanking

    Pages 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 tiles
    • Completed / Inprogress / Failed status icons on the transaction list
  • List invoices

    GET /api/SubApp/invoices openfinance

    Returns 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 menu
    • AEM_BASE_URL in the app config hosts CMS/document URLs used for invoice PDFs
  • Fetch EPG channel guide

    GET /api/SubApp/epg/guide opendata

    Serves 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 tiles
    • empty_channel / no_channel_data states on the same guide
  • List offers and limited packs

    GET /api/SubApp/offers opendata

    Returns 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 tiles
    • AEM_BASE_URL in the app config is the CMS host for banner artwork
  • Create issue-tracker ticket

    POST /api/SubApp/issues opendata

    Opens 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 screens
    • get_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

Get a quote