Exchange Integration
Pennysia sends the same quote request to every connected exchange. The best rate is selected. Integration is free. There are no listing fees.
Pennysia is not a competing exchange. It is the marketplace layer: venues integrate once, use a shared interface, and reach traders without building separate distribution. This reduces the barrier for new exchanges to compete.
Pennysia provides the frontend, wallet flow, and user experience. Partners provide a quote API and execution calldata.
Contact us to start onboarding. See Fees for how Pennysia earns.
Requirements
| Item | Detail |
|---|---|
| Quote API | Sell/buy token, amount, chain → output, gas, calldata |
| Calldata | Settlement (or user for hard intents) is caller/receiver |
| Same-chain | SYNC routes settle on Ethereum in one tx |
| API key | Optional, for rate limits |
Route types
SYNC (default)
Same-transaction swap through Settlement. Calldata must work when Settlement is msg.sender and buy tokens land on Settlement.
venue = quote.tx.to
allowanceTarget = quote.spender
callData = quote.tx.data
value = quote.tx.value
quotedReturn = expected outputReject: bridges, cross-chain hops, gasless relayer pulls, intent-only APIs.
Hard intents
CoW Protocol, UniswapX, Velora Delta. User signs off-chain; solver fills. Settlement not involved.
SODAX
Cross-chain intents. Settlement opens on Ethereum; fill is async on the hub chain. Contact Pennysia for onboarding.
Deposit-address
Walletless lanes such as InstaSwap, RocketX CEX, and RocketX Private. The user transfers sell tokens to an ephemeral deposit address; fill is async off Settlement. Quote APIs return estimated output and deposit metadata rather than Settlement calldata. Contact Pennysia for onboarding.
Quote response
{
"sellToken": "0x...",
"buyToken": "0x...",
"sellAmount": "1000000000000000000",
"buyAmount": "3500000000",
"gasEstimate": "150000",
"tx": { "to": "0x...", "data": "0x...", "value": "0" },
"spender": "0x..."
}Normalized into NormalizedQuote via backend SDK adapters.
Testing checklist
- Quote output matches on-chain execution
- Calldata works when Settlement calls the venue
- Buy tokens arrive on Settlement, not the user
- Spender matches approval target
- Failed routes do not block fallback routes
- Gas estimate is reasonable
- API handles parallel fanout volume
Onboarding
- Contact us with exchange name and API docs
- Pennysia builds an adapter in
src/aggregators/ - Test on mainnet fork and staging
- Exchange added to
LAUNCH_SOURCESin backend SDK - Live in quote fanout and source list
Each exchange gets a canonical ID (e.g. kyberswap, zerox). Token support tracked in @pennysia/token-list.
SDKs
- Backend SDK: implement
LiquidityAdapter - Contracts SDK: build Settlement routes
- Settlement: on-chain execution
Questions: dev@pennysia.com
Webapp architecture
Reference app: webapp-interface.
User → POST /api/quotes/fanout → rank quotes → rebuild route → lane dispatch → wallet sign → execute| Lane | Routes |
|---|---|
| Settlement SYNC | DEX/aggregator via executeSwap |
| SODAX | Cross-chain intents |
| Hard intents | CoW, UniswapX, Velora Delta |
| Deposit-address | InstaSwap / RocketX CEX / RocketX Private deposit → operator fill |
| Package | Role |
|---|---|
@pennysia/backend-sdk | Fanout, ranking, source manifest |
@pennysia/contracts-sdk | Settlement routes and execution |
@pennysia/token-list | Token fallback |
Policies: Ethereum Mainnet only · Settlement address from contracts-sdk · Auto Fallback packs SYNC routes · API keys server-side only
Integrators implement LiquidityAdapter and register in the source manifest.
Related: Developer Guide · Swap Guide route types