← All action domains

Custom objects

11 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

New record

custom_objects.create_recordwriteconfirm

Create a custom-object record with validated field values and optional contact linkage. Queues custom_record_created for enabled workflows, which may send messages or incur provider charges according to their configured steps.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
type_idstring (uuid)requiredThe object type to create a record of.
valuesmap of string → objectrequiredThe record's field values, keyed by field key (see the type's fields from custom_objects.list_types). Example: {"address": "12 Oak St", "price": 950000}. A Team member (kind user) field takes a current team member's email address or user id.
primary_contact_idstring (uuid)optionalContact to file this record under. Shows the record on that contact's screen.

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.create_record \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "type_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "values": {}
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_create_record at https://app.chirply.io/api/mcp, same bearer token, same input.

New object type

custom_objects.create_typewriteadmin only

Create a custom object type — a new kind of record this account can store (e.g. "Property"). Takes the singular and plural names plus the typed fields records of this kind carry. The type immediately appears in the app's navigation and its records become creatable everywhere. Owners and admins only: a type is account SCHEMA, not a record — it changes the sidebar and the shape of everyone's data.

Parameters

FieldTypeRequiredDescription
name_singularstringrequiredWhat one record is called, e.g. "Property". Shown on buttons and headings.
name_pluralstringrequiredWhat many records are called, e.g. "Properties". Becomes the navigation label.
iconstringoptionalOptional icon name for the navigation row (a lucide icon name like "home").
keystringoptionalURL slug for the type (lowercase letters, digits, dashes; starts with a letter). Omit to derive it from the plural name. Permanent once created.
fieldsobject[]optionalThe fields records of this type carry, in display order. The first text field becomes each record's display name. Default: []
fields[].keystringoptionalStorage key for the field's values (snake_case, starts with a letter). Omit to derive it from the label. Keys are permanent once records exist.
fields[].labelstringrequiredThe field's name as people see it, e.g. "Purchase price".
fields[].kind"text" | "number" | "date" | "select" | "checkbox" | "url" | … 4 moreoptionalWhat the field holds: text, number, date (YYYY-MM-DD), select (one choice from `options`), checkbox (yes/no), url, phone, email, contact_link (free-form reference to a contact), or user (a Team member — one current account member, written as their email or user id and stored as the user id). Default: "text"
fields[].optionsstring[]optionalFor kind=select only: the choices people can pick. Must be non-empty for selects. Default: []
fields[].requiredbooleanoptionalWhen true, a record cannot be created without a value for this field. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.create_type \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name_singular": "Example",
    "name_plural": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_create_type at https://app.chirply.io/api/mcp, same bearer token, same input.

Delete a record

custom_objects.delete_recordwriteconfirm

Permanently delete one custom-object record and all of its stored values. This cannot be undone.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe record to delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.delete_record \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_delete_record at https://app.chirply.io/api/mcp, same bearer token, same input.

Record columns

custom_objects.get_column_layoutread

Read which columns you see on one custom object type's record list and in what order, plus every column that type could show (the record name, each of its fields, the linked contact, and dates). Personal to you — it does not affect what teammates see. Returns the type's defaults when you have never changed them.

Parameters

FieldTypeRequiredDescription
type_idstring (uuid)requiredThe object type whose list columns to read (from custom_objects.list_types).

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.get_column_layout \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "type_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_get_column_layout at https://app.chirply.io/api/mcp, same bearer token, same input.

Open a record

custom_objects.get_recordread

Fetch one custom-object record by id, with all of its stored field values and the contact it's linked to.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe record's id.

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.get_record \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_get_record at https://app.chirply.io/api/mcp, same bearer token, same input.

List records

custom_objects.list_recordsread

List the records of one custom object type, most recently updated first. Optionally filter to the records linked to a specific contact, to the records where a Team member field names someone ("properties where I'm the agent": member_field + member), or text-search across each record's stored values.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
type_idstring (uuid)requiredThe object type whose records to list (from custom_objects.list_types).
contact_idstring (uuid)optionalOnly records linked to this contact.
member_fieldstringoptionalKey of one of this type's Team member fields (kind "user"). Requires `member`.
memberstringoptionalWho `member_field` must name: "me" (the signed-in person; not available to API keys), a team member's user id, or their email address.
querystringoptionalText to match in a record's stored values (case-insensitive). Values of 2,000+ characters, such as raw import dumps, are not searched.

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.list_records \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "type_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_list_records at https://app.chirply.io/api/mcp, same bearer token, same input.

Custom objects

custom_objects.list_typesread

List this account's custom object types — the user-defined record types beyond contacts, companies and deals (e.g. Properties, Pets, Policies) — including each type's field definitions.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.list_types \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool custom_objects_list_types at https://app.chirply.io/api/mcp, same bearer token, same input.

Reset record columns

custom_objects.reset_column_layoutwrite

Forget your saved column choices for one custom object type's record list so it goes back to that type's default columns (the record name, its first few fields, the linked contact, and the first-added date). Personal to you, and affects only which columns are displayed — no record data is changed or deleted.

Parameters

FieldTypeRequiredDescription
type_idstring (uuid)requiredThe object type whose list columns to reset (from custom_objects.list_types).

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.reset_column_layout \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "type_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_reset_column_layout at https://app.chirply.io/api/mcp, same bearer token, same input.

Save record columns

custom_objects.set_column_layoutwrite

Choose which columns you see on one custom object type's record list and in what order — the array order IS the left-to-right order, and any column you leave out is hidden. Personal to you; teammates' lists are unaffected. Unknown keys are dropped and the record's Name column is always kept (it is the link into each record), so the list can never be left unusable. Call custom_objects.get_column_layout for the valid keys.

Parameters

FieldTypeRequiredDescription
type_idstring (uuid)requiredThe object type whose list columns to save (from custom_objects.list_types).
columnsstring[]requiredOrdered column keys, e.g. ['label','field:price','primary_contact']. A type's fields use the 'field:<field key>' form.

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.set_column_layout \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "type_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "columns": [
      "example"
    ]
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_set_column_layout at https://app.chirply.io/api/mcp, same bearer token, same input.

Edit a record

custom_objects.update_recordwriteconfirm

Update supplied fields or contact linkage on a custom record, validating its field definitions. Actual changes queue custom_record_updated for enabled workflows, which may send messages or incur provider charges according to their configured steps. Unchanged values do not emit events.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe record to edit.
valuesmap of string → objectoptionalField values to change, keyed by field key. A null or empty value clears an optional field; omitted keys are left alone.
primary_contact_idstring (uuid) (or null)optionalContact to link the record to, or null to unlink it.

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.update_record \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_update_record at https://app.chirply.io/api/mcp, same bearer token, same input.

Edit object type

custom_objects.update_typewriteadmin only

Rename a custom object type or change its icon, and optionally add new fields to it. Existing fields and records are untouched; the URL name (key) never changes. Owners and admins only, same as creating one.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe object type to edit.
name_singularstringoptionalWhat one record is called, e.g. "Property". Shown on buttons and headings.
name_pluralstringoptionalWhat many records are called, e.g. "Properties". Becomes the navigation label.
iconstring (or null)optionalOptional icon name for the navigation row (a lucide icon name like "home").
add_fieldsobject[]optionalNew fields to append to the type, in order after the existing ones. Default: []
add_fields[].keystringoptionalStorage key for the field's values (snake_case, starts with a letter). Omit to derive it from the label. Keys are permanent once records exist.
add_fields[].labelstringrequiredThe field's name as people see it, e.g. "Purchase price".
add_fields[].kind"text" | "number" | "date" | "select" | "checkbox" | "url" | … 4 moreoptionalWhat the field holds: text, number, date (YYYY-MM-DD), select (one choice from `options`), checkbox (yes/no), url, phone, email, contact_link (free-form reference to a contact), or user (a Team member — one current account member, written as their email or user id and stored as the user id). Default: "text"
add_fields[].optionsstring[]optionalFor kind=select only: the choices people can pick. Must be non-empty for selects. Default: []
add_fields[].requiredbooleanoptionalWhen true, a record cannot be created without a value for this field. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/custom_objects.update_type \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool custom_objects_update_type at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=custom_objects — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.