CRM · Beta
SoftSync
API integration
Ship CRM features without building the integration. Full SoftSync API access via Proxy and 80+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Built for specific customer use cases. Issues are resolved quickly.
Talk to usUse Cases
Why integrate with SoftSync
Common scenarios for SaaS companies building SoftSync integrations for their customers.
Enrich CRM records automatically in the background
Data enrichment platforms can read a customer's SoftSync schema, match fields dynamically, and push enriched attributes back into hundreds of records without disrupting existing data. Truto handles the auth and schema discovery so you can focus on the enrichment logic.
Log sales conversations and call outcomes into the CRM timeline
Dialers, meeting recorders, and sales engagement tools can push call summaries, transcripts, and outcomes directly into SoftSync as notes tied to the right record. Users get a complete history without ever leaving your product.
Power AI agents with semantic search over customer data
AI copilots and support bots can run natural-language queries against a customer's SoftSync workspace using hybrid vector + trigram search, surfacing the right records even without exact keyword matches. Ideal for grounding LLM responses in real CRM context.
Trigger automated outreach from event or marketing platforms
Event platforms and marketing tools can create new CRM records in bulk, assign them to the right group, and kick off templated email campaigns from the user's connected mailbox. Everything happens asynchronously with status polling.
Keep records clean with programmatic deduplication
Data quality and RevOps tools can run duplicate checks across SoftSync records and merge them in batch, offering automated hygiene workflows that would otherwise require manual admin work.
What You Can Build
Ship these features with Truto + SoftSync
Concrete product features your team can ship faster by leveraging Truto’s SoftSync integration instead of building from scratch.
Dynamic field mapping UI
Fetch each customer's SoftSync table schema at connect time and let end users map your product's fields to their custom field IDs — no hardcoded assumptions.
Bulk record sync with partial field updates
Batch-create records on first sync and use field-level batch updates on subsequent syncs so you only overwrite the attributes you own.
Timeline activity logger
Write calls, meetings, support interactions, or product events into SoftSync as notes attached to the right record, with visibility controls applied in bulk.
Semantic CRM search inside your app
Expose a natural-language search box that queries the user's SoftSync records and messages via hybrid semantic search, returning ranked matches for your AI or workflow features.
Triggered CRM workflows from external events
Kick off the user's published SoftSync workflows from your product and poll run status, letting customers extend your integration with their own CRM automations.
Deduplication and merge assistant
Surface duplicate record clusters detected in SoftSync and let users approve batch merges directly from your UI.
SuperAI
SoftSync 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_soft_sync_api_keys
List API Keys for the softsync workspace. Returns each key's id, label, keyPrefix, and info (userId, email, workspaceId, workspaceName) about the user and workspace it belongs to.
create_a_soft_sync_api_key
Create a new API key in softsync. Returns the created key's id, label, keyPrefix, and info about the user and workspace it belongs to. The body accepts label and partnerId. Required: label.
delete_a_soft_sync_api_key_by_id
Revoke and delete a softsync API key by id. Returns an empty 200 response on success. Required: id.
list_all_soft_sync_api_keys_info
Get the basic information about a softsync API key — the user and workspace it belongs to. Returns: userId, email, firstName, lastName, workspaceId, workspaceName. Recommended as the first call to verify the key is valid.
create_a_soft_sync_oauth_authorize
Generate an OAuth 2.1 authorization code in softsync. Returns the OAuthAuthorizeResponseDto payload from the 201 response for use in the subsequent token exchange. Requires a JSON request body (OAuthAuthorizeDto). Required: clientId, redirectUri.
create_a_soft_sync_oauth_token
Exchange an OAuth 2.1 authorization code for a token set in softsync. Returns the OAuth token response object (OAuthTokenResponseDto). Required: clientId, clientSecret, code.
create_a_soft_sync_group
Create a new group in Softsync. Returns the created group object including its id, views, created_at, and updated_at. The request body is required; the upstream field list is not enumerated in the discovered docs, so send the group fields Softsync documents for creation. Required: title.
soft_sync_groups_duplicate
Duplicate a Softsync group and assign all source records to the new group. Returns the duplicated group object including its id, views, created_at, and updated_at. Required: group_id.
get_single_soft_sync_group_by_id
Get a single Softsync group by id, with all of its views. Returns: id, title, description, order, metadata, visibility, charts, createdAt, updatedAt, views, created_at, updated_at. Required: id.
update_a_soft_sync_group_by_id
Update a group in Softsync. Returns the updated group object including its id, views, created_at, and updated_at. Required: id.
delete_a_soft_sync_group_by_id
Delete a Softsync group by id (soft delete). Returns an empty 200 response on success. Required: id.
create_a_soft_sync_groups_view
Create a new view within a group in softsync. Returns the created view including its id, name, config, order, and createdAt/updatedAt timestamps. Required: groupId, tableId, name, viewType.
get_single_soft_sync_groups_view_by_id
Get a view by id in softsync. Returns the view including its id, name, config, order, and createdAt/updatedAt timestamps. Required: id.
update_a_soft_sync_groups_view_by_id
Update a view by id in softsync. Returns the updated view including its id, name, config, order, and createdAt/updatedAt timestamps. Required: id.
delete_a_soft_sync_groups_view_by_id
Delete a view (soft delete) by id in softsync. Returns an empty 204 response on success. Required: id.
list_all_soft_sync_group_views
List all views saved in a Softsync group (views are saved layouts such as table, kanban, or calendar over an object). Returns an array of view records, each including its id and attributes describing the view's layout configuration. Required: group_id.
update_a_soft_sync_group_member_by_id
Update a member's role in a Softsync group by sending the new role in the JSON request body. Returns the updated group member record including its id. Required: id, group_id, role.
delete_a_soft_sync_group_member_by_id
Remove a member from a Softsync group by id. Returns an empty 204 response on success. Required: id, group_id.
list_all_soft_sync_group_members
List all members of a Softsync group. Returns the group member records, each including its id. Required: group_id.
create_a_soft_sync_group_member
Add a member to a Softsync group by sending the member details in the JSON request body. Returns the created group member record including its id. Required: group_id, userIdentifier, role.
create_a_soft_sync_group_leaf
Leave a group in softsync as the current user, removing themselves from the group's members. Returns an empty 204 response on success. The group owner cannot leave their own group. Required: group_id.
soft_sync_group_visibilities_bulk_update
Update a group's visibility settings in softsync. Returns the updated group object including its id and its views. Required: group_id, visibility.
create_a_soft_sync_table_compile
Compile and validate softsync table (Object) definitions without applying them. Accepts a JSON array of table definitions (each field carries an apiName, a kind of text, number, date, select, relation, user, or file, and kind-matching options) and returns the compile result for those definitions.
create_a_soft_sync_table_transform
Transform a JSON description of Objects into database tables in Softsync. The request body must be a JSON array of table (Object) descriptions; an invalid JSON structure is rejected. Returns the transformation result object on success.
list_all_soft_sync_table_describes
Describe the softsync workspace's tables as JSON. Returns the workspace description object including its tables with field IDs, groups with views, and workspace metadata. Fetch this first — nearly every write needs an ID from this response.
update_a_soft_sync_table_by_id
Update a single softsync table (Object) from a JSON description, addressed by id. Returns the upstream transform result for the applied change (the TransformResult component; the spec does not expose its field-level shape). Invalid JSON structure is…. Required: id, apiName, fields.
delete_a_soft_sync_table_by_id
Delete a softsync table (Object) by id — the table is only removed when it contains no records. Returns the upstream delete result (the DeleteTableResult component; the spec does not expose its field-level shape). The call fails when the table still has records or does not exist. Required: id.
create_a_soft_sync_record
Create a new record in softsync. Returns the created record with id, data (values keyed by field ID), created_at, and updated_at. A request body is required; value keys must be field IDs from the workspace schema, not field names. Required: tableId, groupId, data.
get_single_soft_sync_record_by_id
Get a single record by id in softsync. Returns: id, data, metadata, createdAt, updatedAt, lastInteractionAt, isDeleted, tableId, groupIds, relations, users, createdBy, created_at, updated_at. Set includeDeleted to true to fetch a record soft-deleted within the last 30 days (Bin). Required: id.
update_a_soft_sync_record_by_id
Update a record in softsync by id. Returns the updated record with id, data (field-ID keyed values), created_at, and updated_at. Field values must use field IDs; invalid values are rejected with a validation error. Required: id.
soft_sync_records_restore
Restore a soft-deleted record from the Bin in softsync. Returns an empty 204 response on success. Soft-deleted records are kept in the Bin for 30 days. Required: record_id.
delete_a_soft_sync_record_by_id
Soft-delete a record in softsync by id, moving it to the Bin. Returns an empty 204 response on success. Required: id.
get_single_soft_sync_records_by_id_by_id
Get multiple softsync records in one call by their IDs. Returns the matching records as an array, each with its id, data values keyed by field ID, and createdAt/updatedAt timestamps. Required: recordIds.
get_single_soft_sync_record_related_record_id_by_id
Get the IDs of the records related to a specific record in softsync. Returns the related record IDs payload (upstream RelatedRecordIdsDto; the discovered docs do not enumerate its fields). Required: record_id.
create_a_soft_sync_records_batch
Create multiple Softsync records in a single batch. Returns the array of created records, each with its id, data values keyed by field ID, and created_at/updated_at timestamps. Fetch field IDs from the workspace schema first (GET /table/describe). Required: tableId, groupIds, records.
soft_sync_records_batches_bulk_update
Update multiple Softsync records in a single batch (available to workspace members). Returns the array of updated records, each with its id, data values keyed by field ID, and created_at/updated_at timestamps. Fetch field IDs from the workspace schema first (GET /table/describe). Required: records.
create_a_soft_sync_records_query
Query every record for a view in softsync, with the view's filters and sorts applied. Returns each record's id and its data map of field values keyed by field ID (fetch GET /table/describe first to obtain the field IDs). Filters and sorts accept table fields plus the reserved system fields __system_created_at, __system_updated_at, and __system_created_by. Required: groupId, viewId.
list_all_soft_sync_search_records
Search records in a softsync table using a semantic query (hybrid vector+trigram, or trigram-only keyword matching) or structured field filters, restricted to user-accessible groups. Returns the content-type-specific fields of each matching record. Max 100 per page. Required: tableId.
get_single_soft_sync_records_id_by_id
Resolve the IDs of every record matching a group, view, or filter in softsync — the select-all operation. Returns: ids (array of matching record ID strings), truncated (true when the server cap is exceeded). Sort is ignored; results are id-only, ordered by primary key. Required: tableId.
create_a_soft_sync_duplicates_check
Check a softsync table for duplicate record groups. Returns duplicate groups built from the table's common duplicate-capable fields, each with an id and table-specific duplicate-match attributes; results are scoped to records visible to the current user. Max 100 per page. Required: tableId.
create_a_soft_sync_records_find
Find a single record in a softsync table using structured field filters. Returns the matched record's data map of values keyed by field ID (field IDs come from reading the workspace schema first). Requires a request body identifying the table and the field filters to match. Required: tableId, fieldFilters.
create_a_soft_sync_record_group
Add a group to a record in softsync, making the record visible to that group's members. Returns an empty 200 response on success (no response body). Required: record_id, newGroupId.
delete_a_soft_sync_record_group_by_id
Remove a group from a record in softsync. Returns an empty 204 response on success. Required: id, record_id.
create_a_soft_sync_groups_add
Add a group to multiple softsync records in a single batch operation. Returns a success confirmation with no response body on success. Requires record_ids and group_id. Required: newGroupId, recordIds.
create_a_soft_sync_groups_remove
Remove a single group from multiple Softsync records in one batch call. Returns an empty 204 response on success. Required: groupId, recordIds.
create_a_soft_sync_batch_merge
Merge multiple softsync records into one. Returns the merged record with id and attributes (record values are keyed by field ID). All merged records must be from the same table. Required: recordIds.
create_a_soft_sync_records_analytic
Generate multiple analytics charts over records in a single Softsync request. Returns the generated chart data for every chart requested (Softsync MultiChartDataDto; the upstream docs define the payload by schema reference without enumerating its fields). Requires a MultiChartQueryDto JSON request body. Required: charts.
delete_a_soft_sync_batch_delete_by_id
Batch delete multiple records in softsync in a single call. Requires record_ids (array of record IDs to delete). Returns an empty 200 response on success; fails with 404 if one or more records are not found. Required: recordIds.
update_a_soft_sync_batch_update_field_by_id
Apply a partial field patch to many records at once in Softsync, merging the given fields into each record while leaving all other fields untouched — ideal for 'select all' edits where only the target record IDs and the field patch are sent. Returns a confirmation that the records were updated successfully (fails if any record is not found or permissions are insufficient). Required: recordIds, data.
create_a_soft_sync_batch_restore
Restore multiple soft-deleted records from Bin in softsync in a single batch call. Returns an empty 200 response on success. Required: recordIds.
list_all_soft_sync_messages_integrations
List the message integrations available in your Softsync workspace. Returns one integration record per item, including id, created_at, and updated_at.
get_single_soft_sync_message_by_id
Get a single softsync message by id. Returns the message's id plus its attributes object, whose field-level shape is defined upstream by Softsync's MessageDataDto. Required: id.
create_a_soft_sync_messages_query
Query messages in Softsync with filters and pagination. Returns the paginated collection of message objects; the field-level shape follows the upstream message schema and is not enumerated in the accessible docs.
list_all_soft_sync_search_messages
Search messages in softsync semantically by submitting a search query in the required JSON request body. Returns an array of matching message records with their embedding data (field shape per the upstream MessageEmbeddingsDto). Required: query.
get_single_soft_sync_messages_stat_by_id
Get message link statistics in Softsync. Returns the message statistics payload defined by the upstream MessageLinkStatsDto schema on a 200 response; the available documentation does not enumerate its individual fields. Requires a JSON request body (MessageLinkStatsQueryDto). Required: kinds.
get_single_soft_sync_messages_multi_stat_by_id
Get link statistics for multiple Softsync messages in one batch call. Returns the MultipleMessageLinkStatsDto statistics collection for the message IDs supplied in the required JSON request body (MultipleMessageLinkStatsQueryDto). Required: stats.
list_all_soft_sync_integrations
List the message integrations available in a Softsync workspace. Returns a list of integration records, each including its id.
list_all_soft_sync_openapi_workflows
List the workflows this softsync workspace publishes as API endpoints. Returns a JSON array of published-workflow summaries (PublicWorkflowSummaryDto). Takes no parameters.
get_single_soft_sync_workflows_run_by_id
Get the status and result of a published softsync workflow run by run id. Returns: runId, status, output, error, pollUrl.g. from an async run response). Required: id.
create_a_soft_sync_workflow_run
Run a published softsync workflow by slug. Returns: runId, status, output, error, pollUrl. mode=sync (default) waits up to 60s and returns the workflow output; mode=async (or a sync timeout) responds 202 with a runId to poll. Send an Idempotency-Key header to make retries safe. Required: slug, mode, timeout_ms.
list_all_soft_sync_workspace_workflows
Get the OpenAPI document describing a workspace's published workflows in Softsync. Returns the raw OpenAPI 3.0 document itself (spec-shaped rather than a fixed record object), enumerating the workflows the workspace publishes as API endpoints and how to run them. Required: workspace_id.
list_all_soft_sync_email_mailboxes
List the Gmail and Outlook mailboxes connected to this softsync workspace and available for sending. Returns: mailboxes. An empty list means no mailbox is connected yet and sending will fail — mailboxes must be connected in the softsync app first, as it requires an interactive sign-in.
list_all_soft_sync_email_templates
List the reusable email templates in this softsync workspace. Optionally filter to templates written for one object with tableId — a template can only be sent to records of the object it was written for. Returns: templates, count.
create_a_soft_sync_email_template
Create a reusable email template tied to one object via tableId. Use {{field_api_name}} placeholders in the subject or body to insert values from each recipient's record — call listEmailTemplateVariables first to see which names are valid. Returns: templateId, title, subject, body, tableId, cc, bcc, id. Required: title, subject, body, tableId.
get_single_soft_sync_email_template_by_id
Get one email template by id, including its subject and body. Returns: templateId, title, subject, body, tableId, cc, bcc, id. Required: id.
update_a_soft_sync_email_template_by_id
Update an email template by id — change its subject, body, or copied addresses; only the fields you send are changed, and the object the template targets cannot be changed after creation (create a new template instead). Returns: templateId, title, subject, body, tableId, cc, bcc, id. Required: id.
delete_a_soft_sync_email_template_by_id
Delete an email template by id. Campaigns already in flight that use this template will fail for any recipient not yet sent to. Returns an empty 204 response on success. Required: id.
list_all_soft_sync_templates_variables
List the {{placeholder}} variables available for softsync email templates aimed at one object. Returns: variables. Call this before writing a template. Required: table_id.
create_a_soft_sync_email_send
Send one email template to a single record in softsync — the recipient address is read from the record's email field and the template's placeholders are filled from that record. Returns a campaign object with campaignId; delivery is asynchronous, so poll getEmailCampaign to check whether the send has finished. Requires a JSON request body; sends count against the workspace's hourly and daily…. Required: templateId, recordId.
create_a_soft_sync_email_campaign
Send one Softsync email template to a list of records — each recipient gets a personalised copy with placeholders filled from their own record. Responds 202 with the new campaign's campaignId; delivery is asynchronous and paced to stay within the workspace's hourly and daily mailbox limits, so poll getEmailCampaign to track progress. Requires a SendEmailCampaignDto body. Required: templateId, recordIds.
get_single_soft_sync_email_campaign_by_id
Check whether a Softsync email campaign send has finished. The campaign reports running while messages are still going out, then completed, failed, or cancelled — a send held back by a send window or a rate limit stays running. Returns: status. Required: id.
soft_sync_email_campaigns_cancel
Cancel an in-progress email campaign send in softsync, preventing the remaining messages from going out (already-delivered messages cannot be recalled). Returns an empty 204 response on success. Required: campaign_id.
create_a_soft_sync_notes_integration
Get or create the notes integration in Softsync: returns the existing integration for public or private notes, or creates a new one. Returns: id, type, visibility, ownerId, metadata, config. No request body required.
create_a_soft_sync_note
Create a new note in softsync as a public or private timeline message with mentions and attachments. Returns the created note message record including its id, created_at, and updated_at. Required: content, isPrivate.
update_a_soft_sync_note_by_id
Edit a note in softsync by id; updates the note content and re-processes its mentions. Returns the updated note message record including its id, created_at, and updated_at. Required: id, content.
delete_a_soft_sync_note_by_id
Delete a note in softsync by id; the note is soft deleted. Returns an empty 204 response on success. Required: id.
soft_sync_note_visibilities_bulk_update
Toggle a softsync note's visibility between private and public. Returns the updated note message: id, author, created_at, visibility. Required: note_id.
list_all_soft_sync_mcp_skills
Load all MCP skill instructions in softsync — call this before using any other tools; the guidance covers the records, messages, notes, tables, and groups_and_views domains. Returns: skills.
get_single_soft_sync_mcp_skill_by_id
Load a single MCP skill's instructions by name in softsync, for detailed guidance on one domain. Returns: name, description, instructions, relatedTools. Returns 404 if the skill is not found. Required: id.
list_all_soft_sync_record_activities
List a record's activity feed in softsync, including table-level schema activity unless excluded. Returns activity entries with nextCursor for pagination. Required: record_id.
Why Truto
Why use Truto’s MCP server for SoftSync
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ 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.
How It Works
From zero to integrated
Go live with SoftSync in under an hour. No boilerplate, no maintenance burden.
Link your customer’s SoftSync account
Use Truto’s frontend SDK to connect your customer’s SoftSync 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 SoftSync
Truto’s Proxy API is a 1-to-1 mapping of the SoftSync API. You call us, we call SoftSync, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate SoftSync’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about SoftSync on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How do end users authenticate their SoftSync account?
SoftSync supports both OAuth 2.0 (authorize + token exchange) and API keys. Truto handles the full OAuth flow and secure credential storage, so your users can connect with a single click without you managing tokens or refresh cycles.
How do we handle SoftSync's fully custom data model?
SoftSync does not expose fixed standard objects — every workspace has its own tables and fields. You should call the table describe endpoint at connect time (and periodically after) to discover each customer's table structure and field IDs. All record writes reference field IDs, not names.
Can we update specific fields on records without overwriting others?
Yes. SoftSync offers a batch field-update endpoint that performs partial merges across many records at once, so you can safely update only the attributes your integration owns without touching user- or other-system-managed fields.
How do we log activities like calls, emails, or support tickets?
The cleanest pattern is to create notes attached to the relevant record. Notes support visibility controls that can be updated in bulk, so you can respect team-level privacy settings.
Does SoftSync support sending bulk email through the user's own mailbox?
Yes. SoftSync has a native email campaign engine that sends from the user's connected Gmail or Outlook mailbox using templates with placeholder injection. Campaigns run asynchronously, and you can poll for status or cancel them in flight.
How fresh is the data our integration reads?
Reads are pulled on-demand from SoftSync's live API, so data reflects the current workspace state at query time. For continuous sync, you can poll records queries on your preferred cadence or trigger reads in response to events in your own product.
SoftSync
Get SoftSync integrated into your app
Our team understands what it takes to make a SoftSync integration successful. A short, crisp 30 minute call with folks who understand the problem.