Skip to main content

Present onboarding questions to your client

Due diligence questions are an essential part of onboarding your client to J.P. Morgan services. Questions must be asked in the exact wording provided, and answers returned in the required format.

The format of answers can be:

  • Boolean: true or false
  • String: description or drop down selection
  • Integer (numeric value)
  • Date

To complete due diligence questions for a client, follow these steps:

  1. Obtain the questionIds from the outstanding object in a successful response to one of the following:
    • GET request to /onboarding/v1/clients/{id}
    • POST request to /onboarding/v1/clients
    • PATCH request to /onboarding/v1/clients/{id}
  2. Get the questions to display to your client using a GET request to /onboarding/v1/questions, including a comma-separated list of question IDs in the questionIds parameter. These can include follow-up questions in subQuestions.
  3. Send the answers, in the format provided by each question, using a PATCH request to /onboarding/v1/clients/{id}. Include answers to follow-up questions.

Get the questions to ask your client

A successful 200 or 201 response to any of the /onboarding/v1/clients requests above includes an outstanding object. Within this object is a list of questionIds.

If this list is populated, you must retrieve each question using the ID and present the question to your client.

Sample response to /onboarding/v1/clients with questionIds 30005, 30026, 30027.

Json
{
  "attestations": [],
  "id": "1000010400",
  "parties": [],
  "partyId": "2000000111",
  "products": [
    "MERCHANT_SERVICES"
  ],
  "outstanding": {
    "attestationDocumentIds": [
      "c4e4739f-33ed-47f6-82fa-0b1c5c992d0b"
    ],
    "documentRequestIds": [],
    "partyIds": [],
    "partyRoles": [],
    "questionIds": [
      "30005",
      "30026",
      "30027"
    ]
  },
  "questionResponses": [],
  "status": "NEW"
}

Present the questions

Send a GET request to /onboarding/v1/questions with the questionIds in the request parameters.

Sample request:

Curl
curl --request GET \
   --url '/onboarding/v1/questions?questionIds=30001%2C30002%2C30003' \
   --header 'Accept: application/json' \
   --header 'token: '

Sample response:

Json
{
  "questions": [
    {
      "content": [
        {
          "description": "What is your Total Annual Revenue in local currency?",
          "label": "Total annual revenue/income:",
          "locale": "en-US"
        }
      ],
      "defaultLocale": "en-US",
      "description": "What is your Total Annual Revenue in local currency?",
      "id": "30005",
      "responseSchema": {
        "type": "array",
        "minItems": 1,
        "maxItems": 1,
        "items": {
          "type": "integer"
        }
      },
      "subQuestions": []
    },
    {
      "content": [
        {
          "description": "Do you have locations, sell goods, or services, or have vendors or suppliers in countries or regions subject to comprehensive sanctions programs (Iran, North Korea, Cuba, Syria and the Crimea, Donetsk, Luhansk Regions of Ukraine), or work with Sanctioned Parties in Russia or Venezuela?",
          "label": "Do you have locations, sell goods, or services, or have vendors or suppliers in countries or regions subject to comprehensive sanctions programs (Iran, North Korea, Cuba, Syria and the Crimea, Donetsk, Luhansk Regions of Ukraine), or work with Sanctioned Parties in Russia or Venezuela?",
          "locale": "en-US"
        }
      ],
      "defaultLocale": "en-US",
      "description": "Do you have locations, sell goods, or services, or have vendors or suppliers in countries or regions subject to comprehensive sanctions programs (Iran, North Korea, Cuba, Syria and the Crimea, Donetsk, Luhansk Regions of Ukraine), or work with Sanctioned Parties in Russia or Venezuela?",
      "id": "30026",
      "responseSchema": {
        "type": "array",
        "minItems": 1,
        "maxItems": 1,
        "items": {
          "type": "boolean"
        }
      },
      "subQuestions": [
        {
          "anyValuesMatch": "true",
          "questionIds": [
            "30027"
          ]
        }
      ]
    },
    {
      "content": [
        {
          "description": "If so, select which ones (multiple possible)",
          "label": "If so, select which ones (multiple possible)",
          "locale": "en-US"
        }
      ],
      "defaultLocale": "en-US",
      "description": "If so, select which ones (multiple possible)",
      "id": "30027",
      "parentQuestionId": "30026",
      "responseSchema": {
        "type": "array",
        "minItems": 1,
        "maxItems": 1,
        "items": {
          "type": "string"
        }
      },
      "subQuestions": []
    }
  ]
}

Capturing 'child' answers to follow-up questions

In some cases, you must send additional information or an answer to a further question.

These additional answers are only required if the answer to the parent question is positive (your user has answered "true" to the question).

In the example above, you can see that question ID 30026 requires a description if the user answers "true" to the question.

You must only show the child question ID 30027 if you are sending a "true" value in the response to 30026.

Send the question responses

In the response to a GET request to /onboarding/v1/questions request, each question has a responseSchema. This tells you how to present the question to your client, and how they can express their answer.

Once you have presented the questions and gathered the answers, send the question responses using a PATCH request to /onboarding/v1/clients/{id}.

Sample of answers in the questionResponses object:

Json
{
  "questionResponses": [
    {
      "questionId": "30026",
      "values": [
        false
      ]
    },
    {
      "questionId": "30005",
      "values": [
        "100000"
      ]
    }
  ]
}

Next steps

Present attestations to your client.