useyuva 0.0.4 → 0.0.6

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.
@@ -396,6 +396,35 @@ export interface paths {
396
396
  patch?: never;
397
397
  trace?: never;
398
398
  };
399
+ "/v1/me/mentions": {
400
+ parameters: {
401
+ query?: never;
402
+ header?: never;
403
+ path?: never;
404
+ cookie?: never;
405
+ };
406
+ /**
407
+ * Notes that mention you
408
+ * @description Notes in the workspace whose `mentions` name the calling member, written by someone else,
409
+ * newest first, in conversations the member can see now. Each item has the note (a preview
410
+ * of its text and its author), the conversation, and `seen`: whether the member has read the
411
+ * conversation up to the note (`POST /v1/conversations/{id}/read`, or writing in it). The
412
+ * page carries `unseen`, the number of unseen mentions over all pages, for a badge. Member
413
+ * sessions only.
414
+ *
415
+ * Realtime: a new mention arrives as `message.created` with `kind: note` and the member in
416
+ * `mentions`; `conversation.read` changes `seen`; `conversation.moved` and
417
+ * `inbox_access.changed` can hide or show items.
418
+ */
419
+ get: operations["listMentions"];
420
+ put?: never;
421
+ post?: never;
422
+ delete?: never;
423
+ options?: never;
424
+ head?: never;
425
+ patch?: never;
426
+ trace?: never;
427
+ };
399
428
  "/v1/workspace": {
400
429
  parameters: {
401
430
  query?: never;
@@ -442,7 +471,9 @@ export interface paths {
442
471
  };
443
472
  /**
444
473
  * List members
445
- * @description Scope: `inboxes:read`.
474
+ * @description Every member of the workspace with their `availability` and whether they are `online`.
475
+ *
476
+ * Scope: `inboxes:read`.
446
477
  */
447
478
  get: operations["listMembers"];
448
479
  put?: never;
@@ -812,7 +843,11 @@ export interface paths {
812
843
  };
813
844
  /**
814
845
  * List contacts
815
- * @description Newest first. `q` searches names, e-mail addresses and external ids.
846
+ * @description Newest first, or most recently active first with `sort=last_seen` (contacts never seen sort
847
+ * by when they were created). `q` searches names, e-mail addresses and external ids.
848
+ * With `sort=last_seen`, a contact who becomes active while you page moves above the pages
849
+ * already read and does not appear on the later ones; no contact appears twice.
850
+ * Each item carries `activity`, counted over the inboxes the caller can see.
816
851
  *
817
852
  * Scope: `contacts:read`.
818
853
  */
@@ -940,6 +975,80 @@ export interface paths {
940
975
  patch?: never;
941
976
  trace?: never;
942
977
  };
978
+ "/v1/contacts/{contactId}/notes": {
979
+ parameters: {
980
+ query?: never;
981
+ header?: never;
982
+ path?: never;
983
+ cookie?: never;
984
+ };
985
+ /**
986
+ * List notes about a contact
987
+ * @description Team-only notes about the contact, not tied to a conversation, newest first. Whoever can
988
+ * see the contact can read and add them; contacts never see them, and no event or webhook
989
+ * carries them.
990
+ *
991
+ * Scope: `contacts:read`.
992
+ */
993
+ get: operations["listContactNotes"];
994
+ put?: never;
995
+ /**
996
+ * Add a note about a contact
997
+ * @description Scope: `contacts:write`.
998
+ */
999
+ post: operations["createContactNote"];
1000
+ delete?: never;
1001
+ options?: never;
1002
+ head?: never;
1003
+ patch?: never;
1004
+ trace?: never;
1005
+ };
1006
+ "/v1/contacts/{contactId}/notes/{noteId}": {
1007
+ parameters: {
1008
+ query?: never;
1009
+ header?: never;
1010
+ path?: never;
1011
+ cookie?: never;
1012
+ };
1013
+ get?: never;
1014
+ put?: never;
1015
+ post?: never;
1016
+ /**
1017
+ * Delete a note about a contact
1018
+ * @description Its author (a member, or the API key that wrote it) or an owner or admin; anyone else gets
1019
+ * `403 forbidden`.
1020
+ *
1021
+ * Scope: `contacts:write`.
1022
+ */
1023
+ delete: operations["deleteContactNote"];
1024
+ options?: never;
1025
+ head?: never;
1026
+ patch?: never;
1027
+ trace?: never;
1028
+ };
1029
+ "/v1/contacts/{contactId}/summary": {
1030
+ parameters: {
1031
+ query?: never;
1032
+ header?: never;
1033
+ path?: never;
1034
+ cookie?: never;
1035
+ };
1036
+ /**
1037
+ * How the team served a contact
1038
+ * @description First-reply time and ratings over the contact's conversations the caller can see. The
1039
+ * counts of conversations are on the contact's `activity`.
1040
+ *
1041
+ * Scope: `contacts:read` and `conversations:read`.
1042
+ */
1043
+ get: operations["getContactSummary"];
1044
+ put?: never;
1045
+ post?: never;
1046
+ delete?: never;
1047
+ options?: never;
1048
+ head?: never;
1049
+ patch?: never;
1050
+ trace?: never;
1051
+ };
943
1052
  "/v1/contacts/{contactId}/presence": {
944
1053
  parameters: {
945
1054
  query?: never;
@@ -952,7 +1061,7 @@ export interface paths {
952
1061
  * @description Whether the contact has a live `/client/v1/realtime` connection (widget or app in the
953
1062
  * foreground), and when one was last seen. A host backend that sends its own push
954
1063
  * notifications can skip the push while the contact is online; webhooks carry the same
955
- * `contact.online`.
1064
+ * `contact.online`, and `contact.presence` events on `/v1/realtime` report changes.
956
1065
  *
957
1066
  * Scope: `contacts:read`.
958
1067
  */
@@ -981,7 +1090,8 @@ export interface paths {
981
1090
  * Scope: `conversations:read`.
982
1091
  *
983
1092
  * Each item carries the contact (id, name, first e-mail address), a preview of the last
984
- * `message` (notes and events are not previewed) and `unread` for the calling member.
1093
+ * `message` (notes and events are not previewed), and `unread` and `pinned_at` for the
1094
+ * calling member.
985
1095
  */
986
1096
  get: operations["listConversations"];
987
1097
  put?: never;
@@ -1006,8 +1116,8 @@ export interface paths {
1006
1116
  /**
1007
1117
  * Count open conversations
1008
1118
  * @description Open conversations in the inboxes the caller can see: all of them, those assigned to the
1009
- * calling member (`0` for API keys), unassigned ones, and per inbox and per label. Inboxes and
1010
- * labels without open conversations are left out of their lists. Conversations flagged as
1119
+ * calling member (`0` for API keys), unassigned ones, and per inbox, per assignee and per
1120
+ * label. Inboxes, assignees and labels without open conversations are left out of their lists. Conversations flagged as
1011
1121
  * spam are counted only in `spam`.
1012
1122
  *
1013
1123
  * Scope: `conversations:read`.
@@ -1021,6 +1131,36 @@ export interface paths {
1021
1131
  patch?: never;
1022
1132
  trace?: never;
1023
1133
  };
1134
+ "/v1/stats": {
1135
+ parameters: {
1136
+ query?: never;
1137
+ header?: never;
1138
+ path?: never;
1139
+ cookie?: never;
1140
+ };
1141
+ /**
1142
+ * Team activity since a moment
1143
+ * @description What the team did in the inboxes the caller can see (or in one of them) from `since` until
1144
+ * now: replies sent by members (messages members wrote or drafts they sent; not notes, not
1145
+ * bots' own messages), conversations closed, the median time from a contact's first
1146
+ * message to the first member reply, over the conversations whose first reply falls in the
1147
+ * window, and the ratings contacts gave in it. `members` breaks replies and closes down per member, leaving out members with
1148
+ * neither. Nothing is stored for it; it is counted from the messages each time.
1149
+ *
1150
+ * `since` defaults to the start of today in `timezone` (an IANA name, `UTC` by default); the
1151
+ * panel sends the browser's zone. It must be in the past and at most 366 days ago.
1152
+ *
1153
+ * Scope: `conversations:read`.
1154
+ */
1155
+ get: operations["getStats"];
1156
+ put?: never;
1157
+ post?: never;
1158
+ delete?: never;
1159
+ options?: never;
1160
+ head?: never;
1161
+ patch?: never;
1162
+ trace?: never;
1163
+ };
1024
1164
  "/v1/conversations/bulk": {
1025
1165
  parameters: {
1026
1166
  query?: never;
@@ -1190,6 +1330,57 @@ export interface paths {
1190
1330
  patch?: never;
1191
1331
  trace?: never;
1192
1332
  };
1333
+ "/v1/conversations/{conversationId}/unread": {
1334
+ parameters: {
1335
+ query?: never;
1336
+ header?: never;
1337
+ path?: never;
1338
+ cookie?: never;
1339
+ };
1340
+ get?: never;
1341
+ put?: never;
1342
+ /**
1343
+ * Mark a conversation unread
1344
+ * @description Marks the conversation unread for the calling member, wherever their read cursor is: it is
1345
+ * `unread` in their lists until they read it again (`POST .../read`, or a message or note
1346
+ * of their own). Others are not affected. A `conversation.read` event with `unread: true`
1347
+ * reaches the member's connections. Member sessions only.
1348
+ */
1349
+ post: operations["markConversationUnread"];
1350
+ delete?: never;
1351
+ options?: never;
1352
+ head?: never;
1353
+ patch?: never;
1354
+ trace?: never;
1355
+ };
1356
+ "/v1/conversations/{conversationId}/pin": {
1357
+ parameters: {
1358
+ query?: never;
1359
+ header?: never;
1360
+ path?: never;
1361
+ cookie?: never;
1362
+ };
1363
+ get?: never;
1364
+ /**
1365
+ * Pin a conversation
1366
+ * @description Pins the conversation to the top of the calling member's lists; nobody else sees it.
1367
+ * Pinning a pinned conversation keeps its `pinned_at`. A `conversation.pin` event reaches the
1368
+ * member's connections. Member sessions only.
1369
+ */
1370
+ put: operations["pinConversation"];
1371
+ post?: never;
1372
+ /**
1373
+ * Unpin a conversation
1374
+ * @description Takes the calling member's pin away; unpinning a conversation that is not pinned changes
1375
+ * nothing. A `conversation.pin` event reaches the member's connections when a pin was
1376
+ * removed. Member sessions only.
1377
+ */
1378
+ delete: operations["unpinConversation"];
1379
+ options?: never;
1380
+ head?: never;
1381
+ patch?: never;
1382
+ trace?: never;
1383
+ };
1193
1384
  "/v1/conversations/{conversationId}/typing": {
1194
1385
  parameters: {
1195
1386
  query?: never;
@@ -1215,6 +1406,37 @@ export interface paths {
1215
1406
  patch?: never;
1216
1407
  trace?: never;
1217
1408
  };
1409
+ "/v1/drafts": {
1410
+ parameters: {
1411
+ query?: never;
1412
+ header?: never;
1413
+ path?: never;
1414
+ cookie?: never;
1415
+ };
1416
+ /**
1417
+ * List pending drafts
1418
+ * @description Drafts waiting to be sent, edited or discarded in the conversations the caller can see,
1419
+ * newest first, each with its conversation. `author` narrows them to drafts by bots (API
1420
+ * keys), by assistants (members through an OAuth client, `author.via` set) or by members in
1421
+ * the panel. The page carries `total`, the number of drafts matching the filters over all
1422
+ * pages, for a badge.
1423
+ *
1424
+ * Scope: `conversations:read`.
1425
+ *
1426
+ * Realtime: `draft.created`, `draft.updated` and `draft.deleted` carry the draft; a sent
1427
+ * draft arrives as `message.created` with the draft's id and `draft: false`;
1428
+ * `conversation.updated`, `conversation.moved` and `inbox_access.changed` can change the
1429
+ * conversation summary or hide items.
1430
+ */
1431
+ get: operations["listDrafts"];
1432
+ put?: never;
1433
+ post?: never;
1434
+ delete?: never;
1435
+ options?: never;
1436
+ head?: never;
1437
+ patch?: never;
1438
+ trace?: never;
1439
+ };
1218
1440
  "/v1/attachments/{attachmentId}": {
1219
1441
  parameters: {
1220
1442
  query?: never;
@@ -1305,8 +1527,8 @@ export interface paths {
1305
1527
  /**
1306
1528
  * Get a message's e-mail details
1307
1529
  * @description The full text with the quoted history and signature that the thread hides, the full
1308
- * sanitized HTML, and the headers that matter. Only messages that came or went by e-mail
1309
- * have them; others answer `404`.
1530
+ * sanitized HTML, the original HTML with the sender's styling, and the headers that matter.
1531
+ * Only messages that came or went by e-mail have them; others answer `404`.
1310
1532
  *
1311
1533
  * Scope: `conversations:read`.
1312
1534
  */
@@ -1886,9 +2108,15 @@ export interface paths {
1886
2108
  * arrives and every 30 seconds. An API key or token needs `conversations:read`, and contact
1887
2109
  * events reach it only with `contacts:read`. `inbox.created` reaches owners,
1888
2110
  * admins and API keys (an agent learns of a new inbox from `inbox_access.changed`);
1889
- * `inbox.deleted` reaches everyone who could see the inbox. `conversation.read` reaches only
1890
- * the connections of the member who read. `typing` (a contact or another member typing) has no
1891
- * `id`, is not stored and is not replayed.
2111
+ * `inbox.deleted` reaches everyone who could see the inbox. `conversation.read` and
2112
+ * `conversation.pin` reach only the connections of the member who read or pinned. `typing` (a contact or another member typing) has no
2113
+ * `id`, is not stored and is not replayed. `member.presence` (a member of the workspace opened
2114
+ * or closed the panel or changed `availability`) reaches member sessions only, also has no
2115
+ * `id` and is not replayed; so does `viewing` (another member opened or left a conversation),
2116
+ * which follows inbox access like conversation events. `contact.presence` (a contact
2117
+ * connected to or disconnected from `/client/v1/realtime`) follows contact events, also has no
2118
+ * `id` and is not replayed. `contact.read` (the contact read the conversation up to a
2119
+ * message) follows conversation events.
1892
2120
  *
1893
2121
  * A member session's open connection also makes the member available to contacts of `live`
1894
2122
  * inboxes they can access (see `availability` on `/v1/me`).
@@ -1905,8 +2133,10 @@ export interface paths {
1905
2133
  * a text frame `{"type": "viewing", "conversation_id": "<id>"}`, and
1906
2134
  * `{"type": "viewing", "conversation_id": null}` when it shows none or the page is hidden;
1907
2135
  * send it again after every reconnect. While a connection of the member views a
1908
- * conversation, the member gets no push or e-mail notification about it. Other client
1909
- * frames are ignored. Close codes: 1008 (`unauthenticated`, `forbidden`) when the session
2136
+ * conversation, the member gets no push or e-mail notification about it. Other members who
2137
+ * can see the conversation get a `viewing` event when the member opens or leaves it, and
2138
+ * the reporting connection gets a `viewing` event for each other member already there.
2139
+ * Other client frames are ignored. Close codes: 1008 (`unauthenticated`, `forbidden`) when the session
1910
2140
  * or membership ends, 1013 (`slow_consumer`) when the client does not read fast enough, 1012
1911
2141
  * (`restart`) when the server restarts or loses its event feed. Reconnect with
1912
2142
  * `last_event_id` after any of them except 1008. While the server is reconnecting its own event
@@ -2096,6 +2326,8 @@ export interface paths {
2096
2326
  * Mark a conversation read
2097
2327
  * @description Moves the contact's read cursor to `message_id`, or to the latest message when it is
2098
2328
  * absent; it only moves forward. Replies the contact has read are not e-mailed to them.
2329
+ * When it moves, members see it as the conversation's `last_read_by_contact_at` and a
2330
+ * `contact.read` event on `/v1/realtime`.
2099
2331
  */
2100
2332
  post: operations["markClientConversationRead"];
2101
2333
  delete?: never;
@@ -2104,6 +2336,31 @@ export interface paths {
2104
2336
  patch?: never;
2105
2337
  trace?: never;
2106
2338
  };
2339
+ "/client/v1/conversations/{conversationId}/rating": {
2340
+ parameters: {
2341
+ query?: never;
2342
+ header?: never;
2343
+ path?: never;
2344
+ cookie?: never;
2345
+ };
2346
+ get?: never;
2347
+ put?: never;
2348
+ /**
2349
+ * Rate a closed conversation
2350
+ * @description Records the contact's rating (`good` or `bad`) and optional comment for a conversation
2351
+ * whose `can_rate` is true. It is stored once per close: members see it in the thread as a
2352
+ * `rated` event and on the conversation, and it sends the `conversation.rated` webhook.
2353
+ * Answers `409 rating_unavailable` when `can_rate` is false (the inbox does not ask for
2354
+ * ratings, the conversation is open, the close is older than 30 days) and
2355
+ * `409 already_rated` when the contact already rated this close.
2356
+ */
2357
+ post: operations["rateClientConversation"];
2358
+ delete?: never;
2359
+ options?: never;
2360
+ head?: never;
2361
+ patch?: never;
2362
+ trace?: never;
2363
+ };
2107
2364
  "/client/v1/conversations/{conversationId}/typing": {
2108
2365
  parameters: {
2109
2366
  query?: never;
@@ -2494,6 +2751,27 @@ export interface webhooks {
2494
2751
  patch?: never;
2495
2752
  trace?: never;
2496
2753
  };
2754
+ "conversation.rated": {
2755
+ parameters: {
2756
+ query?: never;
2757
+ header?: never;
2758
+ path?: never;
2759
+ cookie?: never;
2760
+ };
2761
+ get?: never;
2762
+ put?: never;
2763
+ /**
2764
+ * A contact rated a conversation
2765
+ * @description The contact rated a closed conversation; `conversation.rating` holds the rating and
2766
+ * comment. Sent once per rating, with `conversation.updated` for the same change.
2767
+ */
2768
+ post: operations["webhookConversationRated"];
2769
+ delete?: never;
2770
+ options?: never;
2771
+ head?: never;
2772
+ patch?: never;
2773
+ trace?: never;
2774
+ };
2497
2775
  "conversation.updated": {
2498
2776
  parameters: {
2499
2777
  query?: never;
@@ -2756,8 +3034,90 @@ export interface components {
2756
3034
  email: components["schemas"]["Email"];
2757
3035
  name: string;
2758
3036
  role: components["schemas"]["Role"];
3037
+ availability: components["schemas"]["Availability"];
3038
+ /**
3039
+ * @description The member has a `/v1/realtime` connection seen in the last 75 seconds (any panel tab
3040
+ * or device). `member.presence` events on `/v1/realtime` report changes.
3041
+ */
3042
+ online: boolean;
3043
+ /** Format: date-time */
3044
+ created_at: string;
3045
+ };
3046
+ MemberPresence: {
3047
+ /** Format: uuid */
3048
+ member_id: string;
3049
+ availability: components["schemas"]["Availability"];
3050
+ online: boolean;
3051
+ };
3052
+ Viewing: {
3053
+ /** Format: uuid */
3054
+ member_id: string;
3055
+ /** Format: uuid */
3056
+ conversation_id: string;
3057
+ /** @description `false` when the member no longer has the conversation open anywhere. */
3058
+ viewing: boolean;
3059
+ };
3060
+ /**
3061
+ * @description Another member opened (`viewing: true`) or left a conversation, as their panel reported
3062
+ * with a `viewing` frame; leaving includes hiding the page and disconnecting. Right after a
3063
+ * connection reports a conversation, it also gets one `viewing: true` event for every other
3064
+ * member who already has it open. Not stored: it has no `id` and is not replayed. Sent to
3065
+ * member sessions that can see the conversation's inbox; members do not get their own.
3066
+ */
3067
+ ViewingEvent: {
3068
+ /**
3069
+ * @description discriminator enum property added by openapi-typescript
3070
+ * @enum {string}
3071
+ */
3072
+ type: "viewing";
3073
+ /** Format: uuid */
3074
+ workspace_id: string;
3075
+ /** Format: uuid */
3076
+ inbox_id: string;
3077
+ /** Format: uuid */
3078
+ conversation_id: string;
3079
+ /** Format: date-time */
3080
+ created_at: string;
3081
+ data: components["schemas"]["Viewing"];
3082
+ };
3083
+ /**
3084
+ * @description A member's `availability` or `online` changed (they opened or closed the panel, or set
3085
+ * themselves away). Carries the member's current state, so it may repeat the previous one.
3086
+ * Not stored: it has no `id` and is not replayed; reload `/v1/members` after a reconnect.
3087
+ * A server process that stops without closing its connections sends none: such members
3088
+ * turn offline in `/v1/members` 75 seconds later. Sent to member sessions only, the member's
3089
+ * own included.
3090
+ */
3091
+ MemberPresenceEvent: {
3092
+ /**
3093
+ * @description discriminator enum property added by openapi-typescript
3094
+ * @enum {string}
3095
+ */
3096
+ type: "member.presence";
3097
+ /** Format: uuid */
3098
+ workspace_id: string;
3099
+ /** Format: date-time */
3100
+ created_at: string;
3101
+ data: components["schemas"]["MemberPresence"];
3102
+ };
3103
+ /**
3104
+ * @description One of a contact's `/client/v1/realtime` connections opened or closed. Carries the
3105
+ * contact's current presence, so it may repeat the previous one.
3106
+ * Not stored: it has no `id` and is not replayed; read `/v1/contacts/{contactId}/presence`
3107
+ * after a reconnect. A connection that ends without closing (a server process that died) is
3108
+ * announced within about two minutes.
3109
+ */
3110
+ ContactPresenceEvent: {
3111
+ /**
3112
+ * @description discriminator enum property added by openapi-typescript
3113
+ * @enum {string}
3114
+ */
3115
+ type: "contact.presence";
3116
+ /** Format: uuid */
3117
+ workspace_id: string;
2759
3118
  /** Format: date-time */
2760
3119
  created_at: string;
3120
+ data: components["schemas"]["ContactPresence"];
2761
3121
  };
2762
3122
  MemberList: {
2763
3123
  items: components["schemas"]["Member"][];
@@ -2944,6 +3304,7 @@ export interface components {
2944
3304
  message_in_my_conversation: components["schemas"]["NotificationChannels"];
2945
3305
  message_in_unassigned_conversation: components["schemas"]["NotificationChannels"];
2946
3306
  assigned_to_me: components["schemas"]["NotificationChannels"];
3307
+ mentioned: components["schemas"]["NotificationChannels"];
2947
3308
  };
2948
3309
  /** @description Some events and their channels. */
2949
3310
  NotificationEventsUpdate: {
@@ -2952,6 +3313,7 @@ export interface components {
2952
3313
  message_in_my_conversation?: components["schemas"]["NotificationChannels"];
2953
3314
  message_in_unassigned_conversation?: components["schemas"]["NotificationChannels"];
2954
3315
  assigned_to_me?: components["schemas"]["NotificationChannels"];
3316
+ mentioned?: components["schemas"]["NotificationChannels"];
2955
3317
  };
2956
3318
  NotificationSettings: {
2957
3319
  events: components["schemas"]["NotificationEvents"];
@@ -2986,7 +3348,7 @@ export interface components {
2986
3348
  * @description What caused it (see the `notifications` tag), or `test`.
2987
3349
  * @enum {string}
2988
3350
  */
2989
- event: "new_live_conversation" | "new_async_conversation" | "message_in_my_conversation" | "message_in_unassigned_conversation" | "assigned_to_me" | "test";
3351
+ event: "new_live_conversation" | "new_async_conversation" | "message_in_my_conversation" | "message_in_unassigned_conversation" | "assigned_to_me" | "mentioned" | "test";
2990
3352
  /**
2991
3353
  * @description The inbox name and the contact's name.
2992
3354
  * @example Support · Ayşe Yılmaz
@@ -3096,6 +3458,13 @@ export interface components {
3096
3458
  */
3097
3459
  expected_reply_minutes?: number;
3098
3460
  business_hours: components["schemas"]["BusinessHours"];
3461
+ /**
3462
+ * @description Contacts may rate a closed conversation (`good` or `bad`, with an optional comment):
3463
+ * the widget and the mobile SDKs offer it, and e-mail contacts get a request with two
3464
+ * links after a member's conversation is closed. Off by default. Only conversations
3465
+ * closed after it was turned on can be rated; turning it off and on again starts over.
3466
+ */
3467
+ ask_for_rating: boolean;
3099
3468
  /** Format: date-time */
3100
3469
  created_at: string;
3101
3470
  /** Format: date-time */
@@ -3112,6 +3481,8 @@ export interface components {
3112
3481
  /** Format: int32 */
3113
3482
  expected_reply_minutes?: number;
3114
3483
  business_hours?: components["schemas"]["BusinessHours"];
3484
+ /** @default false */
3485
+ ask_for_rating: boolean;
3115
3486
  };
3116
3487
  InboxUpdate: {
3117
3488
  name?: string;
@@ -3126,6 +3497,7 @@ export interface components {
3126
3497
  */
3127
3498
  expected_reply_minutes?: number | null;
3128
3499
  business_hours?: components["schemas"]["BusinessHours"];
3500
+ ask_for_rating?: boolean;
3129
3501
  };
3130
3502
  InboxCreated: {
3131
3503
  inbox: components["schemas"]["Inbox"];
@@ -3293,32 +3665,96 @@ export interface components {
3293
3665
  locale?: components["schemas"]["LanguageTag"];
3294
3666
  /** @description The contact's addresses that must not be mailed. */
3295
3667
  undeliverable: components["schemas"]["UndeliverableEmail"][];
3668
+ activity?: components["schemas"]["ContactActivity"];
3296
3669
  /** Format: date-time */
3297
3670
  created_at: string;
3298
3671
  /** Format: date-time */
3299
3672
  updated_at: string;
3300
3673
  };
3301
- ContactPresence: {
3302
- /** Format: uuid */
3303
- contact_id: string;
3304
- /** @description A `/client/v1/realtime` connection of the contact was seen in the last 75 seconds. */
3305
- online: boolean;
3674
+ /**
3675
+ * @description Only on `GET /v1/contacts` and `GET /v1/contacts/{contactId}`. The counts cover the
3676
+ * conversations the caller can see, spam left out; `last_seen_at` does not depend on the caller.
3677
+ */
3678
+ ContactActivity: {
3306
3679
  /**
3307
3680
  * Format: date-time
3308
- * @description The contact's last client activity (a connection or a session use); absent when never seen.
3681
+ * @description The contact's last activity: a message (any channel), a rating, or use of a widget or
3682
+ * app session. Absent when never active.
3309
3683
  */
3310
3684
  last_seen_at?: string;
3685
+ /** Format: int64 */
3686
+ conversations: number;
3687
+ /** Format: int64 */
3688
+ open_conversations: number;
3689
+ /**
3690
+ * Format: date-time
3691
+ * @description The last message in any of those conversations, else when the newest one started.
3692
+ */
3693
+ last_conversation_at?: string;
3311
3694
  };
3312
- FeedbackContact: {
3313
- /** @description The host app's id for this user, per inbox. */
3314
- external_id: string;
3315
- email?: components["schemas"]["Email"];
3316
- name?: string;
3317
- };
3318
- FeedbackCreate: components["schemas"]["FeedbackFields"] & {
3695
+ ContactNote: {
3319
3696
  /** Format: uuid */
3320
- inbox_id: string;
3321
- contact: components["schemas"]["FeedbackContact"];
3697
+ id: string;
3698
+ /** Format: uuid */
3699
+ contact_id: string;
3700
+ /** @description A `member` or a `bot` (API key); `member_id` is absent once the member was removed. */
3701
+ author: components["schemas"]["MessageAuthor"];
3702
+ /** @description Plain text. */
3703
+ body: string;
3704
+ /** Format: date-time */
3705
+ created_at: string;
3706
+ };
3707
+ ContactNoteCreate: {
3708
+ body: string;
3709
+ };
3710
+ ContactNotePage: {
3711
+ items: components["schemas"]["ContactNote"][];
3712
+ next_cursor?: string;
3713
+ };
3714
+ /**
3715
+ * @description How the team has served the contact, over all their conversations the caller can see (spam
3716
+ * left out).
3717
+ */
3718
+ ContactSummary: {
3719
+ /**
3720
+ * Format: int64
3721
+ * @description Conversations where a member answered the contact's first message.
3722
+ */
3723
+ first_replies: number;
3724
+ /**
3725
+ * Format: int64
3726
+ * @description Median seconds from the contact's first message to the first member reply; absent when `first_replies` is 0.
3727
+ */
3728
+ median_first_reply_seconds?: number;
3729
+ /** @description The latest rating of each conversation. */
3730
+ ratings: {
3731
+ /** Format: int64 */
3732
+ good: number;
3733
+ /** Format: int64 */
3734
+ bad: number;
3735
+ };
3736
+ };
3737
+ ContactPresence: {
3738
+ /** Format: uuid */
3739
+ contact_id: string;
3740
+ /** @description A `/client/v1/realtime` connection of the contact was seen in the last 75 seconds. */
3741
+ online: boolean;
3742
+ /**
3743
+ * Format: date-time
3744
+ * @description The contact's last client activity (a connection or a session use); absent when never seen.
3745
+ */
3746
+ last_seen_at?: string;
3747
+ };
3748
+ FeedbackContact: {
3749
+ /** @description The host app's id for this user, per inbox. */
3750
+ external_id: string;
3751
+ email?: components["schemas"]["Email"];
3752
+ name?: string;
3753
+ };
3754
+ FeedbackCreate: components["schemas"]["FeedbackFields"] & {
3755
+ /** Format: uuid */
3756
+ inbox_id: string;
3757
+ contact: components["schemas"]["FeedbackContact"];
3322
3758
  category: components["schemas"]["FeedbackCategory"];
3323
3759
  subject?: string;
3324
3760
  body: string;
@@ -3337,7 +3773,7 @@ export interface components {
3337
3773
  count: number;
3338
3774
  };
3339
3775
  /** @enum {string} */
3340
- WebhookEventType: "conversation.created" | "conversation.updated" | "message.created" | "feedback.created" | "contact.updated" | "contact.deleted" | "draft.created" | "draft.updated" | "draft.deleted";
3776
+ WebhookEventType: "conversation.created" | "conversation.updated" | "conversation.rated" | "message.created" | "feedback.created" | "contact.updated" | "contact.deleted" | "draft.created" | "draft.updated" | "draft.deleted";
3341
3777
  WebhookEndpoint: {
3342
3778
  /** Format: uuid */
3343
3779
  id: string;
@@ -3622,11 +4058,38 @@ export interface components {
3622
4058
  * @description The last message or note, or the creation time.
3623
4059
  */
3624
4060
  last_activity_at: string;
4061
+ /**
4062
+ * Format: date-time
4063
+ * @description When it was last closed; absent when it never was.
4064
+ */
4065
+ closed_at?: string;
4066
+ rating?: components["schemas"]["ConversationRating"];
4067
+ /**
4068
+ * Format: date-time
4069
+ * @description The contact has read every message created at or before this time, in the widget or
4070
+ * an app (`POST /client/v1/conversations/{id}/read`). Absent until the contact has read
4071
+ * anything, and in conversations the contact only reaches by e-mail. A `contact.read`
4072
+ * event tells when it moves.
4073
+ */
4074
+ last_read_by_contact_at?: string;
3625
4075
  /** Format: date-time */
3626
4076
  created_at: string;
3627
4077
  /** Format: date-time */
3628
4078
  updated_at: string;
3629
4079
  };
4080
+ /**
4081
+ * @description The contact's latest rating. A conversation can be rated once each time it is closed, so
4082
+ * this may belong to an earlier close (compare `rated_at` with `closed_at`). The thread also
4083
+ * has it as a `rated` event message whose body is the comment.
4084
+ */
4085
+ ConversationRating: {
4086
+ rating: components["schemas"]["Rating"];
4087
+ comment?: string;
4088
+ /** Format: date-time */
4089
+ rated_at: string;
4090
+ };
4091
+ /** @enum {string} */
4092
+ Rating: "good" | "bad";
3630
4093
  ConversationCreate: {
3631
4094
  /** Format: uuid */
3632
4095
  inbox_id: string;
@@ -3723,21 +4186,137 @@ export interface components {
3723
4186
  last_message?: components["schemas"]["MessagePreview"];
3724
4187
  /**
3725
4188
  * @description A message or note from someone other than the calling member is newer than the
3726
- * member's read cursor. Always `false` for API keys.
4189
+ * member's read cursor, or the member marked it unread. Always `false` for API keys.
3727
4190
  */
3728
4191
  unread: boolean;
4192
+ /**
4193
+ * Format: date-time
4194
+ * @description When the calling member pinned it; absent when they did not, and for API keys.
4195
+ */
4196
+ pinned_at?: string;
3729
4197
  };
3730
4198
  ConversationPage: {
3731
4199
  items: components["schemas"]["ConversationListItem"][];
3732
4200
  /** @description Absent on the last page. */
3733
4201
  next_cursor?: string;
3734
4202
  };
4203
+ /** @description Enough of a conversation to show where an item belongs. */
4204
+ ConversationSummary: {
4205
+ /** Format: uuid */
4206
+ id: string;
4207
+ /** Format: uuid */
4208
+ inbox_id: string;
4209
+ subject: string;
4210
+ status: components["schemas"]["ConversationStatus"];
4211
+ contact: components["schemas"]["ConversationContact"];
4212
+ };
4213
+ MentionNote: {
4214
+ /** Format: uuid */
4215
+ id: string;
4216
+ /** @description The plain-text body on one line, cut to 140 characters with `…` when longer. */
4217
+ text: string;
4218
+ author: components["schemas"]["MessageAuthor"];
4219
+ /** Format: date-time */
4220
+ created_at: string;
4221
+ };
4222
+ Mention: {
4223
+ note: components["schemas"]["MentionNote"];
4224
+ conversation: components["schemas"]["ConversationSummary"];
4225
+ /** @description The calling member has read the conversation up to this note. */
4226
+ seen: boolean;
4227
+ };
4228
+ MentionPage: {
4229
+ items: components["schemas"]["Mention"][];
4230
+ /** @description Absent on the last page. */
4231
+ next_cursor?: string;
4232
+ /**
4233
+ * Format: int64
4234
+ * @description Unseen mentions over all pages.
4235
+ */
4236
+ unseen: number;
4237
+ };
4238
+ /**
4239
+ * @description `bot`: written with an API key. `assistant`: written by a member through an OAuth client.
4240
+ * `member`: written by a member in the panel.
4241
+ * @enum {string}
4242
+ */
4243
+ DraftAuthorKind: "bot" | "assistant" | "member";
4244
+ DraftItem: {
4245
+ draft: components["schemas"]["Message"];
4246
+ conversation: components["schemas"]["ConversationSummary"];
4247
+ };
4248
+ DraftPage: {
4249
+ items: components["schemas"]["DraftItem"][];
4250
+ /** @description Absent on the last page. */
4251
+ next_cursor?: string;
4252
+ /**
4253
+ * Format: int64
4254
+ * @description Drafts matching the filters over all pages.
4255
+ */
4256
+ total: number;
4257
+ };
3735
4258
  CountByID: {
3736
4259
  /** Format: uuid */
3737
4260
  id: string;
3738
4261
  /** Format: int64 */
3739
4262
  count: number;
3740
4263
  };
4264
+ Stats: {
4265
+ /** Format: date-time */
4266
+ since: string;
4267
+ /**
4268
+ * Format: date-time
4269
+ * @description When it was counted.
4270
+ */
4271
+ until: string;
4272
+ /**
4273
+ * Format: int64
4274
+ * @description Replies sent by members.
4275
+ */
4276
+ replies: number;
4277
+ /**
4278
+ * Format: int64
4279
+ * @description Times a conversation was closed, by anyone (members, API keys, the server).
4280
+ */
4281
+ closed: number;
4282
+ /**
4283
+ * Format: int64
4284
+ * @description Conversations whose first member reply to the contact was sent in the window.
4285
+ */
4286
+ first_replies: number;
4287
+ /**
4288
+ * Format: int64
4289
+ * @description Median seconds from the contact's first message to that reply; absent when `first_replies` is 0.
4290
+ */
4291
+ median_first_reply_seconds?: number;
4292
+ ratings: components["schemas"]["RatingStats"];
4293
+ /** @description Per member, by member id. */
4294
+ members: components["schemas"]["MemberStats"][];
4295
+ };
4296
+ /** @description Ratings contacts gave in the window, in total and per inbox (inboxes without any are left out). */
4297
+ RatingStats: {
4298
+ /** Format: int64 */
4299
+ good: number;
4300
+ /** Format: int64 */
4301
+ bad: number;
4302
+ inboxes: components["schemas"]["InboxRatingStats"][];
4303
+ };
4304
+ InboxRatingStats: {
4305
+ /** Format: uuid */
4306
+ inbox_id: string;
4307
+ /** Format: int64 */
4308
+ good: number;
4309
+ /** Format: int64 */
4310
+ bad: number;
4311
+ };
4312
+ MemberStats: {
4313
+ /** Format: uuid */
4314
+ member_id: string;
4315
+ /** Format: int64 */
4316
+ replies: number;
4317
+ /** Format: int64 */
4318
+ closed: number;
4319
+ };
3741
4320
  /** @description Open conversations in the inboxes the caller can see. */
3742
4321
  ConversationCounts: {
3743
4322
  /**
@@ -3760,6 +4339,11 @@ export interface components {
3760
4339
  unassigned: number;
3761
4340
  /** @description Per inbox id. */
3762
4341
  inboxes: components["schemas"]["CountByID"][];
4342
+ /**
4343
+ * @description Per assignee's member id: each member's open load, for choosing whom to hand a
4344
+ * conversation to. Counts only the inboxes the caller can see.
4345
+ */
4346
+ assignees: components["schemas"]["CountByID"][];
3763
4347
  /** @description Per label id. */
3764
4348
  labels: components["schemas"]["CountByID"][];
3765
4349
  };
@@ -3781,8 +4365,21 @@ export interface components {
3781
4365
  * @description Absent when the conversation has nothing to read yet.
3782
4366
  */
3783
4367
  last_read_message_id?: string;
4368
+ /** @description Something is newer than the cursor, or the member marked it unread. */
3784
4369
  unread: boolean;
3785
4370
  };
4371
+ /** @description Whether a member pinned a conversation to the top of their lists. */
4372
+ ConversationPin: {
4373
+ /** Format: uuid */
4374
+ conversation_id: string;
4375
+ /** Format: uuid */
4376
+ member_id: string;
4377
+ /**
4378
+ * Format: date-time
4379
+ * @description Absent when it is not pinned.
4380
+ */
4381
+ pinned_at?: string;
4382
+ };
3786
4383
  /**
3787
4384
  * @description `message` goes to or comes from the contact, `note` is for members only, `event` records a
3788
4385
  * change (assignment, status, labels).
@@ -3824,7 +4421,7 @@ export interface components {
3824
4421
  via?: string;
3825
4422
  };
3826
4423
  /** @enum {string} */
3827
- EventType: "assigned" | "unassigned" | "status_changed" | "labels_changed" | "moved";
4424
+ EventType: "assigned" | "unassigned" | "status_changed" | "labels_changed" | "moved" | "rated";
3828
4425
  MessageEvent: {
3829
4426
  type: components["schemas"]["EventType"];
3830
4427
  /**
@@ -3851,6 +4448,8 @@ export interface components {
3851
4448
  * @description The inbox it moved from (`moved`).
3852
4449
  */
3853
4450
  previous_inbox_id?: string;
4451
+ /** @description `rated` only: the contact's rating; the message body is their comment. */
4452
+ rating?: components["schemas"]["Rating"];
3854
4453
  };
3855
4454
  Attachment: {
3856
4455
  /**
@@ -3897,6 +4496,8 @@ export interface components {
3897
4496
  draft: boolean;
3898
4497
  /** @description Who sent a draft (`member` or `bot`); absent for messages that were never drafts. */
3899
4498
  sent_by?: components["schemas"]["MessageAuthor"];
4499
+ /** @description Members a note mentions (notes only; absent when it mentions nobody). */
4500
+ mentions?: string[];
3900
4501
  /**
3901
4502
  * Format: date-time
3902
4503
  * @description For a sent draft, when it was sent.
@@ -3956,7 +4557,16 @@ export interface components {
3956
4557
  full_text: string;
3957
4558
  /** @description The whole HTML part, sanitized. */
3958
4559
  full_html?: string;
3959
- /** @description `full_html` loads images from other servers; block them until the member asks. */
4560
+ /**
4561
+ * @description The whole HTML part of the kept original, built on request and sanitized with a policy
4562
+ * that keeps inline styles limited to an allowlist of CSS properties (no `url(`,
4563
+ * `expression` or `@import` values) and the colour, alignment and size attributes of
4564
+ * tables and `font`; never `<style>` blocks, scripts, forms, frames, stylesheets or event
4565
+ * handlers. `cid:` sources are kept as in `full_html`. Absent when the original is not
4566
+ * kept, has no HTML part or is too large.
4567
+ */
4568
+ original_html?: string;
4569
+ /** @description `full_html` or `original_html` loads images from other servers; block them until the member asks. */
3960
4570
  has_remote_images: boolean;
3961
4571
  in_reply_to?: string;
3962
4572
  references?: string[];
@@ -3979,6 +4589,14 @@ export interface components {
3979
4589
  client_id?: string;
3980
4590
  /** @description Stores an outgoing message as a draft instead of delivering it. */
3981
4591
  draft?: boolean;
4592
+ /**
4593
+ * @description Notes only: members to notify about the note. Each must be a member of the workspace
4594
+ * who can see the conversation's inbox (`400 validation_failed` otherwise). They get the
4595
+ * `mentioned` notification (realtime as `message.created`, Web Push and e-mail per their
4596
+ * notification settings); the author is never notified. The panel shows mentions in the
4597
+ * body as it likes; the server does not parse `@` in the text.
4598
+ */
4599
+ mentions?: string[];
3982
4600
  };
3983
4601
  MessageCreateMultipart: {
3984
4602
  /** @enum {string} */
@@ -3988,6 +4606,8 @@ export interface components {
3988
4606
  html?: string;
3989
4607
  client_id?: string;
3990
4608
  draft?: boolean;
4609
+ /** @description Notes only; repeat the field once per member id. */
4610
+ mentions?: string[];
3991
4611
  files?: string[];
3992
4612
  };
3993
4613
  /** @description Only the fields sent change. */
@@ -4270,6 +4890,56 @@ export interface components {
4270
4890
  created_at: string;
4271
4891
  data: components["schemas"]["ConversationRead"];
4272
4892
  };
4893
+ /** @description The contact's read position in a conversation. */
4894
+ ContactRead: {
4895
+ /** Format: uuid */
4896
+ conversation_id: string;
4897
+ /** Format: uuid */
4898
+ last_read_message_id: string;
4899
+ /**
4900
+ * Format: date-time
4901
+ * @description The contact has read every message created at or before this time.
4902
+ */
4903
+ read_at: string;
4904
+ };
4905
+ /** @description The contact read the conversation further, in the widget or an app. */
4906
+ ContactReadEvent: {
4907
+ /** Format: int64 */
4908
+ id: number;
4909
+ /**
4910
+ * @description discriminator enum property added by openapi-typescript
4911
+ * @enum {string}
4912
+ */
4913
+ type: "contact.read";
4914
+ /** Format: uuid */
4915
+ workspace_id: string;
4916
+ /** Format: uuid */
4917
+ inbox_id: string;
4918
+ /** Format: uuid */
4919
+ conversation_id: string;
4920
+ /** Format: date-time */
4921
+ created_at: string;
4922
+ data: components["schemas"]["ContactRead"];
4923
+ };
4924
+ /** @description The receiving member pinned or unpinned a conversation, in this or another tab or device. */
4925
+ ConversationPinEvent: {
4926
+ /** Format: int64 */
4927
+ id: number;
4928
+ /**
4929
+ * @description discriminator enum property added by openapi-typescript
4930
+ * @enum {string}
4931
+ */
4932
+ type: "conversation.pin";
4933
+ /** Format: uuid */
4934
+ workspace_id: string;
4935
+ /** Format: uuid */
4936
+ inbox_id: string;
4937
+ /** Format: uuid */
4938
+ conversation_id: string;
4939
+ /** Format: date-time */
4940
+ created_at: string;
4941
+ data: components["schemas"]["ConversationPin"];
4942
+ };
4273
4943
  /** @description A member was given or lost access to an inbox. Reload the inboxes and conversations when it is about you. */
4274
4944
  InboxAccessChangedEvent: {
4275
4945
  /** Format: int64 */
@@ -4326,7 +4996,7 @@ export interface components {
4326
4996
  type: "resync_required";
4327
4997
  };
4328
4998
  /** @description An event as `GET /v1/events` returns it, told apart by `type`; the same objects realtime and webhooks carry. */
4329
- StoredEvent: components["schemas"]["ConversationEvent"] | components["schemas"]["ConversationMovedEvent"] | components["schemas"]["MessageCreatedEvent"] | components["schemas"]["MessageUpdatedEvent"] | components["schemas"]["DraftEvent"] | components["schemas"]["ContactUpdatedEvent"] | components["schemas"]["ContactDeletedEvent"] | components["schemas"]["InboxCreatedEvent"] | components["schemas"]["InboxUpdatedEvent"] | components["schemas"]["InboxDeletedEvent"] | components["schemas"]["InboxAccessChangedEvent"] | components["schemas"]["ConversationReadEvent"];
4999
+ StoredEvent: components["schemas"]["ConversationEvent"] | components["schemas"]["ConversationMovedEvent"] | components["schemas"]["MessageCreatedEvent"] | components["schemas"]["MessageUpdatedEvent"] | components["schemas"]["DraftEvent"] | components["schemas"]["ContactUpdatedEvent"] | components["schemas"]["ContactDeletedEvent"] | components["schemas"]["InboxCreatedEvent"] | components["schemas"]["InboxUpdatedEvent"] | components["schemas"]["InboxDeletedEvent"] | components["schemas"]["InboxAccessChangedEvent"] | components["schemas"]["ConversationReadEvent"] | components["schemas"]["ContactReadEvent"] | components["schemas"]["ConversationPinEvent"];
4330
5000
  EventPage: {
4331
5001
  events: components["schemas"]["StoredEvent"][];
4332
5002
  /**
@@ -4345,7 +5015,7 @@ export interface components {
4345
5015
  id: number;
4346
5016
  };
4347
5017
  /** @description One server message on `/v1/realtime`, told apart by `type`. */
4348
- RealtimeMessage: components["schemas"]["ConversationEvent"] | components["schemas"]["ConversationMovedEvent"] | components["schemas"]["MessageCreatedEvent"] | components["schemas"]["MessageUpdatedEvent"] | components["schemas"]["DraftEvent"] | components["schemas"]["ContactUpdatedEvent"] | components["schemas"]["ContactDeletedEvent"] | components["schemas"]["InboxCreatedEvent"] | components["schemas"]["InboxUpdatedEvent"] | components["schemas"]["InboxDeletedEvent"] | components["schemas"]["InboxAccessChangedEvent"] | components["schemas"]["ConversationReadEvent"] | components["schemas"]["TypingEvent"] | components["schemas"]["RealtimeReady"] | components["schemas"]["RealtimeResyncRequired"];
5018
+ RealtimeMessage: components["schemas"]["ConversationEvent"] | components["schemas"]["ConversationMovedEvent"] | components["schemas"]["MessageCreatedEvent"] | components["schemas"]["MessageUpdatedEvent"] | components["schemas"]["DraftEvent"] | components["schemas"]["ContactUpdatedEvent"] | components["schemas"]["ContactDeletedEvent"] | components["schemas"]["InboxCreatedEvent"] | components["schemas"]["InboxUpdatedEvent"] | components["schemas"]["InboxDeletedEvent"] | components["schemas"]["InboxAccessChangedEvent"] | components["schemas"]["ConversationReadEvent"] | components["schemas"]["ContactReadEvent"] | components["schemas"]["ConversationPinEvent"] | components["schemas"]["TypingEvent"] | components["schemas"]["MemberPresenceEvent"] | components["schemas"]["ContactPresenceEvent"] | components["schemas"]["ViewingEvent"] | components["schemas"]["RealtimeReady"] | components["schemas"]["RealtimeResyncRequired"];
4349
5019
  /**
4350
5020
  * @description `auto`: available in `live` inboxes while connected to `/v1/realtime` within business
4351
5021
  * hours. `away`: never shown as available.
@@ -4565,6 +5235,11 @@ export interface components {
4565
5235
  chat: components["schemas"]["ClientChatSettings"];
4566
5236
  /** @description The categories `POST /client/v1/feedback` accepts, in display order. */
4567
5237
  feedback_categories: components["schemas"]["FeedbackCategory"][];
5238
+ /**
5239
+ * @description The inbox asks contacts to rate closed conversations; offer it where `can_rate` is true
5240
+ * on a conversation.
5241
+ */
5242
+ ask_for_rating: boolean;
4568
5243
  };
4569
5244
  ClientContact: {
4570
5245
  /** Format: uuid */
@@ -4596,6 +5271,9 @@ export interface components {
4596
5271
  /** Format: uuid */
4597
5272
  id: string;
4598
5273
  status: components["schemas"]["ConversationStatus"];
5274
+ /** @description As on `ClientConversation`. */
5275
+ can_rate: boolean;
5276
+ rating?: components["schemas"]["Rating"];
4599
5277
  /** Format: date-time */
4600
5278
  updated_at: string;
4601
5279
  };
@@ -4628,9 +5306,23 @@ export interface components {
4628
5306
  * when no member has read the conversation, and in `async` inboxes.
4629
5307
  */
4630
5308
  last_read_by_member_at?: string;
5309
+ /**
5310
+ * @description The contact may rate it now with `POST /client/v1/conversations/{id}/rating`: the inbox
5311
+ * asks for ratings (`ask_for_rating`), the conversation is closed, was closed at most 30
5312
+ * days ago and after the inbox started asking, and has no rating since it was closed. A message from the contact reopens it,
5313
+ * and the next close allows a new rating.
5314
+ */
5315
+ can_rate: boolean;
5316
+ /** @description The contact's rating since the last close; absent when they have not rated it. */
5317
+ rating?: components["schemas"]["Rating"];
4631
5318
  /** Format: date-time */
4632
5319
  created_at: string;
4633
5320
  };
5321
+ ClientRatingCreate: {
5322
+ rating: components["schemas"]["Rating"];
5323
+ /** @description Optional; blank is the same as absent. */
5324
+ comment?: string;
5325
+ };
4634
5326
  ClientConversationPage: {
4635
5327
  items: components["schemas"]["ClientConversation"][];
4636
5328
  /** @description Absent on the last page. */
@@ -5659,6 +6351,37 @@ export interface operations {
5659
6351
  404: components["responses"]["Problem"];
5660
6352
  };
5661
6353
  };
6354
+ listMentions: {
6355
+ parameters: {
6356
+ query?: {
6357
+ /** @description The `next_cursor` of the previous page. */
6358
+ cursor?: components["parameters"]["Cursor"];
6359
+ /** @description Page size, 1 to 100; 25 by default. */
6360
+ limit?: components["parameters"]["Limit"];
6361
+ };
6362
+ header?: {
6363
+ /** @description The workspace to act on; see "Workspace selection". */
6364
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
6365
+ };
6366
+ path?: never;
6367
+ cookie?: never;
6368
+ };
6369
+ requestBody?: never;
6370
+ responses: {
6371
+ /** @description A page of mentions. */
6372
+ 200: {
6373
+ headers: {
6374
+ [name: string]: unknown;
6375
+ };
6376
+ content: {
6377
+ "application/json": components["schemas"]["MentionPage"];
6378
+ };
6379
+ };
6380
+ 400: components["responses"]["Problem"];
6381
+ 401: components["responses"]["Problem"];
6382
+ 403: components["responses"]["Problem"];
6383
+ };
6384
+ };
5662
6385
  getWorkspace: {
5663
6386
  parameters: {
5664
6387
  query?: never;
@@ -6502,6 +7225,14 @@ export interface operations {
6502
7225
  query?: {
6503
7226
  /** @description Full-text search (Postgres `simple` configuration, `websearch` syntax). */
6504
7227
  q?: components["parameters"]["Search"];
7228
+ /**
7229
+ * @description `known`: the contact has an e-mail address or an external id. `visitor`: neither (an
7230
+ * anonymous widget visitor, or someone known only by a typed, unconfirmed address).
7231
+ */
7232
+ kind?: "known" | "visitor";
7233
+ /** @description Only contacts with (`true`) or without (`false`) an open conversation the caller can see; spam does not count. */
7234
+ has_open?: boolean;
7235
+ sort?: "created" | "last_seen";
6505
7236
  /** @description The `next_cursor` of the previous page. */
6506
7237
  cursor?: components["parameters"]["Cursor"];
6507
7238
  /** @description Page size, 1 to 100; 25 by default. */
@@ -6744,9 +7475,14 @@ export interface operations {
6744
7475
  404: components["responses"]["Problem"];
6745
7476
  };
6746
7477
  };
6747
- getContactPresence: {
7478
+ listContactNotes: {
6748
7479
  parameters: {
6749
- query?: never;
7480
+ query?: {
7481
+ /** @description The `next_cursor` of the previous page. */
7482
+ cursor?: components["parameters"]["Cursor"];
7483
+ /** @description Page size, 1 to 100; 25 by default. */
7484
+ limit?: components["parameters"]["Limit"];
7485
+ };
6750
7486
  header?: {
6751
7487
  /** @description The workspace to act on; see "Workspace selection". */
6752
7488
  "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
@@ -6758,57 +7494,179 @@ export interface operations {
6758
7494
  };
6759
7495
  requestBody?: never;
6760
7496
  responses: {
6761
- /** @description The contact's presence. */
7497
+ /** @description A page of notes. */
6762
7498
  200: {
6763
7499
  headers: {
6764
7500
  [name: string]: unknown;
6765
7501
  };
6766
7502
  content: {
6767
- "application/json": components["schemas"]["ContactPresence"];
7503
+ "application/json": components["schemas"]["ContactNotePage"];
6768
7504
  };
6769
7505
  };
7506
+ 400: components["responses"]["Problem"];
6770
7507
  401: components["responses"]["Problem"];
6771
7508
  403: components["responses"]["Problem"];
6772
7509
  404: components["responses"]["Problem"];
6773
7510
  };
6774
7511
  };
6775
- listConversations: {
7512
+ createContactNote: {
6776
7513
  parameters: {
6777
- query?: {
6778
- inbox_id?: string;
6779
- /** @description Only this contact's conversations. A contact of another workspace answers `404`. */
6780
- contact_id?: string;
6781
- status?: components["schemas"]["ConversationStatus"];
6782
- /** @description A member id, `me` (member sessions only) or `unassigned`. */
6783
- assignee?: string;
6784
- label_id?: string;
6785
- /**
6786
- * @description `true` lists only conversations flagged as spam (the spam view); without it, or with
6787
- * `false`, spam is left out.
6788
- */
6789
- spam?: boolean;
6790
- /** @description Only conversations of this kind, e.g. `feedback` for the feedback view. */
6791
- kind?: components["schemas"]["ConversationKind"];
6792
- /** @description Only feedback of this category (implies `kind=feedback`). */
6793
- category?: components["schemas"]["FeedbackCategory"];
6794
- /** @description Full-text search (Postgres `simple` configuration, `websearch` syntax). */
6795
- q?: components["parameters"]["Search"];
6796
- /** @description The `next_cursor` of the previous page. */
6797
- cursor?: components["parameters"]["Cursor"];
6798
- /** @description Page size, 1 to 100; 25 by default. */
6799
- limit?: components["parameters"]["Limit"];
6800
- };
7514
+ query?: never;
6801
7515
  header?: {
6802
7516
  /** @description The workspace to act on; see "Workspace selection". */
6803
7517
  "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
6804
7518
  };
6805
- path?: never;
7519
+ path: {
7520
+ contactId: components["parameters"]["ContactId"];
7521
+ };
6806
7522
  cookie?: never;
6807
7523
  };
6808
- requestBody?: never;
7524
+ requestBody: {
7525
+ content: {
7526
+ "application/json": components["schemas"]["ContactNoteCreate"];
7527
+ };
7528
+ };
6809
7529
  responses: {
6810
- /** @description A page of conversations. */
6811
- 200: {
7530
+ /** @description The note. */
7531
+ 201: {
7532
+ headers: {
7533
+ [name: string]: unknown;
7534
+ };
7535
+ content: {
7536
+ "application/json": components["schemas"]["ContactNote"];
7537
+ };
7538
+ };
7539
+ 400: components["responses"]["Problem"];
7540
+ 401: components["responses"]["Problem"];
7541
+ 403: components["responses"]["Problem"];
7542
+ 404: components["responses"]["Problem"];
7543
+ };
7544
+ };
7545
+ deleteContactNote: {
7546
+ parameters: {
7547
+ query?: never;
7548
+ header?: {
7549
+ /** @description The workspace to act on; see "Workspace selection". */
7550
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
7551
+ };
7552
+ path: {
7553
+ contactId: components["parameters"]["ContactId"];
7554
+ noteId: string;
7555
+ };
7556
+ cookie?: never;
7557
+ };
7558
+ requestBody?: never;
7559
+ responses: {
7560
+ /** @description Deleted. */
7561
+ 204: {
7562
+ headers: {
7563
+ [name: string]: unknown;
7564
+ };
7565
+ content?: never;
7566
+ };
7567
+ 401: components["responses"]["Problem"];
7568
+ 403: components["responses"]["Problem"];
7569
+ 404: components["responses"]["Problem"];
7570
+ };
7571
+ };
7572
+ getContactSummary: {
7573
+ parameters: {
7574
+ query?: never;
7575
+ header?: {
7576
+ /** @description The workspace to act on; see "Workspace selection". */
7577
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
7578
+ };
7579
+ path: {
7580
+ contactId: components["parameters"]["ContactId"];
7581
+ };
7582
+ cookie?: never;
7583
+ };
7584
+ requestBody?: never;
7585
+ responses: {
7586
+ /** @description The summary. */
7587
+ 200: {
7588
+ headers: {
7589
+ [name: string]: unknown;
7590
+ };
7591
+ content: {
7592
+ "application/json": components["schemas"]["ContactSummary"];
7593
+ };
7594
+ };
7595
+ 401: components["responses"]["Problem"];
7596
+ 403: components["responses"]["Problem"];
7597
+ 404: components["responses"]["Problem"];
7598
+ };
7599
+ };
7600
+ getContactPresence: {
7601
+ parameters: {
7602
+ query?: never;
7603
+ header?: {
7604
+ /** @description The workspace to act on; see "Workspace selection". */
7605
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
7606
+ };
7607
+ path: {
7608
+ contactId: components["parameters"]["ContactId"];
7609
+ };
7610
+ cookie?: never;
7611
+ };
7612
+ requestBody?: never;
7613
+ responses: {
7614
+ /** @description The contact's presence. */
7615
+ 200: {
7616
+ headers: {
7617
+ [name: string]: unknown;
7618
+ };
7619
+ content: {
7620
+ "application/json": components["schemas"]["ContactPresence"];
7621
+ };
7622
+ };
7623
+ 401: components["responses"]["Problem"];
7624
+ 403: components["responses"]["Problem"];
7625
+ 404: components["responses"]["Problem"];
7626
+ };
7627
+ };
7628
+ listConversations: {
7629
+ parameters: {
7630
+ query?: {
7631
+ inbox_id?: string;
7632
+ /** @description Only this contact's conversations. A contact of another workspace answers `404`. */
7633
+ contact_id?: string;
7634
+ status?: components["schemas"]["ConversationStatus"];
7635
+ /** @description A member id, `me` (member sessions only) or `unassigned`. */
7636
+ assignee?: string;
7637
+ label_id?: string;
7638
+ /**
7639
+ * @description `true` lists only conversations flagged as spam (the spam view); without it, or with
7640
+ * `false`, spam is left out.
7641
+ */
7642
+ spam?: boolean;
7643
+ /** @description Only conversations of this kind, e.g. `feedback` for the feedback view. */
7644
+ kind?: components["schemas"]["ConversationKind"];
7645
+ /** @description Only feedback of this category (implies `kind=feedback`). */
7646
+ category?: components["schemas"]["FeedbackCategory"];
7647
+ /**
7648
+ * @description `true` lists only the conversations the calling member pinned, `false` only the others;
7649
+ * without it, both. Member sessions only (`400 validation_failed` for API keys).
7650
+ */
7651
+ pinned?: boolean;
7652
+ /** @description Full-text search (Postgres `simple` configuration, `websearch` syntax). */
7653
+ q?: components["parameters"]["Search"];
7654
+ /** @description The `next_cursor` of the previous page. */
7655
+ cursor?: components["parameters"]["Cursor"];
7656
+ /** @description Page size, 1 to 100; 25 by default. */
7657
+ limit?: components["parameters"]["Limit"];
7658
+ };
7659
+ header?: {
7660
+ /** @description The workspace to act on; see "Workspace selection". */
7661
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
7662
+ };
7663
+ path?: never;
7664
+ cookie?: never;
7665
+ };
7666
+ requestBody?: never;
7667
+ responses: {
7668
+ /** @description A page of conversations. */
7669
+ 200: {
6812
7670
  headers: {
6813
7671
  [name: string]: unknown;
6814
7672
  };
@@ -6880,6 +7738,40 @@ export interface operations {
6880
7738
  403: components["responses"]["Problem"];
6881
7739
  };
6882
7740
  };
7741
+ getStats: {
7742
+ parameters: {
7743
+ query?: {
7744
+ /** @description Only this inbox (`404` when the caller cannot see it). */
7745
+ inbox_id?: string;
7746
+ /** @description Start of the window; the start of today in `timezone` when absent. */
7747
+ since?: string;
7748
+ /** @description IANA time zone for the default `since`. */
7749
+ timezone?: string;
7750
+ };
7751
+ header?: {
7752
+ /** @description The workspace to act on; see "Workspace selection". */
7753
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
7754
+ };
7755
+ path?: never;
7756
+ cookie?: never;
7757
+ };
7758
+ requestBody?: never;
7759
+ responses: {
7760
+ /** @description The activity. */
7761
+ 200: {
7762
+ headers: {
7763
+ [name: string]: unknown;
7764
+ };
7765
+ content: {
7766
+ "application/json": components["schemas"]["Stats"];
7767
+ };
7768
+ };
7769
+ 400: components["responses"]["Problem"];
7770
+ 401: components["responses"]["Problem"];
7771
+ 403: components["responses"]["Problem"];
7772
+ 404: components["responses"]["Problem"];
7773
+ };
7774
+ };
6883
7775
  bulkUpdateConversations: {
6884
7776
  parameters: {
6885
7777
  query?: never;
@@ -7127,6 +8019,92 @@ export interface operations {
7127
8019
  404: components["responses"]["Problem"];
7128
8020
  };
7129
8021
  };
8022
+ markConversationUnread: {
8023
+ parameters: {
8024
+ query?: never;
8025
+ header?: {
8026
+ /** @description Makes a retried request return the first response; see "Idempotency". */
8027
+ "Idempotency-Key"?: components["parameters"]["IdempotencyKey"];
8028
+ /** @description The workspace to act on; see "Workspace selection". */
8029
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
8030
+ };
8031
+ path: {
8032
+ conversationId: components["parameters"]["ConversationId"];
8033
+ };
8034
+ cookie?: never;
8035
+ };
8036
+ requestBody?: never;
8037
+ responses: {
8038
+ /** @description The member's read state. */
8039
+ 200: {
8040
+ headers: {
8041
+ [name: string]: unknown;
8042
+ };
8043
+ content: {
8044
+ "application/json": components["schemas"]["ConversationRead"];
8045
+ };
8046
+ };
8047
+ 401: components["responses"]["Problem"];
8048
+ 403: components["responses"]["Problem"];
8049
+ 404: components["responses"]["Problem"];
8050
+ };
8051
+ };
8052
+ pinConversation: {
8053
+ parameters: {
8054
+ query?: never;
8055
+ header?: {
8056
+ /** @description The workspace to act on; see "Workspace selection". */
8057
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
8058
+ };
8059
+ path: {
8060
+ conversationId: components["parameters"]["ConversationId"];
8061
+ };
8062
+ cookie?: never;
8063
+ };
8064
+ requestBody?: never;
8065
+ responses: {
8066
+ /** @description The member's pin. */
8067
+ 200: {
8068
+ headers: {
8069
+ [name: string]: unknown;
8070
+ };
8071
+ content: {
8072
+ "application/json": components["schemas"]["ConversationPin"];
8073
+ };
8074
+ };
8075
+ 401: components["responses"]["Problem"];
8076
+ 403: components["responses"]["Problem"];
8077
+ 404: components["responses"]["Problem"];
8078
+ };
8079
+ };
8080
+ unpinConversation: {
8081
+ parameters: {
8082
+ query?: never;
8083
+ header?: {
8084
+ /** @description The workspace to act on; see "Workspace selection". */
8085
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
8086
+ };
8087
+ path: {
8088
+ conversationId: components["parameters"]["ConversationId"];
8089
+ };
8090
+ cookie?: never;
8091
+ };
8092
+ requestBody?: never;
8093
+ responses: {
8094
+ /** @description The member's pin, without `pinned_at`. */
8095
+ 200: {
8096
+ headers: {
8097
+ [name: string]: unknown;
8098
+ };
8099
+ content: {
8100
+ "application/json": components["schemas"]["ConversationPin"];
8101
+ };
8102
+ };
8103
+ 401: components["responses"]["Problem"];
8104
+ 403: components["responses"]["Problem"];
8105
+ 404: components["responses"]["Problem"];
8106
+ };
8107
+ };
7130
8108
  setMemberTyping: {
7131
8109
  parameters: {
7132
8110
  query?: never;
@@ -7160,6 +8138,41 @@ export interface operations {
7160
8138
  404: components["responses"]["Problem"];
7161
8139
  };
7162
8140
  };
8141
+ listDrafts: {
8142
+ parameters: {
8143
+ query?: {
8144
+ /** @description Only drafts in this inbox. An inbox the caller cannot see answers `404`. */
8145
+ inbox_id?: string;
8146
+ author?: components["schemas"]["DraftAuthorKind"];
8147
+ /** @description The `next_cursor` of the previous page. */
8148
+ cursor?: components["parameters"]["Cursor"];
8149
+ /** @description Page size, 1 to 100; 25 by default. */
8150
+ limit?: components["parameters"]["Limit"];
8151
+ };
8152
+ header?: {
8153
+ /** @description The workspace to act on; see "Workspace selection". */
8154
+ "Yuva-Workspace"?: components["parameters"]["WorkspaceHeader"];
8155
+ };
8156
+ path?: never;
8157
+ cookie?: never;
8158
+ };
8159
+ requestBody?: never;
8160
+ responses: {
8161
+ /** @description A page of drafts. */
8162
+ 200: {
8163
+ headers: {
8164
+ [name: string]: unknown;
8165
+ };
8166
+ content: {
8167
+ "application/json": components["schemas"]["DraftPage"];
8168
+ };
8169
+ };
8170
+ 400: components["responses"]["Problem"];
8171
+ 401: components["responses"]["Problem"];
8172
+ 403: components["responses"]["Problem"];
8173
+ 404: components["responses"]["Problem"];
8174
+ };
8175
+ };
7163
8176
  downloadAttachment: {
7164
8177
  parameters: {
7165
8178
  query?: {
@@ -8473,6 +9486,37 @@ export interface operations {
8473
9486
  404: components["responses"]["Problem"];
8474
9487
  };
8475
9488
  };
9489
+ rateClientConversation: {
9490
+ parameters: {
9491
+ query?: never;
9492
+ header?: never;
9493
+ path: {
9494
+ conversationId: components["parameters"]["ConversationId"];
9495
+ };
9496
+ cookie?: never;
9497
+ };
9498
+ requestBody: {
9499
+ content: {
9500
+ "application/json": components["schemas"]["ClientRatingCreate"];
9501
+ };
9502
+ };
9503
+ responses: {
9504
+ /** @description The conversation with its rating. */
9505
+ 201: {
9506
+ headers: {
9507
+ [name: string]: unknown;
9508
+ };
9509
+ content: {
9510
+ "application/json": components["schemas"]["ClientConversation"];
9511
+ };
9512
+ };
9513
+ 400: components["responses"]["Problem"];
9514
+ 401: components["responses"]["Problem"];
9515
+ 403: components["responses"]["Problem"];
9516
+ 404: components["responses"]["Problem"];
9517
+ 409: components["responses"]["Problem"];
9518
+ };
9519
+ };
8476
9520
  setClientTyping: {
8477
9521
  parameters: {
8478
9522
  query?: never;
@@ -8940,6 +9984,39 @@ export interface operations {
8940
9984
  };
8941
9985
  };
8942
9986
  };
9987
+ webhookConversationRated: {
9988
+ parameters: {
9989
+ query?: never;
9990
+ header: {
9991
+ /** @description The delivery's id, the same on every retry; use it to ignore duplicates. */
9992
+ "webhook-id": components["parameters"]["WebhookIdHeader"];
9993
+ /** @description Unix seconds of this attempt. Refuse values far from your clock. */
9994
+ "webhook-timestamp": components["parameters"]["WebhookTimestampHeader"];
9995
+ /**
9996
+ * @description Space-separated `v1,<base64>` signatures: HMAC-SHA256 over
9997
+ * `<webhook-id>.<webhook-timestamp>.<body>` with the base64-decoded part of the
9998
+ * `whsec_` secret (Standard Webhooks). Two during a secret rotation.
9999
+ */
10000
+ "webhook-signature": components["parameters"]["WebhookSignatureHeader"];
10001
+ };
10002
+ path?: never;
10003
+ cookie?: never;
10004
+ };
10005
+ requestBody: {
10006
+ content: {
10007
+ "application/json": components["schemas"]["WebhookConversationPayload"];
10008
+ };
10009
+ };
10010
+ responses: {
10011
+ /** @description Any 2xx answer counts as delivered. */
10012
+ 200: {
10013
+ headers: {
10014
+ [name: string]: unknown;
10015
+ };
10016
+ content?: never;
10017
+ };
10018
+ };
10019
+ };
8943
10020
  webhookConversationUpdated: {
8944
10021
  parameters: {
8945
10022
  query?: never;