Skip to content
Payment Pointers
GitHub

Flow

When a user wishes to make or receive a payment, and is engaging with a counter-party that is able to process Payment Pointers, it provides a Payment Pointer to the counter-party.

The counter-party’s client then uses this Payment Pointer as described below to discover the services and accounts linked to the Payment Pointer and interact with these to send or request a payment.

This is analogous to how a user may provide a credit card number to a merchant to make a payment online, or provide their bank account details to a payer to receive a payment. However, in the case of Payment Pointers the pointer and the services are loosely coupled so a variety of service types could be discovered and payments can be both pushed and pulled from the user’s account initiated via the same Payment Pointer.

Step 1: Resolve Open Payments Server Meta-Data URL

The first step the client performs is to decode the Payment Pointer URL from the Payment Pointer using the rules defined in this specification.

Step 2: Discover Open Payments Endpoints

The client then uses the HTTP protocol to query the resolved Open Payments account URL and discover the Open Payments services endpoints.

The resolved endpoint MAY redirect the client to another URL but the client MUST ensure it affords the sender an opportunity to verify both the originally resolved and ultimate endpoint hosts.

Example:

GET /.well-known/pay HTTP/1.1
Host: alice.wallet.example
Accept: application/json

Step 3: Initiate Payment

Having discovered the available endpoints, the client initiates the payment using one of the supported Open Payments protocols appropriate to the use case.