Submit one page of a Product Studio product from your own front end. It does what the applicant's Continue button does in the hosted application: it checks the page's values, saves them to the application, runs the page's providers and decision trees, and moves the application on.
Product Studio's Page APIs tab has a ready-made cURL command for each page, with the right product_referral, label and data keys.
Start or continue an application
- On the first page, send
sessionas the string"null". This creates a new application, and the response returns itssession. - On every later page, send that
session. - If no application has that
session, the response iscode-106. Asessionthat isn't a UUID returns 500.
Send every field on the page
Each submit is checked against the page with this label in the product's default version. Every input field on that page must be a key in data. This includes fields that are not marked Required in Product Studio: the check counts every field that has a Required setting, whether it is on or off.
- Hidden, conditional and inactive fields are not skipped.
- Values saved on earlier pages don't count. Only this request is checked.
- Controls (such as checkboxes and text blocks) and widgets are not part of this check.
If a key is missing, the call returns 400 and names the missing keys in page order, for example Missing required fields: annual_income, employment_status.
Only the key has to be present, but its value is still type-checked (see below). null fails for number, text, true/false and date variables, so send an empty string for a text field you have no value for.
Value types
Keys in data that match one of your variables are checked against the variable's type:
| Variable type | Send | Error when wrong |
|---|---|---|
| Number | A JSON number, such as 85000. A string such as "85000" fails. | Invalid type for annual_income. Expected numeric value. |
| Text | A string. | Invalid type for first_name. Expected string value. |
| True/false | true, false, "true" or "false" | Invalid type for has_cosigner. Expected boolean value. |
| Date | A string in MM/DD/YYYY format, such as "01/15/1990" | Invalid type for birth_date. Expected date in MM/DD/YYYY format. |
A date that isn't a string returns Error validating data type for birth_date. Send ssn as a string of at most 12 characters, such as "123-45-6789".
Read code, not only the HTTP status
Once the request passes the checks above, the result comes back as HTTP 200 with a code. Only 1 means the page was accepted. session, email and next_step_label are filled in only when code is 1.
A code of 1 doesn't mean the application was approved. The message is Success, success (when the page ran a decision tree) or Application declined (when a provider declined it). Use Get an application to read its status.
code | message | When |
|---|---|---|
| 1 | Success, success or Application declined | The page was accepted. |
| -1 | Product not published yet. | The product has no published version. |
| -2 | Invalid product. Please refresh the page and try again. | The product is inactive. |
| -6 | Email Restricted - Contact Support | The email is on your blocked list. |
| -9 | The email check's message | The email failed the email check. |
| -10, -107 | Email already in use - try another | The email is already used by another application. |
| -103 | No PO Box address allowed. | address contains a PO box. |
| -104 | Choose an alpha numeric password | password is shorter than 8 characters or lacks an uppercase letter, a lowercase letter, a number or a symbol. |
| -105 | Email already in use - try another | The email belongs to a user who is not an applicant. |
| -106 | Email already in use | No application has this session, or the email already has an application and your account doesn't allow more than one. |
| -108 | For example Maximum attempts exceeded for this email in the last 30 days | A velocity rule blocked the submit. |
| -110, -111 | The error's message | Setting up co-applicants failed. |
| -112 | Access Denied. | The page is limited to staff and the key belongs to a sub-tenant. |
A provider on the page can also return its own negative code and message.
Fields that must always be sent
Always send product_referral, label, session and data, even when data is an empty object. If one of them is missing, or data is not a JSON object, the call returns 500 with Error in Page Submission. instead of a 400.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Submit one page of a Product Studio product from your own front end. It does what the applicant's Continue button does in the hosted application: it checks the page's values, saves them to the application, runs the page's providers and decision trees, and moves the application on.
Product Studio's Page APIs tab has a ready-made cURL command for each page, with the right product_referral, label and data keys.
Start or continue an application
- On the first page, send
sessionas the string"null". This creates a new application, and the response returns itssession. - On every later page, send that
session. - If no application has that
session, the response iscode-106. Asessionthat isn't a UUID returns 500.
Send every field on the page
Each submit is checked against the page with this label in the product's default version. Every input field on that page must be a key in data. This includes fields that are not marked Required in Product Studio: the check counts every field that has a Required setting, whether it is on or off.
- Hidden, conditional and inactive fields are not skipped.
- Values saved on earlier pages don't count. Only this request is checked.
- Controls (such as checkboxes and text blocks) and widgets are not part of this check.
If a key is missing, the call returns 400 and names the missing keys in page order, for example Missing required fields: annual_income, employment_status.
Only the key has to be present, but its value is still type-checked (see below). null fails for number, text, true/false and date variables, so send an empty string for a text field you have no value for.
Value types
Keys in data that match one of your variables are checked against the variable's type:
| Variable type | Send | Error when wrong |
|---|---|---|
| Number | A JSON number, such as 85000. A string such as "85000" fails. | Invalid type for annual_income. Expected numeric value. |
| Text | A string. | Invalid type for first_name. Expected string value. |
| True/false | true, false, "true" or "false" | Invalid type for has_cosigner. Expected boolean value. |
| Date | A string in MM/DD/YYYY format, such as "01/15/1990" | Invalid type for birth_date. Expected date in MM/DD/YYYY format. |
A date that isn't a string returns Error validating data type for birth_date. Send ssn as a string of at most 12 characters, such as "123-45-6789".
Read code, not only the HTTP status
Once the request passes the checks above, the result comes back as HTTP 200 with a code. Only 1 means the page was accepted. session, email and next_step_label are filled in only when code is 1.
A code of 1 doesn't mean the application was approved. The message is Success, success (when the page ran a decision tree) or Application declined (when a provider declined it). Use Get an application to read its status.
code | message | When |
|---|---|---|
| 1 | Success, success or Application declined | The page was accepted. |
| -1 | Product not published yet. | The product has no published version. |
| -2 | Invalid product. Please refresh the page and try again. | The product is inactive. |
| -6 | Email Restricted - Contact Support | The email is on your blocked list. |
| -9 | The email check's message | The email failed the email check. |
| -10, -107 | Email already in use - try another | The email is already used by another application. |
| -103 | No PO Box address allowed. | address contains a PO box. |
| -104 | Choose an alpha numeric password | password is shorter than 8 characters or lacks an uppercase letter, a lowercase letter, a number or a symbol. |
| -105 | Email already in use - try another | The email belongs to a user who is not an applicant. |
| -106 | Email already in use | No application has this session, or the email already has an application and your account doesn't allow more than one. |
| -108 | For example Maximum attempts exceeded for this email in the last 30 days | A velocity rule blocked the submit. |
| -110, -111 | The error's message | Setting up co-applicants failed. |
| -112 | Access Denied. | The page is limited to staff and the key belongs to a sub-tenant. |
A provider on the page can also return its own negative code and message.
Fields that must always be sent
Always send product_referral, label, session and data, even when data is an empty object. If one of them is missing, or data is not a JSON object, the call returns 500 with Error in Page Submission. instead of a 400.

