Payment

De Mi caja de notas

payment in the context of the indieweb refers to a feature on an indie web site that provides a way for the visitor to that website to pay (credit card, currency, gift card, etc.) the person represented by that indie web site.

Why

You should have a payment page (e.g. at you.example.com/pay) so:

  • anyone who visits your website can easily pay you (for whatever) in the ways you prefer to be paid, similar to how communication links help people communicate with you in the ways you prefer[1].
  • you can share a simple you.example.com/pay link to get paid

Why with amount

In addition, your payment page should support a specific amount from the URL so you can:

  • message a friend a payment link like yoursite/pay/16/ for a specific amount, to split dinner, pay for something they got for you like donuts etc.
  • provide a donation link like yoursite/pay/10 (e.g. for a donation optional yoga class)

How to

There are several tutorials on how to create links / URLs for various payment services to put on your web site:

Currency:

  • PayPal
    • PayPal donate link -
      • Fees: free with linked bank account, $0.30 + 2.9% for credit/debit.
    • PayPal.Me - create a simple-looking link to share for people to pay you from their PayPal accounts
      • https://paypal.me/yournamehere
  • Square Cash (cash.me - different from SquareUp!)
    • Requires linking your debit card to your account to receive or send money. Can optionally link a credit card to your account.
    • Doesn't work with UK postcode
    • Fees:
      • Personal account: none for debit card payments. 3% for credit card payments.
      • Business account: 2.75% is automatically deducted from any payment accepted with Cash for Business.
    • Create a simple-looking URL to share for people to pay you:
      • https://cash.me/$username
    • An amount can be pre-selected by adding it to the URL, e.g.
      • https://cash.me/$username/10
  • Venmo
    • Fees: free with linked bank account and some debit, 3% for credit
    • Create a simple-looking link to share for people to pay you:
      • https://venmo.com/Username
    • Create a pre-filled link with amount and note:
  • Flattr for one-time or recurring (monthly) micro-donations
    • Gifts can be anonymous
    • Fees: 10% on all the money you receive
    • Encourages both buttons and rel-payment
  • Monzo.me UK only, requires a Monzo card
    • Fees: No fees
    • Limit: Limited to £100
    • An amount can be pre-selected by adding it to the URL, e.g.
      • https://monzo.me/$username/10

Gift card(s):

Once you have a payment URL e.g. pay.example.com/username/usd/5, link to it with rel=payment, e.g.

<a href="https://pay.example.com/username/usd/5" rel="payment">Donate $5 to me</a>

Payment page with amount

Just like PayPal.Me and Square Cash cash.me, your Payment page can allow a subdirectory component for a dollar amount, which it would then build into the specific payment method links:

  • /payment/10 - to pay you $10

Alternatively this might read better as just "pay" (also less typing), e.g.

  • /pay/10
  • ...

Provider link patterns (only these so far), for an amount of $13.37

  • cash.me/$username/13.37
  • paypal.me/username/13.37
  • venmo.com/Username?txn=pay&amount=13.37

For other providers, keep their icon / link - better to keep the option than make it curiously disappear.

Note: this can be handled fully serverside.

(add how to normalize URL numerical dollar values to something sensible)

(provide open source for sanitizing numerical values)

IndieWeb Examples

rel-payment examples

Specific rel=payment links:

  • Aaron Parecki uses rel=payment to link to Venmo, Paypal and Square Cash on his home page.
  • Pelle Wessman uses Jekyll to add Flattr rel=payment links to each blog post on voxpelli.com
  • Bret Comnes has links to a bitcoin addresses hosted on coinbase a tip jar. I had a dogecoin address that was hosted on dogevault but dogecoin shut down after getting hacked.
  • Tantek Çelik has a rel=payment link on his tantek.com home page to his "/tip" page autofilled with $1.

payment page examples

Overall /payment page. Just like having a /contact page, your indieweb site should have a /payment page with icons linked to various ways to pay you. Even better: /payment/nn support for auto-filling $ amounts

Aaron Parecki

Tantek

Jeremy Cherfas

Grant Richmond

Jacky Alcine

Marty McGuire

Anthony Ciccarello

Anthony Ciccarello has a payment page at https://www.ciccarello.me/pay/ since 2022-02-25.

  • Lists accepted services in order of his preference
  • Links to Venmo and Paypal are updated to include an amount via JavaScript with a special /pay?amount=5 URL (not advertised)
  • A checkbox toggles visibility of QR code for other to scan to load accounts since 2024-11-08.

past examples

Eddie Hinkle

  • Eddie Hinkle created a sponsor page eddiehinkle.com/sponsor (archived from 2019-07-13) and provided links to it in all podcasts he produced with rel=payment so that Overcast and other podcasts could link to it.
    • The sponsor page was planned to eventually support both one-time payments and monthly pledges.
    • As archived, it only supported pledges using Memberful. One-Time payments were planned for both Stripe and Square Cash

Other independent examples

Podcast Examples

Quite a few podcasters include rel-payment metadata – mostly in their podcast feeds but also on their blog pages. Podcatchers have started using the data to automate donations. This was started by Marco Arment, creator of iOS podcast app Overcast and tested on his podcast ATP and the Relay FM Network.

Notable examples:

  • The 5by5 network uses it in their feeds
  • Relay FM has it for every podcast with a default set that can be overridden on a per show basis.
  • Big german podcaster Tim Pritlove uses it across all of his podcasts, both web pages and feeds

Scott Hanselman

Intro slide from Scott Hanselman's talk at .NET Fringe 2017:

Silo Examples

Patreon

Patreon is a crowdfunding silo that encourages users to support artists and creators typically on a recurring basis. A variety of issues and critiques of the benefits of the site (and it's silo nature) can be found in No One Makes a Living on Patreon

Drip

Drip is a crowdfunding subsidiary site of Kickstarter.

Ko.fi

Ko-fi is a service with embeddable widgets that allows patrons or supporters to reward or tip users with money, ostensibly the amount that would purchase a cup of coffee.

PayPal

Main article: PayPal

Square Cash

Main article: Square Cash

Apple Pay

Main article: Apple Pay

Venmo

Main article: Venmo

Google Pay

Main article: Google Pay

Facebook

While not technically a direct payment method, Facebook during the 2017 holiday season encouraged users to add a donation button to their posts to encourage giving to non-profits.

In 2018 and expanding in 2019, Facebook also began offering Facebook Fan Subscriptions to creators on Facebook. The feature lets creators offer $4.99 monthly subscriptions to their fans, which gets them access to exclusive content and an opt-in Supporter badge that appears next to the user’s comments on the Page.

Affiliate Programs

An alternate, and less direct method of payment, is to utilize an affiliate payment program in which customized URLs to services or products which provide a payment or commission to the referring site.

Some common affiliate programs that creators frequently use include:


Implementations

Apps

Overcast

Overcast, a podcast player, shows a payment button on the "now playing" screen if a link with rel=payment appears in the episode's show notes.

  • https://twitter.com/marcoarment/status/1028451747734409216
    • "Podcasters and CMS makers: Next version of Overcast looks for a link in every episode's show notes with <a rel="payment">. If present, Overcast adds a nice green "$" button on the Now Playing screen that opens up that donation/Patreon/membership URL of your choice." @marcoarment August 12, 2018

Castro Podcasts

Castro podcast player shows a "Support this podcast" button since at least 2018-12-22 [2]

Publishing Software

Plugins exist for some open source publishing software:

Transistor.fm

The podcast host Transistor.fm provides a way to include a link to a payment page in every podcast episode, marked up with rel=payment.

"Two days ago, @marcoarment suggested a new standard for podcasts:
<a rel="payment"> in a podcast's show notes would reveal a nice green "$" button on the Now Playing screen in @overcastfm.
We just deployed this to @TransistorFM!"

@mijustin August 14, 2018

Fireside.fm

Fireside.fm podcast hosting has an advanced option to enter a payment URL, which generates <a rel="payment">[3].

Tools

  • Rel-Payment Firefox Addon – shows a clickable icon in the address bar when a payment link is detected for a page
  • Many podcatchers, like Instacast and gPodder, rely on rel-payment data in feeds for their integration with Flattr for eg. enabling automatic donations for listened episodes

Services

Flattr

Flattr – publishes rel-payment links on their profile pages as well as on pages for each thing one can donate to. Also heavily uses rel-payment data in their open source browser add-ons.

Liberapay

Liberapay – an open source service to make recurring donations

Square Cash

Square Cash - allows you to collect payment, e.g. https://cash.me/$aaronpk. An amount can be pre-selected by adding it to the URL, e.g. https://cash.me/$aaronpk/10

Stripe

Stripe can be used to process credit card transactions on your website.

Hazards

Credit card fraud

Twitter hazards

  • https://twitter.com/stimmyskye/status/1441177426239766531
    • "okay so as some people don't seem to know this is happening:

      when someone replies to one of your posts asking you for your paypal / venmo / etc, there are bots that will IMMEDIATELY clone your account and reply with a payment link. they block your account in the same second." @stimmyskye September 23, 2021

Coinbase bannings

  • Why avoid Coinbase for payment: https://twitter.com/violetblue/status/1111464067716149248
    • "Just want the well-meaning folks suggesting I check out Bitcoin to know that I was ejected from Coinbase for no reason at the same time they kicked other people in sex businesses off the service (including erotic comic artists). Add it to the list of non-options." @violetblue March 29, 2019

Brainstorming

Sessions

Related sessions at prior IndieWebCamps

Payment page with reason

It would also be nice to be able to share a URL with the reason for the payment as well, so when the user taps a payment button, the provider has the reason pre-filled in as well.

Take a look at the PayPal.Me and Square Cash cash.me UIs, which I *think* let you edit the amount and add a reason. Those may be good enhancements to consider for such pre-filled out payment subpage URLs. Then again if the payment service provides a final opportunity to edit amount/reason, then having that on your own site may see redundant.

  • /pay/5/coffee
  • /pay/20/atm
  • ...

Vendor support:

  • PayPal.me: unknown
  • Square Cash: unknown
  • Venmo: &note=text_here param, e.g.:
    • https://venmo.com/?txn=pay&note=Enter%20your%20note%20here

Note: this could be handled fully serverside.

Interested:

Perhaps a pay URL could also just have the reason, without an amount like:

  • /pay/tip/
  • /pay/donate/
  • ...

Aaron Parecki has two payment pages, one at /pay/ the other at /tip/.

Escrow

There has been some discussion around using webmentions as a form of payment notification. Malcolm Blaney has suggested syndicating these webmentions to a 3rdparty website as a form of Escrow. The interaction would work as follows:

Alice creates a post on her site, representing a payment to Bob, and sends him a homepage webmention. The post includes a link to a 3rdparty site (let's call it Carol's site). Bob replies to Alice's post thanking her for the payment.

Carol runs a site that tracks payments, so she looks for specific markup in the original post and subsequent reply. When Alice creates the post, the payment is currently pending. When Bob replies, the transaction is settled.

If Carol's site was considered trustworthy by both parties, they could use a separate mechanism to transfer funds to her account. Carol could then clear the above transaction between Alice and Bob by paying Bob the outstanding amount.

In general though, transactions only need to be settled to calculate the new balance for Alice and Bob, and the low cost of tracking payments via webmention means no transaction fees are required, except when real funds are withdrawn via Carol's site.

Payment Request Post Type

One downside to having the payment request information in the URL is that anyone can construct a similar link. This has been used to test stolen credit card numbers by the attackers visiting a payment page like /pay/1 and then entering stolen credit cards.

An alternative would be to create a new post to request a specific payment with details, and have that post be usable only one time. For public posts, they would at least be usable only once, and since only the author of the website could create these, there's no way to use them to test batches of cards. These posts could also be made private or at least unlisted so they could be sent to individuals.

The W3C Payment Request API could be a good starting point for a payment request post with Microformats. (A Microformats vocabulary for this is needed in order for it to be used to create the post from a Micropub client.) This could be either a new top-level Microformats object, or some additional properties in an h-entry.

The PaymentRequest details share nothing in common with h-entry, but the act of sending a request to someone does start to look more like an h-entry since that would include things like a date, possibly post visibility settings, etc.

https://developer.mozilla.org/en-US/docs/Web/API/PaymentRequest/PaymentRequest

The Payment Request API is really more about requesting payment information details and is likely too detailed for this post. However, if detailed invoice info is needed in the post, this could be a place to look for a vocabulary to use.

Other places to look for payment request post examples:

Create a payment request in Square Cash

Create a payment request in Venmo

Create a payment request in PayPal

Payment Request Post Details

Across these three examples:

  • Who is the request being made to? Every example first asks for the person you'll be sending the request to
  • How much is being requested?
  • Optional note

In order to use Microformats to express this, h-entry would be a good container to include the note, and the audience property could be used to indicate who the request is being sent to. A new property would be needed to express the dollar amount.

How to handle different currencies? It appears that the currency is not choosable by the requester or the person who pays, but is based on the currency of the requester's payment account.

Articles

Articles about various forms of payment from an independence perspective:

See Also