Skip to content
Last updated

What is Recipient Resolution?

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.

Why It Matters

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

The Cheqi Solution

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

How to Use It

Identify by Card Payment

Use payment information from your terminal:

POS vs Webshop

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();

Identify by IBAN

For bank transfer payments:

IdentificationDetails customer = IdentificationDetails.builder()
    .paymentType(PaymentType.IBAN_PAYMENT)
    .iban("NL91ABNA0417164300")
    .customerEmail("customer@example.com")  // Optional fallback
    .build();

What You Get Back

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)

Simple Integration

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());
}

Best Practices

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

Next Steps