Entwickler

Baue mit der Hoshika-API

OAuth2 für Dritt-Apps (Tracker, Erweiterungen, Bots) und eine JSON-API für Anime- und Manga-Listen.

1. Registriere deine App

Jedes Hoshika-Konto kann OAuth-Zugangsdaten erstellen unter Einstellungen → Anwendungen.

  • Redirect-URIs müssen https sein (http://localhost ist für Entwicklung erlaubt).
  • Das Client-Secret wird nur einmal angezeigt — sicher aufbewahren.
  • Bis zu 5 Apps pro Konto.

2. OAuth 2.0 (Authorization Code + PKCE)

Standard-Flow: Nutzer zur Autorisierung schicken, Zustimmung auf dem Consent-Screen, dann Code gegen Tokens tauschen. PKCE ist Pflicht.

# Discovery (OpenID Connect)
https://hoshika.app/api/auth/.well-known/openid-configuration

# 1) Authorization (PKCE required)
GET https://hoshika.app/api/auth/oauth2/authorize
  ?client_id=YOUR_CLIENT_ID
  &redirect_uri=https://yourapp.example/callback
  &response_type=code
  &scope=openid profile offline_access
  &code_challenge=BASE64URL(SHA256(verifier))
  &code_challenge_method=S256

# 2) Token exchange
POST https://hoshika.app/api/auth/oauth2/token
  grant_type=authorization_code
  code=...&code_verifier=...&client_id=...&client_secret=...
  redirect_uri=https://yourapp.example/callback

# → { access_token, refresh_token, expires_in: 86400 }

Access Tokens gelten 24 Stunden; Refresh Tokens 90 Tage. Sende das Token als Authorization: Bearer bei jedem Aufruf.

3. Die API

Basis-URL https://hoshika.app/api/v1 — JSON rein und raus. Jede Antwort enthält ok, Fehler tragen einen stabilen maschinenlesbaren code.

curl https://hoshika.app/api/v1/library?type=anime \
  -H "Authorization: Bearer ACCESS_TOKEN"
MethodeEndpointBeschreibung
GET/api/v1/search?q=Anime & Manga suchen
GET/api/v1/anime/{shortId}Anime-Details
GET/api/v1/manga/{shortId}Manga-Details
GET/api/v1/library?type=anime|mangaDie Liste des Nutzers (Cursor-Paginierung)
POST/api/v1/library/entryListeneintrag anlegen/aktualisieren (partieller Upsert)
DELETE/api/v1/library/entryEintrag entfernen
POST/api/v1/ratingsAnime bewerten
# Upsert de progreso (campos parciales)
POST /api/v1/library/entry
{ "type": "anime", "mediaId": "<uuid>", "status": "watching",
  "progress": 7, "userScore": 8 }

# Contrato de error (siempre):
{ "ok": false, "code": "unauthorized" | "invalid" | "rate_limited" | ... }

4. Spielregeln

  • Rate Limits gelten pro Nutzer und pro IP; bei 429 warten und später erneut versuchen.
  • Erwachseneninhalte folgen den Einstellungen des jeweiligen Nutzers: Minderjährige und Nutzer mit aktivem Filter können explizite Titel weder sehen noch hinzufügen (adult_content_blocked).
  • Nutzer können den Zugriff deiner App jederzeit unter Einstellungen → Anwendungen widerrufen.
  • Der Katalog stellt mal_id und anilist_id bereit, wo bekannt — IDs einmal mappen und cachen.

Fragen, höhere Limits oder soll dein Tracker gelistet werden? Melde dich