Skip to main content
POST
Create a custom property

Authorizations

Authorization
string
header
required

An org API key: Authorization: Bearer oak_….

Body

application/json
key
string
required
Minimum string length: 1
label
string
required
Minimum string length: 1
kind
enum<string>
required

Type of a user-defined custom property on a contact.

The order mirrors the Postgres crm_property_kind_enum: TEXTAREA was appended in 0014 (alongside MULTI_SELECT), EMAIL and MONEY in 0025, FILE in 0065, URL in 0167, MULTI_FILE in 0186. EMAIL and URL store into value_text (like TEXT) and MONEY into value_number (like NUMBER) — they're presentation/validation refinements of those base columns, not new storage shapes. FILE and MULTI_FILE both store an array of S3 file references in value_json (see ciarem_crm.file_property); they differ only in cardinality — FILE holds at most one file, MULTI_FILE a capped gallery. Pre-0186, FILE meant the gallery; 0186 renamed those rows to MULTI_FILE and repurposed FILE as the single-file kind (it was catalogs-only, so no contact data existed). The bytes live in the record-media bucket.

Available options:
TEXT,
NUMBER,
RADIO,
DROPDOWN,
BOOLEAN,
DATE,
TEXTAREA,
MULTI_SELECT,
EMAIL,
MONEY,
FILE,
URL,
MULTI_FILE
description
string | null
Maximum string length: 150
options
PublicPropertyOption · object[] | null
currency
enum<string> | null

ISO 4217 alpha code of a circulating currency.

The denomination of a MONEY property definition. Active circulating codes only — the fund/metal/testing X-codes (XAU, XDR, XTS, XXX, …) are excluded, while the circulating X-currencies (XAF, XOF, XPF, XCD) stay. Stored as TEXT (no Postgres enum): the set is ISO's, not ours, and codes retire/appear with currency reforms (SLL→SLE, ZWL→ZWG) — validation lives at the API boundary where it can evolve without a migration.

Available options:
AED,
AFN,
ALL,
AMD,
ANG,
AOA,
ARS,
AUD,
AWG,
AZN,
BAM,
BBD,
BDT,
BGN,
BHD,
BIF,
BMD,
BND,
BOB,
BRL,
BSD,
BTN,
BWP,
BYN,
BZD,
CAD,
CDF,
CHF,
CLP,
CNY,
COP,
CRC,
CUP,
CVE,
CZK,
DJF,
DKK,
DOP,
DZD,
EGP,
ERN,
ETB,
EUR,
FJD,
FKP,
GBP,
GEL,
GHS,
GIP,
GMD,
GNF,
GTQ,
GYD,
HKD,
HNL,
HTG,
HUF,
IDR,
ILS,
INR,
IQD,
IRR,
ISK,
JMD,
JOD,
JPY,
KES,
KGS,
KHR,
KMF,
KPW,
KRW,
KWD,
KYD,
KZT,
LAK,
LBP,
LKR,
LRD,
LSL,
LYD,
MAD,
MDL,
MGA,
MKD,
MMK,
MNT,
MOP,
MRU,
MUR,
MVR,
MWK,
MXN,
MYR,
MZN,
NAD,
NGN,
NIO,
NOK,
NPR,
NZD,
OMR,
PAB,
PEN,
PGK,
PHP,
PKR,
PLN,
PYG,
QAR,
RON,
RSD,
RUB,
RWF,
SAR,
SBD,
SCR,
SDG,
SEK,
SGD,
SHP,
SLE,
SOS,
SRD,
SSP,
STN,
SVC,
SYP,
SZL,
THB,
TJS,
TMT,
TND,
TOP,
TRY,
TTD,
TWD,
TZS,
UAH,
UGX,
USD,
UYU,
UZS,
VES,
VND,
VUV,
WST,
XAF,
XCD,
XOF,
XPF,
YER,
ZAR,
ZMW,
ZWG
required
boolean
default:false

Response

Successful Response

id
string
required
key
string
required
label
string
required
description
string | null
required
kind
enum<string>
required

Type of a user-defined custom property on a contact.

The order mirrors the Postgres crm_property_kind_enum: TEXTAREA was appended in 0014 (alongside MULTI_SELECT), EMAIL and MONEY in 0025, FILE in 0065, URL in 0167, MULTI_FILE in 0186. EMAIL and URL store into value_text (like TEXT) and MONEY into value_number (like NUMBER) — they're presentation/validation refinements of those base columns, not new storage shapes. FILE and MULTI_FILE both store an array of S3 file references in value_json (see ciarem_crm.file_property); they differ only in cardinality — FILE holds at most one file, MULTI_FILE a capped gallery. Pre-0186, FILE meant the gallery; 0186 renamed those rows to MULTI_FILE and repurposed FILE as the single-file kind (it was catalogs-only, so no contact data existed). The bytes live in the record-media bucket.

Available options:
TEXT,
NUMBER,
RADIO,
DROPDOWN,
BOOLEAN,
DATE,
TEXTAREA,
MULTI_SELECT,
EMAIL,
MONEY,
FILE,
URL,
MULTI_FILE
options
PublicPropertyOption · object[] | null
required
currency
enum<string> | null
required

ISO 4217 alpha code of a circulating currency.

The denomination of a MONEY property definition. Active circulating codes only — the fund/metal/testing X-codes (XAU, XDR, XTS, XXX, …) are excluded, while the circulating X-currencies (XAF, XOF, XPF, XCD) stay. Stored as TEXT (no Postgres enum): the set is ISO's, not ours, and codes retire/appear with currency reforms (SLL→SLE, ZWL→ZWG) — validation lives at the API boundary where it can evolve without a migration.

Available options:
AED,
AFN,
ALL,
AMD,
ANG,
AOA,
ARS,
AUD,
AWG,
AZN,
BAM,
BBD,
BDT,
BGN,
BHD,
BIF,
BMD,
BND,
BOB,
BRL,
BSD,
BTN,
BWP,
BYN,
BZD,
CAD,
CDF,
CHF,
CLP,
CNY,
COP,
CRC,
CUP,
CVE,
CZK,
DJF,
DKK,
DOP,
DZD,
EGP,
ERN,
ETB,
EUR,
FJD,
FKP,
GBP,
GEL,
GHS,
GIP,
GMD,
GNF,
GTQ,
GYD,
HKD,
HNL,
HTG,
HUF,
IDR,
ILS,
INR,
IQD,
IRR,
ISK,
JMD,
JOD,
JPY,
KES,
KGS,
KHR,
KMF,
KPW,
KRW,
KWD,
KYD,
KZT,
LAK,
LBP,
LKR,
LRD,
LSL,
LYD,
MAD,
MDL,
MGA,
MKD,
MMK,
MNT,
MOP,
MRU,
MUR,
MVR,
MWK,
MXN,
MYR,
MZN,
NAD,
NGN,
NIO,
NOK,
NPR,
NZD,
OMR,
PAB,
PEN,
PGK,
PHP,
PKR,
PLN,
PYG,
QAR,
RON,
RSD,
RUB,
RWF,
SAR,
SBD,
SCR,
SDG,
SEK,
SGD,
SHP,
SLE,
SOS,
SRD,
SSP,
STN,
SVC,
SYP,
SZL,
THB,
TJS,
TMT,
TND,
TOP,
TRY,
TTD,
TWD,
TZS,
UAH,
UGX,
USD,
UYU,
UZS,
VES,
VND,
VUV,
WST,
XAF,
XCD,
XOF,
XPF,
YER,
ZAR,
ZMW,
ZWG
required
boolean
required
order_idx
integer
required
archived_at
string<date-time> | null
required
created_at
string<date-time>
required
updated_at
string<date-time>
required