Transaction Monitoring

Learn how Cybrid manages ACH return risk with automatic holds on high-risk funding transfers.

ACH risk management

Cybrid analyzes each ACH funding deposit transfer to manage the risk of returns. Based on the Plaid Signal score for the originator, the platform determines whether a transfer requires a hold.

If the customer is considered high-risk, Cybrid automatically places a 2-day administrative hold on the transfer once it enters the pending state.

The hold captures ACH returns within the standard 2-day window, protecting your reserve account. If an ACH return occurs during the hold period, Cybrid credits the customer's external bank account instead. This ensures you can display accurate balances to end users.

ACH pull deposit transfer lifecycle

A transfer can progress through these states:

storingreviewingpendingholdingcompleted or failed

ℹ️

Conditional states

The reviewing and holding states are conditional and may not occur for every transfer.

Check if a transfer is on hold

Monitor the state field and hold_details block on any ACH pull funding deposit transfer.

API polling

Call GET /api/transfers/{transfer_guid} to retrieve hold details:

{
  "guid": "abc123def456abc123def456abc123ab",
  "transfer_type": "funding",
  "side": "deposit",
  "payment_rail": "ach",
  "state": "holding",
  "hold_details": {
    "applicable_types": [
      "administrative"
    ],
    "duration": 172800,
    "started_at": "2024-01-15T10:30:00.000Z"
  }
}
  • applicable_types populates shortly after transfer creation, indicating the type of hold that will apply.
  • duration and started_at populate only after the hold begins.
  • Add started_at + duration to calculate when funds release to the platform_available balance in the customer's fiat account.

Webhook events

Subscribe to the transfer.holding webhook event. When it fires, call GET /api/transfers/{transfer_guid} to retrieve the hold details including duration and applicable_types.

Once the transfer enters pending, inspect hold_details to check whether applicable_types includes administrative.