Sivutus
Sursa API:n listat sivutetaan kursorilla: pyydät enintään limit kohdetta, ja vastaus kertoo, miten saat
seuraavan sivun. Siirtymiä ei koskaan tarvitse laskea, eivätkä kohteet toistu tai katoa sivujen välillä, vaikka
tiedot muuttuisivat sillä välin.
| Parametri | Arvo |
|---|---|
limit | Kohteiden määrä sivulla, yleensä 1–200. Uusien listojen oletus on 50; viite näyttää kunkin listan vaihteluvälin ja oletuksen. |
cursor | Edellisen sivun kursori. Jätä se pois, kun haet ensimmäistä sivua. |
Lista palauttaa seuraavan kursorinsa jommallakummalla kahdesta tavasta vastauksensa rakenteen mukaan. API-viitteen kunkin päätepisteen sivu näyttää, kumpaa tapaa se käyttää.
Listat data-kääreellä
Julkista API:a varten lisätyt listat, kuten tapahtumasyöte, palauttavat objektin, jonka data-kentässä ovat kohteet:
curl "https://api.sursa.com/v1/webhook-events?limit=2" \
-H "Authorization: Bearer $SURSA_API_KEY"{
"data": [
{"id": "evt_8a1f…", "type": "card.published", "created_at": "2026-10-24T10:00:00Z"},
{"id": "evt_8a20…", "type": "card.updated", "created_at": "2026-10-24T10:00:03Z"}
],
"next_cursor": "eyJ2IjoxLCJrIjpbMTA0Ml19",
"has_more": true
}
Kun has_more on true, pyydä seuraava sivu niin, että cursor saa arvon next_cursor ja suodattimet ovat
samat:
curl "https://api.sursa.com/v1/webhook-events?limit=2&cursor=eyJ2IjoxLCJrIjpbMTA0Ml19" \
-H "Authorization: Bearer $SURSA_API_KEY"Listat, jotka olivat olemassa ennen kursoreita ja palauttavat objektin, säilyttävät oman kääreensä (esimerkiksi
{"items": […], "total": 120}). Ne saavat next_cursor- ja has_more-kentät samaan objektiin; kohteet pysyvät
paikoillaan.
Listat, jotka palauttavat taulukon
Muutama lista palauttaa pelkän JSON-taulukon, esimerkiksi
GET /v1/collections. Niiden vastauksen rakenne ei voi muuttua, joten
seuraava sivu tulee sen sijaan otsakkeissa:
curl -i "https://api.sursa.com/v1/collections?limit=50" \
-H "Authorization: Bearer $SURSA_API_KEY"HTTP/1.1 200 OK
Link: <https://api.example.com/v1/collections?limit=50&cursor=eyJ2IjoxLCJrIjpbNTBdfQ>; rel="next"
X-Next-Cursor: eyJ2IjoxLCJrIjpbNTBdfQ
[{"id": 1, "name": "support", …}, …]
Link, jossa onrel="next", on seuraavan sivun koko osoite;X-Next-Cursoron sama kursori yksinään.- Jos vastauksessa ei ole
Link-otsaketta, jossa onrel="next", eikäX-Next-Cursor-otsaketta, sivu on viimeinen. - Ilman
limit-parametria nämä listat palauttavat kaikki kohteet yhdessä vastauksessa, kuten aina ennenkin. Annalimit, jos haluat sivuttaa ne; kursori muistaa sivukoon, joten seuraavasta pyynnöstä voi jättäälimit-parametrin pois. GET /v1/cardson poikkeus: se palauttaa aina sivuja, oletuksena 200 korttia jalimit-parametrilla enintään 1000, joten seuraaX-Next-Cursor-otsaketta myös ilmanlimit-parametria.
// Every item of a list that returns an array.
async function* listArray(path) {
let next = `https://api.sursa.com${path}?limit=200`;
while (next) {
const response = await fetch(next, { headers: { Authorization: `Bearer ${process.env.SURSA_API_KEY}` } });
if (!response.ok) throw new Error(`HTTP ${response.status}`);
yield* await response.json();
const cursor = response.headers.get("X-Next-Cursor");
next = cursor ? `https://api.sursa.com${path}?cursor=${encodeURIComponent(cursor)}` : null;
}
}Tapahtumasyöte
Tapahtumasyöte GET /v1/webhook-events on loki, joten se sivutetaan
hieman eri tavalla:
- Tapahtumat ovat nousevassa järjestyksessä, vanhin ensin.
next_cursorpalautetaan jokaisella sivulla, myös silloin, kunhas_moreonfalse. Tallenna se ja kysy myöhemmin uudelleen samalla kursorilla, niin saat sillä välin tapahtuneet tapahtumat. Syöte on jono, jota voit lukea omaan tahtiisi.- Tapahtuma ilmestyy syötteeseen noin sekunnin kuluessa muutoksesta, jota se kuvaa, eikä koskaan ennen jo luettua tapahtumaa.
- Syötteessä ovat koko organisaation tapahtumat, joten sen lukemiseen tarvitaan avain, jolla on rooli
adminja käyttöaluewebhooks:manage.
Vienti tietovarastoon näyttää kokonaisen kyselysilmukan.
Kursorien säännöt
- Kursori on läpinäkymätön, enintään 512 merkin merkkijono. Älä jäsennä sitä äläkä muodosta sitä itse: sen muoto voi muuttua.
- Kursori kuuluu yhteen listaan ja yhteen suodatinjoukkoon. Vioittunut kursori, toisesta listasta peräisin oleva
kursori tai eri suodattimilla lähetetty kursori palauttaa
400-vastauksen ja koodinapi.cursor_invalid. - Jokaisella listalla on kiinteä lajittelujärjestys, joka päättyy yksilölliseen avaimeen, joten jokainen kohde on täsmälleen yhdellä sivulla.
- Kursorien myötä lisätyt listat eivät palauta kokonaismäärää; listat, joissa
totaloli jo aiemmin, säilyttävät sen. Laske kohteet sitä mukaa kuin luet niitä, jos tarvitset kokonaismäärän.
Siirtymään perustuva sivutus
Jotkin listat hyväksyivät offset-parametrin jo ennen kursorien käyttöönottoa ja hyväksyvät sen edelleen, jotta
olemassa olevat integraatiot toimivat. Suosi uudessa koodissa cursor-parametria. offset- ja cursor-parametreja ei
voi yhdistää: molempien lähettäminen palauttaa 422-vastauksen ja koodin
validation.failed.