Prevent duplicate transactions
The Transaction API provides two mechanisms to prevent duplicate transactions before the transaction enters the processing pipeline:
- Transaction keys
- Field-based duplicate checking
You can use either method independently or combine them.
Vitesse recommends using at least one duplicate detection method.
Transaction keys
Use the TransactionKey HTTP header to identify each transaction request.
Use any value from your system, such as a claim identifier, payment identifier, or database key.
Transaction keys:
- Support a maximum length of 64 characters
- Use case-insensitive matching
- Must be unique for each transaction request
Example request
POST /api/transactionrequests
TransactionKey: CLM-51837Request body:
{
"SendValue": 100.00,
"SendCurrency": "EUR",
"Recipient": {
"Name": "Victoria Lau",
"RecipientReference": "Claim-51837",
"Country": "GB",
"Currency": "GBP",
"Account": {
"SortCode": "112233",
"AccountNumber": "22233445"
}
}
}Duplicate key behaviour
When Vitesse receives a transaction request:
- If the
TransactionKeyvalue is unique, the system validates the request. - If the key already exists, the API returns a
DuplicateTransactionKeyerror.
Example response:
{
"Code": "DuplicateTransactionKey",
"Message": "A duplicate transaction key was sent to the API.",
"MoreInfo": "https://docs.vitessepsp.com/reference/errors#duplicatetransactionkey"
}Transaction keys are retained for 30 days. After that period, the API can reuse the same key for a different transaction. The system may remove keys associated with failed transactions before the 30-day retention period expires.
Verify a transaction key
If your system sends a request but does not receive a response (for example, because of a network timeout), query the key to check whether the transaction was created.
Example request
GET /api/transactionrequests/transactionKey/CLM-51837Example response:
{
"CreatedOn": "2026-05-13T10:15:00Z",
"TransactionRequestId": "747101ce-2d0c-41bd-ae4a-ba5a0c267c70"
}This allows your application to determine whether the original request was successfully received.
Field-based duplicate checking
Use field-based duplicate checking to compare selected values in a transaction request with previously processed transactions.
If the system identifies a matching transaction, Vitesse will reject the request and not process the payment.
Duplicate detection modes
| Mode | Fields used |
|---|---|
| Basic | Recipient.RecipientReference |
| Extended | ExternalReference1, ExternalReference2, ExternalReference3, Recipient.RecipientReference, Account.AccountNumber, Account.IBAN, Account.Swift |
Contact Support to enable this feature.
Choose a duplicate detection method
Use TransactionKey whenever possible. Transaction keys provide deterministic duplicate detection and help you recover safely from timeouts or connection failures.
Use field-based duplicate checking to add an additional layer of protection against accidentally submitting the same payment details more than once.
Updated 30 days ago