Linework Developers
FR
Obtenir l'accès

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ètreDétails
limitÉléments par page, de 1 à 100. Valeur par défaut : consultez l'endpoint dans la Référence de l'API.
cursorLa 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 exemple createdAt, mediaIds). La seule exception est next_cursor dans 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), sauf POST /media, qui utilise multipart/form-data.
  • Les valeurs facultatives manquantes valent null ou 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.