PFOF Partner API

Put the route engine inside your product.

One server-side request returns PFOF's strongest executable route.

01

One integration

Use a single provider-neutral response for local and cross-chain routes.

02

Best execution

PFOF compares eligible venues and only returns a validated winner.

03

User controlled

The API prepares calldata. The connected wallet still reviews and signs.

Integration contract

Server-side credentials. User-side signatures.

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 addresses
02QuoteRequest fresh wallet-bound calldata
03ApproveSend approval first when supplied
04ExecuteSign before the route expires
05ReportSubmit the confirmed execution hash
integration-notes.txt
Amounts: 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.exchange

Versioned from day one

A small API with clear boundaries.

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/chainsNetworks
GET/api/v1/tokensToken catalog
POST/api/v1/quoteBest route
POST/api/v1/settlementsVerify execution
GET/api/v1/earningsPartner earnings
GET/api/v1/healthService health
server.ts
// 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

Register one verified payout wallet.

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 contact
02VerifySign the one-time message PFOF sends
03TrackRead verified accruals from the earnings endpoint
04ReceiveReconciled payout to the registered wallet
payout-onboarding.txt
Email: 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

Tap into all the liquidity, all the time. Ribbit.

Machine-readable specification: OpenAPI 3.1 · AI integration brief: llms.txt

Developer access

Tell Us What You're Building and Get API Access

dracula@pfof.exchange