sequenceDiagram
participant Sender
participant Issuer as Issuer
(sending wallet)
participant Acquirer as Acquirer
(receiving wallet)
participant Receiver
Sender->>Receiver: Produce $PaymentPointer
Receiver->>Issuer: Get Open Payments Metadata
Receiver->>Issuer: POST /mandates
activate Receiver
activate Issuer
Issuer->>Issuer: Create Mandate
Issuer-->>Receiver: 201 Response
deactivate Issuer
deactivate Receiver
Receiver->>Issuer: Authorise Mandate
activate Receiver
activate Issuer
Issuer->>Sender: Mandate Consent
activate Sender
Sender-->>Issuer: Accept Mandate
deactivate Sender
Issuer-->>Receiver: Respond Auth Tokens
deactivate Receiver
deactivate Issuer
loop Interval of Payment
activate Receiver
Receiver->>Receiver: createInvoice(invoice)
Receiver->>Issuer: POST /mandates/{id}/spend (payment_pointer, amount, auth_token)
activate Issuer
Issuer->>Acquirer: POST /sources public_key
activate Acquirer
Acquirer-->>Issuer: 201 destination_address, shared_secret
deactivate Acquirer
rect rgb(0, 255, 0)
Issuer->>Acquirer: [ push payment ]
activate Acquirer
end
Acquirer->>Acquirer: updateSourceBalance(amount)
deactivate Acquirer
Issuer->>Issuer: createJWT(source_url)
Issuer-->>Receiver: 200 JWT
deactivate Receiver
deactivate Issuer
activate Receiver
Receiver->>Receiver: validateToken(JWT)
Receiver->>Acquirer: POST /sources/{id}/spend (invoice_amount)
activate Acquirer
Acquirer-->>Receiver: 200
deactivate Receiver
deactivate Acquirer
end