Hytale Hub API
Nutze unsere REST API um Hytale Server Daten abzufragen. Perfekt für Discord Bots, Server Widgets und Status-Seiten.
Übersicht
Unsere API ist darauf ausgelegt, einfach und schnell Server-Metadaten und Vote-Statistiken bereitzustellen. Alle Endpunkte sind read-only und öffentlich zugänglich via HTTPS.
https://www.hytale-hub.de/api/publicEndpunkte
/servers/[slug]Gibt allgemeine Informationen über einen Server zurück (Name, Beschreibung, Tags, Region, IP).
curl https://www.hytale-hub.de/api/public/servers/mein-server/serversGibt eine paginierte Liste aller Server zurück.
curl "https://www.hytale-hub.de/api/public/servers?limit=5®ion=DE"/servers/[slug]/statsGibt die aktuellen Vote-Zahlen (Heute/Gesamt) und das letzte Update-Datum zurück.
curl https://www.hytale-hub.de/api/public/servers/mein-server/stats/servers/[slug]/embedEin optimiertes Payload für Discord Embeds und Widgets. Enthält bereits formatierte Felder und Bild-URLs.
curl https://www.hytale-hub.de/api/public/servers/mein-server/embedResponse Example:
{
"title": "Mein Hytale Server",
"description": "Short description...",
"url": "https://www.hytale-hub.de/server/...",
"fields": [
{ "name": "Votes Heute", "value": "5", "inline": true }
]
}Integration in Discord.js
Nutze den Embed-Endpunkt, um mit minimalem Aufwand einen Server-Status Befehl zu bauen.
const response = await fetch('https://www.hytale-hub.de/api/public/servers/' + serverId + '/embed');
const embedData = await response.json();
// Discord.js v14
await interaction.reply({ embeds: [embedData] });Integration in React / Next.js
Ein vollwertiges Beispiel für eine client-seitige Serverliste mit "Mehr laden" Button.
"use client";
import { useEffect, useState } from "react";
type ApiServer = {
slug: string;
name: string;
region: string | null;
tags: string[];
modes: string[];
publicUrl: string;
votes: { today: number; total: number };
};
type ApiResponse = {
data: ApiServer[];
meta: { total: number; limit: number; offset: number };
};
export default function ServerListFromApi() {
const [items, setItems] = useState<ApiServer[]>([]);
const [meta, setMeta] = useState<ApiResponse["meta"] | null>(null);
const [loading, setLoading] = useState(false);
const limit = 5;
async function load(offset: number, append: boolean) {
setLoading(true);
const res = await fetch(`https://www.hytale-hub.de/api/public/servers?limit=${limit}&offset=${offset}`);
const json: ApiResponse = await res.json();
setItems((prev) => (append ? [...prev, ...json.data] : json.data));
setMeta(json.meta);
setLoading(false);
}
useEffect(() => {
load(0, false);
}, []);
const canLoadMore = meta ? meta.offset + meta.limit < meta.total : false;
return (
<div className="space-y-4">
<div className="grid gap-3">
{items.map((s) => (
<a
key={s.slug}
href={s.publicUrl}
className="rounded-xl border border-white/10 p-4 hover:bg-white/5 transition block"
>
<div className="flex items-center justify-between mb-1">
<div className="font-bold text-white">{s.name}</div>
<div className="text-xs text-zinc-400">
Votes: {s.votes.today} (Heute)
</div>
</div>
<div className="text-xs text-zinc-500">
{s.region ?? "Global"} • {s.modes.join(", ")}
</div>
</a>
))}
</div>
<div className="flex gap-2">
<button
onClick={() => meta && load(meta.offset + meta.limit, true)}
className="rounded-lg bg-zinc-800 text-white px-4 py-2 text-sm font-medium disabled:opacity-50"
disabled={loading || !canLoadMore}
>
{loading ? "Lädt..." : canLoadMore ? "Nächste Seite laden" : "Keine weiteren Server"}
</button>
</div>
</div>
);
}API Status
Powered by Vercel Edge.
Hosting gesucht?
Starte dein Projekt mit unserem Partner Nitrado für maximale Performance und DDoS Schutz.