GetLinkFastGetLinkFast

Developer documentation

GetLinkFast API and MCP server

Search sites, fill your cart and order with credits without opening the dashboard: from a script, a Make or n8n scenario, or an AI agent such as Claude or Cursor. The API and the MCP server use the same key and return the same JSON.

What it is for

  • Agencies and SEO teams: connect your internal tools and tracking dashboards to your account. Catalog, cart, orders and statuses are all readable as JSON.
  • AI agents: ask Claude Code or Cursor “find me 5 finance sites with DR 40+ and order them”. The agent searches, shows you the summary and only orders once you approve.
  • Make, n8n, Zapier: an HTTP module and a key are all you need.

The API sells guest posts (guest_post), link insertions (link_insertion) and SEO/GEO packs, with credits only. Buying credits and the other offers stay in the dashboard.

Create a key

  1. Open Dashboard → API access.
  2. Name the key (for example “Claude agent” or “Make reporting”) and choose its scopes. On a key that can order, you can set a per-order cap and a 24-hour cap.
  3. Copy the key. It starts with glf_live_ and is shown only once: we keep only a hash of it.
  4. Send it in the header of every request: Authorization: Bearer glf_live_…

At most 10 active keys per organization. A revoked key stops working immediately, as do the keys of a member who leaves the organization. Keep the key out of your code repositories: whoever holds it acts on behalf of your organization.

Key scopes

Each key carries one or more scopes. A request without the required scope receives 403 insufficient_scope, and an AI agent only sees the tools it is allowed to use.

ScopeGives access toWho can grant it
readCatalog, categories, account and balance, credit history, orders, pack quotes.Always included.
cartAdd, edit and remove cart lines.Any member of the organization.
purchaseOrder the cart or a pack, with credits. Includes the cart.The organization owner only.

Quick start

Every route starts with https://www.getlinkfast.com/api/v1. Keep the www: the address without www redirects, and an HTTP client no longer sends the Authorization header after a redirect.

Amounts are in euros excluding VAT. Responses are JSON, with snake_case fields.

1. Read your account and balance
curl https://www.getlinkfast.com/api/v1/account \
  -H "Authorization: Bearer glf_live_…"
2. Search sites: DR 40 and above, in French, guest post
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_…"
3. Add a guest post to the cart
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"}'

Replace site_id with the id of a site from step 2. Never send a price: the server calculates it.

4. Order the cart with credits
curl -X POST https://www.getlinkfast.com/api/v1/checkout \
  -H "Authorization: Bearer glf_live_…" \
  -H "Idempotency-Key: order-2026-10-14-001"

The response gives the order id, the amount debited and your remaining balance. Then track its progress with GET /orders/{id}.

Ordering with credits

The API orders with credits only and never triggers a card payment. Credits are topped up in the dashboard.

An order takes the guest_post and link_insertion lines of the cart. Other lines, added from the dashboard, stay in the cart and are listed in skipped_items.

No cap by default: your balance is the only limit. On a key that can order, set a per-order cap and a cap over a rolling 24 hours. An order that exceeds them is refused (403 spending_limit_exceeded, with the remaining amount), with no debit.

Insufficient balance: 402 insufficient_credits, with the missing amount and the link to the Credits page, to pass on to someone on your team. Nothing is debited.

After that, everything works as from the dashboard: confirmation email and tracking in the Orders screen, where the order carries the name of the key that placed it.

The Idempotency-Key header

  • Required on POST /checkout and POST /packs/orders: 8 to 128 printable ASCII characters, no spaces. Without it: 400 idempotency_key_required.
  • One value equals one purchase intent. Sending the same value again returns the original order (200, "replayed": true) with no second debit, even if the cart has changed since.
  • After a timeout or a network failure, retry with the same value: you will not pay twice.
  • For a new purchase, generate a new value, a UUID for example.
  • On POST /checkout as on POST /packs/orders, a value already used for another purchase is refused: 409 idempotency_conflict, with no debit. For a pack, the same value sent with different content is refused too.
  • On the MCP side, the confirmation token plays this role: you have nothing to generate.

Limits

  • 120 requests per minute per key for reading, and as many again, separately, for the cart: one does not eat into the other.
  • 10 calls per minute per key to the purchase routes or tools — replays, refusals and the MCP summary step included.
  • 300 HTTP requests per minute per key on the MCP server. Each tool called also counts toward the limit of its scope.
  • Beyond that: 429 rate_limited. The wait, in seconds, is given by the Retry-After header over HTTP, and by details.retry_after_seconds in an MCP tool result.
  • At most 100 results per page (page_size).
  • Request body: 1 MB at most.

Error codes

Every error has the same shape. Test code: it is stable. message is in English and meant for the developer; details names the faulty field or the amounts.

Example: insufficient balance
{
  "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"
    }
  }
}
CodeHTTPWhat it means
invalid_json400The request body is not readable JSON. Check the syntax and the Content-Type: application/json header.
idempotency_key_required400Idempotency-Key header missing or malformed on a purchase route. Send a value of 8 to 128 characters.
invalid_api_key401Key missing, malformed, unknown or revoked, or created by a member who has left the organization. Check the Authorization: Bearer glf_live_… header.
insufficient_credits402Insufficient balance. details.missing_amount gives the missing amount, details.credits_url the page to top up. Nothing was debited.
insufficient_scope403The key does not have the scope this route or tool requires. Create a key with that scope.
spending_limit_exceeded403The order exceeds a cap on the key: per order (window: order) or over 24 hours (window: 24h). details.remaining gives what is left. Nothing was debited.
not_found404Resource not found, or not owned by your organization.
method_not_allowed405MCP server: GET and DELETE are not accepted. Send each JSON-RPC message as POST.
organization_financial_hold409Purchases are blocked on your organization. Contact us. Nothing was debited.
page_already_sold409A page in the cart (link insertion) has just been sold. Remove the line, then order again with a new Idempotency-Key.
cart_already_ordered409A cart line has already been ordered by another purchase (dashboard or another Idempotency-Key). Read the cart again before ordering with a new value.
idempotency_conflict409This Idempotency-Key has already been used for another purchase. Use a new value for a new purchase.
not_ready409The audit is not ready yet. Wait for the ready status with get_audit, then add the page.
full_pass_running409The full audit report is still being prepared. Try again in a few minutes. Nothing was started.
limit_reached409The audit already has 8 pages added by you, analyses in progress included. Nothing was started.
already_present409This page is already in the audit, or its analysis is in progress. Nothing was started.
already_ordered409This planned link is already ordered: it can no longer be cancelled here.
not_cancellable409This link cannot be cancelled right now. Read it again with get_plan.
team_planned409This link was scheduled by our team, not through the API: it cannot be cancelled here. To change it, the account owner contacts support.
payload_too_large413Request body larger than 1 MB.
invalid_parameter422Invalid, repeated or unknown query parameter. details.fields names each faulty parameter and the reason.
invalid_arguments422Invalid combination of arguments, for example neither domain nor audit_id, or both. details.field names the field. Nothing was done.
invalid_domain422Unreadable domain or URL. Send a domain name, for example example.com.
own_network_domain422This domain is part of our publishing network: it cannot be audited. Nothing was started.
invalid_body422Invalid or unknown field in the body. details.fields names each faulty field and the reason.
product_not_available_via_api422The API sells guest posts and link insertions. Other products are ordered from the dashboard.
image_not_uploaded422The featured image must have been uploaded to GetLinkFast from the dashboard.
cart_empty422No cart line can be ordered through the API. Nothing was debited.
cart_invalid422Some lines are incomplete or no longer available. details.items lists each line and its problems. Nothing was debited.
invalid_pack_input422The pack does not follow its rules (details.reason). Nothing was debited.
site_unavailable422This site does not exist or is no longer for sale.
target_page_required422A link insertion requires page_id: take it from the site's list of pages.
target_page_not_found422This page does not belong to this site.
target_page_sold422This page has already been sold.
target_page_withdrawn422This page is no longer offered.
target_page_already_in_cart422This page is already in your cart.
product_unavailable422This site does not sell this product.
invalid_url422Unreadable address. Send a full http(s) address, without credentials or port.
other_site422This page is not on the audited domain. Send a page of the same site.
invalid_keyword422Target search too long: 120 characters at most.
rate_limited429Too many requests for this key. Wait the number of seconds given by the Retry-After header over HTTP, or by details.retry_after_seconds in an MCP tool result.
audit_quota_exceeded429This key has already started 10 audits in the last 24 hours. Nothing was started: retry later.
internal_error500An error on our side, already reported to the team. Try again later: a purchase retried with the same Idempotency-Key is never debited twice.
engine_unavailable502The audit engine is temporarily unreachable. Nothing was started: retry later.
packs_unavailable503SEO/GEO packs are not available yet.
confirmation_expiredMCP toolConfirmation token expired, or cart, prices or key changed since the summary. Nothing was debited: call the tool again without a token to get a new summary.
purchase_unavailableMCP toolPurchases through the MCP server are temporarily unavailable. Nothing was debited. Try again later.
unknown_toolMCP toolUnknown tool, or not allowed by the key's scopes. tools/list gives the available tools.
audit_failedMCP toolThis audit failed, so no plan is possible. Start a new one with run_audit. Nothing was done.
audit_not_readyMCP toolThis audit is not finished. Wait for the ready status with get_audit, then call plan_links again. Nothing was done.
budget_too_lowMCP toolThe monthly budget is below the minimum of €100 per month. Nothing was done.
start_date_too_farMCP toolThe start date is too far away. The message gives the latest allowed date. Nothing was done.
too_many_pagesMCP toolA project follows a limited number of pages. Send fewer new pages in target_urls. Nothing was done.
plan_existsMCP toolThis domain already has planned links that are not yet ordered. Plans are never merged: remove them with cancel_planned_link, then start again. Nothing was done.
pending_proposalsMCP toolOur team is reviewing proposed links for this domain, so no plan can be added for now. details.count gives their number and details.retry_after the date after which to try again (if not scheduled by then, they expire). Otherwise, ask the account owner to contact support. Nothing was done.
no_links_foundMCP toolNo site in the catalog fits these pages with this monthly budget. Try other pages or a higher budget. Nothing was done.
plan_in_progressMCP toolThis plan is being saved right now. Call plan_links again with the same token in a few seconds to read the result.
plan_outcome_unknownMCP toolSaving was interrupted and its outcome is unknown. Do not confirm again: read the plan with get_plan.
plan_conflictMCP toolThe plan no longer holds as it is: the project of the domain changed, its dates no longer fall within the budget months (which start at confirmation), or one of its sites is no longer available for this domain. details.reason says which. Nothing was written: call plan_links again without a token for a new summary.
plan_retryMCP toolAnother call with this token ended without saving the plan. Call plan_links again with the same token to read the result.

MCP server

The MCP server gives your AI agent the same functions as the API, with the same key. Its address: https://www.getlinkfast.com/api/mcp.

Claude Code

One command in your terminal:

Terminal — Claude Code
claude mcp add --transport http getlinkfast https://www.getlinkfast.com/api/mcp --header "Authorization: Bearer glf_live_…"

Cursor

In ~/.cursor/mcp.json. Avoid a project's .cursor/mcp.json file: it often ends up in the repository, along with the key.

~/.cursor/mcp.json
{
  "mcpServers": {
    "getlinkfast": {
      "url": "https://www.getlinkfast.com/api/mcp",
      "headers": {
        "Authorization": "Bearer glf_live_…"
      }
    }
  }
}

Claude Desktop

Claude Desktop does not send custom headers to a remote server, so it cannot pass on your key. It will connect natively through the OAuth connection planned for an upcoming release. For now, use Claude Code or Cursor: they send the key in the Authorization header.

The tools

The agent only sees the tools allowed by the key's scopes: a key without the right to order has no purchase tool.

read
search_sitesget_sitelist_site_pageslist_categoriesget_accountlist_ordersget_orderget_auditquote_packlist_auditsget_plan
cart
get_cartadd_to_cartupdate_cart_itemremove_cart_itemadd_audit_pagerun_auditcancel_planned_link
purchase
checkoutorder_packplan_links

Two-step purchase

  1. The agent calls checkout or order_pack without confirmation_token: nothing is debited. It receives the summary (lines, total, balance after debit, remaining cap) and a confirmation_token.
  2. It shows you this summary. If you accept, it calls the tool again with the confirmation_token: the order is placed and debited.
  3. The token is valid for 10 minutes. If the cart, a price or the key changes in the meantime, it is refused (confirmation_expired) and the agent repeats step 1. Calling again with the same token after a network failure returns the same order, with no second debit.

Hand-written client

The server is sessionless: each JSON-RPC message is sent as POST and the response comes back as JSON. Send Accept: application/json, text/event-stream and Content-Type: application/json, otherwise the server responds 406. GET and DELETE respond 405.

List the tools for your key
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 and plan

An agent can audit a site, then spread links over several months from the report. Four steps, with the MCP server tools.

  1. run_audit starts the full audit of a domain: technical checks, ChatGPT visibility and the sites where a link would help. Allow a few minutes. Nothing is debited, and the report is unlocked with the organization's audit quota when it has one. Limit: 10 audits per key per 24 hours; asking again for the same domain within the hour returns the existing audit.
  2. get_audit returns the status and the current step, then the report in summary once the status is ready. Call it every 30 to 60 seconds. list_audits lists the organization's audits, newest first.
  3. plan_links builds a calendar from a ready audit: a monthly budget in euros excluding VAT (at least €100), 2 to 12 months, and optionally a start date and the pages to target. Like a purchase, it takes two steps. Without a token nothing is saved: the agent receives the calendar (links, send dates, total) and a confirmation_token valid for 10 minutes. After your approval it calls the tool again with the same fields and the token, and the plan is saved.
  4. get_plan follows each link: target page, anchor, price and state (scheduled, ordered, published, cancelled or failed, with the cause of a failure such as insufficient_credits). cancel_planned_link cancels a link planned through the API, or all those of a domain not yet ordered. Links scheduled by our team stay in place: team_planned for one link, skipped_team_planned for their number.

Nothing is debited when the plan is saved. Each link is debited in credits on its send day, at the price re-read that day, during the daily morning pass (around 06:20 UTC). If the balance is short that day, the link is not ordered and shows as failed in get_plan. A link that is already ordered can no longer be cancelled.

Scopes: run_audit and cancel_planned_link need the cart scope, plan_links needs purchase, and get_audit, list_audits and get_plan need read. The key's spending limits apply to planned links.

In the dashboard, the Delegation page shows these links in the “Scheduled links” block. The organization owner can remove the links planned through the API there. Those planned by our team are read-only.

Reference

Each route with its scope and its matching MCP tool. Parameters, response schemas and errors route by route: the OpenAPI 3.1 description.

RouteScopeMCP toolPurpose
GET /sitesreadsearch_sitesSearch the catalog: metrics, price, category, language, product; sorting and pagination.
GET /sites/{id}readget_siteOne site: metrics, prices and publishing rules.
GET /sites/{id}/pagesreadlist_site_pagesA site's pages open to link insertion, with their price and Google traffic.
GET /categoriesreadlist_categoriesCategories and their ids, for the category filter.
GET /accountreadget_accountOrganization, credit balance, key scopes and caps, 24-hour spending.
GET /credits/transactionsreadnoneCredit history.
GET /ordersreadlist_ordersYour orders, filterable by status and date.
GET /orders/{id}readget_orderOne order and its lines, with their status.
GET /cart/itemscartget_cartThe cart: lines, up-to-date prices and blocking problems.
POST /cart/itemscartadd_to_cartAdd a guest post or a link insertion.
PATCH /cart/items/{id}cartupdate_cart_itemComplete or edit a line's brief.
DELETE /cart/items/{id}cartremove_cart_itemRemove a line.
GET /audits/{id}readget_auditRead an audit: status, current step, then the report.
POST /audits/{id}/pagescartadd_audit_pageAdd a page to push to a ready audit (8 at most). The analysis runs 1 to 4 minutes: follow it with get_audit. Nothing is debited.
POST /checkoutpurchasecheckoutOrder the cart with credits.
POST /packs/quotereadquote_packPrice an SEO/GEO pack, with no debit.
POST /packs/orderspurchaseorder_packOrder an SEO/GEO pack with credits.
MCP server onlycartrun_auditStart the full audit of a domain. Nothing is debited.
MCP server onlyreadlist_auditsList the organization's audits, newest first.
MCP server onlypurchaseplan_linksPlan links over 2 to 12 months from an audit, in two steps. Nothing is debited when the plan is saved.
MCP server onlyreadget_planRead the planned links of a domain: send date and state of each.
MCP server onlycartcancel_planned_linkCancel one planned link, or all those of a domain not yet ordered.

A question about the API? Write to us and someone on the team will answer.