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étodo | Endpoint | Descripció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|manga | La lista del usuario (paginación por cursor) |
| POST | /api/v1/library/entry | Añadir/actualizar entrada (upsert parcial) |
| DELETE | /api/v1/library/entry | Quitar una entrada |
| POST | /api/v1/ratings | Puntuar 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