Astorya Developers
Recursos da API

Catálogo

Liste os audiolivros e e-books disponíveis para os seus membros e mostre capas e títulos dentro das telas do seu próprio app.

Nesta página
  1. Listar o catálogo
  2. Campos de cada item
  3. Paginação por cursor

Listar o catálogo

GET/partner/v1/catalog
ParâmetroDescrição
type"audiobook" | "ebook"Filtra por formato. Sem o parâmetro, vêm os dois.
limitinteiro, padrão 50Itens por página.
cursorstringO nextCursor da página anterior. Omita na primeira página.
curl
curl "https://api.astorya.com.br/partner/v1/catalog?type=audiobook&limit=2" \
  -u "$ASTORYA_CLIENT_ID:$ASTORYA_CLIENT_SECRET"
200 OK
{
  "items": [
    {
      "id": "66f0b1e2c4a9d8e7f6a5b4c3",
      "type": "audiobook",
      "title": "O Poder do Hábito",
      "author": "Charles Duhigg",
      "coverUrl": "https://cdn.exemplo.com/capas/66f0b1e2.jpg",
      "durationSeconds": 38220
    },
    {
      "id": "66f0b1e2c4a9d8e7f6a5b4c4",
      "type": "ebook",
      "title": "Corrida para Iniciantes",
      "author": "Ana Ribeiro",
      "coverUrl": "https://cdn.exemplo.com/capas/66f0b1e3.jpg",
      "chapters": 12
    }
  ],
  "nextCursor": "eyJpZCI6IjY2ZjBiMWUyYzRhOWQ4ZTdmNmE1YjRjNCJ9"
}

Campos de cada item

CampoDescrição
idIdentificador do título na Astorya. Use em redirectPath para abrir o título direto (/player/{id} ou /leitor/{id}).
typeaudiobook ou ebook.
title, authorTítulo e autor para exibição.
coverUrlImagem da capa. A URL pode mudar: atualize sua cópia do catálogo periodicamente em vez de guardá-la para sempre.
durationSecondsSó em audiolivros: duração total em segundos.
chaptersSó em e-books: número de capítulos.

Paginação por cursor

Repita a chamada passando o nextCursor recebido até ele vir null. O cursor é opaco: não tente interpretar nem montar um à mão.

Node.js
export async function fetchWholeCatalog(type) {
  const items = [];
  let cursor = null;
  do {
    const params = new URLSearchParams({ limit: '50' });
    if (type) params.set('type', type);
    if (cursor) params.set('cursor', cursor);

    const res = await fetch(`https://api.astorya.com.br/partner/v1/catalog?${params}`, {
      headers: { Authorization: `Basic ${basicAuth}` },
    });
    if (!res.ok) throw new Error(`Astorya respondeu ${res.status}`);

    const page = await res.json();
    items.push(...page.items);
    cursor = page.nextCursor;
  } while (cursor);
  return items;
}

O catálogo muda pouco. Sincronize uma vez por dia num job do servidor e sirva a sua cópia para o app — assim você fica longe do limite de requisições.