Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.craftingstudiopro.de/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Protect your work with our modern license system. You can easily validate licenses via our REST API using just a few lines of code.

API Endpoint

To validate a license, send a POST request to:
https://api.craftingstudiopro.de/v1/license/validate

Authentication

All license validation requests require a Developer API Key in the header:
X-API-Key: your_api_key
Important: Never share your developer API key publicly (e.g., on GitHub).

Request & Response

Request Body (JSON)

{
  "licenseKey": "XXXX-XXXX-XXXX-XXXX",
  "pluginId": "your-plugin-slug-or-id"
}

Success Response Example

{
  "valid": true,
  "message": null,
  "purchase": {
    "id": "123",
    "userId": "456",
    "pluginId": "789",
    "createdAt": "2024-03-09T10:00:00Z"
  }
}

Java Implementation

For Minecraft plugin developers, here is a simple validator class using Java’s HttpClient:
public class LicenseValidator {
    private static final String API_URL = "https://api.craftingstudiopro.de/v1/license/validate";
    private static final String API_KEY = "YOUR_DEVELOPER_API_KEY";

    public boolean validate(String licenseKey, String pluginSlug) {
        try {
            HttpClient client = HttpClient.newHttpClient();
            String json = String.format("{\"licenseKey\": \"%s\", \"pluginId\": \"%s\"}", 
                                       licenseKey, pluginSlug);

            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(API_URL))
                    .header("Content-Type", "application/json")
                    .header("X-API-Key", API_KEY)
                    .POST(HttpRequest.BodyPublishers.ofString(json))
                    .build();

            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            
            // Check if status is 200 and response contains "valid":true
            return response.statusCode() == 200 && response.body().contains("\"valid\":true");
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

Fast Validation

Validation takes less than 200ms on average.

Slug Support

You can use either the numeric ID or the plugin slug as the pluginId.