GET /api/music/categories

List available music categories based on user's premium tier

Back to API Docs

Description

Returns a list of music categories available to the authenticated user based on their premium tier. Only categories accessible to the user's current subscription level are returned.

Endpoint URL
GET https://premium.regardingwork.com/api/music/categories
Authentication
Authorization: Bearer <jwt_token>

Request

Headers
Authorization: Bearer your_jwt_token

No request body or query parameters required.

Response (200 OK)

{
  "user_tier": "PREMIUM_PLUS",
  "categories": [
    {
      "id": 1,
      "name": "Intense Work Music",
      "description": "High-energy tracks for focused work sessions",
      "icon": "fa-bolt",
      "required_tier": "PREMIUM",
      "sort_order": 1,
      "is_active": true,
      "created_at": "2024-08-28T12:00:00Z"
    },
    {
      "id": 2,
      "name": "Reading/Study Music",
      "description": "Calm background music for reading and studying",
      "icon": "fa-book",
      "required_tier": "PREMIUM",
      "sort_order": 2,
      "is_active": true,
      "created_at": "2024-08-28T12:00:00Z"
    },
    {
      "id": 4,
      "name": "Nature Sounds",
      "description": "Relaxing natural soundscapes",
      "icon": "fa-leaf",
      "required_tier": "PREMIUM_PLUS",
      "sort_order": 4,
      "is_active": true,
      "created_at": "2024-08-28T12:00:00Z"
    }
  ]
}
Note: Categories are filtered by user's tier and sorted by sort_order.

Code Examples

JavaScript (Fetch)
async function getMusicCategories(token) {
  const response = await fetch('https://premium.regardingwork.com/api/music/categories', {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer ' + token
    }
  });
  
  if (response.ok) {
    const data = await response.json();
    console.log(`User tier: ${data.user_tier}`);
    console.log(`Available categories: ${data.categories.length}`);
    
    // Display categories in UI
    data.categories.forEach(category => {
      console.log(`${category.name} (${category.required_tier})`);
    });
    
    return data.categories;
  } else {
    throw new Error('Failed to get categories');
  }
}
Swift (iOS/macOS)
func getMusicCategories(token: String) async throws -> CategoriesResponse {
    let url = URL(string: "https://premium.regardingwork.com/api/music/categories")!
    var request = URLRequest(url: url)
    request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
    
    let (data, response) = try await URLSession.shared.data(for: request)
    
    guard let httpResponse = response as? HTTPURLResponse,
          httpResponse.statusCode == 200 else {
        throw APIError.requestFailed
    }
    
    return try JSONDecoder().decode(CategoriesResponse.self, from: data)
}

// Usage example
let categories = try await getMusicCategories(token: userToken)
for category in categories.categories {
    print("\(category.name) - \(category.description)")
}

Category Details

Each category includes:

  • id: Unique category identifier
  • name: Display name for the category
  • description: Brief description of the music type
  • icon: Font Awesome icon class for UI display
  • required_tier: Minimum tier needed to access this category
  • sort_order: Order for display in lists

Related Endpoints