Desenvolvedores

Construa com a API da Hoshika

OAuth2 para apps de terceiros (trackers, extensões, bots) e uma API JSON para listas de anime e mangá.

1. Registre seu app

Qualquer conta Hoshika pode criar credenciais OAuth em Configurações → Aplicativos.

  • As redirect URIs devem ser https (http://localhost permitido em desenvolvimento).
  • O client secret é mostrado só uma vez — guarde com segurança.
  • Até 5 apps por conta.

2. OAuth 2.0 (authorization code + PKCE)

Fluxo padrão: envie o usuário para autorizar, ele aprova na tela de consentimento e você troca o code por tokens. PKCE é obrigatório.

# 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 duram 24 horas; refresh tokens, 90 dias. Envie o token como Authorization: Bearer em cada chamada.

3. A API

URL base https://hoshika.app/api/v1 — JSON de entrada e saída. Toda resposta inclui ok, e os erros carregam um code estável legível por máquina.

curl https://hoshika.app/api/v1/library?type=anime \
  -H "Authorization: Bearer ACCESS_TOKEN"
MétodoEndpointDescrição
GET/api/v1/search?q=Buscar anime e mangá
GET/api/v1/anime/{shortId}Detalhes do anime
GET/api/v1/manga/{shortId}Detalhes do mangá
GET/api/v1/library?type=anime|mangaA lista do usuário (paginação por cursor)
POST/api/v1/library/entryAdicionar/atualizar entrada (upsert parcial)
DELETE/api/v1/library/entryRemover uma entrada
POST/api/v1/ratingsAvaliar um 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. Regras do jogo

  • Rate limits valem por usuário e por IP; em caso de 429, aguarde e tente de novo.
  • O conteúdo adulto segue as configurações de cada usuário: menores e usuários com o filtro ativado não podem ver nem adicionar títulos explícitos (adult_content_blocked).
  • O usuário pode revogar o acesso do seu app a qualquer momento em Configurações → Aplicativos.
  • O catálogo expõe mal_id e anilist_id quando conhecidos — mapeie seus IDs uma vez e faça cache.

Dúvidas, limites maiores ou quer seu tracker listado? Fale conosco