curl --request POST \
--url https://api.nextlevelmca.com/v1/people \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"dob": "1980-05-17",
"ssn": "<string>",
"credit_score": "<string>",
"business_id": "<string>",
"role": "owner",
"ownership_percent": 50
}
'import requests
url = "https://api.nextlevelmca.com/v1/people"
payload = {
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"dob": "1980-05-17",
"ssn": "<string>",
"credit_score": "<string>",
"business_id": "<string>",
"role": "owner",
"ownership_percent": 50
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: '<string>',
last_name: '<string>',
email: '<string>',
phone: '<string>',
address: '<string>',
city: '<string>',
state: '<string>',
zip: '<string>',
dob: '1980-05-17',
ssn: '<string>',
credit_score: '<string>',
business_id: '<string>',
role: 'owner',
ownership_percent: 50
})
};
fetch('https://api.nextlevelmca.com/v1/people', 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.nextlevelmca.com/v1/people",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => '<string>',
'last_name' => '<string>',
'email' => '<string>',
'phone' => '<string>',
'address' => '<string>',
'city' => '<string>',
'state' => '<string>',
'zip' => '<string>',
'dob' => '1980-05-17',
'ssn' => '<string>',
'credit_score' => '<string>',
'business_id' => '<string>',
'role' => 'owner',
'ownership_percent' => 50
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.nextlevelmca.com/v1/people"
payload := strings.NewReader("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"zip\": \"<string>\",\n \"dob\": \"1980-05-17\",\n \"ssn\": \"<string>\",\n \"credit_score\": \"<string>\",\n \"business_id\": \"<string>\",\n \"role\": \"owner\",\n \"ownership_percent\": 50\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.post("https://api.nextlevelmca.com/v1/people")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"zip\": \"<string>\",\n \"dob\": \"1980-05-17\",\n \"ssn\": \"<string>\",\n \"credit_score\": \"<string>\",\n \"business_id\": \"<string>\",\n \"role\": \"owner\",\n \"ownership_percent\": 50\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nextlevelmca.com/v1/people")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"zip\": \"<string>\",\n \"dob\": \"1980-05-17\",\n \"ssn\": \"<string>\",\n \"credit_score\": \"<string>\",\n \"business_id\": \"<string>\",\n \"role\": \"owner\",\n \"ownership_percent\": 50\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"email": "<string>",
"phone": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"dob": "<string>",
"ssn_masked": "<string>",
"credit_score": "<string>",
"ghl_contact_id": "<string>",
"status": "active",
"created_at": "<string>",
"updated_at": "<string>"
},
"meta": {}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}Create a person
Creates a person and, when business_id is given, links them to that business with role / ownership_percent. A matching email or phone answers 409 duplicate_person with existing_id unless ?force=true. ssn is encrypted at rest and never returned. The CRM contact mirror is created in the background.
curl --request POST \
--url https://api.nextlevelmca.com/v1/people \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"dob": "1980-05-17",
"ssn": "<string>",
"credit_score": "<string>",
"business_id": "<string>",
"role": "owner",
"ownership_percent": 50
}
'import requests
url = "https://api.nextlevelmca.com/v1/people"
payload = {
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"dob": "1980-05-17",
"ssn": "<string>",
"credit_score": "<string>",
"business_id": "<string>",
"role": "owner",
"ownership_percent": 50
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: '<string>',
last_name: '<string>',
email: '<string>',
phone: '<string>',
address: '<string>',
city: '<string>',
state: '<string>',
zip: '<string>',
dob: '1980-05-17',
ssn: '<string>',
credit_score: '<string>',
business_id: '<string>',
role: 'owner',
ownership_percent: 50
})
};
fetch('https://api.nextlevelmca.com/v1/people', 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.nextlevelmca.com/v1/people",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => '<string>',
'last_name' => '<string>',
'email' => '<string>',
'phone' => '<string>',
'address' => '<string>',
'city' => '<string>',
'state' => '<string>',
'zip' => '<string>',
'dob' => '1980-05-17',
'ssn' => '<string>',
'credit_score' => '<string>',
'business_id' => '<string>',
'role' => 'owner',
'ownership_percent' => 50
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.nextlevelmca.com/v1/people"
payload := strings.NewReader("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"zip\": \"<string>\",\n \"dob\": \"1980-05-17\",\n \"ssn\": \"<string>\",\n \"credit_score\": \"<string>\",\n \"business_id\": \"<string>\",\n \"role\": \"owner\",\n \"ownership_percent\": 50\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.post("https://api.nextlevelmca.com/v1/people")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"zip\": \"<string>\",\n \"dob\": \"1980-05-17\",\n \"ssn\": \"<string>\",\n \"credit_score\": \"<string>\",\n \"business_id\": \"<string>\",\n \"role\": \"owner\",\n \"ownership_percent\": 50\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nextlevelmca.com/v1/people")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"address\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"zip\": \"<string>\",\n \"dob\": \"1980-05-17\",\n \"ssn\": \"<string>\",\n \"credit_score\": \"<string>\",\n \"business_id\": \"<string>\",\n \"role\": \"owner\",\n \"ownership_percent\": 50\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"email": "<string>",
"phone": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"dob": "<string>",
"ssn_masked": "<string>",
"credit_score": "<string>",
"ghl_contact_id": "<string>",
"status": "active",
"created_at": "<string>",
"updated_at": "<string>"
},
"meta": {}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}Authorizations
API key (nlmca_live_…) or OAuth access token
Query Parameters
Create even when a person with the same email or phone already exists (otherwise 409 duplicate_person with existing_id).
Body
First name.
100Last name.
100Email. Used to match an existing person and the CRM contact.
255Phone, any format. Used to match an existing person and the CRM contact.
50Street address.
100State, e.g. NY.
5020Date of birth YYYY-MM-DD. Returned only to admin / manager credentials.
"1980-05-17"
Social security number (123-45-6789 or 123456789). Write-only: encrypted at rest and never returned; reads expose ssn_masked (***-**-6789).
Credit score or range as text, e.g. 680 or 650-700.
20Associate the new person with this business (creates the link with role / ownership_percent).
Role on the business when business_id is given.
owner, co-owner, bookkeeper, other Ownership percentage on the business when business_id is given.
0 <= x <= 100Was this page helpful?