🦸🏻 Detecting duplicate receipt submissions

Introduction

Taggun's API provides robust fraud detection tools to protect your customer engagement promotions and employee reimbursement. Our similar receipt detection feature helps to easily identify fraudulent attempts to submit the same or _modified similar receipts _multiple times in your platform.


Common Fraud Cases Handled

  • Duplicate Detection: Prevent repeated submission of identical receipts.
  • Shared Receipt Detection: Mitigate collaborative fraud by identifying suspiciously similar receipts.
  • Modified Receipt Detection for multiple submissions: Detect fraudulent attempts, even if the receipt image has been altered.

How to Set Up

  1. Contact Taggun: Reach out to [email protected] to enable this feature for your account.
  2. [If you are using Receipt Validation API]: Incorporate the following changes when setting up a new campaign:
"fraudDetection": {  
    "allowSimilarityCheck": true  
 }
  1. Submit an API Requests to scan a receipt: Add these optional fields:
"referenceId": "your_unique_submission_id",  
"userId": "your_system_user_id"

Understanding the request parameters

Field NameTypeDescription
referenceId (optional)stringPassing this with a validation request will tag the receipt with your system's unique submission ID of a receipt for proof of purchase. This ensures effective tracking and management of suspicious receipts submitted within your system.

referenceId is optional. If you don't with to pass in a referenceId, you may also save TAGGUN's trackingId from the API response to cross reference to which receipt submission was uploaded from your system that is flagged as suspicious.

However, we recommend sending a referenceId. To avoid wrongly flagging a legitimate case of re-submitting a receipt as proof of purchase, we will not flag receipts as suspicious if they share the same referenceId.
userId (optional)stringPassing this with a validation request will tag the receipt with your system's user ID This ensures effective tracking and management of suspicious user behaviour within your system.

Tag a receipt with a user ID so that if the same receipt has been previously uploaded by another user, this will be flagged as suspicious behaviour

Understanding the response properties

Field NameTypeDescription
trackingIdstringUsed internally to attach each validation result to its receipt, can also be used as an automatically generated reference if the referenceId field is not provided in the request.
entities.similarReceiptsarrayAn array containing all (if any) similar receipts, with similarity scores exceeding 0.9.
entities.similarReceipts[index].scorenumberThe calculated similarity score above 0.9, the higher the score the greater the similarity
entities.similarReceipts[index].trackingIdstringThe tracking ID of the similar receipt
entities.similarReceipts[index].referenceIdstringIf applicable, returns the reference ID of the similar receipt
entities.similarReceipts[index].userIdstringIf applicable, the user ID for a separate user that has uploaded a similar receipt

How does it work?

After extracting the text from the receipt image, the data is run through a series of calculations that analyse how similar one receipt is to another (in the same campaign).

Even when malicious users edit images to avoid detection for duplication, we can flag these uploads as suspicious so that you can either bounce them back to the user or send them to a manual review process.

If two different people try and upload the same receipt in one campaign, will it still be flagged?

Yes. Also, if the user ID argument has been passed in with the request, it becomes very easy to investigate other potential fraudulent behaviour from the offending users.

What happens if the receipts from one merchants are very similar to one another all the time?

No problem, our system takes this into effect and alters the score threshold on a per-merchant basis, limiting the number of false alarms.


An example

A malicious user wants to bypass basic comparison checks by editing a receipt. While the two below receipts might look the same, the offending version has alterations made to the MERCH ID, AID, TVR, and ARQC values, as well as to the transaction date.

Original ReceiptEdited Receipt

RECEIPT & INVOICE OCR API

An example response when no similar receipts are found:

{
  ...
  "entities": {
    "similarReceipts": [],
  }
  "trackingId": "T-20231207-1576094"
  ...
}

An example response when similar receipts are found:

{
	...
  "entities: {
    "similarReceipts": [
    {
      "referenceId": null,
      "userId": null,
      "trackingId": "T-20231207-1576094",
      "similarityScore": 0.9841417670249939
    }
  ],
  }
  "trackingId": "T-20231207-8012734",
  ...
}

RECEIPT VALIDATION API

An example response when no similar receipts are found:

{
  "successful": true,
  "failedValidations": [],
  "passedValidations": [
    "merchant_name_validated",
    "date_validated",
    "fraud_detection_unique_receipt_validated",
    "product_line_items_validated"
  ],
  "productLineItems": [
    ...
  ],
  "matchedProductLineItems": [
    ...
  ],
  "date": "2023-09-08T09:35:00.000Z",
  "merchantName": "metro",
  "productCodes": [
    "TVR 0000008001"
  ],
  "balanceAmount": null,
  "totalAmount": 8.31,
  "similarReceipts": [],
  "trackingId": "T-20231207-1576094"
}

An example response when similar receipts are found:

{
  "successful": false,
  "failedValidations": [
    "fraud_detection_unique_receipt_validated"
  ],
  "passedValidations": [
    "merchant_name_validated",
    "date_validated",
    "product_line_items_validated"
  ],
  "productLineItems": [
    ...
  ],
  "matchedProductLineItems": [
		...
  ],
  "date": "2023-02-22T09:35:00.000Z",
  "merchantName": "metro",
  "productCodes": [
    "TVR 0000018001"
  ],
  "balanceAmount": null,
  "totalAmount": 8.31,
  "similarReceipts": [
    {
      "referenceId": null,
      "userId": null,
      "trackingId": "T-20231207-1576094",
      "similarityScore": 0.9841417670249939
    }
  ],
  "trackingId": "T-20231207-8012734"
}

Start Building

Contact Taggun now [email protected] to get access to this feature, and then dive straight into the API reference to start building fraud-proof applications!