Early access

Add pay-per-request billing to any API in a few lines, and give agents one client that pays automatically over x402.

It focuses on developer experience: five minutes from install to a paid endpoint, a sandbox that behaves like production, and a non-custodial flow where funds never rest in Paycurl.

Core features
5
Status
Early access
Network
Solana
Your funds
Non-custodial
Middleware for Express, Next.js and Cloudflare Workers that returns a 402 quote and verifies the paymentClient wrapper (paycurl.fetch) that reads the quote, asks the connected wallet to sign, and retries the requestTest mode with fake balances and a sandbox facilitator so the full loop works without real fundsSeller dashboard with per-endpoint price, call counts, and earningsPublic directory of paid endpoints with a copy-paste snippet for each
Paid requests, live ledger
TimeEndpointPayerAmountStatus
2 min agoGET /v1/tides9wFq...RtLm0.002 USDCSettled
4 min agoGET /v1/tides3nBx...Yp7d0.002 USDCSettled
9 min agoGET /v1/forecastHk5e...2cVa0.010 USDCSettled
14 min agoPOST /v1/route9wFq...RtLm0.025 USDCPending
21 min agoGET /v1/tidesUd4s...8zQk0.002 USDCRefused: quote expired
33 min agoGET /v1/forecast3nBx...Yp7d0.010 USDCSettled

Paid calls per hour, last 24h

Peak at 15:00 UTC when two agents polled the forecast endpoi

Endpoints and prices

  • GET /v1/tides0.002 USDC per call, 214 calls todayLive
  • GET /v1/forecast0.010 USDC per call, 71 calls todayLive
  • POST /v1/route0.025 USDC per call, 27 calls todayLive
  • GET /v1/buoys0.001 USDC per call, 0 calls todayTest mode
Features

Paycurl, feature by feature.

Built for aPI and data providers who want micro-pricing without a billing stack, and developers building agents that need to buy data or compute per call.

Middleware for Express, Next.js and Cloudflare Workers that returns a 402 quote and verifies the payment

Planned

Client wrapper (paycurl.fetch) that reads the quote, asks the connected wallet to sign, and retries the request

Planned

Test mode with fake balances and a sandbox facilitator so the full loop works without real funds

Planned

Seller dashboard with per-endpoint price, call counts, and earnings

Planned

Public directory of paid endpoints with a copy-paste snippet for each

Planned
Client wrapper

Client wrapper (paycurl.fetch) that reads the quote, asks the connected wallet to sign, and retries the request.

paycurl.fetch reads the 402 quote, checks it against your spending cap, asks Phantom, Solflare or Backpack to sign, and retries with the payment attached.

Planned

agent.ts

typescript
import { paycurl } from "@paycurl/client";

const res = await paycurl.fetch(
  "https://api.tidegauge.dev/v1/tides?port=SEA",
  {
    wallet,               // connected Solana wallet adapter
    maxPrice: "0.01",     // refuse quotes above 0.01 USDC
    asset: "USDC"
  }
);

const data = await res.json();
console.log(res.headers.get("x-paycurl-receipt"));
Middleware

Middleware for Express, Next.js and Cloudflare Workers that returns a 402 quote and verifies the payment.

Mount the middleware and list the routes you want to charge for. Unpaid requests get a 402 with a quote. Paid retries are verified before your handler runs.

Planned

server.js (Express)

javascript
import express from "express";
import { paycurl } from "@paycurl/express";

const app = express();

app.use(paycurl({
  payTo: "4Zt8RkXw2pQyN7cVbH3sJdUe9mFa6LgTq5Yx1WnKrPcB",
  network: "solana",
  routes: {
    "GET /v1/tides": { price: "0.002", asset: "USDC" },
    "GET /v1/forecast": { price: "0.010", asset: "USDC" }
  }
}));

app.get("/v1/tides", (req, res) => res.json({ port: "SEA", high: "3.1 m" }));
app.listen(3000);
Test mode

Test mode with fake balances and a sandbox facilitator so the full loop works without real funds.

Sandbox wallets hold fake USDC and a sandbox facilitator settles instantly. Quotes, signatures, retries and refusals behave the same as in production.

Planned

Sandbox wallets

WalletRoleFake balanceCalls made
test-agent-1Payer5.00 USDC23
test-agent-2Payer0.04 USDC17
test-sellerSeller0.62 USDC40
test-brokePayer0.00 USDC8 refused
Seller dashboard

Seller dashboard with per-endpoint price, call counts, and earnings.

See which routes earn, edit a price without redeploying, and check how many payers were refused and why.

Planned

Last 7 days by endpoint

EndpointPriceCallsUnique payersEarned
GET /v1/tides0.002 USDC1,12672.25 USDC
GET /v1/forecast0.010 USDC38853.88 USDC
POST /v1/route0.025 USDC9432.35 USDC
GET /v1/buoys0.001 USDC000.00 USDC
Directory

Public directory of paid endpoints with a copy-paste snippet for each.

Listed endpoints show price, a live status check and a copy-paste call, so an agent developer can try one in a minute.

Planned

Newly listed endpoints

  • tidegauge.dev /v1/tides0.002 USDC per call, tide heights for 40Live
  • parcelhound.io /v1/track0.004 USDC per call, parcel status lookuLive
  • lexrate.xyz /v1/fx0.001 USDC per call, FX rates updated eaLive
  • openclause.app /v1/summarize0.030 USDC per call, contract summaryTest mode

It focuses on developer experience: five minutes from install to a paid endpoint, a sandbox that behaves like production, and a non-custodial flow where funds never rest in Paycurl.

How it works

3 steps from start to first result.

Install and mountAdd the middleware for Express, Next.js or Cloudflare Workers and list the route
Test in the sandboxCall your route with a fake-balance wallet and watch the quote, signature and re
Switch to liveFlip a route from test to live. Payers send USDC straight to your Solana wallet,
Under the hood

Open by default.

Every screen reads from the same model. Live parts read public onchain data; nothing ever asks your wallet to sign.

Read the docs
paycurl.json
{
  "product": "Paycurl",
  "network": "solana",
  "features": [
    {
      "name": "Middleware for Express, Next.js and Cloudflare W",
      "status": "planned"
    },
    {
      "name": "Client wrapper (paycurl.fetch) that reads the qu",
      "status": "planned"
    },
    {
      "name": "Test mode with fake balances and a sandbox facil",
      "status": "planned"
    },
    {
      "name": "Seller dashboard with per-endpoint price, call c",
      "status": "planned"
    }
  ]
}

What works today.

Live features work today. Planned ones are next on the roadmap, in this order.

Middleware for Express, Next.js and Cloudflare Workers that returns a 402 quote and verifies the paymentPlanned
Client wrapper (paycurl.fetch) that reads the quote, asks the connected wallet to sign, and retries the requestPlanned
Test mode with fake balances and a sandbox facilitator so the full loop works without real fundsPlanned
Seller dashboard with per-endpoint price, call counts, and earningsPlanned
Public directory of paid endpoints with a copy-paste snippet for eachPlanned

Questions.

Short answers. The docs have the rest.

What is Paycurl?

Add pay-per-request billing to any API in a few lines, and give agents one client that pays automatically over x402. It focuses on developer experience: five minutes from install to a paid endpoint, a sandbox that behaves like production, and a non-custodial flow where funds never rest in Paycurl.

What works today?

Paycurl is in development. Every feature is on the status list with what ships next, and the app opens in a sample workspace so you can see how it will work.

Do I need a wallet?

No. You can explore without one. Connecting a Solana wallet only shares your public address so Paycurl can read your balances; it never asks you to sign a transaction.

Who is it for?

API and data providers who want micro-pricing without a billing stack, and developers building agents that need to buy data or compute per call.

Middleware for Express, Next.js and Cloudflare Workers that returns a 402 quote and verifies the payment.

Add pay-per-request billing to any API in a few lines, and give agents one client that pays automatically over x402.