Transfer
A transfer is the action of moving funds, or voiding the move of funds. Note funds may be transferred between two CorePro accounts, or one CorePro account and an external account. Funds may not be transferred between two external accounts.
NOTE: One transfer typically creates exactly one transaction. However, if a fee (such as a RegD fee) or some other kind of surcharge applies, more than one transaction may be created.
Transfer Timeline ‐ Detailed Overview (pdf)
In the Sandbox environment, transfers that would typically take multiple days are automatically settled every hour on the hour. This is to enable easy testing of external funds settlement, since no funds are actually being transferred to an external financial institution.
Below is a description of the typical transfer timelines involving funds moving in and out of CorePro.
For Programs Without NACHA Enabled
Source | Destination | Transfer Method | Result |
---|---|---|---|
CorePro Account | CorePro Account | API call to /transfer/create or receiving a Bulk Transfer Request File | Settles immediately |
CorePro Account | External Account 1 | API call to /transfer/create or receiving a Bulk Transfer Request File | Settles immediately |
External Account 1 | CorePro Account | API call to /transfer/create or receiving a Bulk Transfer Request File | Settles immediately |
1 Programs that do not use NACHA must somehow perform transfers of funds to the External Financial Institution. This functionality is outside the scope of CorePro. |
For Programs With NACHA Enabled
ODFI | Source | Destination | Transfer Method | Result |
---|---|---|---|---|
N/A 1 | CorePro Account | CorePro Account 2 | API call to /transfer/create or receiving a Bulk Transfer Request File | Settles immediately |
CorePro 3 | CorePro Account | External Account | API call to /transfer/create or receiving a Bulk Transfer Request File to "push" funds out of CorePro | Settles according to time table below |
CorePro 3 | External Account | CorePro Account | API call to /transfer/create or receiving a Bulk Transfer Request File to "pull" funds into CorePro | Settles according to time table below |
External Financial Institution 4 | CorePro Account | External Account | Receiving an ACH via NACHA to "pull" funds out of CorePro | Settles immediately |
External Financial Institution 4 | External Account | CorePro Account | Receiving an ACH via NACHA to "push" funds into CorePro | Settles immediately |
1 Transfers with a CorePro Account as both the source and destination do not go through the ACH via NACHA process, and therefore have no ODFI. 2 Both CorePro accounts must be owned by the same customer; funds can never be moved directly from one customer to another within CorePro 3 "Day 1" in table below is when CorePro initiated the transaction and "Day 2" is when CorePro submitted the ACH via NACHA 4 "Day 1" in table below is when the External FI initiated the transaction and "Day 2" is when the External FI submitted the ACH via NACHA |
Transfer Timeline Table
NOTE: The Financial Institution for your program may dictate that a customer be in a Verified
status for a minimum number of business days (typically 10
) prior to being allowed to withdraw funds. If this is the case, the timelines below will not apply until after that period has expired.
For instance, if a customer is verified on 2017-02-09 and there is a 10 business day minimum before withdrawal, 2017-02-24 would be the first date those funds are available for withdrawal (4 weekend days and 1 Federal Banking Holiday occur during this period; 10 + 4 + 1 = 15 days from verification date, or 2017-02-24).
Initiated On (Day 1) | Sent To Fed for Processing On (Day 2) | Settles On (Day 3) |
---|---|---|
Monday | Tuesday | Wednesday |
Tuesday | Wednesday | Thursday |
Wednesday | Thursday | Friday |
Thursday | Friday | Monday |
Friday | Monday | Tuesday |
Saturday | Monday | Tuesday |
Sunday | Monday | Tuesday |
NOTE: If either the Processing Day (Day 2) or Settling Day (Day 3) is a weekday that is also a banking holiday, the Processing Day and/or Settling Day are pushed back to the next business day.
transfer Object
Represents a single transfer in CorePro.
details
Property | Data Type (length) |
Description |
---|---|---|
customerId |
integer | Customer who owns the From and To Bank Accounts |
fromId |
integer | The accountId from which funds are transferred. Note this is NOT accountNumber from the account or externalAccount objects. It is accountId or externalAccountId. |
toId |
integer | The accountId to which funds are transferred. Note this is NOT accountNumber from the account or externalAccount objects. It is accountId or externalAccountId. |
tag |
string (50) | A program-wide unique identifier in your system for this transfer which may be useful for search purposes. You will be able to search via this value in the CorePro Admin console. Must be unique per a given Program. Maximum length is 50 characters. |
amount |
decimal | The amount of funds to transfer |
description |
string (255) | A client-specified description which will appear in the description property on the transaction object if the transfer is successful. |
nachaDescription |
string (255) |
Deprecated; equivalent to |
transferResponse Object
Represents a single transferResponse in CorePro.
details
Property | Data Type (length) |
Description |
---|---|---|
customerId |
integer | The customerId who created the transfer. |
transactionId |
long integer (64-bit integer) | transactionId uniquely identifies a single transfer. Any files generated from CorePro will use transactionId as the identifier for a single transfer. transactionId is NACHA-compliant (i.e. 15 or fewer digits in length). |
tag |
string (50) | unique identifier in your system for this transfer which may be useful for search purposes. You will be able to search via this value in the CorePro Admin console. Must be unique per a given Program. Maximum length is 50 characters. |
masterId |
long integer (64-bit integer) | CorePro-generated key that groups related transactions together. If a transaction directly relates to one or more other transactions, they will all have the same value for the masterId property. |
create
Transfer funds from one account to another. Result is a new transaction which can be retrieved via the various /transaction/* routes.
Note: This route returns a 200 upon success. If you use a Q2 provided SDK, this route returns a 201 upon success instead.
POST /transfer/create
Request Body Parameters
customerId |
Required | Customer ID (returned when customer originally created) |
fromId |
Required | Account from which funds will be withdrawn. Must be a valid accountId, externalAccountId, or programAccountId for the given customer. |
toId |
Required | Account to which funds will be deposited. Must be a valid accountId, externalAccountId, or programAccountId for the given customer. |
amount |
Required | Amount the transfer. |
tag |
Optional | Program-wide unique identifier supplied by the caller. |
description |
Optional | A client-specified description to apply to the description property of the corresponding transaction object. |
nachaDescription |
Optional | Deprecated; equivalent to |
isSameDaySettle |
Optional | Whether or not the transfer is Same Day ACH. Default is false . Same Day ACH must be enabled for your program to pass true . |
Response Data
A list of transferResponse Objects |
Error Codes
Code | Message (en-US) | Notes |
1-60000 | Any "Common Error Code" may occur. | See Common Error Codes |
63601 | Invalid source account id {0}. | |
63602 | Destination account id {0} is closed. | |
63603 | Source account id {0} is not in a Verified status. | |
63610 | Invalid destination account id {0}. | |
63611 | Source account id {0} is inactive. | |
63612 | Source account id {0} is frozen. | |
63613 | Account is temporarily locked (Reason={0}). | |
63641 | Amount to withdraw must be between {0:C} and {1:C}. | |
63642 | Cannot withdraw more than {0:C} per day from source account {1}. | |
63643 | Cannot withdraw more than {0:C} per month from source account {1}. | |
63644 | Cannot withdraw more than {0:C} per day for this program. | |
63650 | Amount to deposit must be between {0:C} and {1:C}. | |
63651 | Cannot deposit more than {0:C} per day to destination account {1}. | |
63652 | Cannot deposit more than {0:C} per month to destination account {1}. | |
63653 | Cannot deposit more than {0:C} per day for this program. | |
63654 | Cannot exceed maximum aggregate balance of {0:C} (including pending transactions). | |
63655 | Cannot exceed maximum account balance of {0:C} (including pending transactions). | |
63660 | Transaction with tag '{0}' already exists. | |
63661 | Cannot deposit more than {0:C} per day for this customer. | |
63662 | Cannot deposit more than {0:C} per month for this customer. | |
63663 | Cannot deposit more than {0:C}. | |
63664 | Customer id {0} has insufficient privileges to deposit funds into account id {1}. | |
63665 | Cannot request a same day settlement beyond the daily deadline of {1}. | |
63666 | Same day settlement transactions cannot exceed $25,000. | |
63667 | No Same Day ACH Settlement Time configured for program {0}. | |
63668 | Cannot request a same day settlement on a weekend or a banking holiday. | |
63669 | Same day settlement transactions cannot exceed $100,000. | |
63670 | Destination account id {0} is locked. | |
63701 | Invalid source account id {0}. | |
63702 | Source account id {0} is closed. | |
63703 | Account is temporarily locked (Reason={0}). | |
63710 | Invalid destination account id {0}. | |
63711 | Destination account id {0} is inactive. | |
63712 | Destination account id {0} is locked. | |
63713 | Destination account id {0} is not in a Verified status. | |
63714 | Cannot withdraw more than {0} times per month from source account {1}. | |
63740 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. | |
63741 | Amount to withdraw must be between {0:C} and {1:C}. | |
63742 | Cannot withdraw more than {0:C} per day from source account {1}. | |
63743 | Cannot withdraw more than {0:C} per month from source account {1}. | |
63744 | Cannot withdraw more than {0:C} per day for this program. | |
63745 | Cannot withdraw from savings account {0} more than 6 times per month (per RegD). | |
63750 | Amount to deposit must be between {0:C} and {1:C}. | |
63751 | Cannot deposit more than {0:C} per day to destination account {1}. | |
63752 | Cannot deposit more than {0:C} per month to destination account {1}. | |
63753 | Cannot deposit more than {0:C} per day for this program. | |
63760 | Transaction with tag '{0}' already exists. | |
63762 | Cannot withdraw more than {0:C} per day for this customer. | |
63763 | Cannot withdraw more than {0:C} per month for this customer. | |
63764 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
63765 | Cannot request a same day settlement beyond the daily deadline of {1}. | |
63766 | Same day settlement transactions cannot exceed $25,000. | |
63767 | No Same Day ACH Settlement Time configured for program {0}. | |
63768 | Cannot request a same day settlement on a weekend or a banking holiday. | |
63769 | Same day settlement transactions cannot exceed $100,000. | |
63801 | Invalid source account id {0}. | |
63802 | Invalid destination account id {0}. | |
63803 | Transaction with tag '{0}' already exists. | |
63804 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. | |
63805 | Amount to withdaw must be between {0:C} and {1:C}. | |
63806 | Amount to withdaw must be between {0:C} and {1:C}. | |
63807 | Amount to deposit must be between {0:C} and {1:C}. | |
63808 | Source and destination account must be different. | |
63809 | Cannot exceed maximum account balance of {0:C} (including pending transactions). | |
63810 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
63811 | Customer id {0} has insufficient privileges to deposit funds into account id {1}. | |
63812 | Source account id {0} is closed. | |
63813 | Destination account id {0} is closed. | |
63814 | Account is temporarily locked (Reason={0}). | |
63815 | Account is temporarily locked (Reason={0}). | |
63901 | Invalid source account id {0}. | |
64001 | Invalid destination account id {0}. | |
64002 | Insufficient funds in Program Account. | |
64101 | Invalid source account id {0}. | |
64102 | Transaction with tag '{0}' already exists. | |
64103 | FullAmount ({0}) or RetailClearingAmount ({1}) or CoreProAmount ({2}) is not specified. | |
64104 | FullAmount ({0}) <> RetailClearingAmount ({1}) + CoreProAmount ({2}). | |
64105 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. | |
64106 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
64107 | Source account id {0} is closed. | |
64108 | Account is temporarily locked (Reason={0}). | |
64201 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. RegD fee amount is {3:C}. | |
64301 | Transaction with tag '{0}' already exists. | |
64401 | Transaction with tag '{0}' already exists. | |
64402 | Account is temporarily locked (Reason={0}). | |
64501 | Transaction with tag '{0}' already exists. | |
64502 | Transaction with tag ''{0}'' already exists. | |
64503 | Insufficient funds in source account id {0}. Current available balance is {1:C}. | |
64504 | Account is temporarily locked (Reason={0}). | |
64601 | Account is temporarily locked (Reason={0}). | |
65001 | Invalid source account id {0}. | |
65002 | Invalid destination account id {0}. | |
65003 | At least one account must not be an external account. | |
65004 | Invalid source account id {0} or destination account id {1} ({2}). | |
65005 | Tag '{0}' already exists. If provided, each transfer created must have a unique tag. | |
65006 | Amount {0} is invalid because it has more than {1} significant digits to the right of the decimal. | |
65007 | Customer id ''{0}'' has insufficient privileges to deposit funds into account id ''{1}''. | |
65008 | Valid transfer amount has to be greater than $0.00 Passed in transfer amount of {0:C} is an invalid transfer amount. | |
65101 | TransactionId {0} or Tag ''{1}'' was not found. | |
65102 | Transfer for TransactionId {0} cannot be voided because its current status is {1}. Only those with a status of Initiated can be voided. | |
65103 | Transfer for TransactionId {0} cannot be voided because its type is {1}. | |
65200 | Transaction status must be Settled to perform a Reversal. Current status = {0} for transactionId = {1}. | |
65401 | Invalid source account id {0}. | |
65402 | Invalid destination account id {0}. | |
65403 | Customer id ''{0}'' has insufficient privileges to deposit funds into account id ''{1}''. | |
65404 | Transaction with Tag {0} already exists. | |
65405 | Destination account id {0} is closed. | |
65406 | Account is temporarily locked (Reason={0}). | |
67301 | Invalid destination account id {0}. | |
67302 | Customer id {0} has insufficient privileges to deposit funds into account id {1}. | |
67303 | Account is temporarily locked (Reason={0}). | |
67401 | Invalid source account id {0}. | |
67402 | Invalid destination account id {0}. | |
67403 | Amount must be a positive value. | |
67404 | Account is temporarily locked (Reason={0}). | |
67405 | Insufficient funds in Program Account). | |
67501 | Invalid source account id {0}. | |
67502 | Transaction with tag '{0}' already exists. | |
67503 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. | |
67504 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
67505 | Source account id {0} is closed. | |
67506 | Account is temporarily locked (Reason={0}). | |
67601 | Invalid source account id {0}. | |
67602 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. | |
67603 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
67604 | Account is temporarily locked (Reason={0}). | |
67701 | Invalid source account id {0}. | |
67702 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. | |
67703 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
67704 | Account is temporarily locked (Reason={0}). | |
67801 | Invalid destination account id {0}. | |
67802 | Customer id {0} has insufficient privileges to deposit funds into account id {1}. | |
67803 | Account is temporarily locked (Reason={0}). | |
68401 | Invalid destination account id {0}. | |
68402 | Destination account id {0} is not open. | |
68403 | Customer id {0} has insufficient privileges to deposit funds into account id {1} | |
68404 | Account is temporarily locked (Reason={0}). | |
68701 | Invalid source account id {0}. | |
68702 | Invalid destination account id {0}. | |
68703 | Transaction with tag '{0}' already exists. | |
68704 | Destination account id {0} is closed. | |
68705 | Insufficient funds in Program Reserve Account. | |
68706 | Customer id ''{0}'' has insufficient privileges to deposit funds into account id ''{1}''. | |
68707 | Account is temporarily locked (Reason={0}). | |
68801 | Invalid destination account id {0}. | |
68803 | Transaction with Tag {0} already exists. | |
68804 | Account is temporarily locked (Reason={0}). | |
68901 | Invalid destination account id {0}. | |
68903 | Transaction with Tag {0} already exists. | |
68904 | Insufficient Funds in program Account. | |
68951 | Invalid source account id {0}. | |
68952 | Invalid destination account id {0}. | |
68953 | Transaction with Tag {0} already exists. | |
68954 | Account is temporarily locked (Reason={0}). | |
69401 | Account is temporarily locked (Reason={0} | |
69402 | Must be an administrator to transfer funds from account {0} to the ProgramReserve account. | |
69403 | Invalid source account id {0}. | |
69404 | Given destination account id {0} is not configured as a ProgramReserve account for program {1}. | |
69405 | Insufficient funds in source account id {0}. Current available balance is {1:C}. Requested withdraw amount is {2:C}. | |
69406 | Invalid source account id {0}. | |
69407 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
69408 | Source account id {0} is closed. | |
69600 | Account is temporarily locked (Reason={0}). | |
69601 | Transaction with Tag {0} already exists. | |
69602 | Insufficient Funds in program account | |
69701 | Invalid source account id {0}. | |
69703 | Customer id {0} has insufficient privileges to withdraw funds from account id {1}. | |
69704 | Account is temporarily locked (Reason={0}). | |
69800 | No InterestExpense Account configured for program {0}. | |
69801 | Invalid destination account id {0}. | |
69802 | Transaction with Tag {0} already exists. | |
69803 | Destination account id {0} is closed. | |
69804 | Customer id ''{0}'' has insufficient privileges to deposit funds into account id ''{1}''. | |
69805 | Account is temporarily locked (Reason={0}). | |
70400 | Insufficient funds in Program Clearing Account. | |
70500 | Insufficient funds in Program Reserve Account. | |
70600 | Insufficient funds in Program Reserve Account. | |
70700 | Insufficient funds in Program Account. | |
108001 | Invalid account id {0}. | |
108002 | Customer id ''{0}'' has insufficient privileges to deposit funds into account id ''{1}''. | |
108003 | Account is temporarily locked (Reason={0}). | |
108004 | Insufficient funds in Program Account. | |
108101 | Invalid source account id {0}. | |
108102 | Invalid destination account id {0}. | |
108103 | Customer id ''{0}'' has insufficient privileges to deposit funds into account id ''{1}''. | |
108104 | Account is temporarily locked (Reason={0}). | |
108105 | Insufficient funds in Program Account. |
Example
Request
POST /transfer/create Authorization: Basic PutBase64TokenHere
{ "amount": 15.25, "customerId": 252742, "fromId": 252743, "description": "Weekly Transfer", "toId": 255507 }
Response
200
{ "data": [ { "customerId": 252742, "masterId": 28183519, "transactionId": 28183520 } ], "errors": [], "requestId": "ded17335-5cfd-4513-8975-96b1d865d57c", "status": 200 }
void
Void a transaction previously created via /transfer/create
.
NOTE: Only transactions in a status of Initiated
may be voided.
POST /transfer/void
Request Body Parameters
customerId |
Required | Customer ID (returned when customer originally created) |
tag |
Required if transactionId is not supplied | Must match value given at transfer create time. |
transactionId |
Required if tag is not supplied | Returned when transfer was created |
Response Data
A list of transferResponse Objects |
Error Codes
Code | Message (en-US) | Notes |
1-60000 | Any "Common Error Code" may occur. | See Common Error Codes |
63101 | Transaction status must be Initiated to perform a Void. Current status = {0}. | |
65101 | TransactionId {0} or Tag '{1}' was not found. | |
65102 | Transfer for TransactionId {0} cannot be voided because its current status is {1}. Only those with a status of Initiated can be voided. | |
65103 | Transfer for TransactionId {0} cannot be voided because its type is {1}. |
Example
Request
POST /transfer/void Authorization: Basic PutBase64TokenHere
{ "customerId": 80, "tag": "", "transactionId": 1138 }
Response
200
{ "data": [ { "customerId": 80, "tag": "", "transactionId": 1138 } ], "errors": [], "status": 200 }