SoftSync AI · Schema
MessageLinkStatsQueryDto
CompanyCRMArtificial IntelligenceSoftware-as-a-ServiceBusiness Software
Properties
| Name | Type | Description |
|---|---|---|
| workspaces | object | Which organizations to read: 'this' (default), 'managed' (every client organization of this one you are a member of), or a list of ids (this one and/or its client organizations). Across organizations, |
| recordFilter | object | Only messages linked to records that match these filters or to the records linked to them, as on a record's page: emails with the people on deals in a given stage count as the deals' emails. Combines |
| integrationIds | array | Exact integration IDs to filter by. Use this when a workflow already knows the concrete integration to query. |
| integrationTypes | array | Integration types to filter by (e.g. notes, private_notes). Only returns messages from accessible integrations. |
| recordLinkFilter | object | Filter by record links |
| userLinkFilter | object | Filter by user links |
| before | string | Only include messages before this ISO timestamp |
| after | string | Only include messages after this ISO timestamp |
| searchText | string | Search text to filter messages by searchableText field (case-insensitive partial matching) |
| searchableText | array | Structured searchableText tokens. Each entry matches either key:value or a raw value token. |
| limit | number | Number of items per page (default: 20, max: 100) |
| populateRecords | boolean | Whether to populate record links (default: true) |
| populateUsers | boolean | Whether to populate user links (default: true) |
| populateMessages | boolean | Whether to populate message links (default: true) |
| kinds | array | Link kinds to count (e.g. mentioned_in) |
| recordId | string | Record ID to aggregate by |
| userId | string | User ID to aggregate by |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/softsync-ai/json-schema/softsync-ai-message-link-stats-query-dto-schema.json",
"title": "MessageLinkStatsQueryDto",
"x-generated": "2026-11-03",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/softsync-ai-openapi.json#/components/schemas/MessageLinkStatsQueryDto",
"type": "object",
"properties": {
"workspaces": {
"description": "Which organizations to read: 'this' (default), 'managed' (every client organization of this one you are a member of), or a list of ids (this one and/or its client organizations). Across organizations, objects and fields are matched by API name, and each result carries its workspaceId.",
"oneOf": [
{
"type": "string",
"enum": [
"this",
"managed"
]
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"recordFilter": {
"description": "Only messages linked to records that match these filters or to the records linked to them, as on a record's page: emails with the people on deals in a given stage count as the deals' emails. Combines with recordLinkFilter kinds; across organizations the object and fields are matched by API name.",
"allOf": [
{
"$ref": "#/$defs/RecordFilterDto"
}
]
},
"integrationIds": {
"description": "Exact integration IDs to filter by. Use this when a workflow already knows the concrete integration to query.",
"type": "array",
"items": {
"type": "string"
}
},
"integrationTypes": {
"description": "Integration types to filter by (e.g. notes, private_notes). Only returns messages from accessible integrations.",
"type": "array",
"items": {
"type": "string"
}
},
"recordLinkFilter": {
"description": "Filter by record links",
"allOf": [
{
"$ref": "#/$defs/RecordLinkFilter"
}
]
},
"userLinkFilter": {
"description": "Filter by user links",
"allOf": [
{
"$ref": "#/$defs/UserLinkFilter"
}
]
},
"before": {
"type": "string",
"description": "Only include messages before this ISO timestamp"
},
"after": {
"type": "string",
"description": "Only include messages after this ISO timestamp"
},
"searchText": {
"type": "string",
"description": "Search text to filter messages by searchableText field (case-insensitive partial matching)"
},
"searchableText": {
"description": "Structured searchableText tokens. Each entry matches either key:value or a raw value token.",
"type": "array",
"items": {
"$ref": "#/$defs/SearchableTextTokenFilter"
}
},
"limit": {
"type": "number",
"description": "Number of items per page (default: 20, max: 100)",
"minimum": 1,
"maximum": 100
},
"populateRecords": {
"type": "boolean",
"description": "Whether to populate record links (default: true)",
"default": true
},
"populateUsers": {
"type": "boolean",
"description": "Whether to populate user links (default: true)",
"default": true
},
"populateMessages": {
"type": "boolean",
"description": "Whether to populate message links (default: true)",
"default": true
},
"kinds": {
"description": "Link kinds to count (e.g. mentioned_in)",
"type": "array",
"items": {
"type": "string"
}
},
"recordId": {
"type": "string",
"description": "Record ID to aggregate by"
},
"userId": {
"type": "string",
"description": "User ID to aggregate by"
}
},
"required": [
"kinds"
],
"$defs": {
"FieldQueryFilter": {
"type": "object",
"properties": {
"fieldId": {
"description": "Field ID to filter on",
"oneOf": [
{
"type": "string"
},
{
"$ref": "#/$defs/SystemField"
}
]
},
"operator": {
"description": "Filter operator: eq (equals), ne (not equals), gt (greater than), gte (greater than or equal), lt (less than), lte (less than or equal), contains (substring match), in (value exists in array), is_empty (field has no value), is_not_empty (field has value)",
"allOf": [
{
"$ref": "#/$defs/FilterOperator"
}
]
},
"value": {
"description": "Value to compare against. Type should match the field type and operator requirements.",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array"
}
]
},
"condition": {
"description": "Logical condition to chain with the previous filter or group (AND/OR). Defaults to AND if not specified. The first filter in the array ignores this field. For grouped filters, this determines how the group connects to the previous filter/group.",
"allOf": [
{
"$ref": "#/$defs/FilterCondition"
}
]
},
"groupId": {
"type": "string",
"description": "Optional group identifier. Filters sharing the same groupId are wrapped in parentheses and evaluated together as a logical unit. Filters within a group are chained using their individual condition fields. Groups are connected to each other using the condition field of the first filter in each subsequent group. Use grouping to create complex expressions like: (A OR B) AND (C OR D)."
}
},
"required": [
"fieldId",
"operator",
"value"
]
},
"FilterCondition": {
"type": "string",
"enum": [
"and",
"or"
],
"description": "Logical condition to chain with the previous filter or group (AND/OR). Defaults to AND if not specified. The first filter in the array ignores this field. For grouped filters, this determines how the group connects to the previous filter/group."
},
"FilterOperator": {
"type": "string",
"enum": [
"eq",
"ne",
"gt",
"gte",
"lt",
"lte",
"contains",
"in",
"is_empty",
"is_not_empty"
],
"description": "Filter operator: eq (equals), ne (not equals), gt (greater than), gte (greater than or equal), lt (less than), lte (less than or equal), contains (substring match), in (value exists in array), is_empty (field has no value), is_not_empty (field has value)"
},
"RecordFilterDto": {
"type": "object",
"properties": {
"tableId": {
"type": "string",
"description": "The object (table) the records belong to"
},
"fieldFilters": {
"description": "The same filters record search takes",
"type": "array",
"items": {
"$ref": "#/$defs/FieldQueryFilter"
}
}
},
"required": [
"tableId"
]
},
"RecordLinkFilter": {
"type": "object",
"properties": {
"recordIds": {
"description": "Record IDs to filter by",
"type": "array",
"items": {
"type": "string"
}
},
"kinds": {
"description": "Link kinds to filter by (e.g. attached, mentioned_in). If omitted, all kinds are included.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"recordIds"
]
},
"SearchableTextTokenFilter": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Optional token key. When provided the search token is matched as key:value."
},
"value": {
"type": "string",
"description": "Token value to match in searchableText. Without key this matches the raw value token."
}
},
"required": [
"value"
]
},
"SystemField": {
"type": "string",
"enum": [
"__system_created_at",
"__system_updated_at",
"__system_created_by",
"__system_last_interaction_at",
"__system_last_sent_at",
"__system_last_received_at"
]
},
"UserLinkFilter": {
"type": "object",
"properties": {
"userIds": {
"description": "User IDs to filter by",
"type": "array",
"items": {
"type": "string"
}
},
"kinds": {
"description": "Link kinds to filter by (e.g. owner, mentioned_in). If omitted, all kinds are included.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"userIds"
]
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/softsync-ai-message-link-stats-query-dto"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.