Skip to main content
By default you pay with prepaid credits. You can also pay per call with stablecoins over two rails:
  • x402 pays in USDC on Base, at x402.orthogonal.com.
  • MPP (Machine Payments Protocol) pays in USDC.e on Tempo, at mpp.orthogonal.com.
Both work the same way: your request gets a 402 Payment Required, your client signs a payment and retries, and the payment is settled before the call runs.

x402

Endpoints live at https://x402.orthogonal.com/{api}/{path}.

CLI

Pay from the terminal with purl, a curl-compatible client that speaks x402. You need:
  • A wallet funded with USDC on Base. Run purl balance to print your address, then send USDC to it.
# Install
brew install stripe/purl/purl

# Create a wallet, then fund it with USDC on Base
purl wallet add
purl balance          # prints your address — send USDC on Base to it

# Pay for and call the endpoint (USDC on Base, handled automatically)
purl -X POST \
  -H "Content-Type: application/json" \
  -d '{"url_to_scrape": "https://example.com"}' \
  'https://x402.orthogonal.com/olostep/v1/scrapes'

Code

Set PRIVATE_KEY to an EVM wallet holding USDC. The client handles the 402 for you.
import { wrapFetchWithPayment } from "x402-fetch";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const fetchWithPayment = wrapFetchWithPayment(fetch, account);

const res = await fetchWithPayment("https://x402.orthogonal.com/olostep/v1/scrapes", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ url_to_scrape: "https://example.com" }),
});
console.log(await res.json());
import os, requests
from eth_account import Account
from x402.clients.requests import x402_http_adapter

account = Account.from_key(os.environ["PRIVATE_KEY"])
session = requests.Session()
session.mount("https://", x402_http_adapter(account))

res = session.post(
    "https://x402.orthogonal.com/olostep/v1/scrapes",
    json={"url_to_scrape": "https://example.com"},
)
print(res.json())
Install with npm install x402-fetch viem or pip install x402 eth-account requests.

MPP

Endpoints live at https://mpp.orthogonal.com/{api}/{path}.

CLI

Pay from the terminal with mppx:
# Create and autofund a Tempo account (stored in your keychain)
npx mppx account create

# Pay for and call the endpoint
npx mppx -X POST -J '{"url_to_scrape": "https://example.com"}' \
  'https://mpp.orthogonal.com/olostep/v1/scrapes'

Code

import { privateKeyToAccount } from "viem/accounts";
import { Mppx, tempo } from "mppx/client";

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount(process.env.PRIVATE_KEY) })],
});

// fetch now settles 402 payments on Tempo
const res = await fetch("https://mpp.orthogonal.com/olostep/v1/scrapes", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ url_to_scrape: "https://example.com" }),
});
console.log(await res.json());
Install with npm install mppx viem.

Which tools support this?

Every payable tool in the catalog works with both rails. Use the integrate tool (MCP or /v1/integrate) to get a ready-to-paste snippet for any endpoint.