Paginacja
Jeden kształt paginacji na wszystkich listach — page, limit, totalPages — plus filtrowanie i sortowanie.
Każdy endpoint listujący zwraca ten sam obiekt paginacji. Jeden kontrakt, wszędzie.
{
"data": [],
"pagination": {
"page": 1,
"limit": 50,
"total": 234,
"totalPages": 5
}
}Parametry zapytania
| Parametr | Typ | Domyślnie | Zakres |
|---|---|---|---|
page | liczba całkowita | 1 | od 1 w górę |
limit | liczba całkowita | 50 | 1–100 |
Wyjątki: GET /webhook-endpoints i GET /webhook-deliveries mają limit domyślnie 25, a GET /cases — 20 (górna granica wszędzie wciąż 100). GET /cases/{caseId}/comments nie jest stronicowane: zwraca 200 najnowszych notatek.
curl -s "https://app.mediflo.ai/api/external/v1/bot-sessions?page=2&limit=100" \
-H "Authorization: Bearer mflo_live_..."{
"data": [
{
"dispatchId": "0f0a2c1e-1111-2222-3333-444455556666",
"botId": "a1b2c3d4-1111-2222-3333-444455556666",
"botName": "Potwierdzanie wizyt",
"status": "COMPLETED",
"endReason": null,
"startedAt": "2026-09-01T09:15:00.000Z",
"endedAt": "2026-09-01T09:16:11.000Z",
"durationSec": 71,
"phoneNumber": "+48123456789",
"attemptId": "attempt-4711",
"hasTranscript": true,
"hasRecording": true,
"hasTelemetry": true
}
],
"pagination": { "page": 2, "limit": 100, "total": 214, "totalPages": 3 }
}Pola odpowiedzi
| Pole | Znaczenie |
|---|---|
page | Numer zwróconej strony, liczony od 1 |
limit | Ile elementów mieści strona |
total | Ile elementów pasuje do filtrów, w całości |
totalPages | ceil(total / limit) — wartość kanoniczna |
Pusty wynik to `totalPages: 0`
totalPages jest zwykłym sufitem z dzielenia, bez podłogi na jedynce. Zero pasujących elementów daje totalPages: 0, a nie 1. Pętla while (page <= totalPages) na pustym zbiorze nie wykona ani jednego obrotu — i tak ma być.
`pages` w `GET /tasks` jest przestarzałe
GET /tasks dodatkowo zwraca pages — alias totalPages zachowany dla wstecznej zgodności. Zniknie w kolejnej wersji głównej. Przejdź na totalPages.
Przejście przez całą listę
async function fetchAllBotSessions(apiKey) {
const results = []
let page = 1
let totalPages = 1
do {
const response = await fetch(
`https://app.mediflo.ai/api/external/v1/bot-sessions?page=${page}&limit=100`,
{ headers: { Authorization: `Bearer ${apiKey}` } }
)
if (!response.ok) {
const body = await response.json().catch(() => null)
throw new Error(`Mediflo API ${response.status}: ${body?.error?.code ?? 'UNKNOWN'}`)
}
const { data, pagination } = await response.json()
results.push(...data)
totalPages = pagination.totalPages
page += 1
} while (page <= totalPages)
return results
}Bierz limit=100, kiedy przechodzisz przez całość — mniej żądań to mniejsza szansa na 429. Patrz Limity zapytań.
Filtrowanie i sortowanie
Filtruj po stronie API zamiast pobierać wszystko i przesiewać u siebie. Zestaw filtrów zależy od endpointu i jest wypisany na jego stronie w Referencji; typowe wzorce:
# Tylko pilne, niezaczęte zadania
curl -s "https://app.mediflo.ai/api/external/v1/tasks?status=TODO&priority=URGENT" \
-H "Authorization: Bearer mflo_live_..."
# Sesje jednego bota z ostatniej doby
curl -s "https://app.mediflo.ai/api/external/v1/bot-sessions?botId=a1b2c3d4-1111-2222-3333-444455556666&since=2026-09-06T00:00:00.000Z" \
-H "Authorization: Bearer mflo_live_..."Sortowanie jest ustalone per endpoint: sesje botów i połączenia wracają od najnowszych. GET /tasks przyjmuje orderBy (createdAt, updatedAt, dueDate, priority, title) i orderDir (asc, desc).
Znaczniki czasu w filtrach to ISO 8601 w UTC. Pamiętaj o zakodowaniu + w numerach E.164 jako %2B.