Documentazione per sviluppatori
API e server MCP di GetLinkFast
Cerca siti, riempi il carrello e ordina con crediti senza aprire la dashboard: da uno script, da uno scenario Make o n8n, o da un agente IA come Claude o Cursor. L'API e il server MCP usano la stessa chiave e restituiscono lo stesso JSON.
A cosa serve
- Agenzie e team SEO: collega i tuoi strumenti interni e le tue dashboard di monitoraggio al tuo account. Catalogo, carrello, ordini e stati si leggono in JSON.
- Agenti IA: chiedi a Claude Code o Cursor «trovami 5 siti di finanza con DR 40+ e ordina». L'agente cerca, ti mostra il riepilogo e ordina solo dopo il tuo consenso.
- Make, n8n, Zapier: bastano un modulo HTTP e una chiave.
L'API vende l'articolo ospite (guest_post), l'inserimento di link (link_insertion) e i pacchetti SEO/GEO, solo in crediti. L'acquisto di crediti e le altre offerte restano nella dashboard.
Creare una chiave
- Apri Dashboard → Accesso API.
- Dai un nome alla chiave (ad esempio «Agente Claude» o «Report Make») e scegli i suoi permessi. Su una chiave che può ordinare, puoi fissare un tetto per ordine e un tetto sulle 24 ore.
- Copia la chiave. Inizia con
glf_live_e viene mostrata una sola volta: ne conserviamo solo un'impronta. - Inviala nell'intestazione di ogni richiesta:
Authorization: Bearer glf_live_…
Al massimo 10 chiavi attive per organizzazione. Una chiave revocata smette subito di funzionare, così come le chiavi di un membro che lascia l'organizzazione. Tieni la chiave fuori dai tuoi repository di codice: chi la possiede agisce a nome della tua organizzazione.
I permessi di una chiave
Ogni chiave porta uno o più permessi. Una richiesta senza il permesso necessario riceve 403 insufficient_scope, e un agente IA vede solo gli strumenti consentiti.
| Permesso | Dà accesso a | Chi può concederlo |
|---|---|---|
read | Catalogo, categorie, account e saldo, storico dei crediti, ordini, preventivi dei pacchetti. | Sempre incluso. |
cart | Aggiungere, modificare e rimuovere righe del carrello. | Qualsiasi membro dell'organizzazione. |
purchase | Ordinare il carrello o un pacchetto, in crediti. Include il carrello. | Solo il proprietario dell'organizzazione. |
Avvio rapido
Tutte le rotte iniziano con https://www.getlinkfast.com/api/v1. Mantieni il www: l'indirizzo senza www reindirizza, e un client HTTP non invia più l'intestazione Authorization dopo un reindirizzamento.
Gli importi sono in euro IVA esclusa. Le risposte sono in JSON, i campi in 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"}'Sostituisci site_id con l'id di un sito del passo 2. Non inviare mai un prezzo: lo calcola il server.
curl -X POST https://www.getlinkfast.com/api/v1/checkout \
-H "Authorization: Bearer glf_live_…" \
-H "Idempotency-Key: order-2026-10-14-001"La risposta indica l'id dell'ordine, l'importo addebitato e il saldo residuo. Poi seguine l'avanzamento con GET /orders/{id}.
Ordinare in crediti
L'API ordina solo in crediti e non avvia mai un pagamento con carta. I crediti si ricaricano nella dashboard.
Un ordine prende le righe guest_post e link_insertion del carrello. Le altre righe, aggiunte dalla dashboard, restano nel carrello e sono elencate in skipped_items.
Nessun tetto predefinito: il tuo saldo è l'unico limite. Su una chiave che può ordinare, fissa un tetto per ordine e un tetto sulle 24 ore mobili. Un ordine che li supera viene rifiutato (403 spending_limit_exceeded, con il residuo disponibile), senza addebito.
Saldo insufficiente: 402 insufficient_credits, con l'importo mancante e il link alla pagina Crediti, da inoltrare a una persona del tuo team. Nulla viene addebitato.
Poi tutto funziona come dalla dashboard: email di conferma e monitoraggio nella schermata Ordini, dove l'ordine porta il nome della chiave che lo ha effettuato.
L'intestazione Idempotency-Key
- Obbligatoria su
POST /checkoutePOST /packs/orders: da 8 a 128 caratteri ASCII stampabili, senza spazi. Senza:400 idempotency_key_required. - Un valore equivale a un'intenzione d'acquisto. Reinviare lo stesso valore restituisce l'ordine originale (
200,"replayed": true) senza secondo addebito, anche se nel frattempo il carrello è cambiato. - Dopo un timeout o un'interruzione di rete, riprova con lo stesso valore: non pagherai due volte.
- Per un nuovo acquisto, genera un nuovo valore, ad esempio un UUID.
- Su
POST /checkoutcome suPOST /packs/orders, un valore già usato per un altro acquisto viene rifiutato:409 idempotency_conflict, senza addebito. Per un pacchetto, viene rifiutato anche lo stesso valore inviato con un contenuto diverso. - Lato MCP, il token di conferma svolge questo ruolo: non devi generare nulla.
Limiti
- 120 richieste al minuto per chiave per la lettura, e altrettante, separatamente, per il carrello: l'una non intacca l'altra.
- 10 chiamate al minuto per chiave verso le rotte o gli strumenti d'acquisto — ripetizioni, rifiuti e passo di riepilogo MCP compresi.
- 300 richieste HTTP al minuto per chiave sul server MCP. Ogni strumento chiamato conta in più nel limite del suo permesso.
- Oltre:
429 rate_limited. L'attesa, in secondi, è indicata dall'intestazioneRetry-Afterin HTTP, e dadetails.retry_after_secondsnel risultato di uno strumento MCP. - Al massimo 100 risultati per pagina (
page_size). - Corpo della richiesta: al massimo 1 MB.
Codici di errore
Ogni errore ha la stessa forma. Verifica code: è stabile. message è in inglese e si rivolge allo sviluppatore; details indica il campo errato o gli importi.
{
"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"
}
}
}| Codice | HTTP | Cosa significa |
|---|---|---|
invalid_json | 400 | Il corpo della richiesta non è un JSON leggibile. Verifica la sintassi e l'intestazione Content-Type: application/json. |
idempotency_key_required | 400 | Intestazione Idempotency-Key assente o malformata su una rotta d'acquisto. Invia un valore da 8 a 128 caratteri. |
invalid_api_key | 401 | Chiave assente, malformata, sconosciuta o revocata, oppure creata da un membro che ha lasciato l'organizzazione. Verifica l'intestazione Authorization: Bearer glf_live_…. |
insufficient_credits | 402 | Saldo insufficiente. details.missing_amount indica l'importo mancante, details.credits_url la pagina per ricaricare. Nulla è stato addebitato. |
insufficient_scope | 403 | La chiave non ha il permesso richiesto da questa rotta o da questo strumento. Crea una chiave con quel permesso. |
spending_limit_exceeded | 403 | L'ordine supera un tetto della chiave: per ordine (window: order) o sulle 24 ore (window: 24h). details.remaining indica il residuo. Nulla è stato addebitato. |
not_found | 404 | Risorsa non trovata, o che non appartiene alla tua organizzazione. |
method_not_allowed | 405 | Server MCP: GET e DELETE non sono accettati. Invia ogni messaggio JSON-RPC in POST. |
organization_financial_hold | 409 | Gli acquisti sono bloccati sulla tua organizzazione. Contattaci. Nulla è stato addebitato. |
page_already_sold | 409 | Una pagina del carrello (inserimento di link) è appena stata venduta. Rimuovi la riga, poi riordina con una nuova Idempotency-Key. |
cart_already_ordered | 409 | Una riga del carrello è già stata ordinata da un altro acquisto (dashboard o altra Idempotency-Key). Rileggi il carrello prima di riordinare con un nuovo valore. |
idempotency_conflict | 409 | Questa Idempotency-Key è già stata usata per un altro acquisto. Usa un nuovo valore per un nuovo acquisto. |
not_ready | 409 | L'audit non è ancora pronto. Attendi lo stato ready con get_audit, poi aggiungi la pagina. |
full_pass_running | 409 | Il rapporto completo dell'audit è ancora in preparazione. Riprova tra qualche minuto. Non è stato avviato nulla. |
limit_reached | 409 | L'audit ha già 8 pagine aggiunte da te, comprese le analisi in corso. Non è stato avviato nulla. |
already_present | 409 | Questa pagina è già nell'audit oppure la sua analisi è in corso. Non è stato avviato nulla. |
already_ordered | 409 | Questo link pianificato è già ordinato: qui non si può più annullare. |
not_cancellable | 409 | Questo link non si può annullare al momento. Rileggilo con get_plan. |
team_planned | 409 | Questo link è stato programmato dal nostro team, non tramite l'API: non si annulla da qui. Per modificarlo, il titolare dell'account contatta l'assistenza. |
payload_too_large | 413 | Corpo della richiesta oltre 1 MB. |
invalid_parameter | 422 | Parametro di query non valido, ripetuto o sconosciuto. details.fields indica ogni parametro errato e il motivo. |
invalid_arguments | 422 | Combinazione di argomenti non valida, per esempio né domain né audit_id, oppure entrambi. details.field indica il campo. Non è stato fatto nulla. |
invalid_domain | 422 | Dominio o URL illeggibile. Invia un nome di dominio, per esempio example.com. |
own_network_domain | 422 | Questo dominio fa parte della nostra rete di pubblicazione: non può essere analizzato. Non è stato avviato nulla. |
invalid_body | 422 | Campo non valido o sconosciuto nel corpo. details.fields indica ogni campo errato e il motivo. |
product_not_available_via_api | 422 | L'API vende l'articolo ospite e l'inserimento di link. Gli altri prodotti si ordinano dalla dashboard. |
image_not_uploaded | 422 | L'immagine in evidenza deve essere stata caricata su GetLinkFast dalla dashboard. |
cart_empty | 422 | Nessuna riga del carrello si può ordinare tramite l'API. Nulla è stato addebitato. |
cart_invalid | 422 | Alcune righe sono incomplete o non più disponibili. details.items elenca ogni riga e i suoi problemi. Nulla è stato addebitato. |
invalid_pack_input | 422 | Il pacchetto non rispetta le sue regole (details.reason). Nulla è stato addebitato. |
site_unavailable | 422 | Questo sito non esiste o non è più in vendita. |
target_page_required | 422 | Un inserimento di link richiede page_id: prendilo dall'elenco delle pagine del sito. |
target_page_not_found | 422 | Questa pagina non appartiene a questo sito. |
target_page_sold | 422 | Questa pagina è già stata venduta. |
target_page_withdrawn | 422 | Questa pagina non è più proposta. |
target_page_already_in_cart | 422 | Questa pagina è già nel tuo carrello. |
product_unavailable | 422 | Questo sito non vende questo prodotto. |
invalid_url | 422 | Indirizzo illeggibile. Invia un indirizzo http(s) completo, senza credenziali né porta. |
other_site | 422 | Questa pagina non è sul dominio analizzato. Invia una pagina dello stesso sito. |
invalid_keyword | 422 | Ricerca obiettivo troppo lunga: 120 caratteri al massimo. |
rate_limited | 429 | Troppe richieste per questa chiave. Attendi il numero di secondi indicato dall'intestazione Retry-After in HTTP, o da details.retry_after_seconds nel risultato di uno strumento MCP. |
audit_quota_exceeded | 429 | Questa chiave ha già avviato 10 audit nelle ultime 24 ore. Non è stato avviato nulla: riprova più tardi. |
internal_error | 500 | Errore da parte nostra, già segnalato al team. Riprova più tardi: un acquisto ripetuto con la stessa Idempotency-Key non viene mai addebitato due volte. |
engine_unavailable | 502 | Il motore di audit è temporaneamente irraggiungibile. Non è stato avviato nulla: riprova più tardi. |
packs_unavailable | 503 | I pacchetti SEO/GEO non sono ancora disponibili. |
confirmation_expired | Strumento MCP | Token di conferma scaduto, oppure carrello, prezzi o chiave modificati dopo il riepilogo. Nulla è stato addebitato: richiama lo strumento senza token per ottenere un nuovo riepilogo. |
purchase_unavailable | Strumento MCP | Gli acquisti tramite il server MCP sono momentaneamente non disponibili. Nulla è stato addebitato. Riprova più tardi. |
unknown_tool | Strumento MCP | Strumento sconosciuto, o non consentito dai permessi della chiave. tools/list indica gli strumenti disponibili. |
audit_failed | Strumento MCP | Questo audit è fallito, quindi nessun piano è possibile. Avviane uno nuovo con run_audit. Non è stato fatto nulla. |
audit_not_ready | Strumento MCP | Questo audit non è terminato. Attendi lo stato ready con get_audit, poi richiama plan_links. Non è stato fatto nulla. |
budget_too_low | Strumento MCP | Il budget mensile è sotto il minimo di 100 € al mese. Non è stato fatto nulla. |
start_date_too_far | Strumento MCP | La data di inizio è troppo lontana. Il messaggio indica l'ultima data consentita. Non è stato fatto nulla. |
too_many_pages | Strumento MCP | Un progetto segue un numero limitato di pagine. Invia meno pagine nuove in target_urls. Non è stato fatto nulla. |
plan_exists | Strumento MCP | Questo dominio ha già link pianificati non ancora ordinati. I piani non si uniscono: rimuovili con cancel_planned_link e ricomincia. Non è stato fatto nulla. |
pending_proposals | Strumento MCP | Il nostro team sta esaminando link proposti per questo dominio, quindi per ora non si può aggiungere alcun piano. details.count ne indica il numero e details.retry_after la data dopo la quale riprovare (se non vengono programmati entro allora, scadono). Altrimenti chiedi al titolare dell'account di contattare l'assistenza. Non è stato fatto nulla. |
no_links_found | Strumento MCP | Nessun sito del catalogo si adatta a queste pagine con questo budget mensile. Prova altre pagine o un budget più alto. Non è stato fatto nulla. |
plan_in_progress | Strumento MCP | Questo piano si sta salvando in questo momento. Richiama plan_links con lo stesso token tra qualche secondo per leggere il risultato. |
plan_outcome_unknown | Strumento MCP | Il salvataggio è stato interrotto e il suo esito è sconosciuto. Non confermare di nuovo: leggi il piano con get_plan. |
plan_conflict | Strumento MCP | Il piano non regge più così com'è: il progetto del dominio è cambiato, le sue date non cadono più nei mesi del budget (che partono dalla conferma) oppure uno dei suoi siti non è più disponibile per questo dominio. details.reason dice quale. Non è stato scritto nulla: richiama plan_links senza token per un nuovo riepilogo. |
plan_retry | Strumento MCP | Un'altra chiamata con questo token è terminata senza salvare il piano. Richiama plan_links con lo stesso token per leggere il risultato. |
Server MCP
Il server MCP dà al tuo agente IA le stesse funzioni dell'API, con la stessa chiave. Il suo indirizzo: https://www.getlinkfast.com/api/mcp.
Claude Code
Un comando nel tuo terminale:
claude mcp add --transport http getlinkfast https://www.getlinkfast.com/api/mcp --header "Authorization: Bearer glf_live_…"Cursor
In ~/.cursor/mcp.json. Evita il file .cursor/mcp.json di un progetto: spesso finisce nel repository, insieme alla chiave.
{
"mcpServers": {
"getlinkfast": {
"url": "https://www.getlinkfast.com/api/mcp",
"headers": {
"Authorization": "Bearer glf_live_…"
}
}
}
}Claude Desktop
Claude Desktop non invia intestazioni personalizzate a un server remoto: non può quindi trasmettere la tua chiave. Si collegherà in modo nativo con la connessione OAuth, prevista in una prossima versione. Oggi usa Claude Code o Cursor: inviano la chiave nell'intestazione Authorization.
Gli strumenti
L'agente vede solo gli strumenti consentiti dai permessi della chiave: una chiave senza il permesso di ordinare non ha alcuno strumento d'acquisto.
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'acquisto in due tempi
- L'agente chiama
checkoutoorder_packsenzaconfirmation_token: nulla viene addebitato. Riceve il riepilogo (righe, totale, saldo dopo l'addebito, tetto residuo) e unconfirmation_token. - Ti mostra questo riepilogo. Se accetti, richiama lo strumento con il
confirmation_token: l'ordine viene effettuato e addebitato. - Il token vale 10 minuti. Se nel frattempo cambiano il carrello, un prezzo o la chiave, viene rifiutato (
confirmation_expired) e l'agente ripete il passo 1. Richiamare con lo stesso token dopo un'interruzione restituisce lo stesso ordine, senza secondo addebito.
Client scritto a mano
Il server è senza sessione: ogni messaggio JSON-RPC parte in POST e la risposta arriva in JSON. Invia Accept: application/json, text/event-stream e Content-Type: application/json, altrimenti il server risponde 406. GET e DELETE rispondono 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"}'Auditare e pianificare
Un agente può fare l'audit di un sito e distribuire link su più mesi a partire dal rapporto. Quattro passaggi, con gli strumenti del server MCP.
run_auditavvia l'audit completo di un dominio: controlli tecnici, visibilità su ChatGPT e siti dove un link aiuterebbe. Servono alcuni minuti. Non viene addebitato nulla, e il rapporto si sblocca con la quota di audit dell'organizzazione, se ne ha una. Limite: 10 audit per chiave ogni 24 ore; chiedendo di nuovo lo stesso dominio entro un'ora si ottiene l'audit esistente.get_auditrestituisce lo stato e il passaggio in corso, poi il rapporto insummaryquando lo stato diventaready. Richiamalo ogni 30-60 secondi.list_auditselenca gli audit dell'organizzazione, dal più recente.plan_linksprepara un calendario da un audit pronto: un budget mensile in euro IVA esclusa (almeno 100 €), da 2 a 12 mesi e, in opzione, una data di inizio e le pagine di destinazione. Come per un acquisto, sono due passaggi. Senza token non si salva nulla: l'agente riceve il calendario (link, date di invio, totale) e unconfirmation_tokenvalido 10 minuti. Dopo il tuo consenso richiama lo strumento con gli stessi campi e il token, e il piano viene salvato.get_plansegue ogni link: pagina di destinazione, ancora, prezzo e stato (programmato, ordinato, pubblicato, annullato o non riuscito, con la causa dell'errore, per esempioinsufficient_credits).cancel_planned_linkannulla un link pianificato tramite l'API, o tutti quelli di un dominio non ancora ordinati. I link programmati dal nostro team restano al loro posto:team_plannedper un link,skipped_team_plannedper il loro numero.
Al salvataggio del piano non viene addebitato nulla. Ogni link viene addebitato in crediti il giorno del suo invio, al prezzo riletto quel giorno, nel passaggio quotidiano del mattino (verso le 06:20 UTC). Se quel giorno il saldo non basta, il link non viene ordinato e compare come non riuscito in get_plan. Un link già ordinato non si può più annullare.
Permessi: run_audit e cancel_planned_link richiedono cart, plan_links richiede purchase, e get_audit, list_audits e get_plan richiedono read. I tetti di spesa della chiave valgono anche per i link pianificati.
Nella dashboard, la pagina Delega mostra questi link nel blocco «Link programmati». Il proprietario dell'organizzazione può rimuovere lì i link pianificati tramite l'API. Quelli pianificati dal nostro team sono in sola lettura.
Riferimento
Ogni rotta con il suo permesso e lo strumento MCP corrispondente. Parametri, schemi di risposta ed errori rotta per rotta: la descrizione OpenAPI 3.1.
| Rotta | Permesso | Strumento MCP | Ruolo |
|---|---|---|---|
GET /sites | read | search_sites | Cercare nel catalogo: metriche, prezzo, categoria, lingua, prodotto; ordinamento e paginazione. |
GET /sites/{id} | read | get_site | Un sito: metriche, prezzi e regole di pubblicazione. |
GET /sites/{id}/pages | read | list_site_pages | Le pagine di un sito aperte all'inserimento di link, con il loro prezzo e il loro traffico Google. |
GET /categories | read | list_categories | Le categorie e i loro id, per il filtro category. |
GET /account | read | get_account | Organizzazione, saldo crediti, permessi e tetti della chiave, spesa sulle 24 ore. |
GET /credits/transactions | read | nessuno | Storico dei crediti. |
GET /orders | read | list_orders | I tuoi ordini, filtrabili per stato e per data. |
GET /orders/{id} | read | get_order | Un ordine e le sue righe, con il loro stato. |
GET /cart/items | cart | get_cart | Il carrello: righe, prezzi aggiornati e problemi bloccanti. |
POST /cart/items | cart | add_to_cart | Aggiungere un articolo ospite o un inserimento di link. |
PATCH /cart/items/{id} | cart | update_cart_item | Completare o modificare il brief di una riga. |
DELETE /cart/items/{id} | cart | remove_cart_item | Rimuovere una riga. |
GET /audits/{id} | read | get_audit | Leggere un audit: stato, passaggio in corso, poi il rapporto. |
POST /audits/{id}/pages | cart | add_audit_page | Aggiunge a un audit pronto una pagina da spingere (8 al massimo). L'analisi dura da 1 a 4 minuti: seguila con get_audit. Non viene addebitato nulla. |
POST /checkout | purchase | checkout | Ordinare il carrello in crediti. |
POST /packs/quote | read | quote_pack | Quotare un pacchetto SEO/GEO, senza addebito. |
POST /packs/orders | purchase | order_pack | Ordinare un pacchetto SEO/GEO in crediti. |
| Solo server MCP | cart | run_audit | Avviare l'audit completo di un dominio. Non viene addebitato nulla. |
| Solo server MCP | read | list_audits | Elencare gli audit dell'organizzazione, dal più recente. |
| Solo server MCP | purchase | plan_links | Pianificare link su 2-12 mesi da un audit, in due passaggi. Al salvataggio non viene addebitato nulla. |
| Solo server MCP | read | get_plan | Leggere i link pianificati di un dominio: data di invio e stato di ciascuno. |
| Solo server MCP | cart | cancel_planned_link | Annullare un link pianificato, o tutti quelli di un dominio non ancora ordinati. |
Una domanda sull'API? Scrivici, una persona del team ti risponde.
