P2P Payments
Overview
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:
- Splitting bills between users
- Gifting or rewarding another user on your platform
- Intra-network fund transfers initiated by your application
Token scope required: api:write or api:purchase:write
Prerequisites
- Valid OAuth 2.0 Bearer token (see Authentication)
- Both consumers must have active secured-card accounts on your partner network
- The sending consumer must have sufficient available balance
- P2P payments must be enabled for your partner configuration
How It Works
Payment statuses
Compliance velocity hold
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.
API Endpoints
Base URLs
1. Create a P2P Payment
Endpoint
Authentication
Request body
The memo field is not accepted on P2P payments and will cause a validation error if included.
Example request
Response — 201 Created
Compliance-held response (same 201, different status):
Full API reference
2. Retrieve a P2P Payment
Endpoint
Path parameters
Example request
Response — 200 OK
Retrieve returns a 404 for any payment that does not belong to your partner — this is intentional and prevents information leakage.
Full API reference
3. List P2P Payments
Returns a paginated list of all P2P payments across every consumer on your partner network.
Endpoint
Query parameters
Example request
Response — 200 OK
Full API reference
Webhooks
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:
Error Reference
Validation errors (422)
These are returned in the response body when the request fails business-rule validation.

