Flagged Transactions
Flagged Transactions
VoPay automatically reviews every transaction at the moment it is created. If a transaction matches certain risk criteria — for example, it looks like an accidental duplicate — it is flagged and paused before it is submitted for processing. A flagged transaction is not rejected: it simply waits until the flag is resolved, either by you (via the API) or automatically by VoPay.
This page explains why transactions get flagged, how to detect flagged transactions, and how to resolve them.
Flags are a safety net, not a failureA flag means the transaction needs a second look before funds move. Confirming a flag releases the transaction for normal processing. If a flag is left unresolved, the transaction is eventually cancelled and no funds move.
How it works
- You submit a transaction (EFT, ACH, Interac, RTP/RTR, wire, etc.).
- VoPay runs a series of automated checks before the transaction is queued for submission.
- If a check matches, the transaction is flagged and held — it will not be submitted to the payment network while an unresolved flag is present.
- The flag is resolved in one of three ways:
- You confirm the transaction using the
POST /account/transaction/confirmendpoint, and it proceeds normally. - You cancel the transaction if it was not intentional.
- The flag resolves automatically — some holds (such as insufficient funds or delayed processing) clear on their own, and unresolved flags are cancelled after a timeout (see Automatic resolution).
- You confirm the transaction using the
Detecting flagged transactions
In the transaction creation response
When a transaction is flagged at creation, the API response includes a Flagged field describing the reason:
{
"Success": true,
"ErrorMessage": "",
"TransactionID": "45563",
"Flagged": "The transaction has been flagged for the following reason(s) and may experience a delay in processing: This transaction has been flagged as a potential duplicate due to similarities with transactions 45561. You can remove the flag by using the /account/transaction/confirm endpoint."
}In the transaction listing
Use the IsFlagged query parameter on GET /account/transactions to retrieve transactions that currently have an unresolved flag:
GET /api/v2/account/transactions?IsFlagged=true
Each transaction in the response includes a TransactionFlag field. For flagged transactions it contains the flag type and, for duplicates, the IDs of the related transactions:
{
"TransactionID": "45563",
"TransactionStatus": "pending",
"TransactionFlag": "duplicate - 45563,45561"
}An empty TransactionFlag means the transaction is not flagged (or its flag has already been resolved).
Flag types you can action
These flags are surfaced to you through the API and can be cleared with the confirm endpoint.
Potential duplicate (duplicate)
duplicate)Raised when a new transaction closely matches another recent transaction on your account. Two transactions are considered potential duplicates when all of the following match, within a 3-hour window:
- Same transaction type (e.g., both EFT withdrawals)
- Same amount and currency
- Same recipient (same bank account and name, or for Interac transactions, the same email address or phone number)
- The earlier transaction is still active (not already successful, failed, or cancelled)
Both the new and the original transaction are flagged, and the flag message lists the related transaction IDs so you can compare them.
How to avoid duplicate flags for intentional repeat payments:
- Include an
IdempotencyKeywhen creating the transaction. Transactions submitted with an idempotency key are treated as intentional and are never flagged as duplicates. - If your use case regularly involves identical back-to-back payments, duplicate detection can be adjusted for your account — contact your account manager.
High-risk IP address (high-risk-ip)
high-risk-ip)Raised when a transaction originates from an IP address that threat-intelligence data classifies as high risk. IP addresses on your account's authorized IP list are exempt.
If the transaction is legitimate, confirm it to release it. This check is an optional account feature; talk to your account manager about enabling or tuning it.
Potential fraud — Interac (interac-fraud)
interac-fraud)Interac bulk payout transactions may be flagged as potentially fraudulent by the payment network. Confirming the transaction both releases the hold and reports the transaction as legitimate, which helps prevent similar false positives.
Automatic holds
These holds are applied and released by VoPay automatically. They appear in the transaction's status history, and no action is required from you unless noted.
| Hold | What it means | How it resolves |
|---|---|---|
| Insufficient funds | Your account (or the client account/wallet funding the transaction) does not have enough available balance. The transaction is queued rather than failed. | Automatically released once sufficient funds are available. If the balance is still insufficient after 24 hours, the transaction is cancelled. |
| Delayed processing | Your account has a delayed-release hold configured for this transaction type (a fixed number of days between creation and submission). | Automatically released when the hold period ends. |
| Compliance screening | Transactions of $100,000 or more undergo additional compliance screening. | Screening runs automatically; the hold is released once it completes. VoPay will contact you if anything further is needed. |
| Bank account validation | For US ACH transactions, accounts with account validation enabled require the counterparty bank account to be verified before first use. | Released automatically once the bank account passes validation. |
| Restricted recipient | The destination bank account or email address is blocked due to prior fraud or returns. | The transaction fails automatically with a failure reason. Contact support if you believe this is in error. |
Resolving a flag
Confirm the transaction
If the flagged transaction is legitimate, confirm it:
POST /api/v2/account/transaction/confirm
| Parameter | Required | Description |
|---|---|---|
AccountID | Yes | Your account ID |
Key | Yes | API key for the account |
Signature | Yes | Hashed signature for the request |
TransactionID | Yes | The ID of the flagged transaction |
{
"Success": true,
"ErrorMessage": "",
"TransactionID": "45563",
"TransactionConfirmed": true
}Confirming clears all actionable flags on the transaction and releases it for processing in the next submission cycle.
Confirm each flagged transaction separatelyWhen two transactions are flagged as duplicates of each other, both are held. If both are intentional, confirm both. If one was accidental, confirm the intended one and cancel the other.
Cancel the transaction
If the flag caught a genuine mistake (for example, an accidental double submission), cancel the unwanted transaction with the standard POST /transaction/cancel endpoint instead of confirming it.
Automatic resolution and timeouts
| Situation | Outcome |
|---|---|
| Actionable flag (duplicate, high-risk IP, etc.) left unresolved for 7 days | Transaction is cancelled |
| Insufficient-funds hold not funded within 24 hours | Transaction is cancelled |
| Interac bulk payout blocked as fraud and unresolved for 30 days | Transaction is reversed and cancelled |
| Delayed-processing hold | Released automatically at the end of the configured hold period |
| Compliance screening | Released automatically once screening completes |
Best practices
- Use idempotency keys. Passing a unique
IdempotencyKeywith every transaction prevents duplicate flags on intentional repeat payments and protects you against accidental double submissions. - Monitor for flags. Poll
GET /account/transactions?IsFlagged=true(or check theFlaggedfield on creation responses) so flagged transactions don't sit unnoticed. - Act promptly. Unresolved flags cancel the transaction after 7 days — confirm or cancel well before then to avoid unexpected cancellations.
- Review before confirming. The flag message includes the related transaction IDs for duplicates; verify the earlier transaction before releasing the new one.
Updated 3 days ago