Aller au contenu
LinkProfit

API développeur

Une API REST qui couvre tout ce que fait le tableau de bord

Créez des liens, lisez les statistiques, connectez des domaines et gérez les espaces de travail de vos clients en HTTP avec une clé bearer. L’API est générée à partir des schémas de validation que le produit utilise lui-même, publiée en OpenAPI et gelée en version un — les ruptures n’arrivent jamais autrement que dans une nouvelle version.

Redirects served from the location closest to the click

Deux portées de clé, parce qu’il y a deux types d’appelants

Une clé d’espace de travail agit à l’intérieur d’un seul espace : liens, statistiques, domaines qui lui sont accessibles et sa propre consommation. Une clé partenaire agit à l’échelle de l’activité : clients et leurs abonnements, forfaits que vous vendez, tous les domaines, paiements avec le détail des frais, versements et vue d’ensemble analytique agrégée. Les deux préfixes sont visiblement différents : une clé collée dans le mauvais service échoue immédiatement au lieu de faire quelque chose de surprenant.

Les clés sont créées dans le tableau de bord, affichées une seule fois et stockées uniquement sous forme de hachage. Chaque clé porte sa propre liste de portées : une intégration qui n’a besoin que de lire les statistiques reçoit une clé incapable de créer ou de supprimer quoi que ce soit. Les clés peuvent recevoir une date d’expiration et être révoquées instantanément, et la date de dernière utilisation de chacune est affichée — c’est ainsi que l’on retrouve l’intégration que plus personne ne se rappelle avoir mise en place.

  • POST /links, GET /links, GET /links/{id}, PATCH /links/{id}, DELETE /links/{id}
  • POST /links/bulk — jusqu’à cent liens par appel
  • GET /links/{id}/qr — PNG ou SVG, avec un préréglage et une taille
  • GET /analytics/summary, /timeseries, /breakdown, /links/top, /export.csv
  • GET et POST /domains — connecter un domaine et lire les enregistrements DNS attendus
  • GET /workspace — limites du forfait et consommation courante
  • GET /partner/clients, /partner/plans, /partner/payments, /partner/payouts

Prévisible sur les points qui comptent à trois heures du matin

Chaque erreur a la même forme — un code, un message lisible par un humain et une URL de documentation — pour qu’une bibliothèque cliente puisse brancher sur le code et qu’une personne puisse lire le message. Les listes sont paginées par curseurs plutôt que par numéros de page, ce qui garde les résultats stables pendant que des liens sont créés sous vos pieds.

Les limites de débit sont par défaut de six cents requêtes par minute sur une clé d’espace de travail et du double sur une clé partenaire, la limite, le nombre restant et l’heure de réinitialisation étant renvoyés en en-têtes sur chaque réponse. Les dépasser renvoie un 429 avec un en-tête Retry-After plutôt qu’une connexion coupée : les clients bien élevés se mettent correctement en retrait. Les exports de statistiques sont diffusés en flux, si bien que cent mille lignes n’obligent aucun des deux côtés à garder un rapport en mémoire.

Des webhooks pour les événements que vous interrogeriez sinon en boucle

Enregistrez un endpoint et recevez les créations, modifications et suppressions de liens ; les événements de cycle de vie des domaines à mesure qu’un nom d’hôte passe de « SSL en attente » à « actif » ou à un état d’erreur ; et, sur les clés partenaires, les événements d’abonnement et de paiement des clients. Interroger un endpoint de statut de domaine une fois par minute est exactement le genre de code que personne ne devrait écrire.

Chaque livraison porte un en-tête de signature HMAC-SHA256 horodaté : votre récepteur peut vérifier que la charge utile vient bien de nous et qu’il ne s’agit pas d’un rejeu. Les livraisons échouées sont retentées cinq fois avec des intervalles croissants — une minute, cinq, trente, deux heures, douze — après quoi l’endpoint est marqué défaillant et un e-mail part. Un événement de test peut être envoyé depuis le tableau de bord : l’intégration est vérifiable avant que quoi que ce soit de réel en dépende.

Une documentation générée depuis le code qui tourne

La spécification OpenAPI est construite à partir des schémas mêmes que l’API utilise pour valider, ce qui l’empêche de dériver de l’implémentation comme le ferait une référence écrite à la main. Elle est publiée sous forme de fichier que vous pouvez donner à un générateur de clients et rendue en documentation de référence navigable sur ce site, aux côtés de guides rédigés pour le démarrage rapide, la pagination, les erreurs, les webhooks et les limites de débit.

La version un est gelée. De nouveaux champs peuvent apparaître, le comportement existant ne changera pas, et tout ce qui casserait un appelant attend une version deux sur un autre chemin. Si vous choisissez un raccourcisseur pour construire dessus plutôt que pour l’utiliser, cette promesse vaut plus que n’importe quel endpoint pris isolément.

Du code qui parle de lui-même

Créer un lien — curl
curl -X POST https://api.linkprofit.com/v1/links \
  -H 'Authorization: Bearer lp_live_XXXXXXXX' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/spring-collection",
    "domain_id": "dom_8kq2vn41",
    "slug": "spring",
    "title": "Spring collection",
    "utm": {
      "utm_source": "newsletter",
      "utm_medium": "email",
      "utm_campaign": "spring-2026"
    }
  }'
Créer un lien — JavaScript fetch
const response = await fetch("https://api.linkprofit.com/v1/links", {
  method: "POST",
  headers: {
    Authorization: "Bearer lp_live_XXXXXXXX",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    url: "https://example.com/spring-collection",
    domain_id: "dom_8kq2vn41",
    slug: "spring",
  }),
});

if (!response.ok) {
  const { error } = await response.json();
  throw new Error(error.code + ": " + error.message);
}

const link = await response.json();
console.log(link, response.headers.get("X-RateLimit-Remaining"));
Créer un lien — Python requests
import requests

response = requests.post(
    "https://api.linkprofit.com/v1/links",
    headers={"Authorization": "Bearer lp_live_XXXXXXXX"},
    json={
        "url": "https://example.com/spring-collection",
        "domain_id": "dom_8kq2vn41",
        "slug": "spring",
    },
    timeout=10,
)

if response.status_code == 429:
    raise SystemExit("rate limited, retry after " + response.headers["Retry-After"])

response.raise_for_status()
print(response.json())

Questions fréquentes

Quels forfaits incluent l’accès à l’API ?

Pour les partenaires, l’accès à l’API commence avec le forfait Growth et est inclus dans tous ceux au-dessus. Pour vos propres clients, c’est vous qui décidez : l’accès à l’API est l’un des interrupteurs de chaque forfait que vous créez, il peut donc être un palier premium de votre service ou être inclus partout.

L’API peut-elle tourner sur mon propre nom d’hôte ?

Pas en version un. L’API est servie depuis api.linkprofit.com, et les partenaires la documentent auprès de leurs clients comme l’API de leur service. Tout ce qu’un client voit dans le navigateur — tableau de bord, liens, e-mails, paiement — est sur vos domaines ; le nom d’hôte de l’API est l’unique exception, assumée.

Existe-t-il un bac à sable pour les tests ?

Utilisez un espace de travail dédié et une clé limitée à cet espace. Les liens qui y sont créés résolvent sur un vrai domaine et produisent de vraies statistiques, ce qui est plus utile qu’un environnement simulé quand vous vérifiez que les redirections, le ciblage et les webhooks se comportent comme documenté.

Lancez votre raccourcisseur de liens de marque

Connectez un domaine, publiez vos prix et invitez votre premier client — la plupart des partenaires sont en ligne en une soirée.

Aucune carte requise pour l’essai.