Register application
Process Flow
Please reference the full sequence diagram.
Base URL
The table below shows the Base URL to be used with the endpoints mentioned in this guide.
Environment | Base URL |
---|---|
Staging: | https://api.staging.informediq-infra.com |
Production: | https://api.informediq.com |
Full Example Request
The first step in having stipulations verified is to register the application with Informed. The below code block shows a full example request payload for the initial call to register an application. The following sections provide details on the key nodes of the request payload.
Example Application
{
"application_reference_id": "your_unique_application_id",
"application_date": "2021-05-09T09:11:38",
"contract_date": "2021-05-09T09:11:38",
"application_type": "Application",
"application_status": "active",
"applicants": {
"applicant1": {
"first_name": "Jo",
"middle_name": null,
"last_name": "Boren",
"suffix": null,
"email": "jo.boren@gmail.com",
"phone": "9196201234",
"ssn": "681129638",
"date_of_birth": "1965-12-10",
"address_info": [
{
"address": {
"street_address": "8717 S 4th Ave",
"city": "Inglewood",
"state": "CA",
"zip": "90305"
},
"is_current": true,
"start_date": "2020-10-01",
"end_date": null,
"residence_type": "Rent",
"monthly_housing_cost": 1000
}
],
"employment_info": [
{
"employment_type": "Employed",
"employer_name": "Envoy Air, Inc.",
"is_current": true,
"occupation": "Crew Member",
"income": {
"period": "Yearly",
"amount": 74500
},
"start_date": "2018-11-01",
"end_date": null,
"business_phone": "9196571475"
}
],
"additional_incomes": [
{
"source": "ChildSupport",
"income": {
"period": "Yearly",
"amount": 10000
}
}
]
},
"applicant2": {
"first_name": "Lucinda",
"last_name": "Bonadio",
"email": "lucinda.bonadio@gmail.com",
"phone": "9196202345",
"ssn": "681129443",
"date_of_birth": "1965-12-10",
"address_info": [
{
"address": {
"street_address": "8717 S 4th Ave",
"city": "Inglewood",
"state": "CA",
"zip": "90305"
},
"is_current": true,
"start_date": "2020-10-01",
"end_date": null,
"residence_type": "Rent",
"monthly_housing_cost": 1000
}
],
"employment_info": [
{
"employment_type": "Employed",
"employer_name": "Informed Inc.",
"is_current": true,
"occupation": "Crew Member",
"income": {
"period": "Yearly",
"amount": 60000
},
"start_date": "2018-11-01",
"end_date": null,
"business_phone": "9196571425"
}
]
}
},
"verifications": {
"income": [
{
"belongs_to": "applicant1"
},
{
"belongs_to": "applicant2"
}
],
"residence": [
{
"belongs_to": "applicant1"
}
],
"insurance": [
{
"belongs_to": "applicant1"
}
],
"identity": [
{
"belongs_to": "applicant1"
},
{
"belongs_to": "applicant2"
}
]
},
"loan_info": {
"amount_financed": 21345.23,
"apr": 7.25,
"dti": 33,
"ltv": 89,
"monthly_payment": 513.62,
"total_down_payment": 2000.00,
"sales_price": 23345.23,
"pti": 10,
"term": 48,
"credit_score": {
"applicant1": 695,
"applicant2": 680
}
},
"lender_info": {
"lender_name": "Acme Lending LLC",
"lender_id": "abc123"
},
"services": [
"extract",
"verify"
],
"webhook": "https://your.callback.com/here"
}
Request Components
Endpoint
You will append the following endpoint to the base URL to register the initial application:
/v1/consumer/applications
So to put it all together, you will make a POST
call to the following URL with a request payload similar to the one shown above:
https://api.staging.informediq-infra.com/v1/consumer/applications
Application Level Info
This is the application level information included in the payload, where your unique Application Reference ID is defined along with the application dates, status, contract type and customer language.
Application Level Info
{
"application_reference_id": "your_unique_application_id",
"application_date": "2021-05-09T09:11:38",
"contract_date": "2021-05-09T09:11:38",
"application_type": "Application",
"application_status": "active",
...
}
Element | Value | Description |
---|---|---|
application_reference_id | string | Required Your unique identifier for the loan application |
application_date | string | Required The date when the application was decisioned. Use either YYYY-MM-DDThh:mm:ss or YYYY-MM-DD format.Examples: 1981-12-30T12:25:00 or 1981-12-30 |
contract_date | string | Optional Typically is the same date as the application date, but can be different. If you explicitly know the contract date, it is recommended to provide it, especially if it is different than the application date. Use either YYYY-MM-DDThh:mm:ss or YYYY-MM-DD format.Examples: 1981-12-30T12:25:00 or 1981-12-30 |
application_type | string | Optional Values can either be Lead or Application .If the element is not present, or empty, it defaults to the value of Application , which is the standard workflow. Lead is for very specific use cases. Please contact your Account Manager if you have questions about the Lead workflow. |
application_status | string | Required Set value to active |
Applicant Personal Info
This section of the JSON payload is where all of the applicant's personal information is defined. This information will be used for verifications and comparisons against the documents that are provided for a given application.
At the current time, the number of applicant blocks that can be provided under the applicants
section is limited to applicant1
and applicant2
.
There needs to be an applicant1
in the payload. If you do not have a second applicant for an application, the preferred approach then is to just leave the applicant2
property out of the payload completely. Please do not set applicant2
to null
.
Applicant Personal Info
{
...
"applicants":
{
"applicant1":
{
"first_name": "Jo",
"middle_name": null,
"last_name": "Boren",
"suffix": null,
"email": "jo.boren@gmail.com",
"phone": "9196201234",
"ssn": "681129638",
"date_of_birth": "1965-12-10",
"address_info": [
{...}
],
"employment_info": [
{...}
],
"additional_incomes": [
{...}
]
},
...
}
...
}
Element | Value | Description |
---|---|---|
first_name | string | Required Example: John |
middle_name | string | Optional Middle name or middle initial Example: Edgar or E |
last_name | string | Required Example: Doe |
suffix | string | Optional Valid values are: I , II , III , IV , JR , SR |
business_name | string | Conditional If you are registering a business retail loan, the first applicant will be the business, and it will use the business_name property as opposed to the different name properties.Example: Best Business Company, Inc. Note: If you use the business_name property for the business in applicant1 , then you will submit a null value for the first_name and last_name properties. |
string | Optional Should be a valid email address. Example: john.doe@gmail.com | |
phone | string | Optional Only required if part of a CollectIQ request. Only US mobile phone numbers that are textable will be supported. Example: 6508675329 or 650-867-5329 Note: For partners integrating after January 2024, phone will be a required field. It is also a required field if you are registering a Lead . |
ssn | string | Conditional Currently, you will not receive a 400 response if you leave this property out of your request, but if you are verifying ssn , then you definitely should be providing the ssn property with a value. If you don't know the applicant's SSN, then you can submit a null value, but please note that this may change in the future to require a non-null value.Example: 666111234 . Could also be an ITIN.Can also be last 4 digits of the SSN. Example: 1234 Note: For partners integrating after January 2024, ssn will be a required field. |
tax_id | string | Conditional If you are registering a business retail loan, the first applicant will be the business, and it will use the tax_id property as opposed to the ssn property.Example: 666111234 Note: If you use the tax_id property for the business in applicant1 , then you will submit a null value for the ssn property. |
date_of_birth | string | Required Currently, it is required to submit the date_of_birth property in every request, but if you do not know the applicant's date of birth, then you can submit a null value (also it would be null if the applicant is a business).Please note that in the future it may be required to include a non-null value for date_of_birth if you are verifying credit_application , identity , or ssn .Date of birth value should be in YYYY-MM-DD format.Example: 1981-12-30 |
Applicant Address Info
This section of the JSON payload is where the applicant's address information is specified. It is important that if there are multiple addresses being sent for an applicant, that only the current residence has is_current
set to true.
Applicant Address Info
{
...
"applicants":
{
"applicant1":
{
...
"address_info": [
{
"address":
{
"street_address": "8717 S 4th Ave",
"street_2": "Apt 120C",
"city": "Inglewood",
"state": "CA",
"zip": "90305"
},
"is_current": true,
"start_date": "2020-10-01",
"end_date": null,
"residence_type": "Rent",
"monthly_housing_cost": 1000
}
],
"employment_info": [
{...}
],
"additional_incomes": [
{...}
]
},
...
}
...
}
Element | Value | Description |
---|---|---|
street_address | string | Required Example: 1 Example St |
street_2 | string | Optional Example: Apt 120C |
city | string | Required Example: San Francisco |
state | string | Required Standard two-letter abbreviation. Example: CA |
zip | string | Required Zip codes are formatted as strings due to the fact that some zip codes start with a zero. Example: 94105 |
is_current | boolean | Required If set to true this designates that the address is the current residence for the applicant. If the address is a previous residence, the value should be set to false . One of the associated address objects must have is_current set to true . |
start_date | string | Optional Date when the applicant began living at the specified address. Use YYYY-MM-DD format: 2020-10-01 |
end_date | string | Optional If not the current residence, this is date when the applicant stopped living at that address. Use YYYY-MM-DD format: 2022-10-01 |
residence_type | string | Optional Valid values are: Rent , Own , Family , Mortgage |
monthly_housing_cost | numeric | Optional Example: 1000.01 (in USD) |
Applicant Employment Info
This section of the JSON payload is where the applicant's employment information is specified. Only one block of employment information with is_current
set to true should be added to the employment_info
section.
If the applicant has more than one current employer, the additional employment income should be included in the additional_incomes
section described below.
If the applicant is a business, then the employment_info
key-value pair is not expected.
Applicant Employment Info
{
...
"applicants":
{
"applicant1":
{
...
"address_info": [
{...}
],
"employment_info": [
{
"employment_type": "Employed",
"employer_name": "Envoy Air, Inc.",
"is_current": true,
"occupation": "Crew Member",
"income":
{
"period": "Yearly",
"amount": 74500
},
"start_date": "2018-11-01",
"end_date": null,
"business_phone": "9196571475"
}
],
"additional_incomes": [
{...}
]
},
...
}
...
}
Element | Value | Description |
---|---|---|
employment_type | string | Required Valid values: Employed , Unemployed , Retired , SelfEmployed , Other |
employer_name | string | Conditional Required if employment_type is Employed .Example: Informed, Inc. If you do not know the employer name, you can put unknown for the value of this element, but note that the subsequent mismatch of expected employer name to actual employer name found on the supporting documentation will trigger the need for manual intervention. |
is_current | boolean | Required If true this designates the applicant's current employment. Set to false if providing previous empoloyment information. One of the associated employment objects must have is_current set to true . |
occupation | string | Optional But highly recommended to include it if you have it. Example: "Software engineer" |
period | string | Required Valid values: Weekly , BiWeekly , Semimonthly , Monthly , Quarterly , Yearly , Annually |
amount | numeric | Required Income amount earned in the specified period (in USD). Example: 3126.00 |
start_date | string | Conditional Required if employment_type is Employed .Date when the applicant began working at the place of employment. Use YYYY-MM-DD format: 2018-11-01 |
end_date | string | Optional Date when the applicant stopped working at the place of employment (only applies if this is not their current employment). Use YYYY-MM-DD format: 2020-11-01 |
business_phone | string | Optional Only US phone numbers will be supported. Example: 6508675309 or 650-867-5309 . |
Applicant Additional Income Info
This section of the JSON payload is where any additional sources of income can be specified for an applicant. This section should only be included if there are additional incomes that need to be accounted for.
Applicant Additional Income Info
{
...
"applicants":
{
"applicant1":
{
...
"address_info": [
{...}
],
"employment_info": [
{...}
],
"additional_incomes": [
{
"source": "ChildSupport",
"income":
{
"period": "Yearly",
"amount": 10000
}
}
]
},
...
}
...
}
Elements | Values | Description |
---|---|---|
source | string | Required Valid values are: Alimony , Annuity , ChildSupport , DisabilityInsurance , PassiveIncome , RideShare , SSI , Trust , Other . Second jobs are typically classified as Other . |
period | string | Required Valid values: Weekly , BiWeekly , SemiMonthly , Monthly , Quarterly , Yearly , Annually |
amount | numeric | Required Income amount earned in the specified period (in USD). Example: 3126.00 |
Verifications
The verifications are the stipulations for which an applicant will be analyzed. Both applicants do not need to have the same stipulations. This is defined by the belongs_to
property for either or both applicants or the application on each individual verification.
Verifications
{
...
"verifications": {
"income": [
{
"belongs_to": "applicant1"
},
{
"belongs_to": "applicant2"
}
],
"residence": [
{
"belongs_to": "applicant1"
}
],
...
}
...
}
Element | Value | Description |
---|---|---|
verifications | string | Required Valid values for consumer stipulations belonging to applicants: identity , income , residence , insurance , ssn |
belongs_to | string | Required Associates the given verification with a particular applicant. Values would be applicant1 , applicant2 as appropriate. |
Loan Info
The loan_info
section contains relevant information about the loan in question. It is currently an optional section.
Loan Info
{
...
"loan_info": {
"amount_financed": 21345.23,
"apr": 7.25,
"dti": 33,
"ltv": 89,
"monthly_payment": 513.62,
"total_down_payment": 2000.00,
"sales_price": 23345.23,
"pti": 10,
"term": 48,
"credit_score": {
"applicant1": 695,
"applicant2": 680
}
},
...
}
Element | Value | Description |
---|---|---|
amount_financed | numeric | Optional Integer or decimal value representing the dollar amount financed. Example: 21345.23 |
apr | numeric | Optional Decimal value representing the APR (percentage) of the loan. Example: 7.25 |
dti | numeric | Optional Integer value representing percentage of debt-to-income ratio. Example: 33 |
ltv | numeric | Optional Integer value representing percentage of loan-to-value ratio. Example: 89 |
monthly_payment | numeric | Optional Integer or decimal value representing dollar amount of monthly payment. Example: 513.62 |
total_down_payment | numeric | Optional Integer or decimal value representing dollar amount of total down payment. Example: 2000.00 |
sales_price | numeric | Optional Integer or decimal value representing dollar amount of sales price. Example: 23345.23 |
pti | numeric | Optional Integer value representing percentage of payment-to-income ratio. Example: 10 |
term | numeric | Optional Integer value representing the number of months of the loan term. Example: 48 |
credit_score | object | Optional Object holding the integer value representing each registered applicant's credit score. If there is only one applicant, then you just need to include applicant1 . Example: "credit_score": { "applicant1": 695, "applicant2": 680 } |
Lender Info
The lender_info
section contains relevant information about the lender. It is currently an optional section.
Lender Info
{
...
"lender_info": {
"lender_name": "Acme Lending LLC",
"lender_id": "abc123"
}
...
}
Element | Value | Description |
---|---|---|
lender_name | string | Optional The name of the lender associated with this application. For most lenders, this will not change, but for some integrations, having the option to specify a lender per application will allow for additional metrics tracking or billing differentiation. Example: Acme Lending LLC |
lender_id | string | Optional A unique identifier for the lender named in lender_name Example: abc123 |
Services
These are the services that the Informed API will be able to perform for the registered application if specified in the request:
- The extract service will return both the classification of the documents and the relevant data extracted from the documents that were provided.
- The verify service will perform analysis of all of the requested verifications for a given applicant based on the provided documents.
For most of your calls, you will want to include the extract and verify options, since you will receive the classification results in the extraction response.
{
...
"services": [
"extract",
"verify"
],
...
}
Callback Url
A webhook must be provided to receive asynchronous responses containing classified documents with extracted data and analysis. Basic auth credentials will need to be shared with Informed to ensure secure transmission at time of setup. To further safeguard data, Informed will only POST back to your webhook using the HTTPS protocol to ensure encryption in transit. More technical details about your callback endpoint can be found at the link in this paragraph above.
Please note that you are not forced to provide a webhook URL, but you will not receive any asynchronous, programmatic callbacks with data.
{
...
"webhook": "https://your.callback.com/here"
}
Synchronous Response
- 2xx response
- Non-2xx responses
A successful API request resulting in an application registration will return the following synchronous response to indicate that the application was submitted to Informed. Make sure that you record the application_id
value, as you will need that in subsequent steps, such as associating documents with the application or updating the applicant info.
{
"application_id": "unique-Informed-app-id",
"status": "Ready"
}
If there was an error registering the application, you will receive a non-2xx response status and an error message. For example, if you try to register an application using an application_reference_id
that you used previously, you would see a response with an error message like the one shown below.
Status | Error Message |
---|---|
400 | Invalid services requested, please contact support for more information. Your account will be explicitly configured for the services that you are allowed to specify in your request. |
400 | Application already exists This would occur if the application_reference_id used in the POST call URL already existed in the system. |
500 | Something went wrong :( Indicates some other internal failure occurred. You should contact your support representative. |
Updating Application Info
The application update payload will look the same as the initial application registration request payload, but with the modified values/additions. And, you will need to send this as a PUT
call to a slightly different endpoint because the application already exists.
Note that this is a PUT
and not a PATCH
call, which means that you must resend the entire original payload but with any applicable modifications. For example, if you start with two applicants and only send one applicant in the update payload, the second applicant will be removed from the application.
The one thing you cannot update with this PUT
call for an existing application is the application_reference_id
(reference). That value must stay the same for the life of the application.
Endpoint
You will append the following endpoint to the base URL to update the application:
/v1/consumer/applications/<unique-Informed-app-id>
So to put it all together, you will make a PUT
call to the following URL with your request payload:
https://api.staging.informediq-infra.com/v1/consumer/applications/<unique-Informed-app-id>
Tracking update requests
Informed now offers the ability to more definitively correlate specific application PUT
updates with the resulting verifications response. To accomplish this, you will need to include the new application_update_reference_id
property in your application update PUT
request as shown below.
{
"application_reference_id": "your_unique_application_id",
"application_update_reference_id": "your_unique_update_identifier",
"application_date": "2021-05-09T09:11:38",
"application_type": "Application",
...
}
The same application_update_reference_id
key and value will be returned in the corresponding verifications response, and all subsequent verifications responses until you send a new PUT
update to the application registration with a new application_update_reference_id
. You should be putting a unique value for the application_update_reference_id
in each PUT
request if you are using this functionality (e.g., a UUID/GUID or hash).
Responses
Synchronous response
The synchronous response will contain the same unique-Informed-app-id
that you received in the synchronous response to the original application registration.
- 2xx response
- Non-2xx responses
{
"application_id": "unique-Informed-app-id",
"status": "Ready"
}
Status | Error Message |
---|---|
400 | Invalid services requested, please contact support for more information. Your account will be explicitly configured for the services that you are allowed to specify in your request. |
400 | Application does not exist This would occur if the application_id used in the PUT call URL did not exist in the system. |
400 | ApplicationId does not match application_reference_id You cannot change the application_reference_id once it has been associated with the Informed-supplied application_id . |
500 | Something went wrong :( Indicates some other internal failure occurred. You should contact your support representative. |
Asynchronous response
An application update using the PUT
method will always result in an asynchronous verifications response to your callback URL.