Create Tip Jar For venues For creators Developers Articles

BitcoinTipJar

For developers & AI agents

Every tip jar on BitcoinTipJar is just a URL. There is no API key, no account and no registration step: build the link and it works. Tips go straight from the payer's Lightning wallet to the recipient's — we are never in the middle of the money, and we take no fee.

The three things you can do: generate a tip page from parameters, embed the live card in your own page, and be told when a tip actually settles.

URL Schema
// Generate a tip page via URL params — no API key, no account

bitcointipjar.com/tip?ln={address}&name={name}&amounts={csv}
bitcointipjar.com/tip?ln=satoshi@coinos.io&name=Satoshi%27s+Coffee&amounts=1000,2500,5000,10000&accent=ff9b00&theme=dark
Style the card
amount={sats}   pre-select that amount, land straight on the QR
accent={hex}    your brand color — 6 hex chars, no #
theme=dark      dark card for dark sites (the QR stays scannable)
custom=0         drop the “Other” tile — your amounts only
tagline={text}  the line under the name (default “Tip with Bitcoin”)

// Swap /tip for /poster with the same params → print-ready A4 poster
bitcointipjar.com/poster?ln={address}&name={name}&amounts={csv}
Hand them out
// Give every user on your platform a jar: one link each, built from their
// Lightning address and name. No account, no API key, and no money passes
// through you or us. Each tip goes straight to their own wallet.

src=partner        tag the links your platform hands out
batch={your-name}  your platform: a-z, 0-9, - and _, up to 32 characters
bitcointipjar.com/tip?ln=satoshi@coinos.io&name=Satoshi&src=partner&batch=yourplatform
// Tagged, your users’ jars are counted apart, so we can tell you how
// they’re doing. A jar a user claims keeps the tag.
Get the payment data back
ref={string}    opaque ref echoed back to you (song, order, table…)
notify={url}    HTTPS webhook — fires only after the payment settles

// We confirm settlement with the wallet (LUD-21 verify), then POST:
{ ref, amount_sats, payer, pr, verify_url, settled_at }
// Re-check verify_url yourself before trusting the event.
// payer is the name the tipper typed (LUD-12 comment) — self-reported,
// so escape it. Verify-proof covers the payment, not the name.
Embed it in your own page
<iframe src="https://bitcointipjar.com/embed?jar={name}"
  style="border:0" width="360" height="480"></iframe>
jar={name}       a claimed jar — its branding, records and extras come with it,
                and the owner can change wallets without you re-pasting
ln={address}    or an address directly, for a jar nobody has claimed
chrome=none     bare card — no border, background or header block
bg={hex}        paint the frame to your panel color (beats transparency)

// Same params as /tip. When the tip settles, the frame postMessages
// {type:'tipjar:settled', ref, amount_sats, payer, pr, verify_url}.
// Treat it as a UI hint only — anything you gate on payment should
// trust the notify= webhook (server-verified) and re-check verify_url.
// The frame also reports its content height on every state change, so
// the iframe can grow with the card instead of scrolling:
addEventListener('message', e => {
  if (e.source !== frame.contentWindow || !e.data) return  // only OUR frame
  if (e.data.type === 'tipjar:height')
    frame.style.height = Math.min(Math.max(e.data.px|0, 180), 1200) + 'px'
})
// QR-encode the full URL for physical placement.
// AI agents: construct URL → return link.

// Optional: claim a vanity URL later
bitcointipjar.com/mikespizza

Notes worth reading once

Machine-readable summary

A plain-text description of this site and these endpoints lives at /llms.txt, for agents that would rather not parse HTML.