One integration
Use a single provider-neutral response for local and cross-chain routes.
PFOF Partner API
One server-side request returns PFOF's strongest executable route.
Use a single provider-neutral response for local and cross-chain routes.
PFOF compares eligible venues and only returns a validated winner.
The API prepares calldata. The connected wallet still reviews and signs.
Integration contract
Keep the PFOF key in your backend. Request a wallet-bound route in token base units, pass only the returned transaction to the user, and report the confirmed execution for attribution.
01DiscoverRead chains and token addresses02QuoteRequest fresh wallet-bound calldata03ApproveSend approval first when supplied04ExecuteSign before the route expires05ReportSubmit the confirmed execution hashAmounts: integer base-unit strings
Native token: 0x0000000000000000000000000000000000000000
Slippage: basis points (50 = 0.50%)
Quote lifetime: use expiresAt; never cache a route
Approval: optional approval.transaction, then wait for confirmation
Execution: send transaction target, data, value and chainId unchanged
Attribution: POST routeId + transactionHash after confirmation
Retries: honor Retry-After and X-RateLimit-* headers
Support: dracula@pfof.exchangeVersioned from day one
The private beta starts with the endpoints builders actually need. Catalog responses are cached; route requests are live, wallet-specific, and short-lived.
GET/api/v1/chainsNetworksGET/api/v1/tokensToken catalogPOST/api/v1/quoteBest routePOST/api/v1/settlementsVerify executionGET/api/v1/earningsPartner earningsGET/api/v1/healthService health// Server-side only. Never send the API key to a browser.
const headers = {
Authorization: `Bearer ${process.env.PFOF_API_KEY}`,
"Content-Type": "application/json",
};
const response = await fetch("https://pfof.exchange/api/v1/quote", {
method: "POST",
headers,
body: JSON.stringify({
clientReferenceId: orderId,
walletAddress: userAddress,
fromChainId: 4663,
toChainId: 8453,
fromTokenAddress: sourceToken,
toTokenAddress: destinationToken,
fromAmount: amountInBaseUnits,
slippageBps: 50,
}),
});
if (!response.ok) throw await response.json();
const { route } = await response.json();
// Return route to the client for wallet review and signing.
// After confirmation, report { routeId, transactionHash }
// to POST /api/v1/settlements from your server.Partner payouts
Execution-verified earnings appear in /api/v1/earningswhile PFOF reconciles provider revenue. During private beta, payouts are sent on the agreed schedule to the partner's verified wallet.
01SubmitProject ID, wallet, chain, asset, and contact02VerifySign the one-time message PFOF sends03TrackRead verified accruals from the earnings endpoint04ReceiveReconciled payout to the registered walletEmail: dracula@pfof.exchange
Include: partner/project ID
Include: EVM payout address
Include: preferred chain and asset
Include: operational contact email
PFOF sends a one-time portal invitation.
Open it, connect the payout wallet, and sign the message.
Never send a seed phrase, private key, API key,
wallet export, or other secret.Built for production access
Machine-readable specification: OpenAPI 3.1 · AI integration brief: llms.txt
Developer access