Fees & gas
What P2Flux charges, where it comes out, and who pays the network for each kind of transaction.
Fees are contract constants, not configuration: readable on chain and unchangeable without deploying a new contract. They are split out inside the payment transaction — there is no invoice and no balance to deduct from.
One-time payments
The fee is 1% of the amount, taken in the same transaction that pays you. The buyer sends that transaction themselves, so its network gas is paid in ETH by the buyer and never appears in these figures.
Verification checks this arithmetic against the receipt: if the fee is not exactly 1% of the signed amount, the payment does not verify.
The hosted API refuses to create a one-time payment below 0.01 USDC — under a cent the fee cannot cover the verification work a payment costs the service. A hosted-service boundary, not a contract rule: the splitter itself has no floor, and it applies only when an intent is created, never to verifying one that already exists.
Recurring payments
A renewal has three separate pieces of money, and they do not all come from the same side.
- The P2Flux fee, 2% of the amount. Deducted from the amount, so the merchant funds it.
- The subscription execution fee, a flat 0.10 USDC per charge. Also deducted from the amount, so the merchant funds this too. In the contract this constant is named NETWORK_FEE, which is easy to misread — it is a fixed P2Flux fee for executing the renewal, not blockchain gas and not a pass-through of it.
- The gas reimbursement. Added on top of the amount, so the customer funds it. It is what the customer pays back for the network cost of a renewal P2Flux submitted on their behalf.
The debit is not simply the plan price. The contract charges amount + gas reimbursement, so a customer on a 29.00 plan is debited 29.00 plus a few cents in the same stablecoin. The amount they authorized covers both — the signature carries a separate ceiling for the reimbursement.
On a 29.00 USDC renewal where the network cost of that transaction quoted at 0.02 USDC:
The reimbursement is whatever that specific transaction is quoted to cost — 100% of it, with no markup and no haircut. It is not a fixed figure, so it moves with the network. If it quotes at 0.02 USDC the customer is debited 29.02; if conditions are cheaper it is less.
The contract refuses an amount that does not exceed the two merchant-funded fees, so a recurring charge has to be meaningfully larger than 0.10 USDC. The exact floor is derived from the fee constants rather than hardcoded.
AI agent payments
When an AI agent pays a site or an API over x402, the fee depends on how it pays. Either way the fee is taken on chain, and P2Flux’s relayer pays the network gas — the agent needs USDC and nothing else.
Per request, the fee is never more than half the payment. With a prepaid balance the agent deposits at least 1 USDC once into the x402 payment-channel contract and pays each request with a signed voucher; there is no transaction per request. An unused balance stays the agent’s. See AI agents (x402).
Where each part goes
One transaction, three destinations, none of them a P2Flux balance the merchant later withdraws from.
Blockchain gas
Gas is the blockchain’s own charge for processing a transaction. It is set by the network, paid in ETH, varies with congestion, and is entirely separate from every P2Flux fee above.
Paying the network fee in USDC
A one-time payment can be made by a buyer whose wallet holds USDC and no ETH at all. They sign one authorization instead of sending a transaction; P2Flux submits it and pays the ETH, and the buyer reimburses that cost in USDC inside the same transaction. Nothing is fronted on credit — the fee and the payment settle together, or neither does.
This is opt-in, per payment: an integration asks for it with gas_payment_mode: 'payment_token' when it creates the payment. Without that field nothing changes — the buyer sends the transaction, pays ETH for gas, and the fees are exactly as they were.
The buyer pays two things beyond the price. The network fee is a price quoted before they sign, from live chain conditions plus a margin for drift; it is what they accept and exactly what is charged, and it goes to the gas treasury that funded the transaction. It is not a measurement of the gas the transaction turns out to burn, and the docs and API never call it one. The fixed network fee of 0.10 USDC is merchant-funded — taken out of the amount, exactly like the network fee on a subscription collection — and goes to the gas treasury. It is never added to what the buyer is debited.
The price is signed with an expiry — a couple of minutes — and that same instant is inside the buyer’s own authorization, so a stale quote cannot be executed by anyone, including P2Flux. If it lapses before the buyer signs, the checkout asks for a fresh price rather than charging a stale one or quietly charging more.
The flat fee is per token, not a universal number: 0.10 USDC is the USDC figure, and another currency will have its own. Ask GET /v1/capabilities which networks, tokens and operations support this — a token that is technically capable is not the same as a network P2Flux has deployed and tested, and the endpoint reports the second.
Subscriptions get the same treatment where it matters. A customer with no ETH can start one, repair an allowance that ran short, or remove that allowance entirely, by signing rather than sending. Those pay the quoted network cost and nothing else: a subscription already pays its fixed network fee on every collection, and charging one for the setup would be billing twice for the same thing. Live on Base Mainnet and Base Sepolia.
There is no quota on successful sponsored transactions: a buyer wallet may make as many as it likes. What is bounded is what can cost P2Flux gas it is not repaid for. A wallet whose sponsored transactions revert on chain twice in a day is refused sponsorship for the rest of that day (PAYER_REVERTS); one whose simulations keep failing is asked to wait (RATE_LIMITED); and a wallet may have one sponsored transaction unresolved on chain at a time (PAYER_UNRESOLVED). An emergency ceiling of hundreds of broadcasts an hour exists as a sanity brake and is never reached by ordinary use. Every refusal carries retry_after and spends nothing; the hosted checkout tells the buyer to try again later, or to pay the network fee with ETH where their wallet can. Subscription collections are not sponsored transactions and are never counted.
Gas in a subscription
A subscription involves several distinct actions, and they do not all cost gas. The practical question — does a customer need ETH every month? — is answered by the third row: no.
Two ceilings apply to the reimbursement, and the lower one wins: the maximum the customer agreed to when they authorized the subscription, and a hard cap of 0.05 USDC written into the contract, which no authorization can raise.
If the quote turns out slightly low, the difference is absorbed on the P2Flux side rather than billed to anyone afterwards — a renewal is never re-charged to correct an estimate.
Where the numbers live
The values on this page come from the contract definitions in P2Flux/contracts, and are readable on chain: FEE_BPS and NETWORK_FEE on the recurring contract, GAS_REIMBURSEMENT_HARD_CAP for the ceiling, and the one-time rate in the splitter. A subscription’s own fee_bps and network_fee are echoed by /v1/subscriptions/resolve, so a checkout can state the terms without hardcoding them.