CRM
Affinity
API integration
Ship CRM features without building the integration. Full Affinity API access via Proxy, normalized data through Unified APIs, and 50+ MCP-ready tools for AI agents — all extensible to your exact use case.
Talk to usUse Cases
Why integrate with Affinity
Common scenarios for SaaS companies building Affinity integrations for their customers.
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
Ship these features with Truto + Affinity
Concrete product features your team can ship faster by leveraging Truto’s Affinity integration instead of building from scratch.
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.
SuperAI
Affinity AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
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.
Why Truto
Why use Truto’s MCP server for Affinity
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 650+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
Unified APIs
Unified APIs for Affinity
Skip writing code for every integration. Use Truto’s category-specific Unified APIs out of the box or customize the mappings with AI.
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
How It Works
From zero to integrated
Go live with Affinity in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Affinity account
Use Truto’s frontend SDK to connect your customer’s Affinity account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Affinity
Truto’s Proxy API is a 1-to-1 mapping of the Affinity API. You call us, we call Affinity, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Affinity’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Affinity on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
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.
From the Blog
Affinity integration guides
Deep dives, architecture guides, and practical tutorials for building Affinity integrations.
Affinity
Get Affinity integrated into your app
Our team understands what it takes to make a Affinity integration successful. A short, crisp 30 minute call with folks who understand the problem.
Talk to us