What options do I have for integrating the Interledger protocol into my SaaS web app?

Can someone please help point me in the right direction to learn more about how I might use the Interledger protocol for payment options in my SaaS web application?

Tipalink (https://www.tipalink.com) provides a service that lets people tip web pages by their url, or “link”. Any web page that contains a Tipalink Profile ID can receive tips. The Profile ID lets Tipalink know which Tipalink Profile should receive payment (i.e. the owner/controller of the web page). Payments are ad-hoc, not streamed; Tippers decide when to pay their tips to each Profile owner. Users decide what payment method(s) to accept and configure for their Tipalink Profile. Currently there is only one for processing credit cards and a basic Bitcoin implementation will be added by the end of this month.

What options do I have for integrating the Interledger protocol?

Hey @tipalink, welcome to the Interledger forum!

I think tipping websites is a great use case for Interledger (perhaps I’m biased as I work at Coil https://coil.com). We actually have a standard specifically for doing this called Web Monetization (https://webmonetization.org)

Web Monetization defines a tag that sites can include which describes where payment can be sent to them. For your use case, a user of yours could enter the URL of the site they want to pay, and you could scrape that site and parse out the WM tag. This would tell you how to pay the site without them even having to register with you.

You could charge the user or request a payment from them over credit card/bitcoin/interleger/whatever you want and then send a payment over Interledger to the site’s payment pointer (the payment details parsed out of the WM meta tag)

For sending the payments you can use https://github.com/interledgerjs/ilp-protocol-spsp . To get connected to the ILP network you can create a peering relationship with a member of the network; we’re working on making direct ILP uplinks more available for users of popular ILP wallets to make this process easier. LMK if you have any further questions

Thanks @sharafian, this sounds great!

I’m a little confused on how my app could initiate a payment from one payment pointer to another. Is it possible to do this with a single STREAM, or would I have to do both a pull and then a push? I can’t find anything about how to authenticate the payer account.

For PayPal, I can initiate the payment through a POST request by providing both payment pointers, an amount, and some other details. PayPal starts their payment flow, which includes authentication of the sender. I have a webhook listening for a response upon completion. Is anything like this possible for Interledger? Or would I have to instruct users to send payments using their ILP wallet and simply provide them the receiver’s (payee’s) endpoint, as is commonly done with sending Bitcoin to a BTC address?

I’m a little confused on how my app could initiate a payment from one payment pointer to another. Is it possible to do this with a single STREAM, or would I have to do both a pull and then a push? I can’t find anything about how to authenticate the payer account.

The way you would charge people over Interledger is with https://openpayments.dev , however that API is not finalized or generally available yet. I’d wait for that before you start taking payments from users over Interledger.

For PayPal, I can initiate the payment through a POST request by providing both payment pointers, an amount, and some other details. PayPal starts their payment flow, which includes authentication of the sender. I have a webhook listening for a response upon completion. Is anything like this possible for Interledger? Or would I have to instruct users to send payments using their ILP wallet and simply provide them the receiver’s (payee’s) endpoint, as is commonly done with sending Bitcoin to a BTC address?

Interledger wallets are mostly for receiving right now (especially over Web Monetization), and haven’t implemented sending. Those kinds of retail or peer-to-peer payment features will likely be implemented via the https://openpayments.dev API, which will also allow retail payment flows using PaymentRequest

Today if you want to use Interledger I would recommend it just on the payout side, and not the pay in side. If the pay-in and pay-out of your systems in your product are decoupled then you could make Interledger payout only to start and allow pay-in with Interledger in the future.

1 Like

Ok, I’ll wait on openpayments.dev to implement peer-to-peer payments over Web Monetization in my web app.

The biggest problem with decoupling pay-in and pay-out is I’d have to hold the money. In the USA, if a business holds even $0.01 for a second while accepting payment from one party and sending it to another party, then they are classified as a Money Service Business (MSB). This opens up a regulatory quagmire and no bank will hold that $0.01 for you unless you start paying $10k/mo fee + transaction costs. The reasons for this go back to the Patriot Act and anti-terrorism/anti-money-laundering following 9/11. :frowning:

I originally built Tipalink to handle decoupled one-to-many peer-to-peer payment flows. After I learned about MSB’s, KYC, etc., I had to toss those features all aside and tweak it to a coupled (single processing service) one-to-one peer-to-peer payment flow. The only other alternative was to use a third-party service like Stripe Connect (https://stripe.com/connect), which is costly and limiting.

I mention this because it is a really big road block to adoption of Web Monetization for web marketplaces and platforms doing peer-to-peer transactions (at least for small to medium sized ones in the USA). Unless you can convince Stripe to add it to their offering…

Thanks again for your reply.

Gotcha, totally makes sense. Delegated access via Open Payments sounds like it’s best for your use case; I think with open payments you could build a pretty frictionless experience for it. We’ll try to get Open Payments available as soon as we can :slight_smile:

1 Like