Pagination and ordering
All listing endpoints (GET /recurso/) return paged data in format:
| JSON |
|---|
| {
"itens": [
{ "id": "1d3fc7947bee78a5179720a", "nome": "jornada de trabalho 08h x 18h" },
{ "id": "2a4bc8058cff89b6280831b", "nome": "jornada de trabalho 09h x 18h" }
],
"total": 239,
"pagina": 0,
"por_pagina": 10,
"ordenacao": [],
"filtros": []
}
|
| Field | Type | Description |
itens | array | Current Page Records |
total | integer | Total available records (all pages) |
pagina | integer | Current page index (start at 0) |
por_pagina | integer | Number of items returned on this page |
ordenacao | array | Sorting criteria applied in the consultation |
filtros | array | Active filters in query |
| Parameter | Default | Range | Description |
pagina | 0 | ≥ 0 | Page index (start at zero) |
por-pagina | 10 | 1 – 1000 | Number of records per page |
Examples
| HTTP |
|---|
| # Página 0 com 10 registros (padrão)
GET /jornadas/
# Segunda página (índice 1) com 50 registros
GET /jornadas/?pagina=1&por-pagina=50
# Máximo de registros por página
GET /jornadas/?por-pagina=1000
|
Iterating all pages
As API uses index-based pagination, calculate the total of pages from the fields total and por_pagina.
Python
| Python |
|---|
| import requests
def listar_todos(url, headers):
todos = []
pagina = 0
por_pagina = 100
while True:
response = requests.get(
url,
headers=headers,
params={"pagina": pagina, "por-pagina": por_pagina}
)
response.raise_for_status()
data = response.json()
todos.extend(data["itens"])
print(f"Carregados: {len(todos)}/{data['total']}")
if len(todos) >= data["total"]:
break
pagina += 1
return todos
# Uso
jornadas = listar_todos(
"https://apis.pontotel.com.br/pontotel/api/v4/jornadas/",
headers={"Authorization": f"Bearer {token}"}
)
|
JavaScript
| JavaScript |
|---|
| async function listarTodos(url, headers) {
const todos = [];
let pagina = 0;
const porPagina = 100;
while (true) {
const params = new URLSearchParams({ pagina, 'por-pagina': porPagina });
const response = await fetch(`${url}?${params}`, { headers });
const data = await response.json();
todos.push(...data.itens);
console.log(`Carregados: ${todos.length}/${data.total}`);
if (todos.length >= data.total) break;
pagina++;
}
return todos;
}
|
Sorting
Use parameter ordenacao to define the order of results. The format is campo for growing and -campo to decreasing.
| HTTP |
|---|
| # Ordenar por nome (ascendente)
GET /jornadas/?ordenacao=nome
# Ordenar por data de criação (descendente)
GET /jornadas/?ordenacao=-criadoEm
# Múltiplos critérios
GET /jornadas/?ordenacao=nome&ordenacao=-criadoEm
|
Good practice
Choose one por-pagina appropriate
- For bulk syncs: use
por-pagina=1000 - For interactive listings: use
por-pagina=10 or por-pagina=50
Respect Rate Limit
With 2,000 records and por-pagina=100You'll need 20 requests. Monitor the rate limit when iterating many pages.
Next Steps