Documentation développeur
API et serveur MCP GetLinkFast
Cherchez des sites, remplissez votre panier et commandez en crédits sans ouvrir le tableau de bord : depuis un script, un scénario Make ou n8n, ou un agent IA comme Claude ou Cursor. L'API et le serveur MCP utilisent la même clé et rendent le même JSON.
À quoi ça sert
- Agences et équipes SEO : branchez vos outils internes et vos tableaux de suivi sur votre compte. Catalogue, panier, commandes et statuts se lisent en JSON.
- Agents IA : demandez à Claude Code ou Cursor « trouve-moi 5 sites finance DR 40+ et commande ». L'agent cherche, vous montre le récapitulatif et ne commande qu'après votre accord.
- Make, n8n, Zapier : un module HTTP et une clé suffisent.
L'API vend l'article invité (guest_post), l'insertion de lien (link_insertion) et les packs SEO/GEO, en crédits uniquement. L'achat de crédits et les autres offres restent dans le tableau de bord.
Créer une clé
- Ouvrez Tableau de bord → Accès API.
- Nommez la clé (par exemple « Agent Claude » ou « Reporting Make ») et choisissez ses droits. Sur une clé qui peut commander, vous pouvez fixer un plafond par commande et un plafond sur 24 heures.
- Copiez la clé. Elle commence par
glf_live_et ne s'affiche qu'une seule fois : nous n'en gardons qu'une empreinte. - Envoyez-la dans l'en-tête de chaque requête :
Authorization: Bearer glf_live_…
10 clés actives au maximum par organisation. Une clé révoquée cesse aussitôt de fonctionner, tout comme les clés d'un membre qui quitte l'organisation. Gardez la clé hors de vos dépôts de code : quiconque la détient agit au nom de votre organisation.
Les droits d'une clé
Chaque clé porte un ou plusieurs droits. Une requête sans le droit nécessaire reçoit 403 insufficient_scope, et un agent IA ne voit que les outils permis.
| Droit | Donne accès à | Qui peut l'accorder |
|---|---|---|
read | Catalogue, catégories, compte et solde, historique des crédits, commandes, devis de pack. | Toujours inclus. |
cart | Ajouter, modifier et retirer des lignes du panier. | Tout membre de l'organisation. |
purchase | Commander le panier ou un pack, en crédits. Inclut le panier. | Le propriétaire de l'organisation uniquement. |
Démarrage rapide
Toutes les routes commencent par https://www.getlinkfast.com/api/v1. Gardez le www : l'adresse sans www redirige, et un client HTTP n'envoie plus l'en-tête Authorization après une redirection.
Les montants sont en euros hors TVA. Les réponses sont en JSON, les champs en snake_case.
curl https://www.getlinkfast.com/api/v1/account \
-H "Authorization: Bearer glf_live_…"curl "https://www.getlinkfast.com/api/v1/sites?dr_min=40&language=fr&product=guest_post&sort=dr&dir=desc&page_size=10" \
-H "Authorization: Bearer glf_live_…"curl -X POST https://www.getlinkfast.com/api/v1/cart/items \
-H "Authorization: Bearer glf_live_…" \
-H "Content-Type: application/json" \
-d '{"site_id":"8a1f0c3e-5b7d-4e2a-9c61-0f3b2d4e6a17","product_type":"guest_post","target_url":"https://www.example.com/invoicing","anchor":"invoicing software","topic":"How to choose invoicing software for a small business"}'Remplacez site_id par l'id d'un site de l'étape 2. N'envoyez jamais de prix : le serveur le calcule.
curl -X POST https://www.getlinkfast.com/api/v1/checkout \
-H "Authorization: Bearer glf_live_…" \
-H "Idempotency-Key: order-2026-10-14-001"La réponse donne l'id de la commande, le montant débité et votre solde restant. Suivez ensuite son avancement avec GET /orders/{id}.
Commander en crédits
L'API commande uniquement en crédits et ne déclenche jamais de paiement par carte. Les crédits se rechargent dans le tableau de bord.
Une commande prend les lignes guest_post et link_insertion du panier. Les autres lignes, ajoutées depuis le tableau de bord, restent au panier et sont listées dans skipped_items.
Aucun plafond par défaut : votre solde est la seule limite. Sur une clé qui peut commander, fixez un plafond par commande et un plafond sur 24 heures glissantes. Une commande qui les dépasse est refusée (403 spending_limit_exceeded, avec le reste disponible), sans débit.
Solde insuffisant : 402 insufficient_credits, avec le montant manquant et le lien de la page Crédits, à transmettre à une personne de votre équipe. Rien n'est débité.
Ensuite, tout se passe comme depuis le tableau de bord : email de confirmation et suivi dans l'écran Commandes, où la commande porte le nom de la clé qui l'a passée.
L'en-tête Idempotency-Key
- Obligatoire sur
POST /checkoutetPOST /packs/orders: de 8 à 128 caractères ASCII imprimables, sans espace. Sans lui :400 idempotency_key_required. - Une valeur égale une intention d'achat. Renvoyer la même valeur rend la commande d'origine (
200,"replayed": true) sans second débit, même si le panier a changé depuis. - Après un délai dépassé ou une coupure réseau, relancez avec la même valeur : vous ne paierez pas deux fois.
- Pour un nouvel achat, générez une nouvelle valeur, un UUID par exemple.
- Sur
POST /checkoutcomme surPOST /packs/orders, une valeur qui a déjà servi à un autre achat est refusée :409 idempotency_conflict, sans débit. Pour un pack, la même valeur envoyée avec un autre contenu l'est aussi. - Côté MCP, le jeton de confirmation joue ce rôle : vous n'avez rien à générer.
Limites
- 120 requêtes par minute et par clé pour la lecture, et autant, séparément, pour le panier : l'une n'entame pas l'autre.
- 10 appels par minute et par clé vers les routes ou outils d'achat — rejeux, refus et étape de récapitulatif MCP compris.
- 300 requêtes HTTP par minute et par clé sur le serveur MCP. Chaque outil appelé compte en plus dans la limite de son droit.
- Au-delà :
429 rate_limited. L'attente, en secondes, est donnée par l'en-têteRetry-Afteren HTTP, et pardetails.retry_after_secondsdans le résultat d'un outil MCP. - 100 résultats par page au maximum (
page_size). - Corps de requête : 1 Mo au maximum.
Codes d'erreur
Toute erreur a la même forme. Testez code : il est stable. message est en anglais et s'adresse au développeur ; details précise le champ fautif ou les montants.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this order. Nothing was debited. Ask a human to top up at credits_url, then retry with the same Idempotency-Key.",
"details": {
"missing_amount": 42,
"credits_url": "https://www.getlinkfast.com/dashboard/credits"
}
}
}| Code | HTTP | Ce que ça veut dire |
|---|---|---|
invalid_json | 400 | Le corps de la requête n'est pas un JSON lisible. Vérifiez la syntaxe et l'en-tête Content-Type: application/json. |
idempotency_key_required | 400 | En-tête Idempotency-Key absent ou mal formé sur une route d'achat. Envoyez une valeur de 8 à 128 caractères. |
invalid_api_key | 401 | Clé absente, mal formée, inconnue ou révoquée, ou créée par un membre qui a quitté l'organisation. Vérifiez l'en-tête Authorization: Bearer glf_live_…. |
insufficient_credits | 402 | Solde insuffisant. details.missing_amount donne le montant manquant, details.credits_url la page où recharger. Rien n'a été débité. |
insufficient_scope | 403 | La clé n'a pas le droit demandé par cette route ou cet outil. Créez une clé avec ce droit. |
spending_limit_exceeded | 403 | La commande dépasse un plafond de la clé : par commande (window: order) ou sur 24 heures (window: 24h). details.remaining donne le reste. Rien n'a été débité. |
not_found | 404 | Ressource introuvable, ou qui n'appartient pas à votre organisation. |
method_not_allowed | 405 | Serveur MCP : GET et DELETE ne sont pas acceptés. Envoyez chaque message JSON-RPC en POST. |
organization_financial_hold | 409 | Les achats sont bloqués sur votre organisation. Contactez-nous. Rien n'a été débité. |
page_already_sold | 409 | Une page du panier (insertion de lien) vient d'être vendue. Retirez la ligne, puis recommandez avec une nouvelle Idempotency-Key. |
cart_already_ordered | 409 | Une ligne du panier a déjà été commandée par un autre achat (tableau de bord ou autre Idempotency-Key). Relisez le panier avant de recommander avec une nouvelle valeur. |
idempotency_conflict | 409 | Cette Idempotency-Key a déjà servi pour un autre achat. Utilisez une nouvelle valeur pour un nouvel achat. |
not_ready | 409 | L'audit n'est pas encore prêt. Attendez le statut ready avec get_audit, puis ajoutez la page. |
full_pass_running | 409 | Le rapport complet de l'audit est encore en préparation. Réessayez dans quelques minutes. Rien n'a été lancé. |
limit_reached | 409 | L'audit a déjà 8 pages ajoutées par vous, analyses en cours comprises. Rien n'a été lancé. |
already_present | 409 | Cette page est déjà dans l'audit, ou son analyse est en cours. Rien n'a été lancé. |
already_ordered | 409 | Ce lien planifié est déjà commandé : il ne s'annule plus ici. |
not_cancellable | 409 | Ce lien ne peut pas être annulé pour le moment. Relisez-le avec get_plan. |
team_planned | 409 | Ce lien a été programmé par notre équipe, pas par l'API : il ne s'annule pas ici. Pour le changer, le propriétaire du compte contacte le support. |
payload_too_large | 413 | Corps de requête au-delà de 1 Mo. |
invalid_parameter | 422 | Paramètre de requête invalide, répété ou inconnu. details.fields nomme chaque paramètre fautif et la raison. |
invalid_arguments | 422 | Combinaison d'arguments invalide, par exemple ni domain ni audit_id, ou les deux. details.field nomme le champ. Rien n'a été fait. |
invalid_domain | 422 | Domaine ou URL illisible. Envoyez un nom de domaine, par exemple example.com. |
own_network_domain | 422 | Ce domaine fait partie de notre réseau de publication : il ne peut pas être audité. Rien n'a été lancé. |
invalid_body | 422 | Champ invalide ou inconnu dans le corps. details.fields nomme chaque champ fautif et la raison. |
product_not_available_via_api | 422 | L'API vend l'article invité et l'insertion de lien. Les autres produits se commandent depuis le tableau de bord. |
image_not_uploaded | 422 | L'image mise en avant doit avoir été téléversée sur GetLinkFast depuis le tableau de bord. |
cart_empty | 422 | Aucune ligne du panier ne se commande par l'API. Rien n'a été débité. |
cart_invalid | 422 | Des lignes sont incomplètes ou plus disponibles. details.items liste chaque ligne et ses problèmes. Rien n'a été débité. |
invalid_pack_input | 422 | Le pack ne respecte pas ses règles (details.reason). Rien n'a été débité. |
site_unavailable | 422 | Ce site n'existe pas ou n'est plus en vente. |
target_page_required | 422 | Une insertion de lien demande page_id : prenez-le dans la liste des pages du site. |
target_page_not_found | 422 | Cette page n'appartient pas à ce site. |
target_page_sold | 422 | Cette page a déjà été vendue. |
target_page_withdrawn | 422 | Cette page n'est plus proposée. |
target_page_already_in_cart | 422 | Cette page est déjà dans votre panier. |
product_unavailable | 422 | Ce site ne vend pas ce produit. |
invalid_url | 422 | Adresse illisible. Envoyez une adresse complète en http(s), sans identifiant ni port. |
other_site | 422 | Cette page n'est pas sur le domaine audité. Envoyez une page du même site. |
invalid_keyword | 422 | Recherche visée trop longue : 120 caractères au plus. |
rate_limited | 429 | Trop de requêtes pour cette clé. Attendez le nombre de secondes indiqué par l'en-tête Retry-After en HTTP, ou par details.retry_after_seconds dans le résultat d'un outil MCP. |
audit_quota_exceeded | 429 | Cette clé a déjà lancé 10 audits sur les dernières 24 heures. Rien n'a été lancé : réessayez plus tard. |
internal_error | 500 | Erreur de notre côté, déjà signalée à l'équipe. Réessayez plus tard : un achat relancé avec la même Idempotency-Key n'est jamais débité deux fois. |
engine_unavailable | 502 | Le moteur d'audit est momentanément injoignable. Rien n'a été lancé : réessayez plus tard. |
packs_unavailable | 503 | Les packs SEO/GEO ne sont pas encore disponibles. |
confirmation_expired | Outil MCP | Jeton de confirmation expiré, ou panier, prix ou clé modifiés depuis le récapitulatif. Rien n'a été débité : rappelez l'outil sans jeton pour obtenir un nouveau récapitulatif. |
purchase_unavailable | Outil MCP | Les achats par le serveur MCP sont momentanément indisponibles. Rien n'a été débité. Réessayez plus tard. |
unknown_tool | Outil MCP | Outil inconnu, ou non permis par les droits de la clé. tools/list donne les outils disponibles. |
audit_failed | Outil MCP | Cet audit a échoué, aucun plan n'est possible. Lancez-en un nouveau avec run_audit. Rien n'a été fait. |
audit_not_ready | Outil MCP | Cet audit n'est pas terminé. Attendez le statut ready avec get_audit, puis rappelez plan_links. Rien n'a été fait. |
budget_too_low | Outil MCP | Le budget mensuel est sous le minimum de 100 € par mois. Rien n'a été fait. |
start_date_too_far | Outil MCP | La date de départ est trop lointaine. Le message donne la dernière date permise. Rien n'a été fait. |
too_many_pages | Outil MCP | Un projet suit un nombre limité de pages. Envoyez moins de nouvelles pages dans target_urls. Rien n'a été fait. |
plan_exists | Outil MCP | Ce domaine a déjà des liens planifiés pas encore commandés. Les plans ne se fusionnent pas : retirez-les avec cancel_planned_link, puis recommencez. Rien n'a été fait. |
pending_proposals | Outil MCP | Notre équipe étudie des liens proposés pour ce domaine : aucun plan ne peut s'y ajouter pour l'instant. details.count donne leur nombre et details.retry_after la date après laquelle réessayer (sans programmation d'ici là, ils expirent). Sinon, demandez au propriétaire du compte de contacter le support. Rien n'a été fait. |
no_links_found | Outil MCP | Aucun site du catalogue ne convient à ces pages avec ce budget mensuel. Essayez d'autres pages ou un budget plus haut. Rien n'a été fait. |
plan_in_progress | Outil MCP | Ce plan s'enregistre en ce moment. Rappelez plan_links avec le même jeton dans quelques secondes pour lire le résultat. |
plan_outcome_unknown | Outil MCP | L'enregistrement a été interrompu et son résultat est inconnu. Ne confirmez pas à nouveau : lisez le plan avec get_plan. |
plan_conflict | Outil MCP | Le plan ne tient plus tel quel : le projet du domaine a changé, ses dates ne tombent plus dans les mois du budget (qui partent de la confirmation), ou l'un de ses sites n'est plus disponible pour ce domaine. details.reason dit lequel. Rien n'a été écrit : rappelez plan_links sans jeton pour un nouveau résumé. |
plan_retry | Outil MCP | Un autre appel avec ce jeton s'est terminé sans enregistrer le plan. Rappelez plan_links avec le même jeton pour lire le résultat. |
Serveur MCP
Le serveur MCP donne à votre agent IA les mêmes fonctions que l'API, avec la même clé. Son adresse : https://www.getlinkfast.com/api/mcp.
Claude Code
Une commande dans votre terminal :
claude mcp add --transport http getlinkfast https://www.getlinkfast.com/api/mcp --header "Authorization: Bearer glf_live_…"Cursor
Dans ~/.cursor/mcp.json. Évitez le fichier .cursor/mcp.json d'un projet : il finit souvent dans le dépôt, avec la clé.
{
"mcpServers": {
"getlinkfast": {
"url": "https://www.getlinkfast.com/api/mcp",
"headers": {
"Authorization": "Bearer glf_live_…"
}
}
}
}Claude Desktop
Claude Desktop n'envoie pas d'en-tête personnalisé à un serveur distant : il ne peut donc pas transmettre votre clé. Il se branchera nativement avec la connexion OAuth, prévue dans une prochaine version. Aujourd'hui, utilisez Claude Code ou Cursor : ils envoient la clé dans l'en-tête Authorization.
Les outils
L'agent ne voit que les outils permis par les droits de la clé : une clé sans le droit de commander n'a aucun outil d'achat.
readsearch_sitesget_sitelist_site_pageslist_categoriesget_accountlist_ordersget_orderget_auditquote_packlist_auditsget_plancartget_cartadd_to_cartupdate_cart_itemremove_cart_itemadd_audit_pagerun_auditcancel_planned_linkpurchasecheckoutorder_packplan_links
L'achat en deux temps
- L'agent appelle
checkoutouorder_packsansconfirmation_token: rien n'est débité. Il reçoit le récapitulatif (lignes, total, solde après débit, plafond restant) et unconfirmation_token. - Il vous montre ce récapitulatif. Si vous acceptez, il rappelle l'outil avec le
confirmation_token: la commande est passée et débitée. - Le jeton vaut 10 minutes. Si le panier, un prix ou la clé change entre-temps, il est refusé (
confirmation_expired) et l'agent refait l'étape 1. Rappeler avec le même jeton après une coupure rend la même commande, sans second débit.
Client écrit à la main
Le serveur est sans session : chaque message JSON-RPC part en POST et la réponse arrive en JSON. Envoyez Accept: application/json, text/event-stream et Content-Type: application/json, sinon le serveur répond 406. GET et DELETE répondent 405.
curl -X POST https://www.getlinkfast.com/api/mcp \
-H "Authorization: Bearer glf_live_…" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Auditer et planifier
Un agent peut auditer un site, puis étaler des liens sur plusieurs mois à partir du rapport. Quatre étapes, avec les outils du serveur MCP.
run_auditlance l'audit complet d'un domaine : contrôles techniques, visibilité dans ChatGPT et sites où un lien aiderait. Comptez quelques minutes. Rien n'est débité, et le rapport est débloqué avec le quota d'audits de l'organisation quand elle en a un. Limite : 10 audits par clé et par 24 heures ; le même domaine redemandé dans l'heure rend l'audit existant.get_auditrend l'état et l'étape en cours, puis le rapport danssummaryquand le statut passe àready. Rappelez-le toutes les 30 à 60 secondes.list_auditsliste les audits de l'organisation, du plus récent au plus ancien.plan_linksprépare un calendrier à partir d'un audit prêt : un budget mensuel en euros hors TVA (au moins 100 €), de 2 à 12 mois, et en option une date de départ et les pages visées. Comme pour l'achat, deux temps. Sans jeton, rien n'est enregistré : l'agent reçoit le calendrier (liens, dates d'envoi, total) et unconfirmation_tokenvalable 10 minutes. Après votre accord, il rappelle l'outil avec les mêmes champs et le jeton, et le plan est enregistré.get_plansuit chaque lien : page visée, ancre, prix et état (programmé, commandé, publié, annulé ou échoué, avec la cause d'un échec commeinsufficient_credits).cancel_planned_linkannule un lien planifié par l'API, ou tous ceux d'un domaine pas encore commandés. Les liens programmés par notre équipe restent en place :team_plannedpour un lien,skipped_team_plannedpour leur nombre.
Rien n'est débité à l'enregistrement du plan. Chaque lien est débité en crédits le jour de son envoi, au prix relu ce jour-là, lors du passage quotidien du matin (vers 06:20 UTC). Si le solde manque ce jour-là, le lien n'est pas commandé et apparaît en échec dans get_plan. Un lien déjà commandé ne s'annule plus.
Droits : run_audit et cancel_planned_link demandent le droit cart, plan_links le droit purchase, et get_audit, list_audits et get_plan le droit read. Les plafonds de dépense de la clé s'appliquent aux liens planifiés.
Dans le tableau de bord, la page Délégation affiche ces liens dans le bloc « Liens programmés ». Le propriétaire de l'organisation peut y retirer les liens planifiés par l'API. Ceux que notre équipe a planifiés se lisent seulement.
Référence
Chaque route avec son droit et l'outil MCP qui lui correspond. Paramètres, schémas de réponse et erreurs route par route : la description OpenAPI 3.1.
| Route | Droit | Outil MCP | Rôle |
|---|---|---|---|
GET /sites | read | search_sites | Chercher dans le catalogue : métriques, prix, catégorie, langue, produit ; tri et pagination. |
GET /sites/{id} | read | get_site | Un site : métriques, prix et règles de publication. |
GET /sites/{id}/pages | read | list_site_pages | Les pages d'un site ouvertes à l'insertion de lien, avec leur prix et leur trafic Google. |
GET /categories | read | list_categories | Les catégories et leurs id, pour le filtre category. |
GET /account | read | get_account | Organisation, solde de crédits, droits et plafonds de la clé, dépense sur 24 heures. |
GET /credits/transactions | read | aucun | Historique des crédits. |
GET /orders | read | list_orders | Vos commandes, filtrables par statut et par date. |
GET /orders/{id} | read | get_order | Une commande et ses lignes, avec leur statut. |
GET /cart/items | cart | get_cart | Le panier : lignes, prix à jour et problèmes bloquants. |
POST /cart/items | cart | add_to_cart | Ajouter un article invité ou une insertion de lien. |
PATCH /cart/items/{id} | cart | update_cart_item | Compléter ou modifier le brief d'une ligne. |
DELETE /cart/items/{id} | cart | remove_cart_item | Retirer une ligne. |
GET /audits/{id} | read | get_audit | Lire un audit : état, étape en cours, puis le rapport. |
POST /audits/{id}/pages | cart | add_audit_page | Ajouter une page à pousser à un audit prêt (8 au plus). L'analyse tourne 1 à 4 minutes : suivez-la avec get_audit. Rien n'est débité. |
POST /checkout | purchase | checkout | Commander le panier en crédits. |
POST /packs/quote | read | quote_pack | Chiffrer un pack SEO/GEO, sans débit. |
POST /packs/orders | purchase | order_pack | Commander un pack SEO/GEO en crédits. |
| Serveur MCP seulement | cart | run_audit | Lancer l'audit complet d'un domaine. Rien n'est débité. |
| Serveur MCP seulement | read | list_audits | Lister les audits de l'organisation, du plus récent au plus ancien. |
| Serveur MCP seulement | purchase | plan_links | Planifier des liens sur 2 à 12 mois à partir d'un audit, en deux temps. Rien n'est débité à l'enregistrement. |
| Serveur MCP seulement | read | get_plan | Lire les liens planifiés d'un domaine : date d'envoi et état de chacun. |
| Serveur MCP seulement | cart | cancel_planned_link | Annuler un lien planifié, ou tous ceux d'un domaine pas encore commandés. |
Une question sur l'API ? Écrivez-nous, une personne de l'équipe vous répond.
