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: 60s
GET 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: 60s
GET 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: 600s
this 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: 600s
this 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: 600s
this 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: 600s
My 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.