Web Monetization flow
Web Monetization relies on Open Payments (OP) and OP-enabled accounts to coordinate payments.
The Web Monetization agent Code in a web browser, such as an extension, that discovers web monetized pages, exposes the Web Monetization API, and communicates with the Open Payments APIs first issues a series of API calls to the receiving account’s wallet address A URL that identifies an Open Payments account , then to the sending account’s wallet address, to obtain the necessary authorization and instructions for sending a payment.
Sequence diagram
sequenceDiagram autonumber box aliceblue WM provider participant OPS as Open Payments
sending account end participant WMA as WM agent participant page as Web page box aliceblue WM receiver participant OPR as Open Payments
receiving account participant AS as Auth server end note over AS,OPR: The auth server can be
located outside of the
WM receiver's domain WMA->>page: Detects monetization element,
extracts wallet address WMA->>OPR: Requests the public info for the wallet address OPR->>WMA: Returns info, including auth server URL WMA->>AS: Requests access rights AS->>WMA: Returns access token WMA->>OPR: Requests creation of an incoming payment resource OPR->>WMA: Responds with unique payment details for addressing the payment to the account WMA->>+OPS: Requests an outgoing payment be
created against the sending account note left of OPS: Connection persists until
request moves from 'pending'
state to 'sending' state OPS->>-WMA: Responds with details about the
'receive', 'send', and 'sent' amounts WMA->>WMA: Fires monetization event note over OPS,OPR: Payment processing and settlement occurs between the WM provider and WM receiver, outside of the WM flow
Web Monetization flow example
This section provides an example of the API calls that occur when a web monetized user visits a web monetized site.
There’s a few points to keep in mind as you review the example.
- It’s up to the site visitor, not the web monetized site, to decide how often and how much to pay, as well as the currency in which to send a payment.
- While Web Monetization and Open Payments work together to coordinate payments, neither moves money. Payment processing and settlement must occur between the sending and receiving accounts over a common payment rail.
Scenario
Alice adds the monetization <link>
element to her website. Included within the <link>
is her wallet address, https://wallet.example/alice
, assigned to her by her Web Monetization receiver An entity that provides an Open Payments-enabled account into which payments can be received .
Bob signs up with a Web Monetization provider An entity that provides a funded Open Payments-enabled account from which payments can be sent who supplies him with a funded sending account. The sending account’s wallet address is https://anotherwallet.example/bob
. After installing a Web Monetization agent in his browser and linking the Web Monetization agent to his Web Monetization provider, his Web Monetization agent now has permission to request payments be sent from his account.
1 - Check for Web Monetization
As Bob browses Alice’s site, his Web Monetization agent detects a monetization <link>
element.
2 - Send request to wallet address (receiving account)
The Web Monetization agent issues a request to Alice’s wallet address to discover the Open Payments service endpoint.
Request
The response includes, among other details, the URL for her Web Monetization receiver’s grant request endpoint (authorization server).
Response
3 - Send grant request to Web Monetization receiver’s auth server
The Web Monetization agent issues a request to the Web Monetization receiver’s grant request endpoint (authorization server) to get an access token.
In this example, the Web Monetization agent requests access to create and read incoming payments (i.e., payments coming in to Alice’s Web Monetization receiver).
Request
The grant request is non-interactive, so the Web Monetization receiver grants the request and issues an access token.
Response
4 - Send incoming payment request to wallet address (receiving account)
The Web Monetization agent creates an incoming payment for the session (e.g., the open browser tab) by issuing an incoming payment request to Alice’s wallet address. The request uses details obtained from the previous API calls.
Request
Alice’s Web Monetization receiver (who hosts her account and wallet address) approves the request by supplying unique payment details for the Web Monetization agent to use to address the payment to Alice’s account.
Response
5 - Send outgoing payment request to wallet address (sending account)
The Web Monetization agent uses the details obtained thus far to create an outgoing payment request against Bob’s account (via his wallet address). Note that this is just a request to send a payment. The payment itself has not been sent and the request is in a pending state.
Request
A successful response indicates the request has moved from a pending state to a sending state. This means Bob’s account has the funds to cover the payment. Note that the payment itself has still not been sent ("sentAmount":{"value":"0"}
).
Response
The Web Monetization flow is complete. It’s now up to the Web Monetization provider to process the payment and settle with the Web Monetization receiver.