Desarrolladores

Construye con la API de Hoshika

OAuth2 para apps de terceros (trackers, extensiones, bots) y una API JSON para listas de anime y manga.

1. Registra tu app

Cualquier cuenta de Hoshika puede crear credenciales OAuth desde Ajustes → Aplicaciones.

  • Las redirect URIs deben ser https (http://localhost permitido en desarrollo).
  • El client secret se muestra solo una vez — guárdalo bien.
  • Hasta 5 apps por cuenta.

2. OAuth 2.0 (authorization code + PKCE)

Flujo estándar: mandas al usuario a autorizar, aprueba en la pantalla de consentimiento y cambias el code por tokens. PKCE es obligatorio.

# 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 }

Los access tokens duran 24 horas; los refresh tokens, 90 días. Envía el token como Authorization: Bearer en cada llamada.

3. La API

URL base https://hoshika.app/api/v1 — JSON de entrada y salida. Toda respuesta incluye ok, y los errores llevan un code estable legible por máquina.

curl https://hoshika.app/api/v1/library?type=anime \
  -H "Authorization: Bearer ACCESS_TOKEN"
MétodoEndpointDescripción
GET/api/v1/search?q=Buscar anime y manga
GET/api/v1/anime/{shortId}Detalle de anime
GET/api/v1/manga/{shortId}Detalle de manga
GET/api/v1/library?type=anime|mangaLa lista del usuario (paginación por cursor)
POST/api/v1/library/entryAñadir/actualizar entrada (upsert parcial)
DELETE/api/v1/library/entryQuitar una entrada
POST/api/v1/ratingsPuntuar un anime
# 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. Reglas del camino

  • Hay rate limits por usuario y por IP; ante un 429, espera y reintenta.
  • El contenido adulto sigue la configuración de cada usuario: menores y usuarios con el filtro activado no pueden ver ni añadir títulos explícitos (adult_content_blocked).
  • El usuario puede revocar el acceso de tu app cuando quiera desde Ajustes → Aplicaciones.
  • El catálogo expone mal_id y anilist_id cuando se conocen — mapea tus IDs una vez y cachéalo.

¿Dudas, límites más altos o quieres que listemos tu tracker? Escríbenos