Table of Contents

    API

    Transparent Proxy

    Please sign in and we'll assign you a private URL to trace your traffic and help you implement the API.

CorePro API v1

Welcome to the CorePro REST API documentation. The CorePro REST API is in private beta and this documentation is subject to change. Copyright © 2014 corepro.io

About This Documentation

The CorePro REST API gives developers the ability to incorporate real FDIC insured savings accounts into their applications.

Versioning

Versioning is determined by the API Key (routes will NOT include the version). The CorePro Admin site will display the API Key for each version currently available.

Developers should expect that new elements may be added to the JSON data structure for a current version at any time. Elements will not be removed, renamed (amount -> tranAmount), or change case (amount -> AMOUNT) in a given version of the API. The properties in the JSON data structure will typically be in alphabetical order; however, this is not guaranteed.

NOTE: CorePro API is currently in Beta. During this phase, the interface can change at any time without notice. However, this resource will be kept up-to-date. If you run into apparent interface changes, check here for the current definition.

Basic Connectivity

Authentication

CorePro's REST API requires authentication via the Authorization header. The format of this header is HTTP Basic Authentication. This consists of the following:

  • API Key (string)
  • Secret (string)

The API key in HTTP Basic Authentication terms is the username. The Secret in HTTP Basic Authentication terms is the password. For example, if your API Key (aka username) is "philipjfry" and your Secret (aka password) is "10.77", the authorization header will look like the following:

  • Authorization: Basic cGhpbGlwamZyeToxMC43Nw==

The API key and Secret are available via the CorePro Admin site.

Environments

CorePro provides two distinct environments:

  • Sandbox - for testing your code
  • Production - for your production code

Each environment is completely distinct from the other; all settings, limits, whitelisted IPs, etc. are unique to each environment. This also means the API Key / Secret values used for sandbox are different from the ones used for production. There are also a few subtle functionality differences between the two as well. This is intended to ease testing in the sandbox environment. All differences are detailed in the following section.

Environment Differences
Sandbox Production
API Url https://sandbox-api.corepro.io https://api.corepro.io
ID Verification Consult documentation provided at registration time for specific "fake" customer information that works successfully via sandbox Provide customer's actual personally identifiable information
External Account Verification Trial deposit amounts are hardcoded to $0.18 and $0.28 for easy testing. Can be verified immediately via /externalAccount/verify Trial deposits are two random amounts between $0.01 and $0.99 inclusive. Must be verified at a later date by calling /externalAccount/verify.
ACH Files TBD TBD
Test Connectivity

To test connectivity from a whitelisted IP, you may simply:

  1. Using your browser, visit the sandbox environment or the production environment. (Note a whitelisted IP for the sandbox environment may not work in the production environment and vice versa)
  2. You will be prompted for a username and password by your browser's Basic authentication mechanism.
  3. Enter your API Key for the username
  4. Enter your API Secret for the password
  5. If connectivity is successful, you will get a valid json response containing a welcome message.

Request/Response

All request and response formats are JSON. We currently do not support XML for the following reasons:

  • Lack of consistency for parsing data types among third party XML libraries and utilities
  • Serialization/Deserialization Performance
  • Verbosity
  • Bandwidth usage

Retrieving Resources with the HTTP GET Method

You can retrieve a representation of a resource by GETting its url. The easiest way to do this is to copy and paste a URL into your web browser's address bar.

Creating or Updating Resources with the HTTP POST Method

Creating or updating a resource involves performing an HTTP POST to a resource URI. In POST, you represent the properties of the object you wish to update as form urlencoded key/value pairs.

  • NOTE: When updating a resource, it is possible to leave a property value untouched. Simply do not pass the property name in the JSON payload, or pass the property name with its value as null

Data Format Guidelines

All date properties will be in the ISO 8601 date format (i.e., 2013-10-03T13:38:44.754-05:00). Any dates passed into the API are expected to be UTC time and dates returned from the API will be in the time zone of the bank where the deposits are being held. Only exception to this rule would be properties such as birthDate which will contain zeroes for the time elements.

All decimal values have at most 2 digits of precision. The exception is any interest rate properties, which have up to 11 digits of precision.

Boolean values are returned as true or false.

Culture (in /customer) is a unique name for each culture based on RFC 4646. The name is a combination of an ISO 639-1 two-letter lowercase culture code associated with a language and an ISO 3166 two-letter uppercase subculture code associated with a country or region. Currently the CorePro API is only supported in the US. The default culture for every program is en-US, but additional cultures may be added on a per-program basis.

Country codes will follow the ISO 3166-1 alpha 3 standard as this is what is utilized on passports.

Property Naming Guidelines
Property Name Data Type Comment
Ends with "Id" 32-bit integer Exceptions:
  • transactionId is a 64-bit integer
  • taxId is a string
Ends with "Amount" decimal 2 digits of precision to the right of the decimal
Ends with "Balance" decimal 2 digits of precision to the right of the decimal
Ends with "Date" datetime ISO 8601 date format. e.g.: 2013-10-03T13:38:44.754-05:00
Begins with "is" boolean
Begins with "Interest" decimal 11 digits of precision to the right of the decimal
None of the above string
Possible HTTP Response Status Codes
HTTP Code Description
200 OK: The request was successful, we retrieved or updated the resource.
201 CREATED: The request was successful, we created the resource.
400 BAD REQUEST: The request was unsuccessful due to malformed syntax or failed validation.
401 UNAUTHORIZED: The supplied credentials, if any, are not sufficient to perform the requested action.
404 NOT FOUND: The requested resource was not found.
405 METHOD NOT ALLOWED: Your requested HTTP method is not allowed.
429 TOO MANY REQUESTS: Your application has attempted too many API requests within the designated call limit timeframe.
500 SERVER ERROR: Internal server error. CorePro has an application or configuration issue.
503 SERVICE UNAVAILABLE: CorePro is temporarily unavailable (e.g.: maintenance window is in effect). Please try again later.

API Call Limit

API calls are subject to the default limit of 15 requests per second and exceeding this limit will result in all endpoints returning an HTTP status code of 429. Limits are per API key. If the limit is exceeding then the API Key will be blocked for the remainder of the sample period. If an API key continually hits the call limit we reserve the right to permanently block the key and to charge a fee to unblock the key.

To determine the API call amount we monitor the traffic over a sample period. If the traffic results in a particular API key reaching 80% of the limit (i.e., 12 if the limit is 15) over the sample period then the responses will start to contain a throttle node which contains useful information on how close you are to reaching the call limit.

Response Format

CorePro uses a simple envelope concept to wrap all responses. Envelope definition is as follows.

Attribute Description
data The data requested. Differs depending upon the route called. May be an object, a list of objects, or null. If null, data property will be absent from the response. Will never be a string, number, or date.
errors A list of error Objects objects. If no error occurred, this will be an empty list. A single request can cause multiple errors. Each error object contains a "code" property and a "message" property. "message" property may change depending upon the culture, request parameter values, etc. "code" is guaranteed to never change, and that value should be used to drive logic within your application.
requestId A globally unique string that identifies this particular request. Useful for troubleshooting errors or tracking down problems historically. It is recommended this value be stored somewhere on the caller's end when logging request/response pairs as it enables CorePro support to easily identify the exact request associated with your issue.
status The overall status of the response. Reflects exactly the http status. Useful if your client code only wants to inspect the actual body, and not the status portion of the raw http response.
throttle Throttling information emitted only if you are past 80% of the throttling limit, or if you have surpassed the throttling limit.

Here is an example response body from a CorePro request.

< 200
< Content-Type: application/json
{ 
    "data":
    {
        [
            {
                "accountId": 12345,
                "name": "My savings account",
                "type": "Savings"
            }
        ]
    },
    "errors":[],
    "requestId":"2dd82a44-02b0-49cb-94e3-ca454bcdd276",
    "status":200,
    "throttle": 
    {
        "maximumRequestsPerPeriod": 15,
        "periodEndsAt": "2013-10-03T13:38:44.754+00:00",
        "periodLengthInSeconds": 10,
        "requestsRemainingInPeriod": 2,
        "secondsUntilNextPeriod": 5
    }
}

error Object

Attribute Description
code A value between 1 and 2147483647. This is the value that should be used to programmatically detect specific errors and supply a custom message in your application. See Common Error Codes for additional information.
message A human-friendly textual description of the error that occurred. The text may differ depending on the customer's culture, provided when the customer was created. The exact text may change at any time without notice.

Here is an example response body of a request which failed due to a business rule:

< 400
< Content-Type: application/json
    {
        "errors": [
            {
                "code": 62001,
                "message": "Only one external account is allowed."
            }
        ],
        "requestId": "54128665-e29d-4934-97fe-bc2912c146d8",
        "status": 400
    }

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:

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

Error Code Ranges

CorePro groups different types of errors into different ranges of codes. This is meant primarily for ease of troubleshooting problems for CorePro support, but it is also useful knowledge for the caller as well. The following are all the error ranges defined by CorePro:

Code Range HTTP Status Code Meaning
1-50000 500 "Hard" errors within CorePro itself. Please report the error along with the requestId (if any) to CorePro support.
50001-50999 401-505, see Common Error Codes A connectivity issue, software defect, malformed request, etc.
51000-57999 500 Reserved for future use.
58000-58999 500 Reserved for third party use. Will never be issued by CorePro. May be useful when logging.
59000-59999 400 CorePro has the functionality you requested, but it is misconfigured, disabled, or unavailable due to business contract limitations.
60000-2147483647 400 Validation errors when processing a request. An example would be trying to transfer a negative amount of funds.

Performance / Batch Processing

The CorePro API is designed to handle typical web usage patterns. That is, human users clicking on website links and subsequently performing typical human user volumes of CorePro API calls. To enforce this, the throttling mechanism detailed in API Call Limit was introduced to ensure the health of the system as a whole, preventing one program's requests from starving out another program's requests.

However, if your organization has the need to perform a large volume of transfer requests in a short amount of time (i.e. a batch job), we also offer what we call the "Bulk Transfers" functionality.

Also, if your organization has the need to perform a large volume of requests to any other routes in the CorePro API, please contact us to discuss.

Bulk Transfers

The process for doing bulk transfers is as follows:

  1. A properly formatted file containing transfers to perform is dropped on our SecureFTP server
  2. Our backend process performs the same functionality as /transfer/create route does, but in a vastly more efficient manner
  3. Our backend process drops a response file to our SecureFTP server
  4. You inspect this response file for Success / Failure of each transaction, and process accordingly.

Objects and Routes

The following sections define all objects and their respective routes available within CorePro. See the table of contents on the right to navigate directly to the section that interests you.

/customer

Resource for the customer who will own the savings account(s).

customer Object

Attribute Data Type
(length)
Description
customerId integer The unique identifier for a customer in CorePro. Will be returned on /customer/create call. Used as a parameter to almost every other CorePro route.
firstName string (64) First (Given) Name
middleName string (64) Middle Name
lastName string (128) Last Name (Surname)
birthDate datetime Example format: 1976-07-04T00:00:00.000+00:00
gender string (1) Possible values include:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
culture string (50) Accepted values vary by program. Examples are:
  • en-US
  • es-US
tag string (50) A unique identifier in your system for this customer which may be useful for search purposes. Must be unique per a given Program. Maximum length is 50 characters.
status string (50) Possible values include:
  • Initiated
  • Manual Review
  • Verified
  • Denied
  • Expired
createdDate datetime
taxId string (30) SSN in the US. Specify only the digits, no formatting of any kind. i.e. exclude dashes, spaces, etc.
driversLicenseNumber string (30)
driversLicenseState string (2) i.e., IA for Iowa
driversLicenseExpirationDate datetime Example format: 1976-07-04T00:00:00.000+00:00
passportNumber string (30)
passportCountry string (5) i.e., US for United States
emailAddress string (255) someone@email.com
isActive boolean Denotes if a customer is available for use. Note other flags such as isLocked=false and Status=Verified must also be set before a customer can perform any functions.
isLocked boolean Denotes if a customer is locked, typically caused by fraud prevention mechanisms or manual intervention via the Admin console. Note other flags such as isActive=true and Status=Verified must also be set before a customer can perform any functions.
lockedDate datetime Denotes the last time isLocked was set to true. Example format: 2014-01-01T00:00:00.000+00:00
lockedReason string (255) The reason isLocked was set to true. Freeform.
deceasedDate datetime Denotes the date the customer was reported as deceased. Example format: 2014-01-01T00:00:00.000+00:00
isSubjectToBackupWithholding boolean All customers need to indicate whether they are subject to backup withholding. CorePro will withhold the appropriate percentage of earned interest and submit these funds directly to the IRS. The amount withheld will be reported on the annual 1099-INT generated by CorePro. Please see the Backup Withholding topic at the IRS website for additional details.
isOptedInToBankCommunication boolean
isDocumentsAccepted boolean Only required when creating a new customer. Confirms that customer viewed and accepted all documents returned via the /document/list route
phones list of phone objects
addresses list of address objects
accounts list of account objects
externalAccounts list of externalAccount objects

phone Object

Attribute Data Type
(length)
Description
phoneType string (50) Valid values include:
  • Home
  • Mobile
  • Office
number string (50) Only numbers, i.e., 5152221212

address Object

Attribute Data Type
(length)
Description
addressType string (50) Valid values include:
  • Mailing
  • Residence
addressLine1 string (100)
addressLine2 string (100)
addressLine3 string (100)
addressLine4 string (100)
city string (50)
state string (2) 2-character code for a US state. e.g.: IA
postalCode string (9)
country string (50) Must be "US"

GET

/customer/get/{customerId}

Retrieve customer information by the customerId created by CorePro

Request Parameters
customerId Required Customer ID (returned when customer was created)
Response Data
A customer Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Authorization: Basic PutBase64TokenHere
Content-Type: application/json
{
  "data": {
    "accounts": [
      {
        "accountBalance": 0.0000,
        "accountId": 220,
        "accountNumber": "00000000000000078",
        "accountNumberMasked": "*************0078",
        "availableBalance": 0.0000,
        "closedDate": "9999-12-31T23:59:59.999+00:00",
        "createdDate": "2014-02-24T16:36:08.469-06:00",
        "customerId": 3,
        "name": "Savings",
        "recurringContributionFromExternalAccountId": 0,
        "recurringContributionType": "None",
        "status": "Open",
        "type": "Primary"
      }
    ],
    "addresses": [
      {
        "addressLine1": "222333 PeachTree Place",
        "addressLine2": "",
        "addressType": "Residence",
        "city": "Atlanta",
        "country": "US",
        "customerAddressId": 218,
        "postalCode": "30318",
        "state": "GA"
      }
    ],
    "birthDate": "1975-02-28T00:00:00.000-06:00",
    "createdDate": "2014-02-24T16:36:08.469-06:00",
    "culture": "en-US",
    "customerId": 217,
    "driversLicenseNumber": "ABC123XYZ",
    "driversLicenseState":"GA",
    "emailAddress": "",
    "externalAccounts": [
      {
        "accountNumberMasked": "XXXXXX9873",
        "customerId": 3,
        "externalAccountId": 221,
        "firstName": "Brock",
        "isActive": true,
        "isLocked": false,
        "lastName": "Weaver",
        "lockedDate": "9999-12-31T23:59:59.999+00:00",
        "name": "PrepaidAbc",
        "nickName": "pp1",
        "routingNumberMasked": "XXXXXX1234",
        "status": "Unverified",
        "statusDate": "2014-02-24T16:36:29.102-06:00",
        "tag": "tag1",
        "type": "Savings"
      }
    ],
    "firstName": "John",
    "gender": "M",
    "isActive": true,
    "isDocumentsAccepted": true,
    "isLocked": false,
    "isOptedInToBankCommunication": true,
    "isSubjectToBackupWithholding": false,
    "lastName": "Smith",
    "lockedDate": "9999-12-31T23:59:59.999+00:00",
    "middleName": "",
    "phones": [
      {
        "customerPhoneId": 219,
        "number": "515-555-1234",
        "phoneType": "Mobile"
      }
    ],
    "status": "Verified",
    "tag": "tim cup",
    "taxId": "112223333"
  },
  "errors": [],
  "status": 200
}

GET

/customer/getByTag/{tag}

Retrieve customer information by a unique identifier you specify at customer creation time.

Request Parameters
tag Required Your unique identifier for this customer. i.e. not generated by CorePro; an alternate key. String up to 50 chars.
Response Data
A customer Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
    "accounts": [
      {
        "accountBalance": 0.0000,
        "accountId": 220,
        "accountNumber": "00000000000000078",
        "accountNumberMasked": "*************0078",
        "availableBalance": 0.0000,
        "closedDate": "9999-12-31T23:59:59.999+00:00",
        "createdDate": "2014-02-24T16:36:08.469-06:00",
        "customerId": 3,
        "name": "Savings",
        "recurringContributionFromExternalAccountId": 0,
        "recurringContributionType": "None",
        "status": "Open",
        "type": "Primary"
      }
    ],
    "addresses": [
      {
        "addressLine1": "222333 PeachTree Place",
        "addressLine2": "",
        "addressType": "Residence",
        "city": "Atlanta",
        "country": "US",
        "customerAddressId": 218,
        "postalCode": "30318",
        "state": "GA"
      }
    ],
    "birthDate": "1975-02-28T00:00:00.000-06:00",
    "createdDate": "2014-02-24T16:36:08.469-06:00",
    "culture": "en-US",
    "customerId": 217,
    "driversLicenseNumber": "",
    "emailAddress": "",
    "externalAccounts": [
      {
        "accountNumberMasked": "XXXXXX9873",
        "customerId": 3,
        "externalAccountId": 221,
        "firstName": "Brock",
        "isActive": true,
        "isLocked": false,
        "lastName": "Weaver",
        "lockedDate": "9999-12-31T23:59:59.999+00:00",
        "name": "PrepaidAbc",
        "nickName": "pp1",
        "routingNumberMasked": "XXXXXX1234",
        "status": "Unverified",
        "statusDate": "2014-02-24T16:36:29.102-06:00",
        "tag": "tag1",
        "type": "Savings"
      }
    ],
    "firstName": "John",
    "gender": "M",
    "isActive": true,
    "isDocumentsAccepted": true,
    "isLocked": false,
    "isOptedInToBankCommunication": true,
    "isSubjectToBackupWithholding": false,
    "lastName": "Smith",
    "lockedDate": "9999-12-31T23:59:59.999+00:00",
    "middleName": "",
    "phones": [
      {
        "customerPhoneId": 219,
        "number": "515-555-1234",
        "phoneType": "Mobile"
      }
    ],
    "status": "Verified",
    "tag": "tim cup",
    "taxId": "112223333"
  },
  "errors": [],
  "status": 200
}

POST

/customer/list?{pageNumber}=0&{pageSize}=200

List all customers for the program associated with the given API key. If not specified, pageNumber=0 and pageSize=200.

Note the pageNumber and pageSize variables are passed via the query string. This is for consistency with the other paginated routes.

Also, for performance reasons, this route does not fill the phones, addresses, accounts or externalAccounts properties of the customer object. Only /customer/get and /customer/getByTag do.

Request Paramaters
pageNumber Optional Which page of the customer list to return. Default is 0
pageSize Optional Size of one page of the transactions to return. Default is 200. Max is 200
Response Data
A list of customer Objects, without the "accounts", "externalAccounts", "addresses", or "phones" properties populated.
The list is ordered by customer lastName, then firstName.
All customers, regardless of any flags or status, will be returned.
Note: Each customer object has an additional property, "customerCount". This is the total number of customers which match your criteria. This is intended to ease implementing the paging functionality for the UI developer.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "accounts": [],
      "addresses": [],
      "birthDate": "1975-02-28T00:00:00.000+00:00",
      "createdDate": "2014-02-19T08:29:58.169-06:00",
      "culture": "en-US",
      "customerCount": 3,
      "customerId": 49,
      "emailAddress": "user@example.com",
      "externalAccounts": [],
      "firstName": "John",
      "gender": "M",
      "isActive": true,
      "isDocumentsAccepted": false,
      "isLocked": false,
      "isOptedInToBankCommunication": false,
      "isSubjectToBackupWithholding": false,
      "lastName": "Smith",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "phones": [],
      "status": "Verified"
    },
    {
      "accounts": [],
      "addresses": [],
      "birthDate": "1975-02-28T00:00:00.000+00:00",
      "createdDate": "2014-02-19T08:41:01.540-06:00",
      "culture": "en-US",
      "customerCount": 3,
      "customerId": 54,
      "driversLicenseNumber": "ABC123XYZ",
      "driversLicenseState": "GA",
      "emailAddress": "user@example.com",
      "externalAccounts": [],
      "firstName": "John",
      "gender": "M",
      "isActive": false,
      "isDocumentsAccepted": true,
      "isLocked": false,
      "isOptedInToBankCommunication": false,
      "isSubjectToBackupWithholding": false,
      "lastName": "Smith",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "phones": [],
      "status": "Denied"
    },
    {
      "accounts": [],
      "addresses": [],
      "birthDate": "1975-02-28T00:00:00.000+00:00",
      "createdDate": "2014-02-19T08:51:24.510-06:00",
      "culture": "en-US",
      "customerCount": 3,
      "customerId": 60,
      "driversLicenseState": "GA",
      "emailAddress": "user@example.com",
      "externalAccounts": [],
      "firstName": "John",
      "gender": "M",
      "isActive": false,
      "isDocumentsAccepted": true,
      "isLocked": false,
      "isOptedInToBankCommunication": false,
      "isSubjectToBackupWithholding": false,
      "lastName": "Smith",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "phones": [],
      "status": "Denied"
    }
  ],
  "errors": [],
  "status": 200
}

POST

/customer/search?{pageNumber}=0&{pageSize}=200

Search for a customer. Can search by any of the following (supplied in the body of the POST):

Request Body Paramaters
lastName Optional (but at least one Optional parameter must be specified)
firstName Optional (but at least one Optional parameter must be specified)
tag Optional (but at least one Optional parameter must be specified)
taxId Optional (but at least one Optional parameter must be specified)
driversLicenseNumber Optional (but at least one Optional parameter must be specified)
passportNumber Optional (but at least one Optional parameter must be specified)
emailAddress Optional (but at least one Optional parameter must be specified)
birthDate Optional (but at least one Optional parameter must be specified)
Request Paramaters
pageNumber Optional (supplied via the query string) Which page of the customer list to return. Default is 0
pageSize Optional (supplied via the query string) Size of one page of the transactions to return. Default is 200. Max is 200

Note: This route requires a POST request despite the fact that it does not modify or create any data. This is to prevent sensitive data (such as taxId) from possibly being stored in any HTTP logs.

The exception to this is the pageNumber and pageSize variables, which are still passed via the query string. This is for consistency with the other paginated routes.

Also, for performance reasons, this route does not fill the phones, addresses, accounts or externalAccounts properties of the customer object. Only /customer/get and /customer/getByTag do.

Response Data
A list of customer Objects, without the "accounts", "externalAccounts", "addresses", or "phones" properties populated.
The list is ordered by customer lastName, then firstName.
Note: Each customer object has an additional property, "customerCount". This is the total number of customers which match your criteria. This is intended to ease implementing the paging functionality for the UI developer.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "accounts": [],
      "addresses": [],
      "birthDate": "1975-02-28T00:00:00.000+00:00",
      "createdDate": "2014-02-19T08:29:58.169-06:00",
      "culture": "en-US",
      "customerCount": 3,
      "customerId": 49,
      "emailAddress": "user@example.com",
      "externalAccounts": [],
      "firstName": "John",
      "gender": "M",
      "isActive": true,
      "isDocumentsAccepted": false,
      "isLocked": false,
      "isOptedInToBankCommunication": false,
      "isSubjectToBackupWithholding": false,
      "lastName": "Smith",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "phones": [],
      "status": "Verified"
    },
    {
      "accounts": [],
      "addresses": [],
      "birthDate": "1975-02-28T00:00:00.000+00:00",
      "createdDate": "2014-02-19T08:41:01.540-06:00",
      "culture": "en-US",
      "customerCount": 3,
      "customerId": 54,
      "driversLicenseNumber": "ABC123XYZ",
      "driversLicenseState": "GA",
      "emailAddress": "user@example.com",
      "externalAccounts": [],
      "firstName": "John",
      "gender": "M",
      "isActive": false,
      "isDocumentsAccepted": true,
      "isLocked": false,
      "isOptedInToBankCommunication": false,
      "isSubjectToBackupWithholding": false,
      "lastName": "Smith",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "phones": [],
      "status": "Denied"
    },
    {
      "accounts": [],
      "addresses": [],
      "birthDate": "1975-02-28T00:00:00.000+00:00",
      "createdDate": "2014-02-19T08:51:24.510-06:00",
      "culture": "en-US",
      "customerCount": 3,
      "customerId": 60,
      "driversLicenseState": "GA",
      "emailAddress": "user@example.com",
      "externalAccounts": [],
      "firstName": "John",
      "gender": "M",
      "isActive": false,
      "isDocumentsAccepted": true,
      "isLocked": false,
      "isOptedInToBankCommunication": false,
      "isSubjectToBackupWithholding": false,
      "lastName": "Smith",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "phones": [],
      "status": "Denied"
    }
  ],
  "errors": [],
  "status": 200
}

POST

/customer/create

Create a new customer. Functions properly only if your Program is configured with a Verification Type of 'None'. No ID verification checks are performed.

Request Body Parameters
customerId Required Customer ID (returned when customer was created)
firstName Optional The customer's given name.
lastName Optional The customer's surname.
birthDate Optional The customer's date of birth. See date formatting at the top of this resource.
gender Required Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
culture Required Valid values vary by program. Examples are:
  • en-US
  • es-US
tag Optional A program-wide unique identifier supplied by the caller
taxId Optional The customer's Social Security Number sans formatting (no dashes, no spaces, etc)
driversLicenseNumber Optional The customer's government-issued driver's license number
driversLicenseState Optional The US state the customer's driver's license was issued in
passportNumber Optional The customer's passport number.
passportCountry Optional The country the customer's passport was issued from.
emailAddress Optional The customer's email address.
isSubjectToBackupWihholding Required Set to true if customer is subject to backup withholding when interest is paid. Set to false otherwise.
isOptedInToBankCommunication Required Set to true if the customer opts in to receive communications from the bank. Set to false otherwise.
addresses Optional A list of 0 or more address Objects to update or add. Note only one of a given addressType is allowed, meaning if you pass Mailing as the type and one exists, it will be updated instead of a new one being added.
phones Optional A list of 0 or more phone Objects to update or add. Note only one of a given phoneType is allowed, meaning if you pass Office as the type and one exists, it will be updated instead of a new one being added.
Response Data
customerId Customer ID of the new customer. This customer will be in a "Verified" status upon success of this call.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
60201 First Name is a required field.
60202 Last Name is a required field.
60203 Birth Date is a required field.
60204 Birth Date is invalid. Please enter a valid date after 01/01/1900.
60205 Gender is a required field. Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
60206 Gender is invalid. Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
60207 Culture is a required field. Provide a culture value that has been configured for your program. Typically en-US.
60208 Invalid Status.
60209 Tax Id is a required field.
60210 Is Subject To Backup Withholding is a required field. Specify "true" or "false" for this property.
60211 Is Opted In To Bank Communication is a required field. Specify "true" or "false" for this property.
60212 Is Documents Accepted is a required field. Specify "true" or "false" for this property.
60213 ID Verification required for the program specified. This route cannot be used based on your program configuration. Call /customer/initiate and subsequently /customer/verify instead.
60214 A Residence Address is required. Provide an address object with an addressType of "Residence"
60215 Invalid Address Type. Valid values are: Mailing, Residence, Prior.
60216 Address Line 1 is a required field.
60217 Residential Addresses can not contain a PO Box.
60218 City is a required field.
60219 State is a required field.
60220 Postal Code is a required field.
60221 Country is a required field.
60222 Invalid Phone Type. Valid values are: Home, Mobile, Office.
60223 Phone Number is a required field.
60224 This TaxId is already associated with an customer. Provide a Tax Id unique to this customer.
60225 Tag '{0}' is already associated with another customer. Provide a unique tag for this customer, or no tag at all.
60250 Only three addresses are allowed -- one for each valid type of Residence, Mailing, or Prior. Do not provide more than 3 address objects, each one with a different value for addressType.
60251 Only three phones are allowed -- one for each valid type of Home, Mobile, or Office. Do not provide more than 3 phone objects, each one with a different value for phoneType.

Response

200 (OK)
Content-Type: application/json
{
    "data" :
    {
      "customerId": 1583018,
      "messages": [],
      "questions": [],
      "verificationStatus": "success"
    },
    "errors":[],
    "status":200
}

POST

/customer/initiate

Initiate a new customer for Programs that elected the CorePro identity verification services. Functions properly only if your Program is configured with a Verification Type of OFAC Only or Full. If a successful, a subsequent call to /customer/verify must be performed, passing along information returned from this call along with information gathered from the user (i.e. answers to the challenge questions only the "real" person should be able to answer).

Request Body Parameters
customerId Required Customer ID (returned when customer was created)
firstName Required The customer's given name.
lastName Required The customer's surname.
birthDate Required The customer's date of birth.
gender Required Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
culture Required Valid values vary by program. Examples are:
  • en-US
  • es-US
tag Optional A program-wide unique identifier supplied by the caller
taxId Required The customer's Social Security Number sans formatting (no dashes, no spaces, etc)
driversLicenseNumber Required if passportNumber is not provided. The customer's government-issued driver's license number
driversLicenseState Required if passportNumber is not provided. The US state the customer's driver's license was issued in
passportNumber Required if driversLicenseNumber is not provided. The customer's passport number.
passportCountry Required if driversLicenseNumber is not provided. The country the customer's passport was issued from.
emailAddress Optional The customer's email address.
isSubjectToBackupWihholding Required Set to true if customer is subject to backup withholding when interest is paid. False otherwise.
isOptedInToBankCommunication Required Set to true if the customer opts in to receive communications from the bank. False otherwise.
addresses Require both 'Mailing' and 'Residence' addresses A list of 1 or more address Objects to update or add. Note only one of a given addressType is allowed, meaning if you pass Mailing as the type and one exists, it will be updated instead of a new one being added.
phones Require 'Home' phone A list of 1 or more phone Objects to update or add. Note only one of a given phoneType is allowed, meaning if you pass Office as the type and one exists, it will be updated instead of a new one being added.
Response Data
customerId Customer ID of the new customer.
verificationId Verification ID of the new customer request. Must be passed in the subsequent call to /customer/initiate.
verificationStatus Status of the identity verification. Value is "success" upon success. This customer will be in an "Unverified" status upon success of this call.
questions A list of 4 or more objects with 3 properties each:
  • answers - a list of multiple choice answers for the question, one of which is correct.
  • prompt - the question itself
  • type - a value which must be passed on the subsequent call to /customer/verify
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
60201 First Name is a required field.
60202 Last Name is a required field.
60203 Birth Date is a required field.
60204 Birth Date is invalid. Please enter a valid date after 01/01/1900.
60205 Gender is a required field. Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
60206 Gender is invalid. Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
60207 Culture is a required field. Provide a culture value that has been configured for your program. Typically en-US.
60208 Invalid Status.
60209 Tax Id is a required field.
60210 Is Subject To Backup Withholding is a required field. Specify "true" or "false" for this property.
60211 Is Opted In To Bank Communication is a required field. Specify "true" or "false" for this property.
60212 Is Documents Accepted is a required field. Specify "true" or "false" for this property.
60214 A Residence Address is required. Provide an address object with an addressType of "Residence"
60215 Invalid Address Type. Valid values are: Mailing, Residence, Prior.
60216 Address Line 1 is a required field.
60217 Residential Addresses can not contain a PO Box.
60218 City is a required field.
60219 State is a required field.
60220 Postal Code is a required field.
60221 Country is a required field.
60222 Invalid Phone Type. Valid values are: Home, Mobile, Office.
60223 Phone Number is a required field.
60224 This TaxId is already associated with an customer. Provide a Tax Id unique to this customer.
60225 Tag '{0}' is already associated with another customer. Provide a unique tag for this customer, or no tag at all.
60250 Only three addresses are allowed -- one for each valid type of Residence, Mailing, or Prior. Do not provide more than 3 address objects, each one with a different value for addressType.
60251 Only three phones are allowed -- one for each valid type of Home, Mobile, or Office. Do not provide more than 3 phone objects, each one with a different value for phoneType.

Response

200 (OK)
Content-Type: application/json
{
    "data" :
    {
      "customerId": 2342342,
      "messages": [],
      "questions": [
        {
          "answers": [
            "ELAINE RYAN",
            "JOE ANDERSON",
            "A VIRAY",
            "None of the above"
          ],
          "prompt": "From whom did you purchase the property at 222333 PEACHTREE PLACE?",
          "type": "purchased.property.from"
        },
        {
          "answers": [
            "STEVE BECK",
            "STEVE WASHINGTON",
            "LISA MCKITRICK",
            "None of the above"
          ],
          "prompt": "Which of the following people do you know?",
          "type": "person.known.fic"
        },
        {
          "answers": [
            "Single Family Residence",
            "Townhome",
            "Condominium",
            "None of the above"
          ],
          "prompt": "What type of residence is 222333 PEACHTREE PLACE?",
          "type": "residence.type"
        },
        {
          "answers": [
            "FALL RIVER",
            "UMATILLA",
            "FULTON",
            "None of the above"
          ],
          "prompt": "In which county have you lived?",
          "type": "current.county.b"
        }
      ],
      "verificationId": "1048354039",
      "verificationStatus": "success"
    },
    "errors":[],
    "status":200
}

POST

/customer/verify

Verify a customer. Functions properly only if your Program is configured with a Verification Type of OFAC Only or Full. Must supply answers to challenge questions, along with the verificationId returned from the previous call to /customer/initiate. If a Status of 'Success' is returned, the customer will be activated.

Request Body Parameters
customerId Required Customer ID (returned when customer was created)
verificationId Required Returned from the /customer/initiate call
answers Required A list of 4 or more objects with 2 properties each:
  • questionType - "type" from the /customer/initiate questions[] property
  • questionAnswer - the user's selection from the "answers" list from the /customer/initiate questions[]
Response Data
customerId Customer ID of the new customer.
verificationStatus Status of the identity verification. Value is success upon success. This customer will be in a "Verified" status upon success of this call.
messages A list of one or more objects with 2 properties each:
  • verificationId
  • verificationMessage - detail about how many questions were correct / incorrect
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
    "data" :
    {
      "customerId": 2342342,
      "messages": [
        {
          "verificationId": "1048354039",
          "verificationMessage": "One Incorrect Answer"
        }
      ],
      "questions": [],
      "verificationStatus": "success"
    },
    "errors":[],
    "status":200
}

POST

/customer/update

Update a customer

Request Body Parameters
customerId Required Customer ID (returned when customer was created)
firstName Optional The customer's given name.
lastName Optional The customer's surname.
birthDate Optional The customer's date of birth.
gender Optional Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
culture Optional Valid values vary by program. Examples are:
  • en-US
  • es-US
tag Optional A program-wide unique identifier supplied by the caller
taxId Optional The customer's Social Security Number sans formatting (no dashes, no spaces, etc)
driversLicenseNumber Optional The customer's government-issued driver's license number
driversLicenseState Optional The US state the customer's driver's license was issued in
passportNumber Optional The customer's passport number.
passportCountry Optional The country the customer's passport was issued from.
emailAddress Optional The customer's email address.
isSubjectToBackupWihholding Optional Set to true if customer is subject to backup withholding when interest is paid. False otherwise.
isOptedInToBankCommunication Optional Set to true if the customer opts in to receive communications from the bank. False otherwise.
addresses Optional A list of 0 or more address Objects to update or add. Note only one of a given addressType is allowed, meaning if you pass Mailing as the type and one exists, it will be updated instead of a new one being added.
phones Optional A list of 0 or more phone Objects to update or add. Note only one of a given phoneType is allowed, meaning if you pass Office as the type and one exists, it will be updated instead of a new one being added.
Response Data
No object is returned; the envelope's "data" property will be absent, but a status of 200 is returned upon success.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
60301 Birth Date is invalid. Please enter a valid date after 01/01/1900.
60302 Gender is invalid. Valid values are:
  • M (male)
  • F (female)
  • U (unknown / unspecified)
60303 Tag '{0}' is already associated with a different customer.

Response

200 (OK)
Content-Type: application/json
{
    "errors":[],
    "status":200
}

POST

/customer/deactivate

Deactivate a customer

Request Body Parameters
customerId Required Customer ID (returned when customer was created)
Response Data
No object is returned; the envelope's "data" property will be absent, but a status of 200 is returned upon success.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
    "errors":[],
    "status":200
}

/account

account Object

Attribute Data Type
(length)
Description
accountId integer The unique identifier for an account.
customerId integer The unique identifier for the customer who owns the account.
tag string (50) A caller-specified, immutable, unique identifier for this account. Must be unique within a given Program. Maximum length is 50 characters.
accountNumber string (15) Account number of the savings account. Generated at creation time.
accountNumberMasked string (15) Masked version of the Account number of the savings account. e.g. XXXXXXXX1234
routingNumber string (15) Routing Transit Number (RTN) is a nine-digit bank code used to identify the financial institution where savings account is held
status string (50) Possible values include:
  • Open
  • Closed
Note: Once an account is closed, it cannot be re-opened.
type string (50) Possible values include:
  • Client
  • Savings (RegD restrictions apply)
  • Checking (RegD restrictions do not apply)
Note: Only one type of account is allowed within a given program. When a customer is created, the first account is automatically created as well. So for all calls to /account/create for a given program, the exact same value for this parameter must be given.
createdDate datetime Date the account was created
closedDate datetime Date the account was closed
accountBalance decimal Total balance of account including funds that have holds placed on them
availableBalance decimal Balance available for immediate withdrawal
isPrimary boolean True if this is the primary account for this customer. Read-only. Automatically set at customer or account creation time.
 
All properties beginning with "recurringContribution" require the program to have Recurring Contributions enabled. This is an optional feature that requires an additional subscription fee.
If your program does not have this enabled and recurringContributionType is specified as a valid value other than 'None' or empty string when calling /account/create or /account/update, runtime error 59009 will occur.
recurringContributionType string (50) The frequency with which recurring contributions occur. If omitted on a create, 'None' is assumed. Valid values include:
  • Monthly
  • BiWeekly
  • Weekly
  • None
recurringContributionAmount decimal The amount to contribute on a recurring basis.
recurringContributionFromExternalAccountId integer The externalAccountId from which funds will be transferred on a recurring basis. Refers to an externalAccount object.
recurringContributionStartDate datetime The earliest date on which future recurring contributions should start. Note if the day specified and is greater than or equal to "tomorrow", the first recurring contribution will occur the following month. So if today is the 8th and a value between 1 and 9 is specified, the first recurring contribution will happen the following month. If a value between 10 and 28 is specified, the first recurring contribution will happen the current month. The value for the day portion of the date must be between 1 and 28.
recurringContributionEndDate datetime The earliest date on which future recurring contributions should start. Must be greater than the recurringContributionStartDate. If recurringContributionEndDate is in the past, effectively this effectively disables recurring contributions. i.e. same behavior as though recurringContributionType = "None".
recurringContributionNextDate datetime The date the next recurring contribution is scheduled to occur. This property is read-only, but setting recurringContributionStartDate causes this date to change.
 
The following are all completely optional properties.
targetAmount decimal The savings amount for which the user is striving.
targetDate datetime The date the user would like the targetAmount to be reached.
category string (255) The category to which this account belongs. Freeform. Useful for grouping and trending in reports.
subCategory string (255) The subcategory to which this account belongs. Freeform. Useful for grouping and trending in reports.
miscellaneous string (255) A property to store caller-specified data. Freeform. Is not used by any logic or reporting mechanisms within CorePro.

GET

/account/list/{customerId}

List all accounts for given customerId

Request Parameters
customerId Required Customer ID (returned when customer was created)
Response Data
A list of account Objects
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "accountBalance": 0.0000,
      "accountId": 234,
      "accountNumber": "00000000000000097",
      "accountNumberMasked": "*************0097",
      "availableBalance": 0.0000,
      "category": "",
      "closedDate": "9999-12-31T23:59:59.999+00:00",
      "createdDate": "2014-02-24T16:49:25.465-06:00",
      "customerId": 231,
      "miscellaneous": "",
      "name": "Savings",
      "recurringContributionFromExternalAccountId": 0,
      "recurringContributionStartDate": "2014-02-01T00:00.000-06:00",
      "recurringContributionType": "None",
      "status": "Open",
      "subCategory": "",
      "tag": "tagabc",
      "type": "Primary"
    },
    {
      "accountBalance": 0.0000,
      "accountId": 275,
      "accountNumber": "00000000000000130",
      "accountNumberMasked": "*************0130",
      "availableBalance": 0.0000,
      "closedDate": "9999-12-31T23:59:59.999+00:00",
      "createdDate": "2014-02-25T16:19:22.472-06:00",
      "customerId": 231,
      "miscellaneous": "Misc note here",
      "name": "Brocko Testo2",
      "recurringContributionFromExternalAccountId": 0,
      "recurringContributionStartDate": "2014-02-01T00:00.000-06:00",
      "recurringContributionType": "None",
      "status": "Open",
      "tag": "test2",
      "targetAmount": 560.0000,
      "targetDate": "2017-12-31T00:00:00.000-06:00",
      "type": "Savings"
    }
  ],
  "errors": [],
  "status": 200
}

GET

/account/get/{customerId}/{accountId}

Get a single account for given customerId and accountId

Request Parameters
customerId Required Customer ID (returned when customer was created)
accountId Required Account ID (returned when the account was created)
Response Data
An account Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
66001 Invalid account id '{0}'.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
      "accountBalance": 0.0000,
      "accountId": 234,
      "accountNumber": "00000000000000097",
      "accountNumberMasked": "*************0097",
      "availableBalance": 0.0000,
      "category": "",
      "closedDate": "9999-12-31T23:59:59.999+00:00",
      "createdDate": "2014-02-24T16:49:25.465-06:00",
      "customerId": 231,
      "miscellaneous": "",
      "name": "Savings",
      "recurringContributionFromExternalAccountId": 0,
      "recurringContributionStartDate": "2014-02-01T00:00.000-06:00",
      "recurringContributionType": "None",
      "status": "Open",
      "subCategory": "",
      "tag": "tagabc",
      "type": "Primary"
  },
  "errors": [],
  "status": 200
}

GET

/account/getByTag/{customerId}/{tag}

Get a single account for given customerId and tag

Request Parameters
customerId Required Customer ID (returned when customer was created)
tag Required A program-wide unique identifier supplied by the caller at account creation time.
Response Data
An account Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
66101 Tag '{0}' does not exist or is not tied to customer {1}.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
      "accountBalance": 0.0000,
      "accountId": 234,
      "accountNumber": "00000000000000097",
      "accountNumberMasked": "*************0097",
      "availableBalance": 0.0000,
      "category": "",
      "closedDate": "9999-12-31T23:59:59.999+00:00",
      "createdDate": "2014-02-24T16:49:25.465-06:00",
      "customerId": 231,
      "miscellaneous": "",
      "name": "Savings",
      "recurringContributionFromExternalAccountId": 0,
      "recurringContributionStartDate": "2014-02-01T00:00.000-06:00",
      "recurringContributionType": "None",
      "status": "Open",
      "subCategory": "",
      "tag": "tagabc",
      "type": "Primary"
  },
  "errors": [],
  "status": 200
}

POST

/account/update

Update information on an existing account.

Request Body Parameters
customerId Required Customer ID (returned when customer was created)
accountId Required Account ID for the account (returned when account was created)
name Required The name to apply to this account.
targetAmount Optional The amount the customer wants this account to reach.
targetDate Optional The date by which the customer wants this account to reach the given targetAmount.
category Optional Freeform text which can be used to categorize accounts, useful for analytics.
subcategory Optional Freeform text which can be used to further subcategorize accounts, useful for analytics.
tag Optional A program-wide unique identifier supplied by the caller to associate with the new account.
miscellaneous Optional Freeform text which is unused by CorePro. Allows the caller to associate whatever text they want with this account.
recurringContributionType Optional Accepted values are "None", "BiWeekly", and "Monthly". Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionAmount Required if recurringContributionType in the request or currently stored for that account is any value except "None". Amount to deposit each recurring contribution period. Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionFromExternalAccountId Required if recurringContributionType in the request or currently stored for that account is any value except "None". External account from which recurring contributions are withdrawn. Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionStartDate Required if recurringContributionType in the request or currently stored for that account is any value except "None". Date to start the first recurring contribution period. Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionEndDate Required if recurringContributionType in the request or currently stored for that account is any value except "None". Date to end the last recurring contribution period. Applicable only if the program has opted into the recurring contribution feature set.
Response Data
No object is returned; the envelope's "data" property will be absent, but a status of 200 is returned upon success.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
61101 Invalid AccountId: {0}
61102 An account with the name '{0}' already exists.
61103 Recurring contribution type '{0}' is invalid. Valid values are:
  • None
  • BiWeekly
  • Monthly
.
61104 Recurring contribution type '{0}' is invalid. Valid values are:
  • None
  • Weekly
  • BiWeekly
  • Monthly
.
61105 A recurring contribution amount must be at least {0:C}.
61106 External account id '{0}' for the recurring contribution is invalid.
61107 Tag '{0}' is already associated with another account.
61108 A recurring contribution must be scheduled to start between the 1st and the 28th of the month.
61109 A recurring contribution start date must occur before its end date.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
    "accountId": 1562412
  },
  "errors": [],
  "status": 200
}

POST

/account/create

Create a new account

Request Body Parameters
customerId Required Customer ID (returned when customer originally created)
name Required The name to apply to this account.
type Required Accepted values are "Client", "Checking", or "Savings". However, each program defines exactly one type of account that is allowed. i.e. this parameter will be the same value for every request for a given program.
targetAmount Optional The amount the customer wants this account to reach.
targetDate Optional The date by which the customer wants this account to reach the given targetAmount.
category Optional Freeform text which can be used to categorize accounts, useful for analytics.
subcategory Optional Freeform text which can be used to further subcategorize accounts, useful for analytics.
tag Optional A program-wide unique identifier supplied by the caller to associate with the new account.
miscellaneous Optional Freeform text which is unused by CorePro. Allows the caller to associate whatever text they want with this account.
recurringContributionType Optional Accepted values are "None", "BiWeekly", and "Monthly". Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionAmount Required if recurringContributionType is any value except "None" Amount to deposit each recurring contribution period. Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionFromExternalAccountId Required if recurringContributionType is any value except "None" External account from which recurring contributions are withdrawn. Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionStartDate Required if recurringContributionType is any value except "None" Date to start the first recurring contribution period. Applicable only if the program has opted into the recurring contribution feature set.
recurringContributionEndDate Required if recurringContributionType is any value except "None" Date to end the last recurring contribution period. Applicable only if the program has opted into the recurring contribution feature set.
Response Data
accountId Account ID of the new account.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
61002 An account with the name '{0}' already exists.
61003 Name is a required field.
61004 Account must be specified with a Type of '{0}'.
61005 Tag {0} is already associated with another account.
61006 Recurring contribution type '{0}' is invalid. Valid values are:
  • None
  • BiWeekly
  • Monthly
.
61007 Recurring contribution type '{0}' is invalid. Valid values are:
  • None
  • Weekly
  • BiWeekly
  • Monthly
.
61008 A recurring contribution amount must be at least {0:C}.
61009 External account id '{0}' for the recurring contribution is invalid.
61010 A recurring contribution must be scheduled to start between the 1st and the 28th of the month.
61011 A recurring contribution start date must occur before its end date.
61012 A recurring contribution start date must be specified.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
    "accountId": 1583010
  },
  "errors": [],
  "status": 200
}

POST

/account/close

Closes an account.
If the account balance is greater than 0 or any interest is owed on this account, then those amounts are calculated and a transaction is implicitly created with the sum of those amounts being credited into the given externalAccountId.
That transaction is also assigned the value in the transactionTag property, if specified.

Request Body Parameters
customerId Required Customer ID (returned when customer originally created)
accountId Required Account ID of the account to close.
closeToAccountId Required The Account ID of the account or externalAccount where any funds in the closing account are to be transferred.
transactionTag Optional A program-wide unique identifier supplied by the caller that is to be associated with the transaction created to move any funds from the closing account.

NOTE: The properties returned from this call are completely different than all other /account routes. It does not return an account object. It returns details of the account closure process that could be useful.

Response Data
customerId Customer ID (returned when customer originally created)
accountId Account ID of the account to close.
closeToAccountId The Account ID of the account or externalAccount where any funds in the closing account are to be transferred.
transactionTag A program-wide unique identifier supplied by the caller that is to be associated with the transaction created to move any funds from the closing account.
closingBalanceAmount The balance of the account at close time prior to any interest being paid.
interestPaidAmount The amount of interest paid at time of close.
totalClosingAmount The total amount of funds transferred to the given closeAccountId at time of close. NOTE: closingBalanceAmount + interestPaidAmount will equal totalClosingAmount, unless Backup Withholding is enabled for that customer. If Backup Withholding is enabled, its amount is 28% of total interest earned, meaning the interestPaidAmount returned in that case is 72% of total interest earned.
isClosedToExternalAccount True if the closeToAccountId was an external account. False otherwise.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
65901 Invalid account id '{0}'.
65902 Invalid closing account id '{0}'.
65903 Transaction with tag '{0}' already exists.
65904 Closing account id '{0}' is deactivated.
65905 Closing account id '{0}' is not yet verified.
65906 Closing account id '{0}' is not open.
65907 Account id '{0}' and close to account id '{1}' cannot be the same.
65908 Cannot close an account with pending transactions.
65909 Cannot close an account with a negative balance.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
    "accountId": 80,
    "closeToAccountId" : 27,
    "transactionId" : 23894723,
    "transactionTag" : "oiwjo28c",
    "closingBalanceAmount" : 32.98,
    "interestPaidAmount" : 0.82,
    "totalClosingAmount" : 33.80,
    "isClosedToExternalAccount" : true
  },
  "errors": [],
  "status": 200
}

/document

During the customer/savings account creation process it is required that certain documents are displayed to the customers. Additionally we require acknowledgement of the viewing and the acceptance of these documents before the account can be opened.

The actual documents required varies depending on the bank assigned to your program but some examples include:

  • Terms & Conditions
  • Privacy Policies
  • Truth-in-Savings Account Disclosure
  • Deposit Account Agreement
  • ESIGN Agreement

PDF versions of the documents are stored at the returned URI for retrieval. HTML versions of the documents are returned inline.

document Object

Attribute Data Type
(length)
Description
bankId integer
culture string (20) Valid values vary by program. However, here are two examples:
  • en-US
  • es-US
customerId integer
documentId integer
documentType string (50) Valid values include:
  • TermsAndConditions
  • PrivacyPolicy
  • TruthInSavings
  • eStatement
downloadUrl string (255) Absolute url to the pdf version of the document
effectiveDate datetime Date this document became effective.
expireDate datetime Date this document will expire.
html string (2 MB) Actual HTML content.
title string (100) Title to display to the user as the link text to the downloadUrl.

GET

/document/list/{culture}

List all documents for a given culture.

Request Parameters
culture Required Accepted values vary by program. Examples are:
  • en-US
  • es-US
Response Data
A list of document Objects Example
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "bankId": 1,
      "culture": "en-US",
      "documentId": 25,
      "documentType": "TermsAndConditions",
      "downloadUrl": "https://sandbox-api.corepro.io/document/download/en-US/25",
      "effectiveDate": "2014-02-18T23:01:11.541+00:00",
      "expireDate": "2014-12-31T23:59:59.999+00:00",
      "html": "<h4>TERMS AND CONDITIONS</h4><br /><br />\r\n\r\n<p>These Terms and Conditions (this \"Agreement\") govern the \r\n\r\nprogram and services available through CorePro and Lincoln Savings \r\n\r\nBank (\"LSB\") as described in this Agreement.   \r\n\r\nCorePro offers a unique way to save for a financial \r\n\r\nsavings goal through the accumulation of deposits in a \r\n\r\nsavings account at LSB.  LSB is not \r\n\r\naffiliated with CorePro but is a CorePro bank service provider.  In addition to this Agreement, your \r\n\r\nSavings Account maintained at LSB is subject to \r\n\r\nLSB's Consumer Deposit Account Agreement and Truth \r\n\r\nIn Savings Disclosure.</p>",
      "title": "CorePro Sample Terms and Conditions"
    },
    {
      "bankId": 1,
      "culture": "en-US",
      "documentId": 26,
      "documentType": "PrivacyPolicy",
      "downloadUrl": "https://sandbox-api.corepro.io/document/download/en-US/26",
      "effectiveDate": "2014-02-18T23:01:11.541+00:00",
      "expireDate": "2014-12-31T23:59:59.999+00:00",
      "html": "<h4>PRIVACY POLICY</h4>  <br /><br />    <p>In this disclosure, you'll find details about our privacy policies and procedures, and instructions for \r\n\r\nchanging how information about you may be shared. Please read this carefully, print and/or download a copy for your files.</p> \r\n<p>Your Savings Account with Lincoln Savings Bank is governed by the LSB Consumer Privacy Disclosure.  Please see the LSB Consumer Privacy \r\n\r\nDisclosure for details on the LSB privacy policies.</p>\r\n",
      "title": "CorePro Sample Privacy Policy"
    },
    {
      "bankId": 1,
      "culture": "en-US",
      "documentId": 27,
      "documentType": "TruthInSavings",
      "downloadUrl": "https://sandbox-api.corepro.io/document/download/en-US/27",
      "effectiveDate": "2014-02-18T23:01:11.541+00:00",
      "expireDate": "2014-12-31T23:59:59.999+00:00",
      "html": "<h4>Truth-In-Savings Account Disclosure</h4>\r\n<p>This Savings Account is only available to individuals with a CorePro Account.  This disclosure contains information about your Savings Account related to CorePro.  Your Savings Account with Lincoln Savings Bank (“LSB”) is governed by this Truth-In-Savings Account Disclosure and the Lincoln Savings Bank Consumer Deposit Account Agreement.  In addition, the CorePro Terms and Conditions govern your CorePro Account.   Any capitalized terms not defined herein shall have the meaning set forth in your CorePro Terms and Conditions.</p>\r\n",
      "title": "CorePro Sample Truth In Savings"
    },
    {
      "bankId": 1,
      "culture": "en-US",
      "documentId": 28,
      "documentType": "eStatement",
      "downloadUrl": "https://sandbox-api.corepro.io/document/download/en-US/28",
      "effectiveDate": "2014-02-18T23:01:11.541+00:00",
      "expireDate": "2014-12-31T23:59:59.999+00:00",
      "html": "<h4>Agreement and Consent Regarding Electronic Communications</h4>  \r\n<p>Please read this Agreement and Consent Regarding Electronic Communications (referred to as the “Agreement”) and retain a copy for your future reference.  This Agreement contains important information regarding your transaction of business electronically with CorePro and Lincoln Savings Bank (“LSB”).  In this Agreement, the following terms have the meanings shown below:</p>  \r\n",
      "title": "CorePro Sample eStatement"
    }
  ],
  "errors": [],
  "status": 200
}

GET

/document/list/{culture}/{type}

List all documents of a given type for a given culture. Valid values for {type} include:

Request Parameters
type Required Accepted values are:
  • TermsAndConditions
  • PrivacyPolicy
  • TruthInSavings
  • eStatement
culture Required Accepted values vary by program. Examples are:
  • en-US
  • es-US
Response Data
A list of document Objects
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "bankId": 1,
      "culture": "en-US",
      "documentId": 25,
      "documentType": "TermsAndConditions",
      "downloadUrl": "https://sandbox-api.corepro.io/document/download/en-US/25",
      "effectiveDate": "2014-02-18T23:01:11.541+00:00",
      "expireDate": "2014-12-31T23:59:59.999+00:00",
      "html": "<h4>TERMS AND CONDITIONS</h4><br /><br />\r\n\r\n<p>These Terms and Conditions (this \"Agreement\") govern the \r\n\r\nprogram and services available through CorePro and Lincoln Savings \r\n\r\nBank (\"LSB\") as described in this Agreement.   \r\n\r\nCorePro offers a unique way to save for a financial \r\n\r\nsavings goal through the accumulation of deposits in a \r\n\r\nsavings account at LSB.  LSB is not \r\n\r\naffiliated with CorePro but is a CorePro bank service provider.  In addition to this Agreement, your \r\n\r\nSavings Account maintained at LSB is subject to \r\n\r\nLSB's Consumer Deposit Account Agreement and Truth \r\n\r\nIn Savings Disclosure.</p>",
      "title": "CorePro Sample Terms and Conditions"
    },
  ],
  "errors": [],
  "status": 200
}

/externalAccount

CorePro allows customers to transfer funds to/from their existing checking and savings accounts at any financial institution within the US and its territories. These are referred to as "externalAccount" objects in CorePro vernacular.

Only one external account is allowed.

  • If the existing external account is deactivated, a new external account still cannot be created via the CorePro API. To add a new external account after deactivating an existing one, it must be reviewed by a CSR and created via the CorePro Admin console. This is a fraud prevention mechanism.

A program can be configured to automatically create all external accounts in a Verified status. This is typically used when the client is in control of the external account itself -- e.g. prepaid card.

Otherwise a program can be configured to require customers to verify ownership of the external bank accounts prior to use via the following process:

If External Account Verification is disabled:

  1. /externalAccount/create is called - status of account is "Verified". No further action is needed.

If External Account Verification is enabled:

  1. /externalAccount/initiate is called - status of account is "Unverified" (i.e. pending verification)
  2. CorePro initiates two small deposits and offsetting withdrawals on the external account. Amounts are random, but will fall between $0.01 and $0.99 inclusive. Exception to this rule is in the Sandbox environment -- one amount is hardcoded to $0.18 and the other is $0.28. Also note, since no ACH files are actually being sent to an external bank in the Sandbox environment, no funds are actually transferred.
  3. At a later date, the customer logs onto your site and enters the amounts that were placed on the external account
  4. /externalAccount/verify is called with the amounts
  5. If the amounts are valid then the status of the account is set to "Verified"
    • If verification attempts fail 3 or more times, status of the account is set to "VerifyLocked"
    • If verification time limit has been exceeded, status of the account is set to "Expired"
    • If manual intervention by a CSR happens prior to verification, status of account may be set to "Denied"

externalAccount Object

Attribute Data Type
(length)
Description
externalAccountId integer
customerId integer Customer who owns the external bank account
tag string (50) A caller-specified, immutable, unique identifier for this externalAccount. Must be unique within a given Program. Maximum length is 50 characters.
name string (50) Bank Name according to FDIC
routingNumber string (50) Routing Transit Number (RTN) is a nine-digit bank code used to identify a financial institution
accountNumber string (15)
type string (50) Possible values include:
  • Client
  • Savings
  • Checking
nickName string (50)
status string Possible values include:
  • Unverified
  • VerifyLocked
  • Verified
  • Denied
  • Expired
statusDate datetime The date the status last changed
nocCode string (10) Notification of Change code.
isActive boolean Denotes if this externalAccount is available for use. Note other flags such as isLocked=false and Status=Verified must also be set before a customer can perform any functions.
isLocked boolean Denotes if this externalAccount is locked, typically caused by fraud prevention mechanisms or manual intervention via the Admin console. Note other flags such as isActive=true and Status=Verified must also be set before a customer can perform any functions.
lockedDate datetime Denotes the last time isLocked was set to true. Example format: 2014-01-01T00:00:00.000+00:00
lockedReason string (255) The reason isLocked was set to true. Freeform.

GET

/externalAccount/list/{customerId}

List all external accounts for a given customer

Request Parameters
customerId Required Customer ID (returned when customer originally created)
Response Data
A list of externalAccount Objects
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "accountNumberMasked": "XXXXXX9873",
      "customerId": 231,
      "externalAccountId": 253,
      "firstName": "Brock",
      "isActive": true,
      "isLocked": false,
      "lastName": "Weaver",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "name": "PrepaidAbc",
      "nickName": "pp1",
      "routingNumberMasked": "XXXXXX1234",
      "status": "Unverified",
      "statusDate": "2014-02-25T15:21:16.152-06:00",
      "tag": "tag12345",
      "type": "Savings"
    }
  ],
  "errors": [],
  "status": 200
}

GET

/externalAccount/get/{customerId}/{externalAccountId}

Retrieve a specific external account for a given customer

Request Parameters
customerId Required Customer ID (returned when customer originally created)
externalAccountId Required External Account ID (returned when external account was originally created)
Response Data
An externalAccount Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
66201 Invalid external account id '{0}'.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
      "accountNumberMasked": "XXXXXX9873",
      "customerId": 231,
      "externalAccountId": 253,
      "firstName": "Brock",
      "isActive": true,
      "isLocked": false,
      "lastName": "Weaver",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "name": "PrepaidAbc",
      "nickName": "pp1",
      "routingNumberMasked": "XXXXXX1234",
      "status": "Unverified",
      "statusDate": "2014-02-25T15:21:16.152-06:00",
      "tag": "tag12345",
      "type": "Savings"
  },
  "errors": [],
  "status": 200
}

GET

/externalAccount/getByTag/{customerId}/{tag}

Retrieve a specific external account for a given customer by tag

Request Parameters
customerId Required Customer ID (returned when customer originally created)
tag Optional A program-wide unique identifier defined by the caller that is associated with this external account.
Response Data
An externalAccount Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
66301 Tag '{0}' does not exist or is not tied to customer {1}.

Response

200 (OK)
Content-Type: application/json
{
  "data": {
      "accountNumberMasked": "XXXXXX9873",
      "customerId": 231,
      "externalAccountId": 253,
      "firstName": "Brock",
      "isActive": true,
      "isLocked": false,
      "lastName": "Weaver",
      "lockedDate": "9999-12-31T23:59:59.999+00:00",
      "name": "PrepaidAbc",
      "nickName": "pp1",
      "routingNumberMasked": "XXXXXX1234",
      "status": "Unverified",
      "statusDate": "2014-02-25T15:21:16.152-06:00",
      "tag": "tag12345",
      "type": "Savings"
  },
  "errors": [],
  "status": 200
}

POST

/externalAccount/create

Creates a new external account. Functions properly only if your Program is configured with External Account Verification set to Disabled.

Request Body Parameters
customerId Required Customer ID (returned when customer originally created)
routingNumber Required The routing number of the external account
accountNumber Required The account number of the external account
firstName Required The first name of the person associated with the external account
lastName Required The last name of the person associated with the external account
type Required Accepted value is "Client".
name Required The name of the bank associated with the external account. E.g.:"Second Bank"
nickName Optional If not supplied, will assume the same value as the name parameter.
tag Optional A program-wide unique identifier defined by the caller that is associated with this external account.

NOTE: Only one external account may be created. If it is then deactivated, another external account still cannot be added via the CorePro API. There must be human intervention to validate the customer again and the second external account must be created via the CorePro Admin site. This is a fraud prevention mechanism.

Response Data
externalAccountId ExternalAccount ID of the new external account. This external account will be in a "Verified" status upon success of this call.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
62001 Only one external account is allowed.
62002 Invalid Type: '{0}'. Valid values are 'Client', 'Checking', or 'Savings'.
62003 Tag {0} is already associated with another external account.

Response

201 (Created)
Content-Type: application/json
{
    "data":
    {
        "externalAccountId":"12"
    },
    "status":201,
    "errors":[]
}

POST

/externalAccount/initiate

Initiates a new external account. Functions properly only if your Program is configured with External Account Verification set to Enabled.

Request Body Parameters
customerId Required Customer ID (returned when customer originally created)
routingNumber Required The routing number of the external account
accountNumber Required The account number of the external account
firstName Required The first name of the person associated with the external account
lastName Required The last name of the person associated with the external account
type Required Accepted values are "Checking" or "Savings".
name Required The name of the bank associated with the external account. E.g.:"Second Bank"
nickName Optional If not supplied, will assume the same value as the name parameter.
tag Optional A program-wide unique identifier defined by the caller that is associated with this external account.

NOTE: Only one external account may be created. If it is then deactivated, another external account still cannot be added via the CorePro API. There must be human intervention to validate the customer again and the second external account must be created via the CorePro Admin site. This is a fraud prevention mechanism. NOTE FOR SANDBOX ONLY: To enable easier testing, all trial deposit amounts in the Sandbox environment will be "0.18" and "0.28", and /externalAccount/verify can be called immediately. However, in production, a subsequent call to /externalAccount/verify must be called at a later date to allow time for the ACH process to happen at the external bank.

Response Data
externalAccountId ExternalAccount ID of the new external account. Upon success, two trial deposits will have been made to the external account. Those deposits are performed via ACH, so the customer will be unable to verify them immediately. You will need to allow the customer to visit at a later date and supply the verification amounts, then call /externalAccount/verify. This external account will be in a "Unverified" status upon success of this call.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
62601 Invalid Type: '{0}'. Valid values are 'Checking' or 'Savings'.
62602 An external bank account with nickname '{0}' already exists.
62603 Name is a required field.
62604 FirstName is a required field.
62605 LastName is a required field.
62606 Routing number is a required field.
62607 Account number is a required field.
62608 Tag {0} is already associated with another external account.
62609 Only one external account is allowed.

Response

201 (Created)
Content-Type: application/json
{
    "data":
    {
        "externalAccountId":"12"
    },
    "status":201,
    "errors":[]
}

POST

/externalAccount/verify

Verify an external account

Request Body Parameters
customerId Required Customer ID (returned when customer originally created)
externalAccountId Required External Account ID (returned when external account was originally created)
amount1 Required Value of one of the trial deposit amounts automatically performed at external account create time
amount2 Required Value of the other trial deposit amount automatically performed at external account create time

NOTE: For programs that have external accounts set to automatically verify, this route serves no purpose as trial deposits were unnecessary.

Response Data
No object is returned; the envelope's "data" property will be absent, but a status of 200 is returned upon success.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
62201 Invalid ExternalAccountId '{0}'.
62202 External account is in a Locked status. Unable to verify.
62203 External account is in a Denied status. Unable to verify.
62204 External account has already been verified.
62205 Verification period expired on '{0}'.
62206 Maximum number of failed attempts exceeded. Verification has been denied.
62207 Given amounts do not match what is on record. {0} attempt(s) remaining.

Response

200 (OK)
Content-Type: application/json
{
    "status":200,
    "errors":[]
}

POST

/externalAccount/update

Update an external account

Request Body Parameters
customerId Required Customer ID (returned when customer originally created)
externalAccountId Required External Account ID (returned when external account was originally created)
nickname Optional New nickname for the external account.
tag Optional New tag for the external account.

NOTE: No other values may be updated on an external account.

Response Data
No object is returned; the envelope's "data" property will be absent, but a status of 200 is returned upon success.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
62401 Another external account already exists with the nickname of '{0}'.
62402 Invalid external account id '{0}'.
62403 Tag '{0}' is already associated with another external account.

Response

200 (OK)
Content-Type: application/json
{
    "status":200,
    "errors": []
}

POST

/externalAccount/deactivate

Deactivates an external account

Request Body Parameters
customerId Required Customer ID (returned when customer originally created)
externalAccountId Required External Account ID (returned when external account was originally created)
Response Data
No object is returned; the envelope's "data" property will be absent, but a status of 200 is returned upon success.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
62501 Invalid external account id '{0}'.
62502 Unable to deactivate an external account that is not in a Verified status.
62503 Unable to deactivate an external account for a customer who has a pending transaction or any account with a non-zero balance.

Response

200 (OK)
Content-Type: application/json
{
    "status":200,
    "errors": []
}

/statement

CorePro creates monthly bank statements and yearly tax (1099) statements for customers who have accounts that are active during the period.

1099 Statements are only created and filed with the IRS if the minimum thresholds are met (currently $10 per year in interest income).

Statements are temporarily (15 minutes) placed at a URI for retrieval.

statement Object

Attribute Data Type
(length)
Description
statementId integer
customerId integer Customer who owns the Bank Account
type string Monthly or Tax
month integer
year integer
uri string

GET

/statement/list/{customerId}

Get a list of all statements for a customer

Request Parameters
customerId Required Customer ID (returned when customer originally created)
Response Data
A list of statement Objects
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
    "data":
    {
        "statements":
        [
            {
                "statementId":"55434",
                "customerId":"456",
                "type":"Monthly",
                "month":"8",
                "year":"2012",
                "uri":"/location/statement3992392939.pdf"
            },
            {
                "statementId":"55223",
                "customerId":"456",
                "type":"Tax",
                "month":"1",
                "year":"2012",
                "uri":"/location/statement2234233439.pdf"
            }
        ]
    },
    "status":200,
    "errors":[]
}

GET

/statement/search/{customerId}/{type}/{year}/{month}

Get a monthly or tax statement for a customer

Request Parameters
customerId Required Customer ID (returned when customer originally created)
type Required Accepted values are "Monthly" or "Tax".
year Required 4-digit year of statement to return. E.g.: "2014"
month Required 2-digit month of statement to return. E.g.: "01"
Response Data
A statement Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
    "data":
    {
        "statements":
        [
            {
                "statementId":"55354",
                "customerId":"456",
                "type":"Monthly",
                "month":"3",
                "year":"2012",
                "uri":"/location/statement634234323.pdf"
            }
        ]
    },
    "status":200,
    "errors":[]
}

GET

/statement/get/{customerId}/{statementId}

Get a statement for a customer

Request Parameters
customerId Required Customer ID (returned when customer originally created)
statementId Required Statement ID (returned from /statement/list)
Response Data
A statement Object
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.

Response

200 (OK)
Content-Type: application/json
{
    "data":
    {
        "statements":
        [
            {
                "statementId":"55354",
                "customerId":"456",
                "type":"Monthly",
                "month":"3",
                "year":"2012",
                "uri":"/location/statement634234323.pdf"
            }
        ]
    },
    "status":200,
    "errors":[]
}

/transaction

The transaction resource is used for retrieving a list of transactions. Transactions that are initiated via the /transfer route with external bank accounts (or via a recurring contribution) can be voided as long as the ACH request has not yet been delivered to NACHA.

transaction Object

Attribute Data Type
(length)
Description
transactionCount integer The total transactions that meet your query criteria. Note only a single page is returned in one call. See /transaction/list route definition for more information.
transactionId long integer (64-bit integer) The unique identifier created by CorePro for a particular transaction.
customerId integer Customer who owns the Bank Account
accountId integer
type string (50) Possible values include:
  • CorePro Deposit
  • CorePro Withdrawal
  • Internal CorePro Transfer
  • Interest Paid
  • CorePro Recurring Withdrawal
  • Manual Adjustment
  • Interest Adjustment
isCredit boolean (50) True if the transaction is crediting the account specified by accountId property, false if it is debiting that account.
tag string (50) The program-wide unique identifier provided by the caller at /transfer/create time. CorePro does not generate this value.
nachaDescription string (255) The exact verbiage returned from NACHA in an ACH file for this transaction. By law, this must be displayed to the end user if it contains a value.
friendlyDescription string (255) A CorePro description of the transaction.
status string (50) The status of the transaction. Possible values include:
  • Initiated
  • Pending
  • Settled
  • Voided
createdDate datetime The exact date and time the transaction was created. Returned in time zone local to the bank.
amount decimal The amount of funds the transaction represents.
accountNumberMasked string (15) A mask providing only the last 4 digits of the account.
accountName string (50) The name of the account to which this transaction applies.
settledDate datetime The exact date and time the transaction was settled. Returned in time zone local to the bank.
voidedDate datetime The exact date and time the transaction was voided. Returned in time zone local to the bank.

GET

/transaction/list/{customerId}/{accountId}/{beginDate}/{endDate}?{pageNumber}=0&{pageSize}=200

List one page of transactions for a given customer and accountId.

Request Parameters
customerId Required Customer ID (returned when customer originally created)
accountId Required Account ID (returned when savings account originally created)
beginDate Optional Date of earliest transaction to return. Formatted as "YYYY-MM-DD". E.g.: 2014-03-01
endDate Optional Date of latest transaction to return. Formatted as "YYYY-MM-DD". E.g.: 2014-04-01
pageNumber Optional (supplied via the query string) Which page of the transaction list to return. Default is 0
pageSize Optional (supplied via the query string) Size of one page of the transactions to return. Default is 200. Max is 200
Response Data
A list of transaction Objects
The list is ordered by transaction settledDate desc.
All transactions, regardless of any flags or status, will be returned.
Error Codes
Code Message (en-US) Notes
1-60000 Any "Common Error Code" may occur. See Common Error Codes.
63501 Begin Date must be a date prior to End Date.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "accountId": 336,
      "accountName": "PrepaidAbcb",
      "accountNumberMasked": "*************9873",
      "amount": 500.0000,
      "createdDate": "2014-03-23T09:07:19.716-05:00",
      "customerId": 333,
      "friendlyDescription": "Card to MoneyDrawer",
      "isCredit": true,
      "nachaDescription": "",
      "settledDate": "2014-03-23T09:07:19.716-05:00",
      "status": "Settled",
      "tag": "",
      "transactionCount": 2,
      "transactionId": 1878,
      "type": "CorePro Deposit",
      "typeId": 5
    },
    {
      "accountId": 336,
      "accountName": "PrepaidAbcb",
      "accountNumberMasked": "*************9873",
      "amount": 2.0000,
      "createdDate": "2014-03-23T09:08:08.719-05:00",
      "customerId": 333,
      "friendlyDescription": "MoneyDrawer to Card",
      "isCredit": false,
      "nachaDescription": "",
      "settledDate": "2014-03-23T09:08:08.719-05:00",
      "status": "Settled",
      "tag": "ItoE1",
      "transactionCount": 2,
      "transactionId": 1883,
      "type": "CorePro Withdrawal",
      "typeId": 4
    }
  ],
  "errors": [],
  "requestId": "2dd82a44-02b0-49cb-94e3-ca454bcdd276",
  "status": 200
}

/transfer

The transfer resource is used for both creating a transaction. Transactions can include moving money between two CorePro accounts, or between a CorePro account and an external account.

transfer Object

Attribute 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.
memo string (50)
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

transferResponse Object

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

POST

/transfer/create

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

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.
memo Optional Freeform text to associate with this transfer.
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 Source account id {0} is closed.
63610 Invalid destination account id {0}.
63611 Destination account id {0} is inactive.
63612 Destination 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.
63660 Transaction with tag '{0}' already exists.
63901 Invalid source account id {0}.
63701 Invalid source account id {0}.
63702 Source account id {0} is closed.
63703 Source account id {0} is frozen.
63710 Invalid destination account id {0}.
63711 Destination account id {0} is inactive.
63712 Destination account id {0} is frozen.
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.
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 transfer must be between {0:C} and {1:C}.
64101 Invalid source account id {0}.
64102 Transaction with tag '{0}' already exists.
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.

Response

201 (Created)
Content-Type: application/json
{
  "data": [
    {
      "customerId": 231,
      "tag": "tagtest1",
      "transactionId": 441
    }
  ],
  "errors": [],
  "status": 200
}

POST

/transfer/void

Void a transaction previously created via /transfer/create.

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

NOTE: only transactions in a status of "Initiated" may be voided.

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.

Response

200 (OK)
Content-Type: application/json
{
  "data": [
    {
      "customerId": 80,
      "tag": "",
      "transactionId": 1138
    }
  ],
  "errors": [],
  "status": 200
}