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
View JSON Schema on GitHub

JSON Schema

softsync-ai-message-link-stats-query-dto-schema.json Raw ↑
{
  "$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.
All 92 tools →

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.