curl --request PUT \
--url https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "Industry",
"type": "dropdown",
"object_types": [
"companies",
"products"
],
"options": {
"choices": [
"Retail",
"Wholesale",
"DTC"
],
"minLength": 0,
"maxLength": 255,
"helpText": "Choose the primary sales channel"
}
}
'import requests
url = "https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}"
payload = {
"label": "Industry",
"type": "dropdown",
"object_types": ["companies", "products"],
"options": {
"choices": ["Retail", "Wholesale", "DTC"],
"minLength": 0,
"maxLength": 255,
"helpText": "Choose the primary sales channel"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
label: 'Industry',
type: 'dropdown',
object_types: ['companies', 'products'],
options: {
choices: ['Retail', 'Wholesale', 'DTC'],
minLength: 0,
maxLength: 255,
helpText: 'Choose the primary sales channel'
}
})
};
fetch('https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}', 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/custom-fields/{customFieldId}",
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([
'label' => 'Industry',
'type' => 'dropdown',
'object_types' => [
'companies',
'products'
],
'options' => [
'choices' => [
'Retail',
'Wholesale',
'DTC'
],
'minLength' => 0,
'maxLength' => 255,
'helpText' => 'Choose the primary sales channel'
]
]),
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/custom-fields/{customFieldId}"
payload := strings.NewReader("{\n \"label\": \"Industry\",\n \"type\": \"dropdown\",\n \"object_types\": [\n \"companies\",\n \"products\"\n ],\n \"options\": {\n \"choices\": [\n \"Retail\",\n \"Wholesale\",\n \"DTC\"\n ],\n \"minLength\": 0,\n \"maxLength\": 255,\n \"helpText\": \"Choose the primary sales channel\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"Industry\",\n \"type\": \"dropdown\",\n \"object_types\": [\n \"companies\",\n \"products\"\n ],\n \"options\": {\n \"choices\": [\n \"Retail\",\n \"Wholesale\",\n \"DTC\"\n ],\n \"minLength\": 0,\n \"maxLength\": 255,\n \"helpText\": \"Choose the primary sales channel\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"Industry\",\n \"type\": \"dropdown\",\n \"object_types\": [\n \"companies\",\n \"products\"\n ],\n \"options\": {\n \"choices\": [\n \"Retail\",\n \"Wholesale\",\n \"DTC\"\n ],\n \"minLength\": 0,\n \"maxLength\": 255,\n \"helpText\": \"Choose the primary sales channel\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 123,
"label": "Industry",
"type": "dropdown",
"object_types": [
"companies",
"products"
],
"options": {
"choices": [
"Retail",
"Wholesale",
"DTC"
],
"minLength": 0,
"maxLength": 255,
"helpText": "Choose the primary sales channel"
},
"created_at": "2026-04-20T14:30:00Z",
"updated_at": "2026-04-20T14:30:00Z"
}
}{
"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
}{
"error": "Not Found",
"message": "The requested resource could not be found",
"status_code": 404
}{
"message": "<string>",
"errors": {}
}Update a custom field definition
Update a custom field definition’s label, type, options, and linked entity
types. object_types is required on update — pass an empty array to unlink
the field from all entity types.
For partial updates that don’t replace object_types, use PATCH instead.
curl --request PUT \
--url https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "Industry",
"type": "dropdown",
"object_types": [
"companies",
"products"
],
"options": {
"choices": [
"Retail",
"Wholesale",
"DTC"
],
"minLength": 0,
"maxLength": 255,
"helpText": "Choose the primary sales channel"
}
}
'import requests
url = "https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}"
payload = {
"label": "Industry",
"type": "dropdown",
"object_types": ["companies", "products"],
"options": {
"choices": ["Retail", "Wholesale", "DTC"],
"minLength": 0,
"maxLength": 255,
"helpText": "Choose the primary sales channel"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
label: 'Industry',
type: 'dropdown',
object_types: ['companies', 'products'],
options: {
choices: ['Retail', 'Wholesale', 'DTC'],
minLength: 0,
maxLength: 255,
helpText: 'Choose the primary sales channel'
}
})
};
fetch('https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}', 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/custom-fields/{customFieldId}",
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([
'label' => 'Industry',
'type' => 'dropdown',
'object_types' => [
'companies',
'products'
],
'options' => [
'choices' => [
'Retail',
'Wholesale',
'DTC'
],
'minLength' => 0,
'maxLength' => 255,
'helpText' => 'Choose the primary sales channel'
]
]),
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/custom-fields/{customFieldId}"
payload := strings.NewReader("{\n \"label\": \"Industry\",\n \"type\": \"dropdown\",\n \"object_types\": [\n \"companies\",\n \"products\"\n ],\n \"options\": {\n \"choices\": [\n \"Retail\",\n \"Wholesale\",\n \"DTC\"\n ],\n \"minLength\": 0,\n \"maxLength\": 255,\n \"helpText\": \"Choose the primary sales channel\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"Industry\",\n \"type\": \"dropdown\",\n \"object_types\": [\n \"companies\",\n \"products\"\n ],\n \"options\": {\n \"choices\": [\n \"Retail\",\n \"Wholesale\",\n \"DTC\"\n ],\n \"minLength\": 0,\n \"maxLength\": 255,\n \"helpText\": \"Choose the primary sales channel\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{companyName}.api.joinluminous.com/external/api/v1/custom-fields/{customFieldId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"Industry\",\n \"type\": \"dropdown\",\n \"object_types\": [\n \"companies\",\n \"products\"\n ],\n \"options\": {\n \"choices\": [\n \"Retail\",\n \"Wholesale\",\n \"DTC\"\n ],\n \"minLength\": 0,\n \"maxLength\": 255,\n \"helpText\": \"Choose the primary sales channel\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 123,
"label": "Industry",
"type": "dropdown",
"object_types": [
"companies",
"products"
],
"options": {
"choices": [
"Retail",
"Wholesale",
"DTC"
],
"minLength": 0,
"maxLength": 255,
"helpText": "Choose the primary sales channel"
},
"created_at": "2026-04-20T14:30:00Z",
"updated_at": "2026-04-20T14:30:00Z"
}
}{
"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
}{
"error": "Not Found",
"message": "The requested resource could not be found",
"status_code": 404
}{
"message": "<string>",
"errors": {}
}Authorizations
Authenticate using a bearer token. To create a token, navigate to /settings/api-tokens and click Create API Token.
Path Parameters
The unique identifier of the custom field definition
Body
Display label for the custom field. Must be unique across definitions.
255"Industry"
Data type of the custom field
number, date, string, dropdown "dropdown"
Entity types this custom field applies to. On update this field is
required — pass an empty array to unlink all entity types.
Accepted values include logical names like sales-orders, sales-order-items,
invoices, products, companies, purchase-orders, etc. (matches the set
accepted by the internal morph-type resolver).
["companies", "products"]
Optional configuration for the field. Required when type is dropdown
(must include a non-empty choices array).
Show child attributes
Show child attributes
Response
Custom field definition successfully updated
Show child attributes
Show child attributes