Tuned Global

Music for Telcos — API Quick Start Guide

Overview

This guide walks through the end-to-end flow for integrating Tuned Global's TConnect APIs into a telco environment. By the end, you'll have registered a subscriber, verified their profile, searched the catalogue, streamed a track, and logged a play event.

Estimated time: 10–15 minutes

Prerequisites

  • A StoreId issued by Tuned Global for your telco environment
  • OAuth2 client credentials (client ID and secret) from Tuned Global
  • A test MSISDN (phone number) or external user ID
  • cURL or Postman installed

Step 1: Register a User (TConnect)

Register a new subscriber using their MSISDN or external user ID via the TConnect endpoint.

Endpoint: POST https://api-services-connect.tunedglobal.com/api/v1/tconnect/users

curl -X POST "https://api-services-connect.tunedglobal.com/api/v1/tconnect/users" \
  -H "Content-Type: application/json" \
  -H "StoreId: YOUR_STORE_ID" \
  -d '{
    "ExternalUserId": "+601234567890",
    "FirstName": "Jane",
    "LastName": "Doe",
    "Email": "jane.doe@example.com",
    "Gender": "Female",
    "BirthYear": 1990,
    "Country": "MY"
  }'

Note: The ExternalUserId is typically the subscriber's MSISDN. This creates the user in TConnect and returns their Tuned Global user ID.

Step 2: Validate the User

Confirm the user exists and is correctly linked to your store before proceeding.

Endpoint: POST https://api-services-connect.tunedglobal.com/api/v1/tconnect/users/validate

curl -X POST "https://api-services-connect.tunedglobal.com/api/v1/tconnect/users/validate" \
  -H "Content-Type: application/json" \
  -H "StoreId: YOUR_STORE_ID" \
  -d '{
    "Msisdn": "+601234567890",
    "StoreId": "YOUR_STORE_ID",
    "ExternalUserId": "+601234567890"
  }'

A successful response returns the user's internal ID, confirming registration.

Step 3: Authenticate (Get Bearer Token)

Obtain a JWT token to authorise subsequent API calls.

Endpoint: POST https://api-authentication-connect.tunedglobal.com/oauth2/token

curl -X POST "https://api-authentication-connect.tunedglobal.com/oauth2/token" \
  -H "StoreId: YOUR_STORE_ID" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password&username=YOUR_TEST_USERNAME&password=YOUR_TEST_PASSWORD"

Response:

{
  "access_token": "eyJhbGciOiJSUzI1NiIs...",
  "token_type": "bearer",
  "expires_in": 86400
}

Save the access_token — you'll use it as a Bearer token in all authenticated requests below.

Step 4: Check Subscription Status

Verify the subscriber has an active package/subscription before allowing playback.

Endpoint: GET https://api-services-connect.tunedglobal.com/api/v1/tconnect/sub-status

curl -X GET "https://api-services-connect.tunedglobal.com/api/v1/tconnect/sub-status?msisdn=%2B601234567890&storeId=YOUR_STORE_ID" \
  -H "StoreId: YOUR_STORE_ID"

Response:

[
  {
    "Id": 12345,
    "StartDate": "2026-01-01T00:00:00",
    "EndDate": "2026-12-31T23:59:59",
    "PackageName": "Premium Music",
    "PlanName": "Monthly",
    "UserId": 67890,
    "PhoneNumber": "+601234567890"
  }
]

This confirms the user's subscription is active and which package they're on.

Step 4.5: Get User Profile

Retrieve the registered user's profile to confirm their account details, active subscriptions, and device entitlements.

Endpoint: GET https://api-services-connect.tunedglobal.com/api/v3/users/{user_id}/profile

curl -X GET "https://api-services-connect.tunedglobal.com/api/v3/users/67890/profile" \
  -H "StoreId: YOUR_STORE_ID" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Replace 67890 with the UserId returned in Step 4 (sub-status response).

Response includes: user profile data, active subscriptions, and registered devices.

You can also retrieve the subscriber's total listening minutes — useful for engagement reporting and telco dashboards:

Endpoint: GET https://api-services-connect.tunedglobal.com/api/v1/tconnect/listening-minutes

curl -X GET "https://api-services-connect.tunedglobal.com/api/v1/tconnect/listening-minutes?msisdn=%2B601234567890&storeId=YOUR_STORE_ID" \
  -H "StoreId: YOUR_STORE_ID"

Response: a numeric value representing total listening minutes for the subscriber.

Step 5: Search the Catalogue

Search for tracks, artists, or albums across the catalogue.

Endpoint: GET https://api-metadata-connect.tunedglobal.com/api/v2.4/search/songs

curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/search/songs?q=Bohemian%20Rhapsody&offset=0&count=5" \
  -H "StoreId: YOUR_STORE_ID" \
  -H "Country: MY"

Other search endpoints available:

/api/v2.4/search/albums       Search albums
/api/v2.4/search/artists      Search artists
/api/v2.4/search/playlists    Search playlists
/api/v2.4/search              Search across all types
/api/v2.4/search/songs/advanced   Advanced search (BPM, duration, year, key, tags)

Note the Track ID from the response — you'll need it for streaming.

Step 6: Get Stream URL

First, request a security token for the stream, then obtain the signed CDN streaming URL.

6a. Request Stream Token

Endpoint: POST https://api-services-connect.tunedglobal.com/api/v3/plays/{deviceId}/{trackId}/token

curl -X POST "https://api-services-connect.tunedglobal.com/api/v3/plays/1001/987654/token" \
  -H "StoreId: YOUR_STORE_ID" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Save the token value from the response.

6b. Get Stream Location

Endpoint: POST https://api-services-connect.tunedglobal.com/api/v3/plays/{deviceId}/{trackId}/stream

curl -X POST "https://api-services-connect.tunedglobal.com/api/v3/plays/1001/987654/stream?streamType=Music&streamProvider=Tuned" \
  -H "StoreId: YOUR_STORE_ID" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '"STREAM_TOKEN_FROM_STEP_6A"'

The response is a signed streaming URL with a TTL (time-to-live) expiration. Use this URL in your audio player for playback.

Step 7: Log Playback Events

Log play events for royalty reporting, analytics, and compliance. You should log at minimum: Start, 30-second mark, and End of File.

Endpoint: POST https://api-services-connect.tunedglobal.com/api/v3/plays/{deviceId}

curl -X POST "https://api-services-connect.tunedglobal.com/api/v3/plays/1001" \
  -H "StoreId: YOUR_STORE_ID" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "TrackId": 987654,
    "LogPlayType": "Start",
    "Seconds": 0,
    "Source": "Search",
    "SourceId": "0",
    "Guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "Country": "MY",
    "PlayerType": "MobilePhone"
  }'

Recommended log events:

LogPlayType       When                                          Seconds
---------------   -------------------------------------------   ----------------
Start             Playback begins                               0
30SecondMark      30 seconds elapsed (mandatory for royalties)  30
Skip              User skips track                              Current position
EndOfFile         Track finishes                                Total duration

Troubleshooting

Error                    Cause                                Solution
-----------------------  -----------------------------------  ------------------------------------------
403 on stream            Token expired or no subscription     Re-authenticate (Step 3), verify sub (Step 4)
401 Unauthorized         Missing or invalid Bearer token      Check Authorization header: Bearer <token>
Empty search results     Country filter or catalogue issue    Verify Country header matches store territory
User validation fails    MSISDN not registered                Complete Step 1 (registration) first
Missing play logs        Invalid device ID or bad payload     Verify deviceId matches a registered device

Quick Reference — Headers

Every request requires at minimum:

Header          Value                               Required By
--------------- ----------------------------------- ----------------------------
StoreId         Your Tuned Global store identifier  All endpoints
Authorization   Bearer <access_token>               Authenticated endpoints (5-7)
Content-Type    application/json                    POST/PUT requests
Country         ISO country code (e.g. MY, AU)      Metadata/search endpoints

Notes

Replace YOUR_STORE_ID, YOUR_ACCESS_TOKEN, YOUR_TEST_USERNAME, YOUR_TEST_PASSWORD, and the example IDs (1001, 987654) with your actual test credentials provided by Tuned Global.

On this page