Home · API and AI agents
Agent Ready

Buy backlinks from an AI agent, or via API

The Nautilinks catalog is also reachable by API and by MCP server. An agent (Claude, ChatGPT, Cursor…) can look up a site, build an order, settle it directly if your prepaid balance covers it, or hand you a Stripe payment link otherwise.

Create my account See the API reference
✓ API key auth✓ Remote MCP server✓ No card charged without human validation

Nautilinks sells backlinks directly, with no marketplace and no commission, on a network of sites we publish ourselves. This page describes machine access to that same catalog: a REST API and an MCP server, designed so an LLM agent can look up a relevant site, place an order and track its progress, without a human filling in a form.

The principle stays the same as on the rest of the site: the catalog queried by API is public in its logic, prices are the same ones shown to humans, and no card is ever charged without a human validating the payment, whether that happens in advance by funding the account's prepaid balance, or in the moment by opening a Stripe link. The agent orders, the human pays, one way or the other.

Getting started

Three steps to connect an agent

  1. Create a Nautilinks account. Free sign-up, no card requested at this stage. This is the account that receives invoices and, ultimately, pays via Stripe.
  2. Generate an API key. In the member area, under "My account" then "API keys". The key (format sn_live_...) is shown once, copy it immediately. Up to 5 active keys per account, revocable at any time.
  3. Connect the MCP server or call the API. Two equivalent paths: an MCP client (Claude Code, claude.ai, Cursor…) talking to the mcp.nautilinks.co server, or direct HTTP calls to /api/v1/agent/*. The JSON contract is identical on both sides.
No package to install

Connect the MCP server

Remote server on Cloudflare (streamable HTTP transport), no session or state kept on the Nautilinks side. Every call carries your own API key.

Claude Code
claude mcp add --transport http nautilinks https://mcp.nautilinks.co/mcp \
  --header "Authorization: Bearer sn_live_your_key"
claude.ai — Settings → Connectors → Add custom connector
URL: https://mcp.nautilinks.co/mcp
Header: Authorization: Bearer sn_live_your_key
If the client does not support a custom header
https://mcp.nautilinks.co/mcp?key=sn_live_your_key

Eleven tools exposed: catalog and existing articles, AI visibility projects and plans, prepaid balance, order creation, and quote/order tracking. They use the same data contract as the REST API below; webhooks are only available through direct HTTP calls.

/api/v1/agent/*

API reference for agents

Method
Endpoint
Returns
Scope
GET
/api/v1/agent/catalog
Lists network sites across the three shelves (Plancton, Corail, Nautilus), filterable (including by shelf) and paginated.
read
GET
/api/v1/agent/catalog/:id
Full profile of a site (metrics, price, shelf, niche).
read
GET
/api/v1/agent/catalog/:id/articles
Existing articles available for one sold-once insertion, with ranking keywords and positions.
read
GET
/api/v1/agent/balance
Prepaid balance available on the account.
read
POST
/api/v1/agent/orders
Creates an order for 1 to 20 links: settled immediately if the prepaid balance covers the total, otherwise returns a Stripe payment link.
order
GET
/api/v1/agent/orders
Lists orders placed with this key.
read
GET
/api/v1/agent/orders/:id
Detailed per-link status (to assign, published…) and the published URL once live.
read
GET
/api/v1/agent/quotes/:id
Checks a quote to see whether payment has been made and under which order number.
read
GET
/api/v1/agent/webhooks
Lists the key's active webhook subscriptions.
read
POST
/api/v1/agent/webhooks
Creates a subscription (URL + events), returns a secret shown once.
order
DELETE
/api/v1/agent/webhooks/:id
Revokes a webhook subscription.
order
GET
/api/v1/agent/ai-visibility/projects
Lists the account AI-visibility projects.
read
GET
/api/v1/agent/ai-visibility/projects/:id/plan
Builds reviewable order-ready items from uncovered AI opportunities.
read

Authentication

Every call carries the header Authorization: Bearer sn_live_.... The key belongs to a human account: any order created via API is attached to that account, invoiced to its address, and visible in its member area just like an order placed from the web cart. A freshly created key carries both scopes (read and order) by default.

Order idempotency

The optional Idempotency-Key header avoids duplicates in case of a network replay (timeout, automatic retry on the agent side). A second call with the same value does not create a new order: it returns the same quote and, if a Stripe payment is already in progress, the same payment_url rather than opening a second one.

Daily cap

An anti-abuse cap applies per API key, of the order of twenty orders per day. Once reached, the API replies with 429 and the code daily_order_cap_reached. An identical replay (same Idempotency-Key) never counts twice.

Payment: prepaid balance or Stripe link

Creating an order never charges a card at the moment of the call. If the account's prepaid balance covers the total, it is debited directly at creation: the response carries order_id and order_status: "paid", and payment_url is null. Otherwise, only a quote is created and the response carries a payment_url, a standard Stripe Checkout link, to be opened by the human who owns the account; once paid, an existing webhook turns the quote into an order. Either way, no card is charged without a person validating the payment, in advance by funding the balance or in the moment via Stripe, and an agent can only spend what is already on the account, within the daily cap.

Webhooks

A webhook subscription (POST /api/v1/agent/webhooks, scope order, up to 5 active per account) receives order.accepted, order.published and order.cancelled on a public HTTPS URL chosen by the agent. Every delivery is signed: the Nautilinks-Signature header carries an HMAC-SHA256 computed over the timestamp and the raw body, using a key derived from the secret returned at creation (never the clear secret). GET /api/v1/agent/webhooks lists active subscriptions, DELETE /api/v1/agent/webhooks/:id revokes one.

End to end

Full example, catalog then order

1. Search for a site in the catalogue (here on the Plancton shelf)
curl -s "https://nautilinks.co/api/v1/agent/catalog?niche=voyage&shelf=Plancton&limit=5" \
  -H "Authorization: Bearer sn_live_your_key"
Response (abridged)
{
  "ok": true,
  "count": 1,
  "total": 1,
  "sites": [
    {
      "id": 214,
      "domain": "exemple-voyage.fr",
      "niche_label": "Voyage",
      "language": "fr",
      "tf": 14,
      "traffic_monthly": 2100,
      "price_eur": 5,
      "price_shelf": "Plancton"
    }
  ]
}

The full response also carries shelves, the description of the three shelves (price and criterion), so an agent can discover the offer without external documentation.

2. Create the order
curl -s -X POST "https://nautilinks.co/api/v1/agent/orders" \
  -H "Authorization: Bearer sn_live_your_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: cmd-2026-07-24-01" \
  -d '{
    "items": [
      {
        "site_id": 214,
        "target_url": "https://votre-site.fr/page-cible/",
        "anchor_text": "assurance voyage longue duree",
        "anchor_type": "partial"
      }
    ]
  }'
Response if the prepaid balance covers the total
{
  "ok": true,
  "quote_id": "qt_8f2c...",
  "total_eur": 5,
  "payment_url": null,
  "items_count": 1,
  "order_id": "ord_9a1d...",
  "order_status": "paid"
}
Response otherwise (a quote is created, a human has to pay)
{
  "ok": true,
  "quote_id": "qt_8f2c...",
  "total_eur": 5,
  "payment_url": "https://checkout.stripe.com/c/pay/...",
  "items_count": 1
}

If payment_url is null, the order is already settled by the prepaid balance: order_id and order_status describe it directly. Otherwise, the agent hands payment_url to the human; once payment goes through, GET /api/v1/agent/quotes/qt_8f2c... returns the resulting order_id, then GET /api/v1/agent/orders/:id tracks the link through to publication.

Frequently asked questions

Can an AI agent pay on its own, without human involvement?

Payment can resolve one of two ways. If the account prepaid balance covers the total, the order is settled straight away: it is the credit a human funded in advance that pays, and the call concludes with no link to open. Otherwise, creating the order returns a Stripe payment link (payment_url) that a human has to open and pay. Either way, a card is never charged without a person validating the payment, and an agent can only spend what is already on the account, within a daily cap per key.

Which links can be bought via API today?

All three catalog shelves: Plancton at 5 euros, Corail at 15 euros, and Nautilus at 30 euros. A 1-20 link order can mix new dedicated articles with sold-once insertions into existing articles, optional tier-2 packs of 1, 3 or 5 links, and AI-visibility project tags.

What happens after payment?

Once the quote is paid (credit or Stripe webhook, depending on the path taken), the order exists exactly like a purchase made from the web cart. Plancton links are then auto-assigned (unless the internal kill switch has reverted to manual mode); Corail and Nautilus links go through manual assignment on our side. All of them then follow the usual path through to publication.

Is there a daily order limit?

Yes, an anti-abuse cap applies per API key (around twenty orders per day by default). Beyond that, the API replies 429 with the code daily_order_cap_reached. A replay with the same Idempotency-Key never consumes this quota twice.

Does the MCP server require a local install?

No, it is a remote server (Cloudflare Worker) over streamable HTTP, no npm package to install. It only relays your API key to the Nautilinks API, without storing anything on its side.

Can I test it without commitment?

The read scope (reading the catalog, orders, quotes, balance) is included by default in every key, alongside the order scope. You can also generate a sandbox key (sn_test_ prefix): it simulates an order without ever debiting the wallet or creating a real order with a publisher, and the response carries sandbox: true.

How do I follow an order without polling the API?

By creating a webhook subscription (POST /api/v1/agent/webhooks) on a public HTTPS URL, for one or more events among order.accepted, order.published and order.cancelled. Every delivery is signed with HMAC-SHA256 in the Nautilinks-Signature header, to verify before trusting the payload.

One API key, and your agent buys links

Create an account, generate your key in the member area, connect the MCP server or call the API. The three-shelf catalogue (Plancton, Corail, Nautilus) is available today.

Create my account See the full catalog