Create Custom Attributes in Attio
Create and manage custom attributes on Attio objects for structured data like BANT scores
Instructions
Create Custom Attributes in Attio
Add custom fields to People, Companies, and Deal records for storing structured qualification data, scores, and metadata.
Prerequisites
- Attio workspace with admin access
- Attio API key or MCP server connected (see
attio-mcp-setup)
Steps
1. Create a custom attribute via API
Endpoint: POST https://api.attio.com/v2/objects/{object_slug}/attributes
Headers:
Authorization: Bearer {ATTIO_API_KEY}
Content-Type: application/json
Example — create a numeric score field on Deals:
{
"data": {
"title": "BANT Budget Score",
"api_slug": "bant_budget_score",
"type": "number",
"is_required": false
}
}
Supported types: text, number, checkbox, date, select, multi_select, currency, rating, email, phone, url, person_reference, company_reference.
2. Create select-type attributes for categorical data
For fields with predefined options (e.g., qualification verdict):
{
"data": {
"title": "BANT Verdict",
"api_slug": "bant_verdict",
"type": "select",
"config": {
"options": [
{"title": "Qualified", "color": "green"},
{"title": "Needs Work", "color": "yellow"},
{"title": "Disqualified", "color": "red"}
]
}
}
}
3. Write values to custom attributes
Endpoint: PATCH https://api.attio.com/v2/objects/deals/records/{record_id}
{
"data": {
"values": {
"bant_budget_score": [{"value": 75}],
"bant_verdict": [{"option": "Qualified"}]
}
}
}
4. Query records by custom attribute
Filter deals by BANT score range:
POST https://api.attio.com/v2/objects/deals/records/query
{
"filter": {
"bant_composite_score": {
"gte": 70
}
},
"sorts": [
{"attribute": "bant_composite_score", "direction": "desc"}
]
}
5. Batch update attributes
For bulk BANT score updates (e.g., after re-scoring), iterate over records:
for each deal in deals:
PATCH /v2/objects/deals/records/{deal.id}
body: { data: { values: { bant_composite_score: [{ value: new_score }] } } }
Rate limit: 100 requests/second on Attio API.
Via Attio MCP Server
attio.create_attribute({
object: "deals",
title: "BANT Budget Score",
api_slug: "bant_budget_score",
type: "number"
})
attio.update_record({
object: "deals",
record_id: "...",
values: { bant_budget_score: 75 }
})
Alternatives
| Tool | Method | Notes | |------|--------|-------| | Attio | REST API / MCP | Native custom fields | | HubSpot | Properties API | Custom properties on any object | | Salesforce | Metadata API | Custom fields via Tooling API | | Pipedrive | Custom Fields API | Simple field CRUD | | Clarify | Schema API | Flexible object model |
Error Handling
409 CONFLICT: Attribute with that slug already exists. UseGET /v2/objects/{object}/attributesto check first.422 UNPROCESSABLE_ENTITY: Invalid type or missing required config. Verify the type string matches supported types.403 FORBIDDEN: API key lacks admin permissions. Custom attribute creation requires workspace admin role.