Partner Program — Now Open

Earn 0.5%
Every Swap

Embed the SyncWallet swap widget into your app with three lines of code. Every swap your users make generates 0.5% for you — paid manually by SyncHold, no contract needed.

Your Cut
0.5%
of every swap
Total Fee
1%
vs 1% avg — no extra cost
Integration
3
lines of code
Partner Fee 0.5% of swap USD value, per trade
Network WorldChain Chain ID 480
Settlement Manual You track, we pay
Setup Time <5min From zero to live
// 01 — HOW IT WORKS
The Model

Simple revenue share, zero complexity.

The total swap fee is 1%. When a user swaps through your integration, 0.5% is attributed to your wallet on our dashboard. SyncHold collects the full 1% on-chain and transfers your share manually — weekly or by threshold, your choice.

No smart contract to deploy. No trust assumptions. You earn, we track, we pay.

  • 01
    Register your appFill the form below — provide your app name and wallet address. You get an sk_… app key instantly.
  • 02
    Embed the widgetAdd one script tag and two lines of JS. The swap UI appears as a slide-up sheet inside your app.
  • 03
    Track on your dashboardEvery swap your users make appears in real time at synchold.org/sdk — volume, count, and your accumulated fee.
  • 04
    Get paidOnce your balance reaches the minimum threshold (or on request), SyncHold sends your 0.5% share to the registered wallet.
// FEE BREAKDOWN
1% Total Fee Split
SyncHold 0.5%
You (partner) 0.5%
// EXAMPLE — $10,000 swap volume
CategoryRateAmount
Total fee collected1.0%$100.00
Your partner earnings0.5%$50.00
SyncHold keeps0.5%$50.00
// NO EXTRA COST TO YOUR USERS

SyncWallet already charges a 1% swap fee. The partner split happens inside that existing fee — your users pay the same regardless of whether they swap through your app or directly.

// 02 — INTEGRATION DOCS

Three lines. Live.

The widget SDK is a plain JavaScript file — no npm, no bundler required, though both work. For deeper integrations (balances, swap quotes, World ID verification) use @synchold/worldchain-sdk, our npm package. Same app key, either way.

HTML
React
Vue
Vanilla JS
Verify (npm)
<!-- 1. Load the SDK -->
<script src="https://synchold.org/sdk/synchold-swap-sdk.js?v=1.2.0"></script>

<!-- 2. Initialise with your app key -->
<script>
  SyncHoldSwap.init("sk_your_app_key_here");
</script>

<!-- 3. Open the swap widget from any button -->
<button onclick="SyncHoldSwap.open({ tokenIn: 'WLD', tokenOut: 'USDC' })">
  Swap with SyncHold
</button>
import { useEffect } from 'react'

export function SwapButton() {
  useEffect(() => {
    const s = document.createElement('script')
    s.src = 'https://synchold.org/sdk/synchold-swap-sdk.js?v=1.2.0'
    s.onload = () => window.SyncHoldSwap.init("sk_your_app_key_here")
    document.head.appendChild(s)
  }, [])

  return (
    <button onClick={() => window.SyncHoldSwap?.open({ tokenIn: 'WLD' })}>
      Swap with SyncHold
    </button>
  )
}
<template>
  <button @click="openSwap">Swap with SyncHold</button>
</template>

<script setup>
import { onMounted } from 'vue'
onMounted(() => {
  const s = document.createElement('script')
  s.src = 'https://synchold.org/sdk/synchold-swap-sdk.js?v=1.2.0'
  s.onload = () => window.SyncHoldSwap.init("sk_your_app_key_here")
  document.head.appendChild(s)
})
const openSwap = () => window.SyncHoldSwap?.open({ tokenIn: 'WLD' })
</script>
// Load SDK dynamically
const script = document.createElement('script')
script.src = 'https://synchold.org/sdk/synchold-swap-sdk.js?v=1.2.0'
script.onload = () => {
  SyncHoldSwap.init('sk_your_app_key_here')
}
document.head.appendChild(script)

// Open from any event
document.getElementById('swap-btn').addEventListener('click', () => {
  SyncHoldSwap.open({
    tokenIn:  'WLD',
    tokenOut: 'USDC',
    onSuccess: (result) => console.log('Swap done', result),
    onClose:   ()       => console.log('Widget closed'),
  })
})
// npm install @synchold/worldchain-sdk viem
import { SyncHoldClient, TokenProvider, SwapProvider, VerifyProvider, TOKENS } from '@synchold/worldchain-sdk'

const client = new SyncHoldClient({ appKey: 'sk_your_app_key_here' })

// Balances
const tokens  = new TokenProvider(client)
const balance = await tokens.balanceOf(TOKENS.WLD.address, '0xUserWallet')

// Swap quotes (direct V2/V3 pools on World Chain)
const swap  = new SwapProvider(client)
const quote = await swap.quote(TOKENS.WLD.address, TOKENS.USDC.address, 10n ** 18n)

// World ID human verification — server-mediated, requires appKey
const verify = new VerifyProvider(client)
const result = await verify.verify('my-action', idkitProofResult)
if (result.ok) console.log('verified, nullifier:', result.nullifierHash)
// SyncHoldSwap.init(appKey, opts)

Initialise

Call once after the SDK loads. Pass your sk_… app key. This links every subsequent swap to your account so fees are attributed correctly.

Throws a console warning if the key format is invalid — no silent failures.

// new — instant, no loading flash

Preload & Auto-Open

init() preloads the wallet in a hidden iframe by default, so open() shows it instantly — no spinner. Pass { autoOpen: true } to pop the wallet modal automatically as soon as it's ready, with zero clicks.

SyncHoldSwap.init("sk_...", { autoOpen: true }) — disable with { preload: false } if you'd rather trigger it yourself later.

// new — opts.walletAddress

Show All Tokens Instantly

The embedded wallet is the real SyncWallet app — same UI, all tokens. But World App's connect APIs aren't reachable from inside a nested iframe, so by default it shows its own "Connect" screen first.

If your app already knows the user's World App wallet address, pass it via { walletAddress: "0x..." } in init() or open() — the widget skips straight to the full token list with real balances.

// SyncHoldSwap.open(options)

Open Widget

Opens the swap sheet. Optional: tokenIn, tokenOut, amount to pre-fill the form. Callbacks: onSuccess(result) and onClose().

The widget is a full-screen slide-up overlay rendered inside an iframe.

// Tracking

Fee Attribution

Every swap posted with your appKey is recorded in your partner account. The 0.5% fee is computed automatically on each swap's USD value and added to your pending balance.

View live at synchold.org/sdk — no login, just your app key.

// Payment

Getting Paid

SyncHold reviews partner balances and sends the accumulated 0.5% to your registered wallet. Payments are made in WLD or USDC on WorldChain — your choice at time of payment.

Minimum payout threshold: $10. Contact [email protected] to request early payout.

// new — VerifyProvider.verify(action, result)

Human Verification

Check that a user is a real, unique person before granting access to your app — proof-of-personhood via World ID, the same verification SyncWallet uses for its own airdrops and mint gating.

Runs through POST /api/sdk/verify — your app key is validated server-side, then the proof is proxied to World ID's cloud verify. Each nullifier can only be used once.

// new — @synchold/worldchain-sdk

Full npm SDK

Structured the same way as @holdstation/worldchain-sdk: a SyncHoldClient plus focused providers — TokenProvider for balances, SwapProvider for on-chain quotes, VerifyProvider for World ID.

npm install @synchold/worldchain-sdk viem — TypeScript types included, built on viem.

// 03 — GET STARTED
Register

Start earning in under 5 minutes.

Register your app and get your sk_… key instantly. Paste it into the SDK, deploy, and every swap your users make starts generating revenue for you.

Your registered wallet is where we send your share. Make sure it's a WorldChain-compatible address you control.

// ALREADY REGISTERED?
View Partner Dashboard →
Register Your App

// Your App Key — keep this secret
// 04 — FAQ
Common Questions
Does the SDK cost anything?
No. The SDK is free. You earn 0.5% on swaps — you never pay anything to SyncHold.
Are my users charged more?
No. SyncWallet charges a 1% swap fee to all users. Your 0.5% comes out of that existing fee — users pay the same whether they swap through your app or directly.
How often are payments made?
Payments are made manually by SyncHold. The minimum threshold is $10. You can request early payment by emailing [email protected]. Balances are always visible on your dashboard.
In what token are payments made?
WLD or USDC on WorldChain — your choice at the time of payout.
Does it work outside World App?
The swap widget uses MiniKit and requires the World App for transaction signing. It works in any web or mobile app that the user accesses via the World App browser.
Can I register multiple apps?
Each wallet address can register one app. If you need multiple integrations, contact us at [email protected].
Does verification cost anything?
No — VerifyProvider.verify() uses the same app key as the swap widget. World ID verification is free; it's a proof-of-personhood check, not a paid API call.

Build something.
Earn 0.5% doing it.

Three lines of code. No contract. No custody. Just revenue.