P2P (peer-to-peer) payments let one consumer send funds directly to another consumer within your partner network — no external bank accounts or card networks involved. Both the sender and receiver must hold a secured-card account (or secured-card subledger account) managed by your partner.
Common use cases:
Token scope required: api:write or api:purchase:write
Upwardli enforces a daily velocity limit of 2 P2P transfers per consumer per 24-hour window (counting both sends and receives). When a consumer exceeds this limit, the payment is created with status pending_review instead of being rejected. Your application receives the normal 201 response with status: "pending_review".
A Payment.P2P.Created webhook is not sent for held payments. Once an Upwardli compliance agent reviews and approves the payment, it transitions to pending and proceeds normally, triggering the webhook at that point.
The memo field is not accepted on P2P payments and will cause a validation error if included.
Compliance-held response (same 201, different status):
Retrieve returns a 404 for any payment that does not belong to your partner — this is intentional and prevents information leakage.
Returns a paginated list of all P2P payments across every consumer on your partner network.
Subscribe to P2P payment events to track payment lifecycle in real time.
Payment.P2P.Created is not sent for payments in pending_review status. It fires only once the payment has been approved and submitted to the core banking network.
Register your webhook endpoint to receive these events:
These are returned in the response body when the request fails business-rule validation.