Todas as listas da API Notiondesk usam a mesma paginação por cursor, e cada requisição pode fixar a versão da API para a qual sua integração foi escrita com o cabeçalho nd-version. Este artigo explica como funciona a paginação da API Notiondesk, como ler cada página de uma lista, como funciona o versionamento da API e as regras de nomenclatura para campos e parâmetros.
Como funciona a paginação da API Notiondesk
Cada rota de lista responde ao mesmo envelope:
{
"object": "list",
"data": [],
"has_more": false,
"next_cursor": null
}| Campo | Significado |
|---|---|
object | Sempre __PRESERVADO_47__ |
data | Os itens desta página |
has_more | __PRESERVADO_44__ quando outra página segue |
next_cursor | O valor a ser passado como cursor para obter a próxima página ou null na página anterior. |
Controle a página com dois parâmetros de consulta:
| Parâmetro | Tipo | Padrão | Notas |
|---|---|---|---|
page_size | inteiro | 1 a 100 | 20 |
cursor | corda | nenhum | O next_cursor da página anterior, devolvido sem alterações. |
As listas não contêm números de página nem uma contagem total.
Leia cada página de uma lista
Repita a solicitação com cursor definido como o next_cursor da resposta anterior até que has_more seja false.
A primeira página:
A próxima página, com NEXT_CURSOR substituído pelo next_cursor codificado em URL da primeira página:
O mesmo loop em JavaScript:
E em Python:
Regras do cursor
curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/articles?page_size=100" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16"curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/articles?page_size=100&cursor=NEXT_CURSOR" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16"async function listAll(path) {
const items = [];
let cursor = null;
do {
const url = new URL(`https://api.notiondesk.so${path}`);
url.searchParams.set("page_size", "100");
if (cursor) {
url.searchParams.set("cursor", cursor);
}
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${process.env.NOTIONDESK_API_KEY}`,
"nd-version": "2026-10-16",
},
});
const page = await response.json();
items.push(...page.data);
cursor = page.has_more ? page.next_cursor : null;
} while (cursor);
return items;
}
const articles = await listAll("/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/articles");import os
import requests
def list_all(path):
items, cursor = [], None
while True:
params = {"page_size": 100}
if cursor:
params["cursor"] = cursor
page = requests.get(
f"https://api.notiondesk.so{path}",
params=params,
headers={
"Authorization": f"Bearer {os.environ['NOTIONDESK_API_KEY']}",
"nd-version": "2026-10-16",
},
).json()
items.extend(page["data"])
if not page["has_more"]:
return items
cursor = page["next_cursor"]- O cursor é opaco. Não o analise nem crie um novo. Devolva-o exatamente como o recebeu.
- Você pode alterar o valor de
page_sizeentre as páginas. A próxima página começa onde a anterior terminou.
- O cursor representa uma posição, não uma captura instantânea. Um item adicionado ou removido durante a rolagem pode deslocar os itens subsequentes, permitindo que uma página repita ou pule um item. Se a sua integração excluir itens durante a listagem, recomece a rolagem a partir da primeira página.
- Algumas listas param antes do limite. A lista de changelog atinge, no máximo, as 1.000 entradas mais recentes. Redirecionamentos de página e feedback atingem, no máximo, as 10.000 entradas mais recentes. Após esse limite,
has_moretorna-sefalse.
- Algumas listas nunca são paginadas. Temas e integrações sempre retornam tudo em uma única resposta, com
has_more: false.
Um cursor malformado, ou um que aponta para além do final da lista, retorna 400 validation_error.
Versionar sua integração de API Notiondesk
Envie o cabeçalho opcional nd-version para fixar a versão do contrato com a qual sua integração foi escrita:
nd-version: 2026-10-16| Versão | Status |
|---|---|
2026-10-16 | Atual |
- Sem o cabeçalho, a solicitação utiliza a versão atual.
- Cada resposta indica a versão que a respondeu em seu próprio cabeçalho
nd-version.
- Um valor desconhecido responde 400
invalid_version.
Novas rotas, novos parâmetros opcionais e novos campos de resposta são distribuídos sem a necessidade de uma nova versão. Sua integração deve ignorar campos que não reconhece, portanto, um novo campo nunca a quebrará.
nd-versionRegras de nomenclatura
- Os nomes dos campos estão em snake_case nas solicitações e respostas:
page_size,next_cursor,default_locale.
- Os parâmetros de consulta têm uma única grafia.
?page_size=10funciona.?pageSize=10é rejeitado como um parâmetro desconhecido com código 400.validation_error
- Parâmetros e campos de corpo desconhecidos são rejeitados com 400
validation_error, portanto, um erro de digitação nunca passa despercebido.
- A API usa seus próprios substantivos. Uma central de ajuda é um
site, e uma coleção é umcategory. Os caminhos têm a aparência de/sites/{site_id}/categories.
- As datas estão em conformidade com a norma ISO 8601 , por exemplo,
2026-10-18T14:39:03+00:00.
Perguntas frequentes
Como faço para obter o número total de artigos?
As listas não contêm a contagem total. Navegue pela lista e conte os itens ou chame o relatório analítico quick, que retorna a contagem de artigos da central de ajuda. Consulte Obter análises da central de ajuda com a API Notiondesk .
Qual é o tamanho máximo da página?
100 itens. O padrão é 20. Um valor fora de 1 a 100 resulta em 400 validation_error.
Preciso enviar o cabeçalho nd-version?
nd-version?Não. Sem ele, a solicitação usa a versão atual. O envio é recomendado para integrações em produção, para que seu comportamento permaneça consistente.
Um novo campo de resposta vai prejudicar minha integração?
Não, se o seu código ignorar campos que não reconhece. Notiondesk adiciona campos de resposta sem uma nova versão.