From bf807ba58f77940035c9b63221aeaa39b4819891 Mon Sep 17 00:00:00 2001
From: AnnaXWang <6621137+AnnaXWang@users.noreply.github.com>
Date: Tue, 29 Sep 2026 02:09:56 +0000
Subject: [PATCH 01/10] Document MPP browser purchases
---
browsers/mpp.mdx | 83 +++++++++++++++++++++++++++++++++++++++++++
browsers/payments.mdx | 2 ++
docs.json | 1 +
3 files changed, 86 insertions(+)
create mode 100644 browsers/mpp.mdx
diff --git a/browsers/mpp.mdx b/browsers/mpp.mdx
new file mode 100644
index 00000000..8866c178
--- /dev/null
+++ b/browsers/mpp.mdx
@@ -0,0 +1,83 @@
+---
+title: "Buy a Browser with MPP"
+description: "Pay for a KERNEL browser with stripe's machine payments protocol"
+---
+
+[machine payments protocol (mpp)](https://mpp.dev/) is an open protocol co-authored by stripe and tempo. it uses an http `402` challenge so an agent can pay for an api request without a checkout page. KERNEL accepts mpp payments for browser sessions: an agent pays with a stripe shared payment token, then connects to the browser over cdp. this route doesn't require a KERNEL account or api key.
+
+
+ this is a staging preview at `https://api.dev.onkernel.com/mpp/browsers`. the current offer is $0.50 for one stealth, headful browser for 30 minutes. read the `402` challenge or [openapi offer](https://api.dev.onkernel.com/openapi.json) for the current price and duration before paying.
+
+
+## How the payment works
+
+1. `POST /mpp/browsers` without a payment credential. KERNEL returns `402 Payment Required` with the offer in `WWW-Authenticate: Payment`.
+2. your wallet approves the offer and retries the same request with `Authorization: Payment `.
+3. KERNEL verifies and charges the credential, creates the browser, and returns its connection urls in a `200` response. the `Payment-Receipt` header contains the mpp receipt.
+
+the staging route currently accepts stripe shared payment tokens backed by card or link. it doesn't currently accept stablecoin payments. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
+
+## Try it on staging
+
+use a wallet with mpp support, such as [stripe's link cli](https://link.com/agents). the `--test` flag uses test payment credentials.
+
+```bash
+link-cli mpp pay https://api.dev.onkernel.com/mpp/browsers --method POST --test
+```
+
+to inspect the offer without paying, send an unauthenticated request:
+
+```bash
+curl -i -X POST https://api.dev.onkernel.com/mpp/browsers
+```
+
+you can send an optional `{"email":"agent@example.com"}` json body if you want the stripe receipt sent to that address. otherwise KERNEL uses the billing email shared by the payment token, if available.
+
+the paid response includes `session_id`, `cdp_ws_url`, `webdriver_ws_url`, `browser_live_view_url` when available, and `expires_at`. `payment.amount` is in us cents, and `access.type` is `session_urls`. treat the connection urls as credentials; anyone with them can access the browser while it is active.
+
+connect playwright to the returned `cdp_ws_url`. set `CDP_WS_URL` to that value from the paid response:
+
+
+
+
+```typescript
+import { chromium } from "playwright";
+
+const browser = await chromium.connectOverCDP(process.env.CDP_WS_URL!);
+const page = await browser.newPage();
+await page.goto("https://example.com");
+console.log(await page.title());
+await browser.close();
+```
+
+
+
+
+```python
+import os
+from playwright.sync_api import sync_playwright
+
+with sync_playwright() as playwright:
+ browser = playwright.chromium.connect_over_cdp(os.environ["CDP_WS_URL"])
+ page = browser.new_page()
+ page.goto("https://example.com")
+ print(page.title())
+ browser.close()
+```
+
+
+
+
+## Retry and expiration
+
+a challenge buys one browser. if the paid request times out or you lose its response, retry with the **same payment credential**. KERNEL returns the same browser without another charge while it is active. don't create a new payment to recover an uncertain purchase.
+
+the paid time starts when the charge succeeds; use `expires_at` in the response as the access deadline. after expiration, a retry returns a new `402` challenge with `code: session_expired`; paying that challenge buys a new browser. if KERNEL charges you but can't create the browser, it attempts a refund. a successful refund returns a `503` error with a `refund_id`.
+
+## When to use mpp
+
+mpp is a payment protocol, not a browser feature. when a merchant exposes an mpp endpoint, an agent can pay that merchant directly without opening a checkout page. a browser is still useful when the task requires a site's interface, login, or checkout and the site doesn't expose the needed action through mpp.
+
+KERNEL's mpp endpoint handles a different purchase: **the agent pays KERNEL for browser access**. it lets an agent with a compatible wallet acquire one browser without account setup. the purchase returns connection urls only; it doesn't provision a vault or merchant payment credential.
+
+for merchant checkout with KERNEL's wallet integrations, use [payments for browser agents](/browsers/payments) with an account-based browser. for projects, api keys, and ongoing browser management, use [account-based browser access](/introduction/create).
diff --git a/browsers/payments.mdx b/browsers/payments.mdx
index eab30059..47a0b2e4 100644
--- a/browsers/payments.mdx
+++ b/browsers/payments.mdx
@@ -5,6 +5,8 @@ description: "Let browser agents complete purchases without handling raw payment
your browser agent can complete purchases with KERNEL while your application keeps control of the purchase and user approval. native [wallet integrations](/integrations/wallets/overview) connect the user's payment method to a [vault](/vaults/overview), so your agent works with payment items rather than raw card details.
+to pay KERNEL directly for a browser session without an account, see [buy a browser with mpp](/browsers/mpp). that payment grants browser access; the wallet integrations on this page handle purchases at merchant checkouts.
+
KERNEL's [`fill` api](/vaults/fill) safely injects stored values into browser fields without passing them through your application's injection code or the model's context. you provide an item reference, browser, and field selectors; KERNEL writes the values and returns per-field outcomes, not the values. wallet integrations supply payment material and approval; `fill` is a KERNEL operation shared with non-payment vault items.
agentcard uses an integration-specific alternative: the agent enters non-sensitive aliases, and KERNEL holds a recognized checkout request for approval before agentcard executes it and KERNEL replays the response. the underlying card stays outside the browser.
diff --git a/docs.json b/docs.json
index 156f16b3..55caf49a 100644
--- a/docs.json
+++ b/docs.json
@@ -202,6 +202,7 @@
]
},
"browsers/payments",
+ "browsers/mpp",
"browsers/replays",
"browsers/viewport",
"browsers/regions",
From 290d02411caa0a0a8b6a1f256966fb7ee652831d Mon Sep 17 00:00:00 2001
From: AnnaXWang <6621137+AnnaXWang@users.noreply.github.com>
Date: Tue, 29 Sep 2026 02:31:34 +0000
Subject: [PATCH 02/10] Clarify MPP shared payment token support
---
browsers/mpp.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browsers/mpp.mdx b/browsers/mpp.mdx
index 8866c178..e1339958 100644
--- a/browsers/mpp.mdx
+++ b/browsers/mpp.mdx
@@ -15,7 +15,7 @@ description: "Pay for a KERNEL browser with stripe's machine payments protocol"
2. your wallet approves the offer and retries the same request with `Authorization: Payment `.
3. KERNEL verifies and charges the credential, creates the browser, and returns its connection urls in a `200` response. the `Payment-Receipt` header contains the mpp receipt.
-the staging route currently accepts stripe shared payment tokens backed by card or link. it doesn't currently accept stablecoin payments. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
+the staging route accepts [stripe shared payment tokens](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) (`spt_...`) only. `card` and `link` in the `402` challenge describe payment methods the token can represent; you can't send card details or a standalone card credential to this endpoint. stablecoin payments aren't offered. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
## Try it on staging
From 4d47538338b26047ce75ecfb60ccbbdfb7807c65 Mon Sep 17 00:00:00 2001
From: AnnaXWang <6621137+AnnaXWang@users.noreply.github.com>
Date: Tue, 29 Sep 2026 02:35:09 +0000
Subject: [PATCH 03/10] Clarify Link as the documented MPP payment path
---
browsers/mpp.mdx | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/browsers/mpp.mdx b/browsers/mpp.mdx
index e1339958..1c4719ca 100644
--- a/browsers/mpp.mdx
+++ b/browsers/mpp.mdx
@@ -1,6 +1,6 @@
---
title: "Buy a Browser with MPP"
-description: "Pay for a KERNEL browser with stripe's machine payments protocol"
+description: "buy a KERNEL browser through mpp with link"
---
[machine payments protocol (mpp)](https://mpp.dev/) is an open protocol co-authored by stripe and tempo. it uses an http `402` challenge so an agent can pay for an api request without a checkout page. KERNEL accepts mpp payments for browser sessions: an agent pays with a stripe shared payment token, then connects to the browser over cdp. this route doesn't require a KERNEL account or api key.
@@ -15,11 +15,13 @@ description: "Pay for a KERNEL browser with stripe's machine payments protocol"
2. your wallet approves the offer and retries the same request with `Authorization: Payment `.
3. KERNEL verifies and charges the credential, creates the browser, and returns its connection urls in a `200` response. the `Payment-Receipt` header contains the mpp receipt.
-the staging route accepts [stripe shared payment tokens](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) (`spt_...`) only. `card` and `link` in the `402` challenge describe payment methods the token can represent; you can't send card details or a standalone card credential to this endpoint. stablecoin payments aren't offered. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
+the documented buyer flow for this preview uses link. the buyer approves the payment through link, and the link cli retries with a credential containing a [stripe shared payment token](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) (`spt_...`). KERNEL validates the token, not its issuer, so another compatible client can also supply an spt.
+
+you can't send card details or a standalone card credential to this endpoint, and stablecoin payments aren't offered. `card` in the `402` challenge describes an underlying spt method, not a separate card flow. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
## Try it on staging
-use a wallet with mpp support, such as [stripe's link cli](https://link.com/agents). the `--test` flag uses test payment credentials.
+use [stripe's link cli](https://docs.stripe.com/agentic-commerce/link-cli/machine-payments) to pay through link. the `--test` flag uses test payment credentials.
```bash
link-cli mpp pay https://api.dev.onkernel.com/mpp/browsers --method POST --test
From 2def891bd43b583a9af0bce99b5595adc68027e2 Mon Sep 17 00:00:00 2001
From: Anna Wang
Date: Mon, 28 Sep 2026 19:36:50 -0700
Subject: [PATCH 04/10] Update payments.mdx
---
browsers/payments.mdx | 1 -
1 file changed, 1 deletion(-)
diff --git a/browsers/payments.mdx b/browsers/payments.mdx
index 47a0b2e4..d91001d0 100644
--- a/browsers/payments.mdx
+++ b/browsers/payments.mdx
@@ -5,7 +5,6 @@ description: "Let browser agents complete purchases without handling raw payment
your browser agent can complete purchases with KERNEL while your application keeps control of the purchase and user approval. native [wallet integrations](/integrations/wallets/overview) connect the user's payment method to a [vault](/vaults/overview), so your agent works with payment items rather than raw card details.
-to pay KERNEL directly for a browser session without an account, see [buy a browser with mpp](/browsers/mpp). that payment grants browser access; the wallet integrations on this page handle purchases at merchant checkouts.
KERNEL's [`fill` api](/vaults/fill) safely injects stored values into browser fields without passing them through your application's injection code or the model's context. you provide an item reference, browser, and field selectors; KERNEL writes the values and returns per-field outcomes, not the values. wallet integrations supply payment material and approval; `fill` is a KERNEL operation shared with non-payment vault items.
From ca45bcda86c41c12e7c330992fc4265f11e00859 Mon Sep 17 00:00:00 2001
From: Anna Wang
Date: Mon, 28 Sep 2026 19:37:21 -0700
Subject: [PATCH 05/10] Update payments.mdx
---
browsers/payments.mdx | 1 -
1 file changed, 1 deletion(-)
diff --git a/browsers/payments.mdx b/browsers/payments.mdx
index d91001d0..eab30059 100644
--- a/browsers/payments.mdx
+++ b/browsers/payments.mdx
@@ -5,7 +5,6 @@ description: "Let browser agents complete purchases without handling raw payment
your browser agent can complete purchases with KERNEL while your application keeps control of the purchase and user approval. native [wallet integrations](/integrations/wallets/overview) connect the user's payment method to a [vault](/vaults/overview), so your agent works with payment items rather than raw card details.
-
KERNEL's [`fill` api](/vaults/fill) safely injects stored values into browser fields without passing them through your application's injection code or the model's context. you provide an item reference, browser, and field selectors; KERNEL writes the values and returns per-field outcomes, not the values. wallet integrations supply payment material and approval; `fill` is a KERNEL operation shared with non-payment vault items.
agentcard uses an integration-specific alternative: the agent enters non-sensitive aliases, and KERNEL holds a recognized checkout request for approval before agentcard executes it and KERNEL replays the response. the underlying card stays outside the browser.
From 35352f2f1a9c63492a3f1ed3a685c9d00cb59c85 Mon Sep 17 00:00:00 2001
From: AnnaXWang <6621137+AnnaXWang@users.noreply.github.com>
Date: Tue, 29 Sep 2026 02:42:43 +0000
Subject: [PATCH 06/10] Move MPP guide to Info and document production flow
---
docs.json | 4 ++--
{browsers => info}/mpp.mdx | 14 ++++++--------
2 files changed, 8 insertions(+), 10 deletions(-)
rename {browsers => info}/mpp.mdx (80%)
diff --git a/docs.json b/docs.json
index 55caf49a..b32ed73c 100644
--- a/docs.json
+++ b/docs.json
@@ -202,7 +202,6 @@
]
},
"browsers/payments",
- "browsers/mpp",
"browsers/replays",
"browsers/viewport",
"browsers/regions",
@@ -354,7 +353,8 @@
"info/pricing",
"info/spending-caps",
"info/support",
- "info/unikernels"
+ "info/unikernels",
+ "info/mpp"
]
}
]
diff --git a/browsers/mpp.mdx b/info/mpp.mdx
similarity index 80%
rename from browsers/mpp.mdx
rename to info/mpp.mdx
index 1c4719ca..dd5b0273 100644
--- a/browsers/mpp.mdx
+++ b/info/mpp.mdx
@@ -5,9 +5,7 @@ description: "buy a KERNEL browser through mpp with link"
[machine payments protocol (mpp)](https://mpp.dev/) is an open protocol co-authored by stripe and tempo. it uses an http `402` challenge so an agent can pay for an api request without a checkout page. KERNEL accepts mpp payments for browser sessions: an agent pays with a stripe shared payment token, then connects to the browser over cdp. this route doesn't require a KERNEL account or api key.
-
- this is a staging preview at `https://api.dev.onkernel.com/mpp/browsers`. the current offer is $0.50 for one stealth, headful browser for 30 minutes. read the `402` challenge or [openapi offer](https://api.dev.onkernel.com/openapi.json) for the current price and duration before paying.
-
+the offer is $0.50 for one stealth, headful browser for 30 minutes by default. read the `402` challenge or [openapi offer](https://api.onkernel.com/openapi.json) for the current price and duration before paying.
## How the payment works
@@ -15,22 +13,22 @@ description: "buy a KERNEL browser through mpp with link"
2. your wallet approves the offer and retries the same request with `Authorization: Payment `.
3. KERNEL verifies and charges the credential, creates the browser, and returns its connection urls in a `200` response. the `Payment-Receipt` header contains the mpp receipt.
-the documented buyer flow for this preview uses link. the buyer approves the payment through link, and the link cli retries with a credential containing a [stripe shared payment token](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) (`spt_...`). KERNEL validates the token, not its issuer, so another compatible client can also supply an spt.
+the documented buyer flow uses link. the buyer approves the payment through link, and the link cli retries with a credential containing a [stripe shared payment token](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) (`spt_...`). KERNEL validates the token, not its issuer, so another compatible client can also supply an spt.
you can't send card details or a standalone card credential to this endpoint, and stablecoin payments aren't offered. `card` in the `402` challenge describes an underlying spt method, not a separate card flow. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
-## Try it on staging
+## Pay with link
-use [stripe's link cli](https://docs.stripe.com/agentic-commerce/link-cli/machine-payments) to pay through link. the `--test` flag uses test payment credentials.
+use [stripe's link cli](https://docs.stripe.com/agentic-commerce/link-cli/machine-payments) to pay through link. configure oauth to include `payment_scope.methods.agentic`, then use the `402` challenge to create a shared payment token spend request. after the buyer approves that request, set `SPEND_REQUEST_ID` to its id and pay:
```bash
-link-cli mpp pay https://api.dev.onkernel.com/mpp/browsers --method POST --test
+link-cli mpp pay https://api.onkernel.com/mpp/browsers --spend-request-id "$SPEND_REQUEST_ID" --method POST
```
to inspect the offer without paying, send an unauthenticated request:
```bash
-curl -i -X POST https://api.dev.onkernel.com/mpp/browsers
+curl -i -X POST https://api.onkernel.com/mpp/browsers
```
you can send an optional `{"email":"agent@example.com"}` json body if you want the stripe receipt sent to that address. otherwise KERNEL uses the billing email shared by the payment token, if available.
From d640fd66500a26bf2cbbd4a9d562b77ec7bdffeb Mon Sep 17 00:00:00 2001
From: AnnaXWang <6621137+AnnaXWang@users.noreply.github.com>
Date: Tue, 29 Sep 2026 02:45:16 +0000
Subject: [PATCH 07/10] Remove OpenAPI offer link from MPP guide
---
info/mpp.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/info/mpp.mdx b/info/mpp.mdx
index dd5b0273..3636bf3a 100644
--- a/info/mpp.mdx
+++ b/info/mpp.mdx
@@ -5,7 +5,7 @@ description: "buy a KERNEL browser through mpp with link"
[machine payments protocol (mpp)](https://mpp.dev/) is an open protocol co-authored by stripe and tempo. it uses an http `402` challenge so an agent can pay for an api request without a checkout page. KERNEL accepts mpp payments for browser sessions: an agent pays with a stripe shared payment token, then connects to the browser over cdp. this route doesn't require a KERNEL account or api key.
-the offer is $0.50 for one stealth, headful browser for 30 minutes by default. read the `402` challenge or [openapi offer](https://api.onkernel.com/openapi.json) for the current price and duration before paying.
+the offer is $0.50 for one stealth, headful browser for 30 minutes by default. read the `402` challenge for the current price and duration before paying.
## How the payment works
From 0510fd9e6c99e7ab0d4da06580ccf243f3c0a301 Mon Sep 17 00:00:00 2001
From: AnnaXWang <6621137+AnnaXWang@users.noreply.github.com>
Date: Tue, 29 Sep 2026 15:34:34 +0000
Subject: [PATCH 08/10] Clarify Link-only MPP payment flow
---
info/mpp.mdx | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/info/mpp.mdx b/info/mpp.mdx
index 3636bf3a..0d5c6bb5 100644
--- a/info/mpp.mdx
+++ b/info/mpp.mdx
@@ -9,20 +9,20 @@ the offer is $0.50 for one stealth, headful browser for 30 minutes by default. r
## How the payment works
-1. `POST /mpp/browsers` without a payment credential. KERNEL returns `402 Payment Required` with the offer in `WWW-Authenticate: Payment`.
-2. your wallet approves the offer and retries the same request with `Authorization: Payment `.
+1. `link-cli mpp pay` sends `POST /mpp/browsers` without a payment credential. KERNEL returns `402 Payment Required` with the offer in `WWW-Authenticate: Payment`.
+2. the link cli gives you an approval url. after you approve the payment through link, it retries the request with `Authorization: Payment `.
3. KERNEL verifies and charges the credential, creates the browser, and returns its connection urls in a `200` response. the `Payment-Receipt` header contains the mpp receipt.
-the documented buyer flow uses link. the buyer approves the payment through link, and the link cli retries with a credential containing a [stripe shared payment token](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) (`spt_...`). KERNEL validates the token, not its issuer, so another compatible client can also supply an spt.
+link through the link cli is the only supported payment flow for now. after approval, the cli sends a credential containing a [stripe shared payment token](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) (`spt_...`) to KERNEL.
-you can't send card details or a standalone card credential to this endpoint, and stablecoin payments aren't offered. `card` in the `402` challenge describes an underlying spt method, not a separate card flow. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
+you can't send card details or a standalone card credential to this endpoint, and stablecoin payments aren't offered. the payment challenge expires after 30 minutes by default; that is the time available to approve the offer, not the browser's lifetime.
## Pay with link
-use [stripe's link cli](https://docs.stripe.com/agentic-commerce/link-cli/machine-payments) to pay through link. configure oauth to include `payment_scope.methods.agentic`, then use the `402` challenge to create a shared payment token spend request. after the buyer approves that request, set `SPEND_REQUEST_ID` to its id and pay:
+run [stripe's link cli](https://docs.stripe.com/agentic-commerce/link-cli/machine-payments) to pay through link. the command reads the `402` challenge, gives you an approval link, and completes the payment after you approve it. you don't need to create a spend request separately.
```bash
-link-cli mpp pay https://api.onkernel.com/mpp/browsers --spend-request-id "$SPEND_REQUEST_ID" --method POST
+link-cli mpp pay https://api.onkernel.com/mpp/browsers --method POST
```
to inspect the offer without paying, send an unauthenticated request:
@@ -78,6 +78,6 @@ the paid time starts when the charge succeeds; use `expires_at` in the response
mpp is a payment protocol, not a browser feature. when a merchant exposes an mpp endpoint, an agent can pay that merchant directly without opening a checkout page. a browser is still useful when the task requires a site's interface, login, or checkout and the site doesn't expose the needed action through mpp.
-KERNEL's mpp endpoint handles a different purchase: **the agent pays KERNEL for browser access**. it lets an agent with a compatible wallet acquire one browser without account setup. the purchase returns connection urls only; it doesn't provision a vault or merchant payment credential.
+KERNEL's mpp endpoint handles a different purchase: **the agent pays KERNEL for browser access**. it lets an agent using the link cli acquire one browser without account setup. the purchase returns connection urls only; it doesn't provision a vault or merchant payment credential.
for merchant checkout with KERNEL's wallet integrations, use [payments for browser agents](/browsers/payments) with an account-based browser. for projects, api keys, and ongoing browser management, use [account-based browser access](/introduction/create).
From 7c6e3561bbcd81e20c97978558e0fd032758490e Mon Sep 17 00:00:00 2001
From: Anna Wang
Date: Tue, 29 Sep 2026 08:43:08 -0700
Subject: [PATCH 09/10] Update mpp.mdx
---
info/mpp.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/info/mpp.mdx b/info/mpp.mdx
index 0d5c6bb5..ef4d5003 100644
--- a/info/mpp.mdx
+++ b/info/mpp.mdx
@@ -5,7 +5,7 @@ description: "buy a KERNEL browser through mpp with link"
[machine payments protocol (mpp)](https://mpp.dev/) is an open protocol co-authored by stripe and tempo. it uses an http `402` challenge so an agent can pay for an api request without a checkout page. KERNEL accepts mpp payments for browser sessions: an agent pays with a stripe shared payment token, then connects to the browser over cdp. this route doesn't require a KERNEL account or api key.
-the offer is $0.50 for one stealth, headful browser for 30 minutes by default. read the `402` challenge for the current price and duration before paying.
+the mpp price is $0.50 for one stealth, headful browser for 30 minutes. read the `402` challenge to confirm the current price and duration before paying.
## How the payment works
From e823419cd8510c1afe78b8bf6973ae8961914ceb Mon Sep 17 00:00:00 2001
From: Anna Wang
Date: Tue, 29 Sep 2026 08:43:18 -0700
Subject: [PATCH 10/10] Update mpp.mdx
---
info/mpp.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/info/mpp.mdx b/info/mpp.mdx
index ef4d5003..4e9cbc18 100644
--- a/info/mpp.mdx
+++ b/info/mpp.mdx
@@ -7,7 +7,7 @@ description: "buy a KERNEL browser through mpp with link"
the mpp price is $0.50 for one stealth, headful browser for 30 minutes. read the `402` challenge to confirm the current price and duration before paying.
-## How the payment works
+## How the mpp payment flow works
1. `link-cli mpp pay` sends `POST /mpp/browsers` without a payment credential. KERNEL returns `402 Payment Required` with the offer in `WWW-Authenticate: Payment`.
2. the link cli gives you an approval url. after you approve the payment through link, it retries the request with `Authorization: Payment `.