Zum Hauptinhalt springenZenit-Hosting Logo

Pagination

Listen der Developer-API kommen seitenweise. Du blätterst mit einem Cursor, nicht mit Seitenzahlen.

Parameter

  • limit legt fest, wie viele Einträge eine Seite hat: 1 bis 100, Standard 25.
  • cursor ruft die nächste Seite ab. Du nimmst ihn aus der vorigen Antwort. Für die erste Seite lässt du ihn weg.

Der Cursor ist ein undurchsichtiger Text. Lies ihn nicht aus, baue keinen selbst und ändere ihn nicht. Ein ungültiger Cursor oder ein limit außerhalb von 1 bis 100 liefert 400 VALIDATION_ERROR.

Antwort

Jede Liste antwortet mit { data, nextCursor }. data enthält die Einträge der Seite. nextCursor ist der Cursor für die nächste Seite. Ist er null, gibt es keine weitere Seite. Das gilt für alle Listen außer dem Ereignis-Feed GET /events, siehe unten.

Beispielantwort einer Liste
{
  "data": [
    { "id": "…", "name": "Survival", "status": "ready" }
  ],
  "nextCursor": "x7Kq2mWv9Rt4ZaPb1LcHf8Ns"
}

Alle Seiten abrufen

Rufe so lange die nächste Seite ab, bis nextCursornull ist.

cURL: Seiten abrufen
# erste Seite
curl "https://api.zenit-hosting.de/api/developer/v1/servers?limit=50" \
  -H "Authorization: Bearer $ZENIT_TOKEN"

# nächste Seite: nextCursor der letzten Antwort als cursor
curl "https://api.zenit-hosting.de/api/developer/v1/servers?limit=50&cursor=$NEXT_CURSOR" \
  -H "Authorization: Bearer $ZENIT_TOKEN"
JavaScript: alle Server abrufen
const BASE = 'https://api.zenit-hosting.de/api/developer/v1';

async function listAllServers() {
  const servers = [];
  let cursor = null;

  do {
    const url = new URL(BASE + '/servers');
    url.searchParams.set('limit', '100');
    if (cursor) url.searchParams.set('cursor', cursor);

    const response = await fetch(url, {
      headers: { Authorization: 'Bearer ' + process.env.ZENIT_TOKEN },
    });
    if (!response.ok) throw new Error('HTTP ' + response.status);

    const page = await response.json();
    servers.push(...page.data);
    cursor = page.nextCursor;
  } while (cursor);

  return servers;
}
Python: alle Server abrufen
import os
import requests

BASE = "https://api.zenit-hosting.de/api/developer/v1"


def list_all_servers():
    servers = []
    cursor = None

    while True:
        params = {"limit": 100}
        if cursor:
            params["cursor"] = cursor

        response = requests.get(
            BASE + "/servers",
            params=params,
            headers={"Authorization": "Bearer " + os.environ["ZENIT_TOKEN"]},
            timeout=10,
        )
        response.raise_for_status()

        page = response.json()
        servers.extend(page["data"])
        cursor = page["nextCursor"]
        if not cursor:
            return servers

Sonderfälle

  • GET /servers/{id}/backups antwortet mit data, nextCursor und limit. nextCursor ist dort immer null, es gibt keine weitere Seite abzurufen.

Ereignis-Feed: nextCursor bedeutet etwas anderes

GET /events?after= ist kein Blättern durch eine Liste, sondern ein Feed, den du fortlaufend abfragst. Er blättert mit after statt mit cursor und gilt nur für Bot-Tokens.

  • nextCursor ist im Feed immer die Position nach dem zuletzt gelesenen Ereignis. Kam nichts Neues, ist es der after, den du übergeben hast.
  • Eine leere data heißt: Du bist auf dem neuesten Stand. Warte kurz und frage mit demselben nextCursor erneut.
  • null ist nextCursor nur, wenn du ohne after fragst und es noch kein Ereignis gibt. Es heißt im Feed nie „keine weitere Seite“.
  • Speichere den gelieferten nextCursor dauerhaft, sofern er nicht null ist.

Ein Beispiel steht unter Bots und Manifest.