featurebase-node 0.8.1 → 0.9.0

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/client.d.mts +3 -1
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +3 -1
  5. package/client.d.ts.map +1 -1
  6. package/client.js.map +1 -1
  7. package/client.mjs.map +1 -1
  8. package/core/pagination.d.mts +15 -0
  9. package/core/pagination.d.mts.map +1 -1
  10. package/core/pagination.d.ts +15 -0
  11. package/core/pagination.d.ts.map +1 -1
  12. package/core/pagination.js +25 -1
  13. package/core/pagination.js.map +1 -1
  14. package/core/pagination.mjs +23 -0
  15. package/core/pagination.mjs.map +1 -1
  16. package/package.json +1 -1
  17. package/resources/support/conversations/conversations.d.mts +810 -8
  18. package/resources/support/conversations/conversations.d.mts.map +1 -1
  19. package/resources/support/conversations/conversations.d.ts +810 -8
  20. package/resources/support/conversations/conversations.d.ts.map +1 -1
  21. package/resources/support/conversations/conversations.js +240 -4
  22. package/resources/support/conversations/conversations.js.map +1 -1
  23. package/resources/support/conversations/conversations.mjs +240 -4
  24. package/resources/support/conversations/conversations.mjs.map +1 -1
  25. package/resources/support/conversations/index.d.mts +1 -2
  26. package/resources/support/conversations/index.d.mts.map +1 -1
  27. package/resources/support/conversations/index.d.ts +1 -2
  28. package/resources/support/conversations/index.d.ts.map +1 -1
  29. package/resources/support/conversations/index.js +1 -3
  30. package/resources/support/conversations/index.js.map +1 -1
  31. package/resources/support/conversations/index.mjs +0 -1
  32. package/resources/support/conversations/index.mjs.map +1 -1
  33. package/resources/support/index.d.mts +1 -1
  34. package/resources/support/index.d.mts.map +1 -1
  35. package/resources/support/index.d.ts +1 -1
  36. package/resources/support/index.d.ts.map +1 -1
  37. package/resources/support/index.js.map +1 -1
  38. package/resources/support/index.mjs.map +1 -1
  39. package/resources/support/support.d.mts +2 -2
  40. package/resources/support/support.d.mts.map +1 -1
  41. package/resources/support/support.d.ts +2 -2
  42. package/resources/support/support.d.ts.map +1 -1
  43. package/resources/support/support.js.map +1 -1
  44. package/resources/support/support.mjs.map +1 -1
  45. package/src/client.ts +13 -1
  46. package/src/core/pagination.ts +49 -0
  47. package/src/resources/support/conversations/conversations.ts +1059 -86
  48. package/src/resources/support/conversations/index.ts +6 -7
  49. package/src/resources/support/index.ts +6 -0
  50. package/src/resources/support/support.ts +12 -0
  51. package/src/version.ts +1 -1
  52. package/version.d.mts +1 -1
  53. package/version.d.ts +1 -1
  54. package/version.js +1 -1
  55. package/version.mjs +1 -1
  56. package/resources/support/conversations/tags.d.mts +0 -200
  57. package/resources/support/conversations/tags.d.mts.map +0 -1
  58. package/resources/support/conversations/tags.d.ts +0 -200
  59. package/resources/support/conversations/tags.d.ts.map +0 -1
  60. package/resources/support/conversations/tags.js +0 -146
  61. package/resources/support/conversations/tags.js.map +0 -1
  62. package/resources/support/conversations/tags.mjs +0 -142
  63. package/resources/support/conversations/tags.mjs.map +0 -1
  64. package/src/resources/support/conversations/tags.ts +0 -260
@@ -3,8 +3,6 @@ import * as ConversationsAPI from "./conversations.js";
3
3
  import * as ConversationTagsAPI from "../conversation-tags.js";
4
4
  import * as ParticipantsAPI from "./participants.js";
5
5
  import { ParticipantAddParams, ParticipantRemoveParams, Participants } from "./participants.js";
6
- import * as TagsAPI from "./tags.js";
7
- import { AttachedConversationTag, ConversationTagMutationActor, TagAttachParams, TagDetachParams, Tags } from "./tags.js";
8
6
  import { APIPromise } from "../../../core/api-promise.js";
9
7
  import { CursorPage, type CursorPageParams, PagePromise } from "../../../core/pagination.js";
10
8
  import { RequestOptions } from "../../../internal/request-options.js";
@@ -12,7 +10,6 @@ import { RequestOptions } from "../../../internal/request-options.js";
12
10
  * Conversations are messenger/inbox conversations in your Featurebase organization. Use this endpoint to list and retrieve conversation information.
13
11
  */
14
12
  export declare class Conversations extends APIResource {
15
- tags: TagsAPI.Tags;
16
13
  participants: ParticipantsAPI.Participants;
17
14
  /**
18
15
  * Creates a new conversation. Supports both contact-initiated (customer/lead) and
@@ -487,6 +484,110 @@ export declare class Conversations extends APIResource {
487
484
  * ```
488
485
  */
489
486
  delete(id: string, params?: ConversationDeleteParams | null | undefined, options?: RequestOptions): APIPromise<ConversationDeleteResponse>;
487
+ /**
488
+ * Attaches a workspace tag to a conversation.
489
+ *
490
+ * This endpoint requires both the tag ID to attach and the `actingAdminId` of the
491
+ * admin on whose behalf the mutation is recorded.
492
+ *
493
+ * ### Path Parameters
494
+ *
495
+ * - `id` - The conversation ID (short ID)
496
+ *
497
+ * ### Request Body
498
+ *
499
+ * | Field | Type | Required | Description |
500
+ * | --------------- | ------ | -------- | ------------------------------------------------------------------------ |
501
+ * | `tagId` | string | Yes | The Featurebase tag ID to attach |
502
+ * | `actingAdminId` | string | Yes | The admin performing the mutation. Must be a member of the organization. |
503
+ *
504
+ * ### Behavior
505
+ *
506
+ * Featurebase resolves the latest taggable reply/message in the conversation and
507
+ * records the tag attachment against that part so audit metadata remains
508
+ * deterministic.
509
+ *
510
+ * ### Response
511
+ *
512
+ * Returns the affected tag plus attachment metadata such as `targetPartId`,
513
+ * `appliedAt`, and `appliedBy`.
514
+ *
515
+ * ### Example Request
516
+ *
517
+ * ```json
518
+ * {
519
+ * "tagId": "67ec1234abcd5678ef901234",
520
+ * "actingAdminId": "507f1f77bcf86cd799439011"
521
+ * }
522
+ * ```
523
+ *
524
+ * ### Version Availability
525
+ *
526
+ * This endpoint is only available in API version 2026-01-01.nova and newer.
527
+ *
528
+ * @example
529
+ * ```ts
530
+ * const response =
531
+ * await client.support.conversations.attachTag('12345', {
532
+ * actingAdminId: '507f1f77bcf86cd799439011',
533
+ * tagId: '67ec1234abcd5678ef901234',
534
+ * });
535
+ * ```
536
+ */
537
+ attachTag(id: string, params: ConversationAttachTagParams, options?: RequestOptions): APIPromise<ConversationAttachTagResponse>;
538
+ /**
539
+ * Removes a workspace tag from a conversation.
540
+ *
541
+ * This endpoint requires the `actingAdminId` of the admin on whose behalf the
542
+ * mutation is recorded.
543
+ *
544
+ * ### Path Parameters
545
+ *
546
+ * - `id` - The conversation ID (short ID)
547
+ * - `tagId` - The Featurebase tag ID to remove
548
+ *
549
+ * ### Request Body
550
+ *
551
+ * | Field | Type | Required | Description |
552
+ * | --------------- | ------ | -------- | ------------------------------------------------------------------------ |
553
+ * | `actingAdminId` | string | Yes | The admin performing the mutation. Must be a member of the organization. |
554
+ *
555
+ * ### Behavior
556
+ *
557
+ * Featurebase resolves the latest taggable reply/message in the conversation and
558
+ * records the tag removal against that part so audit metadata remains
559
+ * deterministic.
560
+ *
561
+ * ### Response
562
+ *
563
+ * Returns the affected tag payload with the most relevant attachment metadata
564
+ * available for that relationship.
565
+ *
566
+ * ### Example Request
567
+ *
568
+ * ```json
569
+ * {
570
+ * "actingAdminId": "507f1f77bcf86cd799439011"
571
+ * }
572
+ * ```
573
+ *
574
+ * ### Version Availability
575
+ *
576
+ * This endpoint is only available in API version 2026-01-01.nova and newer.
577
+ *
578
+ * @example
579
+ * ```ts
580
+ * const response =
581
+ * await client.support.conversations.detachTag(
582
+ * '67ec1234abcd5678ef901234',
583
+ * {
584
+ * id: '12345',
585
+ * actingAdminId: '507f1f77bcf86cd799439011',
586
+ * },
587
+ * );
588
+ * ```
589
+ */
590
+ detachTag(tagID: string, params: ConversationDetachTagParams, options?: RequestOptions): APIPromise<ConversationDetachTagResponse>;
490
591
  /**
491
592
  * Redacts a conversation part (message) from a conversation. Redaction permanently
492
593
  * removes the message content while preserving the conversation structure.
@@ -676,6 +777,100 @@ export declare class Conversations extends APIResource {
676
777
  * ```
677
778
  */
678
779
  reply(id: string, params: ConversationReplyParams, options?: RequestOptions): APIPromise<ConversationPart>;
780
+ /**
781
+ * Search conversations with a structured filter AST and an optional full-text
782
+ * query.
783
+ *
784
+ * The endpoint has two modes that are picked automatically from the body:
785
+ *
786
+ * - **Filter mode** (`query` set, `search` omitted): structured filtering against
787
+ * indexed conversation fields. Sorted by `lastActivityAt` desc by default; set
788
+ * `sort` to `last_activity_at:asc` for the inverse.
789
+ * - **Search mode** (`search` set, `query` optional): full-text search across
790
+ * conversation messages, then narrowed by the same `query` AST so the same
791
+ * filters apply. Results are ranked by relevance.
792
+ *
793
+ * ### Structured query AST
794
+ *
795
+ * Each clause has the shape `{ field, operator, value }`. You can pass a single
796
+ * clause or wrap up to 15 in a top-level `AND` group:
797
+ *
798
+ * ```json
799
+ * {
800
+ * "query": {
801
+ * "operator": "AND",
802
+ * "value": [
803
+ * { "field": "state", "operator": "=", "value": "open" },
804
+ * {
805
+ * "field": "admin_assignee_id",
806
+ * "operator": "=",
807
+ * "value": "507f1f77bcf86cd799439011"
808
+ * }
809
+ * ]
810
+ * }
811
+ * }
812
+ * ```
813
+ *
814
+ * Top-level `OR` groups and nested groups are not supported in this version.
815
+ *
816
+ * ### Supported fields and operators
817
+ *
818
+ * | Field | Type | Operators |
819
+ * | ---------------------------- | ------------------------------------------------- | ---------------------- |
820
+ * | `state` | enum (`open` / `closed` / `snoozed`) | `=`, `!=`, `IN`, `NIN` |
821
+ * | `priority` | boolean | `=`, `!=` |
822
+ * | `admin_assignee_id` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
823
+ * | `team_assignee_id` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
824
+ * | `brand_id` | id or null | `=`, `!=`, `IN`, `NIN` |
825
+ * | `tag_ids` | id (matches any conversation containing this tag) | `=`, `!=`, `IN`, `NIN` |
826
+ * | `user_id` / `participant_id` | id of a conversation participant | `=`, `!=`, `IN`, `NIN` |
827
+ * | `mentioned_admin_ids` | admin id | `=`, `!=`, `IN`, `NIN` |
828
+ * | `created_at` | unix seconds | `=`, `>`, `<` |
829
+ *
830
+ * For unbounded fields a query consisting only of `!=` or `NIN` clauses is
831
+ * rejected with `query_too_broad` to prevent full-org scans. Combine the negation
832
+ * with at least one positive clause (`=`, `IN`, `>`, `<`) instead. Bounded enum
833
+ * fields (`state`, `priority`) are exempt because their negation is naturally
834
+ * bounded.
835
+ *
836
+ * ### Pagination
837
+ *
838
+ * Cursor-based, `limit` between 1 and 100 (default 10). Pagination cursors are
839
+ * mode-specific - reusing a filter-mode cursor in search mode (or vice versa)
840
+ * returns `400`. `totalCount` is approximate and capped at 1000;
841
+ * `totalCountCapped` is `true` when the real count may be higher.
842
+ *
843
+ * ### Response
844
+ *
845
+ * Returns a slim conversation row optimised for inbox / list rendering - just the
846
+ * fields you need to render a row and link to the conversation. Fetch the full
847
+ * conversation via `GET /v2/conversations/{id}` when the user opens one.
848
+ *
849
+ * Search-specific additions on each row:
850
+ *
851
+ * - `conversationUser` - the customer / lead the conversation is with. Use this
852
+ * for the row identity.
853
+ * - `latestConversationParts` - capped latest-message preview window. Each
854
+ * `previewMarkdown` value is truncated server-side; fetch the full conversation
855
+ * for complete history and full bodies.
856
+ * - `matchingPartAuthor` - author of the specific message that matched the search
857
+ * query (search mode only). May be a teammate or bot.
858
+ * - `matchingPart` - reference to the matched message (search mode only).
859
+ * - `matchingBodyPreviewMarkdown` - plain-text / markdown preview of the matched
860
+ * body (search mode only).
861
+ * - `relevanceScore` - aggregate score (search mode only).
862
+ *
863
+ * ### Version Availability
864
+ *
865
+ * This endpoint is only available in API version 2026-01-01.nova and newer.
866
+ *
867
+ * @example
868
+ * ```ts
869
+ * const response =
870
+ * await client.support.conversations.search();
871
+ * ```
872
+ */
873
+ search(params: ConversationSearchParams, options?: RequestOptions): APIPromise<ConversationSearchResponse>;
679
874
  }
680
875
  export type ConversationsCursorPage = CursorPage<Conversation>;
681
876
  export interface Conversation {
@@ -1653,7 +1848,7 @@ export declare namespace ConversationPart {
1653
1848
  /**
1654
1849
  * Actor that applied the tag
1655
1850
  */
1656
- actor?: TagsAPI.ConversationTagMutationActor;
1851
+ actor?: TagUpdate.Actor;
1657
1852
  /**
1658
1853
  * Tag name at the time of the event or the best available current display name
1659
1854
  */
@@ -1663,6 +1858,25 @@ export declare namespace ConversationPart {
1663
1858
  */
1664
1859
  targetPartId?: string | null;
1665
1860
  }
1861
+ namespace TagUpdate {
1862
+ /**
1863
+ * Actor that applied the tag
1864
+ */
1865
+ interface Actor {
1866
+ /**
1867
+ * Actor that caused the tag mutation
1868
+ */
1869
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
1870
+ /**
1871
+ * Actor identifier when available
1872
+ */
1873
+ id?: string | null;
1874
+ /**
1875
+ * Actor display name when available
1876
+ */
1877
+ name?: string | null;
1878
+ }
1879
+ }
1666
1880
  /**
1667
1881
  * Represents a workflow wait start, finish, or interruption in the conversation
1668
1882
  * thread
@@ -1842,7 +2056,7 @@ export interface ConversationTagApplication {
1842
2056
  /**
1843
2057
  * Actor that applied the tag
1844
2058
  */
1845
- appliedBy?: TagsAPI.ConversationTagMutationActor;
2059
+ appliedBy?: ConversationTagApplication.AppliedBy;
1846
2060
  /**
1847
2061
  * ISO timestamp when the tag was removed from this reply, if it was removed
1848
2062
  */
@@ -1850,12 +2064,48 @@ export interface ConversationTagApplication {
1850
2064
  /**
1851
2065
  * Actor that applied the tag
1852
2066
  */
1853
- removedBy?: TagsAPI.ConversationTagMutationActor;
2067
+ removedBy?: ConversationTagApplication.RemovedBy;
1854
2068
  /**
1855
2069
  * Resolved tag object when the tag still exists in the shared workspace catalog
1856
2070
  */
1857
2071
  tag?: ConversationTagsAPI.ConversationTag;
1858
2072
  }
2073
+ export declare namespace ConversationTagApplication {
2074
+ /**
2075
+ * Actor that applied the tag
2076
+ */
2077
+ interface AppliedBy {
2078
+ /**
2079
+ * Actor that caused the tag mutation
2080
+ */
2081
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2082
+ /**
2083
+ * Actor identifier when available
2084
+ */
2085
+ id?: string | null;
2086
+ /**
2087
+ * Actor display name when available
2088
+ */
2089
+ name?: string | null;
2090
+ }
2091
+ /**
2092
+ * Actor that applied the tag
2093
+ */
2094
+ interface RemovedBy {
2095
+ /**
2096
+ * Actor that caused the tag mutation
2097
+ */
2098
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2099
+ /**
2100
+ * Actor identifier when available
2101
+ */
2102
+ id?: string | null;
2103
+ /**
2104
+ * Actor display name when available
2105
+ */
2106
+ name?: string | null;
2107
+ }
2108
+ }
1859
2109
  export interface CsatEmailDelivery {
1860
2110
  /**
1861
2111
  * Email delivery status for the CSAT request when applicable
@@ -1933,6 +2183,453 @@ export interface ConversationDeleteResponse {
1933
2183
  */
1934
2184
  object: 'conversation';
1935
2185
  }
2186
+ export interface ConversationAttachTagResponse {
2187
+ /**
2188
+ * Unique tag identifier
2189
+ */
2190
+ id: string;
2191
+ /**
2192
+ * Current tag name
2193
+ */
2194
+ name: string;
2195
+ /**
2196
+ * Object type identifier for a tag
2197
+ */
2198
+ type: 'tag';
2199
+ /**
2200
+ * ISO timestamp when the tag was applied
2201
+ */
2202
+ appliedAt?: string | null;
2203
+ /**
2204
+ * Actor that applied the tag
2205
+ */
2206
+ appliedBy?: ConversationAttachTagResponse.AppliedBy | null;
2207
+ /**
2208
+ * ISO timestamp when the tag was removed, if applicable
2209
+ */
2210
+ removedAt?: string | null;
2211
+ /**
2212
+ * Actor that applied the tag
2213
+ */
2214
+ removedBy?: ConversationAttachTagResponse.RemovedBy | null;
2215
+ /**
2216
+ * Reply/message ID used as the deterministic attachment target for this
2217
+ * conversation tag mutation.
2218
+ */
2219
+ targetPartId?: string | null;
2220
+ }
2221
+ export declare namespace ConversationAttachTagResponse {
2222
+ /**
2223
+ * Actor that applied the tag
2224
+ */
2225
+ interface AppliedBy {
2226
+ /**
2227
+ * Actor that caused the tag mutation
2228
+ */
2229
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2230
+ /**
2231
+ * Actor identifier when available
2232
+ */
2233
+ id?: string | null;
2234
+ /**
2235
+ * Actor display name when available
2236
+ */
2237
+ name?: string | null;
2238
+ }
2239
+ /**
2240
+ * Actor that applied the tag
2241
+ */
2242
+ interface RemovedBy {
2243
+ /**
2244
+ * Actor that caused the tag mutation
2245
+ */
2246
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2247
+ /**
2248
+ * Actor identifier when available
2249
+ */
2250
+ id?: string | null;
2251
+ /**
2252
+ * Actor display name when available
2253
+ */
2254
+ name?: string | null;
2255
+ }
2256
+ }
2257
+ export interface ConversationDetachTagResponse {
2258
+ /**
2259
+ * Unique tag identifier
2260
+ */
2261
+ id: string;
2262
+ /**
2263
+ * Current tag name
2264
+ */
2265
+ name: string;
2266
+ /**
2267
+ * Object type identifier for a tag
2268
+ */
2269
+ type: 'tag';
2270
+ /**
2271
+ * ISO timestamp when the tag was applied
2272
+ */
2273
+ appliedAt?: string | null;
2274
+ /**
2275
+ * Actor that applied the tag
2276
+ */
2277
+ appliedBy?: ConversationDetachTagResponse.AppliedBy | null;
2278
+ /**
2279
+ * ISO timestamp when the tag was removed, if applicable
2280
+ */
2281
+ removedAt?: string | null;
2282
+ /**
2283
+ * Actor that applied the tag
2284
+ */
2285
+ removedBy?: ConversationDetachTagResponse.RemovedBy | null;
2286
+ /**
2287
+ * Reply/message ID used as the deterministic attachment target for this
2288
+ * conversation tag mutation.
2289
+ */
2290
+ targetPartId?: string | null;
2291
+ }
2292
+ export declare namespace ConversationDetachTagResponse {
2293
+ /**
2294
+ * Actor that applied the tag
2295
+ */
2296
+ interface AppliedBy {
2297
+ /**
2298
+ * Actor that caused the tag mutation
2299
+ */
2300
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2301
+ /**
2302
+ * Actor identifier when available
2303
+ */
2304
+ id?: string | null;
2305
+ /**
2306
+ * Actor display name when available
2307
+ */
2308
+ name?: string | null;
2309
+ }
2310
+ /**
2311
+ * Actor that applied the tag
2312
+ */
2313
+ interface RemovedBy {
2314
+ /**
2315
+ * Actor that caused the tag mutation
2316
+ */
2317
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2318
+ /**
2319
+ * Actor identifier when available
2320
+ */
2321
+ id?: string | null;
2322
+ /**
2323
+ * Actor display name when available
2324
+ */
2325
+ name?: string | null;
2326
+ }
2327
+ }
2328
+ export interface ConversationSearchResponse {
2329
+ /**
2330
+ * Array of search results
2331
+ */
2332
+ data: Array<ConversationSearchResponse.Data>;
2333
+ /**
2334
+ * Cursor for fetching the next page (null if no more results)
2335
+ */
2336
+ nextCursor: string | null;
2337
+ /**
2338
+ * Object type identifier
2339
+ */
2340
+ object: 'list';
2341
+ /**
2342
+ * Total number of conversations matching the query, capped at 200. When the actual
2343
+ * total is at or above the cap, `totalCountCapped` is true and the value is
2344
+ * exactly the cap.
2345
+ */
2346
+ totalCount?: number;
2347
+ /**
2348
+ * True when totalCount is exactly the cap and the real count is `>= totalCount`.
2349
+ * UI may render as "200+".
2350
+ */
2351
+ totalCountCapped?: boolean;
2352
+ }
2353
+ export declare namespace ConversationSearchResponse {
2354
+ interface Data {
2355
+ /**
2356
+ * Unique conversation identifier
2357
+ */
2358
+ id: string;
2359
+ /**
2360
+ * ID of the assigned admin
2361
+ */
2362
+ adminAssigneeId: string | null;
2363
+ /**
2364
+ * ID of the brand associated with this conversation
2365
+ */
2366
+ brandId: string | null;
2367
+ /**
2368
+ * ISO timestamp when conversation was created
2369
+ */
2370
+ createdAt: string;
2371
+ /**
2372
+ * ISO timestamp of last activity
2373
+ */
2374
+ lastActivityAt: string | null;
2375
+ /**
2376
+ * Object type identifier
2377
+ */
2378
+ object: 'conversation';
2379
+ /**
2380
+ * Participants in this conversation
2381
+ */
2382
+ participants: Array<ConversationsAPI.ConversationParticipant>;
2383
+ /**
2384
+ * Whether this conversation is marked as priority
2385
+ */
2386
+ priority: boolean;
2387
+ /**
2388
+ * ISO timestamp when priority was set
2389
+ */
2390
+ prioritySetAt: string | null;
2391
+ /**
2392
+ * Current state of the conversation
2393
+ */
2394
+ state: 'open' | 'closed' | 'snoozed';
2395
+ /**
2396
+ * Current tags applied anywhere in this conversation
2397
+ */
2398
+ tags: Array<ConversationTagsAPI.ConversationTag>;
2399
+ /**
2400
+ * ID of the assigned team
2401
+ */
2402
+ teamAssigneeId: string | null;
2403
+ /**
2404
+ * ISO timestamp when conversation was last updated
2405
+ */
2406
+ updatedAt: string;
2407
+ /**
2408
+ * Whether we are awaiting a customer reply
2409
+ */
2410
+ awaitingCustomerReply?: boolean;
2411
+ /**
2412
+ * The customer or lead the conversation is with. Use this for the row identity;
2413
+ * use `matchingPartAuthor` if you specifically want the message author.
2414
+ */
2415
+ conversationUser?: Data.ConversationUser | null;
2416
+ /**
2417
+ * Latest conversation messages for lightweight timeline previews. Capped and
2418
+ * truncated by the server; fetch the full conversation for complete message
2419
+ * history.
2420
+ */
2421
+ latestConversationParts?: Array<Data.LatestConversationPart>;
2422
+ /**
2423
+ * Plain-text / markdown preview of the matching conversation part body (search
2424
+ * mode only)
2425
+ */
2426
+ matchingBodyPreviewMarkdown?: string | null;
2427
+ /**
2428
+ * Reference to the conversation part that best matched the search query (search
2429
+ * mode only)
2430
+ */
2431
+ matchingPart?: Data.MatchingPart | null;
2432
+ /**
2433
+ * The customer or lead the conversation is with. Use this for the row identity;
2434
+ * use `matchingPartAuthor` if you specifically want the message author.
2435
+ */
2436
+ matchingPartAuthor?: Data.MatchingPartAuthor | null;
2437
+ /**
2438
+ * Aggregate relevance score for the conversation (search mode only). Higher is
2439
+ * more relevant.
2440
+ */
2441
+ relevanceScore?: number | null;
2442
+ source?: Data.Source;
2443
+ /**
2444
+ * Conversation title
2445
+ */
2446
+ title?: string;
2447
+ }
2448
+ namespace Data {
2449
+ /**
2450
+ * The customer or lead the conversation is with. Use this for the row identity;
2451
+ * use `matchingPartAuthor` if you specifically want the message author.
2452
+ */
2453
+ interface ConversationUser {
2454
+ /**
2455
+ * Author id
2456
+ */
2457
+ id: string;
2458
+ /**
2459
+ * Author type
2460
+ */
2461
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
2462
+ /**
2463
+ * Companies the author belongs to (customers only)
2464
+ */
2465
+ companies?: Array<ConversationUser.Company>;
2466
+ /**
2467
+ * Email when known
2468
+ */
2469
+ email?: string | null;
2470
+ /**
2471
+ * Display name when known
2472
+ */
2473
+ name?: string | null;
2474
+ /**
2475
+ * Profile picture URL when known
2476
+ */
2477
+ profilePicture?: string | null;
2478
+ }
2479
+ namespace ConversationUser {
2480
+ interface Company {
2481
+ id: string;
2482
+ name?: string;
2483
+ }
2484
+ }
2485
+ interface LatestConversationPart {
2486
+ /**
2487
+ * Conversation part id
2488
+ */
2489
+ id: string;
2490
+ /**
2491
+ * Plain-text truncated preview of the part body
2492
+ */
2493
+ previewMarkdown: string | null;
2494
+ /**
2495
+ * True when previewMarkdown was truncated by the server
2496
+ */
2497
+ previewMarkdownTruncated: boolean;
2498
+ /**
2499
+ * The customer or lead the conversation is with. Use this for the row identity;
2500
+ * use `matchingPartAuthor` if you specifically want the message author.
2501
+ */
2502
+ author?: LatestConversationPart.Author | null;
2503
+ /**
2504
+ * ISO timestamp when the part was created
2505
+ */
2506
+ createdAt?: string | null;
2507
+ /**
2508
+ * Conversation part type
2509
+ */
2510
+ partType?: string;
2511
+ }
2512
+ namespace LatestConversationPart {
2513
+ /**
2514
+ * The customer or lead the conversation is with. Use this for the row identity;
2515
+ * use `matchingPartAuthor` if you specifically want the message author.
2516
+ */
2517
+ interface Author {
2518
+ /**
2519
+ * Author id
2520
+ */
2521
+ id: string;
2522
+ /**
2523
+ * Author type
2524
+ */
2525
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
2526
+ /**
2527
+ * Companies the author belongs to (customers only)
2528
+ */
2529
+ companies?: Array<Author.Company>;
2530
+ /**
2531
+ * Email when known
2532
+ */
2533
+ email?: string | null;
2534
+ /**
2535
+ * Display name when known
2536
+ */
2537
+ name?: string | null;
2538
+ /**
2539
+ * Profile picture URL when known
2540
+ */
2541
+ profilePicture?: string | null;
2542
+ }
2543
+ namespace Author {
2544
+ interface Company {
2545
+ id: string;
2546
+ name?: string;
2547
+ }
2548
+ }
2549
+ }
2550
+ /**
2551
+ * Reference to the conversation part that best matched the search query (search
2552
+ * mode only)
2553
+ */
2554
+ interface MatchingPart {
2555
+ /**
2556
+ * Conversation part id
2557
+ */
2558
+ id: string;
2559
+ /**
2560
+ * ISO timestamp when the matching part was created
2561
+ */
2562
+ createdAt?: string | null;
2563
+ /**
2564
+ * Conversation part type
2565
+ */
2566
+ partType?: string;
2567
+ }
2568
+ /**
2569
+ * The customer or lead the conversation is with. Use this for the row identity;
2570
+ * use `matchingPartAuthor` if you specifically want the message author.
2571
+ */
2572
+ interface MatchingPartAuthor {
2573
+ /**
2574
+ * Author id
2575
+ */
2576
+ id: string;
2577
+ /**
2578
+ * Author type
2579
+ */
2580
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
2581
+ /**
2582
+ * Companies the author belongs to (customers only)
2583
+ */
2584
+ companies?: Array<MatchingPartAuthor.Company>;
2585
+ /**
2586
+ * Email when known
2587
+ */
2588
+ email?: string | null;
2589
+ /**
2590
+ * Display name when known
2591
+ */
2592
+ name?: string | null;
2593
+ /**
2594
+ * Profile picture URL when known
2595
+ */
2596
+ profilePicture?: string | null;
2597
+ }
2598
+ namespace MatchingPartAuthor {
2599
+ interface Company {
2600
+ id: string;
2601
+ name?: string;
2602
+ }
2603
+ }
2604
+ interface Source {
2605
+ /**
2606
+ * Body of the initial message as HTML with signed image URLs
2607
+ */
2608
+ bodyHtml: string;
2609
+ /**
2610
+ * Body of the initial message as markdown
2611
+ */
2612
+ bodyMarkdown: string;
2613
+ /**
2614
+ * Channel through which the conversation was initiated
2615
+ */
2616
+ channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email';
2617
+ author?: ConversationsAPI.ConversationParticipant;
2618
+ /**
2619
+ * How the conversation was initiated
2620
+ */
2621
+ deliveredAs?: 'customer_initiated' | 'admin_initiated';
2622
+ /**
2623
+ * Subject line for email conversations
2624
+ */
2625
+ subject?: string;
2626
+ /**
2627
+ * URL where the conversation was initiated
2628
+ */
2629
+ url?: string;
2630
+ }
2631
+ }
2632
+ }
1936
2633
  export interface ConversationCreateParams {
1937
2634
  /**
1938
2635
  * Body param: The content of the initial message in markdown format. Images
@@ -2116,6 +2813,38 @@ export interface ConversationDeleteParams {
2116
2813
  */
2117
2814
  'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2118
2815
  }
2816
+ export interface ConversationAttachTagParams {
2817
+ /**
2818
+ * Body param: Required admin ID performing this tag attachment. Must be a member
2819
+ * of the organization so the mutation can be attributed to a real admin actor.
2820
+ */
2821
+ actingAdminId: string;
2822
+ /**
2823
+ * Body param: The Featurebase tag ID to attach to the conversation.
2824
+ */
2825
+ tagId: string;
2826
+ /**
2827
+ * Header param: API version for this request. Defaults to your organization's
2828
+ * configured API version if not specified.
2829
+ */
2830
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2831
+ }
2832
+ export interface ConversationDetachTagParams {
2833
+ /**
2834
+ * Path param: Conversation ID (short ID)
2835
+ */
2836
+ id: string;
2837
+ /**
2838
+ * Body param: Required admin ID performing this tag removal. Must be a member of
2839
+ * the organization so the mutation can be attributed to a real admin actor.
2840
+ */
2841
+ actingAdminId: string;
2842
+ /**
2843
+ * Header param: API version for this request. Defaults to your organization's
2844
+ * configured API version if not specified.
2845
+ */
2846
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2847
+ }
2119
2848
  export interface ConversationRedactParams {
2120
2849
  /**
2121
2850
  * Body param: The conversation short ID that contains the part to redact
@@ -2209,9 +2938,82 @@ export declare namespace ConversationReplyParams {
2209
2938
  'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2210
2939
  }
2211
2940
  }
2941
+ export interface ConversationSearchParams {
2942
+ /**
2943
+ * Body param: An opaque cursor for pagination. Use the nextCursor value from a
2944
+ * previous response to fetch the next page of results.
2945
+ */
2946
+ cursor?: string;
2947
+ /**
2948
+ * Body param: A limit on the number of objects to be returned, between 1 and 100.
2949
+ */
2950
+ limit?: number;
2951
+ /**
2952
+ * Body param: Structured filter AST. Either a single filter clause or one
2953
+ * top-level AND group. Use this for filtering by `state`, `tag_ids`,
2954
+ * `admin_assignee_id`, etc.
2955
+ */
2956
+ query?: ConversationSearchParams.ConversationSearchFilter | ConversationSearchParams.ConversationSearchFilterGroup;
2957
+ /**
2958
+ * Body param: Plain-text full-text search across conversation messages.
2959
+ * Server-managed - no operators, no field selection.
2960
+ */
2961
+ search?: string;
2962
+ /**
2963
+ * Body param: Sort direction for filter mode (ignored in search mode where results
2964
+ * are sorted by relevance). Defaults to last_activity_at:desc.
2965
+ */
2966
+ sort?: 'last_activity_at:desc' | 'last_activity_at:asc';
2967
+ /**
2968
+ * Header param: API version for this request. Defaults to your organization's
2969
+ * configured API version if not specified.
2970
+ */
2971
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2972
+ }
2973
+ export declare namespace ConversationSearchParams {
2974
+ interface ConversationSearchFilter {
2975
+ /**
2976
+ * Field name to filter on (e.g. `state`, `tag_ids`, `created_at`)
2977
+ */
2978
+ field: string;
2979
+ /**
2980
+ * Comparison operator
2981
+ */
2982
+ operator: '=' | '!=' | 'IN' | 'NIN' | '>' | '<' | '~' | '!~' | '^' | '$';
2983
+ /**
2984
+ * Value to compare against (primitive or array of primitives)
2985
+ */
2986
+ value: string | number | boolean | Array<string | number> | null;
2987
+ }
2988
+ interface ConversationSearchFilterGroup {
2989
+ /**
2990
+ * Group operator: AND (all match) or OR (any match)
2991
+ */
2992
+ operator: 'AND' | 'OR';
2993
+ /**
2994
+ * Array of filter clauses (1-15 entries)
2995
+ */
2996
+ value: Array<ConversationSearchFilterGroup.Value>;
2997
+ }
2998
+ namespace ConversationSearchFilterGroup {
2999
+ interface Value {
3000
+ /**
3001
+ * Field name to filter on (e.g. `state`, `tag_ids`, `created_at`)
3002
+ */
3003
+ field: string;
3004
+ /**
3005
+ * Comparison operator
3006
+ */
3007
+ operator: '=' | '!=' | 'IN' | 'NIN' | '>' | '<' | '~' | '!~' | '^' | '$';
3008
+ /**
3009
+ * Value to compare against (primitive or array of primitives)
3010
+ */
3011
+ value: string | number | boolean | Array<string | number> | null;
3012
+ }
3013
+ }
3014
+ }
2212
3015
  export declare namespace Conversations {
2213
- export { type Conversation as Conversation, type ConversationPart as ConversationPart, type ConversationPartAuthor as ConversationPartAuthor, type ConversationParticipant as ConversationParticipant, type ConversationTagApplication as ConversationTagApplication, type CsatEmailDelivery as CsatEmailDelivery, type CsatRatedAgent as CsatRatedAgent, type CsatWorkflowLink as CsatWorkflowLink, type EmailRecipients as EmailRecipients, type ConversationDeleteResponse as ConversationDeleteResponse, type ConversationsCursorPage as ConversationsCursorPage, type ConversationCreateParams as ConversationCreateParams, type ConversationRetrieveParams as ConversationRetrieveParams, type ConversationUpdateParams as ConversationUpdateParams, type ConversationListParams as ConversationListParams, type ConversationDeleteParams as ConversationDeleteParams, type ConversationRedactParams as ConversationRedactParams, type ConversationReplyParams as ConversationReplyParams, };
2214
- export { Tags as Tags, type AttachedConversationTag as AttachedConversationTag, type ConversationTagMutationActor as ConversationTagMutationActor, type TagAttachParams as TagAttachParams, type TagDetachParams as TagDetachParams, };
3016
+ export { type Conversation as Conversation, type ConversationPart as ConversationPart, type ConversationPartAuthor as ConversationPartAuthor, type ConversationParticipant as ConversationParticipant, type ConversationTagApplication as ConversationTagApplication, type CsatEmailDelivery as CsatEmailDelivery, type CsatRatedAgent as CsatRatedAgent, type CsatWorkflowLink as CsatWorkflowLink, type EmailRecipients as EmailRecipients, type ConversationDeleteResponse as ConversationDeleteResponse, type ConversationAttachTagResponse as ConversationAttachTagResponse, type ConversationDetachTagResponse as ConversationDetachTagResponse, type ConversationSearchResponse as ConversationSearchResponse, type ConversationsCursorPage as ConversationsCursorPage, type ConversationCreateParams as ConversationCreateParams, type ConversationRetrieveParams as ConversationRetrieveParams, type ConversationUpdateParams as ConversationUpdateParams, type ConversationListParams as ConversationListParams, type ConversationDeleteParams as ConversationDeleteParams, type ConversationAttachTagParams as ConversationAttachTagParams, type ConversationDetachTagParams as ConversationDetachTagParams, type ConversationRedactParams as ConversationRedactParams, type ConversationReplyParams as ConversationReplyParams, type ConversationSearchParams as ConversationSearchParams, };
2215
3017
  export { Participants as Participants, type ParticipantAddParams as ParticipantAddParams, type ParticipantRemoveParams as ParticipantRemoveParams, };
2216
3018
  }
2217
3019
  //# sourceMappingURL=conversations.d.ts.map