API Specifications

This section explains how user information is transmitted to Engine by MoneyLion's API via HTTP requests.

There are two steps involved for getting offers from Engine's 2nd Look Marketplace

Step 1: Submit Lead

As the first step, partners should post to the Submit Lead endpoint with the user's information:

POST to https://api.engine.tech/leads/rateTables

Request Format

The required format of the request body (in JSON) is shown below:

{
  "productTypes": ["other"], // Note that productTypes should only contain ["other"] if you want to submit straight to 2nd Look Marketplace.
  "personalInformation": {
    "firstName": "John",
    "lastName": "Doe",
    "email": "[email protected]",
    "city": "New York",
    "state": "NY",
    "primaryPhone": "2125556789",
    "address1": "175 5th Ave",
    "address2": "Apartment 5",
    "zipcode": "10010",
    "dateOfBirth": "1993-10-09",
    "ssn": "111-22-3333" 
  },
  "loanInformation": {
    "purpose": "debt_consolidation",
    "loanAmount": 10000
  },
  "mortgageInformation": {
    "propertyStatus": "own_with_mortgage"
  },
  "creditInformation": {
    "providedCreditRating": "good"
  },
  "financialInformation": {
    "employmentStatus": "employed",
    "employmentPayFrequency": "biweekly",
    "annualIncome": 80000
  },
  "legalInformation": {
    "consentsToFcra": true,
    "consentsToTcpa": true,
    "fcraLanguage": "By checking this box/clicking 'agree' I hereby consent to the 'E-Sign Agreement', the 'Credit Authorization Agreement', the Terms of Service and Privacy Policy, and I am providing written consent under the Fair Credit Reporting Act (FCRA) for [Engine by MoneyLion and/or Insert Company Name], its partners and financial institutions to obtain consumer report information from my credit profile. I request that my information be provided to their partners, lenders, and financial services partners to provide me with financial recommendations, which may also include debt relief, credit repair, credit monitoring or other related services",
    "tcpaLanguage": "I agree to be contacted by [Engine by MoneyLion and/or Insert Company Name] its partners and their affiliated companies and financial institutions via email, postal mail service and/or at the telephone number(s) I have provided above to explore various financial products and services I inquired about, including contact through automatic dialing systems, artificial or pre-recorded voice messaging, or text message. Consent is not required as a condition to utilize the service, and you may choose to be contacted by an individual customer care representative(s) by calling XXXXX or emailing XXXX"
  },
  "sessionInformation": {
    "ipAddress": "x.x.x.x"
    "userAgent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36"
  }
}

Regex Validations

The following fields have the regex checks and will return errors if your lead submission does not adhere to this logic:

personalInformation.primaryPhone

The primary must be a string of 10 digits, with or without a leading 1, and with or without special characters e.g. ()-.

The area code cannot be the same 3 digits repeated, e.g. 222or 333.

personalInformation.zipcode

The zipcode must be a string of either:

  1. 5 digits

  2. 5 digits, a hyphen -, and 4 more digits

personalInformation.ssn

  1. The SSN cannot have all digits in each group be identical (e.g., 111-11-1111 or 222-22-2222).

  2. The following specific SSNs are not allowed because they are commonly used in examples or considered invalid:

  • 123-45-6789

  • 219-09-9999

  • 078-05-1120

  1. The first group of three digits cannot be:

  • 666

  • 000

  • Any number starting with 9 (e.g., 900999).

  1. The middle group of two digits cannot be:

  • 00

  1. The last group of four digits cannot be:

  • 0000

Response from the Submit Lead Endpoint

After posting to the Submit Lead endpoint, partners will receive a response almost instantaneously. Below is a sample response:

{
  "uuid": "b9b212a8-b284-5986-813e-a8d8e87c1863",
  "leadUuid": "144bd0ea-b9c6-52d5-a7ef-dccb223d060d",
  "loanAmount": 1000,
  "loanOffers": [],
  "mortgageOffers": [],
  "savingsOffers": [],
  "specialOffers": [{...one or more 2nd Look offers, if those resolve immediately}],
  "creditCardOffers": [],
  "pendingResponses": [
    {
      "partner": {
        "uuid": "91d08be0-2a8c-4d28-b399-7e1b38e2522e",
        "name": "Beta Inc.",
        "description": "Voluptas quas aspernatur aut nihil rerum. Voluptatibus laboriosam amet porro veniam ut.",
        "disclaimer": "Est delectus et rem consequatur magni. Molestiae asperiores sit debitis et id corporis.",
        "imageUrl": "https://aff-tag.evenfinancial.com/images/beta/Beta_120x80.png"
      },
      "productTypes": [
        "other"
      ]
    }
  ],
  "pendingOriginators": []
}

Note that the initial response does not include complete offer information. The pendingResponses field lists the Financial Services partners from whom Engine is still awaiting a response. If this field is not empty, it means some partner responses are still pending.

You’ll need to capture two key fields to retrieve the full offer information:

  • uuid: Engine’s Rate Table UUID, used to retrieve offer data

  • leadUuid: Engine’s Lead UUID, which partners should retain for internal records

leadUuid is not needed to make the second call to retrieve offers, but you should record it in case you need to reach out to your Partner Manager regarding any questions or issues regarding that lead.

Partners must make a secondary request to Engine’s API to retrieve the full offer information if there are any pendingResponses.

Step 2: Poll the GET /rateTables endpoint for a Specific rate table uuid until pendingResponses is empty

Below are the instructions for the secondary request that channel partners need to follow, in order to retrieve the complete offers for a specific user from Step 1:

  • Capture the “uuid” returned in the initial API response in step 1

  • Execute a GET request to the following Get Rate Table endpoint using the uuid from the response to the first call.

    • GET https://api.engine.tech/originator/rateTables/:uuid

  • If there are still any pendingResponses (i.e. the array is not empty), continue polling every second for up to 15 seconds.

Below is a sample response from this second GET request. The 2nd Look offers are in the specialOffers array. Since the pendingResponses field is empty, it indicates that Engine has already received all responses from its Financial Services partners.

{
  "uuid": "b9b212a8-b284-5986-813e-a8d8e87c1863",
  "leadUuid": "144bd0ea-b9c6-52d5-a7ef-dccb223d060d",
  "loanAmount": 10000,
  "partnerPageUrl": "https://consumer.fiona.com/partner/channel/loan/application?results=b9b212a8-b284-5986-813e-a8d8e87c1863&step=results",
  "embedUrl": "https://embed.evenfinancial.com/ui/multi-product/index.html?partner=channel&access_token=c76e2145-d37d-5e39-9199-2c2d8f0830ab&company_uuid=7c552546-c8d5-5740-8514-f7d77f387236&step=results&results=b9b212a8-b284-5986-813e-a8d8e87c1863&available_products=loan&productType=loan",
  "loanOffers": [],
  "mortgageOffers": [],
  "savingsOffers": [],
  "specialOffers": [
      {
          "uuid": "8ddc320c-2a52-4c87-ba35-bfce3a8a7b3a",
          "name": "Mock Credit Builder Offer",
          "desc": "Description of the credit builder offer",
          "url": "https://offers.moneylion.com/ref/37089591-5d47-4219-a532-a65f7bd8c535",
          "partnerName": "Engine Demo Loans Demand Sub Account 1",
          "partnerImageUrl": "https://s3.amazonaws.com/images.evenfinancial.com/logos/dev/engine_demo_loans_demand_sub_account_1-202-wqm88e4a.png",
          "productSubType": "credit_builder",
          "disclaimer": "test special offer disclaimer 1",
          "financialInstitutionUuid": "fa8ed168-9a3e-4612-aa2a-47781dede8f1"
      }
  ],
  "creditCardOffers": [],
  "pendingResponses": [],
  "pendingOriginators": []
}

However, if the pendingResponses is not empty, you need to poll the Get Rate Table endpoint every second, for up to 15 seconds, to to retrieve all offers.

For your visibility, below are the typical response time it takes for Engine to receive offers from all our Financial Institutions partners.

2nd Look Response Time

Percentile
Response Time (seconds)

p25

<1

p50

1

p75

4

p95

11

For mapping of the fields for display, you may refer to the previous section - Displaying 2L Marketplace Offers.

Errors

Response types are mapped to HTTP status codes. In particular:

  • 200 OK: when data is successfully returned for a GET request

  • 201 Created: when new data is submitted to via a POST

  • 400 Bad Request: the submitted data is malformed

  • 401 Unauthorized: when the Authorization header is missing, if the value is invalid, or if the corresponding access token lacks the required scopes to complete the request

  • 404 Not Found: the URL is invalid, or the resource ID reference in the URL does not exist

  • 422 Unprocessable Entity: the submitted data is properly formatted, but invalid according to business logic (some legacy endpoints use 409 Conflict in this case)

  • 5xx: server error

Last updated

Was this helpful?