curl --request PATCH \
--url https://api.gominerva.com/clm/v1/profiles/{profileId} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"profileCustomFields": {
"loan_status": "paid_out",
"servicing_details": null
}
}
'import requests
url = "https://api.gominerva.com/clm/v1/profiles/{profileId}"
payload = { "profileCustomFields": {
"loan_status": "paid_out",
"servicing_details": None
} }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({profileCustomFields: {loan_status: 'paid_out', servicing_details: null}})
};
fetch('https://api.gominerva.com/clm/v1/profiles/{profileId}', 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.gominerva.com/clm/v1/profiles/{profileId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'profileCustomFields' => [
'loan_status' => 'paid_out',
'servicing_details' => null
]
]),
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.gominerva.com/clm/v1/profiles/{profileId}"
payload := strings.NewReader("{\n \"profileCustomFields\": {\n \"loan_status\": \"paid_out\",\n \"servicing_details\": null\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.gominerva.com/clm/v1/profiles/{profileId}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"profileCustomFields\": {\n \"loan_status\": \"paid_out\",\n \"servicing_details\": null\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gominerva.com/clm/v1/profiles/{profileId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"profileCustomFields\": {\n \"loan_status\": \"paid_out\",\n \"servicing_details\": null\n }\n}"
response = http.request(request)
puts response.read_body{
"msg": "OK",
"result": {
"profile": {
"id": "66c391b92888a0db5cc6d3f6",
"name": "Alex Morgan",
"profileCustomFields": [
{
"key": "loan_number",
"label": "Loan Number",
"type": "text",
"value": "LN-2026-0042"
},
{
"key": "loan_status",
"label": "Loan Status",
"type": "enum",
"value": "funded",
"valueLabel": "Funded"
},
{
"key": "servicing_details",
"label": "Servicing Details",
"type": "json",
"value": {
"portfolio": "Prime",
"boardingDate": "2026-08-27"
}
}
]
}
},
"status": 200
}Update a profile
Updates the fields supplied for one profile. In profileCustomFields, omitted keys remain unchanged and null clears the named value. Required custom fields that the request omits are not checked again. Supplied custom fields are validated against the latest definitions, so archives, types, and Choice values are enforced. Unknown or archived keys and values of the wrong type return HTTP 400; if definitions cannot be retrieved, the write is rejected.
curl --request PATCH \
--url https://api.gominerva.com/clm/v1/profiles/{profileId} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"profileCustomFields": {
"loan_status": "paid_out",
"servicing_details": null
}
}
'import requests
url = "https://api.gominerva.com/clm/v1/profiles/{profileId}"
payload = { "profileCustomFields": {
"loan_status": "paid_out",
"servicing_details": None
} }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({profileCustomFields: {loan_status: 'paid_out', servicing_details: null}})
};
fetch('https://api.gominerva.com/clm/v1/profiles/{profileId}', 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.gominerva.com/clm/v1/profiles/{profileId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'profileCustomFields' => [
'loan_status' => 'paid_out',
'servicing_details' => null
]
]),
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.gominerva.com/clm/v1/profiles/{profileId}"
payload := strings.NewReader("{\n \"profileCustomFields\": {\n \"loan_status\": \"paid_out\",\n \"servicing_details\": null\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.gominerva.com/clm/v1/profiles/{profileId}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"profileCustomFields\": {\n \"loan_status\": \"paid_out\",\n \"servicing_details\": null\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gominerva.com/clm/v1/profiles/{profileId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"profileCustomFields\": {\n \"loan_status\": \"paid_out\",\n \"servicing_details\": null\n }\n}"
response = http.request(request)
puts response.read_body{
"msg": "OK",
"result": {
"profile": {
"id": "66c391b92888a0db5cc6d3f6",
"name": "Alex Morgan",
"profileCustomFields": [
{
"key": "loan_number",
"label": "Loan Number",
"type": "text",
"value": "LN-2026-0042"
},
{
"key": "loan_status",
"label": "Loan Status",
"type": "enum",
"value": "funded",
"valueLabel": "Funded"
},
{
"key": "servicing_details",
"label": "Servicing Details",
"type": "json",
"value": {
"portfolio": "Prime",
"boardingDate": "2026-08-27"
}
}
]
}
},
"status": 200
}Authorizations
The Minerva API key used for this integration. Manage API keys in the Minerva dashboard under Administration > Developers.
Path Parameters
Profile ID
Body
Profile update request
Address line 1 of the profile's known place of residence. Combined with address line 2 to form the "address" value in the screening input.
"123 Main Street"
Address line 2 of the profile's known place of residence. Combined with address line 1 to form the "address" value in the screening input.
"Apt 4B"
The city of the profile's known place of residence. Supply the full city name.
"Toronto"
The postal code of the known place of residence for the profile.
"M5V1C2"
The ISO-2 code or full state name of the place of residence of the profile.
"ON"
Optional. Creates the profile in an allowlisted state, so ongoing monitoring generates no flags until the date you specify in "YYYY/MM/DD" format. If omitted, the profile is created in a non-allowlisted state, where later screens may generate review tasks.
"2024/12/25"
false
"12345-123"
The known country of residence for the profile.
"Canada"
"12345-123"
The date of birth of the profile in "YYYY/MM/DD" format.
"1990/01/01"
The email of the profile. Screening does not use this value, but you can store it on the persistent profile record for cross-referencing.
"john.smith@example.com"
Optional external reference ID supplied at profile creation, so the profile can be cross-referenced with external systems.
"123456789"
The first name of the profile. Combined with the last name to form the "name" value in the screening input.
Deprecated: use the name field instead.
"John"
One of "individual" or "organization", the entity type in Minerva screening. An individual is a natural person; an organization is an entity.
"individual"
The last name of the profile. Combined with the first name to form the "name" value in the screening input.
Deprecated: use the name field instead.
"Smith"
The middle name of the profile. Optional. Combined with the first and last names to form the "name" value in the screening input.
Deprecated: use the name field instead.
"Michael"
One of "monitored", "not_monitored", or an empty string. When "monitored", the profile is enrolled in ongoing monitoring, where screening on a regular cadence may generate review tasks for potential risks.
"monitored"
Legacy fields (keeping for backward compatibility)
"John Smith"
The nationality of the profile, being one of the known citizenships of the profile.
"American"
The known occupation or job title of the natural person.
"Software Engineer"
The affiliated organization or employer of the natural person.
"MinervaAI"
The phone number in e.164 standard format for the profile (+15555555555)
"+15555555555"
The known sex of the natural person, as reported on an onboarding document. Use "f" for Female, "m" for Male, "o" for Other, or leave empty for Unknown.
"m"
"pending"
"12345-123"
Workspace-scoped profile group IDs assigned to this profile for dynamic risk segmentation. A profile can belong to multiple groups.
[
"665f0d4c2d2f7c2b2f2f2f31",
"665f0d4c2d2f7c2b2f2f2f32"
]
Organization-defined profile values keyed by immutable definition key. Every write retrieves the latest definitions before validation. Unknown or archived keys and wrong types return HTTP 400; if definitions cannot be retrieved, the write is rejected. Omitted keys remain unchanged on PATCH, and null clears one named value. Required fields are enforced on profile creation and onboarding.
Show child attributes
Show child attributes
{
"loan_number": "LN-2026-0042",
"loan_status": "funded",
"servicing_details": {
"portfolio": "Prime",
"boardingDate": "2026-08-27"
}
}