featurebase-node 0.12.0 → 0.14.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 (501) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/api-promise.d.mts +1 -0
  3. package/api-promise.d.mts.map +1 -1
  4. package/api-promise.d.ts +1 -0
  5. package/api-promise.d.ts.map +1 -1
  6. package/api-promise.mjs +1 -0
  7. package/api-promise.mjs.map +1 -1
  8. package/client.d.mts +9 -3
  9. package/client.d.mts.map +1 -1
  10. package/client.d.ts +9 -3
  11. package/client.d.ts.map +1 -1
  12. package/client.js +6 -0
  13. package/client.js.map +1 -1
  14. package/client.mjs +6 -0
  15. package/client.mjs.map +1 -1
  16. package/core/api-promise.d.mts.map +1 -1
  17. package/core/api-promise.d.ts.map +1 -1
  18. package/core/api-promise.mjs.map +1 -1
  19. package/core/error.mjs.map +1 -1
  20. package/core/pagination.d.mts.map +1 -1
  21. package/core/pagination.d.ts.map +1 -1
  22. package/core/pagination.mjs.map +1 -1
  23. package/core/resource.d.mts.map +1 -1
  24. package/core/resource.d.ts.map +1 -1
  25. package/core/uploads.d.mts.map +1 -1
  26. package/core/uploads.d.ts.map +1 -1
  27. package/core/uploads.mjs.map +1 -1
  28. package/error.d.mts +1 -0
  29. package/error.d.mts.map +1 -1
  30. package/error.d.ts +1 -0
  31. package/error.d.ts.map +1 -1
  32. package/error.mjs +1 -0
  33. package/error.mjs.map +1 -1
  34. package/index.d.mts.map +1 -1
  35. package/index.d.ts.map +1 -1
  36. package/index.mjs.map +1 -1
  37. package/internal/detect-platform.mjs.map +1 -1
  38. package/internal/headers.mjs.map +1 -1
  39. package/internal/parse.d.mts.map +1 -1
  40. package/internal/parse.d.ts.map +1 -1
  41. package/internal/parse.mjs.map +1 -1
  42. package/internal/qs/formats.d.mts.map +1 -1
  43. package/internal/qs/formats.d.ts.map +1 -1
  44. package/internal/qs/index.d.mts +2 -2
  45. package/internal/qs/index.d.mts.map +1 -1
  46. package/internal/qs/index.d.ts +2 -2
  47. package/internal/qs/index.d.ts.map +1 -1
  48. package/internal/qs/index.mjs.map +1 -1
  49. package/internal/qs/stringify.d.mts.map +1 -1
  50. package/internal/qs/stringify.d.ts.map +1 -1
  51. package/internal/qs/stringify.mjs.map +1 -1
  52. package/internal/qs/utils.d.mts.map +1 -1
  53. package/internal/qs/utils.d.ts.map +1 -1
  54. package/internal/qs/utils.mjs.map +1 -1
  55. package/internal/request-options.d.mts.map +1 -1
  56. package/internal/request-options.d.ts.map +1 -1
  57. package/internal/shims.d.mts +6 -0
  58. package/internal/shims.d.mts.map +1 -1
  59. package/internal/shims.d.ts +6 -0
  60. package/internal/shims.d.ts.map +1 -1
  61. package/internal/to-file.d.mts.map +1 -1
  62. package/internal/to-file.d.ts.map +1 -1
  63. package/internal/to-file.mjs.map +1 -1
  64. package/internal/types.d.mts +4 -4
  65. package/internal/types.d.mts.map +1 -1
  66. package/internal/types.d.ts +4 -4
  67. package/internal/types.d.ts.map +1 -1
  68. package/internal/uploads.d.mts.map +1 -1
  69. package/internal/uploads.d.ts.map +1 -1
  70. package/internal/uploads.mjs.map +1 -1
  71. package/internal/utils/base64.mjs.map +1 -1
  72. package/internal/utils/log.d.mts.map +1 -1
  73. package/internal/utils/log.d.ts.map +1 -1
  74. package/internal/utils/log.js +2 -0
  75. package/internal/utils/log.js.map +1 -1
  76. package/internal/utils/log.mjs +2 -0
  77. package/internal/utils/log.mjs.map +1 -1
  78. package/internal/utils/path.mjs.map +1 -1
  79. package/internal/utils/query.mjs.map +1 -1
  80. package/internal/utils/values.mjs.map +1 -1
  81. package/internal/utils.d.mts.map +1 -1
  82. package/internal/utils.d.ts.map +1 -1
  83. package/internal/utils.mjs.map +1 -1
  84. package/package.json +16 -10
  85. package/pagination.d.mts +1 -0
  86. package/pagination.d.mts.map +1 -1
  87. package/pagination.d.ts +1 -0
  88. package/pagination.d.ts.map +1 -1
  89. package/pagination.mjs +1 -0
  90. package/pagination.mjs.map +1 -1
  91. package/resource.d.mts +1 -0
  92. package/resource.d.mts.map +1 -1
  93. package/resource.d.ts +1 -0
  94. package/resource.d.ts.map +1 -1
  95. package/resource.mjs +1 -0
  96. package/resource.mjs.map +1 -1
  97. package/resources/changelogs/changelogs.d.mts +106 -106
  98. package/resources/changelogs/changelogs.d.mts.map +1 -1
  99. package/resources/changelogs/changelogs.d.ts +106 -106
  100. package/resources/changelogs/changelogs.d.ts.map +1 -1
  101. package/resources/changelogs/changelogs.js +74 -74
  102. package/resources/changelogs/changelogs.js.map +1 -1
  103. package/resources/changelogs/changelogs.mjs +74 -74
  104. package/resources/changelogs/changelogs.mjs.map +1 -1
  105. package/resources/changelogs/index.d.mts +1 -1
  106. package/resources/changelogs/index.d.mts.map +1 -1
  107. package/resources/changelogs/index.d.ts +1 -1
  108. package/resources/changelogs/index.d.ts.map +1 -1
  109. package/resources/changelogs/index.mjs.map +1 -1
  110. package/resources/changelogs/subscribers.d.mts.map +1 -1
  111. package/resources/changelogs/subscribers.d.ts.map +1 -1
  112. package/resources/changelogs/subscribers.mjs.map +1 -1
  113. package/resources/changelogs.d.mts.map +1 -1
  114. package/resources/changelogs.d.ts.map +1 -1
  115. package/resources/changelogs.mjs.map +1 -1
  116. package/resources/conversation-attributes.d.mts +117 -0
  117. package/resources/conversation-attributes.d.mts.map +1 -0
  118. package/resources/conversation-attributes.d.ts +117 -0
  119. package/resources/conversation-attributes.d.ts.map +1 -0
  120. package/resources/conversation-attributes.js +61 -0
  121. package/resources/conversation-attributes.js.map +1 -0
  122. package/resources/conversation-attributes.mjs +57 -0
  123. package/resources/conversation-attributes.mjs.map +1 -0
  124. package/resources/feedback/boards.d.mts +17 -17
  125. package/resources/feedback/boards.d.mts.map +1 -1
  126. package/resources/feedback/boards.d.ts +17 -17
  127. package/resources/feedback/boards.d.ts.map +1 -1
  128. package/resources/feedback/boards.js +20 -20
  129. package/resources/feedback/boards.js.map +1 -1
  130. package/resources/feedback/boards.mjs +20 -20
  131. package/resources/feedback/boards.mjs.map +1 -1
  132. package/resources/feedback/comments.d.mts +400 -123
  133. package/resources/feedback/comments.d.mts.map +1 -1
  134. package/resources/feedback/comments.d.ts +400 -123
  135. package/resources/feedback/comments.d.ts.map +1 -1
  136. package/resources/feedback/comments.js +253 -93
  137. package/resources/feedback/comments.js.map +1 -1
  138. package/resources/feedback/comments.mjs +253 -93
  139. package/resources/feedback/comments.mjs.map +1 -1
  140. package/resources/feedback/custom-fields.d.mts +34 -34
  141. package/resources/feedback/custom-fields.d.mts.map +1 -1
  142. package/resources/feedback/custom-fields.d.ts +34 -34
  143. package/resources/feedback/custom-fields.d.ts.map +1 -1
  144. package/resources/feedback/custom-fields.js +36 -36
  145. package/resources/feedback/custom-fields.js.map +1 -1
  146. package/resources/feedback/custom-fields.mjs +36 -36
  147. package/resources/feedback/custom-fields.mjs.map +1 -1
  148. package/resources/feedback/feedback.d.mts +7 -7
  149. package/resources/feedback/feedback.d.mts.map +1 -1
  150. package/resources/feedback/feedback.d.ts +7 -7
  151. package/resources/feedback/feedback.d.ts.map +1 -1
  152. package/resources/feedback/feedback.js.map +1 -1
  153. package/resources/feedback/feedback.mjs.map +1 -1
  154. package/resources/feedback/index.d.mts +5 -5
  155. package/resources/feedback/index.d.mts.map +1 -1
  156. package/resources/feedback/index.d.ts +5 -5
  157. package/resources/feedback/index.d.ts.map +1 -1
  158. package/resources/feedback/index.js.map +1 -1
  159. package/resources/feedback/index.mjs.map +1 -1
  160. package/resources/feedback/post-statuses.d.mts +18 -18
  161. package/resources/feedback/post-statuses.d.mts.map +1 -1
  162. package/resources/feedback/post-statuses.d.ts +18 -18
  163. package/resources/feedback/post-statuses.d.ts.map +1 -1
  164. package/resources/feedback/post-statuses.js +23 -23
  165. package/resources/feedback/post-statuses.js.map +1 -1
  166. package/resources/feedback/post-statuses.mjs +23 -23
  167. package/resources/feedback/post-statuses.mjs.map +1 -1
  168. package/resources/feedback/posts/index.d.mts +1 -1
  169. package/resources/feedback/posts/index.d.mts.map +1 -1
  170. package/resources/feedback/posts/index.d.ts +1 -1
  171. package/resources/feedback/posts/index.d.ts.map +1 -1
  172. package/resources/feedback/posts/index.js.map +1 -1
  173. package/resources/feedback/posts/index.mjs.map +1 -1
  174. package/resources/feedback/posts/posts.d.mts +238 -284
  175. package/resources/feedback/posts/posts.d.mts.map +1 -1
  176. package/resources/feedback/posts/posts.d.ts +238 -284
  177. package/resources/feedback/posts/posts.d.ts.map +1 -1
  178. package/resources/feedback/posts/posts.js +122 -96
  179. package/resources/feedback/posts/posts.js.map +1 -1
  180. package/resources/feedback/posts/posts.mjs +122 -96
  181. package/resources/feedback/posts/posts.mjs.map +1 -1
  182. package/resources/feedback/posts/voters.d.mts.map +1 -1
  183. package/resources/feedback/posts/voters.d.ts.map +1 -1
  184. package/resources/feedback/posts/voters.mjs.map +1 -1
  185. package/resources/feedback/posts.d.mts.map +1 -1
  186. package/resources/feedback/posts.d.ts.map +1 -1
  187. package/resources/feedback/posts.mjs.map +1 -1
  188. package/resources/feedback.d.mts.map +1 -1
  189. package/resources/feedback.d.ts.map +1 -1
  190. package/resources/feedback.mjs.map +1 -1
  191. package/resources/help-center/articles.d.mts +98 -152
  192. package/resources/help-center/articles.d.mts.map +1 -1
  193. package/resources/help-center/articles.d.ts +98 -152
  194. package/resources/help-center/articles.d.ts.map +1 -1
  195. package/resources/help-center/articles.js +73 -73
  196. package/resources/help-center/articles.js.map +1 -1
  197. package/resources/help-center/articles.mjs +73 -73
  198. package/resources/help-center/articles.mjs.map +1 -1
  199. package/resources/help-center/collections.d.mts +64 -64
  200. package/resources/help-center/collections.d.mts.map +1 -1
  201. package/resources/help-center/collections.d.ts +64 -64
  202. package/resources/help-center/collections.d.ts.map +1 -1
  203. package/resources/help-center/collections.js +65 -65
  204. package/resources/help-center/collections.js.map +1 -1
  205. package/resources/help-center/collections.mjs +65 -65
  206. package/resources/help-center/collections.mjs.map +1 -1
  207. package/resources/help-center/help-center.d.mts +5 -5
  208. package/resources/help-center/help-center.d.mts.map +1 -1
  209. package/resources/help-center/help-center.d.ts +5 -5
  210. package/resources/help-center/help-center.d.ts.map +1 -1
  211. package/resources/help-center/help-center.js.map +1 -1
  212. package/resources/help-center/help-center.mjs.map +1 -1
  213. package/resources/help-center/help-centers.d.mts +43 -43
  214. package/resources/help-center/help-centers.d.mts.map +1 -1
  215. package/resources/help-center/help-centers.d.ts +43 -43
  216. package/resources/help-center/help-centers.d.ts.map +1 -1
  217. package/resources/help-center/help-centers.js +43 -43
  218. package/resources/help-center/help-centers.js.map +1 -1
  219. package/resources/help-center/help-centers.mjs +43 -43
  220. package/resources/help-center/help-centers.mjs.map +1 -1
  221. package/resources/help-center/index.d.mts +4 -4
  222. package/resources/help-center/index.d.mts.map +1 -1
  223. package/resources/help-center/index.d.ts +4 -4
  224. package/resources/help-center/index.d.ts.map +1 -1
  225. package/resources/help-center/index.js.map +1 -1
  226. package/resources/help-center/index.mjs.map +1 -1
  227. package/resources/help-center/redirect-rules.d.mts +117 -117
  228. package/resources/help-center/redirect-rules.d.mts.map +1 -1
  229. package/resources/help-center/redirect-rules.d.ts +117 -117
  230. package/resources/help-center/redirect-rules.d.ts.map +1 -1
  231. package/resources/help-center/redirect-rules.js +112 -112
  232. package/resources/help-center/redirect-rules.js.map +1 -1
  233. package/resources/help-center/redirect-rules.mjs +112 -112
  234. package/resources/help-center/redirect-rules.mjs.map +1 -1
  235. package/resources/help-center.d.mts.map +1 -1
  236. package/resources/help-center.d.ts.map +1 -1
  237. package/resources/help-center.mjs.map +1 -1
  238. package/resources/index.d.mts +4 -3
  239. package/resources/index.d.mts.map +1 -1
  240. package/resources/index.d.ts +4 -3
  241. package/resources/index.d.ts.map +1 -1
  242. package/resources/index.js +3 -1
  243. package/resources/index.js.map +1 -1
  244. package/resources/index.mjs +1 -0
  245. package/resources/index.mjs.map +1 -1
  246. package/resources/organization/admins.d.mts +23 -23
  247. package/resources/organization/admins.d.mts.map +1 -1
  248. package/resources/organization/admins.d.ts +23 -23
  249. package/resources/organization/admins.d.ts.map +1 -1
  250. package/resources/organization/admins.js +25 -25
  251. package/resources/organization/admins.js.map +1 -1
  252. package/resources/organization/admins.mjs +25 -25
  253. package/resources/organization/admins.mjs.map +1 -1
  254. package/resources/organization/brands.d.mts +50 -50
  255. package/resources/organization/brands.d.mts.map +1 -1
  256. package/resources/organization/brands.d.ts +50 -50
  257. package/resources/organization/brands.d.ts.map +1 -1
  258. package/resources/organization/brands.js +54 -54
  259. package/resources/organization/brands.js.map +1 -1
  260. package/resources/organization/brands.mjs +54 -54
  261. package/resources/organization/brands.mjs.map +1 -1
  262. package/resources/organization/index.d.mts +3 -3
  263. package/resources/organization/index.d.mts.map +1 -1
  264. package/resources/organization/index.d.ts +3 -3
  265. package/resources/organization/index.d.ts.map +1 -1
  266. package/resources/organization/index.mjs.map +1 -1
  267. package/resources/organization/organization.d.mts +3 -3
  268. package/resources/organization/organization.d.mts.map +1 -1
  269. package/resources/organization/organization.d.ts +3 -3
  270. package/resources/organization/organization.d.ts.map +1 -1
  271. package/resources/organization/organization.mjs.map +1 -1
  272. package/resources/organization/teams.d.mts +45 -45
  273. package/resources/organization/teams.d.mts.map +1 -1
  274. package/resources/organization/teams.d.ts +45 -45
  275. package/resources/organization/teams.d.ts.map +1 -1
  276. package/resources/organization/teams.js +44 -44
  277. package/resources/organization/teams.js.map +1 -1
  278. package/resources/organization/teams.mjs +44 -44
  279. package/resources/organization/teams.mjs.map +1 -1
  280. package/resources/organization.d.mts.map +1 -1
  281. package/resources/organization.d.ts.map +1 -1
  282. package/resources/organization.mjs.map +1 -1
  283. package/resources/support/conversation-tags.d.mts +40 -40
  284. package/resources/support/conversation-tags.d.mts.map +1 -1
  285. package/resources/support/conversation-tags.d.ts +40 -40
  286. package/resources/support/conversation-tags.d.ts.map +1 -1
  287. package/resources/support/conversation-tags.js +32 -32
  288. package/resources/support/conversation-tags.js.map +1 -1
  289. package/resources/support/conversation-tags.mjs +32 -32
  290. package/resources/support/conversation-tags.mjs.map +1 -1
  291. package/resources/support/conversations/conversations.d.mts +624 -722
  292. package/resources/support/conversations/conversations.d.mts.map +1 -1
  293. package/resources/support/conversations/conversations.d.ts +624 -722
  294. package/resources/support/conversations/conversations.d.ts.map +1 -1
  295. package/resources/support/conversations/conversations.js +309 -302
  296. package/resources/support/conversations/conversations.js.map +1 -1
  297. package/resources/support/conversations/conversations.mjs +309 -302
  298. package/resources/support/conversations/conversations.mjs.map +1 -1
  299. package/resources/support/conversations/index.d.mts +1 -1
  300. package/resources/support/conversations/index.d.mts.map +1 -1
  301. package/resources/support/conversations/index.d.ts +1 -1
  302. package/resources/support/conversations/index.d.ts.map +1 -1
  303. package/resources/support/conversations/index.js.map +1 -1
  304. package/resources/support/conversations/index.mjs.map +1 -1
  305. package/resources/support/conversations/participants.d.mts.map +1 -1
  306. package/resources/support/conversations/participants.d.ts.map +1 -1
  307. package/resources/support/conversations/participants.mjs.map +1 -1
  308. package/resources/support/conversations.d.mts.map +1 -1
  309. package/resources/support/conversations.d.ts.map +1 -1
  310. package/resources/support/conversations.mjs.map +1 -1
  311. package/resources/support/index.d.mts +3 -3
  312. package/resources/support/index.d.mts.map +1 -1
  313. package/resources/support/index.d.ts +3 -3
  314. package/resources/support/index.d.ts.map +1 -1
  315. package/resources/support/index.js.map +1 -1
  316. package/resources/support/index.mjs.map +1 -1
  317. package/resources/support/support.d.mts +4 -4
  318. package/resources/support/support.d.mts.map +1 -1
  319. package/resources/support/support.d.ts +4 -4
  320. package/resources/support/support.d.ts.map +1 -1
  321. package/resources/support/support.js.map +1 -1
  322. package/resources/support/support.mjs.map +1 -1
  323. package/resources/support/tickets/categories.d.mts +18 -18
  324. package/resources/support/tickets/categories.d.mts.map +1 -1
  325. package/resources/support/tickets/categories.d.ts +18 -18
  326. package/resources/support/tickets/categories.d.ts.map +1 -1
  327. package/resources/support/tickets/categories.js +25 -25
  328. package/resources/support/tickets/categories.js.map +1 -1
  329. package/resources/support/tickets/categories.mjs +25 -25
  330. package/resources/support/tickets/categories.mjs.map +1 -1
  331. package/resources/support/tickets/custom-fields.d.mts +20 -20
  332. package/resources/support/tickets/custom-fields.d.mts.map +1 -1
  333. package/resources/support/tickets/custom-fields.d.ts +20 -20
  334. package/resources/support/tickets/custom-fields.d.ts.map +1 -1
  335. package/resources/support/tickets/custom-fields.js +19 -19
  336. package/resources/support/tickets/custom-fields.js.map +1 -1
  337. package/resources/support/tickets/custom-fields.mjs +19 -19
  338. package/resources/support/tickets/custom-fields.mjs.map +1 -1
  339. package/resources/support/tickets/index.d.mts +4 -4
  340. package/resources/support/tickets/index.d.mts.map +1 -1
  341. package/resources/support/tickets/index.d.ts +4 -4
  342. package/resources/support/tickets/index.d.ts.map +1 -1
  343. package/resources/support/tickets/index.mjs.map +1 -1
  344. package/resources/support/tickets/statuses.d.mts +17 -17
  345. package/resources/support/tickets/statuses.d.mts.map +1 -1
  346. package/resources/support/tickets/statuses.d.ts +17 -17
  347. package/resources/support/tickets/statuses.d.ts.map +1 -1
  348. package/resources/support/tickets/statuses.js +21 -21
  349. package/resources/support/tickets/statuses.js.map +1 -1
  350. package/resources/support/tickets/statuses.mjs +21 -21
  351. package/resources/support/tickets/statuses.mjs.map +1 -1
  352. package/resources/support/tickets/tickets.d.mts +69 -69
  353. package/resources/support/tickets/tickets.d.mts.map +1 -1
  354. package/resources/support/tickets/tickets.d.ts +69 -69
  355. package/resources/support/tickets/tickets.d.ts.map +1 -1
  356. package/resources/support/tickets/tickets.js +44 -44
  357. package/resources/support/tickets/tickets.js.map +1 -1
  358. package/resources/support/tickets/tickets.mjs +44 -44
  359. package/resources/support/tickets/tickets.mjs.map +1 -1
  360. package/resources/support/tickets.d.mts.map +1 -1
  361. package/resources/support/tickets.d.ts.map +1 -1
  362. package/resources/support/tickets.mjs.map +1 -1
  363. package/resources/support.d.mts.map +1 -1
  364. package/resources/support.d.ts.map +1 -1
  365. package/resources/support.mjs.map +1 -1
  366. package/resources/surveys.d.mts +41 -41
  367. package/resources/surveys.d.mts.map +1 -1
  368. package/resources/surveys.d.ts +41 -41
  369. package/resources/surveys.d.ts.map +1 -1
  370. package/resources/surveys.js +44 -44
  371. package/resources/surveys.js.map +1 -1
  372. package/resources/surveys.mjs +44 -44
  373. package/resources/surveys.mjs.map +1 -1
  374. package/resources/users/companies/companies.d.mts +149 -177
  375. package/resources/users/companies/companies.d.mts.map +1 -1
  376. package/resources/users/companies/companies.d.ts +149 -177
  377. package/resources/users/companies/companies.d.ts.map +1 -1
  378. package/resources/users/companies/companies.js +153 -142
  379. package/resources/users/companies/companies.js.map +1 -1
  380. package/resources/users/companies/companies.mjs +153 -142
  381. package/resources/users/companies/companies.mjs.map +1 -1
  382. package/resources/users/companies/contacts.d.mts.map +1 -1
  383. package/resources/users/companies/contacts.d.ts.map +1 -1
  384. package/resources/users/companies/contacts.mjs.map +1 -1
  385. package/resources/users/companies/index.d.mts +1 -1
  386. package/resources/users/companies/index.d.mts.map +1 -1
  387. package/resources/users/companies/index.d.ts +1 -1
  388. package/resources/users/companies/index.d.ts.map +1 -1
  389. package/resources/users/companies/index.mjs.map +1 -1
  390. package/resources/users/companies.d.mts.map +1 -1
  391. package/resources/users/companies.d.ts.map +1 -1
  392. package/resources/users/companies.mjs.map +1 -1
  393. package/resources/users/contacts/by-user-id/by-user-id.d.mts.map +1 -1
  394. package/resources/users/contacts/by-user-id/by-user-id.d.ts.map +1 -1
  395. package/resources/users/contacts/by-user-id/by-user-id.mjs.map +1 -1
  396. package/resources/users/contacts/by-user-id/email-preferences.d.mts.map +1 -1
  397. package/resources/users/contacts/by-user-id/email-preferences.d.ts.map +1 -1
  398. package/resources/users/contacts/by-user-id/email-preferences.mjs.map +1 -1
  399. package/resources/users/contacts/by-user-id/index.d.mts.map +1 -1
  400. package/resources/users/contacts/by-user-id/index.d.ts.map +1 -1
  401. package/resources/users/contacts/by-user-id/index.mjs.map +1 -1
  402. package/resources/users/contacts/by-user-id.d.mts.map +1 -1
  403. package/resources/users/contacts/by-user-id.d.ts.map +1 -1
  404. package/resources/users/contacts/by-user-id.mjs.map +1 -1
  405. package/resources/users/contacts/contacts.d.mts +229 -256
  406. package/resources/users/contacts/contacts.d.mts.map +1 -1
  407. package/resources/users/contacts/contacts.d.ts +229 -256
  408. package/resources/users/contacts/contacts.d.ts.map +1 -1
  409. package/resources/users/contacts/contacts.js +213 -201
  410. package/resources/users/contacts/contacts.js.map +1 -1
  411. package/resources/users/contacts/contacts.mjs +213 -201
  412. package/resources/users/contacts/contacts.mjs.map +1 -1
  413. package/resources/users/contacts/email-preferences.d.mts.map +1 -1
  414. package/resources/users/contacts/email-preferences.d.ts.map +1 -1
  415. package/resources/users/contacts/email-preferences.mjs.map +1 -1
  416. package/resources/users/contacts/index.d.mts +1 -1
  417. package/resources/users/contacts/index.d.mts.map +1 -1
  418. package/resources/users/contacts/index.d.ts +1 -1
  419. package/resources/users/contacts/index.d.ts.map +1 -1
  420. package/resources/users/contacts/index.mjs.map +1 -1
  421. package/resources/users/contacts.d.mts.map +1 -1
  422. package/resources/users/contacts.d.ts.map +1 -1
  423. package/resources/users/contacts.mjs.map +1 -1
  424. package/resources/users/index.d.mts +2 -2
  425. package/resources/users/index.d.mts.map +1 -1
  426. package/resources/users/index.d.ts +2 -2
  427. package/resources/users/index.d.ts.map +1 -1
  428. package/resources/users/index.mjs.map +1 -1
  429. package/resources/users/users.d.mts +2 -2
  430. package/resources/users/users.d.mts.map +1 -1
  431. package/resources/users/users.d.ts +2 -2
  432. package/resources/users/users.d.ts.map +1 -1
  433. package/resources/users/users.mjs.map +1 -1
  434. package/resources/users.d.mts.map +1 -1
  435. package/resources/users.d.ts.map +1 -1
  436. package/resources/users.mjs.map +1 -1
  437. package/resources/webhooks.d.mts +75 -75
  438. package/resources/webhooks.d.mts.map +1 -1
  439. package/resources/webhooks.d.ts +75 -75
  440. package/resources/webhooks.d.ts.map +1 -1
  441. package/resources/webhooks.js +77 -77
  442. package/resources/webhooks.js.map +1 -1
  443. package/resources/webhooks.mjs +77 -77
  444. package/resources/webhooks.mjs.map +1 -1
  445. package/resources.d.mts.map +1 -1
  446. package/resources.d.ts.map +1 -1
  447. package/resources.mjs.map +1 -1
  448. package/src/client.ts +25 -3
  449. package/src/internal/utils/log.ts +2 -0
  450. package/src/resources/changelogs/changelogs.ts +170 -170
  451. package/src/resources/changelogs/index.ts +1 -1
  452. package/src/resources/conversation-attributes.ts +181 -0
  453. package/src/resources/feedback/boards.ts +28 -28
  454. package/src/resources/feedback/comments.ts +464 -141
  455. package/src/resources/feedback/custom-fields.ts +44 -44
  456. package/src/resources/feedback/feedback.ts +23 -5
  457. package/src/resources/feedback/index.ts +14 -5
  458. package/src/resources/feedback/post-statuses.ts +31 -31
  459. package/src/resources/feedback/posts/index.ts +7 -1
  460. package/src/resources/feedback/posts/posts.ts +294 -340
  461. package/src/resources/help-center/articles.ts +123 -186
  462. package/src/resources/help-center/collections.ts +84 -84
  463. package/src/resources/help-center/help-center.ts +7 -5
  464. package/src/resources/help-center/help-centers.ts +55 -55
  465. package/src/resources/help-center/index.ts +6 -5
  466. package/src/resources/help-center/redirect-rules.ts +174 -174
  467. package/src/resources/index.ts +11 -3
  468. package/src/resources/organization/admins.ts +33 -33
  469. package/src/resources/organization/brands.ts +66 -66
  470. package/src/resources/organization/index.ts +3 -3
  471. package/src/resources/organization/organization.ts +3 -3
  472. package/src/resources/organization/teams.ts +52 -52
  473. package/src/resources/support/conversation-tags.ts +59 -59
  474. package/src/resources/support/conversations/conversations.ts +748 -867
  475. package/src/resources/support/conversations/index.ts +11 -6
  476. package/src/resources/support/index.ts +14 -9
  477. package/src/resources/support/support.ts +21 -11
  478. package/src/resources/support/tickets/categories.ts +33 -33
  479. package/src/resources/support/tickets/custom-fields.ts +27 -27
  480. package/src/resources/support/tickets/index.ts +4 -4
  481. package/src/resources/support/tickets/statuses.ts +29 -29
  482. package/src/resources/support/tickets/tickets.ts +95 -95
  483. package/src/resources/surveys.ts +58 -58
  484. package/src/resources/users/companies/companies.ts +193 -223
  485. package/src/resources/users/companies/index.ts +2 -2
  486. package/src/resources/users/contacts/contacts.ts +275 -302
  487. package/src/resources/users/contacts/index.ts +3 -3
  488. package/src/resources/users/index.ts +5 -5
  489. package/src/resources/users/users.ts +5 -5
  490. package/src/resources/webhooks.ts +95 -95
  491. package/src/version.ts +1 -1
  492. package/uploads.d.mts +1 -0
  493. package/uploads.d.mts.map +1 -1
  494. package/uploads.d.ts +1 -0
  495. package/uploads.d.ts.map +1 -1
  496. package/uploads.mjs +1 -0
  497. package/uploads.mjs.map +1 -1
  498. package/version.d.mts +1 -1
  499. package/version.d.ts +1 -1
  500. package/version.js +1 -1
  501. package/version.mjs +1 -1
@@ -1,6 +1,8 @@
1
1
  import { APIResource } from "../../../core/resource.mjs";
2
2
  import * as ConversationsAPI from "./conversations.mjs";
3
+ import * as ConversationAttributesAPI from "../../conversation-attributes.mjs";
3
4
  import * as ConversationTagsAPI from "../conversation-tags.mjs";
5
+ import * as PostsAPI from "../../feedback/posts/posts.mjs";
4
6
  import * as ParticipantsAPI from "./participants.mjs";
5
7
  import { ParticipantAddParams, ParticipantRemoveParams, Participants } from "./participants.mjs";
6
8
  import { APIPromise } from "../../../core/api-promise.mjs";
@@ -11,6 +13,77 @@ import { RequestOptions } from "../../../internal/request-options.mjs";
11
13
  */
12
14
  export declare class Conversations extends APIResource {
13
15
  participants: ParticipantsAPI.Participants;
16
+ /**
17
+ * Returns a list of conversations in your organization using cursor-based
18
+ * pagination.
19
+ *
20
+ * ### Query Parameters
21
+ *
22
+ * - `limit` - Number of conversations to return (1-100, default 10)
23
+ * - `cursor` - Cursor from previous response for pagination
24
+ * - `tagIds` - Optional tag filter as a comma-separated list of tag IDs. Matches
25
+ * conversations that contain all of the provided tags.
26
+ *
27
+ * ### Response Format
28
+ *
29
+ * Returns a list object with:
30
+ *
31
+ * - `object` - Always "list"
32
+ * - `data` - Array of conversation objects
33
+ * - `nextCursor` - Cursor for the next page, or null if no more results
34
+ *
35
+ * ### Conversation Object
36
+ *
37
+ * Each conversation includes:
38
+ *
39
+ * - `id` - Unique conversation identifier (short ID)
40
+ * - `title` - Conversation title
41
+ * - `state` - Current state ("open", "closed", or "snoozed")
42
+ * - `priority` - Whether the conversation is marked as priority
43
+ * - `adminAssigneeId` - ID of assigned admin (if any)
44
+ * - `teamAssigneeId` - ID of assigned team (if any)
45
+ * - `tags` - Current tags applied anywhere in the conversation
46
+ * - `participants` - Array of participants
47
+ * - `source` - Information about the first message
48
+ * - `createdAt` - Creation timestamp
49
+ * - `updatedAt` - Last update timestamp
50
+ *
51
+ * ### Example
52
+ *
53
+ * ```json
54
+ * {
55
+ * "object": "list",
56
+ * "data": [
57
+ * {
58
+ * "object": "conversation",
59
+ * "id": "12345",
60
+ * "title": "Question about pricing",
61
+ * "state": "open",
62
+ * "priority": false,
63
+ * "adminAssigneeId": null,
64
+ * "participants": [
65
+ * { "type": "customer", "id": "676f0f6765bdaa7d7d760f88" }
66
+ * ],
67
+ * ...
68
+ * }
69
+ * ],
70
+ * "nextCursor": "eyJpZCI6IjEyMzQ1In0="
71
+ * }
72
+ * ```
73
+ *
74
+ * ### Version Availability
75
+ *
76
+ * This endpoint is only available in API version 2026-01-01.nova and newer.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * // Automatically fetches more pages as needed.
81
+ * for await (const conversation of client.support.conversations.list()) {
82
+ * // ...
83
+ * }
84
+ * ```
85
+ */
86
+ list(params?: ConversationListParams | null | undefined, options?: RequestOptions): PagePromise<ConversationsCursorPage, Conversation>;
14
87
  /**
15
88
  * Creates a new conversation. Supports both contact-initiated (customer/lead) and
16
89
  * admin-initiated (outreach) conversations.
@@ -250,6 +323,41 @@ export declare class Conversations extends APIResource {
250
323
  * ```
251
324
  */
252
325
  retrieve(id: string, params?: ConversationRetrieveParams | null | undefined, options?: RequestOptions): APIPromise<Conversation>;
326
+ /**
327
+ * Permanently deletes a conversation by its short ID.
328
+ *
329
+ * ### Path Parameters
330
+ *
331
+ * - `id` - The conversation short ID (numeric)
332
+ *
333
+ * ### Response
334
+ *
335
+ * Returns a deletion confirmation object:
336
+ *
337
+ * ```json
338
+ * {
339
+ * "id": "12345",
340
+ * "object": "conversation",
341
+ * "deleted": true
342
+ * }
343
+ * ```
344
+ *
345
+ * ### Caution
346
+ *
347
+ * This operation is **irreversible**. The conversation and all its messages will
348
+ * be permanently deleted.
349
+ *
350
+ * ### Version Availability
351
+ *
352
+ * This endpoint is only available in API version 2026-01-01.nova and newer.
353
+ *
354
+ * @example
355
+ * ```ts
356
+ * const conversation =
357
+ * await client.support.conversations.delete('12345');
358
+ * ```
359
+ */
360
+ delete(id: string, params?: ConversationDeleteParams | null | undefined, options?: RequestOptions): APIPromise<ConversationDeleteResponse>;
253
361
  /**
254
362
  * Updates a conversation's properties. Supports partial updates - only provided
255
363
  * fields will be updated.
@@ -270,7 +378,7 @@ export declare class Conversations extends APIResource {
270
378
  * | `adminAssigneeId` | string/null | Admin ID to assign, or null to unassign |
271
379
  * | `teamAssigneeId` | string/null | Team ID to assign, or null to unassign |
272
380
  * | `title` | string | Conversation title |
273
- * | `customAttributes` | object | Custom attributes to set on the conversation |
381
+ * | `customAttributes` | object | Custom attributes to set on the conversation, keyed by conversation custom attribute ID |
274
382
  * | `markAsRead` | object | Mark conversation as read for specific users |
275
383
  *
276
384
  * ### markAsRead Object
@@ -330,8 +438,8 @@ export declare class Conversations extends APIResource {
330
438
  * {
331
439
  * "title": "Billing Issue - Priority",
332
440
  * "customAttributes": {
333
- * "priority_level": "high",
334
- * "category": "billing"
441
+ * "507f1f77bcf86cd799439011": 10,
442
+ * "507f1f77bcf86cd799439012": true
335
443
  * }
336
444
  * }
337
445
  * ```
@@ -379,195 +487,97 @@ export declare class Conversations extends APIResource {
379
487
  */
380
488
  update(id: string, params: ConversationUpdateParams, options?: RequestOptions): APIPromise<Conversation>;
381
489
  /**
382
- * Returns a list of conversations in your organization using cursor-based
383
- * pagination.
490
+ * Adds a reply to an existing conversation. Supports both contact (customer/lead)
491
+ * and admin replies.
384
492
  *
385
- * ### Query Parameters
493
+ * ### Path Parameters
386
494
  *
387
- * - `limit` - Number of conversations to return (1-100, default 10)
388
- * - `cursor` - Cursor from previous response for pagination
389
- * - `tagIds` - Optional tag filter as a comma-separated list of tag IDs. Matches
390
- * conversations that contain all of the provided tags.
495
+ * - `id` - The conversation ID (short ID)
391
496
  *
392
- * ### Response Format
497
+ * ### Request Body
393
498
  *
394
- * Returns a list object with:
499
+ * The request body varies based on who is sending the reply:
395
500
  *
396
- * - `object` - Always "list"
397
- * - `data` - Array of conversation objects
398
- * - `nextCursor` - Cursor for the next page, or null if no more results
501
+ * #### Contact Reply (customer/lead)
399
502
  *
400
- * ### Conversation Object
503
+ * | Field | Type | Required | Description |
504
+ * | ------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
505
+ * | `type` | string | Yes | Must be "contact" |
506
+ * | `userId` | string | No\* | External user ID from your system |
507
+ * | `id` | string | No\* | Featurebase contact ID (24-character ObjectId) |
508
+ * | `bodyMarkdown` | string | Yes | The message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored. |
509
+ * | `messageType` | string | Yes | Must be "reply" |
510
+ * | `skipNotifications` | boolean | No | Skip sending notifications (default: false). Useful for bulk imports. |
401
511
  *
402
- * Each conversation includes:
512
+ * \*At least one of `userId` or `id` is required.
403
513
  *
404
- * - `id` - Unique conversation identifier (short ID)
405
- * - `title` - Conversation title
406
- * - `state` - Current state ("open", "closed", or "snoozed")
407
- * - `priority` - Whether the conversation is marked as priority
408
- * - `adminAssigneeId` - ID of assigned admin (if any)
409
- * - `teamAssigneeId` - ID of assigned team (if any)
410
- * - `tags` - Current tags applied anywhere in the conversation
411
- * - `participants` - Array of participants
412
- * - `source` - Information about the first message
413
- * - `createdAt` - Creation timestamp
414
- * - `updatedAt` - Last update timestamp
514
+ * #### Admin Reply
415
515
  *
416
- * ### Example
516
+ * | Field | Type | Required | Description |
517
+ * | ------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
518
+ * | `type` | string | Yes | Must be "admin" |
519
+ * | `id` | string | Yes | Featurebase admin ID (24-character ObjectId) |
520
+ * | `bodyMarkdown` | string | Yes | The message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored. |
521
+ * | `messageType` | string | Yes | "reply" for customer-visible reply, "note" for internal note |
522
+ * | `skipNotifications` | boolean | No | Skip sending notifications (default: false). Useful for bulk imports. |
417
523
  *
418
- * ```json
419
- * {
420
- * "object": "list",
421
- * "data": [
422
- * {
423
- * "object": "conversation",
424
- * "id": "12345",
425
- * "title": "Question about pricing",
426
- * "state": "open",
427
- * "priority": false,
428
- * "adminAssigneeId": null,
429
- * "participants": [
430
- * { "type": "customer", "id": "676f0f6765bdaa7d7d760f88" }
431
- * ],
432
- * ...
433
- * }
434
- * ],
435
- * "nextCursor": "eyJpZCI6IjEyMzQ1In0="
436
- * }
437
- * ```
524
+ * ### Response
438
525
  *
439
- * ### Version Availability
526
+ * Returns the created conversation part object with a **201 Created** status. The
527
+ * response includes both `bodyHtml` (with signed image URLs) and `bodyMarkdown`
528
+ * fields.
440
529
  *
441
- * This endpoint is only available in API version 2026-01-01.nova and newer.
530
+ * ### Example Contact Reply
442
531
  *
443
- * @example
444
- * ```ts
445
- * // Automatically fetches more pages as needed.
446
- * for await (const conversation of client.support.conversations.list()) {
447
- * // ...
532
+ * ```json
533
+ * {
534
+ * "type": "contact",
535
+ * "userId": "user_123",
536
+ * "bodyMarkdown": "Thank you for your help!",
537
+ * "messageType": "reply"
448
538
  * }
449
539
  * ```
450
- */
451
- list(params?: ConversationListParams | null | undefined, options?: RequestOptions): PagePromise<ConversationsCursorPage, Conversation>;
452
- /**
453
- * Permanently deletes a conversation by its short ID.
454
- *
455
- * ### Path Parameters
456
- *
457
- * - `id` - The conversation short ID (numeric)
458
540
  *
459
- * ### Response
460
- *
461
- * Returns a deletion confirmation object:
541
+ * ### Example Admin Reply
462
542
  *
463
543
  * ```json
464
544
  * {
465
- * "id": "12345",
466
- * "object": "conversation",
467
- * "deleted": true
545
+ * "type": "admin",
546
+ * "id": "507f1f77bcf86cd799439011",
547
+ * "bodyMarkdown": "I'm happy to help! Here's what you need to do...",
548
+ * "messageType": "reply"
468
549
  * }
469
550
  * ```
470
551
  *
471
- * ### Caution
472
- *
473
- * This operation is **irreversible**. The conversation and all its messages will
474
- * be permanently deleted.
475
- *
476
- * ### Version Availability
477
- *
478
- * This endpoint is only available in API version 2026-01-01.nova and newer.
479
- *
480
- * @example
481
- * ```ts
482
- * const conversation =
483
- * await client.support.conversations.delete('12345');
484
- * ```
485
- */
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
552
+ * ### Example Admin Note (Internal)
516
553
  *
517
554
  * ```json
518
555
  * {
519
- * "tagId": "67ec1234abcd5678ef901234",
520
- * "actingAdminId": "507f1f77bcf86cd799439011"
556
+ * "type": "admin",
557
+ * "id": "507f1f77bcf86cd799439011",
558
+ * "bodyMarkdown": "Customer seems frustrated, escalating to tier 2.",
559
+ * "messageType": "note"
521
560
  * }
522
561
  * ```
523
562
  *
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
563
+ * ### Example Response
567
564
  *
568
565
  * ```json
569
566
  * {
570
- * "actingAdminId": "507f1f77bcf86cd799439011"
567
+ * "object": "conversation_part",
568
+ * "id": "3",
569
+ * "partType": "user_msg",
570
+ * "bodyHtml": "<p>Thank you for your help!</p>",
571
+ * "bodyMarkdown": "Thank you for your help!",
572
+ * "author": {
573
+ * "type": "customer",
574
+ * "id": "676f0f6765bdaa7d7d760f88",
575
+ * "name": "John Doe",
576
+ * "email": "john@example.com"
577
+ * },
578
+ * "channel": "desktop",
579
+ * "createdAt": "2025-01-15T10:40:00.000Z",
580
+ * "updatedAt": "2025-01-15T10:40:00.000Z"
571
581
  * }
572
582
  * ```
573
583
  *
@@ -577,17 +587,15 @@ export declare class Conversations extends APIResource {
577
587
  *
578
588
  * @example
579
589
  * ```ts
580
- * const response =
581
- * await client.support.conversations.detachTag(
582
- * '67ec1234abcd5678ef901234',
583
- * {
584
- * id: '12345',
585
- * actingAdminId: '507f1f77bcf86cd799439011',
586
- * },
587
- * );
590
+ * const conversationPart =
591
+ * await client.support.conversations.reply('12345', {
592
+ * bodyMarkdown: 'Thank you for your help!',
593
+ * messageType: 'reply',
594
+ * type: 'contact',
595
+ * });
588
596
  * ```
589
597
  */
590
- detachTag(tagID: string, params: ConversationDetachTagParams, options?: RequestOptions): APIPromise<ConversationDetachTagResponse>;
598
+ reply(id: string, params: ConversationReplyParams, options?: RequestOptions): APIPromise<ConversationPart>;
591
599
  /**
592
600
  * Redacts a conversation part (message) from a conversation. Redaction permanently
593
601
  * removes the message content while preserving the conversation structure.
@@ -668,8 +676,10 @@ export declare class Conversations extends APIResource {
668
676
  */
669
677
  redact(params: ConversationRedactParams, options?: RequestOptions): APIPromise<Conversation>;
670
678
  /**
671
- * Adds a reply to an existing conversation. Supports both contact (customer/lead)
672
- * and admin replies.
679
+ * Attaches a workspace tag to a conversation.
680
+ *
681
+ * This endpoint requires both the tag ID to attach and the `actingAdminId` of the
682
+ * admin on whose behalf the mutation is recorded.
673
683
  *
674
684
  * ### Path Parameters
675
685
  *
@@ -677,88 +687,78 @@ export declare class Conversations extends APIResource {
677
687
  *
678
688
  * ### Request Body
679
689
  *
680
- * The request body varies based on who is sending the reply:
681
- *
682
- * #### Contact Reply (customer/lead)
683
- *
684
- * | Field | Type | Required | Description |
685
- * | ------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
686
- * | `type` | string | Yes | Must be "contact" |
687
- * | `userId` | string | No\* | External user ID from your system |
688
- * | `id` | string | No\* | Featurebase contact ID (24-character ObjectId) |
689
- * | `bodyMarkdown` | string | Yes | The message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored. |
690
- * | `messageType` | string | Yes | Must be "reply" |
691
- * | `skipNotifications` | boolean | No | Skip sending notifications (default: false). Useful for bulk imports. |
692
- *
693
- * \*At least one of `userId` or `id` is required.
690
+ * | Field | Type | Required | Description |
691
+ * | --------------- | ------ | -------- | ------------------------------------------------------------------------ |
692
+ * | `tagId` | string | Yes | The Featurebase tag ID to attach |
693
+ * | `actingAdminId` | string | Yes | The admin performing the mutation. Must be a member of the organization. |
694
694
  *
695
- * #### Admin Reply
695
+ * ### Behavior
696
696
  *
697
- * | Field | Type | Required | Description |
698
- * | ------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
699
- * | `type` | string | Yes | Must be "admin" |
700
- * | `id` | string | Yes | Featurebase admin ID (24-character ObjectId) |
701
- * | `bodyMarkdown` | string | Yes | The message content in markdown format. Images referenced by URL or as base64 data URIs will be automatically uploaded and stored. |
702
- * | `messageType` | string | Yes | "reply" for customer-visible reply, "note" for internal note |
703
- * | `skipNotifications` | boolean | No | Skip sending notifications (default: false). Useful for bulk imports. |
697
+ * Featurebase resolves the latest taggable reply/message in the conversation and
698
+ * records the tag attachment against that part so audit metadata remains
699
+ * deterministic.
704
700
  *
705
701
  * ### Response
706
702
  *
707
- * Returns the created conversation part object with a **201 Created** status. The
708
- * response includes both `bodyHtml` (with signed image URLs) and `bodyMarkdown`
709
- * fields.
703
+ * Returns the affected tag plus attachment metadata such as `targetPartId`,
704
+ * `appliedAt`, and `appliedBy`.
710
705
  *
711
- * ### Example Contact Reply
706
+ * ### Example Request
712
707
  *
713
708
  * ```json
714
709
  * {
715
- * "type": "contact",
716
- * "userId": "user_123",
717
- * "bodyMarkdown": "Thank you for your help!",
718
- * "messageType": "reply"
710
+ * "tagId": "67ec1234abcd5678ef901234",
711
+ * "actingAdminId": "507f1f77bcf86cd799439011"
719
712
  * }
720
713
  * ```
721
714
  *
722
- * ### Example Admin Reply
715
+ * ### Version Availability
723
716
  *
724
- * ```json
725
- * {
726
- * "type": "admin",
727
- * "id": "507f1f77bcf86cd799439011",
728
- * "bodyMarkdown": "I'm happy to help! Here's what you need to do...",
729
- * "messageType": "reply"
730
- * }
717
+ * This endpoint is only available in API version 2026-01-01.nova and newer.
718
+ *
719
+ * @example
720
+ * ```ts
721
+ * const attachedConversationTag =
722
+ * await client.support.conversations.attachTag('12345', {
723
+ * actingAdminId: '507f1f77bcf86cd799439011',
724
+ * tagId: '67ec1234abcd5678ef901234',
725
+ * });
731
726
  * ```
727
+ */
728
+ attachTag(id: string, params: ConversationAttachTagParams, options?: RequestOptions): APIPromise<AttachedConversationTag>;
729
+ /**
730
+ * Removes a workspace tag from a conversation.
732
731
  *
733
- * ### Example Admin Note (Internal)
732
+ * This endpoint requires the `actingAdminId` of the admin on whose behalf the
733
+ * mutation is recorded.
734
734
  *
735
- * ```json
736
- * {
737
- * "type": "admin",
738
- * "id": "507f1f77bcf86cd799439011",
739
- * "bodyMarkdown": "Customer seems frustrated, escalating to tier 2.",
740
- * "messageType": "note"
741
- * }
742
- * ```
735
+ * ### Path Parameters
736
+ *
737
+ * - `id` - The conversation ID (short ID)
738
+ * - `tagId` - The Featurebase tag ID to remove
739
+ *
740
+ * ### Request Body
741
+ *
742
+ * | Field | Type | Required | Description |
743
+ * | --------------- | ------ | -------- | ------------------------------------------------------------------------ |
744
+ * | `actingAdminId` | string | Yes | The admin performing the mutation. Must be a member of the organization. |
745
+ *
746
+ * ### Behavior
747
+ *
748
+ * Featurebase resolves the latest taggable reply/message in the conversation and
749
+ * records the tag removal against that part so audit metadata remains
750
+ * deterministic.
751
+ *
752
+ * ### Response
753
+ *
754
+ * Returns the affected tag payload with the most relevant attachment metadata
755
+ * available for that relationship.
743
756
  *
744
- * ### Example Response
757
+ * ### Example Request
745
758
  *
746
759
  * ```json
747
760
  * {
748
- * "object": "conversation_part",
749
- * "id": "3",
750
- * "partType": "user_msg",
751
- * "bodyHtml": "<p>Thank you for your help!</p>",
752
- * "bodyMarkdown": "Thank you for your help!",
753
- * "author": {
754
- * "type": "customer",
755
- * "id": "676f0f6765bdaa7d7d760f88",
756
- * "name": "John Doe",
757
- * "email": "john@example.com"
758
- * },
759
- * "channel": "desktop",
760
- * "createdAt": "2025-01-15T10:40:00.000Z",
761
- * "updatedAt": "2025-01-15T10:40:00.000Z"
761
+ * "actingAdminId": "507f1f77bcf86cd799439011"
762
762
  * }
763
763
  * ```
764
764
  *
@@ -768,15 +768,17 @@ export declare class Conversations extends APIResource {
768
768
  *
769
769
  * @example
770
770
  * ```ts
771
- * const conversationPart =
772
- * await client.support.conversations.reply('12345', {
773
- * bodyMarkdown: 'Thank you for your help!',
774
- * messageType: 'reply',
775
- * type: 'contact',
776
- * });
771
+ * const attachedConversationTag =
772
+ * await client.support.conversations.detachTag(
773
+ * '67ec1234abcd5678ef901234',
774
+ * {
775
+ * id: '12345',
776
+ * actingAdminId: '507f1f77bcf86cd799439011',
777
+ * },
778
+ * );
777
779
  * ```
778
780
  */
779
- reply(id: string, params: ConversationReplyParams, options?: RequestOptions): APIPromise<ConversationPart>;
781
+ detachTag(tagID: string, params: ConversationDetachTagParams, options?: RequestOptions): APIPromise<AttachedConversationTag>;
780
782
  /**
781
783
  * Search conversations with a structured filter AST and an optional full-text
782
784
  * query.
@@ -785,7 +787,7 @@ export declare class Conversations extends APIResource {
785
787
  *
786
788
  * - **Filter mode** (`query` set, `search` omitted): structured filtering against
787
789
  * indexed conversation fields. Sorted by `lastActivityAt` desc by default; set
788
- * `sort` to `last_activity_at:asc` for the inverse.
790
+ * `sort` to `lastActivityAt:asc` for the inverse.
789
791
  * - **Search mode** (`search` set, `query` optional): full-text search across
790
792
  * conversation messages, then narrowed by the same `query` AST so the same
791
793
  * filters apply. Results are ranked by relevance by default; set `sort` to order
@@ -804,7 +806,7 @@ export declare class Conversations extends APIResource {
804
806
  * "value": [
805
807
  * { "field": "state", "operator": "=", "value": "open" },
806
808
  * {
807
- * "field": "admin_assignee_id",
809
+ * "field": "adminAssigneeId",
808
810
  * "operator": "=",
809
811
  * "value": "507f1f77bcf86cd799439011"
810
812
  * }
@@ -817,18 +819,24 @@ export declare class Conversations extends APIResource {
817
819
  *
818
820
  * ### Supported fields and operators
819
821
  *
820
- * | Field | Type | Operators |
821
- * | ---------------------------- | --------------------------------------------------------------------------- | ---------------------- |
822
- * | `state` | enum (`open` / `closed` / `snoozed`) | `=`, `!=`, `IN`, `NIN` |
823
- * | `priority` | boolean | `=`, `!=` |
824
- * | `admin_assignee_id` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
825
- * | `team_assignee_id` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
826
- * | `brand_id` | id or null | `=`, `!=`, `IN`, `NIN` |
827
- * | `tag_ids` | id (matches any conversation containing this tag) | `=`, `!=`, `IN`, `NIN` |
828
- * | `user_id` / `participant_id` | id of a conversation participant | `=`, `!=`, `IN`, `NIN` |
829
- * | `company_id` | company id (matches conversations whose participants belong to the company) | `=`, `!=`, `IN`, `NIN` |
830
- * | `mentioned_admin_ids` | admin id | `=`, `!=`, `IN`, `NIN` |
831
- * | `created_at` | unix seconds | `=`, `>`, `<` |
822
+ * Field names are camelCase, matching the rest of the v2 public API. Snake_case
823
+ * names that this endpoint originally shipped with (`admin_assignee_id`,
824
+ * `team_assignee_id`, `brand_id`, `tag_ids`, `mentioned_admin_ids`, `user_id`,
825
+ * `participant_id`, `company_id`, `created_at`) are still accepted for back-compat
826
+ * but are deprecated please migrate to camelCase in new code.
827
+ *
828
+ * | Field | Type | Operators |
829
+ * | -------------------------- | --------------------------------------------------------------------------- | ---------------------- |
830
+ * | `state` | enum (`open` / `closed` / `snoozed`) | `=`, `!=`, `IN`, `NIN` |
831
+ * | `priority` | boolean | `=`, `!=` |
832
+ * | `adminAssigneeId` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
833
+ * | `teamAssigneeId` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
834
+ * | `brandId` | id or null | `=`, `!=`, `IN`, `NIN` |
835
+ * | `tagIds` | id (matches any conversation containing this tag) | `=`, `!=`, `IN`, `NIN` |
836
+ * | `userId` / `participantId` | id of a conversation participant | `=`, `!=`, `IN`, `NIN` |
837
+ * | `companyId` | company id (matches conversations whose participants belong to the company) | `=`, `!=`, `IN`, `NIN` |
838
+ * | `mentionedAdminIds` | admin id | `=`, `!=`, `IN`, `NIN` |
839
+ * | `createdAt` | unix seconds | `=`, `>`, `<` |
832
840
  *
833
841
  * For unbounded fields a query consisting only of `!=` or `NIN` clauses is
834
842
  * rejected with `query_too_broad` to prevent full-org scans. Combine the negation
@@ -879,6 +887,41 @@ export declare class Conversations extends APIResource {
879
887
  search(params: ConversationSearchParams, options?: RequestOptions): APIPromise<ConversationSearchResponse>;
880
888
  }
881
889
  export type ConversationsCursorPage = CursorPage<Conversation>;
890
+ export interface AttachedConversationTag {
891
+ /**
892
+ * Unique tag identifier
893
+ */
894
+ id: string;
895
+ /**
896
+ * Current tag name
897
+ */
898
+ name: string;
899
+ /**
900
+ * Object type identifier for a tag
901
+ */
902
+ type: 'tag';
903
+ /**
904
+ * ISO timestamp when the tag was applied
905
+ */
906
+ appliedAt?: string | null;
907
+ /**
908
+ * Actor that applied the tag
909
+ */
910
+ appliedBy?: ConversationTagMutationActor | null;
911
+ /**
912
+ * ISO timestamp when the tag was removed, if applicable
913
+ */
914
+ removedAt?: string | null;
915
+ /**
916
+ * Actor that applied the tag
917
+ */
918
+ removedBy?: ConversationTagMutationActor | null;
919
+ /**
920
+ * Reply/message ID used as the deterministic attachment target for this
921
+ * conversation tag mutation.
922
+ */
923
+ targetPartId?: string | null;
924
+ }
882
925
  export interface Conversation {
883
926
  /**
884
927
  * Unique conversation identifier
@@ -983,6 +1026,19 @@ export interface Conversation {
983
1026
  * exists.
984
1027
  */
985
1028
  csatSummary?: Conversation.CsatSummary;
1029
+ /**
1030
+ * Custom conversation attributes keyed by custom attribute ID. Only org-defined,
1031
+ * non-archived conversation attributes are returned; internal workflow metadata is
1032
+ * omitted.
1033
+ */
1034
+ customAttributes?: {
1035
+ [key: string]: unknown;
1036
+ };
1037
+ /**
1038
+ * Custom conversation attribute values expanded with definition metadata. Returned
1039
+ * only when `include=customAttributeDefinitions` is provided.
1040
+ */
1041
+ customAttributeValues?: Array<ConversationAttributeValue>;
986
1042
  /**
987
1043
  * Whether customer replies are disabled
988
1044
  */
@@ -996,7 +1052,7 @@ export interface Conversation {
996
1052
  * infer content access.
997
1053
  */
998
1054
  readReceipts?: Array<Conversation.ReadReceipt>;
999
- source?: Conversation.Source;
1055
+ source?: MessageSource;
1000
1056
  /**
1001
1057
  * Conversation title
1002
1058
  */
@@ -1024,12 +1080,14 @@ export declare namespace Conversation {
1024
1080
  * ISO timestamp when first-time submissions stop being accepted
1025
1081
  */
1026
1082
  lateSubmitWindowEndsAt?: string;
1083
+ slackDelivery?: ConversationsAPI.CsatSlackDelivery;
1027
1084
  }
1028
1085
  interface CsatHistory {
1029
1086
  /**
1030
- * Channel used for the CSAT request
1087
+ * Channel used for the CSAT request. `desktop` = web messenger, `email` =
1088
+ * follow-up email, `slack` = Block Kit prompt in the conversation thread.
1031
1089
  */
1032
- channel: 'desktop' | 'email';
1090
+ channel: 'desktop' | 'email' | 'slack';
1033
1091
  /**
1034
1092
  * Whether this row represents the currently effective CSAT request for the
1035
1093
  * conversation
@@ -1085,6 +1143,7 @@ export declare namespace Conversation {
1085
1143
  * Submitted score when this request was rated
1086
1144
  */
1087
1145
  score?: number;
1146
+ slackDelivery?: ConversationsAPI.CsatSlackDelivery;
1088
1147
  workflow?: ConversationsAPI.CsatWorkflowLink;
1089
1148
  }
1090
1149
  /**
@@ -1107,7 +1166,7 @@ export declare namespace Conversation {
1107
1166
  /**
1108
1167
  * Channel used for the latest CSAT request when known
1109
1168
  */
1110
- channel?: 'desktop' | 'email';
1169
+ channel?: 'desktop' | 'email' | 'slack';
1111
1170
  /**
1112
1171
  * ISO timestamp when the request expired
1113
1172
  */
@@ -1156,33 +1215,36 @@ export declare namespace Conversation {
1156
1215
  */
1157
1216
  userType: 'admin' | 'customer' | 'lead';
1158
1217
  }
1159
- interface Source {
1160
- /**
1161
- * Body of the initial message as HTML with signed image URLs
1162
- */
1163
- bodyHtml: string;
1164
- /**
1165
- * Body of the initial message as markdown
1166
- */
1167
- bodyMarkdown: string;
1168
- /**
1169
- * Channel through which the conversation was initiated
1170
- */
1171
- channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email';
1172
- author?: ConversationsAPI.ConversationParticipant;
1173
- /**
1174
- * How the conversation was initiated
1175
- */
1176
- deliveredAs?: 'customer_initiated' | 'admin_initiated';
1177
- /**
1178
- * Subject line for email conversations
1179
- */
1180
- subject?: string;
1181
- /**
1182
- * URL where the conversation was initiated
1183
- */
1184
- url?: string;
1185
- }
1218
+ }
1219
+ export interface ConversationAttributeValue {
1220
+ /**
1221
+ * Stable machine identifier used as the key in conversation.customAttributes.
1222
+ */
1223
+ id: string;
1224
+ /**
1225
+ * Storage-level data type used for validation and search.
1226
+ */
1227
+ dataType: 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object';
1228
+ /**
1229
+ * Conversation field subtype that controls the expected value shape.
1230
+ */
1231
+ fieldSubType: 'text' | 'number' | 'select' | 'multi-select' | 'checkbox' | 'date';
1232
+ /**
1233
+ * Stable internal identifier for the attribute definition.
1234
+ */
1235
+ identifier: string;
1236
+ /**
1237
+ * Human-readable attribute name shown in Featurebase.
1238
+ */
1239
+ name: string;
1240
+ /**
1241
+ * Allowed values for select and multi-select attributes.
1242
+ */
1243
+ options?: Array<ConversationAttributesAPI.ConversationAttributeOption>;
1244
+ /**
1245
+ * The conversation-specific custom attribute value.
1246
+ */
1247
+ value?: unknown;
1186
1248
  }
1187
1249
  /**
1188
1250
  * Message from a customer or lead
@@ -1208,7 +1270,7 @@ export declare namespace ConversationPart {
1208
1270
  /**
1209
1271
  * Channel through which the message was sent
1210
1272
  */
1211
- channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email';
1273
+ channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email' | 'slack';
1212
1274
  /**
1213
1275
  * ISO timestamp when the part was created
1214
1276
  */
@@ -1230,6 +1292,11 @@ export declare namespace ConversationPart {
1230
1292
  * Whether this message has been redacted
1231
1293
  */
1232
1294
  redacted?: boolean;
1295
+ /**
1296
+ * Safe Slack message identifiers. Only present for Slack-backed messages while the
1297
+ * organization has Slack integration enabled.
1298
+ */
1299
+ slack?: ConversationsAPI.SlackMessageDetails;
1233
1300
  /**
1234
1301
  * Reply-level tag applications and provenance for this conversation part
1235
1302
  */
@@ -1254,7 +1321,7 @@ export declare namespace ConversationPart {
1254
1321
  /**
1255
1322
  * Channel through which the message was sent
1256
1323
  */
1257
- channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email';
1324
+ channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email' | 'slack';
1258
1325
  /**
1259
1326
  * ISO timestamp when the part was created
1260
1327
  */
@@ -1276,6 +1343,11 @@ export declare namespace ConversationPart {
1276
1343
  * Whether this message has been redacted
1277
1344
  */
1278
1345
  redacted?: boolean;
1346
+ /**
1347
+ * Safe Slack message identifiers. Only present for Slack-backed messages while the
1348
+ * organization has Slack integration enabled.
1349
+ */
1350
+ slack?: ConversationsAPI.SlackMessageDetails;
1279
1351
  /**
1280
1352
  * Reply-level tag applications and provenance for this conversation part
1281
1353
  */
@@ -1405,11 +1477,16 @@ export declare namespace ConversationPart {
1405
1477
  /**
1406
1478
  * Channel through which the message was sent
1407
1479
  */
1408
- channel?: 'unknown' | 'desktop' | 'android' | 'ios' | 'email';
1480
+ channel?: 'unknown' | 'desktop' | 'android' | 'ios' | 'email' | 'slack';
1409
1481
  /**
1410
1482
  * Whether this message has been redacted
1411
1483
  */
1412
1484
  redacted?: boolean;
1485
+ /**
1486
+ * Safe Slack message identifiers. Only present for Slack-backed messages while the
1487
+ * organization has Slack integration enabled.
1488
+ */
1489
+ slack?: ConversationsAPI.SlackMessageDetails;
1413
1490
  /**
1414
1491
  * Reply-level tag applications and provenance for this conversation part
1415
1492
  */
@@ -1546,9 +1623,10 @@ export declare namespace ConversationPart {
1546
1623
  */
1547
1624
  interface Csat {
1548
1625
  /**
1549
- * Channel used for the CSAT request
1626
+ * Channel used for the CSAT request. `desktop` = web messenger, `email` =
1627
+ * follow-up email, `slack` = Block Kit prompt in the conversation thread.
1550
1628
  */
1551
- channel: 'desktop' | 'email';
1629
+ channel: 'desktop' | 'email' | 'slack';
1552
1630
  /**
1553
1631
  * ISO timestamp when the request was created
1554
1632
  */
@@ -1616,9 +1694,10 @@ export declare namespace ConversationPart {
1616
1694
  */
1617
1695
  interface Csat {
1618
1696
  /**
1619
- * Channel used for the CSAT request
1697
+ * Channel used for the CSAT request. `desktop` = web messenger, `email` =
1698
+ * follow-up email, `slack` = Block Kit prompt in the conversation thread.
1620
1699
  */
1621
- channel: 'desktop' | 'email';
1700
+ channel: 'desktop' | 'email' | 'slack';
1622
1701
  /**
1623
1702
  * ISO timestamp when the customer submitted the rating
1624
1703
  */
@@ -1854,7 +1933,7 @@ export declare namespace ConversationPart {
1854
1933
  /**
1855
1934
  * Actor that applied the tag
1856
1935
  */
1857
- actor?: TagUpdate.Actor;
1936
+ actor?: ConversationsAPI.ConversationTagMutationActor;
1858
1937
  /**
1859
1938
  * Tag name at the time of the event or the best available current display name
1860
1939
  */
@@ -1864,25 +1943,6 @@ export declare namespace ConversationPart {
1864
1943
  */
1865
1944
  targetPartId?: string | null;
1866
1945
  }
1867
- namespace TagUpdate {
1868
- /**
1869
- * Actor that applied the tag
1870
- */
1871
- interface Actor {
1872
- /**
1873
- * Actor that caused the tag mutation
1874
- */
1875
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
1876
- /**
1877
- * Actor identifier when available
1878
- */
1879
- id?: string | null;
1880
- /**
1881
- * Actor display name when available
1882
- */
1883
- name?: string | null;
1884
- }
1885
- }
1886
1946
  /**
1887
1947
  * Represents a workflow wait start, finish, or interruption in the conversation
1888
1948
  * thread
@@ -2062,7 +2122,7 @@ export interface ConversationTagApplication {
2062
2122
  /**
2063
2123
  * Actor that applied the tag
2064
2124
  */
2065
- appliedBy?: ConversationTagApplication.AppliedBy;
2125
+ appliedBy?: ConversationTagMutationActor;
2066
2126
  /**
2067
2127
  * ISO timestamp when the tag was removed from this reply, if it was removed
2068
2128
  */
@@ -2070,47 +2130,28 @@ export interface ConversationTagApplication {
2070
2130
  /**
2071
2131
  * Actor that applied the tag
2072
2132
  */
2073
- removedBy?: ConversationTagApplication.RemovedBy;
2133
+ removedBy?: ConversationTagMutationActor;
2074
2134
  /**
2075
2135
  * Resolved tag object when the tag still exists in the shared workspace catalog
2076
2136
  */
2077
2137
  tag?: ConversationTagsAPI.ConversationTag;
2078
2138
  }
2079
- export declare namespace ConversationTagApplication {
2139
+ /**
2140
+ * Actor that applied the tag
2141
+ */
2142
+ export interface ConversationTagMutationActor {
2080
2143
  /**
2081
- * Actor that applied the tag
2144
+ * Actor that caused the tag mutation
2082
2145
  */
2083
- interface AppliedBy {
2084
- /**
2085
- * Actor that caused the tag mutation
2086
- */
2087
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2088
- /**
2089
- * Actor identifier when available
2090
- */
2091
- id?: string | null;
2092
- /**
2093
- * Actor display name when available
2094
- */
2095
- name?: string | null;
2096
- }
2146
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2097
2147
  /**
2098
- * Actor that applied the tag
2148
+ * Actor identifier when available
2099
2149
  */
2100
- interface RemovedBy {
2101
- /**
2102
- * Actor that caused the tag mutation
2103
- */
2104
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2105
- /**
2106
- * Actor identifier when available
2107
- */
2108
- id?: string | null;
2109
- /**
2110
- * Actor display name when available
2111
- */
2112
- name?: string | null;
2113
- }
2150
+ id?: string | null;
2151
+ /**
2152
+ * Actor display name when available
2153
+ */
2154
+ name?: string | null;
2114
2155
  }
2115
2156
  export interface CsatEmailDelivery {
2116
2157
  /**
@@ -2144,6 +2185,37 @@ export interface CsatRatedAgent {
2144
2185
  */
2145
2186
  id?: string;
2146
2187
  }
2188
+ export interface CsatSlackDelivery {
2189
+ /**
2190
+ * Slack Block Kit prompt delivery status for the CSAT request when the channel is
2191
+ * Slack
2192
+ */
2193
+ status: 'pending' | 'posted' | 'failed';
2194
+ /**
2195
+ * Slack channel id the CSAT prompt was posted to
2196
+ */
2197
+ channelId?: string;
2198
+ /**
2199
+ * ISO timestamp when posting the CSAT prompt to Slack failed
2200
+ */
2201
+ failedAt?: string;
2202
+ /**
2203
+ * Operational failure reason for the Slack CSAT prompt delivery
2204
+ */
2205
+ failureReason?: string;
2206
+ /**
2207
+ * Slack message timestamp of the posted CSAT prompt
2208
+ */
2209
+ messageTs?: string;
2210
+ /**
2211
+ * ISO timestamp when the CSAT prompt was enqueued for Slack
2212
+ */
2213
+ postedAt?: string;
2214
+ /**
2215
+ * Slack workspace (team) the CSAT prompt was posted to
2216
+ */
2217
+ teamId?: string;
2218
+ }
2147
2219
  export interface CsatWorkflowLink {
2148
2220
  /**
2149
2221
  * Workflow action ID associated with the CSAT request
@@ -2175,161 +2247,135 @@ export interface EmailRecipients {
2175
2247
  */
2176
2248
  ids?: Array<string>;
2177
2249
  }
2178
- export interface ConversationDeleteResponse {
2179
- /**
2180
- * Unique identifier of the deleted conversation
2181
- */
2182
- id: string;
2183
- /**
2184
- * Indicates the resource was deleted
2185
- */
2186
- deleted: true;
2187
- /**
2188
- * Object type identifier
2189
- */
2190
- object: 'conversation';
2191
- }
2192
- export interface ConversationAttachTagResponse {
2193
- /**
2194
- * Unique tag identifier
2195
- */
2196
- id: string;
2250
+ export interface MessageSource {
2197
2251
  /**
2198
- * Current tag name
2252
+ * Body of the initial message as HTML with signed image URLs
2199
2253
  */
2200
- name: string;
2254
+ bodyHtml: string;
2201
2255
  /**
2202
- * Object type identifier for a tag
2256
+ * Body of the initial message as markdown
2203
2257
  */
2204
- type: 'tag';
2258
+ bodyMarkdown: string;
2205
2259
  /**
2206
- * ISO timestamp when the tag was applied
2260
+ * Channel through which the conversation was initiated
2207
2261
  */
2208
- appliedAt?: string | null;
2262
+ channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email' | 'slack';
2263
+ author?: ConversationParticipant;
2209
2264
  /**
2210
- * Actor that applied the tag
2265
+ * How the conversation was initiated
2211
2266
  */
2212
- appliedBy?: ConversationAttachTagResponse.AppliedBy | null;
2267
+ deliveredAs?: 'customer_initiated' | 'admin_initiated';
2213
2268
  /**
2214
- * ISO timestamp when the tag was removed, if applicable
2269
+ * Safe Slack thread identifiers. Only present for Slack-origin conversations while
2270
+ * the organization has Slack integration enabled.
2215
2271
  */
2216
- removedAt?: string | null;
2272
+ slack?: MessageSource.Slack;
2217
2273
  /**
2218
- * Actor that applied the tag
2274
+ * Subject line for email conversations
2219
2275
  */
2220
- removedBy?: ConversationAttachTagResponse.RemovedBy | null;
2276
+ subject?: string;
2221
2277
  /**
2222
- * Reply/message ID used as the deterministic attachment target for this
2223
- * conversation tag mutation.
2278
+ * URL where the conversation was initiated
2224
2279
  */
2225
- targetPartId?: string | null;
2280
+ url?: string;
2226
2281
  }
2227
- export declare namespace ConversationAttachTagResponse {
2228
- /**
2229
- * Actor that applied the tag
2230
- */
2231
- interface AppliedBy {
2232
- /**
2233
- * Actor that caused the tag mutation
2234
- */
2235
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2236
- /**
2237
- * Actor identifier when available
2238
- */
2239
- id?: string | null;
2240
- /**
2241
- * Actor display name when available
2242
- */
2243
- name?: string | null;
2244
- }
2282
+ export declare namespace MessageSource {
2245
2283
  /**
2246
- * Actor that applied the tag
2284
+ * Safe Slack thread identifiers. Only present for Slack-origin conversations while
2285
+ * the organization has Slack integration enabled.
2247
2286
  */
2248
- interface RemovedBy {
2287
+ interface Slack {
2249
2288
  /**
2250
- * Actor that caused the tag mutation
2289
+ * Slack channel ID for the thread
2251
2290
  */
2252
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2291
+ channelId: string;
2253
2292
  /**
2254
- * Actor identifier when available
2293
+ * Slack workspace/team ID for the thread
2255
2294
  */
2256
- id?: string | null;
2295
+ teamId: string;
2257
2296
  /**
2258
- * Actor display name when available
2297
+ * Slack root thread timestamp
2259
2298
  */
2260
- name?: string | null;
2299
+ threadTs: string;
2261
2300
  }
2262
2301
  }
2263
- export interface ConversationDetachTagResponse {
2302
+ /**
2303
+ * The customer or lead the conversation is with. Use this for the row identity;
2304
+ * use `matchingPartAuthor` if you specifically want the message author.
2305
+ */
2306
+ export interface SearchMatchingPartAuthor {
2264
2307
  /**
2265
- * Unique tag identifier
2308
+ * Author id
2266
2309
  */
2267
2310
  id: string;
2268
2311
  /**
2269
- * Current tag name
2312
+ * Author type
2270
2313
  */
2271
- name: string;
2314
+ type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
2272
2315
  /**
2273
- * Object type identifier for a tag
2316
+ * Companies the author belongs to (customers only)
2274
2317
  */
2275
- type: 'tag';
2318
+ companies?: Array<SearchMatchingPartAuthor.Company>;
2276
2319
  /**
2277
- * ISO timestamp when the tag was applied
2320
+ * Email when known
2278
2321
  */
2279
- appliedAt?: string | null;
2322
+ email?: string | null;
2280
2323
  /**
2281
- * Actor that applied the tag
2324
+ * Display name when known
2282
2325
  */
2283
- appliedBy?: ConversationDetachTagResponse.AppliedBy | null;
2326
+ name?: string | null;
2284
2327
  /**
2285
- * ISO timestamp when the tag was removed, if applicable
2328
+ * Profile picture URL when known
2286
2329
  */
2287
- removedAt?: string | null;
2330
+ profilePicture?: string | null;
2331
+ }
2332
+ export declare namespace SearchMatchingPartAuthor {
2333
+ interface Company {
2334
+ /**
2335
+ * Company id
2336
+ */
2337
+ id: string;
2338
+ /**
2339
+ * Company name
2340
+ */
2341
+ name?: string;
2342
+ }
2343
+ }
2344
+ /**
2345
+ * Safe Slack message identifiers. Only present for Slack-backed messages while the
2346
+ * organization has Slack integration enabled.
2347
+ */
2348
+ export interface SlackMessageDetails {
2288
2349
  /**
2289
- * Actor that applied the tag
2350
+ * Slack channel ID for the message
2290
2351
  */
2291
- removedBy?: ConversationDetachTagResponse.RemovedBy | null;
2352
+ channelId: string;
2292
2353
  /**
2293
- * Reply/message ID used as the deterministic attachment target for this
2294
- * conversation tag mutation.
2354
+ * Slack message timestamp
2295
2355
  */
2296
- targetPartId?: string | null;
2356
+ messageTs: string;
2357
+ /**
2358
+ * Slack workspace/team ID for the message
2359
+ */
2360
+ teamId: string;
2361
+ /**
2362
+ * Slack root thread timestamp when this message belongs to a thread
2363
+ */
2364
+ threadTs?: string;
2297
2365
  }
2298
- export declare namespace ConversationDetachTagResponse {
2366
+ export interface ConversationDeleteResponse {
2299
2367
  /**
2300
- * Actor that applied the tag
2368
+ * Unique identifier of the deleted conversation
2301
2369
  */
2302
- interface AppliedBy {
2303
- /**
2304
- * Actor that caused the tag mutation
2305
- */
2306
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2307
- /**
2308
- * Actor identifier when available
2309
- */
2310
- id?: string | null;
2311
- /**
2312
- * Actor display name when available
2313
- */
2314
- name?: string | null;
2315
- }
2370
+ id: string;
2316
2371
  /**
2317
- * Actor that applied the tag
2372
+ * Indicates the resource was deleted
2318
2373
  */
2319
- interface RemovedBy {
2320
- /**
2321
- * Actor that caused the tag mutation
2322
- */
2323
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
2324
- /**
2325
- * Actor identifier when available
2326
- */
2327
- id?: string | null;
2328
- /**
2329
- * Actor display name when available
2330
- */
2331
- name?: string | null;
2332
- }
2374
+ deleted: true;
2375
+ /**
2376
+ * Object type identifier
2377
+ */
2378
+ object: 'conversation';
2333
2379
  }
2334
2380
  export interface ConversationSearchResponse {
2335
2381
  /**
@@ -2418,7 +2464,20 @@ export declare namespace ConversationSearchResponse {
2418
2464
  * The customer or lead the conversation is with. Use this for the row identity;
2419
2465
  * use `matchingPartAuthor` if you specifically want the message author.
2420
2466
  */
2421
- conversationUser?: Data.ConversationUser | null;
2467
+ conversationUser?: ConversationsAPI.SearchMatchingPartAuthor | null;
2468
+ /**
2469
+ * Custom conversation attributes keyed by custom attribute ID. Only org-defined,
2470
+ * non-archived conversation attributes are returned; internal workflow metadata is
2471
+ * omitted.
2472
+ */
2473
+ customAttributes?: {
2474
+ [key: string]: unknown;
2475
+ };
2476
+ /**
2477
+ * Custom conversation attribute values expanded with definition metadata. Returned
2478
+ * only when `include=customAttributeDefinitions` is provided.
2479
+ */
2480
+ customAttributeValues?: Array<ConversationsAPI.ConversationAttributeValue>;
2422
2481
  /**
2423
2482
  * Plain-text / markdown preview of the matching conversation part body (search
2424
2483
  * mode only)
@@ -2433,13 +2492,13 @@ export declare namespace ConversationSearchResponse {
2433
2492
  * The customer or lead the conversation is with. Use this for the row identity;
2434
2493
  * use `matchingPartAuthor` if you specifically want the message author.
2435
2494
  */
2436
- matchingPartAuthor?: Data.MatchingPartAuthor | null;
2495
+ matchingPartAuthor?: ConversationsAPI.SearchMatchingPartAuthor | null;
2437
2496
  /**
2438
2497
  * Aggregate relevance score for the conversation (search mode only). Higher is
2439
2498
  * more relevant.
2440
2499
  */
2441
2500
  relevanceScore?: number | null;
2442
- source?: Data.Source;
2501
+ source?: ConversationsAPI.MessageSource;
2443
2502
  /**
2444
2503
  * Window of conversation messages around the matching part for lightweight context
2445
2504
  * previews. In search mode this is up to 15 messages before plus 15 from the
@@ -2455,42 +2514,6 @@ export declare namespace ConversationSearchResponse {
2455
2514
  title?: string;
2456
2515
  }
2457
2516
  namespace Data {
2458
- /**
2459
- * The customer or lead the conversation is with. Use this for the row identity;
2460
- * use `matchingPartAuthor` if you specifically want the message author.
2461
- */
2462
- interface ConversationUser {
2463
- /**
2464
- * Author id
2465
- */
2466
- id: string;
2467
- /**
2468
- * Author type
2469
- */
2470
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
2471
- /**
2472
- * Companies the author belongs to (customers only)
2473
- */
2474
- companies?: Array<ConversationUser.Company>;
2475
- /**
2476
- * Email when known
2477
- */
2478
- email?: string | null;
2479
- /**
2480
- * Display name when known
2481
- */
2482
- name?: string | null;
2483
- /**
2484
- * Profile picture URL when known
2485
- */
2486
- profilePicture?: string | null;
2487
- }
2488
- namespace ConversationUser {
2489
- interface Company {
2490
- id: string;
2491
- name?: string;
2492
- }
2493
- }
2494
2517
  /**
2495
2518
  * Reference to the conversation part that best matched the search query (search
2496
2519
  * mode only)
@@ -2509,69 +2532,6 @@ export declare namespace ConversationSearchResponse {
2509
2532
  */
2510
2533
  partType?: string;
2511
2534
  }
2512
- /**
2513
- * The customer or lead the conversation is with. Use this for the row identity;
2514
- * use `matchingPartAuthor` if you specifically want the message author.
2515
- */
2516
- interface MatchingPartAuthor {
2517
- /**
2518
- * Author id
2519
- */
2520
- id: string;
2521
- /**
2522
- * Author type
2523
- */
2524
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
2525
- /**
2526
- * Companies the author belongs to (customers only)
2527
- */
2528
- companies?: Array<MatchingPartAuthor.Company>;
2529
- /**
2530
- * Email when known
2531
- */
2532
- email?: string | null;
2533
- /**
2534
- * Display name when known
2535
- */
2536
- name?: string | null;
2537
- /**
2538
- * Profile picture URL when known
2539
- */
2540
- profilePicture?: string | null;
2541
- }
2542
- namespace MatchingPartAuthor {
2543
- interface Company {
2544
- id: string;
2545
- name?: string;
2546
- }
2547
- }
2548
- interface Source {
2549
- /**
2550
- * Body of the initial message as HTML with signed image URLs
2551
- */
2552
- bodyHtml: string;
2553
- /**
2554
- * Body of the initial message as markdown
2555
- */
2556
- bodyMarkdown: string;
2557
- /**
2558
- * Channel through which the conversation was initiated
2559
- */
2560
- channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email';
2561
- author?: ConversationsAPI.ConversationParticipant;
2562
- /**
2563
- * How the conversation was initiated
2564
- */
2565
- deliveredAs?: 'customer_initiated' | 'admin_initiated';
2566
- /**
2567
- * Subject line for email conversations
2568
- */
2569
- subject?: string;
2570
- /**
2571
- * URL where the conversation was initiated
2572
- */
2573
- url?: string;
2574
- }
2575
2535
  interface SurroundingConversationPart {
2576
2536
  /**
2577
2537
  * Conversation part id
@@ -2589,7 +2549,7 @@ export declare namespace ConversationSearchResponse {
2589
2549
  * The customer or lead the conversation is with. Use this for the row identity;
2590
2550
  * use `matchingPartAuthor` if you specifically want the message author.
2591
2551
  */
2592
- author?: SurroundingConversationPart.Author | null;
2552
+ author?: ConversationsAPI.SearchMatchingPartAuthor | null;
2593
2553
  /**
2594
2554
  * ISO timestamp when the part was created
2595
2555
  */
@@ -2599,46 +2559,26 @@ export declare namespace ConversationSearchResponse {
2599
2559
  */
2600
2560
  partType?: string;
2601
2561
  }
2602
- namespace SurroundingConversationPart {
2603
- /**
2604
- * The customer or lead the conversation is with. Use this for the row identity;
2605
- * use `matchingPartAuthor` if you specifically want the message author.
2606
- */
2607
- interface Author {
2608
- /**
2609
- * Author id
2610
- */
2611
- id: string;
2612
- /**
2613
- * Author type
2614
- */
2615
- type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
2616
- /**
2617
- * Companies the author belongs to (customers only)
2618
- */
2619
- companies?: Array<Author.Company>;
2620
- /**
2621
- * Email when known
2622
- */
2623
- email?: string | null;
2624
- /**
2625
- * Display name when known
2626
- */
2627
- name?: string | null;
2628
- /**
2629
- * Profile picture URL when known
2630
- */
2631
- profilePicture?: string | null;
2632
- }
2633
- namespace Author {
2634
- interface Company {
2635
- id: string;
2636
- name?: string;
2637
- }
2638
- }
2639
- }
2640
2562
  }
2641
2563
  }
2564
+ export interface ConversationListParams extends CursorPageParams {
2565
+ /**
2566
+ * Query param: Comma-separated optional expansions. Use
2567
+ * `customAttributeDefinitions` to return `customAttributeValues` with names and
2568
+ * types alongside ID-keyed `customAttributes`.
2569
+ */
2570
+ include?: string | Array<string>;
2571
+ /**
2572
+ * Query param: Filter conversations by one or more tag IDs using a comma-separated
2573
+ * list. Conversations must contain all provided tags.
2574
+ */
2575
+ tagIds?: string | Array<string>;
2576
+ /**
2577
+ * Header param: API version for this request. Defaults to your organization's
2578
+ * configured API version if not specified.
2579
+ */
2580
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2581
+ }
2642
2582
  export interface ConversationCreateParams {
2643
2583
  /**
2644
2584
  * Body param: The content of the initial message in markdown format. Images
@@ -2725,6 +2665,19 @@ export declare namespace ConversationCreateParams {
2725
2665
  }
2726
2666
  }
2727
2667
  export interface ConversationRetrieveParams {
2668
+ /**
2669
+ * Query param: Comma-separated optional expansions. Use
2670
+ * `customAttributeDefinitions` to return `customAttributeValues` with names and
2671
+ * types alongside ID-keyed `customAttributes`.
2672
+ */
2673
+ include?: string | Array<string>;
2674
+ /**
2675
+ * Header param: API version for this request. Defaults to your organization's
2676
+ * configured API version if not specified.
2677
+ */
2678
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2679
+ }
2680
+ export interface ConversationDeleteParams {
2728
2681
  /**
2729
2682
  * API version for this request. Defaults to your organization's configured API
2730
2683
  * version if not specified.
@@ -2743,8 +2696,9 @@ export interface ConversationUpdateParams {
2743
2696
  */
2744
2697
  adminAssigneeId?: string | null;
2745
2698
  /**
2746
- * Body param: Custom attributes to set on the conversation. Uses the same
2747
- * validation as v1 API.
2699
+ * Body param: Custom attributes to set on the conversation, keyed by conversation
2700
+ * custom attribute ID. Use the custom attribute definitions for your organization
2701
+ * to map IDs to display names.
2748
2702
  */
2749
2703
  customAttributes?: {
2750
2704
  [key: string]: unknown;
@@ -2803,82 +2757,6 @@ export declare namespace ConversationUpdateParams {
2803
2757
  contactIds?: Array<string>;
2804
2758
  }
2805
2759
  }
2806
- export interface ConversationListParams extends CursorPageParams {
2807
- /**
2808
- * Query param: Filter conversations by one or more tag IDs using a comma-separated
2809
- * list. Conversations must contain all provided tags.
2810
- */
2811
- tagIds?: string | Array<string>;
2812
- /**
2813
- * Header param: API version for this request. Defaults to your organization's
2814
- * configured API version if not specified.
2815
- */
2816
- 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2817
- }
2818
- export interface ConversationDeleteParams {
2819
- /**
2820
- * API version for this request. Defaults to your organization's configured API
2821
- * version if not specified.
2822
- */
2823
- 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2824
- }
2825
- export interface ConversationAttachTagParams {
2826
- /**
2827
- * Body param: Required admin ID performing this tag attachment. Must be a member
2828
- * of the organization so the mutation can be attributed to a real admin actor.
2829
- */
2830
- actingAdminId: string;
2831
- /**
2832
- * Body param: The Featurebase tag ID to attach to the conversation.
2833
- */
2834
- tagId: string;
2835
- /**
2836
- * Header param: API version for this request. Defaults to your organization's
2837
- * configured API version if not specified.
2838
- */
2839
- 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2840
- }
2841
- export interface ConversationDetachTagParams {
2842
- /**
2843
- * Path param: Conversation ID (short ID)
2844
- */
2845
- id: string;
2846
- /**
2847
- * Body param: Required admin ID performing this tag removal. Must be a member of
2848
- * the organization so the mutation can be attributed to a real admin actor.
2849
- */
2850
- actingAdminId: string;
2851
- /**
2852
- * Header param: API version for this request. Defaults to your organization's
2853
- * configured API version if not specified.
2854
- */
2855
- 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2856
- }
2857
- export interface ConversationRedactParams {
2858
- /**
2859
- * Body param: The conversation short ID that contains the part to redact
2860
- */
2861
- conversationId: string;
2862
- /**
2863
- * Body param: The conversation part short ID to redact
2864
- */
2865
- conversationPartId: string;
2866
- /**
2867
- * Body param: The type of item to redact. Currently only "conversation_part" is
2868
- * supported.
2869
- */
2870
- type: 'conversation_part';
2871
- /**
2872
- * Body param: The admin ID performing this action. If not provided, changes are
2873
- * attributed to the system bot user.
2874
- */
2875
- actingAdminId?: string;
2876
- /**
2877
- * Header param: API version for this request. Defaults to your organization's
2878
- * configured API version if not specified.
2879
- */
2880
- 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2881
- }
2882
2760
  export type ConversationReplyParams = ConversationReplyParams.ContactReplyBody | ConversationReplyParams.AdminReplyBody;
2883
2761
  export declare namespace ConversationReplyParams {
2884
2762
  interface ContactReplyBody {
@@ -2947,22 +2825,87 @@ export declare namespace ConversationReplyParams {
2947
2825
  'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2948
2826
  }
2949
2827
  }
2828
+ export interface ConversationRedactParams {
2829
+ /**
2830
+ * Body param: The conversation short ID that contains the part to redact
2831
+ */
2832
+ conversationId: string;
2833
+ /**
2834
+ * Body param: The conversation part short ID to redact
2835
+ */
2836
+ conversationPartId: string;
2837
+ /**
2838
+ * Body param: The type of item to redact. Currently only "conversation_part" is
2839
+ * supported.
2840
+ */
2841
+ type: 'conversation_part';
2842
+ /**
2843
+ * Body param: The admin ID performing this action. If not provided, changes are
2844
+ * attributed to the system bot user.
2845
+ */
2846
+ actingAdminId?: string;
2847
+ /**
2848
+ * Header param: API version for this request. Defaults to your organization's
2849
+ * configured API version if not specified.
2850
+ */
2851
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2852
+ }
2853
+ export interface ConversationAttachTagParams {
2854
+ /**
2855
+ * Body param: Required admin ID performing this tag attachment. Must be a member
2856
+ * of the organization so the mutation can be attributed to a real admin actor.
2857
+ */
2858
+ actingAdminId: string;
2859
+ /**
2860
+ * Body param: The Featurebase tag ID to attach to the conversation.
2861
+ */
2862
+ tagId: string;
2863
+ /**
2864
+ * Header param: API version for this request. Defaults to your organization's
2865
+ * configured API version if not specified.
2866
+ */
2867
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2868
+ }
2869
+ export interface ConversationDetachTagParams {
2870
+ /**
2871
+ * Path param: Conversation ID (short ID)
2872
+ */
2873
+ id: string;
2874
+ /**
2875
+ * Body param: Required admin ID performing this tag removal. Must be a member of
2876
+ * the organization so the mutation can be attributed to a real admin actor.
2877
+ */
2878
+ actingAdminId: string;
2879
+ /**
2880
+ * Header param: API version for this request. Defaults to your organization's
2881
+ * configured API version if not specified.
2882
+ */
2883
+ 'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2884
+ }
2950
2885
  export interface ConversationSearchParams {
2951
2886
  /**
2952
2887
  * Body param: An opaque cursor for pagination. Use the nextCursor value from a
2953
2888
  * previous response to fetch the next page of results.
2954
2889
  */
2955
2890
  cursor?: string;
2891
+ /**
2892
+ * Body param: Optional expansions. Use `customAttributeDefinitions` to return
2893
+ * `customAttributeValues` with names and types alongside ID-keyed
2894
+ * `customAttributes`.
2895
+ */
2896
+ include?: Array<'customAttributeDefinitions'>;
2956
2897
  /**
2957
2898
  * Body param: A limit on the number of objects to be returned, between 1 and 100.
2958
2899
  */
2959
2900
  limit?: number;
2960
2901
  /**
2961
2902
  * Body param: Structured filter AST. Either a single filter clause or one
2962
- * top-level AND group. Use this for filtering by `state`, `tag_ids`,
2963
- * `admin_assignee_id`, etc.
2903
+ * top-level AND group. Use this for filtering by `state`, `tagIds`,
2904
+ * `adminAssigneeId`, `customAttributes.<attributeId>`, etc. (Legacy snake_case
2905
+ * names are accepted for back-compat — see the OpenAPI route description for the
2906
+ * full alias map.)
2964
2907
  */
2965
- query?: ConversationSearchParams.SearchFilter | ConversationSearchParams.SearchFilterGroup;
2908
+ query?: PostsAPI.SearchFilter | PostsAPI.SearchFilterGroup;
2966
2909
  /**
2967
2910
  * Body param: Plain-text full-text search across conversation messages.
2968
2911
  * Server-managed - no operators, no field selection.
@@ -2970,61 +2913,20 @@ export interface ConversationSearchParams {
2970
2913
  search?: string;
2971
2914
  /**
2972
2915
  * Body param: Result ordering. When omitted, filter mode defaults to
2973
- * last_activity_at:desc and search mode defaults to relevance ranking. When set,
2916
+ * `lastActivityAt:desc` and search mode defaults to relevance ranking. When set,
2974
2917
  * both modes order by lastActivityAt in the requested direction (so you can ask a
2975
- * search query to return its hits in chronological order).
2918
+ * search query to return its hits in chronological order). Snake_case
2919
+ * `last_activity_at:*` is accepted for back-compat — prefer camelCase in new code.
2976
2920
  */
2977
- sort?: 'last_activity_at:desc' | 'last_activity_at:asc';
2921
+ sort?: 'lastActivityAt:desc' | 'lastActivityAt:asc' | 'last_activity_at:desc' | 'last_activity_at:asc';
2978
2922
  /**
2979
2923
  * Header param: API version for this request. Defaults to your organization's
2980
2924
  * configured API version if not specified.
2981
2925
  */
2982
2926
  'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
2983
2927
  }
2984
- export declare namespace ConversationSearchParams {
2985
- interface SearchFilter {
2986
- /**
2987
- * Field name to filter on (e.g. `state`, `tag_ids`, `created_at`)
2988
- */
2989
- field: string;
2990
- /**
2991
- * Comparison operator
2992
- */
2993
- operator: '=' | '!=' | 'IN' | 'NIN' | '>' | '<' | '>=' | '<=' | '~' | '!~' | '^' | '$';
2994
- /**
2995
- * Value to compare against (primitive or array of primitives)
2996
- */
2997
- value: string | number | boolean | Array<string | number> | null;
2998
- }
2999
- interface SearchFilterGroup {
3000
- /**
3001
- * Group operator: AND (all match) or OR (any match)
3002
- */
3003
- operator: 'AND' | 'OR';
3004
- /**
3005
- * Array of filter clauses (1-15 entries)
3006
- */
3007
- value: Array<SearchFilterGroup.Value>;
3008
- }
3009
- namespace SearchFilterGroup {
3010
- interface Value {
3011
- /**
3012
- * Field name to filter on (e.g. `state`, `tag_ids`, `created_at`)
3013
- */
3014
- field: string;
3015
- /**
3016
- * Comparison operator
3017
- */
3018
- operator: '=' | '!=' | 'IN' | 'NIN' | '>' | '<' | '>=' | '<=' | '~' | '!~' | '^' | '$';
3019
- /**
3020
- * Value to compare against (primitive or array of primitives)
3021
- */
3022
- value: string | number | boolean | Array<string | number> | null;
3023
- }
3024
- }
3025
- }
3026
2928
  export declare namespace Conversations {
3027
- 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, };
2929
+ export { type AttachedConversationTag as AttachedConversationTag, type Conversation as Conversation, type ConversationAttributeValue as ConversationAttributeValue, type ConversationPart as ConversationPart, type ConversationPartAuthor as ConversationPartAuthor, type ConversationParticipant as ConversationParticipant, type ConversationTagApplication as ConversationTagApplication, type ConversationTagMutationActor as ConversationTagMutationActor, type CsatEmailDelivery as CsatEmailDelivery, type CsatRatedAgent as CsatRatedAgent, type CsatSlackDelivery as CsatSlackDelivery, type CsatWorkflowLink as CsatWorkflowLink, type EmailRecipients as EmailRecipients, type MessageSource as MessageSource, type SearchMatchingPartAuthor as SearchMatchingPartAuthor, type SlackMessageDetails as SlackMessageDetails, type ConversationDeleteResponse as ConversationDeleteResponse, type ConversationSearchResponse as ConversationSearchResponse, type ConversationsCursorPage as ConversationsCursorPage, type ConversationListParams as ConversationListParams, type ConversationCreateParams as ConversationCreateParams, type ConversationRetrieveParams as ConversationRetrieveParams, type ConversationDeleteParams as ConversationDeleteParams, type ConversationUpdateParams as ConversationUpdateParams, type ConversationReplyParams as ConversationReplyParams, type ConversationRedactParams as ConversationRedactParams, type ConversationAttachTagParams as ConversationAttachTagParams, type ConversationDetachTagParams as ConversationDetachTagParams, type ConversationSearchParams as ConversationSearchParams, };
3028
2930
  export { Participants as Participants, type ParticipantAddParams as ParticipantAddParams, type ParticipantRemoveParams as ParticipantRemoveParams, };
3029
2931
  }
3030
2932
  //# sourceMappingURL=conversations.d.mts.map