Recipient resolution is Cheqi's automatic customer identification system. When a customer makes a payment, Cheqi uses their payment information to deliver the receipt directly to their devices—no email address needed.
Traditional receipt systems have a problem: How do you know who to send the receipt to?
- 📧 Email receipts require asking customers for their email at checkout
- 📱 SMS receipts require phone numbers and are expensive
- 🧾 Paper receipts waste resources and get lost
- 🔗 QR codes require customer action
Cheqi uses payment information customers already provide to complete their purchase:
✅ No asking for email - Seamless checkout experience
✅ Instant delivery - Receipt arrives automatically
✅ Privacy-first - Customer details stay private
✅ Always works - Email fallback for non-users
Use payment information from your terminal:
For POS Systems: PAR (Payment Account Reference) is widely available from modern payment terminals and is the recommended method.
For Webshops: Email matching is currently the most common approach, though PAR support is growing rapidly as payment providers increasingly expose this data.
IdentificationDetails customer = IdentificationDetails.builder()
.paymentType(PaymentType.CARD_PAYMENT)
.cardDetails(CardDetails.builder()
.paymentAccountReference("PAR123456789")
.cardProvider(CardProvider.VISA)
.build())
.customerEmail("customer@example.com") // Optional fallback
.build();For bank transfer payments:
IdentificationDetails customer = IdentificationDetails.builder()
.paymentType(PaymentType.IBAN_PAYMENT)
.iban("NL91ABNA0417164300")
.customerEmail("customer@example.com") // Optional fallback
.build();Cheqi returns encryption keys for matched recipients:
{
"recipientsFound": true,
"recipients": [...],
"webhooks": [...]
}If customer found: You receive encryption keys to deliver the receipt
If customer not found: Cheqi sends a PDF via email (if provided)
The SDK handles everything automatically:
// One method does everything: resolve + generate + encrypt + send
ReceiptResult result = sdk.getReceiptService()
.processCompleteReceipt(
identificationDetails, // Customer identification
receiptRequest // Receipt data
);
// Check delivery status
if (result.isSuccess()) {
System.out.println("✅ Delivered to " + result.getReceiptCount() + " devices");
} else if (result.isDeliveredViaEmail()) {
System.out.println("📧 Sent to: " + result.getEmailAddress());
} else if (result.isCustomerNotFound()) {
System.out.println("⚠️ Customer not found - prompt for email");
} else {
System.out.println("❌ Failed: " + result.getMessage());
}Always include email fallback to ensure delivery:
// ✅ Recommended
.customerEmail("customer@example.com")Handle both scenarios:
- Customer found → Receipt delivered to their app
- Customer not found → PDF sent via email
- Receipt Flow Overview - Complete receipt delivery process
- SDK Integration - Integrate the Java SDK
- .NET SDK - Integrate the .NET SDK
- Authentication - API Keys and OAuth 2.0