SDK TypeScript
@lidmeo/sdk : installation, appels, erreurs, pagination, agences, webhooks.
npm install @lidmeo/sdkNode 18 ou plus, Deno ou Bun : il lui faut fetch et node:crypto (ni un navigateur, ni un environnement edge sans compatibilité Node). C'est un module ESM : import partout ; require("@lidmeo/sdk") fonctionne à partir de Node 20.19 et 22.12. Aucune dépendance.
import { Lidmeo } from "@lidmeo/sdk";
const lidmeo = new Lidmeo({ apiKey: process.env.LIDMEO_API_KEY }); // lid_live_… ou lid_test_…
// Les prospects qui ont répondu et vous attendent
const page = await lidmeo.prospects.list({ view: "to_handle" });
// Poser votre étape
await lidmeo.prospects.update("pros_…", { crm_stage: "stg_…" });
// Ajouter un lead à suivre (rien ne lui est envoyé)
await lidmeo.prospects.upsert({ match_on: "linkedin_url", linkedin_url: "https://www.linkedin.com/in/claire-durand" });Une méthode par opération, rangée par ressource : lidmeo.prospects.notes.create(…), lidmeo.webhookEndpoints.rotateSecret(…), lidmeo.test.simulate(…). Les types des paramètres et des réponses viennent du contrat de l'API.
Les options
| Option | Par défaut | |
|---|---|---|
apiKey | process.env.LIDMEO_API_KEY | une clé ou un jeton OAuth |
account | aucun | le compte visé par une clé d'agence (acct_…) |
language | aucune (le français) | la langue des erreurs, "fr" ou "en" (en-tête Accept-Language) |
maxRetries | 2 | reprises d'une requête qui échoue (réseau, 408, 429, 5xx, et les refus passagers en 409 d'une écriture), jamais d'un envoi qui a échoué ni d'envois coupés (send_failed, sends_disabled) |
timeoutMs | 60000 | délai d'une tentative |
baseUrl | https://api.lidmeo.com |
Chaque méthode accepte en dernier argument des options d'appel : idempotencyKey, account, language, timeoutMs, maxRetries, signal. Un signal (AbortSignal) annule la requête ; déjà levé, rien n'est envoyé.
Les erreurs
Toute erreur est une LidmeoError qui porte le problème de l'API. Branchez sur code, jamais sur le texte.
import { LidmeoError } from "@lidmeo/sdk";
try {
await lidmeo.prospects.approveInvitation("pros_…");
} catch (error) {
if (error instanceof LidmeoError && error.code === "daily_cap_reached") {
console.log("Prochain créneau :", error.problem.next_slot_at);
} else {
throw error;
}
}error.status, error.code, error.detail, error.requestId (à donner au support), error.errors (champ par champ) et error.problem (le problème entier). Une coupure réseau donne status: 0 et code: "network_error".
La pagination
for await (const prospect of lidmeo.paginate((q) => lidmeo.prospects.list({ ...q, view: "to_follow_up", limit: 100 }))) {
console.log(prospect.full_name);
}Les webhooks
import { verifyWebhook, WebhookVerificationError } from "@lidmeo/sdk";
const event = verifyWebhook(process.env.LIDMEO_WEBHOOK_SECRET!, rawBody, request.headers);
if (event.type === "prospect.replied") {
// event.data.object : le prospect
}verifyWebhook lève une WebhookVerificationError quand la signature, l'horodatage (plus de 5 minutes) ou les en-têtes ne vont pas : répondez alors 400. Voir vérifier une signature.