LidmeoDevelopers

SDK TypeScript

@lidmeo/sdk : installation, appels, erreurs, pagination, agences, webhooks.

npm install @lidmeo/sdk

Node 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

OptionPar défaut
apiKeyprocess.env.LIDMEO_API_KEYune clé ou un jeton OAuth
accountaucunle compte visé par une clé d'agence (acct_…)
languageaucune (le français)la langue des erreurs, "fr" ou "en" (en-tête Accept-Language)
maxRetries2reprises 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)
timeoutMs60000délai d'une tentative
baseUrlhttps://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.

Sur cette page