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.

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.

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.

Gas in a subscription

A subscription involves up to four 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. This is an ordinary wallet transaction and is the one point in the subscription where they need native currency.
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.
CancellingYesThe customer, in ETH. Revoking is a transaction from their own wallet.

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