cURL
curl --request PUT \
--url https://api.finosu.com/customers/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"firstName": "<string>",
"lastName": "<string>",
"email": "[email protected]",
"birthday": "2023-12-25",
"timezone": "<string>",
"phoneNumber": "<string>",
"ssnLastFour": "<string>",
"doNotCall": true,
"doNotText": true,
"doNotEmail": true,
"bankruptcy": true,
"debtConsolidation": true,
"deceased": true,
"militaryStatus": true,
"legalThreat": true,
"state": "CA"
}
'import requests
url = "https://api.finosu.com/customers/{id}"
payload = {
"firstName": "<string>",
"lastName": "<string>",
"email": "[email protected]",
"birthday": "2023-12-25",
"timezone": "<string>",
"phoneNumber": "<string>",
"ssnLastFour": "<string>",
"doNotCall": True,
"doNotText": True,
"doNotEmail": True,
"bankruptcy": True,
"debtConsolidation": True,
"deceased": True,
"militaryStatus": True,
"legalThreat": True,
"state": "CA"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
email: '[email protected]',
birthday: '2023-12-25',
timezone: '<string>',
phoneNumber: '<string>',
ssnLastFour: '<string>',
doNotCall: true,
doNotText: true,
doNotEmail: true,
bankruptcy: true,
debtConsolidation: true,
deceased: true,
militaryStatus: true,
legalThreat: true,
state: 'CA'
})
};
fetch('https://api.finosu.com/customers/{id}', 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/customers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'firstName' => '<string>',
'lastName' => '<string>',
'email' => '[email protected]',
'birthday' => '2023-12-25',
'timezone' => '<string>',
'phoneNumber' => '<string>',
'ssnLastFour' => '<string>',
'doNotCall' => true,
'doNotText' => true,
'doNotEmail' => true,
'bankruptcy' => true,
'debtConsolidation' => true,
'deceased' => true,
'militaryStatus' => true,
'legalThreat' => true,
'state' => 'CA'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/customers/{id}"
payload := strings.NewReader("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"[email protected]\",\n \"birthday\": \"2023-12-25\",\n \"timezone\": \"<string>\",\n \"phoneNumber\": \"<string>\",\n \"ssnLastFour\": \"<string>\",\n \"doNotCall\": true,\n \"doNotText\": true,\n \"doNotEmail\": true,\n \"bankruptcy\": true,\n \"debtConsolidation\": true,\n \"deceased\": true,\n \"militaryStatus\": true,\n \"legalThreat\": true,\n \"state\": \"CA\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.finosu.com/customers/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"[email protected]\",\n \"birthday\": \"2023-12-25\",\n \"timezone\": \"<string>\",\n \"phoneNumber\": \"<string>\",\n \"ssnLastFour\": \"<string>\",\n \"doNotCall\": true,\n \"doNotText\": true,\n \"doNotEmail\": true,\n \"bankruptcy\": true,\n \"debtConsolidation\": true,\n \"deceased\": true,\n \"militaryStatus\": true,\n \"legalThreat\": true,\n \"state\": \"CA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"[email protected]\",\n \"birthday\": \"2023-12-25\",\n \"timezone\": \"<string>\",\n \"phoneNumber\": \"<string>\",\n \"ssnLastFour\": \"<string>\",\n \"doNotCall\": true,\n \"doNotText\": true,\n \"doNotEmail\": true,\n \"bankruptcy\": true,\n \"debtConsolidation\": true,\n \"deceased\": true,\n \"militaryStatus\": true,\n \"legalThreat\": true,\n \"state\": \"CA\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "[email protected]",
"birthday": "2023-12-25",
"ssnLastFour": "<string>",
"timezone": "<string>",
"phoneNumber": "<string>",
"streetAddress1": "<string>",
"streetAddress2": "<string>",
"city": "<string>",
"state": "<string>",
"zipCode": "<string>",
"doNotCall": true,
"doNotText": true,
"doNotEmail": true,
"bankruptcy": true,
"debtConsolidation": true,
"deceased": true,
"militaryStatus": true,
"legalThreat": true,
"isTest": true,
"taskType": "<string>",
"externalMetadata": {}
}{
"detail": "<string>"
}{
"detail": "<string>"
}Customers
Update a Customer
Updates a customer
PUT
/
customers
/
{id}
cURL
curl --request PUT \
--url https://api.finosu.com/customers/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"firstName": "<string>",
"lastName": "<string>",
"email": "[email protected]",
"birthday": "2023-12-25",
"timezone": "<string>",
"phoneNumber": "<string>",
"ssnLastFour": "<string>",
"doNotCall": true,
"doNotText": true,
"doNotEmail": true,
"bankruptcy": true,
"debtConsolidation": true,
"deceased": true,
"militaryStatus": true,
"legalThreat": true,
"state": "CA"
}
'import requests
url = "https://api.finosu.com/customers/{id}"
payload = {
"firstName": "<string>",
"lastName": "<string>",
"email": "[email protected]",
"birthday": "2023-12-25",
"timezone": "<string>",
"phoneNumber": "<string>",
"ssnLastFour": "<string>",
"doNotCall": True,
"doNotText": True,
"doNotEmail": True,
"bankruptcy": True,
"debtConsolidation": True,
"deceased": True,
"militaryStatus": True,
"legalThreat": True,
"state": "CA"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
email: '[email protected]',
birthday: '2023-12-25',
timezone: '<string>',
phoneNumber: '<string>',
ssnLastFour: '<string>',
doNotCall: true,
doNotText: true,
doNotEmail: true,
bankruptcy: true,
debtConsolidation: true,
deceased: true,
militaryStatus: true,
legalThreat: true,
state: 'CA'
})
};
fetch('https://api.finosu.com/customers/{id}', 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/customers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'firstName' => '<string>',
'lastName' => '<string>',
'email' => '[email protected]',
'birthday' => '2023-12-25',
'timezone' => '<string>',
'phoneNumber' => '<string>',
'ssnLastFour' => '<string>',
'doNotCall' => true,
'doNotText' => true,
'doNotEmail' => true,
'bankruptcy' => true,
'debtConsolidation' => true,
'deceased' => true,
'militaryStatus' => true,
'legalThreat' => true,
'state' => 'CA'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/customers/{id}"
payload := strings.NewReader("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"[email protected]\",\n \"birthday\": \"2023-12-25\",\n \"timezone\": \"<string>\",\n \"phoneNumber\": \"<string>\",\n \"ssnLastFour\": \"<string>\",\n \"doNotCall\": true,\n \"doNotText\": true,\n \"doNotEmail\": true,\n \"bankruptcy\": true,\n \"debtConsolidation\": true,\n \"deceased\": true,\n \"militaryStatus\": true,\n \"legalThreat\": true,\n \"state\": \"CA\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.finosu.com/customers/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"[email protected]\",\n \"birthday\": \"2023-12-25\",\n \"timezone\": \"<string>\",\n \"phoneNumber\": \"<string>\",\n \"ssnLastFour\": \"<string>\",\n \"doNotCall\": true,\n \"doNotText\": true,\n \"doNotEmail\": true,\n \"bankruptcy\": true,\n \"debtConsolidation\": true,\n \"deceased\": true,\n \"militaryStatus\": true,\n \"legalThreat\": true,\n \"state\": \"CA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"[email protected]\",\n \"birthday\": \"2023-12-25\",\n \"timezone\": \"<string>\",\n \"phoneNumber\": \"<string>\",\n \"ssnLastFour\": \"<string>\",\n \"doNotCall\": true,\n \"doNotText\": true,\n \"doNotEmail\": true,\n \"bankruptcy\": true,\n \"debtConsolidation\": true,\n \"deceased\": true,\n \"militaryStatus\": true,\n \"legalThreat\": true,\n \"state\": \"CA\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "[email protected]",
"birthday": "2023-12-25",
"ssnLastFour": "<string>",
"timezone": "<string>",
"phoneNumber": "<string>",
"streetAddress1": "<string>",
"streetAddress2": "<string>",
"city": "<string>",
"state": "<string>",
"zipCode": "<string>",
"doNotCall": true,
"doNotText": true,
"doNotEmail": true,
"bankruptcy": true,
"debtConsolidation": true,
"deceased": true,
"militaryStatus": true,
"legalThreat": true,
"isTest": true,
"taskType": "<string>",
"externalMetadata": {}
}{
"detail": "<string>"
}{
"detail": "<string>"
}Updates an existing customer identified by your reference ID. All request fields are optional;
omitted fields and fields sent as
Set a field to
null keep their existing values. An unknown id returns
404. The response is the full customer record after the update.
Updatable Fields
firstName,lastName- Customer nameemail- Email addressphoneNumber- Phone numberbirthday- Birthday (YYYY-MM-DD format)ssnLastFour- Last 4 digits of SSNtimezone- IANA timezone name (e.g., “America/New_York”)state- State code (e.g., “NY”, “CA”); cannot be set to an empty valuedoNotCall,doNotText,doNotEmail- Contact preferences (see below)bankruptcy,debtConsolidation,deceased,militaryStatus,legalThreat- Customer compliance statuses (see below)
streetAddress1, streetAddress2, city, zipCode), taskType, and
externalMetadata cannot be changed on this endpoint. To update them, re-send the customer to
POST /customers with the same id.
Name Fields
You can update the customer’s name by providing either or both fields:firstName- Update customer’s first namelastName- Update customer’s last name
Contact Preferences
You can independently update each communication channel:doNotCall- Prevent or allow callsdoNotText- Prevent or allow SMS messagesdoNotEmail- Prevent or allow emails
true to opt the customer out of that channel. Set it to
false to clear that channel’s opt-out. Omitted fields keep their existing
values. Text and email opt-outs also cancel pending communication for their
respective channel.
Customer Compliance Statuses
The following fields describe facts that apply to the customer across their loans:| Field | Meaning |
|---|---|
bankruptcy | The customer has an active bankruptcy status. |
debtConsolidation | The customer is working with debt management, settlement, or consolidation. |
deceased | The customer is deceased. |
militaryStatus | The customer has an applicable military or servicemember status. |
legalThreat | The customer threatened legal action. This is not attorney representation. |
true to apply the status and its normal compliance cascade. Depending on the
status, this stops servicing, blocks communication channels, and cancels pending communications
for the customer’s loans. Set it to false to clear that status and run the normal recovery
cascade; other active compliance restrictions remain in force. Repeating the current value is
idempotent. An omitted field or explicit null makes no change.
legalThreat is a reportable customer fact only. It does not set
attorney representation, stop servicing, or apply an attorney-representation contact hold. Its
true/false/null and idempotency semantics are otherwise the same as the other fields.
Fraud is loan-specific and is not accepted by Customer Update. ACH authorization revocation is
payment-method-specific and is also not accepted here. Use the corresponding loan and ACH
authorization workflows with an exact resource identifier.
Validation
Invalidbirthday, phoneNumber, or timezone values, and an empty state, return
422 Unprocessable Content. Validation runs before any field is written, so a rejected
request leaves the customer unchanged.Body
application/json
Customer to update
Partial update. Every field is optional — only the fields you send are modified; omitted fields keep their existing values.
Response
Customer response