Skip to content

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 us
Affinity

Use Cases

Why integrate with Affinity

Common scenarios for SaaS companies building Affinity integrations for their customers.

01

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.

02

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.

03

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.

04

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.

05

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

View Docs

Contacts

The contacts represent an existing point of contact at a company in a CRM.

View Docs

Engagement Types

The engagement types represent an interaction activity in a CRM.

View Docs

Engagements

The engagements represent an interaction noted in a CRM.

View Docs

Fields

The fields of entities in a CRM.

View Docs

Notes

The notes represent a note on another object in a CRM.

View Docs

Opportunities

The opportunities represent an opportunity in a CRM.

View Docs

Unified User Directory API

How It Works

From zero to integrated

Go live with Affinity in under an hour. No boilerplate, no maintenance burden.

01

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.

02

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.

03

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.

04

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.

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