Contact properties are custom fields you define to store extra information about your contacts: their subscription plan, location, birthday, or anything else useful to your business. You can create, update, and delete them through the Inrō public API or your AI agent (via the MCP Server).
For how properties work in the CRM and how to use them in filters and segments, see Contact Profiles & Custom Properties. This article covers managing them programmatically.
Property types
When you create a property, you pick one of these ten types:
text: Free text (the default).number: A numeric value.date: A date.email: An email address.phone: A phone number.url: A web link.boolean: True or false.list: A list of text values, stored as an array. Use it for several free-form entries with no preset options.single_choice: One value from a preset list of options. Requireschoices.multiple_choice: One or more values from a preset list of options. Requireschoices.
Via the public API
All endpoints are under /api/v1/contact_properties and need a Bearer token (see The Inrō Private API: Getting Started).
Create a property
POST /api/v1/contact_properties{ "contact_property": { "title": "Subscription Plan", "property_type": "single_choice", "choices": ["Free", "Pro", "Business"] }}
Returns the new property with its auto-generated slug (here, subscription-plan) and a 201 status. You can also pass an optional description, and agent_active: true to let your AI agent detect and fill this property during conversations.
Update a property
Updates are keyed by slug, not by a numeric ID:
PUT /api/v1/contact_properties/:slug{ "contact_property": { "title": "Plan", "choices": ["Starter", "Pro", "Business"] }}
Only the fields you include change. Returns 200.
Delete a property
DELETE /api/v1/contact_properties/:slug
Returns 204.
⚠️ Deleting a property is irreversible. Every stored value for that property, across all your contacts, is deleted with it.
Via your AI agent (MCP)
If you've connected Claude or ChatGPT to Inrō, you can manage properties right in a conversation:
Create: "Create a contact property called 'Birthday' with type date"
Update: "Rename the 'Plan' property to 'Subscription Plan' and add a 'Business' option"
Delete: "Delete the contact property with slug 'old-field'"
Your agent uses the create_contact_property, update_contact_property, and delete_contact_property tools for you.
🐾 Netsuke's Tips
The
slugis generated from the title when you create the property, and it's what update and delete calls use. List your properties first (GET /api/v1/contact_properties) if you're not sure of a slug.Changing a property's type after it has values can leave old values behind. Decide on the type up front where you can.
Set
agent_activeon properties you want filled automatically, like email or a plan tier, so your AI agent captures them as it chats.
What's next?
Contact Profiles & Custom Properties for how properties show up and work across the CRM.
Update Contacts in Bulk via API or MCP to set property values on many contacts at once.
Connect Your AI Agent to Inrō with the MCP Server to manage everything by chat.
