Quickstart

Want to make your first Helix API call ASAP? You've come to the right place. Helix is highly configurable and many features can be toggled on or off depending on the program you're looking to build. We've set up an example program with some of the most common settings and features enabled so you can begin testing right now. In this example we will walk through how to onboard a new customer, open an account on Helix, and fund it.

Credentials

Domain: https://sandbox-api.helix.q2.com
API Key / Username: example1
API Secret / Password: example1

1. Get your program settings

Click to expand
  • Endpoint: /program/get
  • Description: This step is not required, but it’s an easy first API call!
curl --request GET \
     --url https://sandbox-api.helix.q2.com/program/get \
     --header 'Accept: application/json' \
     --header 'Authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE='

Note the products array on the returned program object. There are many sample products configured in this environment. For this workflow we are going to use productId=19797713 (in a later step).

{
  "data": {
    ...
    "products": [
      ...
      {
        "balanceLimit": {
          "maximumAmount": 999999999.0
        },
        "category": "Checking",
        "description": "Sample Checking no KYC",
        "interestRates": [],
        "isExternalWithdrawEnabled": true,
        "isRecurringContributionEnabled": true,
        "name": "Sample Checking no KYC",
        "perTransactionDepositLimit": {
          "maximumAmount": 999999999.0,
          "minimumAmount": 0.01
        },
        "perTransactionWithdrawLimit": {
          "maximumAmount": 999999999.0,
          "minimumAmount": 0.01
        },
        "productId": 19797713,
        "type": "Checking"
      },
      ...
    ],
    ...
  },
  "errors": [],
  "requestId": "3e33ae23-6e74-45f7-bcbd-957f14ed82ca",
  "status": 200
}

2(a). Fetch a list of bank documents

Click to expand
curl --request GET \
     --url https://sandbox-api.helix.q2.com/bankDocument/list/culture \
     --header 'Accept: application/json' \
     --header 'Authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE='

This endpoint returns metadata for all available bank documents.

{
  "data": [
    {
      "bankId": 212,
      "culture": "en-US",
      "customerId": 9049,
      "documentId": 13550052,
      "documentType": "eStatement",
      "downloadUrl": "https://sandbox-api.corepro.io/bankdocument/download/en-US/13550052",
      "effectiveDate": "2021-01-10T00:00:00.000-06:00",
      "expireDate": "9999-12-31T23:59:59.999+00:00",
      "html": "<p><b>E-Sign Disclosure</b></p>\r\n\t\t<p>This is an example e-Sign document.</p>",
      "programId": 9049,
      "title": "Example Bank eStatement"
    },
    {
      "bankId": 212,
      "culture": "en-US",
      "customerId": 9049,
      "documentId": 240684,
      "documentType": "PrivacyPolicy",
      "downloadUrl": "https://sandbox-api.corepro.io/bankdocument/download/en-US/240684",
      "effectiveDate": "2014-01-01T00:00:00.000+00:00",
      "html": "<p>Rev 08 2014</p>\r\n\t\t<p>This is an example Privacy Policy document.</p>",
      "programId": 9049,
      "title": "Example Privacy Policy"
    },
    {
      "bankId": 212,
      "culture": "en-US",
      "customerId": 9049,
      "documentId": 240683,
      "documentType": "TermsAndConditions",
      "downloadUrl": "https://sandbox-api.corepro.io/bankdocument/download/en-US/240683",
      "effectiveDate": "2014-01-01T00:00:00.000+00:00",
      "html": "<p><b>TERMS AND CONDITIONS OF YOUR ACCOUNT </b></p>\r\n\t\t<p>This is an example Terms and Conditions document.</p>",
      "programId": 9049,
      "title": "Example Terms and Conditions"
    },
    {
      "bankId": 212,
      "culture": "en-US",
      "customerId": 9049,
      "documentId": 13550055,
      "documentType": "TruthInSavings",
      "downloadUrl": "https://sandbox-api.corepro.io/bankdocument/download/en-US/13550055",
      "effectiveDate": "2021-01-09T00:00:00.000-06:00",
      "html": "<p>Example Savings Account</p>\r\n\t\t<p>This is an example Truth In Savings document.</p>",
      "programId": 9049,
      "title": "Example Truth In Savings"
    }
  ],
  "errors": [],
  "requestId": "eae7c3e6-0d51-43a9-93bb-9f6e292d21b3",
  "status": 200
}

2(b). Download a specific bank document

Click to expand
  • Endpoint: /bankDocument/download
  • Description: Download the content of a specific bank document to display to the customer.
curl --request GET \
     --url https://sandbox-api.helix.q2.com/bankDocument/download/en-US/240684 \
     --header 'Accept: application/json' \
     --header 'Authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE='

This endpoint returns a file content object. Your application must display this content and provide a way for the customer to agree.

{
  "data": {
    "content":"JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9U ...",
    "contentLength":309103,
    "contentType":"application/pdf"
  },
"errors": [],
"requestId": "a45add02-43bb-4d82-b49c-231089996405",
"status": 200
}

3. Collect the customer's information and pass it to helix

Click to expand
  • Endpoint: /customer/create
  • Description: The information you are required to collect from each customer will depend on your program settings. For our example program, the following pieces of information are required: firstName, lastName, birthDate, address (type=Residence), emailAddress, taxId, phone (type=Mobile).
curl --request POST \
     --url https://sandbox-api.helix.q2.com/customer/create \
     --header 'Accept: application/json' \
     --header 'Authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE=' \
     --header 'Content-Type: application/json' \
     --data '
{
     "addresses": [
          {
               "addressLine1": "1 Rural Rt. 6",
               "addressType": "Residence",
               "city": "Honesdale",
               "country": "US",
               "state": "PA",
               "postalCode": "18431"
          }
     ],
     "phones": [
          {
               "number": "7175550177",
               "phoneType": "Mobile"
          }
     ],
     "firstName": "Dwight",
     "lastName": "Schrute",
     "birthDate": "1970-1-20T00:00:00.000+00:00",
     "taxId": "123456789",
     "emailAddress": "[email protected]",
     "isSubjectToBackupWithholding": false,
     "isOptedInToBankCommunication": true,
     "isDocumentsAccepted": true
}
'

This endpoint returns a customerId which we will use later in this workflow.

{
  "data": {
    "customerId": 19872058,
    "messages": [],
    "questions": [],
   "verificationStatus": "success"
  },
  "errors": [], 
  "requestId": "744f8536-e688-4487-8feb-96622277107d",
  "status": 200
}

4. Run KYC on the customer

Click to expand
  • Endpoint: /customer/onboard (not publicly documented)
  • Description: Helix provides a real-time KYC solution via /customer/onboard, however, the behavior of /customer/onboard can vary depending on your program settings and thus is not documented publicly. In this example workflow we are using a sample product that does not require KYC - so we can skip this step for the sake of this example workflow. Please note that any program offering full DDA or savings accounts will be required to perform this step.

5(a). Fetch the customer due diligence questions

Click to expand
  • Endpoint: /program/questionsList
  • Description: Fetch the list of due diligence questions your bank partner requires each customer to answer before opening an account. The list of questions (if any) will depend on each bank partner's requirements
curl --request GET \
     --url https://sandbox-api.helix.q2.com/program/questionsList \
     --header 'accept: application/json' \
     --header 'authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE='

This endpoint returns an array of dueDiligenceCategory objects each with its own set of questions and possible answers. You application must display each question to the customer and collect their answers.

{
  "data": [
    {
      "categoryDescription": "Opening Consumer Account",
      "categoryId": 2305315935,
      "categoryName": "OpeningConsumerAccount",
      "followUpQuestions": [],
      "questions": [
        {
          "answerType": "Single-Select",
          "choices": [
            {
              "choiceDescription": "Employed",
              "choiceId": 2305316143,
              "choiceName": "Employed"
            },
            {
              "choiceDescription": "Self Employed",
              "choiceId": 2305316145,
              "choiceName": "Self Employed"
            },
            {
              "choiceDescription": "Unemployed",
              "choiceId": 2305316147,
              "choiceName": "Unemployed"
            },
            {
              "choiceDescription": "Student",
              "choiceId": 2305316149,
              "choiceName": "Student"
            },
            {
              "choiceDescription": "Foreign Student",
              "choiceId": 2305316151,
              "choiceName": "Foreign Student"
            },
            {
              "choiceDescription": "Retired",
              "choiceId": 2305316153,
              "choiceName": "Retired"
            },
            {
              "choiceDescription": "Homemaker",
              "choiceId": 2305316155,
              "choiceName": "Homemaker"
            },
            {
              "choiceDescription": "Minor",
              "choiceId": 2305316157,
              "choiceName": "Minor"
            },
            {
              "choiceDescription": "Disabled",
              "choiceId": 2305316159,
              "choiceName": "Disabled"
            }
          ],
          "questionDescription": "What is your employment status?",
          "questionId": 2305316133,
          "questionName": "Employment Status",
          "questionTypeId": 1
        },
        {
          "answerType": "Single-Select",
          "choices": [
            {
              "choiceDescription": "Employment income",
              "choiceId": 2305316161,
              "choiceName": "Employment income"
            },
            {
              "choiceDescription": "Grants/Scholarships",
              "choiceId": 2305316165,
              "choiceName": "Grants/Scholarships"
            },
            {
              "choiceDescription": "Internal Transfer",
              "choiceId": 2305316173,
              "choiceName": "Internal Transfer"
            },
            {
              "choiceDescription": "Investment income savings",
              "choiceId": 2305316175,
              "choiceName": "Investment income savings"
            },
            {
              "choiceDescription": "Lottery/Betting/Casino win",
              "choiceId": 2305316177,
              "choiceName": "Lottery/Betting/Casino win"
            },
            {
              "choiceDescription": "Legal settlement",
              "choiceId": 2305316179,
              "choiceName": "Legal settlement"
            },
            {
              "choiceDescription": "Insurance claim payments",
              "choiceId": 2305316181,
              "choiceName": "Insurance claim payments"
            },
            {
              "choiceDescription": "Sale of assets",
              "choiceId": 2305316183,
              "choiceName": "Sale of assets"
            },
            {
              "choiceDescription": "Gift",
              "choiceId": 2305316185,
              "choiceName": "Gift"
            },
            {
              "choiceDescription": "Other",
              "choiceId": 2305316187,
              "choiceName": "Other"
            }
          ],
          "questionDescription": "Where did you get this money ",
          "questionId": 2305316135,
          "questionName": "Source of Funds",
          "questionTypeId": 1
        },
        {
          "answerType": "Single-Select",
          "choices": [
            {
              "choiceDescription": "Chief Executives",
              "choiceId": 2305316205,
              "choiceName": "11-1011"
            },
            {
              "choiceDescription": "Legislators",
              "choiceId": 2305316207,
              "choiceName": "11-1031"
            },
            {
              "choiceDescription": "Insurance Appraisers, Auto Damage",
              "choiceId": 2305316209,
              "choiceName": "13-1032"
            },
            {
              "choiceDescription": "Human Resources Specialists",
              "choiceId": 2305316211,
              "choiceName": "13-1071"
            },
            {
              "choiceDescription": "Accountants and Auditors",
              "choiceId": 2305316213,
              "choiceName": "13-2011"
            },
            {
              "choiceDescription": "Insurance Underwriters",
              "choiceId": 2305316215,
              "choiceName": "13-2053"
            },
            {
              "choiceDescription": "Computer Systems Analysts",
              "choiceId": 2305316217,
              "choiceName": "15-1211"
            },
            {
              "choiceDescription": "Information Security Analysts",
              "choiceId": 2305316219,
              "choiceName": "15-1122"
            },
            {
              "choiceDescription": "Engineers, All Other",
              "choiceId": 2305316221,
              "choiceName": "17-2199"
            },
            {
              "choiceDescription": "Life, Physical, and Social Science Technicians, All Other",
              "choiceId": 2305316223,
              "choiceName": "19-4099"
            },
            {
              "choiceDescription": "Social Workers, All Other",
              "choiceId": 2305316225,
              "choiceName": "21-1029"
            },
            {
              "choiceDescription": "Religious Workers, All Other",
              "choiceId": 2305316227,
              "choiceName": "21-2099"
            },
            {
              "choiceDescription": "Administrative Law Judges, Adjudicators, and Hearing Officers",
              "choiceId": 2305316229,
              "choiceName": "23-1021"
            },
            {
              "choiceDescription": "Arbitrators, Mediators, and Conciliators",
              "choiceId": 2305316231,
              "choiceName": "23-1022"
            },
            {
              "choiceDescription": "Judges, Magistrate Judges, and Magistrates",
              "choiceId": 2305316233,
              "choiceName": "23-1023"
            },
            {
              "choiceDescription": "Paralegals and Legal Assistants",
              "choiceId": 2305316235,
              "choiceName": "23-2011"
            },
            {
              "choiceDescription": "Court Reporters",
              "choiceId": 2305316237,
              "choiceName": "23-2091"
            },
            {
              "choiceDescription": "Title Examiners, Abstractors, and Searchers",
              "choiceId": 2305316239,
              "choiceName": "23-2093"
            },
            {
              "choiceDescription": "Legal Support Workers, All Other",
              "choiceId": 2305316241,
              "choiceName": "23-2099"
            },
            {
              "choiceDescription": "Teachers and Instructors, All Other",
              "choiceId": 2305316243,
              "choiceName": "25-3099"
            },
            {
              "choiceDescription": "Dentists, General",
              "choiceId": 2305316245,
              "choiceName": "29-1021"
            },
            {
              "choiceDescription": "Pharmacists",
              "choiceId": 2305316247,
              "choiceName": "29-1051"
            },
            {
              "choiceDescription": "Registered Nurses",
              "choiceId": 2305316249,
              "choiceName": "29-1141"
            },
            {
              "choiceDescription": "Pharmacy Technicians",
              "choiceId": 2305316251,
              "choiceName": "29-2052"
            },
            {
              "choiceDescription": "Healthcare Practitioners and Technical Workers, All Other",
              "choiceId": 2305316253,
              "choiceName": "29-9099"
            },
            {
              "choiceDescription": "Pharmacy Aides",
              "choiceId": 2305316255,
              "choiceName": "31-9095"
            },
            {
              "choiceDescription": "Police and Sheriff’s Patrol Officers",
              "choiceId": 2305316257,
              "choiceName": "33-3051"
            },
            {
              "choiceDescription": "First-Line Supervisors of Food Preparation and Serving Workers",
              "choiceId": 2305316259,
              "choiceName": "35-1012"
            },
            {
              "choiceDescription": "Waiters and Waitresses",
              "choiceId": 2305316261,
              "choiceName": "35-3031"
            },
            {
              "choiceDescription": "Entertainment Attendants and Related Workers, All Other",
              "choiceId": 2305316263,
              "choiceName": "39-3099"
            },
            {
              "choiceDescription": "Funeral Attendants",
              "choiceId": 2305316265,
              "choiceName": "39-4021"
            },
            {
              "choiceDescription": "Morticians, Undertakers, and Funeral Directors",
              "choiceId": 2305316267,
              "choiceName": "39-4031"
            },
            {
              "choiceDescription": "Fitness Trainers and Aerobics Instructors",
              "choiceId": 2305316269,
              "choiceName": "39-9031"
            },
            {
              "choiceDescription": "Retail Salespersons",
              "choiceId": 2305316271,
              "choiceName": "41-2031"
            },
            {
              "choiceDescription": "Advertising Sales Agents",
              "choiceId": 2305316273,
              "choiceName": "41-3011"
            },
            {
              "choiceDescription": "Insurance Sales Agents",
              "choiceId": 2305316275,
              "choiceName": "41-3021"
            },
            {
              "choiceDescription": "Securities, Commodities, and Financial Services Sales Agents",
              "choiceId": 2305316277,
              "choiceName": "41-3031"
            },
            {
              "choiceDescription": "Real Estate Brokers",
              "choiceId": 2305316279,
              "choiceName": "41-9021"
            },
            {
              "choiceDescription": "Real Estate Sales Agents",
              "choiceId": 2305316281,
              "choiceName": "41-9022"
            },
            {
              "choiceDescription": "Sales and Related Workers, All Other",
              "choiceId": 2305316283,
              "choiceName": "41-9099"
            },
            {
              "choiceDescription": "Hotel, Motel, and Resort Desk Clerks",
              "choiceId": 2305316285,
              "choiceName": "43-4081"
            },
            {
              "choiceDescription": "Production, Planning, and Expediting Clerks",
              "choiceId": 2305316287,
              "choiceName": "43-5061"
            },
            {
              "choiceDescription": "Executive Secretaries and Executive Administrative Assistants",
              "choiceId": 2305316289,
              "choiceName": "43-6011"
            },
            {
              "choiceDescription": "Secretaries and Administrative Assistants, Except Legal, Medical, and Executive",
              "choiceId": 2305316291,
              "choiceName": "43-6014"
            },
            {
              "choiceDescription": "Insurance Claims and Policy Processing Clerks",
              "choiceId": 2305316293,
              "choiceName": "43-9041"
            },
            {
              "choiceDescription": "Office and Administrative Support Workers, All Other",
              "choiceId": 2305316295,
              "choiceName": "43-9199"
            },
            {
              "choiceDescription": "Other Construction and Related Workers",
              "choiceId": 2305316297,
              "choiceName": "47-4000"
            },
            {
              "choiceDescription": "Maintenance and Repair Workers, General",
              "choiceId": 2305316299,
              "choiceName": "49-9071"
            },
            {
              "choiceDescription": "Production Workers, All Other",
              "choiceId": 2305316301,
              "choiceName": "51-9199"
            },
            {
              "choiceDescription": "Transportation Workers, All Other",
              "choiceId": 2305316303,
              "choiceName": "53-6099"
            },
            {
              "choiceDescription": "Military Enlisted Tactical Operations and Air/Weapons Specialists and Crew Members, All Other",
              "choiceId": 2305316305,
              "choiceName": "55-3019"
            }
          ],
          "questionDescription": "What is your occupation?",
          "questionId": 2305316137,
          "questionName": "SOC Code",
          "questionTypeId": 1
        },
        {
          "answerType": "Single-Select",
          "choices": [
            {
              "choiceDescription": "$0 - $1,000",
              "choiceId": 3008068081,
              "choiceName": "$0 - $1,000"
            },
            {
              "choiceDescription": "$1,000 - $3,000",
              "choiceId": 3008068083,
              "choiceName": "$1,000 - $3,000"
            },
            {
              "choiceDescription": "$3,000 - $5,000",
              "choiceId": 3008068085,
              "choiceName": "$3,000 - $5,000"
            },
            {
              "choiceDescription": "$5,000 - $10,000",
              "choiceId": 3008068087,
              "choiceName": "$5,000 - $10,000"
            },
            {
              "choiceDescription": "$10,000 - $20,000",
              "choiceId": 3008068089,
              "choiceName": "$10,000 - $20,000"
            },
            {
              "choiceDescription": "$20,000 - $50,000",
              "choiceId": 3008068091,
              "choiceName": "$20,000 - $50,000"
            },
            {
              "choiceDescription": "$50,000 - $100,000",
              "choiceId": 3008068093,
              "choiceName": "$50,000 - $100,000"
            },
            {
              "choiceDescription": "$100,000 - $200,000",
              "choiceId": 3008068095,
              "choiceName": "$100,000 - $200,000"
            },
            {
              "choiceDescription": "$200,000 - $500,000",
              "choiceId": 3008068097,
              "choiceName": "$200,000 - $500,000"
            },
            {
              "choiceDescription": "$500,000 - $1,000,000",
              "choiceId": 3008068099,
              "choiceName": "$500,000 - $1,000,000"
            },
            {
              "choiceDescription": "$1,000,000+",
              "choiceId": 3008068101,
              "choiceName": "$1,000,000+"
            }
          ],
          "questionDescription": "What is the expected monthly total of electronic transactions that you expect to send?",
          "questionId": 2305316139,
          "questionName": "Declared Send Receive ACH Send Monthly Total",
          "questionTypeId": 1
        },
        {
          "answerType": "Single-Select",
          "choices": [
            {
              "choiceDescription": "$0 - $1,000",
              "choiceId": 3008068103,
              "choiceName": "$0 - $1,000"
            },
            {
              "choiceDescription": "$1,000 - $3,000",
              "choiceId": 3008068105,
              "choiceName": "$1,000 - $3,000"
            },
            {
              "choiceDescription": "$3,000 - $5,000",
              "choiceId": 3008068107,
              "choiceName": "$3,000 - $5,000"
            },
            {
              "choiceDescription": "$5,000 - $10,000",
              "choiceId": 3008068109,
              "choiceName": "$5,000 - $10,000"
            },
            {
              "choiceDescription": "$10,000 - $20,000",
              "choiceId": 3008068111,
              "choiceName": "$10,000 - $20,000"
            },
            {
              "choiceDescription": "$20,000 - $50,000",
              "choiceId": 3008068113,
              "choiceName": "$20,000 - $50,000"
            },
            {
              "choiceDescription": "$50,000 - $100,000",
              "choiceId": 3008068115,
              "choiceName": "$50,000 - $100,000"
            },
            {
              "choiceDescription": "$100,000 - $200,000",
              "choiceId": 3008068117,
              "choiceName": "$100,000 - $200,000"
            },
            {
              "choiceDescription": "$200,000 - $500,000",
              "choiceId": 3008068119,
              "choiceName": "$200,000 - $500,000"
            },
            {
              "choiceDescription": "$500,000 - $1,000,000",
              "choiceId": 3008068121,
              "choiceName": "$500,000 - $1,000,000"
            },
            {
              "choiceDescription": "$1,000,000+",
              "choiceId": 3008068123,
              "choiceName": "$1,000,000+"
            }
          ],
          "questionDescription": "What is the expected monthly total of electronic transactions that you expect to receive?",
          "questionId": 2305316141,
          "questionName": "Declared Send Receive ACH Receive Monthly Total",
          "questionTypeId": 1
        },
        {
          "answerType": "Single-Select",
          "choices": [
            {
              "choiceDescription": "yes",
              "choiceId": 2997847776,
              "choiceName": "TRUE"
            },
            {
              "choiceDescription": "no",
              "choiceId": 2997847778,
              "choiceName": "FALSE"
            }
          ],
          "questionDescription": "Do you have a US Individual Taxpayer Identification Number (ITIN)?",
          "questionId": 2997847743,
          "questionName": "ITIN Issued",
          "questionTypeId": 1
        }
      ]
    }
  ],
  "errors": [],
  "requestId": "d04314f1-8ab9-4873-a210-c8623f2b9b56",
  "status": 200
}

5(b). Pass the customer's due diligence answers to helix

Click to expand
  • Endpoint: /customer/answerPost
  • Description: After displaying the due diligence questions to the customer and collecting their answers for each, pass the answers to helix
curl --request POST \
     --url https://sandbox-api.helix.q2.com/customer/answerPost \
     --header 'accept: application/json' \
     --header 'authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE=' \
     --header 'content-type: application/json' \
     --data '
{
  "customerId": 19872058,
  "answers": [
    {
      "questionId": 2305316133,
      "selectedChoices": [
        {
          "choiceName": "Employed"
        }
      ]
    },
    {
      "questionId": 2305316135,
      "selectedChoices": [
        {
          "choiceName": "Employment income"
        }
      ]
    },
    {
      "questionId": 2305316137,
      "selectedChoices": [
        {
          "choiceName": "41-9099"
        }
      ]
    },
    {
      "questionId": 2305316139,
      "selectedChoices": [
        {
          "choiceName": "$1,000 - $3,000"
        }
      ]
    },
    {
      "questionId": 2305316141,
      "selectedChoices": [
        {
          "choiceName": "$1,000 - $3,000"
        }
      ]
    },
    {
      "questionId": 2997847743,
      "selectedChoices": [
        {
          "choiceName": "TRUE"
        }
      ]
    }
  ]
}
'

A successful call to the /customer/answerPost endpoint returns a 200 status with no additional data.

{
  "errors": [],
  "requestId": "1249a3bf-aca1-40dd-9fba-2a3193550c39",
  "status": 200
}

6. Open a bank account for the customer

Click to expand
  • Endpoint: /account/create
  • Description: Using productId=19797713 from step 1 and the customerId returned from step 3 we can now create an account for the customer. All helix accounts are associated to a product object which holds various account settings.
curl --request POST \
     --url https://sandbox-api.helix.q2.com/account/create \
     --header 'Accept: application/json' \
     --header 'Authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE=' \
     --header 'Content-Type: application/json' \
     --data '
{
     "customerId": 19872058,
     "name": "Main Checking",
     "productId": 19797713
}
'

This endpoint returns the full account object. Note the accountId since we will use it later in this workflow.

{
  "data": {
    ...
    "accessTypeCode": "FULL",
    "accountBalance": 0.0,
    "accountId": 19872303,
    "accountNumber": "91299633",
    "accountNumberMasked": "*************9633",
    "availableBalance": 0.0,
    "balanceLastModifiedDate": "2021-07-26T13:13:35.745-05:00",
    "createdDate": "2021-07-26T13:13:35.485-05:00",
    "customerId": 19872058,
    "isCloseable": true,
    "isLocked": false,
    "isPrimary": true,
    "lastModifiedDate": "2021-07-26T13:13:35.670-05:00",
    "lockReasonTypeCode": "UNK",
    "lockTypeCode": "UNL",
    "name": "Main Checking",
    "pendingBalance": 0.0,
    "primaryCustomerId": 19872058,
    "productId": 19797713,
    "routingNumber": "073923033",
    "routingNumberMasked": "*****3033",
    "status": "Open",
    "tag": "",
    "type": "Checking"
    ...
  },
  "errors": [],
  "requestId": "4a665112-3e5b-493c-a3f0-f100f5cc0ae4",
  "status": 200
}

7. Link the customer's external account

Click to expand
  • Endpoint: /externalAccount/create
  • Description: Before we can initiate funds transfers to/from a customer's account we must verify customer ownership of an external account. Most of our clients use an IAV service such as Plaid to instantly verify external account ownership and this is the scenario we will imitate in this example workflow. Once an external account is verified via an IAV service simply pass the account number, routing number, and a few other pieces of information to the /externalAccount/create route.
curl --request POST \
     --url https://sandbox-api.helix.q2.com/externalAccount/create \
     --header 'Accept: application/json' \
     --header 'Authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE=' \
     --header 'Content-Type: application/json' \
     --data '
{
     "customerId": 19872058,
     "routingNumber": "123456789",
     "accountNumber": "1111444422222",
     "firstName": "Dwight",
     "lastName": "Schrute",
     "type": "Checking"
}
'

This endpoint returns a full external account object. Note the externalAccountId since we will use it later in this workflow.

{
  "data": {
    "accountNumberMasked": "*************2222",
    "customerId": 19872058,
    "customField1": "",
    "customField2": "",
    "customField3": "",
    "customField4": "",
    "customField5": "",
    "externalAccountId": 19872933,
    "firstName": "Dwight",
    "isActive": true,
    "isLocked": false,
    "lastModifiedDate": "2021-07-26T13:27:57.973-05:00",
    "lastName": "Schrute",
    "lockedReason": "",
    "name": "COREPRO SANDBOX BANK",
    "nickName": "COREPRO SANDBOX BANK",
    "nocCode": "",
    "routingNumberMasked": "*****6789",
    "status": "Verified",
    "statusDate": "2021-07-26T13:27:57.973-05:00",
    "tag": "",
    "type": "Checking"
  },
  "errors": [],
  "requestId": "b3377ef7-aafa-4700-aa5a-ec9f12f79029",
  "status": 200
}

Helix also natively supports micro deposit verification. Please see Verifying External Accounts for more details.


8. Fund the customer's helix account

Click to expand
  • Endpoint: /transfer/create
  • Description: Once you have created an account and verified an external account, you can initiate ACH transfers via helix. For this example workflow, use the externalAccountId from step 6 as the fromId and the accountId from step 5 as the toId. You can choose any amount you like as no actual money movement occurs in sandbox.
curl --request POST \
     --url https://sandbox-api.helix.q2.com/transfer/create \
     --header 'Accept: application/json' \
     --header 'Authorization: Basic ZXhhbXBsZTE6ZXhhbXBsZTE=' \
     --header 'Content-Type: application/json' \
     --data '
{
     "amount": 350,
     "customerId": 19872058,
     "fromId": 19872933,
     "toId": 19872303
}
'

This endpoint returns a transfer response object containing the transactionId of the corresponding transaction. Please see Transfer Timeline for details on how and when transfers will settle.

{
  "data": [
    {
      "customerId": 19872058,
      "masterId": 2447985493,
      "tag": "",
      "transactionId": 2447985494
    }
  ],
  "errors": [],
  "requestId": "76f915b9-1753-495e-b334-8921ff9cefd9",
  "status": 200
}

Congratulations! You have successfully onboarded a customer, opened a new account and funded it!

Want to do more? Try some of these: