Offer Wall API - New Marketplaces

Why Integrate with Offer Wall API - New Marketplaces

Channel partners historically want a lightweight integration with Engine’s marketplace that delivers personalized offers without heavy engineering effort. To support this, Engine offers the Offer Wall API for New Marketplaces—ideal for smaller sub-verticals like Credit Builders, Earned Wage Access, and Debt Relief. This API lets partners send data via API and receive the Partner Page (PP) redirect URL without needing to build a custom front-end UX.

Key Benefits vs. Hosted Integration:

  • Better Lead Performance: Send lead PII and request product types for better pre-click offer matching and post-click conversion.

  • Stronger Re-engagement: Leverage collected user data to re-target users across additional marketing channels.

  • Broader Reach & Targeting: Access Engine’s full Offer Catalog to deliver more personalized and relevant product recommendations to users.

High-Level Integration Overview

  1. Define productTypes: Determine which product types to include in your request. Reach out to your Engine by MoneyLion Partner Managers for recommendations.

  2. Collect Lead Data: Gather all required user and contextual fields needed for the API payload.

  3. Submit to Offer Wall API: Send a single POST request to the Offer Wall API endpoint with the assembled lead data.

  4. Check for Offers: Review the response fields numOffers and numPendingResponses to confirm offer availability.

  5. Redirect to Offer Page: Use the partnerPageUrl from the response to direct users to the white-labeled or co-branded offer experience.

Integration Steps:

Offer Wall API - New Marketplaces Endpoint:

POST - https://api.engine.tech/leads/rateTables/offerWallUrls

Post Request Authorization

Engine will provide testing and production API access tokens. All requests to the Engine API must be authenticated using a bearer token specified in the Authorization header.

The header value is prefixed with the string "Bearer". Please contact your Engine Partner Manager for an appropriate bearer token for API testing.

Authorization: Bearer eyJhbGciOieyJhbGciOieyJhbGiOieyJhbGciOixxxxxxxxxx

Other Header Information

The supply partner must include the server's userAgent in request headers (for logging, access control, and analytics) or the request will be rejected by Engine's servers.

Post Request Body - Object Structure

The required format of the request payload to the Offer Wall API is as follows:

curl -L -X POST 'https://api.engine.tech/leads/rateTables/offerWallUrls' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOieyJhbGciOieyJhbGiOieyJhbGciOixxxxxxxxxx' \
-H 'User-Agent: My-App/1.3 (Pod 3)' \
--data-raw 
'{
    "productTypes": 
    [
        "EarnedWageAccess",
        "CashAdvance"
    ],
    "personalInformation": {
        "firstName": "John",
        "lastName": "Doe",
        "email": "[email protected]",
        "city": "New York",
        "state": "NY", 
        "primaryPhone": "2125556789",
        "address1": "45 West 21st Street",
        "address2": "5th Floor",
        "zipcode": "10010",
        "dateOfBirth": "1993-10-09",
        "ssn": "111-22-3333"
    },
    "sessionInformation": {
        "ipAddress": "8.8.8.8",
        "userAgent": "MyApp/2.1 (iOS 16.3; iPhone13,2)"
    },
    "loanInformation": {
        "purpose": "debt_consolidation",
        "loanAmount": 1000
    },
    "mortgageInformation": {
        "propertyStatus": "own_with_mortgage"
    },
    "creditInformation": {
        "providedCreditRating": "excellent"
    },
    "financialInformation": {
        "employmentStatus": "employed",
        "employmentPayFrequency": "weekly",
        "annualIncome": 100000 
    },
    "educationInformation": {
        "educationLevel": "masters"
    },
    "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 its partners at the telephone number(s) I have provided above to explore personal loan offers, including contact through automatic dialing systems, artificial or pre-recorded voice messaging, or text message. I understand my consent is not required as a condition to purchasing any goods or services from anyone."
    },
    "clientTags": {
        "clientId": ["client1"],
        "trafficsource": ["email"],
        "campaignId": ["campaign1"]
    }
}'

Required fields:

While only productTypes and state are technically required in the API request, Engine highly recommends including the additional fields mentioned below. Doing so will enhance lead decision-making and boost conversion rates.

Product Types

Field
Type
Required?
Sample Value
Enum/Comment

productTypes

Array

Y

"EarnedWageAccess", "CashAdvance"

Engine supports over 60 products in the New Marketplaces, listed below*

*"AlternativeInvestments", "AutoInsurance", "AutoServices", "AutomobileInsurance", "AutomobileLoan", "AutomobileRefinance", "BankingAccount", "BrokerageAccount", "BudgetingTools", "BusinessLendingMarketplace", "BusinessLineOfCredit", "CancellationServices", "CashAdvance", "CashManagementAccount", "CashRewards", "CertificateOfDeposit", "CheckingAccount", "CommercialAutoLoan", "CreditBuilderDebitCard", "CreditBuilderLoan", "CreditBuilderSecuredCreditCard", "CreditMonitoring", "CreditRepair", "CryptoBrokerage", "DebtSettlement", "EarnedWageAccess", "EducationOffers", "Freebies", "GigEconomy", "HealthDiscounts", "HealthInsurance", "HomeEquityInvestment", "HomeEquityLineOfCredit", "HomeEquityLoan", "IdentityProtection", "IncomeOpportunities", "IncomeProtection", "InstallmentLoanMarketplace", "MoneyMarketAccount", "MortgagePurchase", "MortgageRefinance", "MotorcycleInsurance", "OverdraftProtection", "PetInsurance", "RentUtilityBillReporting", "RentersInsurance", "RevenueBasedFinancing", "RoboInvesting", "SavingsAccount", "SecuredCreditCard", "SecuredPersonalLoan", "SpecialtyVehicleInsurance", "StudentLoan", "StudentLoanRefinance", "TaxFiling", "TermLifeInsurance", "TravelOffers", "UnsecuredCreditCard", "UnsecuredLineOfCredit", "UnsecuredPersonalLoan", "UtilitiesDiscounts", "WholeLifeInsurance"

Personal Information

Field
Type
Required? (Yes/No/Conditional)
Sample Value
Enum/Comment

firstName

String

N

John

lastName

String

N

Doe

email

String

N

city

String

N

New York

state

String

Y

NY

State 50 U.S. states + DC (District of Columbia) + PR (Puerto Rico) + VI (U.S. Virgin Islands)

primaryPhone

String

N

2125556789

See Regex Validations below for more information

address1

String

N

45 West 21st Street

address2

String

N

5th Floor

zipcode

String

N

10010

See Regex Validations below for more information

dateOfBirth

String

N

1993-10-09

yyyy-mm-dd

ssn

String

N

124-22-3333

Social Security Number. See Regex Validations below for more information

Loan Information

Field
Type
Required? (Yes/No)
Sample Value
Comment

purpose

String

N

debt_consolidation

See enum at API reference - purpose

loanAmount

Integer

N

1000

Unit in USD

Mortgage Information

Field
Type
Required? (Yes/No)
Sample Value
Comment

propertyStatus

String

N

own_with_mortgage

See enum at API reference - propertyStatus

Credit Information

Field
Type
Required? (Yes/No/Conditional)
Sample Value
Comment

providedCreditRating

String

N

good

See enum at API reference - providedCreditRating

providedNumericCreditScore

Int

N

750

Include either providedCreditRating or providedNumericCreditScore if passing the data (not necessary to include both)

Financial Information

Field
Type
Required? (Yes/No/Conditional)
Sample Value
Enum/Comment

employmentStatus

String

N

employed

See enum at API reference - employmentStatus

employmentPayFrequency

String

N

weekly

See enum at API reference - employmentPayFrequency

annualIncome

Integer

N

100000

Unit in USD

Legal Information

Field
Type
Required? (Yes/No/Conditional)
Sample Value
Enum/Comment

consentsToFcra

Boolean

N

true

fcraLanguage

String

Conditional

"By checking this box/clicking 'agree' I hereby consent to ..."

Required if consentsToFcra is true. Must include the exact FCRA language shown to users.

consentstoTcpa

Boolean

N

true

tcpaLanguage

String

Conditional

"By checking this box/clicking 'agree' I hereby consent to ..."

Required only if consentsToTcpa is true. Must include the exact TCPA language shown to users.

Session Information

Field
Type
Required? (Yes/No)
Sample Value
Enum/Comment

ipAddress

String

N

8.8.8.8

Used for fraud detection by Engine and Financial Institution partners

userAgent

String

N

MyApp/2.1 (iOS 16.3; iPhone13,2)

Used for fraud detection/prevention by Financial Institution partners*

sessionInformation.userAgent should reflect the userAgent of the client (i.e. consumer's device), which is different from the User-Agent required in request headers (which should reflect the channel partner's server )

Client Tags

Field
Type
Required? (Yes/No)
Sample Value
Enum/Comment

clientId

Array

N

clientId123

Client Tags can be added for ease of reporting/attribution (i.e. for the partner's convenience when Engine reports metrics to the partner). Refer to Client Tags for Reporting for details

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

API Response and Parsing

Sample response:

{
    "uuid": "uuid will appear here",
    "leadUuid": "leadUuid will appear here",
    "numOffers": 3, //static offers + custom audience offers that have resolved
    "numPendingResponses": 1, //pending responses 
    "partnerPageUrl": "https://www.moneylion.com/network/moneylion/cash-advance/compare/<uuid>"
} 

As shown in the sample response above, Partners will get the following information upon making a successful request:

  • uuid - this is a Rate Table UUID.

  • leadUuid - this is the uuid for each lead, or user. Generally a leadUuid should have only one rate table UUID. Only after the rate table for a lead expires (usually 30 days), should the user get a new rate table uuid.

  • numOffers - Number of offers resolved by Engine.

  • numPendingResponses - Number of pending responses Engine is still resolving internally or awaiting from Financial Institution partners.

  • partnerPageUrl - this is the partner page URL Engine will render for leads originated from the partner. Partners should redirect the user into this url (if there are any offers for that lead).

Suggested Parsing Logic of the API Response:

  1. Store Identifiers. Partners should first store the uuid and leadUuid fields for analytics, optimization, or internal tracking as needed.

  2. Redirect:

    1. If numPendingResponses is >0, wait 2 seconds and then redirect the lead to the returned partnerPageUrl—regardless of numOffers.

    2. If numPendingResponses is 0 and numOffers is not 0, you may redirect the lead to the returned partnerPageUrl immediately.

    3. If both numPendingResponses and numOffers are 0, we advise against redirecting the lead to the partnerPageUrl. The lead will see an empty offer wall. The partnerPageUrl field will be present even if numOffers is 0.

  3. Do NOT poll https://api.engine.tech/leads/rateTables/offerWallUrls for the same lead. Engine will create a new rate table UUID on every call to this endpoint, which can lead to inconsistencies and duplicate lead tracking. We will support the polling in the near future.

Sample Partner Page

Future Improvements

Engine plans to expand partnerships with more financial institutions to enhance the range of financial products available, meeting the diverse needs of our supply partners' end customers.

Last updated

Was this helpful?