API Documentation

Common Error Codes

The following are errors that can happen on any request to CorePro, depending on the request parameters, origin, intermediate network, etc. If present, these values will appear in the "errors" property of the envelope:

details

Code Message (en-US) HTTP Status Code Notes
50401 User is not authorized 401 Check your configuration for proper CorePro API Key and Secret values against those in CorePro Admin console. Existing ones may have expired.
50403 IP is not trusted 403 Check the IP of the request. If it is a valid IP, contact CorePro support to whitelist it.
50404 The requested resource was not found. 404 The route is invalid or is not supported in the version associated with your API Key.
50405 The requested HTTP method is not allowed. 405 The route accepts a different HTTP method - did you issue a POST when you should have issued a GET for a particular route?
50429 Rate limit exceeded 429 Too many requests within a certain timeslice for your API Key. Wait a small amount of time and retry the request. If this happens regularly, contact CorePro support to increase your rate limit (additional fee may be applied)
50500 Internal Server Error 500 CorePro is experiencing issues. Please share your requestId with CorePro support.
50501 Not Implemented 501 The route is invalid. Verify your code is calling a documented CorePro route.
50502 Bad Gateway 502 Network connectivity issues between your server and CorePro servers, or CorePro is down for maintenance. Investigate, and if issues persist, contact CorePro support.
50503 Service Unavailable 503 CorePro servers are unavailable. You will need to try your request later.
50504 Gateway Timeout 504 Network connectivity issues between your server and CorePro servers, or CorePro is down for maintenance. Investigate, and if issues persist, contact CorePro support.
50505 HTTP Version Not Supported 505 HTTP/1.1 must be specified when using CorePro. Change your code to issue HTTP/1.1 requests.
52998 Internal Server Error. Incident Id : {0} 500 This is the catch-all error number for an internal server error. Please contact support@corepro.io with the Incidient Id provided in the message.
58150 QualiFile service call error received. 500 The content of this error message may be replaced by the actual one received from the QualiFile service call.
59001 No VerificationFundsAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59002 No RetailClearingAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59003 No ProgramExternalAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59004 No BankIncomeAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59005 No RegDFeeAmtForExceedingMonthlyMax configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59006 No RegDMonthlyTransWithdrawCountMax configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59007 Internal to Internal transfer is disabled for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59008 AllowedAccountTypeId is not configured properly for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59009 Program {0} does not have recurring contributions enabled. 400 You are unable to do recurring contributions because it is disabled for your program.
59010 Program {0} is not configured to require external account verification. Call /externalAccount/create instead. 400 Call /externalAccount/create instead.
59011 Program {0} is configured to require external account verification. Call /externalAccount/initiate instead. 400 Call /externalAccount/initiate instead.
59012 Program {0} is missing a ProgramReport record for the given date range and program. 400 Your program is configured incorrectly. Contact support@corepro.io
59013 No ProgramClearingAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59014 No MiscellaneousAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59015 No GeneralJournalAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59016 No CashAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59017 No RetailExternalAccount configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59018 No ProgramEcode.PercentToClient configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59019 No ProgramEcode.PercentToCorePro configured for program {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59020 Program {0} does not have account type {1} enabled. 400 Your program is configured incorrectly. Contact support@corepro.io
59102 No ProgramClearingAccount linked to ProgramExternalAccount {0} 400 Your program is configured incorrectly. Contact support@corepro.io
59103 All card numbers are already allocated for Program {0}. 400 Your program is configured incorrectly. Contact support@corepro.io
59900 Could not convert {0} to {1}: {2}. Path '{3}', line {4}, position {5}. 400 Invalid value passed in for a JSON property. The value could not be converted to the proper type. {0} = JSON type, {1} = destination type, {2} = value, {3} = property name, {4} = line number, {5} = character position. e.g.: "Could not convert string to decimal: 11..04. Path 'recurringContributionAmount', line 9, position 42."
59901 Invalid JavaScript property identifier character: {0}. Path '{1}', line {2}, position {3}. 400 Property name is missing opening quote character ('"'). {0} = property name, {1} = line number, {2} = character position. e.g.: "Invalid JavaScript property identifier character: ". Path 'targetDate', line 13, position 7."
59902 Expected ':' but got: {0}. Path '{1}', line {2}, position {3}. 400 Property name is missing closing quote character ('"'). {0} = first character of property name, {1} = property name, {2} = line number, {3} = character position. e.g.: "Expected ':' but got: S. Path 'targetDate', line 13, position 11."
59903 Invalid character after parsing property name. Expected ':' but got: =. Path '{0}', line {1}, position {2}. 400 Attempting to use "=" instead of ":" to separate property name and its value. {0} = property name (typically the name of the previous property, not the one with the issue), {1} = line number, {2} = character position. e.g.: "Invalid character after parsing property name. Expected ':' but got: =. Path 'tag', line 11, position 18."
59904 Error reading {0}. Unexpected token: StartArray. Path '{1}', line {2}, position {3}. 400 Passed an array value to a property which is not an array. {0} = destination type, {1} = property name, {2} = line number, {3} = character position. e.g.: "Error reading string. Unexpected token: StartArray. Path 'tag', line 10, position 11."
59905 Error parsing NaN value. Path '{0}', line {1}, position {2}. 400 Attempting to pass null for a property value, but using an invalid casing (such as NULL or Null). {0} = property name, {1} = line number, {2} = character position. e.g.: "Error parsing NaN value. Path 'tag', line 10, position 10."
59906 After parsing a value an unexpected character was encountered: ;. Path '{0}', line {1}, position {2}. 400 Attempting to use a semicolon (;) where a comma (,) should be used. {0} = property name, {1} = line number, {2} = character position. e.g.: "After parsing a value an unexpected character was encountered: ;. Path 'customerId', line 2, position 22."
59949 (Message varies) 400 A generic JSON parsing error occurred. See message for details. i.e. The JSON payload is not structured properly in some way.
59950 Unexpected end when deserializing object. Path '{0}', line {1}, position {2}. 400 Closing curly brace ("}") is missing in JSON payload. {0} = property name, {1} = line number, {2} = character position. e.g.: "Unexpected end when deserializing object. Path 'type', line 15, position 1."
59951 Error converting value "{0}" to type '{1}'. Path '', line {2}, position {3}. 400 Opening curly brace ("}") is missing in JSON payload. {0} = first property name in payload, {1} = (varies, ignore), {2} = line number, {3} = character position. e.g.: "Error converting value \"customerId\" to type 'CorePro.Business.Account'. Path '', line 2, position 15."
59952 Value for property '{0}' is not formatted as a valid ISO-8601 DateTime. Example value=2015-01-31T22:43:21.123+00:00 400 The value for the property is not formatted as an ISO-8601 date. e.g.: "Value for property 'targetDate' is not formatted as a valid ISO-8601 DateTime. Example value=2015-01-31T22:43:21.123+00:00"
59953 Value for property '{0}' is not formatted as a valid boolean. Valid values=true,false 400 The value for the property is not formatted as a boolean value. e.g.: "Value for property 'isCloseable' is not formatted as a valid boolean. Valid values=true,false"
59954 Value for property '{0}' is not formatted as a valid decimal (precision up to 2). Example value=1234.56 400 The value for the property is not formatted as a decimal value. e.g.: "Value for property 'targetAmount' is not formatted as a valid decimal (precision up to 2). Example value=1234.56"
59955 Value for property '{0}' is not formatted as a valid decimal (precision up to 11). Example value=1234.56789012345 400 The value for the property is not formatted as a decimal value. e.g.: "Value for property 'interestRateMonthly' is not formatted as a valid decimal (precision up to 2). Example value=1234.56789012345"
59956 Value for property '{0}' is not acceptable. Specifics: {1} 400 The value for the property could not be cast properly. e.g.: "Value for property 'customerId' is not acceptable. Specifics: Input string '12548a' is not a valid integer. Path 'customerId', line 2, position 23."
59957 Missing a closing curly brace. Specifics: {0} 400 JSON payload is missing a closing curly brace. e.g.: "Missing a closing curly brace. Unexpected end when deserializing object. Path 'type', line 12, position 1."
59958 Missing an opening curly brace. Specifics: {0} 400 JSON payload is missing an opening closing curly brace. e.g.: "Missing an opening curly brace. Specifics: Error converting value "customerId" to type 'CorePro.Business.Account'. Path '', line 2, position 15."
59999 (Message varies) 400 A generic JSON deserialization error occurred. See message for details. i.e. The JSON payload is not structured properly in some way.
60001 Customer id {0} is invalid. 400 Provide a valid customerId in the request
60002 Customer id {0} is inactive. 400 An inactive customer cannot perform any actions in CorePro. Redirect the user to a page informing them of this.
60003 Customer id {0} is not in a verified status. 400 An unverified customer cannot perform any actions in CorePro (except call /customer/verify). Redirect the user to a page informing them of this.
60004 Customer id {0} is locked. 400 An locked customer cannot perform any actions in CorePro. Redirect the user to a page informing them of this.
60005 Customer id {0} is marked as deceased. 400 An deceased customer cannot perform any actions in CorePro. Redirect the user to a page informing them of this.

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 description.

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.

create

Transfer funds from one account to another. Result is a new transaction which can be retrieved via the various /transaction/* routes.

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.
nachaDescription Optional A client-specified description to apply to the nachaDescription property of the corresponding transaction object.

Response Data

A transferResponse Object

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.
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}.
63901 Invalid source account id {0}.
63701 Invalid source account id {0}.
63702 Source account id {0} is closed.
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.
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.
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).
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}.
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}.
64501 Transaction with tag '{0}' already exists.
64301 Transaction with tag '{0}' already exists.
64401 Transaction with tag '{0}' already exists.
64001 Invalid destination account id {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.
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}.
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}.
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}.
67801 Invalid destination account id {0}.
68401 Invalid destination account id {0}.
68402 Destination account id {0} is not open.
68701 Invalid source account id {0}.
68703 Transaction with tag '{0}' already exists.
68704 Destination account id {0} is closed.
68705 Insufficient funds in Program Reserve Account.
69401

Example

Request
POST /transfer/create
Authorization: Basic PutBase64TokenHere
{
  "amount": 56.0,
  "customerId": 33,
  "fromId": 1562412,
  "toId": 1562148,
}
Response
200
{
  "data": [
    {
      "customerId": 231,
      "tag": "tagtest1",
      "transactionId": 441
    }
  ],
  "errors": [],
  "status": 201
}

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 transferResponse Object

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
}

Ready to start a conversation?

Email Us