---
title: Affinity API Integration on Truto
slug: affinity
category: CRM
canonical: "https://truto.one/integrations/detail/affinity/"
---

# Affinity API Integration on Truto



**Category:** CRM  
**Status:** Generally available

## Unified APIs

### Unified CRM API

- **Accounts** — The accounts represent a company in a CRM.
- **Contacts** — The contacts represent an existing point of contact at a company in a CRM.
- **Engagement Types** — The engagement types represent an interaction activity in a CRM.
- **Engagements** — The engagements represent an interaction noted in a CRM.
- **Fields** — The fields of entities in a CRM.
- **Notes** — The notes represent a note on another object in a CRM.
- **Opportunities** — The opportunities represent an opportunity in a CRM.

### Unified User Directory API

- **Me** — 

## MCP-ready AI tools

Truto exposes 54 tools for Affinity that AI agents can call directly.

- **list_all_affinity_whoami** — Get information about the authenticated user and their Affinity instance. Returns tenant details (id, name, subdomain), user data (id, firstName, lastName, email), and grant metadata (type, scope, createdAt).
- **list_all_affinity_organizations** — List organizations in Affinity that match the search criteria. Returns key fields like organization details. Requires no parameters.
- **get_single_affinity_organization_by_id** — Get details about a specific organization in Affinity using id. Returns key fields such as id, name, domain, domains, person_ids, opportunity_ids, and list_entries including creator_id and created_at.
- **delete_a_affinity_organization_by_id** — Delete an organization in Affinity using id. Returns confirmation of deletion and related metadata in the response.
- **update_a_affinity_organization_by_id** — Update organization with id in Affinity. Returns updated fields such as name, domain, and associated person_ids.
- **create_a_affinity_organization** — Create a new organization in Affinity by providing name. Returns fields such as id, name, domain, domains, global, and person_ids in the response.
- **list_all_affinity_notes** — List all notes in Affinity. Returns key fields including id, creator_id, person_ids, organization_ids, opportunity_ids, content, is_meeting, and timestamps created_at and updated_at.
- **get_single_affinity_note_by_id** — Get a specific note in Affinity using id. Returns fields such as creator_id, content, person_ids, organization_ids, interaction details, and timestamps created_at and updated_at.
- **create_a_affinity_note** — Create a new note in Affinity. Requires content. Returns id, creator_id, person_ids, organization_ids, opportunity_ids, parent_id, content, type, created_at, and updated_at fields in the response.
- **update_a_affinity_note_by_id** — Update a specific note in Affinity by id with new content. Requires id and content. Returns the updated note object including fields like content, created_at, updated_at, and creator_id.
- **delete_a_affinity_note_by_id** — Delete a note in Affinity using id. Removes the specified note permanently.
- **list_all_affinity_opportunities** — List opportunities in Affinity that match search criteria. Returns id, name, person_ids, organization_ids, and list_entries in the response. Requires no parameters.
- **get_single_affinity_opportunity_by_id** — Get a specific opportunity in Affinity using id. Returns id, name, person_ids, organization_ids, and list_entries with details such as creator_id, list_id, entity_id, and created_at.
- **create_a_affinity_opportunity** — Create a new opportunity in Affinity with required parameters name and list_id. Returns the newly created opportunity resource including key details such as its id and name.
- **update_a_affinity_opportunity_by_id** — Update an existing opportunity in Affinity using id. Returns fields such as id, name, person_ids, organization_ids, and list_entries with details like creator_id and created_at.
- **delete_a_affinity_opportunity_by_id** — Delete an opportunity in Affinity. Requires id. Returns confirmation of deletion status in the response.
- **list_all_affinity_persons** — List persons in Affinity that match search criteria. Returns an array of person records including id, first_name, last_name, primary_email, and emails fields.
- **get_single_affinity_person_by_id** — Get a specific person in Affinity by id. Returns fields such as id, first_name, last_name, primary_email, emails, organization_ids, opportunity_ids, current_organization_ids, and list_entries.
- **create_a_affinity_person** — Create a new person in Affinity using first_name, last_name, and emails. Returns fields such as id, first_name, last_name, primary_email, emails, and organization_ids in the response.
- **update_a_affinity_person_by_id** — Update a person in Affinity using id. Returns updated person details including first_name, last_name, emails, and organization_ids.
- **delete_a_affinity_person_by_id** — Delete a person in Affinity using id. Removes the person record associated with the specified id and returns confirmation of successful deletion.
- **get_single_affinity_interaction_by_id** — Get details for a specific interaction in Affinity. Requires id and type. Returns fields including date, direction, manual_creator_id, persons, type, and notes for the interaction.
- **create_a_affinity_interaction** — Create a new interaction in Affinity with required parameters type, person_ids, content, and date. Returns fields such as id, date, attendees, type, title, notes, and persons associated with the interaction.
- **update_a_affinity_interaction_by_id** — Update an existing interaction in Affinity using id, type, and person_ids. Returns fields such as id, date, attendees, title, type, notes, and persons with their details for confirmation of update.
- **delete_a_affinity_interaction_by_id** — Delete a specific interaction in Affinity using id and type. Returns confirmation of successful deletion.
- **list_all_affinity_interactions** — List interactions in Affinity filtered by type, start_time, and end_time. Returns key fields such as interaction id, timestamps, participants, and related entities.
- **list_all_affinity_lists** — List all lists visible to the user in Affinity. Returns id, name, type, public, owner_id, and list_size fields for each list.
- **get_single_affinity_list_by_id** — Get details about a specific list in Affinity using id. Returns list attributes including id, type, name, public, owner_id, list_size, and fields with field id, name, value_type, allows_multiple, and dropdown_options.
- **create_a_affinity_list** — Create a new list in Affinity with specified name, type, and is_public parameters. Returns the created list with fields such as id, name, type, and is_public in the response.
- **list_all_affinity_fields** — List all fields in Affinity. Returns id, name, list_id, enrichment_source, value_type, allows_multiple, track_changes, and dropdown_options for each field.
- **create_a_affinity_field** — Create a new field in Affinity. Requires name, entity_type, and value_type. Returns id, name, list_id, enrichment_source, value_type, allows_multiple, track_changes, and dropdown_options for the created field.
- **delete_a_affinity_field_by_id** — Delete a specific field in Affinity using id. Returns confirmation of deletion.
- **list_all_affinity_person_fields** — Fetches an array of all the global fields that exist on people.
- **list_all_affinity_organization_fields** — List all global organization fields in Affinity. Returns id, name, value_type, allows_multiple, and dropdown_options for each field.
- **list_all_affinity_rate_limits** — Querying the rate limit endpoint will yield information about account (AKA organization)-level and API key-level rate limits and usage. The rate limit resource, a JSON body of data including limits, calls remaining, seconds until reset and call count.
- **list_all_affinity_list_entries** — Get all list entries for list_id in Affinity. Returns an array of list entries including id, list_id, creator_id, entity_id, created_at, and entity details such as type, first_name, last_name, and primary_email.
- **get_single_affinity_list_entry_by_id** — Get a specific list entry by list_id and id in Affinity. Returns fields id, list_id, creator_id, entity_id, created_at, and entity details including type, first_name, last_name, primary_email, and emails.
- **create_a_affinity_list_entry** — Create a new list entry in Affinity. Requires list_id and entity_id. Returns id, list_id, creator_id, entity_id, created_at, and entity details including type, first_name, last_name, and primary_email.
- **delete_a_affinity_list_entry_by_id** — Delete a specific list entry in Affinity. Requires list_id and id. Returns success indicating the deletion was completed. Also deletes all associated field values and, if part of an opportunity list, deletes the associated opportunity.
- **list_all_affinity_field_values** — Get all field values attached to a person, organization, opportunity, or list_entry in Affinity. Requires one of person_id, organization_id, opportunity_id, or list_entry_id. Returns id, field_id, entity_id, created_at, updated_at, and value fields.
- **create_a_affinity_field_value** — Create a new field value in Affinity using required parameters field_id, entity_id, and value. Returns id, field_id, entity_id, list_entry_id, created_at, updated_at, and value for the created field value.
- **update_a_affinity_field_value_by_id** — Update a field value in Affinity using id. Requires id. Returns the updated field value object with fields id, field_id, list_entry_id, entity_id, created_at, updated_at, and value reflecting the new data.
- **delete_a_affinity_field_value_by_id** — Delete a field value in Affinity. Requires id. Returns confirmation of deletion with relevant metadata fields if applicable.
- **list_all_affinity_field_values_changes** — List field-values-changes in Affinity for a specific field using field_id. Returns an array of changes including action_type, old_value, new_value, and timestamps relevant to the field’s modifications.
- **list_all_affinity_relationship_strength** — Get relationship strength in Affinity for a specific external_id. Returns key metrics such as score and influencing factors for the evaluated relationship.
- **list_all_affinity_reminders** — List reminders in Affinity filtered by optional parameters like person_id, organization_id, opportunity_id, creator_id, owner_id, completer_id, type, reset_type, status, due_before, and due_after. Returns reminders with fields such as id, type, content, created_at, due_date, status, creator, owner, person, organization, opportunity, and reminder_days.
- **get_single_affinity_reminder_by_id** — Get details of a specific reminder in Affinity using id. Returns id, type, created_at, content, due_date, status, and related person, creator, and owner information.
- **create_a_affinity_reminder** — Create a new reminder in Affinity. Requires owner_id, type, and due_date when type=0. Returns fields such as id, type, content, due_date, status, and creator in the response.
- **update_a_affinity_reminder_by_id** — Update a reminder in Affinity by id. Allows modifying fields such as type, reset_type, reminder_days, due_date, and content. Returns the updated reminder resource including id, type, content, due_date, status, and creator details.
- **delete_a_affinity_reminder_by_id** — Delete a specific reminder in Affinity. Requires id. Returns confirmation of successful deletion.
- **list_all_affinity_files** — List all files in Affinity. Returns entity_files array containing all files within your organization and next_page_token for pagination.
- **get_single_affinity_file_by_id** — Get a specific file in Affinity using id. Returns details of the entity file including metadata and file information.
- **affinity_files_download** — Download a specific file in Affinity using id. Returns the actual file corresponding to the id.
- **affinity_files_upload** — Upload file attachments in Affinity for a specific entity using person_id. Returns uploaded file details including id, file name, and associated entity information. Requires person_id and at least one file or files parameter.

## How it works

1. **Link your customer's Affinity account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Affinity.** The Proxy API is a 1-to-1 mapping of the Affinity API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Auto-populate deal pipelines from sourcing platforms** — If your SaaS product helps VCs or PE firms discover startups, you can push new organizations, founders, and list entries directly into your users' Affinity deal flow lists — eliminating manual data entry and ensuring no deal slips through the cracks.
- **Enrich Affinity records with real-time firmographic data** — Data enrichment platforms can write funding rounds, headcount, valuation, and other firmographic data into Affinity's custom field values, keeping your users' CRM current without requiring them to toggle between tools.
- **Log external engagement activity as interactions and notes** — If your product captures calls, meetings, or document views, you can log those events into Affinity as Interactions or Notes — giving investment teams a complete activity timeline without leaving their CRM.
- **Sync investor communication lists for targeted outreach** — Marketing and IR platforms can pull dynamic Affinity lists (e.g., 'Tier 1 LPs') to build audience segments, and write campaign engagement data back as notes, closing the loop between outreach and CRM tracking.
- **Attach executed documents directly to CRM records** — E-signature and deal room platforms can upload signed NDAs, term sheets, and other documents to the relevant Affinity organization or person record using file upload, and update custom status fields to reflect deal progress.

## What you can build

- **One-click deal intake to Affinity pipeline** — Automatically create an organization, associate a person, and add them as a list entry to a specific Affinity list when a new deal is submitted through your platform.
- **Relationship strength lookup for warm intro routing** — Query Affinity's relationship strength scores to surface which team member at a firm has the strongest connection to a target contact, and display that insight directly in your product.
- **Custom field sync for live data enrichment** — Map your product's data attributes to Affinity's global and list-specific custom fields, and keep them updated in real time using field value create and update operations.
- **Deal stage change history for analytics dashboards** — Pull field value changes from Affinity to reconstruct a timeline of deal stage transitions, enabling automated pipeline velocity and conversion rate reporting.
- **Automated document attachment and status update** — Upload executed documents to Affinity organization or person records via file upload and simultaneously update a custom status field to reflect the latest deal milestone.
- **Bidirectional contact and account sync via Unified CRM API** — Use Truto's Unified CRM API to read and write Accounts, Contacts, Notes, Opportunities, and Fields across Affinity and other CRMs with a single integration.

## FAQs

### What authentication method does the Affinity integration use?

Affinity uses API key authentication. Your end users generate an API key from their Affinity settings, and Truto securely manages the credential so you never handle raw keys in your application code.

### How does Affinity's list-based architecture map to standard CRM concepts?

Affinity uses Lists and List Entries instead of traditional pipeline stages. In Truto's Unified CRM API, these map to Opportunities and related objects, but if you need full fidelity — such as adding an organization to a specific list — you can use the native list_all_affinity_lists, create_a_affinity_list_entry, and related tools directly.

### Can I read and update Affinity's custom fields through Truto?

Yes. You can discover all global and list-specific fields using list_all_affinity_fields, list_all_affinity_person_fields, and list_all_affinity_organization_fields, then create, update, or delete individual field values using the field_values endpoints.

### What's the difference between Interactions and Notes in Affinity?

Interactions represent communication events like emails, calls, and meetings — they're the currency of Affinity's relationship intelligence. Notes are freeform annotations attached to a person, organization, or opportunity. Use create_a_affinity_interaction for logged calls or meetings, and create_a_affinity_note for general updates or app-generated activity entries.

### Does Truto handle Affinity's rate limits and pagination?

Yes. Truto manages pagination and rate limit handling automatically. You can also inspect current rate limit status using the list_all_affinity_rate_limits tool if you need visibility into usage.

### Can I upload and download files attached to Affinity records?

Yes. The integration supports affinity_files_upload to attach documents to records and affinity_files_download to retrieve them, along with listing and fetching file metadata via list_all_affinity_files and get_single_affinity_file_by_id.

## Related reading

- [Connect Affinity to Claude: Automate Activity Logs & Notes via MCP](https://truto.one/blog/connect-affinity-to-claude-automate-activity-logs-notes/) — Learn how to connect Affinity to Claude using a managed MCP server. Automate relationship intelligence, deal tracking, and interaction notes without building custom integrations.
- [Connect Affinity to ChatGPT: Manage Relationships & Track Deals via MCP](https://truto.one/blog/connect-affinity-to-chatgpt-manage-relationships-track-deals/) — Learn how to connect Affinity to ChatGPT using a managed MCP server. Automate CRM workflows, query relationship intelligence, and track deals without custom code.
- [How to Connect Affinity to AI Agents: Tool Calling & Workflow Automation](https://truto.one/blog/connect-affinity-to-ai-agents-sync-contacts-enrich-profiles/) — Learn how to connect Affinity to AI agents using Truto's /tools endpoint. Bind Affinity APIs to LangChain or LangGraph for autonomous CRM workflows.
