🧩 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.
[](https://arcpay.finance/your-username)
Preview:
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