airbyte-agent-zendesk-support 0.18.57__py3-none-any.whl → 0.18.61__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,8 +4,11 @@ Zendesk-Support connector.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
+ import inspect
8
+ import json
7
9
  import logging
8
- from typing import TYPE_CHECKING, Any, Callable, TypeVar, AsyncIterator, overload
10
+ from functools import wraps
11
+ from typing import TYPE_CHECKING, Any, Callable, Mapping, TypeVar, AsyncIterator, overload
9
12
  try:
10
13
  from typing import Literal
11
14
  except ImportError:
@@ -162,6 +165,38 @@ from .models import (
162
165
  # TypeVar for decorator type preservation
163
166
  _F = TypeVar("_F", bound=Callable[..., Any])
164
167
 
168
+ DEFAULT_MAX_OUTPUT_CHARS = 50_000 # ~50KB default, configurable per-tool
169
+
170
+
171
+ def _raise_output_too_large(message: str) -> None:
172
+ try:
173
+ from pydantic_ai import ModelRetry # type: ignore[import-not-found]
174
+ except Exception as exc:
175
+ raise RuntimeError(message) from exc
176
+ raise ModelRetry(message)
177
+
178
+
179
+ def _check_output_size(result: Any, max_chars: int | None, tool_name: str) -> Any:
180
+ if max_chars is None or max_chars <= 0:
181
+ return result
182
+
183
+ try:
184
+ serialized = json.dumps(result, default=str)
185
+ except (TypeError, ValueError):
186
+ return result
187
+
188
+ if len(serialized) > max_chars:
189
+ truncated_preview = serialized[:500] + "..." if len(serialized) > 500 else serialized
190
+ _raise_output_too_large(
191
+ f"Tool '{tool_name}' output too large ({len(serialized):,} chars, limit {max_chars:,}). "
192
+ "Please narrow your query by: using the 'fields' parameter to select only needed fields, "
193
+ "adding filters, or reducing the 'limit'. "
194
+ f"Preview: {truncated_preview}"
195
+ )
196
+
197
+ return result
198
+
199
+
165
200
 
166
201
 
167
202
  class ZendeskSupportConnector:
@@ -172,7 +207,7 @@ class ZendeskSupportConnector:
172
207
  """
173
208
 
174
209
  connector_name = "zendesk-support"
175
- connector_version = "0.1.7"
210
+ connector_version = "0.1.8"
176
211
  vendored_sdk_version = "0.1.0" # Version of vendored connector-sdk
177
212
 
178
213
  # Map of (entity, action) -> needs_envelope for envelope wrapping decision
@@ -704,15 +739,15 @@ class ZendeskSupportConnector:
704
739
  async def execute(
705
740
  self,
706
741
  entity: str,
707
- action: str,
708
- params: dict[str, Any]
742
+ action: Literal["list", "get", "download", "search"],
743
+ params: Mapping[str, Any]
709
744
  ) -> ZendeskSupportExecuteResult[Any] | ZendeskSupportExecuteResultWithMeta[Any, Any] | Any: ...
710
745
 
711
746
  async def execute(
712
747
  self,
713
748
  entity: str,
714
- action: str,
715
- params: dict[str, Any] | None = None
749
+ action: Literal["list", "get", "download", "search"],
750
+ params: Mapping[str, Any] | None = None
716
751
  ) -> Any:
717
752
  """
718
753
  Execute an entity operation with full type safety.
@@ -740,16 +775,17 @@ class ZendeskSupportConnector:
740
775
  from ._vendored.connector_sdk.executor import ExecutionConfig
741
776
 
742
777
  # Remap parameter names from snake_case (TypedDict keys) to API parameter names
743
- if params:
778
+ resolved_params = dict(params) if params is not None else None
779
+ if resolved_params:
744
780
  param_map = self._PARAM_MAP.get((entity, action), {})
745
781
  if param_map:
746
- params = {param_map.get(k, k): v for k, v in params.items()}
782
+ resolved_params = {param_map.get(k, k): v for k, v in resolved_params.items()}
747
783
 
748
784
  # Use ExecutionConfig for both local and hosted executors
749
785
  config = ExecutionConfig(
750
786
  entity=entity,
751
787
  action=action,
752
- params=params
788
+ params=resolved_params
753
789
  )
754
790
 
755
791
  result = await self._executor.execute(config)
@@ -776,41 +812,67 @@ class ZendeskSupportConnector:
776
812
  # ===== INTROSPECTION METHODS =====
777
813
 
778
814
  @classmethod
779
- def describe(cls, func: _F) -> _F:
815
+ def tool_utils(
816
+ cls,
817
+ func: _F | None = None,
818
+ *,
819
+ update_docstring: bool = True,
820
+ max_output_chars: int | None = DEFAULT_MAX_OUTPUT_CHARS,
821
+ ) -> _F | Callable[[_F], _F]:
780
822
  """
781
- Decorator that populates a function's docstring with connector capabilities.
782
-
783
- This class method can be used as a decorator to automatically generate
784
- comprehensive documentation for AI tool functions.
823
+ Decorator that adds tool utilities like docstring augmentation and output limits.
785
824
 
786
825
  Usage:
787
826
  @mcp.tool()
788
- @ZendeskSupportConnector.describe
827
+ @ZendeskSupportConnector.tool_utils
789
828
  async def execute(entity: str, action: str, params: dict):
790
- '''Execute operations.'''
791
829
  ...
792
830
 
793
- The decorated function's __doc__ will be updated with:
794
- - Available entities and their actions
795
- - Parameter signatures with required (*) and optional (?) markers
796
- - Response structure documentation
797
- - Example questions (if available in OpenAPI spec)
831
+ @mcp.tool()
832
+ @ZendeskSupportConnector.tool_utils(update_docstring=False, max_output_chars=None)
833
+ async def execute(entity: str, action: str, params: dict):
834
+ ...
798
835
 
799
836
  Args:
800
- func: The function to decorate
837
+ update_docstring: When True, append connector capabilities to __doc__.
838
+ max_output_chars: Max serialized output size before raising. Use None to disable.
839
+ """
840
+
841
+ def decorate(inner: _F) -> _F:
842
+ if update_docstring:
843
+ description = generate_tool_description(ZendeskSupportConnectorModel)
844
+ original_doc = inner.__doc__ or ""
845
+ if original_doc.strip():
846
+ full_doc = f"{original_doc.strip()}\n{description}"
847
+ else:
848
+ full_doc = description
849
+ else:
850
+ full_doc = ""
801
851
 
802
- Returns:
803
- The same function with updated __doc__
804
- """
805
- description = generate_tool_description(ZendeskSupportConnectorModel)
852
+ if inspect.iscoroutinefunction(inner):
806
853
 
807
- original_doc = func.__doc__ or ""
808
- if original_doc.strip():
809
- func.__doc__ = f"{original_doc.strip()}\n{description}"
810
- else:
811
- func.__doc__ = description
854
+ @wraps(inner)
855
+ async def aw(*args: Any, **kwargs: Any) -> Any:
856
+ result = await inner(*args, **kwargs)
857
+ return _check_output_size(result, max_output_chars, inner.__name__)
858
+
859
+ wrapped = aw
860
+ else:
861
+
862
+ @wraps(inner)
863
+ def sw(*args: Any, **kwargs: Any) -> Any:
864
+ result = inner(*args, **kwargs)
865
+ return _check_output_size(result, max_output_chars, inner.__name__)
866
+
867
+ wrapped = sw
868
+
869
+ if update_docstring:
870
+ wrapped.__doc__ = full_doc
871
+ return wrapped # type: ignore[return-value]
812
872
 
813
- return func
873
+ if func is not None:
874
+ return decorate(func)
875
+ return decorate
814
876
 
815
877
  def list_entities(self) -> list[dict[str, Any]]:
816
878
  """
@@ -948,7 +1010,7 @@ class TicketsQuery:
948
1010
  - created_at: Timestamp indicating when the ticket was created
949
1011
  - custom_fields: Array of custom field values specific to the account's ticket configuration
950
1012
  - custom_status_id: Unique identifier of the custom status applied to the ticket
951
- - deleted_ticket_form_id: Unique identifier of the ticket form if it was deleted after the ticket was created
1013
+ - deleted_ticket_form_id: The ID of the ticket form that was previously associated with this ticket but has since been deleted
952
1014
  - description: Initial description or content of the ticket when it was created
953
1015
  - due_at: Timestamp indicating when the ticket is due for completion or resolution
954
1016
  - email_cc_ids: Array of user identifiers who are CC'd on ticket email notifications
@@ -958,7 +1020,7 @@ class TicketsQuery:
958
1020
  - followup_ids: Array of identifiers for follow-up tickets related to this ticket
959
1021
  - forum_topic_id: Unique identifier linking the ticket to a forum topic if applicable
960
1022
  - from_messaging_channel: Boolean indicating whether the ticket originated from a messaging channel
961
- - generated_timestamp: Timestamp updated for all ticket updates including system changes, used for incremental export co...
1023
+ - generated_timestamp: Timestamp updated for all ticket updates including system changes, used for incremental export
962
1024
  - group_id: Unique identifier of the agent group assigned to handle the ticket
963
1025
  - has_incidents: Boolean indicating whether this problem ticket has related incident tickets
964
1026
  - id: Unique identifier for the ticket
@@ -1982,9 +2044,9 @@ class TicketFieldsQuery:
1982
2044
  Available filter fields (TicketFieldsSearchFilter):
1983
2045
  - active: Whether this field is currently available for use
1984
2046
  - agent_description: A description of the ticket field that only agents can see
1985
- - collapsed_for_agents: If true, the field is shown to agents by default; if false, it is hidden alongside infrequently u...
2047
+ - collapsed_for_agents: If true, the field is shown to agents by default; if false, it is hidden alongside infrequently used fields
1986
2048
  - created_at: Timestamp when the custom ticket field was created
1987
- - custom_field_options: Array of option objects for custom ticket fields of type multiselect or tagger, containing name a...
2049
+ - custom_field_options: Array of option objects for custom ticket fields of type multiselect or tagger
1988
2050
  - custom_statuses: List of customized ticket statuses, only present for system ticket fields of type custom_status
1989
2051
  - description: Text describing the purpose of the ticket field to users
1990
2052
  - editable_in_portal: Whether this field is editable by end users in Help Center
@@ -2003,7 +2065,7 @@ class TicketFieldsQuery:
2003
2065
  - tag: For checkbox fields only, a tag added to tickets when the checkbox field is selected
2004
2066
  - title: The title of the ticket field displayed to agents
2005
2067
  - title_in_portal: The title of the ticket field displayed to end users in Help Center
2006
- - type: Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, tagger,...
2068
+ - type: Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, or tagger
2007
2069
  - updated_at: Timestamp when the custom ticket field was last updated
2008
2070
  - url: The API URL for this ticket field resource
2009
2071
  - visible_in_portal: Whether this field is visible to end users in Help Center
@@ -2666,7 +2728,7 @@ class SatisfactionRatingsQuery:
2666
2728
  - group_id: The identifier of the group assigned to the ticket at the time the rating was submitted
2667
2729
  - id: Unique identifier for the satisfaction rating, automatically assigned upon creation
2668
2730
  - reason: Free-text reason for a bad rating provided by the requester in a follow-up question
2669
- - reason_id: Identifier for the predefined reason given for a negative rating, only applicable when score is '...
2731
+ - reason_id: Identifier for the predefined reason given for a negative rating
2670
2732
  - requester_id: The identifier of the ticket requester who submitted the satisfaction rating
2671
2733
  - score: The satisfaction rating value: 'offered', 'unoffered', 'good', or 'bad'
2672
2734
  - ticket_id: The identifier of the ticket being rated
@@ -2947,7 +3009,7 @@ class TicketFormsQuery:
2947
3009
  - raw_display_name: The dynamic content placeholder if present, or the display_name value if not
2948
3010
  - raw_name: The dynamic content placeholder if present, or the name value if not
2949
3011
  - restricted_brand_ids: IDs of all brands that this ticket form is restricted to
2950
- - ticket_field_ids: IDs of all ticket fields included in this ticket form, ordered to determine field display sequenc...
3012
+ - ticket_field_ids: IDs of all ticket fields included in this ticket form
2951
3013
  - updated_at: Timestamp of the last update to the ticket form
2952
3014
  - url: URL of the ticket form
2953
3015
 
@@ -30,7 +30,7 @@ from uuid import (
30
30
  ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
31
31
  id=UUID('79c1aa37-dae3-42ae-b333-d1c105477715'),
32
32
  name='zendesk-support',
33
- version='0.1.7',
33
+ version='0.1.8',
34
34
  base_url='https://{subdomain}.zendesk.com/api/v2',
35
35
  auth=AuthConfig(
36
36
  options=[
@@ -3945,4 +3945,290 @@ ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
3945
3945
  },
3946
3946
  ),
3947
3947
  ],
3948
+ search_field_paths={
3949
+ 'brands': [
3950
+ 'active',
3951
+ 'brand_url',
3952
+ 'created_at',
3953
+ 'default',
3954
+ 'has_help_center',
3955
+ 'help_center_state',
3956
+ 'host_mapping',
3957
+ 'id',
3958
+ 'is_deleted',
3959
+ 'logo',
3960
+ 'name',
3961
+ 'signature_template',
3962
+ 'subdomain',
3963
+ 'ticket_form_ids',
3964
+ 'ticket_form_ids[]',
3965
+ 'updated_at',
3966
+ 'url',
3967
+ ],
3968
+ 'groups': [
3969
+ 'created_at',
3970
+ 'default',
3971
+ 'deleted',
3972
+ 'description',
3973
+ 'id',
3974
+ 'is_public',
3975
+ 'name',
3976
+ 'updated_at',
3977
+ 'url',
3978
+ ],
3979
+ 'organizations': [
3980
+ 'created_at',
3981
+ 'deleted_at',
3982
+ 'details',
3983
+ 'domain_names',
3984
+ 'domain_names[]',
3985
+ 'external_id',
3986
+ 'group_id',
3987
+ 'id',
3988
+ 'name',
3989
+ 'notes',
3990
+ 'organization_fields',
3991
+ 'shared_comments',
3992
+ 'shared_tickets',
3993
+ 'tags',
3994
+ 'tags[]',
3995
+ 'updated_at',
3996
+ 'url',
3997
+ ],
3998
+ 'satisfaction_ratings': [
3999
+ 'assignee_id',
4000
+ 'comment',
4001
+ 'created_at',
4002
+ 'group_id',
4003
+ 'id',
4004
+ 'reason',
4005
+ 'reason_id',
4006
+ 'requester_id',
4007
+ 'score',
4008
+ 'ticket_id',
4009
+ 'updated_at',
4010
+ 'url',
4011
+ ],
4012
+ 'tags': ['count', 'name'],
4013
+ 'ticket_audits': [
4014
+ 'attachments',
4015
+ 'attachments[]',
4016
+ 'author_id',
4017
+ 'created_at',
4018
+ 'events',
4019
+ 'events[]',
4020
+ 'id',
4021
+ 'metadata',
4022
+ 'ticket_id',
4023
+ 'via',
4024
+ ],
4025
+ 'ticket_comments': [
4026
+ 'attachments',
4027
+ 'attachments[]',
4028
+ 'audit_id',
4029
+ 'author_id',
4030
+ 'body',
4031
+ 'created_at',
4032
+ 'event_type',
4033
+ 'html_body',
4034
+ 'id',
4035
+ 'metadata',
4036
+ 'plain_body',
4037
+ 'public',
4038
+ 'ticket_id',
4039
+ 'timestamp',
4040
+ 'type',
4041
+ 'uploads',
4042
+ 'uploads[]',
4043
+ 'via',
4044
+ 'via_reference_id',
4045
+ ],
4046
+ 'ticket_fields': [
4047
+ 'active',
4048
+ 'agent_description',
4049
+ 'collapsed_for_agents',
4050
+ 'created_at',
4051
+ 'custom_field_options',
4052
+ 'custom_field_options[]',
4053
+ 'custom_statuses',
4054
+ 'custom_statuses[]',
4055
+ 'description',
4056
+ 'editable_in_portal',
4057
+ 'id',
4058
+ 'key',
4059
+ 'position',
4060
+ 'raw_description',
4061
+ 'raw_title',
4062
+ 'raw_title_in_portal',
4063
+ 'regexp_for_validation',
4064
+ 'removable',
4065
+ 'required',
4066
+ 'required_in_portal',
4067
+ 'sub_type_id',
4068
+ 'system_field_options',
4069
+ 'system_field_options[]',
4070
+ 'tag',
4071
+ 'title',
4072
+ 'title_in_portal',
4073
+ 'type',
4074
+ 'updated_at',
4075
+ 'url',
4076
+ 'visible_in_portal',
4077
+ ],
4078
+ 'ticket_forms': [
4079
+ 'active',
4080
+ 'agent_conditions',
4081
+ 'agent_conditions[]',
4082
+ 'created_at',
4083
+ 'default',
4084
+ 'display_name',
4085
+ 'end_user_conditions',
4086
+ 'end_user_conditions[]',
4087
+ 'end_user_visible',
4088
+ 'id',
4089
+ 'in_all_brands',
4090
+ 'name',
4091
+ 'position',
4092
+ 'raw_display_name',
4093
+ 'raw_name',
4094
+ 'restricted_brand_ids',
4095
+ 'restricted_brand_ids[]',
4096
+ 'ticket_field_ids',
4097
+ 'ticket_field_ids[]',
4098
+ 'updated_at',
4099
+ 'url',
4100
+ ],
4101
+ 'ticket_metric_events': [
4102
+ 'id',
4103
+ 'instance_id',
4104
+ 'metric',
4105
+ 'ticket_id',
4106
+ 'time',
4107
+ 'type',
4108
+ ],
4109
+ 'ticket_metrics': [
4110
+ 'agent_wait_time_in_minutes',
4111
+ 'assigned_at',
4112
+ 'assignee_stations',
4113
+ 'assignee_updated_at',
4114
+ 'created_at',
4115
+ 'custom_status_updated_at',
4116
+ 'first_resolution_time_in_minutes',
4117
+ 'full_resolution_time_in_minutes',
4118
+ 'generated_timestamp',
4119
+ 'group_stations',
4120
+ 'id',
4121
+ 'initially_assigned_at',
4122
+ 'instance_id',
4123
+ 'latest_comment_added_at',
4124
+ 'metric',
4125
+ 'on_hold_time_in_minutes',
4126
+ 'reopens',
4127
+ 'replies',
4128
+ 'reply_time_in_minutes',
4129
+ 'reply_time_in_seconds',
4130
+ 'requester_updated_at',
4131
+ 'requester_wait_time_in_minutes',
4132
+ 'solved_at',
4133
+ 'status',
4134
+ 'status_updated_at',
4135
+ 'ticket_id',
4136
+ 'time',
4137
+ 'type',
4138
+ 'updated_at',
4139
+ 'url',
4140
+ ],
4141
+ 'tickets': [
4142
+ 'allow_attachments',
4143
+ 'allow_channelback',
4144
+ 'assignee_id',
4145
+ 'brand_id',
4146
+ 'collaborator_ids',
4147
+ 'collaborator_ids[]',
4148
+ 'created_at',
4149
+ 'custom_fields',
4150
+ 'custom_fields[]',
4151
+ 'custom_status_id',
4152
+ 'deleted_ticket_form_id',
4153
+ 'description',
4154
+ 'due_at',
4155
+ 'email_cc_ids',
4156
+ 'email_cc_ids[]',
4157
+ 'external_id',
4158
+ 'fields',
4159
+ 'fields[]',
4160
+ 'follower_ids',
4161
+ 'follower_ids[]',
4162
+ 'followup_ids',
4163
+ 'followup_ids[]',
4164
+ 'forum_topic_id',
4165
+ 'from_messaging_channel',
4166
+ 'generated_timestamp',
4167
+ 'group_id',
4168
+ 'has_incidents',
4169
+ 'id',
4170
+ 'is_public',
4171
+ 'organization_id',
4172
+ 'priority',
4173
+ 'problem_id',
4174
+ 'raw_subject',
4175
+ 'recipient',
4176
+ 'requester_id',
4177
+ 'satisfaction_rating',
4178
+ 'sharing_agreement_ids',
4179
+ 'sharing_agreement_ids[]',
4180
+ 'status',
4181
+ 'subject',
4182
+ 'submitter_id',
4183
+ 'tags',
4184
+ 'tags[]',
4185
+ 'ticket_form_id',
4186
+ 'type',
4187
+ 'updated_at',
4188
+ 'url',
4189
+ 'via',
4190
+ ],
4191
+ 'users': [
4192
+ 'active',
4193
+ 'alias',
4194
+ 'chat_only',
4195
+ 'created_at',
4196
+ 'custom_role_id',
4197
+ 'default_group_id',
4198
+ 'details',
4199
+ 'email',
4200
+ 'external_id',
4201
+ 'iana_time_zone',
4202
+ 'id',
4203
+ 'last_login_at',
4204
+ 'locale',
4205
+ 'locale_id',
4206
+ 'moderator',
4207
+ 'name',
4208
+ 'notes',
4209
+ 'only_private_comments',
4210
+ 'organization_id',
4211
+ 'permanently_deleted',
4212
+ 'phone',
4213
+ 'photo',
4214
+ 'report_csv',
4215
+ 'restricted_agent',
4216
+ 'role',
4217
+ 'role_type',
4218
+ 'shared',
4219
+ 'shared_agent',
4220
+ 'shared_phone_number',
4221
+ 'signature',
4222
+ 'suspended',
4223
+ 'tags',
4224
+ 'tags[]',
4225
+ 'ticket_restriction',
4226
+ 'time_zone',
4227
+ 'two_factor_auth_enabled',
4228
+ 'updated_at',
4229
+ 'url',
4230
+ 'user_fields',
4231
+ 'verified',
4232
+ ],
4233
+ },
3948
4234
  )
@@ -789,7 +789,7 @@ class SatisfactionRatingsSearchData(BaseModel):
789
789
  reason: str | None = None
790
790
  """Free-text reason for a bad rating provided by the requester in a follow-up question"""
791
791
  reason_id: int | None = None
792
- """Identifier for the predefined reason given for a negative rating, only applicable when score is '..."""
792
+ """Identifier for the predefined reason given for a negative rating"""
793
793
  requester_id: int | None = None
794
794
  """The identifier of the ticket requester who submitted the satisfaction rating"""
795
795
  score: str | None = None
@@ -883,11 +883,11 @@ class TicketFieldsSearchData(BaseModel):
883
883
  agent_description: str | None = None
884
884
  """A description of the ticket field that only agents can see"""
885
885
  collapsed_for_agents: bool | None = None
886
- """If true, the field is shown to agents by default; if false, it is hidden alongside infrequently u..."""
886
+ """If true, the field is shown to agents by default; if false, it is hidden alongside infrequently used fields"""
887
887
  created_at: str | None = None
888
888
  """Timestamp when the custom ticket field was created"""
889
889
  custom_field_options: list[Any] | None = None
890
- """Array of option objects for custom ticket fields of type multiselect or tagger, containing name a..."""
890
+ """Array of option objects for custom ticket fields of type multiselect or tagger"""
891
891
  custom_statuses: list[Any] | None = None
892
892
  """List of customized ticket statuses, only present for system ticket fields of type custom_status"""
893
893
  description: str | None = None
@@ -925,7 +925,7 @@ class TicketFieldsSearchData(BaseModel):
925
925
  title_in_portal: str | None = None
926
926
  """The title of the ticket field displayed to end users in Help Center"""
927
927
  type: str | None = None
928
- """Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, tagger,..."""
928
+ """Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, or tagger"""
929
929
  updated_at: str | None = None
930
930
  """Timestamp when the custom ticket field was last updated"""
931
931
  url: str | None = None
@@ -967,7 +967,7 @@ class TicketFormsSearchData(BaseModel):
967
967
  restricted_brand_ids: list[Any] | None = None
968
968
  """IDs of all brands that this ticket form is restricted to"""
969
969
  ticket_field_ids: list[Any] | None = None
970
- """IDs of all ticket fields included in this ticket form, ordered to determine field display sequenc..."""
970
+ """IDs of all ticket fields included in this ticket form"""
971
971
  updated_at: str | None = None
972
972
  """Timestamp of the last update to the ticket form"""
973
973
  url: str | None = None
@@ -1061,7 +1061,7 @@ class TicketsSearchData(BaseModel):
1061
1061
  custom_status_id: int | None = None
1062
1062
  """Unique identifier of the custom status applied to the ticket"""
1063
1063
  deleted_ticket_form_id: int | None = None
1064
- """Unique identifier of the ticket form if it was deleted after the ticket was created"""
1064
+ """The ID of the ticket form that was previously associated with this ticket but has since been deleted"""
1065
1065
  description: str | None = None
1066
1066
  """Initial description or content of the ticket when it was created"""
1067
1067
  due_at: str | None = None
@@ -1081,7 +1081,7 @@ class TicketsSearchData(BaseModel):
1081
1081
  from_messaging_channel: bool | None = None
1082
1082
  """Boolean indicating whether the ticket originated from a messaging channel"""
1083
1083
  generated_timestamp: int | None = None
1084
- """Timestamp updated for all ticket updates including system changes, used for incremental export co..."""
1084
+ """Timestamp updated for all ticket updates including system changes, used for incremental export"""
1085
1085
  group_id: int | None = None
1086
1086
  """Unique identifier of the agent group assigned to handle the ticket"""
1087
1087
  has_incidents: bool | None = None