What is this?

This is an experiment inspired by x402.org to understand how machines can work together to transact US dollars.

x402 is a Coinbase project that introduces a standard for internet-native payments over stablcoins (USDC). This is a great overview of how it works.

I believe that instant US payment rails have become good enough in recent years to support instant machine to machine financial interactions.

For example, The Clearing House's Real-Time Payments (RTP) reached 71% adoption.

Earning money

If you're able to successfully reach jamshed.xyz/402, this server will send you a Real-Time Payment.

How does it work?

At a high level, the server will first respond with an error code, HTTP 402, indicating that a payment is required in order to proceed with the request.

The server will include instructions on how to make that payment.

In this case, you'll send a Real-Time Payment to the bank account number and routing number given to you.

Once the payment is complete, you (the client) send another request.

This time, you include the X-Payment header in your request, along with details about your payment that only you really know, such as the amount and your remittance description.

The server then verifies that it received a payment matching those details. If it did, your request will go through (HTTP 200), otherwise, you'll continue to see an error (HTTP 402).

This server is backed by a live US bank account through increase.com and will send and receive Real-Time Payments.

Full disclosure: I work at Increase.

Why?

This was a fun little vibecode, but hopefully it also demonstrates why:

1/ Programatic access to US banking rails is important.
2/ Agentic workflows need a way to make payments.

If you have either of these, you can make a lot of money from this site!

How do I play?

Visit jamshed.xyz/402 and follow the instructions!

For example, on your machine, run:

curl -v https://jamshed.xyz/402

Once you've made payment, send a confirmation:

curl -v https://jamshed.xyz/402 \
-H 'X-Payment: { "amount":"123", "remittance_information":"some random ASCII string", "creditor_account_number":"4567890", "creditor_routing_number":"021000021" }'

Be sure to replace the dummy data with your own.

Note that the amount field is cent denominated, so $1.23 is represented as 123.

Happy earning!