The error message [1102] Duplicate Transaction indicates that a transaction request with the same information has been submitted. Pay’nUP looks for transactions which are likely to be duplicates by matching the data provided with the transaction.

For security reasons and to avoid duplicate submission of the same transaction our API does not allow send the same transaction twice (merchant,product,amount), but, if you need submit similar transactions must ensure pass a unique correlationId on each transaction.

{
  "submitTransaction": {
    "correlationId": "12345678",
    "product": 1923,
    "inputs": {
      "accountNumber": "+13051231234",
      "amount": 50
    }
  }
}

The correlation ID can be the transaction number in your side, or any other unique number. This number is saved in our database as reference with transactions in your side. For example if you save all transactions in a database in your side, the correlation ID can be the database ID of each record. If you are only developing a frontend UI and does not store any information in your side, you can send a time-stamp or any random number generated in your side per transaction.

How i’ts works?

Looks the following example of a duplicate transaction:

// transaction 1 (success)
{
  "submitTransaction": {
    "product": 1923,
    "inputs": {
      "accountNumber": "+13051231234",
      "amount": 50
    }
  }
}

// transaction 2 (duplicated)
{
  "submitTransaction": {
    "product": 1923,
    "inputs": {
      "accountNumber": "+13051231234",
      "amount": 50
    }
  }
}

At this point our system receive the same data from the same merchant in a short period of time and avoid process the same transaction twice. In order to avoid that must set a correlationId:

// transaction 1 (success)
{
  "submitTransaction": {
    "correlationId": "1",
    "product": 1923,
    "inputs": {
      "accountNumber": "+13051231234",
      "amount": 50
    }
  }
}

// transaction 2 (success)
{
  "submitTransaction": {
    "correlationId": "2",
    "product": 1923,
    "inputs": {
      "accountNumber": "+13051231234",
      "amount": 50
    }
  }
}

You are telling our system, the data is the same, but are two different transactions and I aware of that.