List stop servicing reasons
curl --request GET \
--url https://api.finosu.com/loans/stop-servicing-reasons \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.finosu.com/loans/stop-servicing-reasons"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.finosu.com/loans/stop-servicing-reasons', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.finosu.com/loans/stop-servicing-reasons",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/loans/stop-servicing-reasons"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.finosu.com/loans/stop-servicing-reasons")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/loans/stop-servicing-reasons")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
"PAID_OFF",
"BANKRUPTCY",
"FRAUD_CLAIM",
"MILITARY",
"DECEASED",
"INCARCERATED",
"DEBT_MANAGEMENT_COMPANY",
"NO_LOGIN_2M",
"NO_PAYMENT_OR_PLAN_3M",
"NO_PLAN_PAYMENT_2M",
"NO_PAYMENT_OR_PLAN_4M",
"SOLD_OFF",
"MISTAKE",
"DEBT_DISPUTE",
"COMPLAINT_TRIGGER",
"HISTORICAL_INELIGIBLE",
"DUPLICATE",
"REFUSES_TO_PAY",
"API_REQUEST",
"LMS_CLOSED",
"NUDGE_COMPLETED",
"DATA_DEFECT_HOLD",
"COERCED_DEBT_CLAIM",
"TRANSFERRED_TO_FINOSU"
]{
"detail": "<string>"
}Loans
List Stop Servicing Reasons
Returns the complete, unpaginated array of case-sensitive reasons accepted by both loan and customer cancel-servicing endpoints. Values are shared by all authenticated companies. Additional values may be added; clients must not rely on array positions or a fixed length.
GET
/
loans
/
stop-servicing-reasons
List stop servicing reasons
curl --request GET \
--url https://api.finosu.com/loans/stop-servicing-reasons \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.finosu.com/loans/stop-servicing-reasons"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.finosu.com/loans/stop-servicing-reasons', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.finosu.com/loans/stop-servicing-reasons",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/loans/stop-servicing-reasons"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.finosu.com/loans/stop-servicing-reasons")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/loans/stop-servicing-reasons")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
"PAID_OFF",
"BANKRUPTCY",
"FRAUD_CLAIM",
"MILITARY",
"DECEASED",
"INCARCERATED",
"DEBT_MANAGEMENT_COMPANY",
"NO_LOGIN_2M",
"NO_PAYMENT_OR_PLAN_3M",
"NO_PLAN_PAYMENT_2M",
"NO_PAYMENT_OR_PLAN_4M",
"SOLD_OFF",
"MISTAKE",
"DEBT_DISPUTE",
"COMPLAINT_TRIGGER",
"HISTORICAL_INELIGIBLE",
"DUPLICATE",
"REFUSES_TO_PAY",
"API_REQUEST",
"LMS_CLOSED",
"NUDGE_COMPLETED",
"DATA_DEFECT_HOLD",
"COERCED_DEBT_CLAIM",
"TRANSFERRED_TO_FINOSU"
]{
"detail": "<string>"
}Use this authenticated lookup to populate cancellation options without hardcoding
reason codes. It returns the complete array of case-sensitive strings accepted by
Cancel Loan Servicing and
Cancel Customer Servicing.
Omitting
Request
curl --request GET 'https://api.finosu.com/loans/stop-servicing-reasons' \
--header 'X-API-Key: YOUR_API_KEY'
Response
HTTP200 returns a JSON array of strings, with no pagination or request parameters.
The OpenAPI example shows the current catalog. Missing, empty, invalid, or
inactive API keys return 401.
The catalog is the same for every authenticated company.
Use the selected value unchanged as reason in a cancellation request:
{"reason": "PAID_OFF"}
reason from a cancellation request still defaults to API_REQUEST.
This lookup does not cancel servicing or change loan/customer records.
Reason descriptions
These descriptions explain the currently accepted codes. Fetch the lookup at runtime for the current list; this table is reference documentation, not a list to copy into your integration. Selecting a reason records why servicing stops; it does not perform a loan transfer or complete another business workflow.| Reason | Description |
|---|---|
API_REQUEST | Default reason when servicing is cancelled through the API. |
PAID_OFF | The loan has been paid in full. |
BANKRUPTCY | The customer has filed for bankruptcy. |
FRAUD_CLAIM | A fraud claim has been reported for the account. |
MILITARY | Servicing is stopped because of the customer’s military protections under SCRA. |
DECEASED | The customer is deceased. |
INCARCERATED | The customer is incarcerated. |
DEBT_MANAGEMENT_COMPANY | The account is being handled by a debt management company. |
NO_LOGIN_2M | No customer login for two months. |
NO_PAYMENT_OR_PLAN_3M | No payment or payment plan for three months. |
NO_PLAN_PAYMENT_2M | No payment toward the payment plan for two months. |
NO_PAYMENT_OR_PLAN_4M | No payment or payment plan for four months. |
SOLD_OFF | The loan has been sold to another servicer. |
MISTAKE | The loan was created in error. |
DEBT_DISPUTE | The customer is disputing the debt. |
COMPLAINT_TRIGGER | Servicing is stopped following a customer complaint. |
HISTORICAL_INELIGIBLE | The loan was historically ineligible for servicing. |
DUPLICATE | The loan is a duplicate record. |
REFUSES_TO_PAY | The customer refuses to pay. |
LMS_CLOSED | The loan was closed in the external loan management system. |
NUDGE_COMPLETED | The nudge or application outreach has ended and its placeholder loan is being retired. |
DATA_DEFECT_HOLD | Servicing is on hold because required account data is missing, invalid, or out of date. |
COERCED_DEBT_CLAIM | The customer has reported that the debt was incurred through coercion. |
TRANSFERRED_TO_FINOSU | The account has moved to Finosu for servicing; servicing stops on the original lender’s loan record. |
Compatibility
Read values by name, not array position. Additional reasons may be added; do not assume a fixed count or compile the response into a closed client-side enum. Refresh the lookup when presenting cancellation options. Cancellation endpoints remain authoritative and still validate the reason and target account.Authorizations
Response
Accepted stop servicing reasons