GuidesAPI ReferenceDiscussions
Log In
Guides

Multi-Product Pre-Qualification Guide

Submit several loan products on one application, read the per-product decision for each, and record the product the borrower picks.

Multi-Product Pre-Qualification Guide

This guide walks the full multi-product flow through the Thrive Public API. You submit up to three loan products on a single application. Thrive runs a pre-qualification decision for each one. You then record the product the borrower selects.

Overview

A single-product application asks Thrive to decision one product. A multi-product application asks Thrive to decision several at once, so the borrower can compare offers before committing.

The difference is one field. The single-product create endpoint takes product_uid. The multi-product create endpoint takes product_uids, an array of one to three product UIDs. Thrive returns one decision per product, each approved, declined, or pending.

The flow has four calls:

  1. Create the application and run the decisions.
  2. Read the per-product decisions.
  3. Record the product the borrower selects.
  4. Send the borrower to Thrive to finish the loan.
📘

API Endpoint Reference

This guide covers the workflow. For the complete field list and schemas, see the API Reference. It has a page for each endpoint: create and run decisions, get the application decision, update the requested amount, and accept an offer.

Before you start

You need these:

  • Client credentials for the Thrive Public API.
  • One to three product UIDs from your Thrive product catalog.
  • A project UID to attach the application to.

The base URL is https://api.partnerwiththrive.com/public for production and https://api-dev.partnerwiththrive.com/public for development.

Authentication

Every endpoint in this flow authenticates with headers.

HeaderRequiredDescription
x-thrive-client-idYesClient ID for authentication
x-thrive-client-secretYesClient secret for authentication
x-thrive-merchant-uidNoMerchant identifier, needed only for group accounts

1. Create the application and run the decisions

Send POST /v2/application/create-run-decision. The body carries the borrower, the project, the requested amount, and the products to decision.

The field that makes the application multi-product is product_uids.

FieldTypeRequiredDescription
product_uidsarray of stringYesOne to three product UIDs to decision. The values must be unique.
project_uidstringYesThe project the application belongs to.
requested_loan_amountnumberYesThe amount the borrower requests, up to two decimal places.
stated_household_incomenumberYesThe borrower's stated household income.
stated_household_rentnumberYesThe borrower's stated household rent.

The body also carries the borrower identity and address fields. For the full list, see the create and run decisions reference. Send product_uids in place of product_uid. The multi-product endpoint rejects product_uid.

{
  "borrower_first_name": "John",
  "borrower_last_name": "Doe",
  "borrower_email": "[email protected]",
  "project_uid": "proj_123",
  "requested_loan_amount": 15000,
  "stated_household_income": 90000,
  "stated_household_rent": 1800,
  "product_uids": ["prod_construction_loan_001", "prod_zil_promo_002"]
}

A successful call returns the application UID. Keep it. Every later call in this flow needs it.

{
  "timestamp": "2024-01-15T10:30:00.000Z",
  "statusCode": 200,
  "result": {
    "data": {
      "success_message": "Application successfully created",
      "thrive_application_uid": "9d93a879-760b-47cc-a6bc-f63f99be8b66"
    },
    "error": null
  }
}

When a product needs a driver's license

Some promotions require the borrower's driver's license before they can be decisioned. If any product in product_uids is a ZIL, NO_NO, or NO_YES promo type, send the request as multipart/form-data instead of JSON. Put the JSON body in a data field and attach drivers_license_front and drivers_license_back. Accepted image types are PDF, JPEG, PNG, TIFF, and GIF.

2. Read the per-product decisions

Send POST /v2/application/get-application-decision with the application UID.

{
  "thrive_application_uid": "9d93a879-760b-47cc-a6bc-f63f99be8b66"
}

The response carries one entry per product in products. Each entry has a status of approved, declined, or pending. An approved entry carries the approved terms. A declined entry carries decline_reasons.

{
  "timestamp": "2024-01-15T10:30:00.000Z",
  "statusCode": 200,
  "result": {
    "data": {
      "thrive_application_uid": "9d93a879-760b-47cc-a6bc-f63f99be8b66",
      "application_status": "Credit Underwriting",
      "has_stipulations": false,
      "application_link": "https://app.partnerwiththrive.com/manage/application_uid",
      "products": [
        {
          "product_uid": "prod_construction_loan_001",
          "plan_number": "PRODUCT_ONE",
          "display_name": "24 Month Fixed",
          "status": "approved",
          "approved_term": 120,
          "approved_interest_rate": 0.1099,
          "approved_interest_only_period": 6,
          "approved_credit_limit": 15000,
          "borrower_maximum_approved_amount": 16500,
          "origination_fee": 500,
          "stamp_tax": 500,
          "merchant_fee_percentage": 1,
          "approved_promo_period": 12
        },
        {
          "product_uid": "prod_zil_promo_002",
          "plan_number": "PRODUCT_TWO",
          "display_name": "ZIL 12 Month",
          "status": "declined",
          "decline_reasons": ["low_score"]
        }
      ],
      "tasks": []
    },
    "error": null
  }
}

approved_interest_rate is a fraction. The value 0.1099 means 10.99 percent.

A product reads pending while its decision still runs. Poll this endpoint until no product is pending. Then show the approved products to the borrower.

3. Adjust the requested amount (optional)

The borrower can change how much they want before they select a product. To update it, send PUT /v2/application/requested-amount with the application UID and the new requested_loan_amount. Skip this step if the borrower keeps the original amount.

4. Record the product the borrower selects

When the borrower picks a product, send PUT /v2/application/accept-offer.

FieldTypeRequiredDescription
thrive_application_uidstring (UUID)YesThe application the borrower is selecting on.
selected_product_uidstring (UUID)YesThe product UID the borrower picked.
linked_application_uidsarray of stringNoCompeting applications to close when the borrower selects this one.
{
  "thrive_application_uid": "9d93a879-760b-47cc-a6bc-f63f99be8b66",
  "selected_product_uid": "prod_construction_loan_001"
}

This call records the selected product, sets the application's offer_selected flag to true, and turns on borrower communications. Thrive can now email the borrower to finish the loan.

{
  "timestamp": "2024-01-15T10:30:00.000Z",
  "statusCode": 200,
  "result": {
    "data": {
      "thrive_application_uid": "9d93a879-760b-47cc-a6bc-f63f99be8b66",
      "offer_selected": true
    },
    "error": null
  }
}

If you ran separate applications for the same borrower and want only the selected one to continue, pass their UIDs in linked_application_uids. Thrive closes them when it records the selection.

5. The borrower finishes the loan

The decision response in step 2 returns application_link. Send the borrower to that link.

Your integration's work ends at accept-offer. The borrower completes the rest through the application_link. The borrower authorizes a hard credit pull and signs the loan documents.

Poll get-application-decision to watch application_status move through these stages. It reaches Hard Pull Authorization while the borrower authorizes the credit pull. It reaches Docusign while the borrower signs. It reaches Approved once the borrower finishes, and the loan then moves to funding.

The application does not advance past Hard Pull Authorization until the borrower authorizes the pull. Running the pull through an internal endpoint is not enough on its own.

Rules and limits

  • An application carries one to three products. The create endpoint rejects a fourth.
  • The values in product_uids must be unique.
  • Each product UID must exist in your Thrive product catalog.
  • Thrive returns one decision per product. Thrive can approve one product and decline another on the same application.

Error examples

More than three products

{
  "timestamp": "2025-09-10T20:17:42.562Z",
  "statusCode": 400,
  "result": {
    "data": null,
    "error": {
      "message": "\"product_uids\" must contain less than or equal to 3 items"
    }
  }
}

The selected product UID is not recognized

{
  "timestamp": "2025-09-10T20:17:42.562Z",
  "statusCode": 400,
  "result": {
    "data": null,
    "error": {
      "message": "Could not find the specified product. Please check the id submitted and try again"
    }
  }
}

Did this page help you?