JKT48Connect

Recent Live Detail

Get Detailed Information of Specific JKT48 Live Stream via JKT48Connect API

Introduction

JKT48Connect Recent Live Detail API provides comprehensive information about specific live streams using the data_id from the Recent Live API response. This endpoint gives you access to detailed analytics, chat logs, gift information, and other granular data about individual streams.

Detailed Analytics

Access comprehensive stream analytics and performance metrics.

Chat & Interactions

Get chat messages, comments, and viewer interactions data.

Gift Details

Detailed breakdown of gifts received during the stream.

Quick Start

Get Your API Key

Obtain your API key from JKT48Connect.

Get data_id from Recent API

First, fetch recent streams to get the data_id:

curl "https://v2.jkt48connect.my.id/api/jkt48/recent?apikey=YOUR_API_KEY"

Fetch Stream Details

Use the data_id to get detailed information:

curl "https://v2.jkt48connect.my.id/api/jkt48/recent/{data_id}?apikey=YOUR_API_KEY"

Endpoint Details

Base URL: https://v2.jkt48connect.my.id
Endpoint: /api/jkt48/recent/{data_id}
Method: GET
Authentication: API Key required

Path Parameters:

  • data_id (required): The unique identifier from Recent Live API response

Query Parameters:

  • apikey (required): Your API authentication key

Example:

GET /api/jkt48/recent/125100001751127046?apikey=YOUR_API_KEY HTTP/1.1
Host: v2.jkt48connect.my.id

Returns detailed JSON object containing comprehensive stream information including:

  • Enhanced member information
  • Detailed viewer analytics
  • Chat messages and interactions
  • Gift breakdown and statistics
  • Stream quality metrics
  • Platform-specific data
  • Timestamp details
  • Engagement metrics

Note: Response structure varies based on streaming platform and available data.

Implementation Examples

const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://v2.jkt48connect.my.id';

async function getStreamDetail(dataId) {
  try {
    const response = await fetch(
      `${BASE_URL}/api/jkt48/recent/${dataId}?apikey=${API_KEY}`
    );
    
    if (!response.ok) {
      throw new Error(`HTTP ${response.status}: ${response.statusText}`);
    }
    
    const detail = await response.json();
    return detail;
  } catch (error) {
    console.error('Failed to fetch stream detail:', error);
    throw error;
  }
}

// Usage example
async function displayStreamDetails() {
  // First get recent streams
  const recentResponse = await fetch(`${BASE_URL}/api/jkt48/recent?apikey=${API_KEY}`);
  const recentStreams = await recentResponse.json();
  
  // Get detail for the first stream
  if (recentStreams.length > 0) {
    const dataId = recentStreams[0].data_id;
    const detail = await getStreamDetail(dataId);
    
    console.log('Stream Detail:', detail);
  }
}
import requests
import json

API_KEY = 'YOUR_API_KEY'
BASE_URL = 'https://v2.jkt48connect.my.id'

def get_stream_detail(data_id):
    """Get detailed information for a specific stream"""
    url = f"{BASE_URL}/api/jkt48/recent/{data_id}"
    params = {'apikey': API_KEY}
    
    try:
        response = requests.get(url, params=params)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Error fetching stream detail: {e}")
        raise

def get_recent_with_details():
    """Get recent streams and their detailed information"""
    # Get recent streams first
    recent_response = requests.get(f"{BASE_URL}/api/jkt48/recent?apikey={API_KEY}")
    recent_streams = recent_response.json()
    
    detailed_streams = []
    for stream in recent_streams[:3]:  # Get details for first 3 streams
        data_id = stream['data_id']
        detail = get_stream_detail(data_id)
        detailed_streams.append({
            'basic_info': stream,
            'detailed_info': detail
        })
    
    return detailed_streams

# Usage
if __name__ == "__main__":
    try:
        streams_with_details = get_recent_with_details()
        print(json.dumps(streams_with_details, indent=2))
    except Exception as e:
        print(f"Error: {e}")
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "time"
)

const (
    APIKey  = "YOUR_API_KEY"
    BaseURL = "https://v2.jkt48connect.my.id"
)

type StreamDetail struct {
    // Define based on actual API response structure
    DataID string `json:"data_id"`
    // Add other fields as needed
}

type RecentStream struct {
    DataID string `json:"data_id"`
    Member struct {
        Nickname string `json:"nickname"`
    } `json:"member"`
}

func getStreamDetail(dataID string) (*StreamDetail, error) {
    url := fmt.Sprintf("%s/api/jkt48/recent/%s?apikey=%s", BaseURL, dataID, APIKey)
    
    client := &http.Client{Timeout: 10 * time.Second}
    resp, err := client.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    
    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("API request failed with status: %d", resp.StatusCode)
    }
    
    var detail StreamDetail
    err = json.NewDecoder(resp.Body).Decode(&detail)
    return &detail, err
}

func getRecentStreams() ([]RecentStream, error) {
    url := fmt.Sprintf("%s/api/jkt48/recent?apikey=%s", BaseURL, APIKey)
    
    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    
    var streams []RecentStream
    err = json.NewDecoder(resp.Body).Decode(&streams)
    return streams, err
}

func main() {
    // Get recent streams
    streams, err := getRecentStreams()
    if err != nil {
        fmt.Printf("Error getting recent streams: %v\n", err)
        return
    }
    
    // Get detail for first stream
    if len(streams) > 0 {
        detail, err := getStreamDetail(streams[0].DataID)
        if err != nil {
            fmt.Printf("Error getting stream detail: %v\n", err)
            return
        }
        
        fmt.Printf("Stream detail for %s: %+v\n", streams[0].Member.Nickname, detail)
    }
}

Usage Workflow

The Recent Live Detail API is designed to work in conjunction with the Recent Live API. Always fetch the data_id first.

Typical Integration Flow:

  1. Fetch Recent Streams: Use /api/jkt48/recent to get list of recent streams
  2. Extract data_id: Get the data_id from desired stream in the response
  3. Fetch Details: Use the data_id with /api/jkt48/recent/{data_id}
  4. Process Data: Handle the detailed response based on your application needs

Error Handling

HTTP 404 - Not Found

  • Invalid data_id or stream data no longer available
  • Check that the data_id exists in recent streams

HTTP 400 - Bad Request

  • Missing or invalid API key
  • Malformed data_id parameter

HTTP 429 - Too Many Requests

  • Rate limit exceeded
  • Implement proper request throttling

HTTP 500 - Internal Server Error

  • Temporary server issue
  • Implement retry logic with exponential backoff
async function fetchStreamDetailSafely(dataId) {
  const maxRetries = 3;
  let retryCount = 0;
  
  while (retryCount < maxRetries) {
    try {
      const response = await fetch(
        `${BASE_URL}/api/jkt48/recent/${dataId}?apikey=${API_KEY}`
      );
      
      if (response.status === 404) {
        throw new Error('Stream data not found');
      }
      
      if (response.status === 429) {
        // Wait before retrying
        await new Promise(resolve => setTimeout(resolve, 1000 * (retryCount + 1)));
        retryCount++;
        continue;
      }
      
      if (!response.ok) {
        throw new Error(`HTTP ${response.status}: ${response.statusText}`);
      }
      
      return await response.json();
    } catch (error) {
      if (retryCount === maxRetries - 1) {
        throw error;
      }
      retryCount++;
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  }
}

Rate Limiting

Be mindful of API rate limits. Implement appropriate delays between requests, especially when fetching details for multiple streams.

Recommended Approach:

  • Limit concurrent requests to 3-5 per second
  • Implement exponential backoff for retries
  • Cache responses when possible to reduce API calls
  • Use batch processing for multiple detail requests

Data Freshness

Important Notes:

  • Stream details are available for a limited time after stream ends
  • Older streams may have reduced detail availability
  • Some platform-specific data might not be available for all streams
  • Real-time data is not available through this endpoint

Get Started

Ready to access detailed stream analytics? Get your API key and start exploring comprehensive stream data!

How is this guide?

Last updated on