Documentație pentru dezvoltatori
API și server MCP GetLinkFast
Caută site-uri, completează coșul și comandă cu credite fără să deschizi panoul: dintr-un script, dintr-un scenariu Make sau n8n ori dintr-un agent AI precum Claude sau Cursor. API-ul și serverul MCP folosesc aceeași cheie și returnează același JSON.
La ce folosește
- Agenții și echipe SEO: conectează instrumentele interne și panourile de raportare la contul tău. Catalogul, coșul, comenzile și stările se citesc în JSON.
- Agenți AI: cere-i lui Claude Code sau Cursor „găsește-mi 5 site-uri de finanțe cu DR 40+ și comandă”. Agentul caută, îți arată rezumatul și comandă doar după acordul tău.
- Make, n8n, Zapier: un modul HTTP și o cheie sunt suficiente.
API-ul vinde articolul invitat (guest_post), inserarea de link (link_insertion) și pachetele SEO/GEO, numai cu credite. Cumpărarea de credite și celelalte oferte rămân în panou.
Creează o cheie
- Deschide Panou → Acces API.
- Denumește cheia (de exemplu „Agent Claude” sau „Raportare Make”) și alege-i permisiunile. Pe o cheie care poate comanda, poți fixa un plafon pe comandă și un plafon pe 24 de ore.
- Copiază cheia. Începe cu
glf_live_și se afișează o singură dată: păstrăm doar o amprentă a ei. - Trimite-o în antetul fiecărei cereri:
Authorization: Bearer glf_live_…
Cel mult 10 chei active pe organizație. O cheie revocată nu mai funcționează imediat, la fel ca cheile unui membru care părăsește organizația. Ține cheia în afara depozitelor de cod: cine o deține acționează în numele organizației tale.
Permisiunile unei chei
Fiecare cheie are una sau mai multe permisiuni. O cerere fără permisiunea necesară primește 403 insufficient_scope, iar un agent AI vede doar instrumentele permise.
| Permisiune | Oferă acces la | Cine o poate acorda |
|---|---|---|
read | Catalog, categorii, cont și sold, istoricul creditelor, comenzi, oferte de preț pentru pachete. | Inclusă mereu. |
cart | Adăugarea, modificarea și eliminarea liniilor din coș. | Orice membru al organizației. |
purchase | Comandarea coșului sau a unui pachet, cu credite. Include coșul. | Doar proprietarul organizației. |
Pornire rapidă
Toate rutele încep cu https://www.getlinkfast.com/api/v1. Păstrează www: adresa fără www redirecționează, iar un client HTTP nu mai trimite antetul Authorization după o redirecționare.
Sumele sunt în euro fără TVA. Răspunsurile sunt în JSON, câmpurile în 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"}'Înlocuiește site_id cu id-ul unui site de la pasul 2. Nu trimite niciodată un preț: serverul îl calculează.
curl -X POST https://www.getlinkfast.com/api/v1/checkout \
-H "Authorization: Bearer glf_live_…" \
-H "Idempotency-Key: order-2026-10-14-001"Răspunsul conține id-ul comenzii, suma debitată și soldul rămas. Apoi urmărește progresul cu GET /orders/{id}.
Comandarea cu credite
API-ul comandă numai cu credite și nu declanșează niciodată o plată cu cardul. Creditele se reîncarcă din panou.
O comandă preia liniile guest_post și link_insertion din coș. Celelalte linii, adăugate din panou, rămân în coș și sunt listate în skipped_items.
Niciun plafon implicit: soldul tău este singura limită. Pe o cheie care poate comanda, fixează un plafon pe comandă și un plafon pe 24 de ore glisante. O comandă care le depășește este refuzată (403 spending_limit_exceeded, cu restul disponibil), fără debitare.
Sold insuficient: 402 insufficient_credits, cu suma lipsă și linkul paginii Credite, de transmis unei persoane din echipa ta. Nu se debitează nimic.
Apoi totul decurge ca din panou: email de confirmare și urmărire în ecranul Comenzi, unde comanda poartă numele cheii care a plasat-o.
Antetul Idempotency-Key
- Obligatoriu pe
POST /checkoutșiPOST /packs/orders: între 8 și 128 caractere ASCII imprimabile, fără spații. Fără el:400 idempotency_key_required. - O valoare înseamnă o intenție de cumpărare. Retrimiterea aceleiași valori returnează comanda inițială (
200,"replayed": true) fără a doua debitare, chiar dacă între timp coșul s-a schimbat. - După un timeout sau o întrerupere a rețelei, reîncearcă cu aceeași valoare: nu vei plăti de două ori.
- Pentru o cumpărare nouă, generează o valoare nouă, de exemplu un UUID.
- Atât pe
POST /checkout, cât și pePOST /packs/orders, o valoare deja folosită pentru altă cumpărare este refuzată:409 idempotency_conflict, fără debitare. Pentru un pachet, aceeași valoare trimisă cu alt conținut este și ea refuzată. - Pe partea MCP, tokenul de confirmare joacă acest rol: nu ai nimic de generat.
Limite
- 120 cereri pe minut și pe cheie pentru citire și tot atâtea, separat, pentru coș: una nu o consumă pe cealaltă.
- 10 apeluri pe minut și pe cheie către rutele sau instrumentele de cumpărare — inclusiv reluările, refuzurile și pasul de rezumat MCP.
- 300 cereri HTTP pe minut și pe cheie pe serverul MCP. Fiecare instrument apelat se socotește în plus în limita permisiunii sale.
- Peste acestea:
429 rate_limited. Așteptarea, în secunde, e dată de antetulRetry-Afterîn HTTP și dedetails.retry_after_secondsîn rezultatul unui instrument MCP. - Cel mult 100 rezultate pe pagină (
page_size). - Corpul cererii: cel mult 1 MB.
Coduri de eroare
Orice eroare are aceeași formă. Testează code: este stabil. message este în engleză și se adresează dezvoltatorului; details indică câmpul greșit sau sumele.
{
"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"
}
}
}| Cod | HTTP | Ce înseamnă |
|---|---|---|
invalid_json | 400 | Corpul cererii nu este un JSON lizibil. Verifică sintaxa și antetul Content-Type: application/json. |
idempotency_key_required | 400 | Antetul Idempotency-Key lipsește sau este greșit pe o rută de cumpărare. Trimite o valoare de 8 până la 128 caractere. |
invalid_api_key | 401 | Cheie lipsă, greșită, necunoscută sau revocată ori creată de un membru care a părăsit organizația. Verifică antetul Authorization: Bearer glf_live_…. |
insufficient_credits | 402 | Sold insuficient. details.missing_amount dă suma lipsă, details.credits_url pagina de reîncărcare. Nu s-a debitat nimic. |
insufficient_scope | 403 | Cheia nu are permisiunea cerută de această rută sau de acest instrument. Creează o cheie cu această permisiune. |
spending_limit_exceeded | 403 | Comanda depășește un plafon al cheii: pe comandă (window: order) sau pe 24 de ore (window: 24h). details.remaining dă restul. Nu s-a debitat nimic. |
not_found | 404 | Resursă negăsită sau care nu aparține organizației tale. |
method_not_allowed | 405 | Server MCP: GET și DELETE nu sunt acceptate. Trimite fiecare mesaj JSON-RPC prin POST. |
organization_financial_hold | 409 | Cumpărările sunt blocate pentru organizația ta. Contactează-ne. Nu s-a debitat nimic. |
page_already_sold | 409 | O pagină din coș (inserare de link) tocmai a fost vândută. Elimină linia, apoi comandă din nou cu o nouă Idempotency-Key. |
cart_already_ordered | 409 | O linie din coș a fost deja comandată printr-o altă cumpărare (panou sau altă Idempotency-Key). Recitește coșul înainte de a comanda cu o valoare nouă. |
idempotency_conflict | 409 | Această Idempotency-Key a fost deja folosită pentru altă cumpărare. Folosește o valoare nouă pentru o cumpărare nouă. |
not_ready | 409 | Auditul nu este încă gata. Așteptați starea ready cu get_audit, apoi adăugați pagina. |
full_pass_running | 409 | Raportul complet al auditului este încă în pregătire. Reîncercați peste câteva minute. Nu s-a pornit nimic. |
limit_reached | 409 | Auditul are deja 8 pagini adăugate de dvs., inclusiv analizele în curs. Nu s-a pornit nimic. |
already_present | 409 | Această pagină este deja în audit sau analiza ei este în curs. Nu s-a pornit nimic. |
already_ordered | 409 | Acest link planificat este deja comandat și nu mai poate fi anulat aici. |
not_cancellable | 409 | Acest link nu poate fi anulat acum. Recitește-l cu get_plan. |
team_planned | 409 | Acest link a fost programat de echipa noastră, nu prin API: nu poate fi anulat aici. Pentru a-l modifica, proprietarul contului contactează asistența. |
payload_too_large | 413 | Corpul cererii depășește 1 MB. |
invalid_parameter | 422 | Parametru de interogare invalid, repetat sau necunoscut. details.fields numește fiecare parametru greșit și motivul. |
invalid_arguments | 422 | Combinație de argumente nevalidă, de exemplu nici domain, nici audit_id, sau ambele. details.field numește câmpul. Nu s-a făcut nimic. |
invalid_domain | 422 | Domeniu sau URL ilizibil. Trimite un nume de domeniu, de exemplu example.com. |
own_network_domain | 422 | Acest domeniu face parte din rețeaua noastră de publicare: nu poate fi auditat. Nu a fost pornit nimic. |
invalid_body | 422 | Câmp invalid sau necunoscut în corp. details.fields numește fiecare câmp greșit și motivul. |
product_not_available_via_api | 422 | API-ul vinde articolul invitat și inserarea de link. Celelalte produse se comandă din panou. |
image_not_uploaded | 422 | Imaginea reprezentativă trebuie să fi fost încărcată pe GetLinkFast din panou. |
cart_empty | 422 | Nicio linie din coș nu se poate comanda prin API. Nu s-a debitat nimic. |
cart_invalid | 422 | Unele linii sunt incomplete sau nu mai sunt disponibile. details.items listează fiecare linie și problemele ei. Nu s-a debitat nimic. |
invalid_pack_input | 422 | Pachetul nu respectă regulile sale (details.reason). Nu s-a debitat nimic. |
site_unavailable | 422 | Acest site nu există sau nu mai este de vânzare. |
target_page_required | 422 | O inserare de link necesită page_id: ia-l din lista de pagini a site-ului. |
target_page_not_found | 422 | Această pagină nu aparține acestui site. |
target_page_sold | 422 | Această pagină a fost deja vândută. |
target_page_withdrawn | 422 | Această pagină nu mai este oferită. |
target_page_already_in_cart | 422 | Această pagină este deja în coșul tău. |
product_unavailable | 422 | Acest site nu vinde acest produs. |
invalid_url | 422 | Adresă ilizibilă. Trimiteți o adresă http(s) completă, fără date de autentificare și fără port. |
other_site | 422 | Această pagină nu este pe domeniul auditat. Trimiteți o pagină de pe același site. |
invalid_keyword | 422 | Căutarea vizată este prea lungă: cel mult 120 de caractere. |
rate_limited | 429 | Prea multe cereri pentru această cheie. Așteaptă numărul de secunde indicat de antetul Retry-After în HTTP sau de details.retry_after_seconds în rezultatul unui instrument MCP. |
audit_quota_exceeded | 429 | Această cheie a pornit deja 10 audituri în ultimele 24 de ore. Nu s-a pornit nimic: reîncearcă mai târziu. |
internal_error | 500 | Eroare de partea noastră, deja semnalată echipei. Reîncearcă mai târziu: o cumpărare reluată cu aceeași Idempotency-Key nu este niciodată debitată de două ori. |
engine_unavailable | 502 | Motorul de audit este momentan inaccesibil. Nu s-a pornit nimic: reîncearcă mai târziu. |
packs_unavailable | 503 | Pachetele SEO/GEO nu sunt încă disponibile. |
confirmation_expired | Instrument MCP | Token de confirmare expirat sau coș, prețuri ori cheie modificate de la rezumat. Nu s-a debitat nimic: apelează din nou instrumentul fără token pentru a obține un rezumat nou. |
purchase_unavailable | Instrument MCP | Cumpărările prin serverul MCP sunt momentan indisponibile. Nu s-a debitat nimic. Reîncearcă mai târziu. |
unknown_tool | Instrument MCP | Instrument necunoscut sau nepermis de permisiunile cheii. tools/list dă instrumentele disponibile. |
audit_failed | Instrument MCP | Acest audit a eșuat, deci nu e posibil niciun plan. Pornește unul nou cu run_audit. Nu s-a făcut nimic. |
audit_not_ready | Instrument MCP | Acest audit nu s-a terminat. Așteaptă starea ready cu get_audit, apoi apelează din nou plan_links. Nu s-a făcut nimic. |
budget_too_low | Instrument MCP | Bugetul lunar este sub minimul de 100 € pe lună. Nu s-a făcut nimic. |
start_date_too_far | Instrument MCP | Data de start este prea îndepărtată. Mesajul indică ultima dată permisă. Nu s-a făcut nimic. |
too_many_pages | Instrument MCP | Un proiect urmărește un număr limitat de pagini. Trimite mai puține pagini noi în target_urls. Nu s-a făcut nimic. |
plan_exists | Instrument MCP | Acest domeniu are deja linkuri planificate, încă necomandate. Planurile nu se îmbină: retrage-le cu cancel_planned_link și reia. Nu s-a făcut nimic. |
pending_proposals | Instrument MCP | Echipa noastră analizează linkuri propuse pentru acest domeniu, așa că deocamdată nu se poate adăuga niciun plan. details.count indică numărul lor, iar details.retry_after data după care puteți încerca din nou (dacă nu sunt programate până atunci, expiră). Altfel, cereți proprietarului contului să contacteze asistența. Nu s-a făcut nimic. |
no_links_found | Instrument MCP | Niciun site din catalog nu se potrivește acestor pagini cu acest buget lunar. Încearcă alte pagini sau un buget mai mare. Nu s-a făcut nimic. |
plan_in_progress | Instrument MCP | Acest plan se salvează chiar acum. Apelează din nou plan_links cu același token peste câteva secunde, ca să citești rezultatul. |
plan_outcome_unknown | Instrument MCP | Salvarea a fost întreruptă și rezultatul ei este necunoscut. Nu confirma din nou: citește planul cu get_plan. |
plan_conflict | Instrument MCP | Planul nu mai este valabil așa cum este: proiectul domeniului s-a schimbat, datele sale nu mai cad în lunile bugetului (care încep la confirmare) sau unul dintre site-urile sale nu mai este disponibil pentru acest domeniu. details.reason spune care. Nu s-a scris nimic: apelați din nou plan_links fără token pentru un rezumat nou. |
plan_retry | Instrument MCP | Un alt apel cu acest token s-a încheiat fără să salveze planul. Apelează din nou plan_links cu același token ca să citești rezultatul. |
Server MCP
Serverul MCP îi oferă agentului tău AI aceleași funcții ca API-ul, cu aceeași cheie. Adresa lui: https://www.getlinkfast.com/api/mcp.
Claude Code
O comandă în terminal:
claude mcp add --transport http getlinkfast https://www.getlinkfast.com/api/mcp --header "Authorization: Bearer glf_live_…"Cursor
În ~/.cursor/mcp.json. Evită fișierul .cursor/mcp.json al unui proiect: ajunge adesea în depozit, împreună cu cheia.
{
"mcpServers": {
"getlinkfast": {
"url": "https://www.getlinkfast.com/api/mcp",
"headers": {
"Authorization": "Bearer glf_live_…"
}
}
}
}Claude Desktop
Claude Desktop nu trimite antete personalizate unui server la distanță, deci nu îți poate transmite cheia. Se va conecta nativ prin conexiunea OAuth, prevăzută într-o versiune viitoare. Astăzi, folosește Claude Code sau Cursor: ele trimit cheia în antetul Authorization.
Instrumentele
Agentul vede doar instrumentele permise de permisiunile cheii: o cheie fără dreptul de a comanda nu are niciun instrument de cumpărare.
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
Cumpărarea în doi pași
- Agentul apelează
checkoutsauorder_packfărăconfirmation_token: nu se debitează nimic. Primește rezumatul (linii, total, sold după debitare, plafon rămas) și unconfirmation_token. - Îți arată acest rezumat. Dacă accepți, apelează din nou instrumentul cu
confirmation_token: comanda este plasată și debitată. - Tokenul este valabil 10 minute. Dacă între timp se schimbă coșul, un preț sau cheia, este refuzat (
confirmation_expired) și agentul reia pasul 1. Un nou apel cu același token după o întrerupere returnează aceeași comandă, fără a doua debitare.
Client scris de mână
Serverul este fără sesiune: fiecare mesaj JSON-RPC pleacă prin POST, iar răspunsul vine în JSON. Trimite Accept: application/json, text/event-stream și Content-Type: application/json, altfel serverul răspunde 406. GET și DELETE răspund 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"}'Audit și planificare
Un agent poate audita un site și apoi poate eșalona linkuri pe mai multe luni, pornind de la raport. Patru pași, cu instrumentele serverului MCP.
run_auditpornește auditul complet al unui domeniu: verificări tehnice, vizibilitate în ChatGPT și site-uri unde un link ar ajuta. Durează câteva minute. Nu se debitează nimic, iar raportul se deblochează cu cota de audituri a organizației, dacă are una. Limită: 10 audituri pe cheie la fiecare 24 de ore; dacă ceri același domeniu din nou în decurs de o oră, primești auditul existent.get_auditreturnează starea și etapa curentă, apoi raportul însummarycând starea devineready. Apelează-l la fiecare 30–60 de secunde.list_auditslistează auditurile organizației, de la cel mai recent.plan_linksconstruiește un calendar dintr-un audit gata: un buget lunar în euro fără TVA (cel puțin 100 €), de la 2 la 12 luni și, opțional, o dată de start și paginile vizate. Ca la o achiziție, sunt doi pași. Fără token nu se salvează nimic: agentul primește calendarul (linkuri, date de trimitere, total) și unconfirmation_tokenvalabil 10 minute. După acordul tău, reapelează instrumentul cu aceleași câmpuri și cu tokenul, iar planul se salvează.get_planurmărește fiecare link: pagina țintă, ancora, prețul și starea (programat, comandat, publicat, anulat sau eșuat, cu cauza eșecului, de exempluinsufficient_credits).cancel_planned_linkanulează un link planificat prin API sau toate linkurile unui domeniu încă necomandate. Linkurile programate de echipa noastră rămân pe loc:team_plannedpentru un link,skipped_team_plannedpentru numărul lor.
La salvarea planului nu se debitează nimic. Fiecare link se debitează în credite în ziua trimiterii, la prețul recitit în acea zi, la trecerea zilnică de dimineață (în jur de 06:20 UTC). Dacă soldul lipsește în acea zi, linkul nu se comandă și apare ca eșuat în get_plan. Un link deja comandat nu mai poate fi anulat.
Drepturi: run_audit și cancel_planned_link cer cart, plan_links cere purchase, iar get_audit, list_audits și get_plan cer read. Plafoanele de cheltuieli ale cheii se aplică și linkurilor planificate.
În panou, pagina Delegare arată aceste linkuri în blocul „Linkuri programate”. Proprietarul organizației poate retrage acolo linkurile planificate prin API. Cele planificate de echipa noastră sunt doar pentru citire.
Referință
Fiecare rută cu permisiunea sa și instrumentul MCP corespunzător. Parametri, scheme de răspuns și erori, rută cu rută: descrierea OpenAPI 3.1.
| Rută | Permisiune | Instrument MCP | Rol |
|---|---|---|---|
GET /sites | read | search_sites | Căutare în catalog: metrici, preț, categorie, limbă, produs; sortare și paginare. |
GET /sites/{id} | read | get_site | Un site: metrici, prețuri și reguli de publicare. |
GET /sites/{id}/pages | read | list_site_pages | Paginile unui site deschise inserării de link, cu prețul și traficul lor Google. |
GET /categories | read | list_categories | Categoriile și id-urile lor, pentru filtrul category. |
GET /account | read | get_account | Organizație, sold de credite, permisiunile și plafoanele cheii, cheltuieli pe 24 de ore. |
GET /credits/transactions | read | niciunul | Istoricul creditelor. |
GET /orders | read | list_orders | Comenzile tale, filtrabile după stare și dată. |
GET /orders/{id} | read | get_order | O comandă și liniile ei, cu starea lor. |
GET /cart/items | cart | get_cart | Coșul: linii, prețuri actualizate și probleme care blochează. |
POST /cart/items | cart | add_to_cart | Adăugarea unui articol invitat sau a unei inserări de link. |
PATCH /cart/items/{id} | cart | update_cart_item | Completarea sau modificarea briefului unei linii. |
DELETE /cart/items/{id} | cart | remove_cart_item | Eliminarea unei linii. |
GET /audits/{id} | read | get_audit | Citește un audit: stare, etapa curentă, apoi raportul. |
POST /audits/{id}/pages | cart | add_audit_page | Adaugă o pagină de împins la un audit gata (cel mult 8). Analiza durează între 1 și 4 minute: urmăriți-o cu get_audit. Nu se debitează nimic. |
POST /checkout | purchase | checkout | Comandarea coșului cu credite. |
POST /packs/quote | read | quote_pack | Estimarea prețului unui pachet SEO/GEO, fără debitare. |
POST /packs/orders | purchase | order_pack | Comandarea unui pachet SEO/GEO cu credite. |
| Doar server MCP | cart | run_audit | Pornește auditul complet al unui domeniu. Nu se debitează nimic. |
| Doar server MCP | read | list_audits | Listează auditurile organizației, de la cel mai recent. |
| Doar server MCP | purchase | plan_links | Planifică linkuri pe 2–12 luni dintr-un audit, în doi pași. La salvare nu se debitează nimic. |
| Doar server MCP | read | get_plan | Citește linkurile planificate ale unui domeniu: data de trimitere și starea fiecăruia. |
| Doar server MCP | cart | cancel_planned_link | Anulează un link planificat sau toate cele ale unui domeniu care nu au fost încă comandate. |
O întrebare despre API? Scrie-ne, o persoană din echipă îți răspunde.
