PFlux DOCS
GitHub Integration enquiries Start integrating
REFERENCE/FEES & GAS

Fees & gas

What P2Flux charges, where it comes out, and who pays the network for each kind of transaction.

ONE-TIME1%
RECURRING2% + 0.10 USDC
GAS CAP0.05 USDC per renewal
SET INContract constants

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.

ON A 100.00 USDC PAYMENTAMOUNT
Buyer is debited, in USDC100.000000
Recipient receives99.000000
P2Flux fee (1%)1.000000

Verification checks this arithmetic against the receipt: if the fee is not exactly 1% of the signed amount, the payment does not verify.

MINIMUM AMOUNT

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 CUSTOMER PAYS AMOUNT PLUS GAS

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:

ON A 29.00 USDC RENEWALAMOUNTFUNDED BY
Customer is debited29.020000Customer
Recipient receives28.320000—
P2Flux fee (2% of 29.00)0.580000Merchant, out of the amount
Subscription execution fee0.100000Merchant, out of the amount
Gas reimbursement0.020000Customer, added to the amount

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.

MINIMUM AMOUNT

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.

PAY PER REQUESTPREPAID BALANCE
Fee1%, at least 0.003 USDC3% of each payout
TakenIn the payment transactionWhen the seller is paid out
Seller receivesAt onceAt 2 USDC, or weekly
Smallest price0.01 USDC0.01 USDC
On a 0.05 USDC request the seller gets0.0470000.048500
On a 1.00 USDC request the seller gets0.9900000.970000

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.

PARTGOES TO
Amount less both feesThe recipient address on the subscription.
P2Flux fee (2%)The fee wallet — P2Flux revenue, never used to pay for gas.
Execution fee + gas reimbursementThe gas treasury — the wallet that funds transaction execution, kept separate from revenue so the money that pays for transactions is accounted for separately from profit.

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.

ON A 100.00 USDC PAYMENT, NETWORK FEE QUOTED AT 0.004AMOUNTGOES TO
Buyer is debited, in USDC100.004000—
Recipient receives98.900000The merchant
P2Flux fee (1%)1.000000Fee wallet
Fixed network fee (merchant-funded)0.100000Gas treasury
Quoted network fee (buyer-paid)0.004000Gas treasury
Buyer needs in ETH0—
A QUOTE HAS A LIFETIME

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.

PER-WALLET PROTECTIONS

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.

ACTIONON CHAIN?WHO PAYS GAS
Signing the subscription authorizationNoNobody. Signing is done in the wallet and is not a transaction, so it costs nothing.
Granting the token approval, at setupYesThe customer, in ETH — an ordinary wallet transaction. Or, for a wallet holding no native currency at all, they sign the approval instead and P2Flux sends it, taking the quoted network cost out of their USDC in the same transaction. The checkout decides which by reading their balance; a customer who can pay their own gas still does.
Each renewalYesP2Flux submits it and pays the ETH up front. The cost is converted to USDC at the Chainlink ETH/USD rate and added to that renewal, so the customer reimburses it in the stablecoin they already hold. The customer needs no ETH at renewal time.
Sending a refundYesThe merchant, in ETH. A refund is an ordinary transfer from your own wallet.
CancellingYesThe customer, in ETH. Revoking is a transaction from their own wallet, and only they can send it. Removing the token approval — which stops collection without revoking anything — can be signed instead, so a customer with no ETH is never trapped in a subscription.

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.

quote ≤ both ceilingsThe renewal proceeds and the customer is debited the amount plus that quote.
GAS_TOO_HIGHThe quote exceeds the customer’s ceiling or the 0.05 cap. Nothing is broadcast and nothing is spent — the charge waits for cheaper conditions rather than being made at a price nobody agreed to. The period stays open.
GAS_QUOTE_UNAVAILABLEThe price feed could not be trusted, so there is no defensible amount to debit. Again nothing is sent.

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.

Something more than a standard integration?
Marketplace flows, platform billing and custom settlement logic.
Discuss an integration