P– PayForGoals.com Try it out

Matchday · On demand

The greatest scorelines
in football history.
On tap.

The board scores only · names coming soon
7–1
3–3
4–3
2–1
5–1
0–0
6–1
3–2

Every iconic result, ready to relive in a single request. PayForGoals.com returns the scoreline - the comeback, the collapse, the impossible final - straight to your terminal.

Same scores, two ways to pay: on-chain over Tempo, or by card over Stripe. Pick the endpoint that matches your agent's wallet.

One detail. We return the score, and only the score. Team names are a premium feature, coming soon.

How it works

One resource. Two rails. No checkout.

Agentic commerce, made concrete: a software agent pays per request over the Machine Payments Protocol. Free to browse, then pick how your agent pays. The same scoreline is exposed twice - under /tempo/ for on-chain settlement and /stripe/ for cards - differing only by rail. Either way the client pays per request: no signup, no checkout page. Copy a command and run it.

Free trial · either rail 1

Free trial

One free score to get started. Inspect the API shape with no payment, no headers and no rail to choose. Every other match is pay-per-view.

GET /api/v1/scores/trial
curl https://www.payforgoals.com/api/v1/scores/trial
Tempo rail

On-chain · pathUSD

mppx dialect
A specific match 0.01

One result by id. 0.01 pathUSD per request, settled on-chain.

GET /api/v1/tempo/scores/match/{id}
npx mppx https://www.payforgoals.com/api/v1/tempo/scores/match/1 \
  --network testnet
Decade Pass · grants 3 0.05

One payment of 0.05 pathUSD unlocks the 80s, 90s and 00s - three calls on a reusable session.

GET /api/v1/tempo/scores/classics/{80s|90s|00s}
npx mppx https://www.payforgoals.com/api/v1/tempo/scores/classics/80s \
  --network testnet
Stripe rail

Cards · Shared Payment Tokens

native dialect
A specific match $1.00

Same result by id. $1.00 USD per request - priced to clear Stripe's card minimum.

GET /api/v1/stripe/scores/match/{id}
# native MPP 402 - an SPT-capable agent
# presents a Shared Payment Token and retries
curl https://www.payforgoals.com/api/v1/stripe/scores/match/1
Decade Pass · grants 3 $3.00

One payment of $3.00 USD unlocks all three decades - same metered session, settled on a PaymentIntent.

GET /api/v1/stripe/scores/classics/{80s|90s|00s}
curl https://www.payforgoals.com/api/v1/stripe/scores/classics/80s
What comes back · once you've paid

The first paid request returns a 402. After the client settles and retries, the API serves the scoreline with a payment receipt.

{
  "tier": "pay-per-view",
  "scoreline": {
    "id": 1,
    "home_score": 7,
    "away_score": 1,
    "year": 2014,
    "teams": null
  }
}

Premium · roadmap

Team names.
Coming soon.

Right now a PayForGoals.com result tells you it finished 7–1 and trusts your football memory to do the rest.

For those who insist on labels, the Premium tier will attach team names to every scoreline. Pricing to be announced, probably after extra time.

scoreline #1 premium
7–1
home
away

unlock with Premium · soon™

Levelling with you

Wait - is this for real?

Yes, in the way a score API without teams can be real. PayForGoals.com is a working demo of the Machine Payments Protocol (MPP), built by Square1 on our open-source package square1/laravel-mpp.

MPP lets a server charge for a request using nothing but HTTP. There's no signup, no checkout page, no stored card. The buyer is usually a software agent, and it pays per request, in the moment, then moves on. This is what agentic commerce looks like in practice: machine payments settled inline, with no human at a checkout.

Those paid PayForGoals.com endpoints above are gated by exactly this package. The same 402 loop runs on two rails: a pathUSD transfer on Tempo's test network, or a Stripe PaymentIntent confirmed from a Shared Payment Token.

The loop
  1. 402
    Payment Required

    The unpaid request comes back with a signed challenge: amount, method, scope and expiry.

  2. pay
    Settle & retry

    The agent settles on its rail, then retries the same request with a payment credential.

  3. 200
    Resource + receipt

    The server verifies settlement, serves the data, and returns a receipt with the settlement reference.

Getting started

Get your classic goals today!

Pick a settlement rail. Tempo runs fully end to end with the stock npx mppx client. Stripe returns the same kind of paid resource after the buyer presents an SPT through Link or a test token.

Step 1 · Wallet

Create & fund a testnet account

A throwaway wallet, funded with test pathUSD. No real money touches this.

npx mppx account create
npx mppx account fund --network testnet
Step 2 · Call it

Hit a paid endpoint

mppx fetches the 402, signs the transfer, and retries - all in one command.

npx mppx https://www.payforgoals.com/api/v1/tempo/scores/match/1 \
  --network testnet --account main
Unpaid → 402 application/problem+json
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="LRt7…w7k",
  realm="www.payforgoals.com", method="tempo",
  intent="charge", request="<base64>",
  expires="2026-06-23T12:57:10.224Z"

{
  "type": "https://paymentauth.org/problems/payment-required",
  "title": "Payment Required",
  "status": 402,
  "detail": "Payment is required.",
  "challengeId": "LRt7…w7k"
}

request decodes to → {"amount":"10000","currency":"0x20c00000…","methodDetails":{"chainId":42431},"recipient":"0x0dcd39…"}
10000 = 0.01 pathUSD at 6 decimals.

Paid → 200 on-chain settled
HTTP/1.1 200 OK
Payment-Receipt: <base64url-json>

# decoded receipt:
{
  "method": "tempo",
  "status": "success",
  "timestamp": "2026-06-23T12:51:42.163Z",
  "reference": "0x3da1…913b"
}

reference is the settled transaction hash. The funds - 0.01 pathUSD - land at the recipient on Tempo testnet. View the recipient wallet.

Decade Pass · pay once, reuse the session

One payment, three decades

A metered endpoint charges once and hands back a Payment-Session with credits. Present that session on the sibling endpoints and they're served with no new payment, until the credits run out.

# 1 · pay once - issues a 3-credit session
npx mppx https://www.payforgoals.com/api/v1/tempo/scores/classics/80s \
  --network testnet --account main -i

→ Payment-Session: id="sess_…EP",
    remaining="2", scope="tempo.classics"
# 2 · reuse it - no charge, credits decrement
curl https://www.payforgoals.com/api/v1/tempo/scores/classics/90s \
  -H 'Authorization: Payment session="sess_…EP"'

→ 200 OK · Payment-Session remaining="1"

curl https://www.payforgoals.com/api/v1/tempo/scores/classics/00s \
  -H 'Authorization: Payment session="sess_…EP"'

→ 200 OK · Payment-Session remaining="0"

FAQ

Agentic commerce and machine payments, explained.

The short version of what this demo is and how an agent pays for a request.

What is agentic commerce?

Agentic commerce is buying and selling where the customer is a software agent rather than a person clicking through a checkout. The agent discovers a price, pays for exactly what it needs, and moves on. PayForGoals.com is a small working example: an agent pays per request for a single football scoreline.

What is the Machine Payments Protocol (MPP)?

The Machine Payments Protocol (MPP) is an open way for a server to charge for an HTTP request and for a client to pay it using standard web mechanics. An unpaid request returns an HTTP 402 Payment Required challenge; the client settles it and retries, and the server returns the resource plus a receipt. It is the rail-agnostic plumbing underneath this demo.

How do machine payments work here?

Machine payments happen inline, per request. There is no account, no checkout page and no stored card. The agent reads the 402 challenge, settles it on one of two rails, then replays the request with an Authorization: Payment header. Settlement is verified before the resource is served.

Which payment rails does PayForGoals.com support?

Two. Stripe Shared Payment Tokens (SPTs), settled inline as a PaymentIntent, and Tempo pathUSD, an on-chain stablecoin transfer on the Tempo testnet. The same scoreline is sold over both rails; only the wire dialect of the 402 differs.

Do I need an account or a card on file?

No. That is the point of agentic commerce: the buyer pays for one request in the moment, then leaves. Nothing is stored and there is no signup. You can inspect the API shape for free with a single trial score before paying for anything.

Is this a real protocol or just a gimmick?

The demo is real and the payments settle for real (Stripe in test mode, Tempo on testnet). The gating is provided by Square1's open-source package square1/laravel-mpp, which drops into any Laravel app. Stripe live acceptance is currently US-gated; Tempo runs on testnet.