Mediflo
REST API

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

ParametrTypDomyślnieZakres
pageliczba całkowita1od 1 w górę
limitliczba całkowita501–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

PoleZnaczenie
pageNumer zwróconej strony, liczony od 1
limitIle elementów mieści strona
totalIle elementów pasuje do filtrów, w całości
totalPagesceil(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.

Na tej stronie