curl --request POST \
--url https://{companyName}.api.joinluminous.com/external/api/v1/contacts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "John",
"last_name": "Smith",
"company_id": 123,
"company_ids": [
123,
456
],
"email": "john.smith@acmecorp.com",
"phone_1": "555-987-6543",
"phone_2": "555-555-5555",
"receiving_bank_name": "<string>",
"receiving_bank_address": "<string>",
"is_primary": false,
"receive_quotation_pdf": false,
"receive_purchase_order_pdf": false,
"receive_purchase_order_invoice_pdf": false,
"tags": [
"sales",
"primary"
],
"password": "<string>"
}
'import requests
url = "https://{companyName}.api.joinluminous.com/external/api/v1/contacts"
payload = {
"first_name": "John",
"last_name": "Smith",
"company_id": 123,
"company_ids": [123, 456],
"email": "john.smith@acmecorp.com",
"phone_1": "555-987-6543",
"phone_2": "555-555-5555",
"receiving_bank_name": "<string>",
"receiving_bank_address": "<string>",
"is_primary": False,
"receive_quotation_pdf": False,
"receive_purchase_order_pdf": False,
"receive_purchase_order_invoice_pdf": False,
"tags": ["sales", "primary"],
"password": "<string>"
}
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: 'John',
last_name: 'Smith',
company_id: 123,
company_ids: [123, 456],
email: 'john.smith@acmecorp.com',
phone_1: '555-987-6543',
phone_2: '555-555-5555',
receiving_bank_name: '<string>',
receiving_bank_address: '<string>',
is_primary: false,
receive_quotation_pdf: false,
receive_purchase_order_pdf: false,
receive_purchase_order_invoice_pdf: false,
tags: ['sales', 'primary'],
password: '<string>'
})
};
fetch('https://{companyName}.api.joinluminous.com/external/api/v1/contacts', 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://{companyName}.api.joinluminous.com/external/api/v1/contacts",
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' => 'John',
'last_name' => 'Smith',
'company_id' => 123,
'company_ids' => [
123,
456
],
'email' => 'john.smith@acmecorp.com',
'phone_1' => '555-987-6543',
'phone_2' => '555-555-5555',
'receiving_bank_name' => '<string>',
'receiving_bank_address' => '<string>',
'is_primary' => false,
'receive_quotation_pdf' => false,
'receive_purchase_order_pdf' => false,
'receive_purchase_order_invoice_pdf' => false,
'tags' => [
'sales',
'primary'
],
'password' => '<string>'
]),
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://{companyName}.api.joinluminous.com/external/api/v1/contacts"
payload := strings.NewReader("{\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"company_id\": 123,\n \"company_ids\": [\n 123,\n 456\n ],\n \"email\": \"john.smith@acmecorp.com\",\n \"phone_1\": \"555-987-6543\",\n \"phone_2\": \"555-555-5555\",\n \"receiving_bank_name\": \"<string>\",\n \"receiving_bank_address\": \"<string>\",\n \"is_primary\": false,\n \"receive_quotation_pdf\": false,\n \"receive_purchase_order_pdf\": false,\n \"receive_purchase_order_invoice_pdf\": false,\n \"tags\": [\n \"sales\",\n \"primary\"\n ],\n \"password\": \"<string>\"\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://{companyName}.api.joinluminous.com/external/api/v1/contacts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"company_id\": 123,\n \"company_ids\": [\n 123,\n 456\n ],\n \"email\": \"john.smith@acmecorp.com\",\n \"phone_1\": \"555-987-6543\",\n \"phone_2\": \"555-555-5555\",\n \"receiving_bank_name\": \"<string>\",\n \"receiving_bank_address\": \"<string>\",\n \"is_primary\": false,\n \"receive_quotation_pdf\": false,\n \"receive_purchase_order_pdf\": false,\n \"receive_purchase_order_invoice_pdf\": false,\n \"tags\": [\n \"sales\",\n \"primary\"\n ],\n \"password\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{companyName}.api.joinluminous.com/external/api/v1/contacts")
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\": \"John\",\n \"last_name\": \"Smith\",\n \"company_id\": 123,\n \"company_ids\": [\n 123,\n 456\n ],\n \"email\": \"john.smith@acmecorp.com\",\n \"phone_1\": \"555-987-6543\",\n \"phone_2\": \"555-555-5555\",\n \"receiving_bank_name\": \"<string>\",\n \"receiving_bank_address\": \"<string>\",\n \"is_primary\": false,\n \"receive_quotation_pdf\": false,\n \"receive_purchase_order_pdf\": false,\n \"receive_purchase_order_invoice_pdf\": false,\n \"tags\": [\n \"sales\",\n \"primary\"\n ],\n \"password\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "789123",
"created_at": "2023-03-15T14:30:00Z",
"updated_at": "2023-03-15T14:30:00Z",
"status": "active",
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@acmecorp.com",
"phone": "555-987-6543",
"phone_2": "555-555-5555",
"full_name": "John Smith",
"company_id": "123456",
"company": {
"id": "123456",
"name": "Acme Corporation"
},
"is_primary": true,
"receive_quotation_pdf": false,
"receive_purchase_order_pdf": false,
"receive_purchase_order_invoice_pdf": false,
"has_portal_login": false,
"companies": [
{
"id": 123,
"name": "<string>",
"is_primary": true,
"receive_quotation_pdf": true,
"receive_purchase_order_pdf": true,
"receive_purchase_order_invoice_pdf": true
}
],
"tags": [
{
"id": 123,
"name": "<string>",
"description": "<string>",
"icon": "<string>",
"color": "<string>"
}
]
}
}{
"error": "Unauthorized",
"message": "Authentication credentials are missing or invalid",
"status_code": 401
}{
"error": "Forbidden",
"message": "You do not have permission to access this resource",
"status_code": 403
}{
"message": "<string>",
"errors": {}
}Create a contact
Create a new contact. Requires first_name and either company_id or company_ids.
All other fields are optional and can be provided when creating the contact or updated later.
B2B Portal Login
Include an optional password field (min 8 characters) to provision a B2B client portal login.
When password is provided, email is required. The response will include has_portal_login: true
when a portal login is linked.
curl --request POST \
--url https://{companyName}.api.joinluminous.com/external/api/v1/contacts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "John",
"last_name": "Smith",
"company_id": 123,
"company_ids": [
123,
456
],
"email": "john.smith@acmecorp.com",
"phone_1": "555-987-6543",
"phone_2": "555-555-5555",
"receiving_bank_name": "<string>",
"receiving_bank_address": "<string>",
"is_primary": false,
"receive_quotation_pdf": false,
"receive_purchase_order_pdf": false,
"receive_purchase_order_invoice_pdf": false,
"tags": [
"sales",
"primary"
],
"password": "<string>"
}
'import requests
url = "https://{companyName}.api.joinluminous.com/external/api/v1/contacts"
payload = {
"first_name": "John",
"last_name": "Smith",
"company_id": 123,
"company_ids": [123, 456],
"email": "john.smith@acmecorp.com",
"phone_1": "555-987-6543",
"phone_2": "555-555-5555",
"receiving_bank_name": "<string>",
"receiving_bank_address": "<string>",
"is_primary": False,
"receive_quotation_pdf": False,
"receive_purchase_order_pdf": False,
"receive_purchase_order_invoice_pdf": False,
"tags": ["sales", "primary"],
"password": "<string>"
}
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: 'John',
last_name: 'Smith',
company_id: 123,
company_ids: [123, 456],
email: 'john.smith@acmecorp.com',
phone_1: '555-987-6543',
phone_2: '555-555-5555',
receiving_bank_name: '<string>',
receiving_bank_address: '<string>',
is_primary: false,
receive_quotation_pdf: false,
receive_purchase_order_pdf: false,
receive_purchase_order_invoice_pdf: false,
tags: ['sales', 'primary'],
password: '<string>'
})
};
fetch('https://{companyName}.api.joinluminous.com/external/api/v1/contacts', 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://{companyName}.api.joinluminous.com/external/api/v1/contacts",
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' => 'John',
'last_name' => 'Smith',
'company_id' => 123,
'company_ids' => [
123,
456
],
'email' => 'john.smith@acmecorp.com',
'phone_1' => '555-987-6543',
'phone_2' => '555-555-5555',
'receiving_bank_name' => '<string>',
'receiving_bank_address' => '<string>',
'is_primary' => false,
'receive_quotation_pdf' => false,
'receive_purchase_order_pdf' => false,
'receive_purchase_order_invoice_pdf' => false,
'tags' => [
'sales',
'primary'
],
'password' => '<string>'
]),
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://{companyName}.api.joinluminous.com/external/api/v1/contacts"
payload := strings.NewReader("{\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"company_id\": 123,\n \"company_ids\": [\n 123,\n 456\n ],\n \"email\": \"john.smith@acmecorp.com\",\n \"phone_1\": \"555-987-6543\",\n \"phone_2\": \"555-555-5555\",\n \"receiving_bank_name\": \"<string>\",\n \"receiving_bank_address\": \"<string>\",\n \"is_primary\": false,\n \"receive_quotation_pdf\": false,\n \"receive_purchase_order_pdf\": false,\n \"receive_purchase_order_invoice_pdf\": false,\n \"tags\": [\n \"sales\",\n \"primary\"\n ],\n \"password\": \"<string>\"\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://{companyName}.api.joinluminous.com/external/api/v1/contacts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"company_id\": 123,\n \"company_ids\": [\n 123,\n 456\n ],\n \"email\": \"john.smith@acmecorp.com\",\n \"phone_1\": \"555-987-6543\",\n \"phone_2\": \"555-555-5555\",\n \"receiving_bank_name\": \"<string>\",\n \"receiving_bank_address\": \"<string>\",\n \"is_primary\": false,\n \"receive_quotation_pdf\": false,\n \"receive_purchase_order_pdf\": false,\n \"receive_purchase_order_invoice_pdf\": false,\n \"tags\": [\n \"sales\",\n \"primary\"\n ],\n \"password\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{companyName}.api.joinluminous.com/external/api/v1/contacts")
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\": \"John\",\n \"last_name\": \"Smith\",\n \"company_id\": 123,\n \"company_ids\": [\n 123,\n 456\n ],\n \"email\": \"john.smith@acmecorp.com\",\n \"phone_1\": \"555-987-6543\",\n \"phone_2\": \"555-555-5555\",\n \"receiving_bank_name\": \"<string>\",\n \"receiving_bank_address\": \"<string>\",\n \"is_primary\": false,\n \"receive_quotation_pdf\": false,\n \"receive_purchase_order_pdf\": false,\n \"receive_purchase_order_invoice_pdf\": false,\n \"tags\": [\n \"sales\",\n \"primary\"\n ],\n \"password\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "789123",
"created_at": "2023-03-15T14:30:00Z",
"updated_at": "2023-03-15T14:30:00Z",
"status": "active",
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@acmecorp.com",
"phone": "555-987-6543",
"phone_2": "555-555-5555",
"full_name": "John Smith",
"company_id": "123456",
"company": {
"id": "123456",
"name": "Acme Corporation"
},
"is_primary": true,
"receive_quotation_pdf": false,
"receive_purchase_order_pdf": false,
"receive_purchase_order_invoice_pdf": false,
"has_portal_login": false,
"companies": [
{
"id": 123,
"name": "<string>",
"is_primary": true,
"receive_quotation_pdf": true,
"receive_purchase_order_pdf": true,
"receive_purchase_order_invoice_pdf": true
}
],
"tags": [
{
"id": 123,
"name": "<string>",
"description": "<string>",
"icon": "<string>",
"color": "<string>"
}
]
}
}{
"error": "Unauthorized",
"message": "Authentication credentials are missing or invalid",
"status_code": 401
}{
"error": "Forbidden",
"message": "You do not have permission to access this resource",
"status_code": 403
}{
"message": "<string>",
"errors": {}
}Authorizations
Authenticate using a bearer token. To create a token, navigate to /settings/api-tokens and click Create API Token.
Body
Contact's first name
255"John"
Contact's last name
255"Smith"
ID of the company this contact belongs to (provide either company_id or company_ids)
123
Multiple company associations (alternative to company_id; do not send both)
1[123, 456]
Contact's email address
255"john.smith@acmecorp.com"
Contact's primary phone number
255"555-987-6543"
Contact's secondary phone number
255"555-555-5555"
Bank name for receiving payments
255Bank address for receiving payments
255Whether this is the primary contact for the company
false
Whether the contact should receive quotation PDFs
false
Whether the contact should receive purchase order PDFs
false
Whether the contact should receive purchase order invoice PDFs
false
Tags to associate with the contact
255["sales", "primary"]
Optional. Creates a B2B portal login when email is also provided. Required: email must be set when password is provided.
8 - 255Response
Contact successfully created
Show child attributes
Show child attributes