🧩 Embed anywhere

Let fans tip you from your blog, Notion, Substack, GitHub README, Dev.to article, or any HTML page. Paste a snippet — zero config, works everywhere.

Connect your wallet to see snippets pre-filled with your username.
1iframe — most universal
Drop into any HTML page: WordPress, Ghost, Substack, Notion, personal sites.
<iframe
  src="https://arcpay.finance/embed/tip/your-username"
  width="420" height="320" frameborder="0"
  style="border:0; max-width:100%"
  loading="lazy"
  title="Tip your-username on ArcPay"></iframe>
Preview:
2JS SDK — auto-render
Include once, scatter <div data-arcpay="tip"> anywhere. Renders inline.
<script src="https://arcpay.finance/embed.js" defer></script>
<div data-arcpay="tip" data-user="your-username"></div>
3JS SDK — button / modal
Render a button that opens a modal on click. Great for sidebar, footer, inline prompts.
<script src="https://arcpay.finance/embed.js" defer></script>
<button data-arcpay-button data-user="your-username">💸 Tip your-username</button>
4GitHub README badge
One-line Markdown. Always-up-to-date lifetime tips total shown as badge.
[![Tip on ArcPay](https://arcpay.finance/badge/your-username.svg)](https://arcpay.finance/your-username)
Preview:
Tip your-username
5React / Next.js component
If you ship a Next.js site, just drop an iframe in JSX.
// React / Next.js component
export function TipButton() {
  return (
    <iframe
      src="https://arcpay.finance/embed/tip/your-username"
      width={420} height={320}
      style={{ border: 0, maxWidth: '100%' }}
      title="Tip your-username on ArcPay"
    />
  );
}

📅 Subscriptions — the Patreon replacement

Your readers subscribe in USDC; the chain is your subscriber database. Live demo: a paywalled blog post ↗

6Subscribe embed — iframe
Drop this on your blog / Notion / landing page so readers can subscribe without leaving.
<iframe
  src="https://arcpay.finance/embed/subscribe/your-username"
  width="420" height="360" frameborder="0"
  style="border:0; max-width:100%"
  loading="lazy"
  title="Subscribe to your-username on ArcPay"></iframe>
Preview:
7Subscription gating — check any wallet's status
Server-side or client-side, 10 lines of code. No webhook, no database, the contract IS the subscriber DB.
// Client-side gating: is this wallet an active subscriber?
import { readContract } from 'viem/actions';
import { ADDRESSES, subscriptionsAbi } from '@arcpay/sdk';

async function isSubscriber(wallet: `0x${string}`, planId: bigint) {
  const slot = await readContract(publicClient, {
    address: ADDRESSES.subscriptions, abi: subscriptionsAbi,
    functionName: 'activeSubOf', args: [wallet, planId],
  });
  if (slot === 0n) return false;
  const sub = await readContract(publicClient, {
    address: ADDRESSES.subscriptions, abi: subscriptionsAbi,
    functionName: 'getSubscription', args: [slot - 1n],
  });
  return sub.active && Number(sub.paidUntil) * 1000 > Date.now();
}

// Use anywhere: article paywall, Discord bot role, API gate
if (await isSubscriber(visitor.wallet, MY_PLAN_ID)) {
  return renderFullArticle();
}
Why embed?
  • Instant USDC settlement to your wallet (sub-second on Arc)
  • No Stripe, no KYC, no chargebacks
  • Your fans click tip → sign with email/wallet → done
  • Works in Notion, Substack, GitHub, personal blog — anywhere iframes/JS work