API Documentation

Integrate FEFS KEYS license validation into your applications

API Base: https://spoof.fefs.dev

Key Verification API

POSThttps://spoof.fefs.dev/api/v1/verify/{serviceHash}

Validates a license key and optionally binds it to a device

Authentication Required

Include your API key in the X-API-Key header. Get your API key from the Settings tab in your service.

Headers

{
  "Content-Type": "application/json",
  "X-API-Key": "sk_live_yourapikey"     // Required
}

Request Body (HWID Enabled)

{
  "key": "XXXX-XXXX-XXXX-XXXX",  // Required
  "hwid": "device-hardware-id"    // Required when HWID is enabled
}

Request Body (HWID Disabled)

{
  "key": "XXXX-XXXX-XXXX-XXXX"   // Key only, no HWID needed
}

Success Response

{
  "valid": true,
  "message": "License verified successfully",
  "expires_at": "2025-03-15T12:00:00Z",
  "is_lifetime": false,
  "hwid_bound": true
}

Error Responses

// Invalid key
{ "valid": false, "message": "License has expired" }

// Missing/invalid API key (401)
{ "success": false, "message": "Invalid or missing API key" }

// Service not found (404)
{ "success": false, "message": "Service not found" }

HWID Binding

Hardware ID (HWID) binding prevents license sharing by locking a key to a specific device. Enable/disable HWID per service in Settings.

HWID Enabled

  • First API call binds key to device
  • Same HWID required for future calls
  • Users can reset via /licenses/manage
  • Best for: Desktop apps, games

HWID Disabled

  • No HWID field needed in requests
  • Key works on any device
  • Simpler integration
  • Best for: Web apps, multi-device

Code Examples

Mode:
// C# License Validator - WITH HWID Binding + API Key
using System.Net.Http;
using System.Net.Http.Json;
using System.Management;

public class LicenseValidator
{
    private readonly HttpClient _client;
    private const string API_BASE = "https://spoof.fefs.dev";
    private readonly string _serviceHash;

    public LicenseValidator(string serviceHash, string apiKey)
    {
        _serviceHash = serviceHash;
        _client = new HttpClient();
        // Add API key to all requests
        _client.DefaultRequestHeaders.Add("X-API-Key", apiKey);
    }

    public string GetHWID()
    {
        using var cpu = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor");
        using var board = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard");
        
        string cpuId = "", boardId = "";
        foreach (var item in cpu.Get()) cpuId = item["ProcessorId"]?.ToString() ?? "";
        foreach (var item in board.Get()) boardId = item["SerialNumber"]?.ToString() ?? "";
        
        return Convert.ToHexString(
            System.Security.Cryptography.SHA256.HashData(
                System.Text.Encoding.UTF8.GetBytes(cpuId + boardId)
            )
        )[..32];
    }

    public async Task<LicenseResult> ValidateAsync(string key)
    {
        var payload = new { key, hwid = GetHWID() };
        
        var response = await _client.PostAsJsonAsync(
            $"{API_BASE}/api/v1/verify/{_serviceHash}", 
            payload
        );
        
        return await response.Content.ReadFromJsonAsync<LicenseResult>() 
            ?? new LicenseResult(false, "Failed to parse response", null, false, false);
    }
}

public record LicenseResult(bool Valid, string Message, DateTime? ExpiresAt, bool IsLifetime, bool HwidBound);

// === USAGE ===
// var validator = new LicenseValidator("service_yourhash", "sk_live_yourapikey");
// var result = await validator.ValidateAsync("XXXX-XXXX-XXXX-XXXX");

Quick Start

1

Create a Service

Go to Developer Dashboard and create a new service

2

Get API Key & Service Hash

Copy both from the Settings tab. Keep your API key secret!

3

Configure HWID

Enable/disable HWID binding based on your use case

4

Integrate

Use the code examples above (select HWID mode matching your settings)

5

Distribute Keys

Share: https://spoof.fefs.dev/redeem/{serviceHash}