REST API reference

Data attributes

Define the custom fields stored on people, companies, conversations and tickets.

Custom attributes hold your own data — plan, seats, MRR, invoice numbers — and are validated against their type on every write. Reads need data_attributes:read; changes need data_attributes:write.

The data attribute object

A custom attribute definition.

Fields

object string
Always data_attribute.
id string
Unique id.
entity enum
contact, company, conversation or ticket.
key string
snake_case key used in customAttributes. Can’t change.
label string
Name shown in the dashboard.
type enum
string, number, boolean, date, list, url, multiline. Can’t change.
options array | null
{ value, label } choices for list attributes.
description string | null
Help text.
requiredToClose boolean
Conversation attributes teammates must fill before closing.
visibleToCustomer boolean
Shown to the customer (conversation attributes).
archived boolean
Hidden from new use; values are kept.
createdAt timestamp
Created.
Example data_attribute
{  "object": "data_attribute",  "id": "0199a8f5-7b8c-7d9e-9f0a-1b2c3d4e5f6a",  "entity": "contact",  "key": "seats",  "label": "Seats",  "type": "number",  "options": null,  "description": "Paid seats on the customer’s plan.",  "requiredToClose": false,  "visibleToCustomer": false,  "archived": false,  "createdAt": "2025-03-02T11:20:00.000Z"}

List data attributes

GET /v1 /data-attributes data_attributes:read

Custom attributes by entity and label. Not paginated. GET /data-attributes/{id} returns one.

Query parameters

entity enum
contact, company, conversation or ticket.
includeArchived boolean
Include archived attributes.
curl https://api.rabbitblaze.com/v1/data-attributes?entity=contact \  -H "Authorization: Bearer $RABBITBLAZE_API_KEY"
const res = await fetch("https://api.rabbitblaze.com/v1/data-attributes?entity=contact", {  headers: {    Authorization: `Bearer ${process.env.RABBITBLAZE_API_KEY}`,  },})const data = await res.json()
import osimport requests res = requests.get(    "https://api.rabbitblaze.com/v1/data-attributes",    headers={"Authorization": f"Bearer {os.environ['RABBITBLAZE_API_KEY']}"},    params={        "entity": "contact",    },)res.raise_for_status()data = res.json()
Response · 200 OK
{  "items": [    {      "object": "data_attribute",      "id": "0199a8f5-7b8c-7d9e-9f0a-1b2c3d4e5f6a",      "entity": "contact",      "key": "seats",      "label": "Seats",      "type": "number",      "options": null,      "description": "Paid seats on the customer’s plan.",      "requiredToClose": false,      "visibleToCustomer": false,      "archived": false,      "createdAt": "2025-03-02T11:20:00.000Z"    }  ],  "nextCursor": null}

Create a data attribute

POST /v1 /data-attributes data_attributes:write

Creates a custom attribute. A key that already exists for the entity answers 409 conflict.

Body

entity enum required
contact, company, conversation or ticket.
label string required
Up to 120 characters.
type enum required
string, number, boolean, date, list, url, multiline
key string
snake_case, up to 64 characters. Derived from the label when omitted.
options array
[{ value, label? }] for list attributes (up to 200).
description string | null
Up to 500 characters.
requiredToClose boolean
Conversation attributes only.
visibleToCustomer boolean
Show it to the customer.
curl -X POST https://api.rabbitblaze.com/v1/data-attributes \  -H "Authorization: Bearer $RABBITBLAZE_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "entity": "contact",  "label": "Seats",  "type": "number",  "description": "Paid seats on the customer’s plan."}'
const res = await fetch("https://api.rabbitblaze.com/v1/data-attributes", {  method: "POST",  headers: {    Authorization: `Bearer ${process.env.RABBITBLAZE_API_KEY}`,    "Content-Type": "application/json",  },  body: JSON.stringify({    entity: "contact",    label: "Seats",    type: "number",    description: "Paid seats on the customer’s plan.",  }),})const data = await res.json()
import osimport requests res = requests.post(    "https://api.rabbitblaze.com/v1/data-attributes",    headers={"Authorization": f"Bearer {os.environ['RABBITBLAZE_API_KEY']}"},    json={        "entity": "contact",        "label": "Seats",        "type": "number",        "description": "Paid seats on the customer’s plan.",    },)res.raise_for_status()data = res.json()
Response · 201 Created
{  "object": "data_attribute",  "id": "0199a8f5-7b8c-7d9e-9f0a-1b2c3d4e5f6a",  "entity": "contact",  "key": "seats",  "label": "Seats",  "type": "number",  "options": null,  "description": "Paid seats on the customer’s plan.",  "requiredToClose": false,  "visibleToCustomer": false,  "archived": false,  "createdAt": "2025-03-02T11:20:00.000Z"}

Update a data attribute

PATCH /v1 /data-attributes/{id} data_attributes:write

Change the label, help text, options or flags, or archive it. key and type can’t change.

Path parameters

id string required
The attribute id.

Body

label string
New label.
description string | null
New help text.
options array
Replaces the list options.
requiredToClose boolean
Conversation attributes only.
visibleToCustomer boolean
Show it to the customer.
archived boolean
Archive or restore.
curl -X PATCH https://api.rabbitblaze.com/v1/data-attributes/0199a8f5-7b8c-7d9e-9f0a-1b2c3d4e5f6a \  -H "Authorization: Bearer $RABBITBLAZE_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "label": "Paid seats"}'
const res = await fetch("https://api.rabbitblaze.com/v1/data-attributes/0199a8f5-7b8c-7d9e-9f0a-1b2c3d4e5f6a", {  method: "PATCH",  headers: {    Authorization: `Bearer ${process.env.RABBITBLAZE_API_KEY}`,    "Content-Type": "application/json",  },  body: JSON.stringify({    label: "Paid seats",  }),})const data = await res.json()
import osimport requests res = requests.patch(    "https://api.rabbitblaze.com/v1/data-attributes/0199a8f5-7b8c-7d9e-9f0a-1b2c3d4e5f6a",    headers={"Authorization": f"Bearer {os.environ['RABBITBLAZE_API_KEY']}"},    json={        "label": "Paid seats",    },)res.raise_for_status()data = res.json()
Response · 200 OK
{  "object": "data_attribute",  "id": "0199a8f5-7b8c-7d9e-9f0a-1b2c3d4e5f6a",  "entity": "contact",  "key": "seats",  "label": "Paid seats",  "type": "number",  "options": null,  "description": "Paid seats on the customer’s plan.",  "requiredToClose": false,  "visibleToCustomer": false,  "archived": false,  "createdAt": "2025-03-02T11:20:00.000Z"}