COS offers the ability to create subledgers instantly and on-demand. A subledger can be linked to any existing deposit account, also known as the master account.


Subledger API Endpoints

In API endpoints involving subledgers, “subaccounts” is used instead of subledgers. For instance, GET/v1/dda/subaccounts.

In COS, subledgers are a first class citizen. All transactions first go through a subledger, followed by the master account. Each master account has what is called an "implicit" subledger, which is automatically created and maintained. The implicit subledger accounts for the portion of the balance which is directly attributed to the master account's activity. COS does this by giving it the same account number as the master.

With the use of an implicit subledger, a master account's subledgers will always sum to the balance of the master account. It is virtually impossible for your master account and subledger to be out of balance.

It’s also important to note that the master account's implicit balance can go negative. This would occur in situations where more funds are attributed to other subledgers than the master account directly. It is the responsibility of the partner to maintain and reconcile the subledger system.

For API reference on subledgers click here.


Real-Time Subledger

The subledger and master account balances are updated atomically and never out of sync. Funds posted to a subaccount are immediately available from the master account.

Key Differences

You may be wondering whether you should be using master accounts or subledgers. You generally need to use master accounts (e.g. checking and savings accounts) if any of the following are true:

  • Customer of CRB is the end user, such that the tax ID on the account is the customer's tax ID.
  • Customers require monthly statements for each account
  • Customers require yearly tax documents

Subledgers are a better fit when:

  • The customer of CRB is the partner, such that the tax ID on the account is the partner's tax ID.
  • Unique account number aliases are needed to ease accounting and reconciliation of payments
  • All transactions should be reported on a single monthly statement

Account Numbers

Subledger numbers, as with all COS account numbers, are globally unique within the bank. Subledger numbers are 12 digits and follow this format:

3 [10 digit random number] [check digit]

Note: All subledger account numbers within COS start with the numeral "3".

In theory, it is possible to create millions of sub accounts under a single master account.


Account Check Digit

All COS accounts use a luhn check digit to validate the other digits in the account number. For more information on the luhn algorithm click here.

Sample Subledger

In this example, a checking account has been opened with an initial deposit of $500. Note that an implicit subledger with the same number has been created and is tracking the balance of the master.

Master Account #Subledger #Balance
2000012345 (Implicit) $500

Next, two sub ledgers are created at the request of the partner:

Master Account #Subledger #Balance
2000012345 (Implicit)$500

A wire for $500 is then sent to each of the subledgers:

Master Account #Subledger #Balance
2000012345 (Implicit)$500

Finally, an ACH for $1,000 is pulled from the master account directly:

Master Account #Subledger #Balance
2000012345 (Implicit)($500)

Note that the implicit subledger is now negative; however, the sum of the subledger still correctly reflects the master account's balance. It is good practice to transfer subledger funds to the master account before spending the money. Ideally the implicit balance should match the master balance.

Subledger Types

COS supports two types of subledgers. The first type is called a passthrough ledger. In a passthrough ledger the subledger balance can go negative, and only the master balance will be used in transaction decisions.

The other type is called a direct ledger. Under a direct ledger the subledger balance will be used in transaction decisions. The implicit subledger cannot go negative.

A direct ledger system can be more difficult to manage, since in order to withdraw funds from the master account, the funds must be transferred from its subledger accounts to the implicit master account. For this reason, it is recommended to use a passthrough ledger configuration whenever possible.

The example below illustrates a use case where a partner is using subledgers for their program and how transactions on the subledgers would be decisioned based on the subledger type.

PassthroughKey FeaturesDirect
YesInstantaneous rollup of transactions to the master account balanceYes
YesFully routable on all payment rails (i.e. ACH, Wires, RTP, etc.)Yes
YesSupports webhooks on subledger events (such as inbound transactions)Yes
YesReflects balance of transactions cleared against accountYes
YesSubledger can carry a negative balanceNo
YesWill allow transactions to clear against subledger when balance < $0
(as long as the master account has sufficient funds)
NoBest for model where funds availability is managed at the subledger levelYes
YesBest for model where funds availability is managed outside of subledger with need for visibility and efficiency of transactional flows with co-mingled fundsNo

Opening Subledgers

Subledgers can be opened under any master account, such as a checking or savings account. The only information required is the master account number and Title field. The Title is typically set to the name of the partner. Subledgers also support a beneficiary profile for storing additional data such as the name and address associated with the subledger. Your implementation manager will assist you with any questions related to the data used to populate these fields, as they can vary by use case and program.

Once opened, the subledger is ready to transact usually within a few seconds or less. Note that the various payment rails (ACH, Wires, RTP, etc.) may take a short amount of time to synchronize and become "aware" of the new subledger.

POST /core/v1/dda/subaccounts
  "masterAccountNumber": "2001231234",
  "title": "Acme Co",
  "beneficiary": {
    "referenceId": "ABC789",
    "entityName": "Acme Co",
    "streetAddress1": "400 Business Street",
    "streetAddress2": "Suite 123",
    "city": "New York",
    "state": "NY",
    "postalCode": "10025",
    "countryCode": "US",
    "phoneNumber": "2015551234",
    "emailAddress": "[email protected]",
    "notes": "Testing 123"