Concepts
Pagination et formats
Les listes sont paginées à l'aide d'un cursor. Les réponses sont au format JSON et suivent des conventions prévisibles.
Pagination par cursor#
Chaque endpoint qui renvoie une liste accepte deux paramètres de requête :
| Paramètre | Détails |
|---|---|
limit | Éléments par page, de 1 à 100. Valeur par défaut : consultez l'endpoint dans la Référence de l'API. |
cursor | La valeur next_cursor de la page précédente. Omettez-la pour la première page. |
La réponse a toujours cette structure :
{
"data": [ { "id": "1043", "...": "..." } ],
"next_cursor": "eyJpZCI6IjEwNDMifQ"
}
Lorsque next_cursor vaut null, il n'y a plus de pages. Les cursors sont des chaînes opaques : ne les construisez pas, ne les modifiez pas et ne les conservez pas longtemps.
Lire toutes les pages#
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"])
Conventions JSON#
- Les noms de champs sont en
camelCase(par exemplecreatedAt,mediaIds). La seule exception estnext_cursordans les réponses de liste. - Les identifiants sont des chaînes, même lorsqu'ils ressemblent à des nombres. Ne les convertissez pas en nombres.
- Les dates sont des chaînes ISO 8601 en UTC, par exemple
2026-10-14T09:30:00.000Z. - Les corps de requête sont en JSON (
Content-Type: application/json), saufPOST /media, qui utilisemultipart/form-data. - Les valeurs facultatives manquantes valent
nullou sont omises ; traitez les deux cas de la même manière. - De nouveaux champs peuvent être ajoutés aux réponses à tout moment : ignorez les champs que vous ne connaissez pas.
Gestion des versions#
La version figure dans le chemin (/open/v1). Au sein de la v1, nous n'apportons que des modifications rétrocompatibles : nouveaux endpoints, nouveaux paramètres facultatifs, nouveaux champs de réponse, nouveaux codes d'erreur. Les changements incompatibles arriveront sous la forme de /open/v2, annoncés bien à l'avance dans le journal des modifications.