GuidesRecipesAPI ReferenceChangelog
Guides

Reserve Account

How does the reserve account work?

Overview

The reserve account is a pre-funded account required as a condition of receiving ACH/EFT services from Cybrid. It mitigates ACH settlement risk, fraud losses, and chargebacks by ensuring funds are always available to cover returned transactions.

When a deposit returns (e.g., ACH return), the customer's balance may go negative. Cybrid automatically uses your reserve funds to bring the balance back to zero.

Understand ACH returns

ACH transactions are not instant final settlements — they can be reversed days, weeks, or months later. The reserve account ensures funds are always available to cover these returns.

Why is my company responsible for ACH returns?

When you initiate an ACH deposit, your company acts as the Originator. Under NACHA rules and banking regulations, the Originator is responsible for the validity of the transaction and the credit risk of the end-user.

Because your company manages the customer relationship and authorizes the pull of funds, the financial liability for a return (such as insufficient funds or a dispute) rests with you. The reserve account ensures that the banking network can settle these returns immediately without relying on external collections.

Administrative returns

When Cybrid originates ACH deposits, the counterparty bank has 2 business days to request an administrative return. The most common type is R01 (NSF / insufficient funds), but counterparty banks can issue various other return types within this window.

When a return occurs, Cybrid must immediately return the funds to the counterparty bank — even if those funds have already been used on the Cybrid Platform for a payment or digital asset swap. The reserve fund covers these losses and is essential when you want to remove the standard 2-business-day hold that Cybrid places on ACH deposits.

NACHA return rate thresholds

To maintain standing with the NACHA network, Cybrid monitors return rates across all partners. Exceeding these thresholds can lead to fines, mandatory audits, or loss of ACH privileges.

Return categoryNACHA limitTypical reason codes
Unauthorized< 0.5%R05, R07, R10 (customer disputes)
Administrative< 3.0%R02, R03, R04 (invalid/closed accounts)
Overall rate< 15.0%R01 (NSF / insufficient funds)

Extended risk from unauthorized returns

In addition to the 2-business-day administrative return window, ACH deposits are subject to unauthorized debit returns for a longer period. For consumer accounts, a counterparty bank may submit an unauthorized return (most commonly R10 – Unauthorized Debit) up to 60 calendar days after the consumer receives the bank statement on which the transaction appears.

These returns are initiated due to customer disputes, fraud claims, or authorization issues and can occur well after funds have settled and been made available on the Cybrid Platform. If the funds have already been used for payments, swaps, or digital asset purchases, Cybrid remains obligated to return the funds when the unauthorized return is received.

As a result, ACH deposits carry ongoing exposure beyond the initial hold period. The reserve fund is required to limit Cybrid’s financial exposure to losses arising from both short-term administrative returns and delayed unauthorized returns, particularly when partners request faster access to ACH funds or removal of the standard hold.

Maintain your reserve balance

You must maintain a minimum reserve balance of $10,000.00 USD. Cybrid may require a higher balance based on your ACH volume, loss history, and risk exposure, calculated through the Risk Ratio Framework (RRF).

If your reserve falls below the required balance, you must replenish it within three (3) business days to avoid service disruptions or extended hold periods on funds.

Risk Ratio Framework

Cybrid calculates your reserve requirement monthly using the Risk Ratio Framework (RRF). Your required balance is the greater of:

  • (a) The Minimum Reserve of USD $10,000.00; or
  • (b) The Three-Month Average Return Liability (the total value of ACH returns across all return types for the preceding three months).

Cybrid automatically holds all customer fiat deposits for two (2) business days. If you require access to funds sooner, use the instant funding API. Cybrid notifies you of any reserve shortfall, and you must restore the balance within three (3) business days of notice.

Operational recommendations

  • Monitor your reserve balance: Regularly check platform_available to ensure adequate funds
  • Top up proactively: Transfer funds to the reserve before it drops below the required balance — you have three business days to replenish, but early action prevents service disruptions
  • Review loss recovery transfers: Track these transfers to understand your loss exposure from returned deposits

Manage your reserve account

Each production bank on the Cybrid Platform has an associated reserve account that can hold fiat funds.

Cybrid's compliance team assesses your risk profile, overall transaction flow or projections, and determines the amount of reserve you must hold on the Cybrid Platform.

Cybrid automatically creates the reserve account when you create your production bank. If you do not have a reserve account, contact the Cybrid team and the account will be created for you.

⚠️

Reserve account withdrawals are restricted

You cannot withdraw funds from the reserve account via the public API. Book transfers with the reserve account as the source will fail. This restriction ensures the reserve maintains sufficient funds to cover potential customer losses. Only Cybrid can withdraw funds from the reserve account during loss recovery.

Retrieve reserve account details

When you list platform accounts or retrieve your reserve account, you see the following fields:

FieldDescription
guidUnique identifier for the reserve account
typereserve
assetThe fiat currency code (e.g., USD)
stateAccount state (typically created)
platform_balanceCurrent balance in base units (e.g., cents for USD)
platform_availableAvailable balance for operations

To retrieve your reserve account:

GET /api/accounts?type=reserve
Authorization: Bearer YOUR_TOKEN
{
  "total": 1,
  "page": 0,
  "per_page": 10,
  "objects": [
    {
      "guid": "account_guid",
      "type": "reserve",
      "asset": "USD",
      "state": "created",
      "platform_balance": 500000,
      "platform_available": 500000,
      "bank_guid": "bank_guid"
    }
  ]
}

Review loss recovery transfers

When a loss occurs on the Cybrid Platform due to a transfer return, Cybrid recovers the lost funds using your reserve account.

When Cybrid uses your reserve to cover a returned deposit, a loss recovery transfer appears in your transfer list with the following characteristics:

FieldValue
transfer_typeloss_recovery
source_accountYour reserve account
destination_accountThe affected customer's fiat account

The platform creates these transfers automatically—you do not initiate them. You can review loss recoveries by querying the List Transfers endpoint:

GET /api/transfers?transfer_type=loss_recovery
Authorization: Bearer YOUR_TOKEN

Loss recovery transfer characteristics

A loss_recovery transfer moves funds from the bank's reserve account to a customer's fiat account. It restores the customer's balance after a funding or instant_funding transfer is returned.

  • Direction: Always a deposit (reserve to customer fiat)
  • Activity limits: Exempt from customer transfer limits
  • Returns: Cannot be returned
  • Customer validation: Skips validation — the customer may no longer be active

Handle loss recovery webhooks

To detect loss recovery transfers in your webhook handler:

  1. Receive all transfer.* events
  2. Call GET /api/transfers/{transfer_guid} using the event's object_guid to fetch transfer details
  3. Check if transfer_type is loss_recovery
  4. Process accordingly (e.g., update internal records, notify the customer)
  5. Verify the webhook signature using the stored signing_key and the X-Cybrid-Signature header (HMAC-SHA256)

For webhook signature verification details, see Webhooks.

Fund your reserve account

To fund your reserve account, retrieve your deposit bank account details and initiate an external transfer.

⚠️

Reserve accounts created before February 2026

If your reserve account was created before February 2026, you must first create a deposit bank account before you can receive funds. See Create a deposit bank account for existing reserve accounts below.

Step 1: Retrieve your deposit bank account details

First, list deposit bank accounts for your reserve account to find the associated deposit bank account:

GET /api/deposit_bank_accounts?bank_guid={bank_guid}
Authorization: Bearer YOUR_TOKEN
{
  "total": 1,
  "page": 0,
  "per_page": 10,
  "objects": [
    {
      "created_at": "datetime",
      "updated_at": "datetime",
      "guid": "deposit_bank_account_guid",
      "type": "main",
      "bank_guid": "bank_guid",
      "customer_guid": null,
      "account_guid": "account_guid",
      "asset": "USD",
      "state": "created",
      "unique_memo_id": "unique_memo_id",
      "labels": null
    }
  ]
}

Then retrieve the full details including routing information using the deposit bank account GUID:

GET /api/deposit_bank_accounts/{deposit_bank_account_guid}
Authorization: Bearer YOUR_TOKEN
{
  "created_at": "datetime",
  "updated_at": "datetime",
  "guid": "deposit_bank_account_guid",
  "type": "main",
  "bank_guid": "bank_guid",
  "customer_guid": null,
  "account_guid": "account_guid",
  "asset": "USD",
  "state": "created",
  "unique_memo_id": "unique_memo_id",
  "counterparty_name": "counterparty_name",
  "counterparty_address": {
    "street": "123 Main St",
    "street2": null,
    "city": "New York",
    "subdivision": "NY",
    "postal_code": "10001",
    "country_code": "US"
  },
  "account_details": [
    {
      "account_number": "111222333"
    }
  ],
  "routing_details": [
    {
      "routing_number": "021000021",
      "routing_number_type": "ABA"
    }
  ],
  "labels": null
}

Step 2: Initiate an external transfer

Initiate an ACH push, Wire, or RTP/FedNow transfer to the deposit bank account using your online banking or other method outside of the Cybrid platform.

Monitor the transfer until it completes:

GET /api/transfers?transfer_type=funding&side=deposit
Authorization: Bearer YOUR_TOKEN

Create a deposit bank account for existing reserve accounts

ℹ️

Reserve accounts created before February 2026

If you have a reserve account that was created before February 2026, you must manually create a deposit bank account for it before you can receive external funds.

Step 1: Create the deposit bank account

POST /api/deposit_bank_accounts
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
  "type": "main",
  "account_guid": "account_guid"
}
{
  "created_at": "datetime",
  "updated_at": "datetime",
  "guid": "deposit_bank_account_guid",
  "type": "main",
  "bank_guid": "bank_guid",
  "customer_guid": null,
  "account_guid": "account_guid",
  "asset": "USD",
  "state": "storing",
  "unique_memo_id": "unique_memo_id",
  "labels": null
}

Step 2: Monitor the deposit bank account state

The deposit bank account state will transition from storing to created. Monitor the state:

GET /api/deposit_bank_accounts/{deposit_bank_account_guid}
Authorization: Bearer YOUR_TOKEN

Once the state is created, you can proceed to fund your reserve account following the steps above.

Related resources