Request a challenge, create a Base USDC x402 proof, then retry the exact resource with the payment header.
const challenge = await fetch("/v1/unlocks/upcoming?days=30");
if (challenge.status !== 402) throw new Error("Expected payment challenge");
const required = challenge.headers.get("PAYMENT-REQUIRED");
const payment = await yourX402Client.createPayment(required);
const paid = await fetch("/v1/unlocks/upcoming?days=30", {
headers: { "PAYMENT-SIGNATURE": payment }
});