LupaRiel · rails, not fees

English · builder pillar · snapshot · 668 entries

x402 vs AP2 vs ACP vs MPP

Four payment rails, two settle jobs — plus PAP as the fifth rail of identity/session, not payment. x402 and MPP charge per request. AP2 and ACP authorize a purchase. PAP handles OAuth session, discovery, and guest→auth step-up before money. LupaRiel lists who appears in the research tables — it is not a marketplace and it does not invent prices, networks, or statuses.

Source: research/*.md, snapshot 2026-10-03. Spanish hubs stay canonical for the directories.

Rail Job Not Hub
x402
pay-per-request
Charge per HTTP request (APIs, data). Not a cart or delegated checkout. /en/x402/
AP2
authorization
Authorize a purchase with signed mandates. Not a 402 pay-per-call endpoint. /en/ap2/
ACP
authorization / checkout
Agentic checkout / cart / delegated payment. Not a per-API micropayment. /en/acp/
MPP
pay-per-request
Charge per request (APIs, tools, content). Not AP2 or ACP authorization. /en/mpp/
PAP
identity / session
Identity / session (OAuth, discovery, guest→auth, read vs write). Not a settle rail. Complements before money; does not replace the four payment rails. /en/pap/

pay-per-request · 331 entries · reviewed

x402

A server quotes a price with HTTP 402; the client pays and retries the same request. No cart, no checkout page.

Who maintains it. Coinbase (CDP) publishes the protocol and a reference facilitator. Open governance via the x402 Foundation / Linux Foundation.

Versus the others. Closest to MPP (both charge per request). Distinct from AP2 and ACP, which authorize purchases.

Evidence file: research/x402.md (333 rows, snapshot 2026-10-03).

Sample entries

  • Apify · production · 2026-10-15
  • Exa · production · 2026-10-15
  • Browserbase · production · 2026-10-15

authorization · 127 entries · reviewed

AP2

Signed Intent / Cart / Payment Mandates let an agent complete a purchase without holding the payment credential.

Who maintains it. Created by Google; governance donated to the FIDO Alliance (Agentic Authentication and Payments working groups).

Versus the others. Not a per-request API charge. A press-release partner is not an x402 endpoint.

Evidence file: research/ap2.md (127 rows, snapshot 2026-10-03).

Sample entries

authorization / checkout · 87 entries · reviewed

ACP

Composable checkout, cart, and delegated-payment blocks for agents. Used by Instant Checkout / Buy in ChatGPT and Checkout for Facebook.

Who maintains it. Open standard maintained by OpenAI and Stripe (Meta collaborates). Spec lives at agenticcommerce.dev.

Versus the others. A checkout/authorization protocol, not a per-API micropayment. Distinct from x402 and MPP.

Evidence file: research/acp.md (87 rows, snapshot 2026-10-03).

Sample entries

  • OpenAI · production · 2026-10-11
  • Stripe · production · 2026-10-03
  • Meta · production · 2026-10-03

pay-per-request · 149 entries · reviewed

MPP

HTTP 402 for machine-to-machine payments on APIs, tool calls, and content. No checkout UI.

Who maintains it. Co-authored by Stripe and Tempo. Docs and service directory at mpp.dev.

Versus the others. Stripe’s closest rail to x402. Not AP2 or ACP.

Evidence file: research/mpp.md (150 rows, snapshot 2026-10-03).

Sample entries

identity / session · 1 entry · reviewed

PAP

Personal Agent Protocol (“Poppy”): customers decide what access to give their personal agents, and companies set parameters for what those agents can do. The draft defines discovery (/.well-known/poppy.json), a session on the customer's behalf (it can start as a guest), OAuth sign-in on the company's own page, and one session across the company's website, APIs (OpenAPI, MCP), and agent. Built on OAuth, JWTs, HTTPS, OpenAPI, and MCP.

Who maintains it. Open standard developed by Sierra and Meta; Sierra's 2026-10-06 announcement puts it as: “an open standard Meta and Sierra are developing”. Announced 2026-10-06 with Genesys, Instinct, Rocket, Shopify, Stripe, and Walmart (the 2026-10-09 post also lists NiCE); draft 0.1 published 2026-10-09 with 35 new design partners. Apache 2.0 license.

Versus the others. Not a settle rail. Payment rails stay four: x402 · AP2 · ACP · MPP. PAP does not replace checkout or pay-per-request.

Evidence file: research/pap.md (announced 2026-10-06; draft 0.1 published 2026-10-09; not in the payment snapshot).

Sample entries

x402 Live on lupaplaza.com · price read from the live 402 on 2026-10-13

Try it: pay per call

Three real x402 endpoints. Call without payment and you get an HTTP 402 with the price and the accepts list. Pay and retry to get the JSON.

  • GET https://lupaplaza.com/api/discover?rail=x402&chain=base&max_price=0.05
    $0.01 USDC · Base Ranked search of x402 APIs listed in Plaza, filtered by rail, chain and max price.
  • GET https://lupaplaza.com/api/probe?url=https%3A%2F%2Flupapago.com%2Fapi%2Ffee%3Fpsp%3Dmobbex
    $0.01 USDC · Base One-shot check: does this URL answer HTTP 402, and what does it charge. Pass the target URL percent-encoded in url= (for example with encodeURIComponent).
  • GET https://lupaplaza.com/api/webmcp/snapshot
    $0.01 USDC · Base Compact index of mainnet x402 resources with a verified live 402.

1. See the 402 (free)

curl -i https://lupaplaza.com/api/webmcp/snapshot
# HTTP/2 402
# {"error":"payment_required","price":"$0.01","network":"eip155:8453",
#  "accepts":[{"scheme":"exact","amount":"10000","asset":"0x8335…2913", ...}]}

2. Pay and get the JSON (x402 client)

Node 18+ with ESM: the example uses top-level await, so save it as .mjs or set "type": "module" in package.json.

// npm i @x402/fetch @x402/core @x402/evm viem
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { wrapFetchWithPayment } from "@x402/fetch";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(account));
const pay = wrapFetchWithPayment(fetch, client);

const res = await pay("https://lupaplaza.com/api/discover?rail=x402&chain=base");
console.log(await res.json()); // pays $0.01 USDC on Base

Use a wallet with a small USDC balance on Base. Bad parameters with a payment header return 400 with no charge.

English hubs live at /en/x402/, /en/ap2/, /en/acp/, /en/mpp/, and /en/pap/ (identity/session). Payment directories stay on the Spanish hubs. This page is the EN comparison pillar, not a second index of every entry.