Create a household
Create a new household (Client or Prospect). Requires a type parameter to specify the household type. Client households require at least one contact method (email or phone). Client-only fields (tier, became_client_at) are silently ignored when creating a Prospect. Creating a household does not deduplicate or merge by email; search by exact email first if you need sync-style upsert behavior.
curl --request POST \
--url https://api.slant.app/v1/households \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"book_id": "abc123xyz",
"type": "Client",
"household_name": "The Smith Family",
"tier": "B-tier",
"became_client_at": "2024-01-01T00:00:00Z",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "5555551234",
"phone_extension": "1234"
}
'import requests
url = "https://api.slant.app/v1/households"
payload = {
"book_id": "abc123xyz",
"type": "Client",
"household_name": "The Smith Family",
"tier": "B-tier",
"became_client_at": "2024-01-01T00:00:00Z",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "5555551234",
"phone_extension": "1234"
}
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({
book_id: 'abc123xyz',
type: 'Client',
household_name: 'The Smith Family',
tier: 'B-tier',
became_client_at: '2024-01-01T00:00:00Z',
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com',
phone_number: '5555551234',
phone_extension: '1234'
})
};
fetch('https://api.slant.app/v1/households', 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.slant.app/v1/households",
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([
'book_id' => 'abc123xyz',
'type' => 'Client',
'household_name' => 'The Smith Family',
'tier' => 'B-tier',
'became_client_at' => '2024-01-01T00:00:00Z',
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'phone_number' => '5555551234',
'phone_extension' => '1234'
]),
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.slant.app/v1/households"
payload := strings.NewReader("{\n \"book_id\": \"abc123xyz\",\n \"type\": \"Client\",\n \"household_name\": \"The Smith Family\",\n \"tier\": \"B-tier\",\n \"became_client_at\": \"2024-01-01T00:00:00Z\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"phone_number\": \"5555551234\",\n \"phone_extension\": \"1234\"\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.slant.app/v1/households")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"book_id\": \"abc123xyz\",\n \"type\": \"Client\",\n \"household_name\": \"The Smith Family\",\n \"tier\": \"B-tier\",\n \"became_client_at\": \"2024-01-01T00:00:00Z\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"phone_number\": \"5555551234\",\n \"phone_extension\": \"1234\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slant.app/v1/households")
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 \"book_id\": \"abc123xyz\",\n \"type\": \"Client\",\n \"household_name\": \"The Smith Family\",\n \"tier\": \"B-tier\",\n \"became_client_at\": \"2024-01-01T00:00:00Z\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"phone_number\": \"5555551234\",\n \"phone_extension\": \"1234\"\n}"
response = http.request(request)
puts response.read_body{
"id": "abc123xyz",
"type": "Client",
"name": "The Smith Family",
"book_id": "book123xyz",
"people": [
{
"id": "abc123xyz",
"book_id": "book123xyz",
"first_name": "John",
"last_name": "Doe",
"household_id": "xyz789abc",
"contact_id": "cnt456def",
"role_type": "client",
"middle_name": "Robert",
"salutation": "Mr.",
"suffix": "Jr.",
"maiden_name": "Smith",
"gender": "male",
"designations": "CPA, CFP",
"household_role": "head_of_household",
"preferred_name": "Johnny",
"date_of_birth": "1985-06-15",
"job_title": "Software Engineer",
"ssn": "***-**-6789",
"drivers_license_number": "******7890",
"email_addresses": [
{
"email": "john.doe@example.com",
"email_type": "personal",
"is_primary": true
}
],
"phone_numbers": [
{
"phone_number": "+15555551234",
"phone_type": "mobile",
"is_primary": true,
"extension": "1234"
}
],
"addresses": [
{
"address_type": "home",
"is_primary": true,
"line1": "123 Main St",
"line2": "Apt 4B",
"city": "New York",
"state": "NY",
"zip": "10001",
"country_code": "US"
}
],
"employments": [
{
"business_name": "Acme Corp",
"id": "emp123xyz",
"person_id": "abc123xyz",
"role": "Software Engineer",
"start_date": "2023-01-15",
"end_date": "2024-12-31",
"actively_employed": true
}
],
"custom_fields": {
"preferred_contact_method": "Email",
"risk_tolerance": "Moderate"
}
}
],
"tier": "Platinum",
"became_client_at": "2024-01-01T00:00:00Z",
"profile_picture_url": "https://api.example.com/v1/households/abc123xyz/avatar",
"custom_fields": {
"pageport_lead_source": "Landing Page",
"industry": "Technology"
}
}{
"error": "invalid_json",
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
OAuth 2.0 Bearer Token from Clerk authentication
Body
The book ID
"abc123xyz"
The type of household to create
Client, Prospect "Client"
Name of the household
"The Smith Family"
Client tier label (Clients only)
"B-tier"
When the household became a client (Clients only)
"2024-01-01T00:00:00Z"
Head of household first name
"John"
Head of household last name
"Doe"
Primary email address
"john.doe@example.com"
Primary phone number
"5555551234"
Optional extension for the primary phone number
"1234"
Response
created
The ID of the household
"abc123xyz"
The type of household
Client, Prospect "Client"
The name of the household
"The Smith Family"
The ID of the book this household belongs to
"book123xyz"
The people in this household
Show child attributes
Show child attributes
The tier label for this household (null for Prospects)
"Platinum"
When this household became a client (null for Prospects)
"2024-01-01T00:00:00Z"
URL to the household profile picture
"https://api.example.com/v1/households/abc123xyz/avatar"
Custom field values as key-value pairs
{
"pageport_lead_source": "Landing Page",
"industry": "Technology"
}
curl --request POST \
--url https://api.slant.app/v1/households \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"book_id": "abc123xyz",
"type": "Client",
"household_name": "The Smith Family",
"tier": "B-tier",
"became_client_at": "2024-01-01T00:00:00Z",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "5555551234",
"phone_extension": "1234"
}
'import requests
url = "https://api.slant.app/v1/households"
payload = {
"book_id": "abc123xyz",
"type": "Client",
"household_name": "The Smith Family",
"tier": "B-tier",
"became_client_at": "2024-01-01T00:00:00Z",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "5555551234",
"phone_extension": "1234"
}
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({
book_id: 'abc123xyz',
type: 'Client',
household_name: 'The Smith Family',
tier: 'B-tier',
became_client_at: '2024-01-01T00:00:00Z',
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com',
phone_number: '5555551234',
phone_extension: '1234'
})
};
fetch('https://api.slant.app/v1/households', 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.slant.app/v1/households",
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([
'book_id' => 'abc123xyz',
'type' => 'Client',
'household_name' => 'The Smith Family',
'tier' => 'B-tier',
'became_client_at' => '2024-01-01T00:00:00Z',
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'phone_number' => '5555551234',
'phone_extension' => '1234'
]),
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.slant.app/v1/households"
payload := strings.NewReader("{\n \"book_id\": \"abc123xyz\",\n \"type\": \"Client\",\n \"household_name\": \"The Smith Family\",\n \"tier\": \"B-tier\",\n \"became_client_at\": \"2024-01-01T00:00:00Z\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"phone_number\": \"5555551234\",\n \"phone_extension\": \"1234\"\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.slant.app/v1/households")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"book_id\": \"abc123xyz\",\n \"type\": \"Client\",\n \"household_name\": \"The Smith Family\",\n \"tier\": \"B-tier\",\n \"became_client_at\": \"2024-01-01T00:00:00Z\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"phone_number\": \"5555551234\",\n \"phone_extension\": \"1234\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slant.app/v1/households")
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 \"book_id\": \"abc123xyz\",\n \"type\": \"Client\",\n \"household_name\": \"The Smith Family\",\n \"tier\": \"B-tier\",\n \"became_client_at\": \"2024-01-01T00:00:00Z\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"phone_number\": \"5555551234\",\n \"phone_extension\": \"1234\"\n}"
response = http.request(request)
puts response.read_body{
"id": "abc123xyz",
"type": "Client",
"name": "The Smith Family",
"book_id": "book123xyz",
"people": [
{
"id": "abc123xyz",
"book_id": "book123xyz",
"first_name": "John",
"last_name": "Doe",
"household_id": "xyz789abc",
"contact_id": "cnt456def",
"role_type": "client",
"middle_name": "Robert",
"salutation": "Mr.",
"suffix": "Jr.",
"maiden_name": "Smith",
"gender": "male",
"designations": "CPA, CFP",
"household_role": "head_of_household",
"preferred_name": "Johnny",
"date_of_birth": "1985-06-15",
"job_title": "Software Engineer",
"ssn": "***-**-6789",
"drivers_license_number": "******7890",
"email_addresses": [
{
"email": "john.doe@example.com",
"email_type": "personal",
"is_primary": true
}
],
"phone_numbers": [
{
"phone_number": "+15555551234",
"phone_type": "mobile",
"is_primary": true,
"extension": "1234"
}
],
"addresses": [
{
"address_type": "home",
"is_primary": true,
"line1": "123 Main St",
"line2": "Apt 4B",
"city": "New York",
"state": "NY",
"zip": "10001",
"country_code": "US"
}
],
"employments": [
{
"business_name": "Acme Corp",
"id": "emp123xyz",
"person_id": "abc123xyz",
"role": "Software Engineer",
"start_date": "2023-01-15",
"end_date": "2024-12-31",
"actively_employed": true
}
],
"custom_fields": {
"preferred_contact_method": "Email",
"risk_tolerance": "Moderate"
}
}
],
"tier": "Platinum",
"became_client_at": "2024-01-01T00:00:00Z",
"profile_picture_url": "https://api.example.com/v1/households/abc123xyz/avatar",
"custom_fields": {
"pageport_lead_source": "Landing Page",
"industry": "Technology"
}
}{
"error": "invalid_json",
"detail": "<string>"
}{
"detail": "<string>"
}