Concetti
Paginazione e formati
Gli elenchi sono paginati con un cursor. Le risposte sono in JSON e seguono convenzioni prevedibili.
Paginazione con cursor#
Ogni endpoint che restituisce un elenco accetta due parametri di query:
| Parametro | Dettagli |
|---|---|
limit | Elementi per pagina, da 1 a 100. Valore predefinito: vedi l'endpoint nel Riferimento API. |
cursor | Il valore next_cursor della pagina precedente. Omettilo per la prima pagina. |
La risposta ha sempre questa struttura:
{
"data": [ { "id": "1043", "...": "..." } ],
"next_cursor": "eyJpZCI6IjEwNDMifQ"
}
Quando next_cursor è null non ci sono altre pagine. I cursor sono stringhe opache: non costruirli né modificarli, e non conservarli a lungo.
Leggere tutte le pagine#
curl "https://api.linework.app/open/v1/me/posts?limit=50" \
-H "Authorization: Bearer $LINEWORK_API_KEY"
# next page: pass the next_cursor you received
curl "https://api.linework.app/open/v1/me/posts?limit=50&cursor=eyJpZCI6IjEwNDMifQ" \
-H "Authorization: Bearer $LINEWORK_API_KEY"
async function* all(path) {
let cursor = null;
do {
const url = new URL(`https://api.linework.app/open/v1${path}`);
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.LINEWORK_API_KEY}` },
});
const page = await res.json();
yield* page.data;
cursor = page.next_cursor;
} while (cursor);
}
for await (const post of all("/me/posts")) console.log(post.id);
import os, requests
API = "https://api.linework.app/open/v1"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['LINEWORK_API_KEY']}"
def all_items(path):
cursor = None
while True:
params = {"limit": 100}
if cursor:
params["cursor"] = cursor
page = s.get(API + path, params=params, timeout=30).json()
yield from page["data"]
cursor = page.get("next_cursor")
if not cursor:
break
for post in all_items("/me/posts"):
print(post["id"])
Convenzioni JSON#
- I nomi dei campi sono in
camelCase(per esempiocreatedAt,mediaIds). L'unica eccezione ènext_cursornelle risposte con elenchi. - Gli id sono stringhe, anche quando sembrano numeri. Non convertirli in numeri.
- Le date sono stringhe ISO 8601 in UTC, per esempio
2026-10-14T09:30:00.000Z. - I body delle richieste sono JSON (
Content-Type: application/json), trannePOST /media, che èmultipart/form-data. - I valori facoltativi assenti sono
nulloppure omessi: trattali allo stesso modo. - Alle risposte possono essere aggiunti nuovi campi in qualsiasi momento: ignora i campi che non conosci.
Versionamento#
La versione è nel percorso (/open/v1). All'interno della v1 facciamo solo modifiche retrocompatibili: nuovi endpoint, nuovi parametri facoltativi, nuovi campi nelle risposte, nuovi codici di errore. Le modifiche incompatibili arriveranno come /open/v2, annunciate con largo anticipo nel changelog.