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

# SoftSync API Integration on Truto



**Category:** CRM  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 80 tools for SoftSync that AI agents can call directly.

- **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.

## How it works

1. **Link your customer's SoftSync 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 SoftSync.** The Proxy API is a 1-to-1 mapping of the SoftSync 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

- **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

- **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.

## FAQs

### 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.
