Skip to content

C# / .NET Examples

Complete C# examples for using the SubX API.

Installation

dotnet add package System.Net.Http.Json

Basic Client

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Threading.Tasks;
using System.Collections.Generic;

public class SubXClient
{
    private readonly HttpClient _httpClient;
    private const string BaseUrl = "https://subx-api.duckdns.org";

    public SubXClient(string apiKey)
    {
        _httpClient = new HttpClient();
        _httpClient.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("Bearer", apiKey);
    }

    public async Task<SearchResult> SearchAsync(SearchParams parameters)
    {
        var query = System.Web.HttpUtility.ParseQueryString(string.Empty);

        if (!string.IsNullOrEmpty(parameters.Title))
            query["title"] = parameters.Title;
        if (parameters.Limit.HasValue)
            query["limit"] = parameters.Limit.ToString();
        if (!string.IsNullOrEmpty(parameters.ImdbId))
            query["imdb_id"] = parameters.ImdbId;

        var url = $"{BaseUrl}/api/subtitles/search?{query}";
        return await _httpClient.GetFromJsonAsync<SearchResult>(url);
    }

    public async Task<byte[]> DownloadAsync(string subtitleId)
    {
        var url = $"{BaseUrl}/api/subtitles/{subtitleId}/download";
        return await _httpClient.GetByteArrayAsync(url);
    }
}

public class SearchParams
{
    public string Title { get; set; }
    public string ImdbId { get; set; }
    public int? Limit { get; set; }
}

public class SearchResult
{
    public List<Subtitle> Items { get; set; }
    public int Total { get; set; }
}

public class Subtitle
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string VideoType { get; set; }
    public int? Season { get; set; }
    public int? Episode { get; set; }
}

// Usage
class Program
{
    static async Task Main()
    {
        var client = new SubXClient(Environment.GetEnvironmentVariable("SUBX_API_KEY"));

        // Search
        var results = await client.SearchAsync(new SearchParams
        {
            Title = "Dexter",
            Limit = 10
        });

        Console.WriteLine($"Found {results.Total} subtitles");

        // Download
        if (results.Items.Count > 0)
        {
            var subtitleId = results.Items[0].Id;
            var content = await client.DownloadAsync(subtitleId);
            await File.WriteAllBytesAsync("subtitle.srt", content);
            Console.WriteLine("Downloaded successfully!");
        }
    }
}

See the Quickstart Guide for more examples.