An overview of all APIs you can integrate with. I offer a few public APIs to easily access data used on the site, so that you don't have to scrape the web page.
GET https://d2runewizard.com/api/diablo-clone-progress/all{
    servers: {
        server: "{ladder|nonLadder}{Softcore|Hardcore}{Americas|Europe|Asia}";
        progress: 1 | 2 | 3 | 4 | 5 | 6;
        message: String; // e.g. "Terror gazes upon Sanctuary";
        ladder: boolean;
        hardcore: boolean;
        region: "Americas" | "Europe" | "Asia";
        lastReportedBy: {
            uid: String; 
            displayName: String;
        }
        lastUpdate: {
            seconds: number; 
            nanoseconds: number;
        }
    }[];
    providedBy: "https://d2runewizard.com/diablo-clone-tracker";
    version: String;
}CACHE TTL: 60sGET https://d2runewizard.com/api/diablo-clone-progress/planned-walks{
    walks: {
        id: string;
        source: string; // URL
        timestamp: number;
        region: "TBD" | "Americas" | "Europe" | "Asia";
        ladder: boolean;
        hardcore: boolean;
        uid: String;
        displayName: String;
        confirmed: boolean;
    }[];
    providedBy: "https://d2runewizard.com/diablo-clone-tracker";
}CACHE TTL: 60sGET https://d2runewizard.com/api/terror-zone{
    terrorZone: {
        lastReportedBy: {
            displayName: String;
            uid: String;
        };
        lastUpdate: {
            seconds: number;
            nanoseconds: number;
        };
        reportedZones: {
            [zone: string]: number;
        };
        highestProbabilityZone: {
            zone: String;
            act: String;
            amount: number;
            probability: number;
        };
        providedBy: "https://d2runewizard.com/terror-zone-tracker"
    };
}CACHE TTL min: 30s
if highestProbabilityZone.amount > 0: 60s
if highestProbabilityZone.amount > 3: highestProbabilityZone.amount * 60s
CACHE TTL max: T next zone - T // e.g. at 12:43, TTL is max 17 minutes{
    token: String;
}{
    D2R-Contact: <an email contact>
    D2R-Platform: <Discord, Telegram, Whatsapp, ...>
    D2R-Repo: <link to your public repository or your public app/server>
}This response occurs if you don't pass a token. All APIs require a personalized token with dedicated access rights.
{
    message: "You are not authorized to use this resource, request a token here https://d2runewizard.com/profile/T41jagcO0UcTLKJiC5UOmDCdGtS2";
    providedBy: String;
    version: String;
}CACHE TTL: 600sthis response occurs if you don't pass a valid token. Your token might not have the correct access rights, or your token has been revoked.
{
    message: "Your token is not valid, request a new token here https://d2runewizard.com/profile/T41jagcO0UcTLKJiC5UOmDCdGtS2";
    providedBy: String;
    version: String;
}CACHE TTL: 600sthis response occurs if you don't pass all required headers
{
    message: "Missing required headers: D2R-Contact, D2R-Platform, D2R-Repo";
    providedBy: String;
    version: String;
}CACHE TTL: 600sthis response occurs if you pass an invalid value for one of the required headers
{
    message: "Invalid value for header: D2R-Contact";
    providedBy: String;
    version: String;
}CACHE TTL: 600sMy platform also works with an event-driven architecture. You can receive updates when certain events are triggered (change of terror zone, diablo clone stage 4 or 5). Then, your REST API will be called with the response payload of the above APIs on certain events
Currently you can subscribe to the following events
You can easily create a Discord webhook, which I can trigger on certain events
The webhook link looks likes this. To integrate with this webhook, I need the id and token.
https://discord.com/api/webhooks/{id}/{token}This is the only service that requires a paid subscription (Destruction level)
If you like my work and you'd like to contribute, feel free to give me a small tip.