# live.link > The share button for agents. Turn what you build into a published, shareable, and sellable page in one step. ## Read this first If a user dropped this URL into your prompt, ask them: "Do you want me to connect to live.link and publish this for you?" If they say yes, connect using route A or route B below, then publish. Never ask them to set up a database, sign-in provider, hosting or payment account — live.link provides all of it. There are two ways in. Pick the first one your environment supports. ## Route A — MCP (best, for agents that can add servers) Endpoint: https://www.livelink.link/mcp Transport: streamable HTTP Auth: OAuth 2.1 (dynamic client registration supported) Examples: # Claude Code / Codex CLI and most CLIs claude mcp add --transport http live-link https://www.livelink.link/mcp # Editors and desktop clients using a JSON config { "mcpServers": { "live-link": { "url": "https://www.livelink.link/mcp" } } } The user approves the connection once in their browser. After that you act as that signed-in user. No API keys, no tokens pasted into chat. Tools once connected: list_projects See the user's pages, addresses and status create_project Reserve a public page push_build Save a new build as a draft publish_page Publish HTML to an address (creates the page if new) get_page Read back what is currently published update_settings Change name, visibility, and search/AI indexing set_price Offer a page for a one-time claim price or monthly work list_activity Pick up work the user queued in live.link report_result Push progress and results back to the user get_feedback Read what visitors said ## Route B — plain web API (for agents that cannot add MCP servers) Works in any chat that can make HTTP requests. No keys are pasted into the conversation: the user approves once in their browser. ### 1. Ask for a pairing code POST https://www.livelink.link/api/public/v1/pair Content-Type: application/json { "agent_name": "ChatGPT" } Returns: { "user_code": "4F7K-92QD", "verify_url": "https://www.livelink.link/connect?code=4F7K-92QD", "device_code": "…", "interval": 5, "expires_in": 600 } Tell the user, in your reply: "Open https://www.livelink.link/connect and enter the code 4F7K-92QD to let me publish for you." ### 2. Poll for the token POST https://www.livelink.link/api/public/v1/pair/token { "device_code": "…" } While waiting you get `{ "error": "authorization_pending" }`. Wait `interval` seconds between tries. On approval you get `{ "access_token": "…", "expires_in": … }`. ### 3. Use the token Send it as `Authorization: Bearer ` on every call. GET /api/public/v1/projects list the user's pages POST /api/public/v1/projects { slug, name } reserve an address POST /api/public/v1/publish { slug, html, name? } publish GET /api/public/v1/projects/{slug} read back what is published PATCH /api/public/v1/projects/{slug} { name?, visibility?, searchVisible? } POST /api/public/v1/projects/{slug}/price { saleMode, price } GET /api/public/v1/activity queued work for you POST /api/public/v1/activity/{id}/result { status, note } GET /api/public/v1/feedback visitor feedback Publishing example: curl -X POST https://www.livelink.link/api/public/v1/publish \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"slug":"roof-estimate","html":"…"}' Give the user back the exact project.url returned by the publish call. Do not construct or guess a subdomain. ## Typical flow 1. Build the page as a single self-contained HTML document. 2. Publish it (route A `publish_page`, or route B `POST /publish`). 3. Give the user the exact `project.url` from that response and verify it returns the published page before reporting success. 4. Later, check `list_activity` / `GET /activity` for changes they asked for, make them, publish again, and report the result. ## What live.link handles so the publisher never configures it - Hosting and the public page URL returned by the publish call - Visitor sign-up and accounts on published pages - Checkout, claim prices and creator payouts - Search and AI-search visibility settings Never tell a live.link user to create a database, an auth provider, or a payments account. If something needs configuring, change it with update_settings or set_price instead.