Zum Hauptinhalt springen

Wie Paginierung und Suche funktionieren

Listen in der Sally API werden seitenweise ausgeliefert, und für die Suche hat jede Ressource ihren eigenen Endpunkt. Diese Seite zeigt die Parameter und die Hülle, die jede geblätterte Antwort trägt, eine kopierbare Schleife, die alle Seiten abholt, und wie die Such-Endpunkte ihre Begriffe entgegennehmen und abgleichen.

Jedes Beispiel funktioniert so, wie es dasteht, sobald SALLY_TOKEN und DIRECTORY_ID gesetzt sind, siehe Schnellstart. Wähl deine Sprache einmal, alle Beispiele im API-Bereich folgen ihr.

Schnellnavigation

  1. Paginierung
  2. Alle Seiten abrufen
  3. Such-Endpunkte
  4. Wie gesucht wird
  5. Endpunkte im Überblick

1. Paginierung​

Geblätterte Listen-Endpunkte nehmen zwei Query-Parameter:

ParameterTypStandardBeschreibung
pageinteger1Seitennummer, beginnend bei 1.
pageSizeinteger25Einträge je Seite, höchstens 100.

Diese Anfrage holt die zweite Seite mit zehn Aufnahmen:

curl "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/recordings?page=2&pageSize=10" \
-H "Authorization: Bearer $SALLY_TOKEN"

Die Antwort ist immer dieselbe Hülle um die Einträge:

200 OK
{
"page": 2,
"pageSize": 10,
"total": 137,
"hasMore": true,
"items": [
{
"recordingId": "53e2e041-4b34-41c7-a285-634d80b3675d",
"name": "Weekly team meeting",
"durationInSeconds": 1843,
"languageCode": "de-DE",
"createdOn": "2026-09-24T09:30:00Z"
}
]
}
FeldTypBedeutung
pageintegerDie Seite, die du bekommen hast.
pageSizeintegerDie angewendete Seitengröße.
totalintegerAnzahl der Treffer über alle Seiten.
hasMorebooleantrue, wenn noch eine Seite folgt. Nimm es als Bedingung deiner Schleife.
itemsarrayDie Einträge dieser Seite. Ihre Felder stehen in der Referenz des jeweiligen Endpunkts.
Hinweis

Ein paar kleine Listen werden nicht geblättert und liefern ein einfaches JSON-Array. Welche Art ein Endpunkt liefert, steht in der Referenz, und unter Endpunkte im Überblick sind alle geblätterten aufgelistet.

2. Alle Seiten abrufen​

Frag so lange Seiten ab, bis hasMore auf false steht. Nimm die größte Seitengröße, die du verarbeiten kannst, dann brauchst du weniger Aufrufe. Stößt die Schleife an das Rate-Limit und bekommt ein 429, wartet sie jedes Mal etwas länger und fragt dieselbe Seite erneut ab.

page=1
while : ; do
body=$(curl -s "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/recordings?page=$page&pageSize=100" \
-H "Authorization: Bearer $SALLY_TOKEN")
echo "$body" | jq -c '.items[]'
[ "$(echo "$body" | jq '.hasMore')" = "true" ] || break
page=$((page + 1))
done
Empfehlung

Kombinier das Blättern mit der Feldauswahl: fields=recordingId,name,createdOn hält jede Seite klein. Die Felder der Hülle kommen immer mit, die Schleife funktioniert also weiter.

3. Such-Endpunkte​

Jede durchsuchbare Ressource hat einen POST …/search-Endpunkt, der seine Parameter im Request-Body erwartet. Das ist Absicht: Ein Suchbegriff in einer URL läuft mit Leerzeichen, Umlauten und Prozentzeichen in Kodierungsprobleme, im Body nicht.

Ein Such-Body hat immer genau ein Freitextfeld namens search, das auf einmal über alle passenden Textfelder der Ressource sucht, dazu die strukturellen Filter der Ressource sowie page und pageSize. Diese Anfrage durchsucht Termine:

curl -X POST "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/appointments/search" \
-H "Authorization: Bearer $SALLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"search": "Q4 Planung",
"from": "2026-09-01T00:00:00Z",
"page": 1,
"pageSize": 25
}'

Die Body-Felder der Terminsuche:

FeldTypBeschreibung
searchstringFreitext, gesucht in Betreff, Beschreibung sowie Name oder E-Mail der Teilnehmenden.
fromstringNur Termine, die zu diesem UTC-Zeitpunkt oder danach beginnen.
tostringNur Termine, die zu diesem UTC-Zeitpunkt oder davor beginnen.
pageintegerSeitennummer, Standard 1.
pageSizeintegerEinträge je Seite, Standard 25, höchstens 100.

Die Antwort hat dieselbe Hülle wie der passende Listen-Endpunkt, die Schleife aus Alle Seiten abrufen funktioniert also auch hier: Schick denselben Body mit der nächsten page erneut.

Hinweis

Die einfachen GET-Listen bleiben reine Listen-Endpunkte. Der Such-Endpunkt kommt hinzu, er ersetzt sie nicht.

4. Wie gesucht wird​

  • Teilstring ohne Rücksicht auf Groß- und Kleinschreibung: Der Begriff passt irgendwo im Wert, nicht nur am Anfang.
  • Wörtlich: %, _ und * sind gewöhnliche Zeichen, keine Platzhalter.
  • Bereinigt: Leerzeichen am Anfang und Ende werden entfernt, und ein leerer Begriff heißt kein Filter.
  • Manche Endpunkte verlangen eine Mindestlänge, die die Referenz am Endpunkt nennt.
searchFindet Q4 Planung mit VertriebWarum
"planung"jaTeilstring irgendwo im Wert.
"VERTRIEB"jaGroß- und Kleinschreibung spielen keine Rolle.
" q4 "jaLeerzeichen außen herum werden entfernt.
"plan*"nein* ist ein gewöhnliches Zeichen, kein Platzhalter.
""jaEin leerer Begriff heißt kein Filter.

5. Endpunkte im Überblick​

Diese Listen kommen direkt aus der Spezifikation. Jeder Eintrag führt in die Referenz, wo du die Anfrage mit deinem eigenen Token abschicken kannst.

Geblätterte Endpunkte

Such-Endpunkte