@productcraft/social 0.4.0 → 0.6.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 (3) hide show
  1. package/dist/index.d.cts +3515 -234
  2. package/dist/index.d.ts +3515 -234
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -94,6 +94,43 @@ interface paths {
94
94
  patch: operations["ActorController_update"];
95
95
  trace?: never;
96
96
  };
97
+ "/v1/communities/{communityId}/actors/{actorId}/archived": {
98
+ parameters: {
99
+ query?: never;
100
+ header?: never;
101
+ path?: never;
102
+ cookie?: never;
103
+ };
104
+ /**
105
+ * List the actor's archived posts (status='archived'), newest-first. Cursor-paginated.
106
+ * @description Archived posts keep their engagement (reaction / comment counts intact) but fall out of every public surface, and `getById` treats them as author-only. Restore one with PATCH `{ status: 'published' }`. Same end-user authorization rules as drafts: the PAK lane trusts the customer-backend to gate the caller.
107
+ */
108
+ get: operations["DraftController_listArchived"];
109
+ put?: never;
110
+ post?: never;
111
+ delete?: never;
112
+ options?: never;
113
+ head?: never;
114
+ patch?: never;
115
+ trace?: never;
116
+ };
117
+ "/v1/communities/{communityId}/actors/{actorId}/assets": {
118
+ parameters: {
119
+ query?: never;
120
+ header?: never;
121
+ path?: never;
122
+ cookie?: never;
123
+ };
124
+ /** List an actor's uploaded assets — the "your uploads" surface + GDPR export walk. 50/page (max 200), cursor-paginated newest-first. */
125
+ get: operations["AssetController_listByActor"];
126
+ put?: never;
127
+ post?: never;
128
+ delete?: never;
129
+ options?: never;
130
+ head?: never;
131
+ patch?: never;
132
+ trace?: never;
133
+ };
97
134
  "/v1/communities/{communityId}/actors/{actorId}/blocks": {
98
135
  parameters: {
99
136
  query?: never;
@@ -168,6 +205,23 @@ interface paths {
168
205
  patch?: never;
169
206
  trace?: never;
170
207
  };
208
+ "/v1/communities/{communityId}/actors/{actorId}/dismissed-suggestions": {
209
+ parameters: {
210
+ query?: never;
211
+ header?: never;
212
+ path?: never;
213
+ cookie?: never;
214
+ };
215
+ /** List actors this actor has dismissed from suggestions. Pass `?expand=dst_actor` to nest each actor's full row. */
216
+ get: operations["EdgeController_listDismissedSuggestions"];
217
+ put?: never;
218
+ post?: never;
219
+ delete?: never;
220
+ options?: never;
221
+ head?: never;
222
+ patch?: never;
223
+ trace?: never;
224
+ };
171
225
  "/v1/communities/{communityId}/actors/{actorId}/drafts": {
172
226
  parameters: {
173
227
  query?: never;
@@ -205,6 +259,23 @@ interface paths {
205
259
  patch?: never;
206
260
  trace?: never;
207
261
  };
262
+ "/v1/communities/{communityId}/actors/{actorId}/follow-requests": {
263
+ parameters: {
264
+ query?: never;
265
+ header?: never;
266
+ path?: never;
267
+ cookie?: never;
268
+ };
269
+ /** List incoming follow requests for a (private) actor, newest-first (task 014). */
270
+ get: operations["EdgeController_listIncomingRequests"];
271
+ put?: never;
272
+ post?: never;
273
+ delete?: never;
274
+ options?: never;
275
+ head?: never;
276
+ patch?: never;
277
+ trace?: never;
278
+ };
208
279
  "/v1/communities/{communityId}/actors/{actorId}/followers": {
209
280
  parameters: {
210
281
  query?: never;
@@ -274,6 +345,23 @@ interface paths {
274
345
  patch?: never;
275
346
  trace?: never;
276
347
  };
348
+ "/v1/communities/{communityId}/actors/{actorId}/hides": {
349
+ parameters: {
350
+ query?: never;
351
+ header?: never;
352
+ path?: never;
353
+ cookie?: never;
354
+ };
355
+ /** List the posts an actor has hidden, newest-first. */
356
+ get: operations["EdgeController_listHides"];
357
+ put?: never;
358
+ post?: never;
359
+ delete?: never;
360
+ options?: never;
361
+ head?: never;
362
+ patch?: never;
363
+ trace?: never;
364
+ };
277
365
  "/v1/communities/{communityId}/actors/{actorId}/highlights": {
278
366
  parameters: {
279
367
  query?: never;
@@ -294,6 +382,23 @@ interface paths {
294
382
  patch?: never;
295
383
  trace?: never;
296
384
  };
385
+ "/v1/communities/{communityId}/actors/{actorId}/insights": {
386
+ parameters: {
387
+ query?: never;
388
+ header?: never;
389
+ path?: never;
390
+ cookie?: never;
391
+ };
392
+ /** An actor's follower time series: live follower_count plus a nightly-snapshot daily series over ?from/?to (default trailing 30 days). */
393
+ get: operations["InsightsController_actorInsights"];
394
+ put?: never;
395
+ post?: never;
396
+ delete?: never;
397
+ options?: never;
398
+ head?: never;
399
+ patch?: never;
400
+ trace?: never;
401
+ };
297
402
  "/v1/communities/{communityId}/actors/{actorId}/mentions": {
298
403
  parameters: {
299
404
  query?: never;
@@ -583,6 +688,26 @@ interface paths {
583
688
  patch?: never;
584
689
  trace?: never;
585
690
  };
691
+ "/v1/communities/{communityId}/actors/{actorId}/tagged": {
692
+ parameters: {
693
+ query?: never;
694
+ header?: never;
695
+ path?: never;
696
+ cookie?: never;
697
+ };
698
+ /**
699
+ * List posts an actor is tagged in.
700
+ * @description Approved tags only, on published + unexpired posts, newest-tag-first. Visibility- and block-aware: pass the viewer via `requester_id` to surface followers / close-friends posts they may read; without it only public posts appear. Pages may be short (post-visibility filtering) but never skip or duplicate.
701
+ */
702
+ get: operations["PostTagController_listTagged"];
703
+ put?: never;
704
+ post?: never;
705
+ delete?: never;
706
+ options?: never;
707
+ head?: never;
708
+ patch?: never;
709
+ trace?: never;
710
+ };
586
711
  "/v1/communities/{communityId}/actors/{srcActorId}/relationships": {
587
712
  parameters: {
588
713
  query?: never;
@@ -603,6 +728,58 @@ interface paths {
603
728
  patch?: never;
604
729
  trace?: never;
605
730
  };
731
+ "/v1/communities/{communityId}/assets": {
732
+ parameters: {
733
+ query?: never;
734
+ header?: never;
735
+ path?: never;
736
+ cookie?: never;
737
+ };
738
+ get?: never;
739
+ put?: never;
740
+ /** Upload media. Images (multipart): processed synchronously, returns ready. Videos (JSON, kind:'video' + declared content_type/byte_size): returns an `uploading` asset with a presigned PUT — upload the bytes, then POST /assets/:id/complete. */
741
+ post: operations["AssetController_upload"];
742
+ delete?: never;
743
+ options?: never;
744
+ head?: never;
745
+ patch?: never;
746
+ trace?: never;
747
+ };
748
+ "/v1/communities/{communityId}/assets/{assetId}": {
749
+ parameters: {
750
+ query?: never;
751
+ header?: never;
752
+ path?: never;
753
+ cookie?: never;
754
+ };
755
+ /** Fetch one asset with freshly-minted presigned rendition URLs. */
756
+ get: operations["AssetController_get"];
757
+ put?: never;
758
+ post?: never;
759
+ /** Delete an asset — removes every stored rendition object, then the row. */
760
+ delete: operations["AssetController_delete"];
761
+ options?: never;
762
+ head?: never;
763
+ patch?: never;
764
+ trace?: never;
765
+ };
766
+ "/v1/communities/{communityId}/assets/{assetId}/complete": {
767
+ parameters: {
768
+ query?: never;
769
+ header?: never;
770
+ path?: never;
771
+ cookie?: never;
772
+ };
773
+ get?: never;
774
+ put?: never;
775
+ /** Finalize a presigned-PUT video upload. Verifies the stored object (existence, size, container magic bytes) and enqueues the transcode. Replaying on a finalized asset returns its current status without re-enqueueing. */
776
+ post: operations["AssetController_complete"];
777
+ delete?: never;
778
+ options?: never;
779
+ head?: never;
780
+ patch?: never;
781
+ trace?: never;
782
+ };
606
783
  "/v1/communities/{communityId}/blocks": {
607
784
  parameters: {
608
785
  query?: never;
@@ -677,6 +854,79 @@ interface paths {
677
854
  patch?: never;
678
855
  trace?: never;
679
856
  };
857
+ "/v1/communities/{communityId}/collections": {
858
+ parameters: {
859
+ query?: never;
860
+ header?: never;
861
+ path?: never;
862
+ cookie?: never;
863
+ };
864
+ /** List collections. Public ones are visible to anyone; private ones surface only to their owner via actor_id. Filter by owner_actor_id / kind. */
865
+ get: operations["CollectionController_list"];
866
+ put?: never;
867
+ /** Create a collection. Default kind `bookmark`, visibility `private`. Pass an Idempotency-Key so retries are safe. */
868
+ post: operations["CollectionController_create"];
869
+ delete?: never;
870
+ options?: never;
871
+ head?: never;
872
+ patch?: never;
873
+ trace?: never;
874
+ };
875
+ "/v1/communities/{communityId}/collections/{collectionId}": {
876
+ parameters: {
877
+ query?: never;
878
+ header?: never;
879
+ path?: never;
880
+ cookie?: never;
881
+ };
882
+ /** Fetch one collection. Private collections resolve only for their owner (via actor_id). */
883
+ get: operations["CollectionController_getById"];
884
+ put?: never;
885
+ post?: never;
886
+ /** Delete a collection (owner only). Items cascade; the posts themselves are untouched. */
887
+ delete: operations["CollectionController_delete"];
888
+ options?: never;
889
+ head?: never;
890
+ /** Update a collection (owner only) — rename, cover, visibility, reorder position. */
891
+ patch: operations["CollectionController_update"];
892
+ trace?: never;
893
+ };
894
+ "/v1/communities/{communityId}/collections/{collectionId}/items": {
895
+ parameters: {
896
+ query?: never;
897
+ header?: never;
898
+ path?: never;
899
+ cookie?: never;
900
+ };
901
+ /** List a collection's posts in curator order. Highlight collections bypass story expiry; bookmark collections drop expired posts. 50/page (max 200). */
902
+ get: operations["CollectionController_listItems"];
903
+ put?: never;
904
+ /** Add a post to a collection (owner only). Idempotent per (collection, post). */
905
+ post: operations["CollectionController_addItem"];
906
+ delete?: never;
907
+ options?: never;
908
+ head?: never;
909
+ patch?: never;
910
+ trace?: never;
911
+ };
912
+ "/v1/communities/{communityId}/collections/{collectionId}/items/{postId}": {
913
+ parameters: {
914
+ query?: never;
915
+ header?: never;
916
+ path?: never;
917
+ cookie?: never;
918
+ };
919
+ get?: never;
920
+ put?: never;
921
+ post?: never;
922
+ /** Remove a post from a collection (owner only). */
923
+ delete: operations["CollectionController_removeItem"];
924
+ options?: never;
925
+ head?: never;
926
+ /** Reorder a post within a collection (owner only). */
927
+ patch: operations["CollectionController_reorderItem"];
928
+ trace?: never;
929
+ };
680
930
  "/v1/communities/{communityId}/conversations": {
681
931
  parameters: {
682
932
  query?: never;
@@ -727,7 +977,7 @@ interface paths {
727
977
  delete: operations["ConversationController_leave"];
728
978
  options?: never;
729
979
  head?: never;
730
- /** Update the caller's participant row — toggle muted today. */
980
+ /** Conversation-level update (task 025). Pass `name` to rename a group (admin-only) — the canonical rename home. The participant fields (muted / muted_until / pinned) are the DEPRECATED alias for PATCH /:id/members/:actorId. */
731
981
  patch: operations["ConversationController_update"];
732
982
  trace?: never;
733
983
  };
@@ -762,8 +1012,8 @@ interface paths {
762
1012
  delete: operations["ConversationController_removeMember"];
763
1013
  options?: never;
764
1014
  head?: never;
765
- /** Promote / demote a participant. Admin-only. */
766
- patch: operations["ConversationController_updateMemberRole"];
1015
+ /** Update a participant (task 025). Field-level authz: `role` is admin-only; `muted` / `muted_until` / `pinned` are self-only (the caller must be the path actor). The canonical home for participant state — the participant fields on PATCH /conversations/:id are the deprecated alias. */
1016
+ patch: operations["ConversationController_updateMember"];
767
1017
  trace?: never;
768
1018
  };
769
1019
  "/v1/communities/{communityId}/conversations/{conversationId}/messages": {
@@ -791,7 +1041,8 @@ interface paths {
791
1041
  path?: never;
792
1042
  cookie?: never;
793
1043
  };
794
- get?: never;
1044
+ /** Fetch a single message (task 024) — resolves a reply target without paging the whole thread. Participant-gated. */
1045
+ get: operations["ConversationController_getMessage"];
795
1046
  put?: never;
796
1047
  post?: never;
797
1048
  /** Soft-delete a message. Reserved to the sender; the row stays so the conversation timeline doesn't orphan replies. Reads return body `"(deleted)"`. Pass the sender via `?actor_id=` (task 008 / G12 — the request body is deprecated). */
@@ -850,7 +1101,10 @@ interface paths {
850
1101
  delete?: never;
851
1102
  options?: never;
852
1103
  head?: never;
853
- /** Rename a group conversation. Admin-only. */
1104
+ /**
1105
+ * DEPRECATED (task 025) — rename via PATCH /conversations/:id with `name`. Rename a group conversation. Admin-only.
1106
+ * @deprecated
1107
+ */
854
1108
  patch: operations["ConversationController_renameGroup"];
855
1109
  trace?: never;
856
1110
  };
@@ -905,7 +1159,24 @@ interface paths {
905
1159
  patch?: never;
906
1160
  trace?: never;
907
1161
  };
908
- "/v1/communities/{communityId}/flags": {
1162
+ "/v1/communities/{communityId}/dismissed-suggestions": {
1163
+ parameters: {
1164
+ query?: never;
1165
+ header?: never;
1166
+ path?: never;
1167
+ cookie?: never;
1168
+ };
1169
+ get?: never;
1170
+ put?: never;
1171
+ /** Dismiss an actor from your follow suggestions ("don't suggest"). Idempotent. The actor never re-appears in your suggestions. */
1172
+ post: operations["EdgeController_dismissSuggestion"];
1173
+ delete?: never;
1174
+ options?: never;
1175
+ head?: never;
1176
+ patch?: never;
1177
+ trace?: never;
1178
+ };
1179
+ "/v1/communities/{communityId}/dismissed-suggestions/{srcActorId}/{dstActorId}": {
909
1180
  parameters: {
910
1181
  query?: never;
911
1182
  header?: never;
@@ -914,6 +1185,24 @@ interface paths {
914
1185
  };
915
1186
  get?: never;
916
1187
  put?: never;
1188
+ post?: never;
1189
+ /** Un-dismiss a suggestion. Idempotent — 204 either way. The actor becomes eligible for suggestions again. */
1190
+ delete: operations["EdgeController_undismissSuggestion"];
1191
+ options?: never;
1192
+ head?: never;
1193
+ patch?: never;
1194
+ trace?: never;
1195
+ };
1196
+ "/v1/communities/{communityId}/flags": {
1197
+ parameters: {
1198
+ query?: never;
1199
+ header?: never;
1200
+ path?: never;
1201
+ cookie?: never;
1202
+ };
1203
+ /** List a reporter's own flags (task 017). Requires `reporter_actor_id` — the customer lane sees only that reporter's reports ("was my report reviewed?"), never other reporters' flags. Cursor-paginated newest-first. */
1204
+ get: operations["FlagController_listMine"];
1205
+ put?: never;
917
1206
  /** File a moderation report against a post or comment. Idempotent per (reporter, target) while open. */
918
1207
  post: operations["FlagController_create"];
919
1208
  delete?: never;
@@ -922,6 +1211,40 @@ interface paths {
922
1211
  patch?: never;
923
1212
  trace?: never;
924
1213
  };
1214
+ "/v1/communities/{communityId}/follow-requests/{dstActorId}/{srcActorId}": {
1215
+ parameters: {
1216
+ query?: never;
1217
+ header?: never;
1218
+ path?: never;
1219
+ cookie?: never;
1220
+ };
1221
+ get?: never;
1222
+ put?: never;
1223
+ post?: never;
1224
+ /** Decline a pending follow request (task 014). Deletes the request; no edge, no notification. */
1225
+ delete: operations["EdgeController_declineFollowRequest"];
1226
+ options?: never;
1227
+ head?: never;
1228
+ patch?: never;
1229
+ trace?: never;
1230
+ };
1231
+ "/v1/communities/{communityId}/follow-requests/{dstActorId}/{srcActorId}/approve": {
1232
+ parameters: {
1233
+ query?: never;
1234
+ header?: never;
1235
+ path?: never;
1236
+ cookie?: never;
1237
+ };
1238
+ get?: never;
1239
+ put?: never;
1240
+ /** Approve a pending follow request (task 014). The destination (private) actor approves the requesting actor; a follow edge is created. */
1241
+ post: operations["EdgeController_approveFollowRequest"];
1242
+ delete?: never;
1243
+ options?: never;
1244
+ head?: never;
1245
+ patch?: never;
1246
+ trace?: never;
1247
+ };
925
1248
  "/v1/communities/{communityId}/follows": {
926
1249
  parameters: {
927
1250
  query?: never;
@@ -931,7 +1254,7 @@ interface paths {
931
1254
  };
932
1255
  get?: never;
933
1256
  put?: never;
934
- /** Follow another actor. Idempotent: returns existing edge with `created: false` if the follow already exists. Refused if either side has a block. */
1257
+ /** Follow another actor. Idempotent. If the destination is private (task 014), a follow request is created instead and the response is `{ status: "pending", edge: null }`; approve/decline it via the follow-request routes. Refused if either side has a block. */
935
1258
  post: operations["EdgeController_follow"];
936
1259
  delete?: never;
937
1260
  options?: never;
@@ -980,7 +1303,7 @@ interface paths {
980
1303
  path?: never;
981
1304
  cookie?: never;
982
1305
  };
983
- /** List hashtags in this community. Cursor-paginated by `first_used_at` desc. */
1306
+ /** List hashtags in this community. Default order is `first_used_at` desc; `order=trending` ranks by windowed post count (task 023) — pass `window=24h|7d`. `window_post_count` is populated only when trending. */
984
1307
  get: operations["HashtagController_list"];
985
1308
  put?: never;
986
1309
  post?: never;
@@ -1014,7 +1337,7 @@ interface paths {
1014
1337
  path?: never;
1015
1338
  cookie?: never;
1016
1339
  };
1017
- /** List posts using a hashtag. Same wire shape as the regular post list. */
1340
+ /** List posts using a hashtag. `order=chronological` (default) or `order=ranked` (task 023) — ranked reuses the discover recency+engagement scoring, paginated on a (score, id) cursor. Same wire shape as the regular post list. */
1018
1341
  get: operations["HashtagFeedController_list"];
1019
1342
  put?: never;
1020
1343
  post?: never;
@@ -1024,7 +1347,41 @@ interface paths {
1024
1347
  patch?: never;
1025
1348
  trace?: never;
1026
1349
  };
1027
- "/v1/communities/{communityId}/lists": {
1350
+ "/v1/communities/{communityId}/hides": {
1351
+ parameters: {
1352
+ query?: never;
1353
+ header?: never;
1354
+ path?: never;
1355
+ cookie?: never;
1356
+ };
1357
+ get?: never;
1358
+ put?: never;
1359
+ /** Hide a post from the actor's feeds ("not interested"). Idempotent. A hard filter — the post drops out of home + discover for that actor only. */
1360
+ post: operations["EdgeController_hidePost"];
1361
+ delete?: never;
1362
+ options?: never;
1363
+ head?: never;
1364
+ patch?: never;
1365
+ trace?: never;
1366
+ };
1367
+ "/v1/communities/{communityId}/hides/{srcActorId}/{postId}": {
1368
+ parameters: {
1369
+ query?: never;
1370
+ header?: never;
1371
+ path?: never;
1372
+ cookie?: never;
1373
+ };
1374
+ get?: never;
1375
+ put?: never;
1376
+ post?: never;
1377
+ /** Un-hide a post. Idempotent — 204 either way. */
1378
+ delete: operations["EdgeController_unhidePost"];
1379
+ options?: never;
1380
+ head?: never;
1381
+ patch?: never;
1382
+ trace?: never;
1383
+ };
1384
+ "/v1/communities/{communityId}/lists": {
1028
1385
  parameters: {
1029
1386
  query?: never;
1030
1387
  header?: never;
@@ -1299,6 +1656,30 @@ interface paths {
1299
1656
  patch?: never;
1300
1657
  trace?: never;
1301
1658
  };
1659
+ "/v1/communities/{communityId}/posts/{postId}/comments/{commentId}/pin": {
1660
+ parameters: {
1661
+ query?: never;
1662
+ header?: never;
1663
+ path?: never;
1664
+ cookie?: never;
1665
+ };
1666
+ get?: never;
1667
+ put?: never;
1668
+ /**
1669
+ * Pin a top-level comment (post-author only).
1670
+ * @description Pins a published top-level comment so it leads the top-level listing. Reserved to the post author (403 otherwise). 409 on a reply, a non-published comment, or when the per-post pin cap (community.settings.max_pinned_comments, default 3) is reached. Idempotent.
1671
+ */
1672
+ post: operations["CommentController_pin"];
1673
+ /**
1674
+ * Unpin a comment (post-author only).
1675
+ * @description Clears the pin; the comment returns to its chronological position. Reserved to the post author (403). Idempotent. Pass the acting actor via the request body.
1676
+ */
1677
+ delete: operations["CommentController_unpin"];
1678
+ options?: never;
1679
+ head?: never;
1680
+ patch?: never;
1681
+ trace?: never;
1682
+ };
1302
1683
  "/v1/communities/{communityId}/posts/{postId}/comments/{commentId}/reactions": {
1303
1684
  parameters: {
1304
1685
  query?: never;
@@ -1334,6 +1715,23 @@ interface paths {
1334
1715
  patch?: never;
1335
1716
  trace?: never;
1336
1717
  };
1718
+ "/v1/communities/{communityId}/posts/{postId}/insights": {
1719
+ parameters: {
1720
+ query?: never;
1721
+ header?: never;
1722
+ path?: never;
1723
+ cookie?: never;
1724
+ };
1725
+ /** Aggregate insights for a post: total views, unique reach, engagement counts, and a daily views/reach series over ?from/?to (default trailing 30 days). */
1726
+ get: operations["InsightsController_postInsights"];
1727
+ put?: never;
1728
+ post?: never;
1729
+ delete?: never;
1730
+ options?: never;
1731
+ head?: never;
1732
+ patch?: never;
1733
+ trace?: never;
1734
+ };
1337
1735
  "/v1/communities/{communityId}/posts/{postId}/poll-results": {
1338
1736
  parameters: {
1339
1737
  query?: never;
@@ -1467,6 +1865,46 @@ interface paths {
1467
1865
  patch?: never;
1468
1866
  trace?: never;
1469
1867
  };
1868
+ "/v1/communities/{communityId}/posts/{postId}/tags/{actorId}/approve": {
1869
+ parameters: {
1870
+ query?: never;
1871
+ header?: never;
1872
+ path?: never;
1873
+ cookie?: never;
1874
+ };
1875
+ get?: never;
1876
+ put?: never;
1877
+ /**
1878
+ * Approve a pending tag (tagged actor only).
1879
+ * @description The tagged actor accepts being tagged; the tag flips `pending → approved` and the post starts surfacing on their `/tagged` listing. 403 if the acting actor is not the tagged actor. 409 if the tag was already removed.
1880
+ */
1881
+ post: operations["PostTagController_approve"];
1882
+ delete?: never;
1883
+ options?: never;
1884
+ head?: never;
1885
+ patch?: never;
1886
+ trace?: never;
1887
+ };
1888
+ "/v1/communities/{communityId}/posts/{postId}/tags/{actorId}/remove": {
1889
+ parameters: {
1890
+ query?: never;
1891
+ header?: never;
1892
+ path?: never;
1893
+ cookie?: never;
1894
+ };
1895
+ get?: never;
1896
+ put?: never;
1897
+ /**
1898
+ * Remove a tag (tagged actor or post author).
1899
+ * @description Flips the tag to `removed`. Removable by either the tagged actor or the post author (403 otherwise). Idempotent on an already-removed tag.
1900
+ */
1901
+ post: operations["PostTagController_remove"];
1902
+ delete?: never;
1903
+ options?: never;
1904
+ head?: never;
1905
+ patch?: never;
1906
+ trace?: never;
1907
+ };
1470
1908
  "/v1/communities/{communityId}/posts/{postId}/viewers": {
1471
1909
  parameters: {
1472
1910
  query?: never;
@@ -1507,6 +1945,26 @@ interface paths {
1507
1945
  patch?: never;
1508
1946
  trace?: never;
1509
1947
  };
1948
+ "/v1/communities/{communityId}/posts/{postId}/voters": {
1949
+ parameters: {
1950
+ query?: never;
1951
+ header?: never;
1952
+ path?: never;
1953
+ cookie?: never;
1954
+ };
1955
+ /**
1956
+ * List voters of a poll (author-only).
1957
+ * @description Only the poll author can list voters. Pass the author via `actor_id`; a requester whose id != post.actor_id gets 403. Each entry carries the voter and their `option_index`. Optionally filter to a single option with `option`. Ordered newest-first.
1958
+ */
1959
+ get: operations["StoryController_listVoters"];
1960
+ put?: never;
1961
+ post?: never;
1962
+ delete?: never;
1963
+ options?: never;
1964
+ head?: never;
1965
+ patch?: never;
1966
+ trace?: never;
1967
+ };
1510
1968
  "/v1/communities/{communityId}/posts/{postId}/votes": {
1511
1969
  parameters: {
1512
1970
  query?: never;
@@ -1527,6 +1985,30 @@ interface paths {
1527
1985
  patch?: never;
1528
1986
  trace?: never;
1529
1987
  };
1988
+ "/v1/communities/{communityId}/posts/{postId}/votes/{actorId}": {
1989
+ parameters: {
1990
+ query?: never;
1991
+ header?: never;
1992
+ path?: never;
1993
+ cookie?: never;
1994
+ };
1995
+ /**
1996
+ * Read an actor's vote on a poll.
1997
+ * @description Returns the actor's chosen `option_index` and when it was cast. 404 when the post is gone or the actor has not voted. Naturally idempotent — no Idempotency-Key.
1998
+ */
1999
+ get: operations["StoryController_getVote"];
2000
+ put?: never;
2001
+ post?: never;
2002
+ /**
2003
+ * Retract an actor's vote on a poll.
2004
+ * @description Deletes the vote edge. Idempotent — 204 whether or not a vote existed. No tally decrement: results are computed from surviving votes.
2005
+ */
2006
+ delete: operations["StoryController_deleteVote"];
2007
+ options?: never;
2008
+ head?: never;
2009
+ patch?: never;
2010
+ trace?: never;
2011
+ };
1530
2012
  "/v1/communities/{communityId}/restricts": {
1531
2013
  parameters: {
1532
2014
  query?: never;
@@ -1780,6 +2262,40 @@ interface paths {
1780
2262
  patch: operations["CommunityController_update"];
1781
2263
  trace?: never;
1782
2264
  };
2265
+ "/v1/workspaces/{workspaceId}/communities/{communityId}/actors/{actorId}/comments": {
2266
+ parameters: {
2267
+ query?: never;
2268
+ header?: never;
2269
+ path?: never;
2270
+ cookie?: never;
2271
+ };
2272
+ /** Every comment an actor authored, all statuses (published / hidden / removed) — the GDPR-export view. 50/page (max 200), cursor-paginated newest-first. */
2273
+ get: operations["ExportController_comments"];
2274
+ put?: never;
2275
+ post?: never;
2276
+ delete?: never;
2277
+ options?: never;
2278
+ head?: never;
2279
+ patch?: never;
2280
+ trace?: never;
2281
+ };
2282
+ "/v1/workspaces/{workspaceId}/communities/{communityId}/actors/{actorId}/reactions": {
2283
+ parameters: {
2284
+ query?: never;
2285
+ header?: never;
2286
+ path?: never;
2287
+ cookie?: never;
2288
+ };
2289
+ /** Every reaction an actor has given — post reactions and comment reactions unified into one stream, discriminated by `target_type`. The GDPR-export view. 50/page (max 200), cursor-paginated newest-first. */
2290
+ get: operations["ExportController_reactions"];
2291
+ put?: never;
2292
+ post?: never;
2293
+ delete?: never;
2294
+ options?: never;
2295
+ head?: never;
2296
+ patch?: never;
2297
+ trace?: never;
2298
+ };
1783
2299
  "/v1/workspaces/{workspaceId}/communities/{communityId}/analytics": {
1784
2300
  parameters: {
1785
2301
  query?: never;
@@ -1797,6 +2313,23 @@ interface paths {
1797
2313
  patch?: never;
1798
2314
  trace?: never;
1799
2315
  };
2316
+ "/v1/workspaces/{workspaceId}/communities/{communityId}/moderation/actions": {
2317
+ parameters: {
2318
+ query?: never;
2319
+ header?: never;
2320
+ path?: never;
2321
+ cookie?: never;
2322
+ };
2323
+ get?: never;
2324
+ put?: never;
2325
+ /** Apply a moderation action directly, without a preceding flag (task 017). Acts on any target — post/comment (status), direct_message (moderator soft-delete), or actor (ban=suspend / restore=reinstate). Writes a flag_id=null audit row. */
2326
+ post: operations["ModerationAdminController_actDirect"];
2327
+ delete?: never;
2328
+ options?: never;
2329
+ head?: never;
2330
+ patch?: never;
2331
+ trace?: never;
2332
+ };
1800
2333
  "/v1/workspaces/{workspaceId}/communities/{communityId}/moderation/actors/{actorId}/shadow-ban": {
1801
2334
  parameters: {
1802
2335
  query?: never;
@@ -1832,6 +2365,41 @@ interface paths {
1832
2365
  patch?: never;
1833
2366
  trace?: never;
1834
2367
  };
2368
+ "/v1/workspaces/{workspaceId}/communities/{communityId}/moderation/blocked-terms": {
2369
+ parameters: {
2370
+ query?: never;
2371
+ header?: never;
2372
+ path?: never;
2373
+ cookie?: never;
2374
+ };
2375
+ /** List the community hidden-words lexicon, newest-first. Cursor-paginated (50/page, max 200). */
2376
+ get: operations["ModerationAdminController_listBlockedTerms"];
2377
+ put?: never;
2378
+ /** Add a hidden word to the community lexicon. A comment whose body contains the term is routed to `action`: `hide` → lands hidden; `pending_approval` → lands in the approve lane. Re-adding a term updates its action. Case-insensitive. */
2379
+ post: operations["ModerationAdminController_addBlockedTerm"];
2380
+ delete?: never;
2381
+ options?: never;
2382
+ head?: never;
2383
+ patch?: never;
2384
+ trace?: never;
2385
+ };
2386
+ "/v1/workspaces/{workspaceId}/communities/{communityId}/moderation/blocked-terms/{term}": {
2387
+ parameters: {
2388
+ query?: never;
2389
+ header?: never;
2390
+ path?: never;
2391
+ cookie?: never;
2392
+ };
2393
+ get?: never;
2394
+ put?: never;
2395
+ post?: never;
2396
+ /** Remove a hidden word. Idempotent — 204 whether or not it existed. */
2397
+ delete: operations["ModerationAdminController_removeBlockedTerm"];
2398
+ options?: never;
2399
+ head?: never;
2400
+ patch?: never;
2401
+ trace?: never;
2402
+ };
1835
2403
  "/v1/workspaces/{workspaceId}/communities/{communityId}/moderation/conversations": {
1836
2404
  parameters: {
1837
2405
  query?: never;
@@ -1926,6 +2494,17 @@ interface components {
1926
2494
  /** @description The audit row this action recorded. */
1927
2495
  moderation_action: components["schemas"]["ModerationActionResponseDto"];
1928
2496
  };
2497
+ ActingActorDto: {
2498
+ /**
2499
+ * @description The actor performing the action (approve: the tagged actor; remove: the tagged actor or the post author).
2500
+ * @example aaaaaaaa-0000-0000-0000-000000000002
2501
+ */
2502
+ actor_id: string;
2503
+ };
2504
+ ActorCommentsResponseDto: {
2505
+ data: components["schemas"]["CommentResponseDto"][];
2506
+ pagination: components["schemas"]["PaginationResponseDto"];
2507
+ };
1929
2508
  ActorCountersResponseDto: {
1930
2509
  /**
1931
2510
  * @description Actor UUID.
@@ -1988,6 +2567,24 @@ interface components {
1988
2567
  */
1989
2568
  src_actor_id?: string;
1990
2569
  };
2570
+ ActorFollowerPointDto: {
2571
+ /** @example 2026-05-01 */
2572
+ day: string;
2573
+ /** @example 1240 */
2574
+ follower_count: number;
2575
+ };
2576
+ ActorInsightsResponseDto: {
2577
+ /** @example aaaaaaaa-0000-0000-0000-000000000001 */
2578
+ actor_id: string;
2579
+ /** @example cccccccc-cccc-cccc-cccc-cccccccccccc */
2580
+ community_id: string;
2581
+ daily: components["schemas"]["ActorFollowerPointDto"][];
2582
+ /**
2583
+ * @description Live follower count.
2584
+ * @example 1240
2585
+ */
2586
+ follower_count: number;
2587
+ };
1991
2588
  ActorListListResponseDto: {
1992
2589
  data: components["schemas"]["ActorListResponseDto"][];
1993
2590
  pagination: components["schemas"]["PaginationResponseDto"];
@@ -2070,6 +2667,33 @@ interface components {
2070
2667
  data: components["schemas"]["ActorResponseDto"][];
2071
2668
  pagination: components["schemas"]["PaginationResponseDto"];
2072
2669
  };
2670
+ ActorReactionEntryDto: {
2671
+ /**
2672
+ * @description ISO timestamp the reaction was recorded.
2673
+ * @example 2026-05-01T12:00:00.000Z
2674
+ */
2675
+ created_at: string;
2676
+ /**
2677
+ * @description UUID of the reacted-to post or comment (per `target_type`).
2678
+ * @example pppppppp-pppp-pppp-pppp-pppppppppppp
2679
+ */
2680
+ target_id: string;
2681
+ /**
2682
+ * @description What the reaction is on.
2683
+ * @example post
2684
+ * @enum {string}
2685
+ */
2686
+ target_type: "post" | "comment";
2687
+ /**
2688
+ * @description Reaction type (e.g. `like`).
2689
+ * @example like
2690
+ */
2691
+ type: string;
2692
+ };
2693
+ ActorReactionsResponseDto: {
2694
+ data: components["schemas"]["ActorReactionEntryDto"][];
2695
+ pagination: components["schemas"]["PaginationResponseDto"];
2696
+ };
2073
2697
  ActorResponseDto: {
2074
2698
  /**
2075
2699
  * @description Avatar URL.
@@ -2101,6 +2725,11 @@ interface components {
2101
2725
  * @example aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
2102
2726
  */
2103
2727
  id: string;
2728
+ /**
2729
+ * @description When true, the actor is private (task 014): effective post visibility is capped at `followers` and following requires an approved follow request.
2730
+ * @example false
2731
+ */
2732
+ is_private: boolean;
2104
2733
  /**
2105
2734
  * @description Free-form metadata blob.
2106
2735
  * @example {
@@ -2160,6 +2789,20 @@ interface components {
2160
2789
  */
2161
2790
  reaction_counts: Record<string, never>;
2162
2791
  };
2792
+ AddItemDto: {
2793
+ /**
2794
+ * @description The caller — must be the owner.
2795
+ * @example aaaaaaaa-0000-0000-0000-000000000001
2796
+ */
2797
+ caller_actor_id: string;
2798
+ /** @description Curator ordering position. */
2799
+ position?: number;
2800
+ /**
2801
+ * @description The post to add.
2802
+ * @example bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
2803
+ */
2804
+ post_id: string;
2805
+ };
2163
2806
  AddListMemberDto: {
2164
2807
  /**
2165
2808
  * @description New member — social actor UUID.
@@ -2206,23 +2849,145 @@ interface components {
2206
2849
  */
2207
2850
  approver_actor_id: string;
2208
2851
  };
2209
- AuditListResponseDto: {
2210
- data: components["schemas"]["ModerationActionResponseDto"][];
2211
- pagination: components["schemas"]["PaginationResponseDto"];
2212
- };
2213
- BatchActorResultDto: {
2214
- /** @description The upserted actor — present on success. */
2215
- actor?: components["schemas"]["ActorResponseDto"];
2852
+ AssetAttachmentDto: {
2216
2853
  /**
2217
- * @description `true` if this item inserted a new row, `false` on an update of an existing external_id. Present on success.
2218
- * @example true
2854
+ * @description Per-attachment alt text for accessibility; null when unset.
2855
+ * @example A golden retriever on a beach
2219
2856
  */
2220
- created?: boolean;
2221
- /** @description The error this item would have returned as a standalone call — present on failure. */
2222
- error?: components["schemas"]["ErrorResponseDto"];
2857
+ alt_text: string | null;
2223
2858
  /**
2224
- * @description Position of this result in the request array.
2225
- * @example 0
2859
+ * @description The attached asset UUID.
2860
+ * @example eeeeeeee-0000-0000-0000-000000000001
2861
+ */
2862
+ asset_id: string;
2863
+ };
2864
+ AssetAttachmentInputDto: {
2865
+ /** @description Per-attachment alt text (≤1000 chars). */
2866
+ alt_text?: string;
2867
+ /**
2868
+ * @description An uploaded asset UUID (status must be `ready`).
2869
+ * @example eeeeeeee-0000-0000-0000-000000000001
2870
+ */
2871
+ asset_id: string;
2872
+ };
2873
+ AssetListResponseDto: {
2874
+ data: components["schemas"]["AssetResponseDto"][];
2875
+ pagination: components["schemas"]["PaginationResponseDto"];
2876
+ };
2877
+ AssetRenditionDto: {
2878
+ /** @example 184320 */
2879
+ byte_size: number;
2880
+ /** @example image/jpeg */
2881
+ content_type: string;
2882
+ /**
2883
+ * @description Null on the un-probed video original.
2884
+ * @example 960
2885
+ */
2886
+ height: number | null;
2887
+ /**
2888
+ * @description Ladder rung — original/medium/thumb for images, original/video/poster for videos.
2889
+ * @example medium
2890
+ * @enum {string}
2891
+ */
2892
+ name: "original" | "medium" | "thumb" | "video" | "poster";
2893
+ /**
2894
+ * @description Short-lived presigned GET URL (re-minted each read).
2895
+ * @example https://…r2.cloudflarestorage.com/…?X-Amz-Signature=…
2896
+ */
2897
+ url: string;
2898
+ /**
2899
+ * @description Null on the un-probed video original.
2900
+ * @example 1280
2901
+ */
2902
+ width: number | null;
2903
+ };
2904
+ AssetResponseDto: {
2905
+ /**
2906
+ * @description Size of the original upload in bytes.
2907
+ * @example 512000
2908
+ */
2909
+ byte_size: number;
2910
+ /** @example cccccccc-cccc-cccc-cccc-cccccccccccc */
2911
+ community_id: string;
2912
+ /** @example image/jpeg */
2913
+ content_type: string;
2914
+ /** @example 2026-05-01T12:00:00.000Z */
2915
+ created_at: string;
2916
+ /**
2917
+ * @description Output duration in seconds — ready videos only.
2918
+ * @example 12.48
2919
+ */
2920
+ duration_s: number | null;
2921
+ /**
2922
+ * @description Stable code when status='failed' — ASSET_TOO_LARGE, ASSET_INVALID_CONTAINER, ASSET_DURATION_EXCEEDED, ASSET_TRANSCODE_FAILED, ASSET_PROCESSING_FAILED.
2923
+ * @example null
2924
+ */
2925
+ failure_reason: string | null;
2926
+ /** @example 4032 */
2927
+ height: number | null;
2928
+ /** @example eeeeeeee-0000-0000-0000-000000000001 */
2929
+ id: string;
2930
+ /**
2931
+ * @example image
2932
+ * @enum {string}
2933
+ */
2934
+ kind: "image" | "video";
2935
+ /** @example aaaaaaaa-0000-0000-0000-000000000001 */
2936
+ owner_actor_id: string;
2937
+ renditions: components["schemas"]["AssetRenditionDto"][];
2938
+ /**
2939
+ * @description Videos: uploading → processing → ready | failed. Images never enter 'uploading'.
2940
+ * @example ready
2941
+ * @enum {string}
2942
+ */
2943
+ status: "uploading" | "processing" | "ready" | "failed";
2944
+ /** @example 2026-05-01T12:00:00.000Z */
2945
+ updated_at: string;
2946
+ /** @example 3024 */
2947
+ width: number | null;
2948
+ };
2949
+ AssetUploadDto: {
2950
+ /**
2951
+ * @description Signature expiry — finish the PUT before this.
2952
+ * @example 2026-05-01T12:15:00.000Z
2953
+ */
2954
+ expires_at: string;
2955
+ /**
2956
+ * @description Headers the PUT must carry — they are bound into the signature. Keys arrive lowercase (HTTP header names are case-insensitive).
2957
+ * @example {
2958
+ * "content-length": "10485760",
2959
+ * "content-type": "video/mp4"
2960
+ * }
2961
+ */
2962
+ headers: Record<string, never>;
2963
+ /**
2964
+ * @example PUT
2965
+ * @enum {string}
2966
+ */
2967
+ method: "PUT";
2968
+ /**
2969
+ * @description Presigned PUT URL — upload the raw bytes here.
2970
+ * @example https://…r2.cloudflarestorage.com/…?X-Amz-Signature=…
2971
+ */
2972
+ url: string;
2973
+ };
2974
+ AuditListResponseDto: {
2975
+ data: components["schemas"]["ModerationActionResponseDto"][];
2976
+ pagination: components["schemas"]["PaginationResponseDto"];
2977
+ };
2978
+ BatchActorResultDto: {
2979
+ /** @description The upserted actor — present on success. */
2980
+ actor?: components["schemas"]["ActorResponseDto"];
2981
+ /**
2982
+ * @description `true` if this item inserted a new row, `false` on an update of an existing external_id. Present on success.
2983
+ * @example true
2984
+ */
2985
+ created?: boolean;
2986
+ /** @description The error this item would have returned as a standalone call — present on failure. */
2987
+ error?: components["schemas"]["ErrorResponseDto"];
2988
+ /**
2989
+ * @description Position of this result in the request array.
2990
+ * @example 0
2226
2991
  */
2227
2992
  index: number;
2228
2993
  /**
@@ -2313,6 +3078,38 @@ interface components {
2313
3078
  /** @description Actors to upsert, in order. 1–200 items; each item follows the single-upsert body exactly. */
2314
3079
  actors: components["schemas"]["UpsertActorDto"][];
2315
3080
  };
3081
+ BlockedTermListResponseDto: {
3082
+ data: components["schemas"]["BlockedTermResponseDto"][];
3083
+ pagination: components["schemas"]["PaginationResponseDto"];
3084
+ };
3085
+ BlockedTermResponseDto: {
3086
+ /**
3087
+ * @description What a match does.
3088
+ * @example hide
3089
+ * @enum {string}
3090
+ */
3091
+ action: "hide" | "pending_approval";
3092
+ /**
3093
+ * @description Owning community UUID.
3094
+ * @example cccccccc-cccc-cccc-cccc-cccccccccccc
3095
+ */
3096
+ community_id: string;
3097
+ /**
3098
+ * @description ISO timestamp the term was added.
3099
+ * @example 2026-05-01T12:00:00.000Z
3100
+ */
3101
+ created_at: string;
3102
+ /**
3103
+ * @description Blocked term UUID.
3104
+ * @example ffffffff-2222-0000-0000-000000000001
3105
+ */
3106
+ id: string;
3107
+ /**
3108
+ * @description The blocked term (lowercased).
3109
+ * @example spoiler
3110
+ */
3111
+ term: string;
3112
+ };
2316
3113
  BookmarkListResponseDto: {
2317
3114
  data: components["schemas"]["BookmarkResponseDto"][];
2318
3115
  pagination: components["schemas"]["PaginationResponseDto"];
@@ -2395,6 +3192,64 @@ interface components {
2395
3192
  data: components["schemas"]["CloseFriendResponse"][];
2396
3193
  pagination: components["schemas"]["PaginationResponseDto"];
2397
3194
  };
3195
+ CollectionItemListResponseDto: {
3196
+ data: components["schemas"]["CollectionItemResponseDto"][];
3197
+ pagination: components["schemas"]["PaginationResponseDto"];
3198
+ };
3199
+ CollectionItemResponseDto: {
3200
+ /** @example 2026-05-01T12:00:00.000Z */
3201
+ added_at: string;
3202
+ /** @example 99999999-0000-0000-0000-000000000001 */
3203
+ collection_id: string;
3204
+ /** @example cccccccc-cccc-cccc-cccc-cccccccccccc */
3205
+ community_id: string;
3206
+ /** @example 0 */
3207
+ position: number;
3208
+ /** @example bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb */
3209
+ post_id: string;
3210
+ };
3211
+ CollectionListResponseDto: {
3212
+ data: components["schemas"]["CollectionResponseDto"][];
3213
+ pagination: components["schemas"]["PaginationResponseDto"];
3214
+ };
3215
+ CollectionResponseDto: {
3216
+ /** @example cccccccc-cccc-cccc-cccc-cccccccccccc */
3217
+ community_id: string;
3218
+ /** @example null */
3219
+ cover_asset_id: string | null;
3220
+ /** @example null */
3221
+ cover_url: string | null;
3222
+ /** @example 2026-05-01T12:00:00.000Z */
3223
+ created_at: string;
3224
+ /** @example 99999999-0000-0000-0000-000000000001 */
3225
+ id: string;
3226
+ /**
3227
+ * @description Number of posts in the collection.
3228
+ * @example 12
3229
+ */
3230
+ item_count: number;
3231
+ /**
3232
+ * @example bookmark
3233
+ * @enum {string}
3234
+ */
3235
+ kind: "bookmark" | "highlight";
3236
+ /** @example Travel */
3237
+ name: string;
3238
+ /** @example aaaaaaaa-0000-0000-0000-000000000001 */
3239
+ owner_actor_id: string;
3240
+ /**
3241
+ * @description Owner-defined ordering position.
3242
+ * @example 0
3243
+ */
3244
+ position: number;
3245
+ /** @example 2026-05-01T12:00:00.000Z */
3246
+ updated_at: string;
3247
+ /**
3248
+ * @example private
3249
+ * @enum {string}
3250
+ */
3251
+ visibility: "public" | "private";
3252
+ };
2398
3253
  CommentListResponseDto: {
2399
3254
  data: components["schemas"]["CommentResponseDto"][];
2400
3255
  pagination: components["schemas"]["PaginationResponseDto"];
@@ -2445,6 +3300,8 @@ interface components {
2445
3300
  * @example aaaaaaaa-0000-0000-0000-000000000001
2446
3301
  */
2447
3302
  actor_id: string;
3303
+ /** @description Ordered image attachments (task 019). Ref-only; resolve renditions via GET /assets/:id. */
3304
+ assets: components["schemas"]["AssetAttachmentDto"][];
2448
3305
  /**
2449
3306
  * @description Comment body.
2450
3307
  * @example Looks great, shipping today.
@@ -2475,6 +3332,16 @@ interface components {
2475
3332
  * @example null
2476
3333
  */
2477
3334
  parent_id: string | null;
3335
+ /**
3336
+ * @description True when the post author has pinned this top-level comment (task 012). Pinned comments lead the top-level listing.
3337
+ * @example false
3338
+ */
3339
+ pinned: boolean;
3340
+ /**
3341
+ * @description ISO timestamp the comment was pinned; null when not pinned.
3342
+ * @example null
3343
+ */
3344
+ pinned_at: string | null;
2478
3345
  /**
2479
3346
  * @description Post the comment threads under.
2480
3347
  * @example bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
@@ -2683,6 +3550,12 @@ interface components {
2683
3550
  * @example 50
2684
3551
  */
2685
3552
  max_group_conversation_size: number;
3553
+ /**
3554
+ * @description Maximum pinned top-level comments per post (task 012). Integer 0..100; floored. Exceeding it returns 409 `PIN_CAP_REACHED`.
3555
+ * @default 3
3556
+ * @example 3
3557
+ */
3558
+ max_pinned_comments: number;
2686
3559
  /** @description Ranked-feed tuning (weights, half-life, candidate window). Read at query time by the actor feed, list feeds, and the discover feed. */
2687
3560
  ranking?: components["schemas"]["CommunityRankingSettingsDto"];
2688
3561
  };
@@ -2744,10 +3617,20 @@ interface components {
2744
3617
  */
2745
3618
  last_read_at: string | null;
2746
3619
  /**
2747
- * @description When true, dm_new_message notifications are suppressed for this participant.
3620
+ * @description When true, dm_new_message notifications are suppressed indefinitely for this participant.
2748
3621
  * @example false
2749
3622
  */
2750
3623
  muted: boolean;
3624
+ /**
3625
+ * @description Timed mute (task 024): dm_new_message is suppressed while this is in the future. Additive beside `muted`; a past value is inert. Null when no timed mute.
3626
+ * @example null
3627
+ */
3628
+ muted_until: string | null;
3629
+ /**
3630
+ * @description When true, the thread is pinned to the top of this actor's inbox (task 024).
3631
+ * @example false
3632
+ */
3633
+ pinned: boolean;
2751
3634
  /**
2752
3635
  * @description Role on this conversation. `admin` for groups can add / remove members and rename.
2753
3636
  * @example member
@@ -2794,6 +3677,11 @@ interface components {
2794
3677
  name: string | null;
2795
3678
  /** @description Participants, joined-at ascending. */
2796
3679
  participants: components["schemas"]["ConversationParticipantDto"][];
3680
+ /**
3681
+ * @description Unread messages for the requesting actor (task 024) — messages from others created after the requester's last_read_at. Embedded on list + single GET for inbox badges.
3682
+ * @example 0
3683
+ */
3684
+ unread_count: number;
2797
3685
  /**
2798
3686
  * @description ISO timestamp.
2799
3687
  * @example 2026-05-01T12:00:00.000Z
@@ -2820,12 +3708,32 @@ interface components {
2820
3708
  */
2821
3709
  visibility?: "public" | "private";
2822
3710
  };
3711
+ CreateBlockedTermDto: {
3712
+ /**
3713
+ * @description What a match does. Default `hide`.
3714
+ * @example hide
3715
+ * @enum {string}
3716
+ */
3717
+ action?: "hide" | "pending_approval";
3718
+ /**
3719
+ * @description The word/phrase to block (case-insensitive substring). Max 128 chars.
3720
+ * @example spoiler
3721
+ */
3722
+ term: string;
3723
+ };
2823
3724
  CreateBookmarkDto: {
2824
3725
  /**
2825
3726
  * @description Social actor UUID who is bookmarking — the customer-backend supplies the end-user identity here.
2826
3727
  * @example aaaaaaaa-0000-0000-0000-000000000001
2827
3728
  */
2828
3729
  actor_id: string;
3730
+ /**
3731
+ * @description Optional collection UUIDs (task 020) to file this post into alongside the flat bookmark. Only the actor's own collections are written; unknown/other-owner ids are silently skipped. Max 20.
3732
+ * @example [
3733
+ * "99999999-0000-0000-0000-000000000001"
3734
+ * ]
3735
+ */
3736
+ collection_ids?: string[];
2829
3737
  };
2830
3738
  CreateCloseFriendDto: {
2831
3739
  /**
@@ -2839,12 +3747,45 @@ interface components {
2839
3747
  */
2840
3748
  owner_actor_id: string;
2841
3749
  };
3750
+ CreateCollectionDto: {
3751
+ /**
3752
+ * Format: uuid
3753
+ * @description Cover image — a ready asset (task 019) owned by the collection owner.
3754
+ */
3755
+ cover_asset_id?: string;
3756
+ /** @description Cover image URL (alternative to cover_asset_id). */
3757
+ cover_url?: string;
3758
+ /**
3759
+ * @description Default `bookmark` (owner-scoped). `highlight` is profile-public and bypasses story expiry.
3760
+ * @enum {string}
3761
+ */
3762
+ kind?: "bookmark" | "highlight";
3763
+ /**
3764
+ * @description Collection name (1-200 chars).
3765
+ * @example Travel
3766
+ */
3767
+ name: string;
3768
+ /**
3769
+ * @description The owning actor UUID.
3770
+ * @example aaaaaaaa-0000-0000-0000-000000000001
3771
+ */
3772
+ owner_actor_id: string;
3773
+ /** @description Owner-defined ordering position. */
3774
+ position?: number;
3775
+ /**
3776
+ * @description Default `private`.
3777
+ * @enum {string}
3778
+ */
3779
+ visibility?: "public" | "private";
3780
+ };
2842
3781
  CreateCommentDto: {
2843
3782
  /**
2844
3783
  * @description Social actor UUID who authors the comment.
2845
3784
  * @example aaaaaaaa-0000-0000-0000-000000000001
2846
3785
  */
2847
3786
  actor_id: string;
3787
+ /** @description Ordered image attachments (task 019). Each references a `ready` asset in this community owned by the author. Max 20. */
3788
+ assets?: components["schemas"]["AssetAttachmentInputDto"][];
2848
3789
  /**
2849
3790
  * @description Comment body (1-10000 chars after trim).
2850
3791
  * @example Looks great, shipping today.
@@ -2970,16 +3911,16 @@ interface components {
2970
3911
  */
2971
3912
  reporter_actor_id: string;
2972
3913
  /**
2973
- * @description UUID of the post or comment being flagged.
3914
+ * @description UUID of the target (post / comment / actor / message id per target_kind).
2974
3915
  * @example pppppppp-pppp-pppp-pppp-pppppppppppp
2975
3916
  */
2976
3917
  target_id: string;
2977
3918
  /**
2978
- * @description What kind of object is being flagged.
3919
+ * @description What kind of object is being flagged (task 017 adds actor + direct_message). A direct_message flag requires the reporter to be a participant in the conversation.
2979
3920
  * @example post
2980
3921
  * @enum {string}
2981
3922
  */
2982
- target_kind: "post" | "comment";
3923
+ target_kind: "post" | "comment" | "actor" | "direct_message";
2983
3924
  };
2984
3925
  CreateFlagResponseDto: {
2985
3926
  /**
@@ -3003,6 +3944,11 @@ interface components {
3003
3944
  tag: string;
3004
3945
  };
3005
3946
  CreateMutedTermDto: {
3947
+ /**
3948
+ * @description What matching does. `mute` (default) or `pending_approval` (task 015).
3949
+ * @enum {string}
3950
+ */
3951
+ action?: "mute" | "pending_approval";
3006
3952
  /** @description Optional expiry (ISO timestamp in the future). */
3007
3953
  expires_at?: string | null;
3008
3954
  /**
@@ -3022,6 +3968,8 @@ interface components {
3022
3968
  * @example aaaaaaaa-0000-0000-0000-000000000001
3023
3969
  */
3024
3970
  actor_id: string;
3971
+ /** @description Ordered image attachments (task 019). Each references a `ready` asset in this community owned by the author. Max 20. */
3972
+ assets?: components["schemas"]["AssetAttachmentInputDto"][];
3025
3973
  /**
3026
3974
  * @description Free-form attributes blob. Polls live here at `attributes.poll`.
3027
3975
  * @example {
@@ -3046,6 +3994,8 @@ interface components {
3046
3994
  kind?: string;
3047
3995
  /** @description Required when status='scheduled'. ISO timestamp at least 30 seconds in the future. The PostSchedulerCron promotes scheduled posts to published once now() >= scheduled_for. */
3048
3996
  scheduled_for?: string | null;
3997
+ /** @description Per-post interaction settings (comment policy, hide reaction counts, allow repost/quote). Omitted keys default to the open shape. Enforced server-side. */
3998
+ settings?: components["schemas"]["PostSettingsInputDto"];
3049
3999
  /**
3050
4000
  * @description For `kind='quote'` ONLY: the source post being quoted. Reposts use the dedicated POST /posts/:postId/repost route instead. Validation: when `kind='quote'`, both `source_post_id` and a non-empty `body` are required.
3051
4001
  * @example bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
@@ -3056,6 +4006,13 @@ interface components {
3056
4006
  * @enum {string}
3057
4007
  */
3058
4008
  status?: "published" | "draft" | "scheduled";
4009
+ /**
4010
+ * @description Actor UUIDs to tag in the post (task 011). Each lands as a pending tag the actor approves. Non-actors and blocked pairs are skipped. Max 30.
4011
+ * @example [
4012
+ * "aaaaaaaa-0000-0000-0000-000000000002"
4013
+ * ]
4014
+ */
4015
+ tags?: string[];
3059
4016
  /**
3060
4017
  * @description Optional title (1-240 chars).
3061
4018
  * @example Shipping Phase 8
@@ -3117,7 +4074,7 @@ interface components {
3117
4074
  * "comment.created"
3118
4075
  * ]
3119
4076
  */
3120
- event_types: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created")[];
4077
+ event_types: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "edge.follow.requested" | "edge.follow.request_approved" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created" | "tag.created" | "asset.ready" | "asset.failed")[];
3121
4078
  /**
3122
4079
  * @description Subscriber URL. Must be `https://`.
3123
4080
  * @example https://example.com/webhooks/social
@@ -3157,7 +4114,7 @@ interface components {
3157
4114
  * "comment.created"
3158
4115
  * ]
3159
4116
  */
3160
- event_types: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created")[];
4117
+ event_types: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "edge.follow.requested" | "edge.follow.request_approved" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created" | "tag.created" | "asset.ready" | "asset.failed")[];
3161
4118
  /**
3162
4119
  * @description Webhook UUID.
3163
4120
  * @example wwwwwwww-0000-0000-0000-000000000001
@@ -3220,6 +4177,10 @@ interface components {
3220
4177
  */
3221
4178
  sender_id?: string;
3222
4179
  };
4180
+ DeleteWithCallerDto: {
4181
+ /** @example aaaaaaaa-0000-0000-0000-000000000001 */
4182
+ caller_actor_id: string;
4183
+ };
3223
4184
  DeliveryJobResponseDto: {
3224
4185
  /**
3225
4186
  * @description Delivery attempts made so far.
@@ -3340,6 +4301,11 @@ interface components {
3340
4301
  pagination: components["schemas"]["PaginationResponseDto"];
3341
4302
  };
3342
4303
  DirectMessageAdminResponseDto: {
4304
+ /**
4305
+ * @description Ordered image attachments (task 019); ref-only.
4306
+ * @example []
4307
+ */
4308
+ assets: string[];
3343
4309
  /**
3344
4310
  * @description Attachments.
3345
4311
  * @example []
@@ -3476,6 +4442,8 @@ interface components {
3476
4442
  type: string;
3477
4443
  };
3478
4444
  DirectMessageResponseDto: {
4445
+ /** @description Ordered image attachments (task 019). Ref-only; resolve renditions via GET /assets/:id. */
4446
+ assets: components["schemas"]["AssetAttachmentDto"][];
3479
4447
  attachments: components["schemas"]["DirectMessageAttachmentDto"][];
3480
4448
  /**
3481
4449
  * @description Message body. Returns `"(deleted)"` when soft-deleted.
@@ -3535,6 +4503,27 @@ interface components {
3535
4503
  */
3536
4504
  sender_id: string;
3537
4505
  };
4506
+ DirectModerationActionDto: {
4507
+ /**
4508
+ * @description Action. hide/remove act on the target; ban/restore suspend/reinstate an actor; warn is audit-only. The audit row has flag_id=null (unsolicited action).
4509
+ * @example remove
4510
+ * @enum {string}
4511
+ */
4512
+ action: "hide" | "remove" | "warn" | "ban" | "dismiss" | "unhide" | "restore";
4513
+ /** @description Optional moderator notes (up to 2000 chars). */
4514
+ notes?: string;
4515
+ /**
4516
+ * @description The target UUID (post/comment/actor/message id per target_kind).
4517
+ * @example bbbbbbbb-0000-0000-0000-000000000001
4518
+ */
4519
+ target_id: string;
4520
+ /**
4521
+ * @description What the action targets (task 017). post/comment → status transition; direct_message → moderator soft-delete; actor → ban=suspend / restore=reinstate.
4522
+ * @example direct_message
4523
+ * @enum {string}
4524
+ */
4525
+ target_kind: "post" | "comment" | "actor" | "direct_message";
4526
+ };
3538
4527
  DraftListResponseDto: {
3539
4528
  /** @description Draft post rows — status is always 'draft' on this endpoint. */
3540
4529
  data: components["schemas"]["PostResponseDto"][];
@@ -3651,13 +4640,64 @@ interface components {
3651
4640
  * @example post
3652
4641
  * @enum {string}
3653
4642
  */
3654
- target_kind: "post" | "comment";
4643
+ target_kind: "post" | "comment" | "actor" | "direct_message";
3655
4644
  /**
3656
4645
  * @description ISO timestamp of the last update.
3657
4646
  * @example 2026-05-01T12:00:00.000Z
3658
4647
  */
3659
4648
  updated_at: string;
3660
4649
  };
4650
+ FollowRequestEntryDto: {
4651
+ /**
4652
+ * @description When the request was created.
4653
+ * @example 2026-05-01T12:00:00.000Z
4654
+ */
4655
+ created_at: string;
4656
+ /**
4657
+ * @description Follow request UUID.
4658
+ * @example ffffffff-1111-0000-0000-000000000001
4659
+ */
4660
+ request_id: string;
4661
+ /**
4662
+ * @description Requesting actor UUID.
4663
+ * @example aaaaaaaa-0000-0000-0000-000000000002
4664
+ */
4665
+ src_actor_id: string;
4666
+ /**
4667
+ * @description Requesting actor avatar URL.
4668
+ * @example null
4669
+ */
4670
+ src_avatar_url: string | null;
4671
+ /**
4672
+ * @description Requesting actor display name.
4673
+ * @example Bob
4674
+ */
4675
+ src_display_name: string | null;
4676
+ /**
4677
+ * @description Requesting actor's external_id.
4678
+ * @example bob
4679
+ */
4680
+ src_external_id: string;
4681
+ };
4682
+ FollowRequestListResponseDto: {
4683
+ data: components["schemas"]["FollowRequestEntryDto"][];
4684
+ pagination: components["schemas"]["PaginationResponseDto"];
4685
+ };
4686
+ FollowResultDto: {
4687
+ /**
4688
+ * @description `true` if the edge / request was created on this call; `false` on idempotent retry.
4689
+ * @example true
4690
+ */
4691
+ created: boolean;
4692
+ /** @description The follow edge when `status=followed`; null when `pending`. */
4693
+ edge: components["schemas"]["EdgeResponseDto"] | null;
4694
+ /**
4695
+ * @description `followed` = an edge exists; `pending` = a follow request was created (private dst).
4696
+ * @example followed
4697
+ * @enum {string}
4698
+ */
4699
+ status: "followed" | "pending";
4700
+ };
3661
4701
  FollowerEdgeListResponseDto: {
3662
4702
  data: components["schemas"]["FollowerEdgeResponseDto"][];
3663
4703
  pagination: components["schemas"]["PaginationResponseDto"];
@@ -3733,6 +4773,11 @@ interface components {
3733
4773
  * @example storymode
3734
4774
  */
3735
4775
  tag: string;
4776
+ /**
4777
+ * @description Published posts using the tag inside the trending window; non-null only when `order=trending` (task 023).
4778
+ * @example null
4779
+ */
4780
+ window_post_count: number | null;
3736
4781
  };
3737
4782
  HashtagFollowListResponseDto: {
3738
4783
  data: components["schemas"]["HashtagFollowResponseDto"][];
@@ -3784,21 +4829,78 @@ interface components {
3784
4829
  * @example storymode
3785
4830
  */
3786
4831
  tag: string;
4832
+ /**
4833
+ * @description Published posts using the tag inside the trending window; non-null only when `order=trending` (task 023).
4834
+ * @example null
4835
+ */
4836
+ window_post_count: number | null;
3787
4837
  };
3788
- HighlightsResponse: {
3789
- /** @description Page of pinned posts (full post rows; expiry is bypassed for pinned rows). */
3790
- data: components["schemas"]["PostResponseDto"][];
4838
+ HideEntryDto: {
4839
+ /**
4840
+ * @description When the post was hidden.
4841
+ * @example 2026-05-01T12:00:00.000Z
4842
+ */
4843
+ created_at: string;
4844
+ /**
4845
+ * @description The hidden post UUID.
4846
+ * @example bbbbbbbb-0000-0000-0000-000000000001
4847
+ */
4848
+ post_id: string;
4849
+ };
4850
+ HideListResponseDto: {
4851
+ data: components["schemas"]["HideEntryDto"][];
3791
4852
  pagination: components["schemas"]["PaginationResponseDto"];
3792
4853
  };
3793
- LeaveConversationDto: {
4854
+ HidePostDto: {
3794
4855
  /**
3795
- * @deprecated
3796
- * @description DEPRECATED — use `?actor_id=`. The participant leaving.
4856
+ * @description The actor hiding the post.
3797
4857
  * @example aaaaaaaa-0000-0000-0000-000000000001
3798
4858
  */
3799
- actor_id?: string;
3800
- };
3801
- MarkAllReadDto: {
4859
+ actor_id: string;
4860
+ /**
4861
+ * @description The post to hide.
4862
+ * @example bbbbbbbb-0000-0000-0000-000000000001
4863
+ */
4864
+ post_id: string;
4865
+ };
4866
+ HideResultDto: {
4867
+ /**
4868
+ * @description `true` if the hide was created on this call; `false` on idempotent retry.
4869
+ * @example true
4870
+ */
4871
+ created: boolean;
4872
+ };
4873
+ HighlightsResponse: {
4874
+ /** @description Page of pinned posts (full post rows; expiry is bypassed for pinned rows). */
4875
+ data: components["schemas"]["PostResponseDto"][];
4876
+ pagination: components["schemas"]["PaginationResponseDto"];
4877
+ };
4878
+ InsightsDailyBucketDto: {
4879
+ /**
4880
+ * @description ISO date (YYYY-MM-DD).
4881
+ * @example 2026-05-01
4882
+ */
4883
+ day: string;
4884
+ /**
4885
+ * @description Distinct viewers that day.
4886
+ * @example 210
4887
+ */
4888
+ reach: number;
4889
+ /**
4890
+ * @description Total impressions that day (repeats + anonymous).
4891
+ * @example 340
4892
+ */
4893
+ views: number;
4894
+ };
4895
+ LeaveConversationDto: {
4896
+ /**
4897
+ * @deprecated
4898
+ * @description DEPRECATED — use `?actor_id=`. The participant leaving.
4899
+ * @example aaaaaaaa-0000-0000-0000-000000000001
4900
+ */
4901
+ actor_id?: string;
4902
+ };
4903
+ MarkAllReadDto: {
3802
4904
  /**
3803
4905
  * @description Optional ISO timestamp; only flips rows older than this. Omit to flip all unread.
3804
4906
  * @example 2026-05-01T00:00:00.000Z
@@ -3916,7 +5018,7 @@ interface components {
3916
5018
  * @example post
3917
5019
  * @enum {string}
3918
5020
  */
3919
- target_kind: "post" | "comment";
5021
+ target_kind: "post" | "comment" | "actor" | "direct_message";
3920
5022
  };
3921
5023
  ModerationActorListResponseDto: {
3922
5024
  data: components["schemas"]["ModerationActorResponseDto"][];
@@ -3953,6 +5055,11 @@ interface components {
3953
5055
  * @example aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
3954
5056
  */
3955
5057
  id: string;
5058
+ /**
5059
+ * @description When true, the actor is private (task 014): effective post visibility is capped at `followers` and following requires an approved follow request.
5060
+ * @example false
5061
+ */
5062
+ is_private: boolean;
3956
5063
  /**
3957
5064
  * @description Free-form metadata blob.
3958
5065
  * @example {
@@ -3983,6 +5090,12 @@ interface components {
3983
5090
  pagination: components["schemas"]["PaginationResponseDto"];
3984
5091
  };
3985
5092
  MutedTermResponseDto: {
5093
+ /**
5094
+ * @description What matching does (task 015). `mute` = feed-filter only; `pending_approval` = hold a stranger's comment on your post for review.
5095
+ * @example mute
5096
+ * @enum {string}
5097
+ */
5098
+ action: "mute" | "pending_approval";
3986
5099
  /**
3987
5100
  * @description Owning actor UUID.
3988
5101
  * @example aaaaaaaa-0000-0000-0000-000000000001
@@ -4040,7 +5153,7 @@ interface components {
4040
5153
  * @example follow
4041
5154
  * @enum {string}
4042
5155
  */
4043
- kind: "follow" | "reaction" | "comment_on_post" | "reply_to_comment" | "mention" | "vote" | "repost" | "quote_post" | "dm_new_message" | "dm_added_to_group" | "dm_role_changed" | "dm_reaction";
5156
+ kind: "follow" | "reaction" | "comment_on_post" | "reply_to_comment" | "mention" | "vote" | "repost" | "quote_post" | "dm_new_message" | "dm_added_to_group" | "dm_role_changed" | "dm_reaction" | "tag" | "follow_request" | "follow_request_approved";
4044
5157
  /**
4045
5158
  * @description ISO timestamp of the last update. Synthesised entries (no explicit row) report epoch.
4046
5159
  * @example 2026-05-01T12:00:00.000Z
@@ -4073,7 +5186,7 @@ interface components {
4073
5186
  * @example reaction
4074
5187
  * @enum {string}
4075
5188
  */
4076
- kind: "follow" | "reaction" | "comment_on_post" | "reply_to_comment" | "mention" | "vote" | "repost" | "quote_post" | "dm_new_message" | "dm_added_to_group" | "dm_role_changed" | "dm_reaction";
5189
+ kind: "follow" | "reaction" | "comment_on_post" | "reply_to_comment" | "mention" | "vote" | "repost" | "quote_post" | "dm_new_message" | "dm_added_to_group" | "dm_role_changed" | "dm_reaction" | "tag" | "follow_request" | "follow_request_approved";
4077
5190
  /**
4078
5191
  * @description Kind-specific extras. `reaction`: `{type}` (+ `{post_id}` when the target is a comment). `comment_on_post` / `reply_to_comment`: `{comment_id}`. `mention`: `{post_id}` (+ `{comment_id}` for comment mentions).
4079
5192
  * @example {
@@ -4191,6 +5304,13 @@ interface components {
4191
5304
  */
4192
5305
  muted: boolean;
4193
5306
  };
5307
+ PinCommentDto: {
5308
+ /**
5309
+ * @description The acting actor — must equal the post.actor_id (task 012).
5310
+ * @example aaaaaaaa-0000-0000-0000-000000000001
5311
+ */
5312
+ actor_id: string;
5313
+ };
4194
5314
  PollResultOptionResponse: {
4195
5315
  /**
4196
5316
  * @description Number of votes recorded for this option.
@@ -4226,6 +5346,79 @@ interface components {
4226
5346
  */
4227
5347
  total_votes: number;
4228
5348
  };
5349
+ PollVoteResponse: {
5350
+ /**
5351
+ * @description When the vote was cast (or last changed).
5352
+ * @example 2026-05-01T11:30:00.000Z
5353
+ */
5354
+ created_at: string;
5355
+ /**
5356
+ * @description Zero-based index of the option the actor voted for.
5357
+ * @example 1
5358
+ */
5359
+ option_index: number;
5360
+ };
5361
+ PollVoterResponse: {
5362
+ /**
5363
+ * @description The option this voter chose.
5364
+ * @example 1
5365
+ */
5366
+ option_index: number;
5367
+ /**
5368
+ * @description When the vote was cast.
5369
+ * @example 2026-05-01T11:30:00.000Z
5370
+ */
5371
+ voted_at: string;
5372
+ /**
5373
+ * @description Voter actor UUID.
5374
+ * @example aaaaaaaa-0000-0000-0000-000000000002
5375
+ */
5376
+ voter_actor_id: string;
5377
+ /**
5378
+ * @description Voter avatar URL.
5379
+ * @example https://...
5380
+ */
5381
+ voter_avatar_url: string | null;
5382
+ /**
5383
+ * @description Voter display name.
5384
+ * @example Bob
5385
+ */
5386
+ voter_display_name: string | null;
5387
+ /**
5388
+ * @description Voter's external_id.
5389
+ * @example bob
5390
+ */
5391
+ voter_external_id: string;
5392
+ };
5393
+ PollVotersResponse: {
5394
+ data: components["schemas"]["PollVoterResponse"][];
5395
+ pagination: components["schemas"]["PaginationResponseDto"];
5396
+ };
5397
+ PostInsightsResponseDto: {
5398
+ /** @example 34 */
5399
+ comment_count: number;
5400
+ /** @example cccccccc-cccc-cccc-cccc-cccccccccccc */
5401
+ community_id: string;
5402
+ daily: components["schemas"]["InsightsDailyBucketDto"][];
5403
+ /** @example bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb */
5404
+ post_id: string;
5405
+ /** @example 4 */
5406
+ quote_count: number;
5407
+ /** @example 128 */
5408
+ reaction_count: number;
5409
+ /** @example 9 */
5410
+ repost_count: number;
5411
+ /**
5412
+ * @description All-time distinct viewers.
5413
+ * @example 3110
5414
+ */
5415
+ unique_reach: number;
5416
+ /**
5417
+ * @description All-time total impressions.
5418
+ * @example 4820
5419
+ */
5420
+ views: number;
5421
+ };
4229
5422
  PostListResponseDto: {
4230
5423
  data: components["schemas"]["PostResponseDto"][];
4231
5424
  pagination: components["schemas"]["PaginationResponseDto"];
@@ -4267,6 +5460,8 @@ interface components {
4267
5460
  * @example aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
4268
5461
  */
4269
5462
  actor_id: string;
5463
+ /** @description Ordered image attachments (task 019). Ref-only; resolve renditions via GET /assets/:id. */
5464
+ assets: components["schemas"]["AssetAttachmentDto"][];
4270
5465
  /**
4271
5466
  * @description Free-form attributes blob (polls live at `attributes.poll`).
4272
5467
  * @example {}
@@ -4345,17 +5540,19 @@ interface components {
4345
5540
  * @example null
4346
5541
  */
4347
5542
  scheduled_for: string | null;
5543
+ /** @description Typed per-post interaction settings (comment policy, count hiding, repost/quote permission). Enforced server-side. */
5544
+ settings: components["schemas"]["PostSettingsDto"];
4348
5545
  /**
4349
5546
  * @description For kind='repost' / 'quote': the source post UUID.
4350
5547
  * @example null
4351
5548
  */
4352
5549
  source_post_id: string | null;
4353
5550
  /**
4354
- * @description Lifecycle status. Public list/feed surfaces only return `published`; `draft` and `scheduled` rows surface exclusively on the author-scoped drafts / scheduled-posts listings and author reads. `removed` rows are hidden from reads.
5551
+ * @description Lifecycle status. Public list/feed surfaces only return `published`; `draft`, `scheduled`, and `archived` rows surface exclusively on their author-scoped listings and author reads. `removed` rows are hidden from reads. `archived` keeps engagement but is author-only.
4355
5552
  * @example published
4356
5553
  * @enum {string}
4357
5554
  */
4358
- status: "published" | "hidden" | "removed" | "draft" | "scheduled";
5555
+ status: "published" | "hidden" | "removed" | "draft" | "scheduled" | "archived";
4359
5556
  /**
4360
5557
  * @description Optional title (1-240 chars).
4361
5558
  * @example Shipping Phase 8
@@ -4433,6 +5630,42 @@ interface components {
4433
5630
  /** @description Always `null` — this lane returns a single bounded, ranked page (no cursor in v1). Present for envelope consistency. */
4434
5631
  pagination: components["schemas"]["PaginationResponseDto"] | null;
4435
5632
  };
5633
+ PostSettingsDto: {
5634
+ /**
5635
+ * @description When false, quoting this post (kind='quote') is refused (422 QUOTE_NOT_ALLOWED).
5636
+ * @example true
5637
+ */
5638
+ allow_quote: boolean;
5639
+ /**
5640
+ * @description When false, reposting this post is refused (422 REPOST_NOT_ALLOWED).
5641
+ * @example true
5642
+ */
5643
+ allow_repost: boolean;
5644
+ /**
5645
+ * @description Who may comment. `everyone` (default), `followers`, `mentioned` (actors mentioned in the post body), or `off` (author only). Enforced server-side on comment create.
5646
+ * @example everyone
5647
+ * @enum {string}
5648
+ */
5649
+ comments: "everyone" | "followers" | "mentioned" | "off";
5650
+ /**
5651
+ * @description When true, `reaction_counts` is suppressed (emitted as `{}`) for everyone except the post author, on every read surface.
5652
+ * @example false
5653
+ */
5654
+ hide_reaction_counts: boolean;
5655
+ };
5656
+ PostSettingsInputDto: {
5657
+ /** @description Allow this post to be quoted. Default true. */
5658
+ allow_quote?: boolean;
5659
+ /** @description Allow this post to be reposted. Default true. */
5660
+ allow_repost?: boolean;
5661
+ /**
5662
+ * @description Who may comment. `everyone` (default), `followers`, `mentioned`, or `off` (author only).
5663
+ * @enum {string}
5664
+ */
5665
+ comments?: "everyone" | "followers" | "mentioned" | "off";
5666
+ /** @description Suppress reaction_counts for everyone except the author. Default false. */
5667
+ hide_reaction_counts?: boolean;
5668
+ };
4436
5669
  PostStateRequestDto: {
4437
5670
  /**
4438
5671
  * @description UUIDs of the posts to hydrate viewer state for. Capped at 200 (matches the batch-views precedent); ids that are unknown, removed, or from another community resolve to the empty state instead of failing the batch.
@@ -4447,6 +5680,49 @@ interface components {
4447
5680
  /** @description One entry per requested post id (de-duplicated, request order). Unknown / cross-community ids resolve to the empty state. */
4448
5681
  data: components["schemas"]["PostViewerStateEntryDto"][];
4449
5682
  };
5683
+ PostTagResponseDto: {
5684
+ /**
5685
+ * @description Owning community UUID.
5686
+ * @example cccccccc-cccc-cccc-cccc-cccccccccccc
5687
+ */
5688
+ community_id: string;
5689
+ /**
5690
+ * @description ISO timestamp the tag was created.
5691
+ * @example 2026-05-01T12:00:00.000Z
5692
+ */
5693
+ created_at: string;
5694
+ /**
5695
+ * @description Tag UUID.
5696
+ * @example ffffffff-0000-0000-0000-000000000001
5697
+ */
5698
+ id: string;
5699
+ /**
5700
+ * @description Opaque customer-defined metadata blob.
5701
+ * @example null
5702
+ */
5703
+ metadata: Record<string, never> | null;
5704
+ /**
5705
+ * @description Tagged post UUID.
5706
+ * @example bbbbbbbb-0000-0000-0000-000000000001
5707
+ */
5708
+ post_id: string;
5709
+ /**
5710
+ * @description Lifecycle state.
5711
+ * @example approved
5712
+ * @enum {string}
5713
+ */
5714
+ state: "pending" | "approved" | "removed";
5715
+ /**
5716
+ * @description Tagged actor UUID.
5717
+ * @example aaaaaaaa-0000-0000-0000-000000000002
5718
+ */
5719
+ tagged_actor_id: string;
5720
+ /**
5721
+ * @description ISO timestamp of the last state change.
5722
+ * @example 2026-05-01T12:05:00.000Z
5723
+ */
5724
+ updated_at: string;
5725
+ };
4450
5726
  PostViewerStateEntryDto: {
4451
5727
  /**
4452
5728
  * @description The viewer has bookmarked the post.
@@ -4566,6 +5842,12 @@ interface components {
4566
5842
  * ]
4567
5843
  */
4568
5844
  post_ids: string[];
5845
+ /**
5846
+ * Format: uuid
5847
+ * @description Optional viewer actor UUID (task 021). When present, the impressions count toward the post's unique reach (deduped per viewer/day); omit for anonymous views (which count total views but not reach).
5848
+ * @example aaaaaaaa-0000-0000-0000-000000000001
5849
+ */
5850
+ viewer_actor_id?: string;
4569
5851
  };
4570
5852
  RelationshipEntryDto: {
4571
5853
  /**
@@ -4588,6 +5870,11 @@ interface components {
4588
5870
  * @example aaaaaaaa-0000-0000-0000-000000000002
4589
5871
  */
4590
5872
  dst_actor_id: string;
5873
+ /**
5874
+ * @description The source actor has a pending follow request against this (private) actor (task 014).
5875
+ * @example false
5876
+ */
5877
+ follow_pending: boolean;
4591
5878
  /**
4592
5879
  * @description This actor follows the source actor.
4593
5880
  * @example false
@@ -4648,6 +5935,15 @@ interface components {
4648
5935
  /** @description New display name. Pass null or empty to clear. */
4649
5936
  name: string | null;
4650
5937
  };
5938
+ ReorderItemDto: {
5939
+ /** @example aaaaaaaa-0000-0000-0000-000000000001 */
5940
+ caller_actor_id: string;
5941
+ /**
5942
+ * @description New curator position.
5943
+ * @example 3
5944
+ */
5945
+ position: number;
5946
+ };
4651
5947
  RepostListResponseDto: {
4652
5948
  /** @description Page of repost post rows, each carrying the reposting actor_id. */
4653
5949
  data: components["schemas"]["PostResponseDto"][];
@@ -4659,6 +5955,8 @@ interface components {
4659
5955
  * @example aaaaaaaa-0000-0000-0000-000000000001
4660
5956
  */
4661
5957
  actor_id?: string;
5958
+ /** @description Ordered image attachments (task 019). Each references a `ready` asset in this community owned by the sender. Max 20. */
5959
+ assets?: components["schemas"]["AssetAttachmentInputDto"][];
4662
5960
  attachments?: components["schemas"]["DirectMessageAttachmentDto"][];
4663
5961
  /**
4664
5962
  * @description Message body. Required when `kind="text"`. 1..10000 chars after trim.
@@ -4772,6 +6070,10 @@ interface components {
4772
6070
  /** @description Always `null` — suggestions are a single bounded, scored page (no cursor in v1). Present for envelope consistency (task 008 / G13). */
4773
6071
  pagination: components["schemas"]["PaginationResponseDto"] | null;
4774
6072
  };
6073
+ TaggedPostsResponse: {
6074
+ data: components["schemas"]["PostResponseDto"][];
6075
+ pagination: components["schemas"]["PaginationResponseDto"];
6076
+ };
4775
6077
  UnreadCountResponse: {
4776
6078
  /**
4777
6079
  * @description Number of unread notifications for the actor.
@@ -4789,6 +6091,8 @@ interface components {
4789
6091
  UpdateActorDto: {
4790
6092
  avatar_url?: string | null;
4791
6093
  display_name?: string | null;
6094
+ /** @description Make the actor private (task 014). Caps effective post visibility at `followers`; following requires an approved request. Flipping back to public auto-approves pending requests. */
6095
+ is_private?: boolean;
4792
6096
  metadata?: Record<string, never>;
4793
6097
  /** @enum {string} */
4794
6098
  status?: "active" | "suspended" | "deleted";
@@ -4809,6 +6113,20 @@ interface components {
4809
6113
  */
4810
6114
  visibility?: "public" | "private";
4811
6115
  };
6116
+ UpdateCollectionDto: {
6117
+ /**
6118
+ * @description The caller — must be the owner.
6119
+ * @example aaaaaaaa-0000-0000-0000-000000000001
6120
+ */
6121
+ caller_actor_id: string;
6122
+ /** Format: uuid */
6123
+ cover_asset_id?: string | null;
6124
+ cover_url?: string | null;
6125
+ name?: string;
6126
+ position?: number;
6127
+ /** @enum {string} */
6128
+ visibility?: "public" | "private";
6129
+ };
4812
6130
  UpdateCommentDto: {
4813
6131
  /** @description Updated body. */
4814
6132
  body?: string;
@@ -4835,23 +6153,56 @@ interface components {
4835
6153
  */
4836
6154
  actor_id: string;
4837
6155
  /**
4838
- * @description Mute / unmute on the caller's participant row.
6156
+ * @deprecated
6157
+ * @description DEPRECATED (task 025): use PATCH /:id/members/:actorId. Mute / unmute indefinitely on the caller's participant row.
4839
6158
  * @example true
4840
6159
  */
4841
6160
  muted?: boolean;
6161
+ /**
6162
+ * @deprecated
6163
+ * @description DEPRECATED (task 025): use PATCH /:id/members/:actorId. Timed mute until this ISO timestamp; pass `null` to clear.
6164
+ * @example 2026-05-02T12:00:00Z
6165
+ */
6166
+ muted_until?: string | null;
6167
+ /**
6168
+ * @description Rename a group conversation (task 025) — group-only, admin-only. The canonical rename home, absorbing the deprecated PATCH /:id/name route.
6169
+ * @example Weekend plans
6170
+ */
6171
+ name?: string | null;
6172
+ /**
6173
+ * @deprecated
6174
+ * @description DEPRECATED (task 025): use PATCH /:id/members/:actorId. Pin / unpin the thread in the caller's inbox.
6175
+ * @example true
6176
+ */
6177
+ pinned?: boolean;
4842
6178
  };
4843
- UpdateMemberRoleDto: {
6179
+ UpdateMemberDto: {
4844
6180
  /**
4845
- * @description The admin performing the role change — social actor UUID.
6181
+ * @description The actor performing the change — social actor UUID.
4846
6182
  * @example aaaaaaaa-0000-0000-0000-000000000001
4847
6183
  */
4848
6184
  caller_actor_id: string;
4849
6185
  /**
4850
- * @description Target role.
6186
+ * @description Mute the thread indefinitely (self-only — caller must be the path actor). Task 024/025.
6187
+ * @example true
6188
+ */
6189
+ muted?: boolean;
6190
+ /**
6191
+ * @description Timed mute until this ISO timestamp (self-only). Pass null to clear.
6192
+ * @example 2026-05-02T12:00:00Z
6193
+ */
6194
+ muted_until?: string | null;
6195
+ /**
6196
+ * @description Pin / unpin the thread in the caller's inbox (self-only).
6197
+ * @example true
6198
+ */
6199
+ pinned?: boolean;
6200
+ /**
6201
+ * @description Target role (admin-only). Omit to leave unchanged.
4851
6202
  * @example admin
4852
6203
  * @enum {string}
4853
6204
  */
4854
- role: "member" | "admin";
6205
+ role?: "member" | "admin";
4855
6206
  };
4856
6207
  UpdateMessageDto: {
4857
6208
  /**
@@ -4896,11 +6247,20 @@ interface components {
4896
6247
  pinned?: boolean;
4897
6248
  /** @description ISO-8601 publish-at timestamp. Updating only valid while the post is `status="scheduled"`. Pass null to clear (typically only the scheduler does this on promotion). */
4898
6249
  scheduled_for?: string | null;
6250
+ /** @description Partial update of the per-post interaction settings. Only the keys you pass change; the rest keep their current value. */
6251
+ settings?: components["schemas"]["PostSettingsInputDto"];
4899
6252
  /**
4900
- * @description Direct status transition. Pass `published` to promote a `draft` or `scheduled`. Prefer the moderation lane for `hidden`/`removed`.
6253
+ * @description Direct status transition. Pass `published` to promote a `draft`/`scheduled` or restore an `archived` post; pass `archived` to hide-without-deleting (engagement kept). Prefer the moderation lane for `hidden`/`removed`.
4901
6254
  * @enum {string}
4902
6255
  */
4903
- status?: "published" | "hidden" | "removed" | "draft" | "scheduled";
6256
+ status?: "published" | "hidden" | "removed" | "draft" | "scheduled" | "archived";
6257
+ /**
6258
+ * @description Additional actor UUIDs to tag (task 011). Additive — creates new pending tags; never resets existing approved/removed tags. Max 30.
6259
+ * @example [
6260
+ * "aaaaaaaa-0000-0000-0000-000000000002"
6261
+ * ]
6262
+ */
6263
+ tags?: string[];
4904
6264
  /** @description Updated title. */
4905
6265
  title?: string | null;
4906
6266
  /** @description Updated URL. */
@@ -4915,10 +6275,21 @@ interface components {
4915
6275
  */
4916
6276
  disabled?: boolean;
4917
6277
  /** @description New subscription set. Unknown values are rejected with a 400 naming the valid set. */
4918
- event_types?: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created")[];
6278
+ event_types?: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "edge.follow.requested" | "edge.follow.request_approved" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created" | "tag.created" | "asset.ready" | "asset.failed")[];
4919
6279
  /** @description New subscriber URL. */
4920
6280
  url?: string;
4921
6281
  };
6282
+ UploadAssetResponseDto: {
6283
+ /** @example eeeeeeee-0000-0000-0000-000000000001 */
6284
+ id: string;
6285
+ /**
6286
+ * @example ready
6287
+ * @enum {string}
6288
+ */
6289
+ status: "uploading" | "processing" | "ready" | "failed";
6290
+ /** @description Present only on video creation — PUT the bytes here, then POST /assets/:id/complete. */
6291
+ upload?: components["schemas"]["AssetUploadDto"];
6292
+ };
4922
6293
  UpsertActorDto: {
4923
6294
  /**
4924
6295
  * @description Avatar URL.
@@ -4960,7 +6331,7 @@ interface components {
4960
6331
  * "comment.created"
4961
6332
  * ]
4962
6333
  */
4963
- data: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created")[];
6334
+ data: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "edge.follow.requested" | "edge.follow.request_approved" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created" | "tag.created" | "asset.ready" | "asset.failed")[];
4964
6335
  };
4965
6336
  WebhookListResponseDto: {
4966
6337
  /** @description Every webhook on the community — disabled rows included, so auto-disabled subscribers stay discoverable. */
@@ -4999,7 +6370,7 @@ interface components {
4999
6370
  * "comment.created"
5000
6371
  * ]
5001
6372
  */
5002
- event_types: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created")[];
6373
+ event_types: ("post.created" | "post.updated" | "post.deleted" | "post.reaction.created" | "repost.created" | "comment.created" | "comment.updated" | "comment.deleted" | "comment.reaction.created" | "edge.follow.created" | "edge.follow.deleted" | "edge.follow.requested" | "edge.follow.request_approved" | "flag.created" | "flag.updated" | "moderation.action.applied" | "actor.updated" | "dm.message.created" | "tag.created" | "asset.ready" | "asset.failed")[];
5003
6374
  /**
5004
6375
  * @description Webhook UUID.
5005
6376
  * @example wwwwwwww-0000-0000-0000-000000000001
@@ -5432,41 +6803,30 @@ interface operations {
5432
6803
  };
5433
6804
  };
5434
6805
  };
5435
- EdgeController_listBlocks: {
6806
+ DraftController_listArchived: {
5436
6807
  parameters: {
5437
6808
  query?: {
5438
6809
  limit?: number;
5439
6810
  cursor?: string;
5440
- /** @description Stripe-style expansion. Pass the response field to expand (supported here: `dst_actor`) and the full object is nested under that field on every item. Omit for the unexpanded (default) shape. Unsupported values return 400 `INVALID_EXPAND`. */
5441
- expand?: "dst_actor";
5442
6811
  };
5443
6812
  header?: never;
5444
6813
  path: {
5445
6814
  /** @description Social community UUID. Must belong to the PAK's workspace. */
5446
6815
  communityId: string;
5447
- /** @description Social actor UUID. */
6816
+ /** @description Social actor UUID whose archived posts to list. */
5448
6817
  actorId: string;
5449
6818
  };
5450
6819
  cookie?: never;
5451
6820
  };
5452
6821
  requestBody?: never;
5453
6822
  responses: {
5454
- /** @description Page of block edges. */
6823
+ /** @description Page of archived posts. */
5455
6824
  200: {
5456
6825
  headers: {
5457
6826
  [name: string]: unknown;
5458
6827
  };
5459
6828
  content: {
5460
- "application/json": components["schemas"]["OutboundEdgeListResponseDto"];
5461
- };
5462
- };
5463
- /** @description Invalid cursor (`INVALID_CURSOR`) — legacy raw-id cursors are rejected; restart from the first page and follow `pagination.next_cursor`. Or unsupported `expand` value (`INVALID_EXPAND`). */
5464
- 400: {
5465
- headers: {
5466
- [name: string]: unknown;
5467
- };
5468
- content: {
5469
- "application/json": components["schemas"]["ErrorResponseDto"];
6829
+ "application/json": components["schemas"]["DraftListResponseDto"];
5470
6830
  };
5471
6831
  };
5472
6832
  /** @description PAK lacks `social.list`. */
@@ -5489,34 +6849,33 @@ interface operations {
5489
6849
  };
5490
6850
  };
5491
6851
  };
5492
- BookmarkController_list: {
6852
+ AssetController_listByActor: {
5493
6853
  parameters: {
5494
6854
  query?: {
5495
6855
  limit?: number;
5496
- /** @description Opaque cursor from `pagination.next_cursor`. */
5497
6856
  cursor?: string;
5498
6857
  };
5499
6858
  header?: never;
5500
6859
  path: {
5501
- /** @description Social community UUID. Must belong to the PAK's workspace. */
6860
+ /** @description Community UUID. */
5502
6861
  communityId: string;
5503
- /** @description Social actor UUID. */
6862
+ /** @description Owner actor UUID. */
5504
6863
  actorId: string;
5505
6864
  };
5506
6865
  cookie?: never;
5507
6866
  };
5508
6867
  requestBody?: never;
5509
6868
  responses: {
5510
- /** @description Page of bookmarks. */
6869
+ /** @description Page of the actor's assets. */
5511
6870
  200: {
5512
6871
  headers: {
5513
6872
  [name: string]: unknown;
5514
6873
  };
5515
6874
  content: {
5516
- "application/json": components["schemas"]["BookmarkListResponseDto"];
6875
+ "application/json": components["schemas"]["AssetListResponseDto"];
5517
6876
  };
5518
6877
  };
5519
- /** @description PAK lacks `social.list`. */
6878
+ /** @description PAK lacks `social.assets.read`. */
5520
6879
  403: {
5521
6880
  headers: {
5522
6881
  [name: string]: unknown;
@@ -5525,44 +6884,37 @@ interface operations {
5525
6884
  "application/json": components["schemas"]["ErrorResponseDto"];
5526
6885
  };
5527
6886
  };
5528
- /** @description Community or actor not found (or belongs to a different community). */
5529
- 404: {
5530
- headers: {
5531
- [name: string]: unknown;
5532
- };
5533
- content: {
5534
- "application/json": components["schemas"]["ErrorResponseDto"];
5535
- };
5536
- };
5537
6887
  };
5538
6888
  };
5539
- StoryController_listCloseFriends: {
6889
+ EdgeController_listBlocks: {
5540
6890
  parameters: {
5541
6891
  query?: {
5542
6892
  limit?: number;
5543
6893
  cursor?: string;
6894
+ /** @description Stripe-style expansion. Pass the response field to expand (supported here: `dst_actor`) and the full object is nested under that field on every item. Omit for the unexpanded (default) shape. Unsupported values return 400 `INVALID_EXPAND`. */
6895
+ expand?: "dst_actor";
5544
6896
  };
5545
6897
  header?: never;
5546
6898
  path: {
5547
- /** @description Community UUID. */
6899
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
5548
6900
  communityId: string;
5549
- /** @description Owner social actor UUID. */
6901
+ /** @description Social actor UUID. */
5550
6902
  actorId: string;
5551
6903
  };
5552
6904
  cookie?: never;
5553
6905
  };
5554
6906
  requestBody?: never;
5555
6907
  responses: {
5556
- /** @description Page of close friends. */
6908
+ /** @description Page of block edges. */
5557
6909
  200: {
5558
6910
  headers: {
5559
6911
  [name: string]: unknown;
5560
6912
  };
5561
6913
  content: {
5562
- "application/json": components["schemas"]["CloseFriendsListResponse"];
6914
+ "application/json": components["schemas"]["OutboundEdgeListResponseDto"];
5563
6915
  };
5564
6916
  };
5565
- /** @description Invalid cursor (`INVALID_CURSOR`) — legacy raw-id cursors are rejected; restart from the first page and follow `pagination.next_cursor`. */
6917
+ /** @description Invalid cursor (`INVALID_CURSOR`) — legacy raw-id cursors are rejected; restart from the first page and follow `pagination.next_cursor`. Or unsupported `expand` value (`INVALID_EXPAND`). */
5566
6918
  400: {
5567
6919
  headers: {
5568
6920
  [name: string]: unknown;
@@ -5571,7 +6923,7 @@ interface operations {
5571
6923
  "application/json": components["schemas"]["ErrorResponseDto"];
5572
6924
  };
5573
6925
  };
5574
- /** @description PAK lacks `social.close-friend.read`. */
6926
+ /** @description PAK lacks `social.list`. */
5575
6927
  403: {
5576
6928
  headers: {
5577
6929
  [name: string]: unknown;
@@ -5591,30 +6943,34 @@ interface operations {
5591
6943
  };
5592
6944
  };
5593
6945
  };
5594
- CounterController_getCounters: {
6946
+ BookmarkController_list: {
5595
6947
  parameters: {
5596
- query?: never;
6948
+ query?: {
6949
+ limit?: number;
6950
+ /** @description Opaque cursor from `pagination.next_cursor`. */
6951
+ cursor?: string;
6952
+ };
5597
6953
  header?: never;
5598
6954
  path: {
5599
6955
  /** @description Social community UUID. Must belong to the PAK's workspace. */
5600
6956
  communityId: string;
5601
- /** @description Social actor UUID (returned from POST /actors). */
6957
+ /** @description Social actor UUID. */
5602
6958
  actorId: string;
5603
6959
  };
5604
6960
  cookie?: never;
5605
6961
  };
5606
6962
  requestBody?: never;
5607
6963
  responses: {
5608
- /** @description Counters for the actor. */
6964
+ /** @description Page of bookmarks. */
5609
6965
  200: {
5610
6966
  headers: {
5611
6967
  [name: string]: unknown;
5612
6968
  };
5613
6969
  content: {
5614
- "application/json": components["schemas"]["ActorCountersResponseDto"];
6970
+ "application/json": components["schemas"]["BookmarkListResponseDto"];
5615
6971
  };
5616
6972
  };
5617
- /** @description PAK lacks `social.read`. */
6973
+ /** @description PAK lacks `social.list`. */
5618
6974
  403: {
5619
6975
  headers: {
5620
6976
  [name: string]: unknown;
@@ -5623,7 +6979,7 @@ interface operations {
5623
6979
  "application/json": components["schemas"]["ErrorResponseDto"];
5624
6980
  };
5625
6981
  };
5626
- /** @description Not found (or belongs to a different community / workspace). */
6982
+ /** @description Community or actor not found (or belongs to a different community). */
5627
6983
  404: {
5628
6984
  headers: {
5629
6985
  [name: string]: unknown;
@@ -5634,7 +6990,135 @@ interface operations {
5634
6990
  };
5635
6991
  };
5636
6992
  };
5637
- DraftController_listDrafts: {
6993
+ StoryController_listCloseFriends: {
6994
+ parameters: {
6995
+ query?: {
6996
+ limit?: number;
6997
+ cursor?: string;
6998
+ };
6999
+ header?: never;
7000
+ path: {
7001
+ /** @description Community UUID. */
7002
+ communityId: string;
7003
+ /** @description Owner social actor UUID. */
7004
+ actorId: string;
7005
+ };
7006
+ cookie?: never;
7007
+ };
7008
+ requestBody?: never;
7009
+ responses: {
7010
+ /** @description Page of close friends. */
7011
+ 200: {
7012
+ headers: {
7013
+ [name: string]: unknown;
7014
+ };
7015
+ content: {
7016
+ "application/json": components["schemas"]["CloseFriendsListResponse"];
7017
+ };
7018
+ };
7019
+ /** @description Invalid cursor (`INVALID_CURSOR`) — legacy raw-id cursors are rejected; restart from the first page and follow `pagination.next_cursor`. */
7020
+ 400: {
7021
+ headers: {
7022
+ [name: string]: unknown;
7023
+ };
7024
+ content: {
7025
+ "application/json": components["schemas"]["ErrorResponseDto"];
7026
+ };
7027
+ };
7028
+ /** @description PAK lacks `social.close-friend.read`. */
7029
+ 403: {
7030
+ headers: {
7031
+ [name: string]: unknown;
7032
+ };
7033
+ content: {
7034
+ "application/json": components["schemas"]["ErrorResponseDto"];
7035
+ };
7036
+ };
7037
+ /** @description Community or actor not found. */
7038
+ 404: {
7039
+ headers: {
7040
+ [name: string]: unknown;
7041
+ };
7042
+ content: {
7043
+ "application/json": components["schemas"]["ErrorResponseDto"];
7044
+ };
7045
+ };
7046
+ };
7047
+ };
7048
+ CounterController_getCounters: {
7049
+ parameters: {
7050
+ query?: never;
7051
+ header?: never;
7052
+ path: {
7053
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
7054
+ communityId: string;
7055
+ /** @description Social actor UUID (returned from POST /actors). */
7056
+ actorId: string;
7057
+ };
7058
+ cookie?: never;
7059
+ };
7060
+ requestBody?: never;
7061
+ responses: {
7062
+ /** @description Counters for the actor. */
7063
+ 200: {
7064
+ headers: {
7065
+ [name: string]: unknown;
7066
+ };
7067
+ content: {
7068
+ "application/json": components["schemas"]["ActorCountersResponseDto"];
7069
+ };
7070
+ };
7071
+ /** @description PAK lacks `social.read`. */
7072
+ 403: {
7073
+ headers: {
7074
+ [name: string]: unknown;
7075
+ };
7076
+ content: {
7077
+ "application/json": components["schemas"]["ErrorResponseDto"];
7078
+ };
7079
+ };
7080
+ /** @description Not found (or belongs to a different community / workspace). */
7081
+ 404: {
7082
+ headers: {
7083
+ [name: string]: unknown;
7084
+ };
7085
+ content: {
7086
+ "application/json": components["schemas"]["ErrorResponseDto"];
7087
+ };
7088
+ };
7089
+ };
7090
+ };
7091
+ EdgeController_listDismissedSuggestions: {
7092
+ parameters: {
7093
+ query?: {
7094
+ limit?: number;
7095
+ cursor?: string;
7096
+ /** @description Stripe-style expansion. Pass the response field to expand (supported here: `dst_actor`) and the full object is nested under that field on every item. Omit for the unexpanded (default) shape. Unsupported values return 400 `INVALID_EXPAND`. */
7097
+ expand?: "dst_actor";
7098
+ };
7099
+ header?: never;
7100
+ path: {
7101
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
7102
+ communityId: string;
7103
+ /** @description Social actor UUID. */
7104
+ actorId: string;
7105
+ };
7106
+ cookie?: never;
7107
+ };
7108
+ requestBody?: never;
7109
+ responses: {
7110
+ /** @description Page of dismissed-suggestion edges. */
7111
+ 200: {
7112
+ headers: {
7113
+ [name: string]: unknown;
7114
+ };
7115
+ content: {
7116
+ "application/json": components["schemas"]["OutboundEdgeListResponseDto"];
7117
+ };
7118
+ };
7119
+ };
7120
+ };
7121
+ DraftController_listDrafts: {
5638
7122
  parameters: {
5639
7123
  query?: {
5640
7124
  limit?: number;
@@ -5738,6 +7222,43 @@ interface operations {
5738
7222
  };
5739
7223
  };
5740
7224
  };
7225
+ EdgeController_listIncomingRequests: {
7226
+ parameters: {
7227
+ query?: {
7228
+ limit?: number;
7229
+ cursor?: string;
7230
+ };
7231
+ header?: never;
7232
+ path: {
7233
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
7234
+ communityId: string;
7235
+ /** @description The private actor whose incoming requests to list. */
7236
+ actorId: string;
7237
+ };
7238
+ cookie?: never;
7239
+ };
7240
+ requestBody?: never;
7241
+ responses: {
7242
+ /** @description Page of incoming follow requests. */
7243
+ 200: {
7244
+ headers: {
7245
+ [name: string]: unknown;
7246
+ };
7247
+ content: {
7248
+ "application/json": components["schemas"]["FollowRequestListResponseDto"];
7249
+ };
7250
+ };
7251
+ /** @description Community or actor not found. */
7252
+ 404: {
7253
+ headers: {
7254
+ [name: string]: unknown;
7255
+ };
7256
+ content: {
7257
+ "application/json": components["schemas"]["ErrorResponseDto"];
7258
+ };
7259
+ };
7260
+ };
7261
+ };
5741
7262
  EdgeController_listFollowers: {
5742
7263
  parameters: {
5743
7264
  query?: {
@@ -6006,6 +7527,34 @@ interface operations {
6006
7527
  };
6007
7528
  };
6008
7529
  };
7530
+ EdgeController_listHides: {
7531
+ parameters: {
7532
+ query?: {
7533
+ limit?: number;
7534
+ cursor?: string;
7535
+ };
7536
+ header?: never;
7537
+ path: {
7538
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
7539
+ communityId: string;
7540
+ /** @description Social actor UUID. */
7541
+ actorId: string;
7542
+ };
7543
+ cookie?: never;
7544
+ };
7545
+ requestBody?: never;
7546
+ responses: {
7547
+ /** @description Page of hidden posts. */
7548
+ 200: {
7549
+ headers: {
7550
+ [name: string]: unknown;
7551
+ };
7552
+ content: {
7553
+ "application/json": components["schemas"]["HideListResponseDto"];
7554
+ };
7555
+ };
7556
+ };
7557
+ };
6009
7558
  StoryController_getHighlights: {
6010
7559
  parameters: {
6011
7560
  query?: {
@@ -6061,6 +7610,60 @@ interface operations {
6061
7610
  };
6062
7611
  };
6063
7612
  };
7613
+ InsightsController_actorInsights: {
7614
+ parameters: {
7615
+ query?: {
7616
+ from?: string;
7617
+ to?: string;
7618
+ };
7619
+ header?: never;
7620
+ path: {
7621
+ /** @description Social community UUID. */
7622
+ communityId: string;
7623
+ actorId: string;
7624
+ };
7625
+ cookie?: never;
7626
+ };
7627
+ requestBody?: never;
7628
+ responses: {
7629
+ /** @description Actor insights. */
7630
+ 200: {
7631
+ headers: {
7632
+ [name: string]: unknown;
7633
+ };
7634
+ content: {
7635
+ "application/json": components["schemas"]["ActorInsightsResponseDto"];
7636
+ };
7637
+ };
7638
+ /** @description Invalid window. */
7639
+ 400: {
7640
+ headers: {
7641
+ [name: string]: unknown;
7642
+ };
7643
+ content: {
7644
+ "application/json": components["schemas"]["ErrorResponseDto"];
7645
+ };
7646
+ };
7647
+ /** @description PAK lacks `social.analytics.read`. */
7648
+ 403: {
7649
+ headers: {
7650
+ [name: string]: unknown;
7651
+ };
7652
+ content: {
7653
+ "application/json": components["schemas"]["ErrorResponseDto"];
7654
+ };
7655
+ };
7656
+ /** @description Actor not found in this community. */
7657
+ 404: {
7658
+ headers: {
7659
+ [name: string]: unknown;
7660
+ };
7661
+ content: {
7662
+ "application/json": components["schemas"]["ErrorResponseDto"];
7663
+ };
7664
+ };
7665
+ };
7666
+ };
6064
7667
  MentionController_list: {
6065
7668
  parameters: {
6066
7669
  query?: {
@@ -6365,7 +7968,7 @@ interface operations {
6365
7968
  /** @description Social actor UUID. */
6366
7969
  actorId: string;
6367
7970
  /** @description NotificationKind label. */
6368
- kind: "follow" | "reaction" | "comment_on_post" | "reply_to_comment" | "mention" | "vote" | "repost" | "quote_post" | "dm_new_message" | "dm_added_to_group" | "dm_role_changed" | "dm_reaction";
7971
+ kind: "follow" | "reaction" | "comment_on_post" | "reply_to_comment" | "mention" | "vote" | "repost" | "quote_post" | "dm_new_message" | "dm_added_to_group" | "dm_role_changed" | "dm_reaction" | "tag" | "follow_request" | "follow_request_approved";
6369
7972
  };
6370
7973
  cookie?: never;
6371
7974
  };
@@ -6868,43 +8471,80 @@ interface operations {
6868
8471
  };
6869
8472
  };
6870
8473
  };
6871
- EdgeController_relationships: {
8474
+ PostTagController_listTagged: {
6872
8475
  parameters: {
6873
- query: {
6874
- /** @description Comma-separated destination actor UUIDs (1-100). */
6875
- with: string;
8476
+ query?: {
8477
+ /** @description Viewer actor UUID for visibility resolution. */
8478
+ requester_id?: string;
8479
+ limit?: number;
8480
+ cursor?: string;
6876
8481
  };
6877
8482
  header?: never;
6878
8483
  path: {
6879
- /** @description Social community UUID. Must belong to the PAK's workspace. */
8484
+ /** @description Community UUID. */
6880
8485
  communityId: string;
6881
- /** @description Source actor UUID — the perspective all flags are computed from. */
6882
- srcActorId: string;
8486
+ /** @description The tagged actor UUID. */
8487
+ actorId: string;
6883
8488
  };
6884
8489
  cookie?: never;
6885
8490
  };
6886
8491
  requestBody?: never;
6887
8492
  responses: {
6888
- /** @description One relationship entry per requested id. */
8493
+ /** @description Page of tagged posts. */
6889
8494
  200: {
6890
8495
  headers: {
6891
8496
  [name: string]: unknown;
6892
8497
  };
6893
8498
  content: {
6894
- "application/json": components["schemas"]["RelationshipListResponseDto"];
8499
+ "application/json": components["schemas"]["TaggedPostsResponse"];
6895
8500
  };
6896
8501
  };
6897
- /** @description Missing `with`, more than 100 ids, or a non-UUID value in the list. */
6898
- 400: {
8502
+ /** @description Community or actor not found. */
8503
+ 404: {
6899
8504
  headers: {
6900
8505
  [name: string]: unknown;
6901
8506
  };
6902
- content: {
6903
- "application/json": components["schemas"]["ErrorResponseDto"];
6904
- };
8507
+ content?: never;
6905
8508
  };
6906
- /** @description PAK lacks `social.list`. */
6907
- 403: {
8509
+ };
8510
+ };
8511
+ EdgeController_relationships: {
8512
+ parameters: {
8513
+ query: {
8514
+ /** @description Comma-separated destination actor UUIDs (1-100). */
8515
+ with: string;
8516
+ };
8517
+ header?: never;
8518
+ path: {
8519
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
8520
+ communityId: string;
8521
+ /** @description Source actor UUID — the perspective all flags are computed from. */
8522
+ srcActorId: string;
8523
+ };
8524
+ cookie?: never;
8525
+ };
8526
+ requestBody?: never;
8527
+ responses: {
8528
+ /** @description One relationship entry per requested id. */
8529
+ 200: {
8530
+ headers: {
8531
+ [name: string]: unknown;
8532
+ };
8533
+ content: {
8534
+ "application/json": components["schemas"]["RelationshipListResponseDto"];
8535
+ };
8536
+ };
8537
+ /** @description Missing `with`, more than 100 ids, or a non-UUID value in the list. */
8538
+ 400: {
8539
+ headers: {
8540
+ [name: string]: unknown;
8541
+ };
8542
+ content: {
8543
+ "application/json": components["schemas"]["ErrorResponseDto"];
8544
+ };
8545
+ };
8546
+ /** @description PAK lacks `social.list`. */
8547
+ 403: {
6908
8548
  headers: {
6909
8549
  [name: string]: unknown;
6910
8550
  };
@@ -6923,6 +8563,261 @@ interface operations {
6923
8563
  };
6924
8564
  };
6925
8565
  };
8566
+ AssetController_upload: {
8567
+ parameters: {
8568
+ query?: never;
8569
+ header?: {
8570
+ /** @description Makes retries safe. */
8571
+ "Idempotency-Key"?: string;
8572
+ };
8573
+ path: {
8574
+ /** @description Community UUID. */
8575
+ communityId: string;
8576
+ };
8577
+ cookie?: never;
8578
+ };
8579
+ requestBody: {
8580
+ content: {
8581
+ "application/json": {
8582
+ /** @description Video path: declared size in bytes (≤512 MB). */
8583
+ byte_size?: number;
8584
+ /**
8585
+ * @description Video path: declared container type.
8586
+ * @enum {string}
8587
+ */
8588
+ content_type?: "video/mp4" | "video/quicktime" | "video/webm";
8589
+ /**
8590
+ * Format: binary
8591
+ * @description PNG / JPEG / WEBP, ≤10 MB — image path (multipart) only.
8592
+ */
8593
+ file?: string;
8594
+ /**
8595
+ * @description Pass 'video' (JSON body) for the presigned-PUT flow.
8596
+ * @default image
8597
+ * @enum {string}
8598
+ */
8599
+ kind?: "image" | "video";
8600
+ /** Format: uuid */
8601
+ owner_actor_id: string;
8602
+ };
8603
+ "multipart/form-data": {
8604
+ /** @description Video path: declared size in bytes (≤512 MB). */
8605
+ byte_size?: number;
8606
+ /**
8607
+ * @description Video path: declared container type.
8608
+ * @enum {string}
8609
+ */
8610
+ content_type?: "video/mp4" | "video/quicktime" | "video/webm";
8611
+ /**
8612
+ * Format: binary
8613
+ * @description PNG / JPEG / WEBP, ≤10 MB — image path (multipart) only.
8614
+ */
8615
+ file?: string;
8616
+ /**
8617
+ * @description Pass 'video' (JSON body) for the presigned-PUT flow.
8618
+ * @default image
8619
+ * @enum {string}
8620
+ */
8621
+ kind?: "image" | "video";
8622
+ /** Format: uuid */
8623
+ owner_actor_id: string;
8624
+ };
8625
+ };
8626
+ };
8627
+ responses: {
8628
+ /** @description Image stored and ready, or video created in `uploading` with `upload` instructions. */
8629
+ 201: {
8630
+ headers: {
8631
+ [name: string]: unknown;
8632
+ };
8633
+ content: {
8634
+ "application/json": components["schemas"]["UploadAssetResponseDto"];
8635
+ };
8636
+ };
8637
+ /** @description Missing/oversize/wrong-type file or declaration, or the bytes do not match the declared image type. */
8638
+ 400: {
8639
+ headers: {
8640
+ [name: string]: unknown;
8641
+ };
8642
+ content: {
8643
+ "application/json": components["schemas"]["ErrorResponseDto"];
8644
+ };
8645
+ };
8646
+ /** @description PAK lacks `social.assets.write`. */
8647
+ 403: {
8648
+ headers: {
8649
+ [name: string]: unknown;
8650
+ };
8651
+ content: {
8652
+ "application/json": components["schemas"]["ErrorResponseDto"];
8653
+ };
8654
+ };
8655
+ /** @description Community or owner actor not found. */
8656
+ 404: {
8657
+ headers: {
8658
+ [name: string]: unknown;
8659
+ };
8660
+ content: {
8661
+ "application/json": components["schemas"]["ErrorResponseDto"];
8662
+ };
8663
+ };
8664
+ /** @description The image could not be decoded/processed. */
8665
+ 422: {
8666
+ headers: {
8667
+ [name: string]: unknown;
8668
+ };
8669
+ content: {
8670
+ "application/json": components["schemas"]["ErrorResponseDto"];
8671
+ };
8672
+ };
8673
+ /** @description `TOO_MANY_ACTIVE_UPLOADS` — the community already has the max videos uploading/processing. */
8674
+ 429: {
8675
+ headers: {
8676
+ [name: string]: unknown;
8677
+ };
8678
+ content: {
8679
+ "application/json": components["schemas"]["ErrorResponseDto"];
8680
+ };
8681
+ };
8682
+ };
8683
+ };
8684
+ AssetController_get: {
8685
+ parameters: {
8686
+ query?: never;
8687
+ header?: never;
8688
+ path: {
8689
+ /** @description Community UUID. */
8690
+ communityId: string;
8691
+ assetId: string;
8692
+ };
8693
+ cookie?: never;
8694
+ };
8695
+ requestBody?: never;
8696
+ responses: {
8697
+ /** @description The asset. */
8698
+ 200: {
8699
+ headers: {
8700
+ [name: string]: unknown;
8701
+ };
8702
+ content: {
8703
+ "application/json": components["schemas"]["AssetResponseDto"];
8704
+ };
8705
+ };
8706
+ /** @description PAK lacks `social.assets.read`. */
8707
+ 403: {
8708
+ headers: {
8709
+ [name: string]: unknown;
8710
+ };
8711
+ content: {
8712
+ "application/json": components["schemas"]["ErrorResponseDto"];
8713
+ };
8714
+ };
8715
+ /** @description Asset not found in this community. */
8716
+ 404: {
8717
+ headers: {
8718
+ [name: string]: unknown;
8719
+ };
8720
+ content: {
8721
+ "application/json": components["schemas"]["ErrorResponseDto"];
8722
+ };
8723
+ };
8724
+ };
8725
+ };
8726
+ AssetController_delete: {
8727
+ parameters: {
8728
+ query?: never;
8729
+ header?: never;
8730
+ path: {
8731
+ /** @description Community UUID. */
8732
+ communityId: string;
8733
+ assetId: string;
8734
+ };
8735
+ cookie?: never;
8736
+ };
8737
+ requestBody?: never;
8738
+ responses: {
8739
+ /** @description Asset deleted. */
8740
+ 204: {
8741
+ headers: {
8742
+ [name: string]: unknown;
8743
+ };
8744
+ content?: never;
8745
+ };
8746
+ /** @description PAK lacks `social.assets.write`. */
8747
+ 403: {
8748
+ headers: {
8749
+ [name: string]: unknown;
8750
+ };
8751
+ content: {
8752
+ "application/json": components["schemas"]["ErrorResponseDto"];
8753
+ };
8754
+ };
8755
+ /** @description Asset not found in this community. */
8756
+ 404: {
8757
+ headers: {
8758
+ [name: string]: unknown;
8759
+ };
8760
+ content: {
8761
+ "application/json": components["schemas"]["ErrorResponseDto"];
8762
+ };
8763
+ };
8764
+ };
8765
+ };
8766
+ AssetController_complete: {
8767
+ parameters: {
8768
+ query?: never;
8769
+ header?: {
8770
+ /** @description Makes retries safe. */
8771
+ "Idempotency-Key"?: string;
8772
+ };
8773
+ path: {
8774
+ /** @description Community UUID. */
8775
+ communityId: string;
8776
+ /** @description Video asset UUID (status `uploading`). */
8777
+ assetId: string;
8778
+ };
8779
+ cookie?: never;
8780
+ };
8781
+ requestBody?: never;
8782
+ responses: {
8783
+ /** @description Finalized (`processing`) — or the current status on replay. */
8784
+ 200: {
8785
+ headers: {
8786
+ [name: string]: unknown;
8787
+ };
8788
+ content: {
8789
+ "application/json": components["schemas"]["UploadAssetResponseDto"];
8790
+ };
8791
+ };
8792
+ /** @description PAK lacks `social.assets.write`. */
8793
+ 403: {
8794
+ headers: {
8795
+ [name: string]: unknown;
8796
+ };
8797
+ content: {
8798
+ "application/json": components["schemas"]["ErrorResponseDto"];
8799
+ };
8800
+ };
8801
+ /** @description Asset not found in this community. */
8802
+ 404: {
8803
+ headers: {
8804
+ [name: string]: unknown;
8805
+ };
8806
+ content: {
8807
+ "application/json": components["schemas"]["ErrorResponseDto"];
8808
+ };
8809
+ };
8810
+ /** @description `ASSET_UPLOAD_INCOMPLETE` (no object / size mismatch — still retryable), `ASSET_TOO_LARGE` or `ASSET_INVALID_CONTAINER` (upload failed + object deleted), or `ASSET_NOT_VIDEO`. */
8811
+ 422: {
8812
+ headers: {
8813
+ [name: string]: unknown;
8814
+ };
8815
+ content: {
8816
+ "application/json": components["schemas"]["ErrorResponseDto"];
8817
+ };
8818
+ };
8819
+ };
8820
+ };
6926
8821
  EdgeController_block: {
6927
8822
  parameters: {
6928
8823
  query?: never;
@@ -6972,11 +8867,434 @@ interface operations {
6972
8867
  [name: string]: unknown;
6973
8868
  };
6974
8869
  content: {
6975
- "application/json": components["schemas"]["ErrorResponseDto"];
8870
+ "application/json": components["schemas"]["ErrorResponseDto"];
8871
+ };
8872
+ };
8873
+ /** @description Cannot block yourself. */
8874
+ 422: {
8875
+ headers: {
8876
+ [name: string]: unknown;
8877
+ };
8878
+ content: {
8879
+ "application/json": components["schemas"]["ErrorResponseDto"];
8880
+ };
8881
+ };
8882
+ };
8883
+ };
8884
+ EdgeController_unblock: {
8885
+ parameters: {
8886
+ query?: never;
8887
+ header?: never;
8888
+ path: {
8889
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
8890
+ communityId: string;
8891
+ /** @description Blocker actor UUID. */
8892
+ srcActorId: string;
8893
+ /** @description Blockee actor UUID. */
8894
+ dstActorId: string;
8895
+ };
8896
+ cookie?: never;
8897
+ };
8898
+ requestBody?: never;
8899
+ responses: {
8900
+ /** @description Unblocked (or no edge to remove). */
8901
+ 204: {
8902
+ headers: {
8903
+ [name: string]: unknown;
8904
+ };
8905
+ content?: never;
8906
+ };
8907
+ /** @description PAK lacks `social.delete`. */
8908
+ 403: {
8909
+ headers: {
8910
+ [name: string]: unknown;
8911
+ };
8912
+ content: {
8913
+ "application/json": components["schemas"]["ErrorResponseDto"];
8914
+ };
8915
+ };
8916
+ /** @description Community or actor not found. */
8917
+ 404: {
8918
+ headers: {
8919
+ [name: string]: unknown;
8920
+ };
8921
+ content: {
8922
+ "application/json": components["schemas"]["ErrorResponseDto"];
8923
+ };
8924
+ };
8925
+ };
8926
+ };
8927
+ StoryController_addCloseFriend: {
8928
+ parameters: {
8929
+ query?: never;
8930
+ header?: never;
8931
+ path: {
8932
+ /** @description Community UUID. */
8933
+ communityId: string;
8934
+ };
8935
+ cookie?: never;
8936
+ };
8937
+ requestBody: {
8938
+ content: {
8939
+ "application/json": components["schemas"]["CreateCloseFriendDto"];
8940
+ };
8941
+ };
8942
+ responses: {
8943
+ /** @description Member added (or already present). */
8944
+ 204: {
8945
+ headers: {
8946
+ [name: string]: unknown;
8947
+ };
8948
+ content?: never;
8949
+ };
8950
+ /** @description Body validation failed. */
8951
+ 400: {
8952
+ headers: {
8953
+ [name: string]: unknown;
8954
+ };
8955
+ content: {
8956
+ "application/json": components["schemas"]["ErrorResponseDto"];
8957
+ };
8958
+ };
8959
+ /** @description PAK lacks `social.close-friend.manage`. */
8960
+ 403: {
8961
+ headers: {
8962
+ [name: string]: unknown;
8963
+ };
8964
+ content: {
8965
+ "application/json": components["schemas"]["ErrorResponseDto"];
8966
+ };
8967
+ };
8968
+ /** @description Community / owner / member not found. */
8969
+ 404: {
8970
+ headers: {
8971
+ [name: string]: unknown;
8972
+ };
8973
+ content: {
8974
+ "application/json": components["schemas"]["ErrorResponseDto"];
8975
+ };
8976
+ };
8977
+ /** @description Block in place between owner and member. */
8978
+ 409: {
8979
+ headers: {
8980
+ [name: string]: unknown;
8981
+ };
8982
+ content: {
8983
+ "application/json": components["schemas"]["ErrorResponseDto"];
8984
+ };
8985
+ };
8986
+ /** @description Cannot add yourself as a close friend. */
8987
+ 422: {
8988
+ headers: {
8989
+ [name: string]: unknown;
8990
+ };
8991
+ content: {
8992
+ "application/json": components["schemas"]["ErrorResponseDto"];
8993
+ };
8994
+ };
8995
+ };
8996
+ };
8997
+ StoryController_removeCloseFriend: {
8998
+ parameters: {
8999
+ query?: never;
9000
+ header?: never;
9001
+ path: {
9002
+ /** @description Community UUID. */
9003
+ communityId: string;
9004
+ /** @description Owner social actor UUID. */
9005
+ ownerActorId: string;
9006
+ /** @description Member social actor UUID. */
9007
+ memberActorId: string;
9008
+ };
9009
+ cookie?: never;
9010
+ };
9011
+ requestBody?: never;
9012
+ responses: {
9013
+ /** @description Removed (or was not in the list). */
9014
+ 204: {
9015
+ headers: {
9016
+ [name: string]: unknown;
9017
+ };
9018
+ content?: never;
9019
+ };
9020
+ /** @description PAK lacks `social.close-friend.manage`. */
9021
+ 403: {
9022
+ headers: {
9023
+ [name: string]: unknown;
9024
+ };
9025
+ content: {
9026
+ "application/json": components["schemas"]["ErrorResponseDto"];
9027
+ };
9028
+ };
9029
+ /** @description Community not found. */
9030
+ 404: {
9031
+ headers: {
9032
+ [name: string]: unknown;
9033
+ };
9034
+ content: {
9035
+ "application/json": components["schemas"]["ErrorResponseDto"];
9036
+ };
9037
+ };
9038
+ };
9039
+ };
9040
+ CollectionController_list: {
9041
+ parameters: {
9042
+ query?: {
9043
+ /** @description Viewer actor — surfaces their own private collections. */
9044
+ actor_id?: string;
9045
+ owner_actor_id?: string;
9046
+ kind?: "bookmark" | "highlight";
9047
+ limit?: number;
9048
+ cursor?: string;
9049
+ };
9050
+ header?: never;
9051
+ path: {
9052
+ /** @description Social community UUID. */
9053
+ communityId: string;
9054
+ };
9055
+ cookie?: never;
9056
+ };
9057
+ requestBody?: never;
9058
+ responses: {
9059
+ /** @description Page of collections. */
9060
+ 200: {
9061
+ headers: {
9062
+ [name: string]: unknown;
9063
+ };
9064
+ content: {
9065
+ "application/json": components["schemas"]["CollectionListResponseDto"];
9066
+ };
9067
+ };
9068
+ };
9069
+ };
9070
+ CollectionController_create: {
9071
+ parameters: {
9072
+ query?: never;
9073
+ header?: {
9074
+ /** @description Opaque client string; replays return the original response. */
9075
+ "Idempotency-Key"?: string;
9076
+ };
9077
+ path: {
9078
+ /** @description Social community UUID. */
9079
+ communityId: string;
9080
+ };
9081
+ cookie?: never;
9082
+ };
9083
+ requestBody: {
9084
+ content: {
9085
+ "application/json": components["schemas"]["CreateCollectionDto"];
9086
+ };
9087
+ };
9088
+ responses: {
9089
+ /** @description Collection created. */
9090
+ 201: {
9091
+ headers: {
9092
+ [name: string]: unknown;
9093
+ };
9094
+ content: {
9095
+ "application/json": components["schemas"]["CollectionResponseDto"];
9096
+ };
9097
+ };
9098
+ /** @description Validation failure. */
9099
+ 400: {
9100
+ headers: {
9101
+ [name: string]: unknown;
9102
+ };
9103
+ content: {
9104
+ "application/json": components["schemas"]["ErrorResponseDto"];
9105
+ };
9106
+ };
9107
+ /** @description PAK lacks `social.create`, owner suspended, or cover asset not owned. */
9108
+ 403: {
9109
+ headers: {
9110
+ [name: string]: unknown;
9111
+ };
9112
+ content: {
9113
+ "application/json": components["schemas"]["ErrorResponseDto"];
9114
+ };
9115
+ };
9116
+ /** @description Community, owner, or cover asset not found. */
9117
+ 404: {
9118
+ headers: {
9119
+ [name: string]: unknown;
9120
+ };
9121
+ content: {
9122
+ "application/json": components["schemas"]["ErrorResponseDto"];
9123
+ };
9124
+ };
9125
+ /** @description Cover asset is not ready. */
9126
+ 422: {
9127
+ headers: {
9128
+ [name: string]: unknown;
9129
+ };
9130
+ content: {
9131
+ "application/json": components["schemas"]["ErrorResponseDto"];
9132
+ };
9133
+ };
9134
+ };
9135
+ };
9136
+ CollectionController_getById: {
9137
+ parameters: {
9138
+ query?: {
9139
+ actor_id?: string;
9140
+ };
9141
+ header?: never;
9142
+ path: {
9143
+ /** @description Social community UUID. */
9144
+ communityId: string;
9145
+ collectionId: string;
9146
+ };
9147
+ cookie?: never;
9148
+ };
9149
+ requestBody?: never;
9150
+ responses: {
9151
+ /** @description The collection. */
9152
+ 200: {
9153
+ headers: {
9154
+ [name: string]: unknown;
9155
+ };
9156
+ content: {
9157
+ "application/json": components["schemas"]["CollectionResponseDto"];
9158
+ };
9159
+ };
9160
+ /** @description Not found (or private and not the owner). */
9161
+ 404: {
9162
+ headers: {
9163
+ [name: string]: unknown;
9164
+ };
9165
+ content: {
9166
+ "application/json": components["schemas"]["ErrorResponseDto"];
9167
+ };
9168
+ };
9169
+ };
9170
+ };
9171
+ CollectionController_delete: {
9172
+ parameters: {
9173
+ query?: never;
9174
+ header?: never;
9175
+ path: {
9176
+ /** @description Social community UUID. */
9177
+ communityId: string;
9178
+ collectionId: string;
9179
+ };
9180
+ cookie?: never;
9181
+ };
9182
+ requestBody: {
9183
+ content: {
9184
+ "application/json": components["schemas"]["DeleteWithCallerDto"];
9185
+ };
9186
+ };
9187
+ responses: {
9188
+ /** @description Deleted. */
9189
+ 204: {
9190
+ headers: {
9191
+ [name: string]: unknown;
9192
+ };
9193
+ content?: never;
9194
+ };
9195
+ /** @description Caller is not the owner. */
9196
+ 403: {
9197
+ headers: {
9198
+ [name: string]: unknown;
9199
+ };
9200
+ content: {
9201
+ "application/json": components["schemas"]["ErrorResponseDto"];
9202
+ };
9203
+ };
9204
+ /** @description Not found. */
9205
+ 404: {
9206
+ headers: {
9207
+ [name: string]: unknown;
9208
+ };
9209
+ content: {
9210
+ "application/json": components["schemas"]["ErrorResponseDto"];
9211
+ };
9212
+ };
9213
+ };
9214
+ };
9215
+ CollectionController_update: {
9216
+ parameters: {
9217
+ query?: never;
9218
+ header?: never;
9219
+ path: {
9220
+ /** @description Social community UUID. */
9221
+ communityId: string;
9222
+ collectionId: string;
9223
+ };
9224
+ cookie?: never;
9225
+ };
9226
+ requestBody: {
9227
+ content: {
9228
+ "application/json": components["schemas"]["UpdateCollectionDto"];
9229
+ };
9230
+ };
9231
+ responses: {
9232
+ /** @description Updated. */
9233
+ 200: {
9234
+ headers: {
9235
+ [name: string]: unknown;
9236
+ };
9237
+ content: {
9238
+ "application/json": components["schemas"]["CollectionResponseDto"];
9239
+ };
9240
+ };
9241
+ /** @description Caller is not the owner, or PAK lacks `social.update`. */
9242
+ 403: {
9243
+ headers: {
9244
+ [name: string]: unknown;
9245
+ };
9246
+ content: {
9247
+ "application/json": components["schemas"]["ErrorResponseDto"];
9248
+ };
9249
+ };
9250
+ /** @description Not found. */
9251
+ 404: {
9252
+ headers: {
9253
+ [name: string]: unknown;
9254
+ };
9255
+ content: {
9256
+ "application/json": components["schemas"]["ErrorResponseDto"];
9257
+ };
9258
+ };
9259
+ /** @description Cover asset is not ready. */
9260
+ 422: {
9261
+ headers: {
9262
+ [name: string]: unknown;
9263
+ };
9264
+ content: {
9265
+ "application/json": components["schemas"]["ErrorResponseDto"];
9266
+ };
9267
+ };
9268
+ };
9269
+ };
9270
+ CollectionController_listItems: {
9271
+ parameters: {
9272
+ query?: {
9273
+ actor_id?: string;
9274
+ limit?: number;
9275
+ cursor?: string;
9276
+ };
9277
+ header?: never;
9278
+ path: {
9279
+ /** @description Social community UUID. */
9280
+ communityId: string;
9281
+ collectionId: string;
9282
+ };
9283
+ cookie?: never;
9284
+ };
9285
+ requestBody?: never;
9286
+ responses: {
9287
+ /** @description Page of items. */
9288
+ 200: {
9289
+ headers: {
9290
+ [name: string]: unknown;
9291
+ };
9292
+ content: {
9293
+ "application/json": components["schemas"]["CollectionItemListResponseDto"];
6976
9294
  };
6977
9295
  };
6978
- /** @description Cannot block yourself. */
6979
- 422: {
9296
+ /** @description Not found (or private and not the owner). */
9297
+ 404: {
6980
9298
  headers: {
6981
9299
  [name: string]: unknown;
6982
9300
  };
@@ -6986,30 +9304,33 @@ interface operations {
6986
9304
  };
6987
9305
  };
6988
9306
  };
6989
- EdgeController_unblock: {
9307
+ CollectionController_addItem: {
6990
9308
  parameters: {
6991
9309
  query?: never;
6992
9310
  header?: never;
6993
9311
  path: {
6994
- /** @description Social community UUID. Must belong to the PAK's workspace. */
9312
+ /** @description Social community UUID. */
6995
9313
  communityId: string;
6996
- /** @description Blocker actor UUID. */
6997
- srcActorId: string;
6998
- /** @description Blockee actor UUID. */
6999
- dstActorId: string;
9314
+ collectionId: string;
7000
9315
  };
7001
9316
  cookie?: never;
7002
9317
  };
7003
- requestBody?: never;
9318
+ requestBody: {
9319
+ content: {
9320
+ "application/json": components["schemas"]["AddItemDto"];
9321
+ };
9322
+ };
7004
9323
  responses: {
7005
- /** @description Unblocked (or no edge to remove). */
7006
- 204: {
9324
+ /** @description Item added (or already present). */
9325
+ 201: {
7007
9326
  headers: {
7008
9327
  [name: string]: unknown;
7009
9328
  };
7010
- content?: never;
9329
+ content: {
9330
+ "application/json": components["schemas"]["CollectionItemResponseDto"];
9331
+ };
7011
9332
  };
7012
- /** @description PAK lacks `social.delete`. */
9333
+ /** @description Caller is not the owner. */
7013
9334
  403: {
7014
9335
  headers: {
7015
9336
  [name: string]: unknown;
@@ -7018,7 +9339,7 @@ interface operations {
7018
9339
  "application/json": components["schemas"]["ErrorResponseDto"];
7019
9340
  };
7020
9341
  };
7021
- /** @description Community or actor not found. */
9342
+ /** @description Collection or post not found. */
7022
9343
  404: {
7023
9344
  headers: {
7024
9345
  [name: string]: unknown;
@@ -7029,39 +9350,32 @@ interface operations {
7029
9350
  };
7030
9351
  };
7031
9352
  };
7032
- StoryController_addCloseFriend: {
9353
+ CollectionController_removeItem: {
7033
9354
  parameters: {
7034
9355
  query?: never;
7035
9356
  header?: never;
7036
9357
  path: {
7037
- /** @description Community UUID. */
9358
+ /** @description Social community UUID. */
7038
9359
  communityId: string;
9360
+ collectionId: string;
9361
+ postId: string;
7039
9362
  };
7040
9363
  cookie?: never;
7041
9364
  };
7042
9365
  requestBody: {
7043
9366
  content: {
7044
- "application/json": components["schemas"]["CreateCloseFriendDto"];
9367
+ "application/json": components["schemas"]["DeleteWithCallerDto"];
7045
9368
  };
7046
9369
  };
7047
9370
  responses: {
7048
- /** @description Member added (or already present). */
9371
+ /** @description Item removed. */
7049
9372
  204: {
7050
9373
  headers: {
7051
9374
  [name: string]: unknown;
7052
9375
  };
7053
9376
  content?: never;
7054
9377
  };
7055
- /** @description Body validation failed. */
7056
- 400: {
7057
- headers: {
7058
- [name: string]: unknown;
7059
- };
7060
- content: {
7061
- "application/json": components["schemas"]["ErrorResponseDto"];
7062
- };
7063
- };
7064
- /** @description PAK lacks `social.close-friend.manage`. */
9378
+ /** @description Caller is not the owner. */
7065
9379
  403: {
7066
9380
  headers: {
7067
9381
  [name: string]: unknown;
@@ -7070,59 +9384,36 @@ interface operations {
7070
9384
  "application/json": components["schemas"]["ErrorResponseDto"];
7071
9385
  };
7072
9386
  };
7073
- /** @description Community / owner / member not found. */
7074
- 404: {
7075
- headers: {
7076
- [name: string]: unknown;
7077
- };
7078
- content: {
7079
- "application/json": components["schemas"]["ErrorResponseDto"];
7080
- };
7081
- };
7082
- /** @description Block in place between owner and member. */
7083
- 409: {
7084
- headers: {
7085
- [name: string]: unknown;
7086
- };
7087
- content: {
7088
- "application/json": components["schemas"]["ErrorResponseDto"];
7089
- };
7090
- };
7091
- /** @description Cannot add yourself as a close friend. */
7092
- 422: {
7093
- headers: {
7094
- [name: string]: unknown;
7095
- };
7096
- content: {
7097
- "application/json": components["schemas"]["ErrorResponseDto"];
7098
- };
7099
- };
7100
9387
  };
7101
9388
  };
7102
- StoryController_removeCloseFriend: {
9389
+ CollectionController_reorderItem: {
7103
9390
  parameters: {
7104
9391
  query?: never;
7105
9392
  header?: never;
7106
9393
  path: {
7107
- /** @description Community UUID. */
9394
+ /** @description Social community UUID. */
7108
9395
  communityId: string;
7109
- /** @description Owner social actor UUID. */
7110
- ownerActorId: string;
7111
- /** @description Member social actor UUID. */
7112
- memberActorId: string;
9396
+ collectionId: string;
9397
+ postId: string;
7113
9398
  };
7114
9399
  cookie?: never;
7115
9400
  };
7116
- requestBody?: never;
9401
+ requestBody: {
9402
+ content: {
9403
+ "application/json": components["schemas"]["ReorderItemDto"];
9404
+ };
9405
+ };
7117
9406
  responses: {
7118
- /** @description Removed (or was not in the list). */
7119
- 204: {
9407
+ /** @description Item repositioned. */
9408
+ 200: {
7120
9409
  headers: {
7121
9410
  [name: string]: unknown;
7122
9411
  };
7123
- content?: never;
9412
+ content: {
9413
+ "application/json": components["schemas"]["CollectionItemResponseDto"];
9414
+ };
7124
9415
  };
7125
- /** @description PAK lacks `social.close-friend.manage`. */
9416
+ /** @description Caller is not the owner. */
7126
9417
  403: {
7127
9418
  headers: {
7128
9419
  [name: string]: unknown;
@@ -7131,7 +9422,7 @@ interface operations {
7131
9422
  "application/json": components["schemas"]["ErrorResponseDto"];
7132
9423
  };
7133
9424
  };
7134
- /** @description Community not found. */
9425
+ /** @description Collection or item not found. */
7135
9426
  404: {
7136
9427
  headers: {
7137
9428
  [name: string]: unknown;
@@ -7421,7 +9712,7 @@ interface operations {
7421
9712
  };
7422
9713
  };
7423
9714
  responses: {
7424
- /** @description Conversation after update. */
9715
+ /** @description Conversation after update (with the caller's unread_count). */
7425
9716
  200: {
7426
9717
  headers: {
7427
9718
  [name: string]: unknown;
@@ -7439,7 +9730,7 @@ interface operations {
7439
9730
  "application/json": components["schemas"]["ErrorResponseDto"];
7440
9731
  };
7441
9732
  };
7442
- /** @description PAK lacks `social.update`. */
9733
+ /** @description Not an admin (rename), or PAK lacks `social.update`. */
7443
9734
  403: {
7444
9735
  headers: {
7445
9736
  [name: string]: unknown;
@@ -7457,6 +9748,15 @@ interface operations {
7457
9748
  "application/json": components["schemas"]["ErrorResponseDto"];
7458
9749
  };
7459
9750
  };
9751
+ /** @description Rename on a non-group conversation. */
9752
+ 409: {
9753
+ headers: {
9754
+ [name: string]: unknown;
9755
+ };
9756
+ content: {
9757
+ "application/json": components["schemas"]["ErrorResponseDto"];
9758
+ };
9759
+ };
7460
9760
  };
7461
9761
  };
7462
9762
  ConversationController_addMember: {
@@ -7592,7 +9892,7 @@ interface operations {
7592
9892
  };
7593
9893
  };
7594
9894
  };
7595
- ConversationController_updateMemberRole: {
9895
+ ConversationController_updateMember: {
7596
9896
  parameters: {
7597
9897
  query?: never;
7598
9898
  header?: never;
@@ -7608,11 +9908,11 @@ interface operations {
7608
9908
  };
7609
9909
  requestBody: {
7610
9910
  content: {
7611
- "application/json": components["schemas"]["UpdateMemberRoleDto"];
9911
+ "application/json": components["schemas"]["UpdateMemberDto"];
7612
9912
  };
7613
9913
  };
7614
9914
  responses: {
7615
- /** @description Role updated. */
9915
+ /** @description Participant updated. */
7616
9916
  200: {
7617
9917
  headers: {
7618
9918
  [name: string]: unknown;
@@ -7621,7 +9921,7 @@ interface operations {
7621
9921
  "application/json": components["schemas"]["ConversationResponseDto"];
7622
9922
  };
7623
9923
  };
7624
- /** @description Caller is not an admin. */
9924
+ /** @description Not an admin (role) or not the target (self-only fields). */
7625
9925
  403: {
7626
9926
  headers: {
7627
9927
  [name: string]: unknown;
@@ -7768,6 +10068,54 @@ interface operations {
7768
10068
  };
7769
10069
  };
7770
10070
  };
10071
+ ConversationController_getMessage: {
10072
+ parameters: {
10073
+ query: {
10074
+ /** @description The viewer actor UUID — must be a participant. */
10075
+ actor_id: string;
10076
+ };
10077
+ header?: never;
10078
+ path: {
10079
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
10080
+ communityId: string;
10081
+ /** @description Conversation UUID. */
10082
+ conversationId: string;
10083
+ /** @description Message UUID. */
10084
+ messageId: string;
10085
+ };
10086
+ cookie?: never;
10087
+ };
10088
+ requestBody?: never;
10089
+ responses: {
10090
+ /** @description The message. */
10091
+ 200: {
10092
+ headers: {
10093
+ [name: string]: unknown;
10094
+ };
10095
+ content: {
10096
+ "application/json": components["schemas"]["DirectMessageResponseDto"];
10097
+ };
10098
+ };
10099
+ /** @description PAK lacks `social.read`. */
10100
+ 403: {
10101
+ headers: {
10102
+ [name: string]: unknown;
10103
+ };
10104
+ content: {
10105
+ "application/json": components["schemas"]["ErrorResponseDto"];
10106
+ };
10107
+ };
10108
+ /** @description Conversation/message not found, or caller not a participant. */
10109
+ 404: {
10110
+ headers: {
10111
+ [name: string]: unknown;
10112
+ };
10113
+ content: {
10114
+ "application/json": components["schemas"]["ErrorResponseDto"];
10115
+ };
10116
+ };
10117
+ };
10118
+ };
7771
10119
  ConversationController_deleteMessage: {
7772
10120
  parameters: {
7773
10121
  query: {
@@ -8226,24 +10574,143 @@ interface operations {
8226
10574
  headers: {
8227
10575
  [name: string]: unknown;
8228
10576
  };
8229
- content: {
8230
- "application/json": components["schemas"]["ErrorResponseDto"];
8231
- };
10577
+ content: {
10578
+ "application/json": components["schemas"]["ErrorResponseDto"];
10579
+ };
10580
+ };
10581
+ };
10582
+ };
10583
+ FeedController_getDiscoverFeed: {
10584
+ parameters: {
10585
+ query?: {
10586
+ /** @description Viewer actor UUID. */
10587
+ actor_id?: string;
10588
+ /**
10589
+ * @deprecated
10590
+ * @description DEPRECATED alias of `actor_id` (task 008 / G11).
10591
+ */
10592
+ viewer_actor_id?: string;
10593
+ limit?: number;
10594
+ /** @description Opaque ranked cursor; encodes (score, id). */
10595
+ cursor?: string;
10596
+ /** @description Optional post-kind filter (task 023) — e.g. `image`, `link`. Restricts discovery to that kind. */
10597
+ kind?: string;
10598
+ };
10599
+ header?: never;
10600
+ path: {
10601
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
10602
+ communityId: string;
10603
+ };
10604
+ cookie?: never;
10605
+ };
10606
+ requestBody?: never;
10607
+ responses: {
10608
+ /** @description Page of posts. */
10609
+ 200: {
10610
+ headers: {
10611
+ [name: string]: unknown;
10612
+ };
10613
+ content: {
10614
+ "application/json": components["schemas"]["FeedResponseDto"];
10615
+ };
10616
+ };
10617
+ /** @description PAK lacks `social.list`. */
10618
+ 403: {
10619
+ headers: {
10620
+ [name: string]: unknown;
10621
+ };
10622
+ content: {
10623
+ "application/json": components["schemas"]["ErrorResponseDto"];
10624
+ };
10625
+ };
10626
+ /** @description Community or viewer actor not found. */
10627
+ 404: {
10628
+ headers: {
10629
+ [name: string]: unknown;
10630
+ };
10631
+ content: {
10632
+ "application/json": components["schemas"]["ErrorResponseDto"];
10633
+ };
10634
+ };
10635
+ };
10636
+ };
10637
+ EdgeController_dismissSuggestion: {
10638
+ parameters: {
10639
+ query?: never;
10640
+ header?: never;
10641
+ path: {
10642
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
10643
+ communityId: string;
10644
+ };
10645
+ cookie?: never;
10646
+ };
10647
+ requestBody: {
10648
+ content: {
10649
+ "application/json": components["schemas"]["ActorEdgeDto"];
10650
+ };
10651
+ };
10652
+ responses: {
10653
+ /** @description Suggestion dismissed. */
10654
+ 201: {
10655
+ headers: {
10656
+ [name: string]: unknown;
10657
+ };
10658
+ content: {
10659
+ "application/json": components["schemas"]["CreateEdgeResponseDto"];
10660
+ };
10661
+ };
10662
+ /** @description Community or actor not found. */
10663
+ 404: {
10664
+ headers: {
10665
+ [name: string]: unknown;
10666
+ };
10667
+ content: {
10668
+ "application/json": components["schemas"]["ErrorResponseDto"];
10669
+ };
10670
+ };
10671
+ /** @description Cannot dismiss yourself. */
10672
+ 422: {
10673
+ headers: {
10674
+ [name: string]: unknown;
10675
+ };
10676
+ content: {
10677
+ "application/json": components["schemas"]["ErrorResponseDto"];
10678
+ };
10679
+ };
10680
+ };
10681
+ };
10682
+ EdgeController_undismissSuggestion: {
10683
+ parameters: {
10684
+ query?: never;
10685
+ header?: never;
10686
+ path: {
10687
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
10688
+ communityId: string;
10689
+ /** @description The dismissing actor UUID. */
10690
+ srcActorId: string;
10691
+ /** @description The dismissed actor UUID. */
10692
+ dstActorId: string;
10693
+ };
10694
+ cookie?: never;
10695
+ };
10696
+ requestBody?: never;
10697
+ responses: {
10698
+ /** @description Un-dismissed (or no-op). */
10699
+ 204: {
10700
+ headers: {
10701
+ [name: string]: unknown;
10702
+ };
10703
+ content?: never;
8232
10704
  };
8233
10705
  };
8234
10706
  };
8235
- FeedController_getDiscoverFeed: {
10707
+ FlagController_listMine: {
8236
10708
  parameters: {
8237
- query?: {
8238
- /** @description Viewer actor UUID. */
8239
- actor_id?: string;
8240
- /**
8241
- * @deprecated
8242
- * @description DEPRECATED alias of `actor_id` (task 008 / G11).
8243
- */
8244
- viewer_actor_id?: string;
10709
+ query: {
10710
+ /** @description The reporter whose flags to list. */
10711
+ reporter_actor_id: string;
10712
+ status?: "open" | "dismissed" | "actioned";
8245
10713
  limit?: number;
8246
- /** @description Opaque ranked cursor; encodes (score, id). */
8247
10714
  cursor?: string;
8248
10715
  };
8249
10716
  header?: never;
@@ -8255,26 +10722,17 @@ interface operations {
8255
10722
  };
8256
10723
  requestBody?: never;
8257
10724
  responses: {
8258
- /** @description Page of posts. */
10725
+ /** @description Page of the reporter's flags. */
8259
10726
  200: {
8260
10727
  headers: {
8261
10728
  [name: string]: unknown;
8262
10729
  };
8263
10730
  content: {
8264
- "application/json": components["schemas"]["FeedResponseDto"];
8265
- };
8266
- };
8267
- /** @description PAK lacks `social.list`. */
8268
- 403: {
8269
- headers: {
8270
- [name: string]: unknown;
8271
- };
8272
- content: {
8273
- "application/json": components["schemas"]["ErrorResponseDto"];
10731
+ "application/json": components["schemas"]["FlagListResponseDto"];
8274
10732
  };
8275
10733
  };
8276
- /** @description Community or viewer actor not found. */
8277
- 404: {
10734
+ /** @description Missing reporter_actor_id or invalid status. */
10735
+ 400: {
8278
10736
  headers: {
8279
10737
  [name: string]: unknown;
8280
10738
  };
@@ -8356,6 +10814,76 @@ interface operations {
8356
10814
  };
8357
10815
  };
8358
10816
  };
10817
+ EdgeController_declineFollowRequest: {
10818
+ parameters: {
10819
+ query?: never;
10820
+ header?: never;
10821
+ path: {
10822
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
10823
+ communityId: string;
10824
+ /** @description The private actor (decliner). */
10825
+ dstActorId: string;
10826
+ /** @description The requesting actor. */
10827
+ srcActorId: string;
10828
+ };
10829
+ cookie?: never;
10830
+ };
10831
+ requestBody?: never;
10832
+ responses: {
10833
+ /** @description Request declined. */
10834
+ 204: {
10835
+ headers: {
10836
+ [name: string]: unknown;
10837
+ };
10838
+ content?: never;
10839
+ };
10840
+ /** @description No pending request for this pair. */
10841
+ 404: {
10842
+ headers: {
10843
+ [name: string]: unknown;
10844
+ };
10845
+ content: {
10846
+ "application/json": components["schemas"]["ErrorResponseDto"];
10847
+ };
10848
+ };
10849
+ };
10850
+ };
10851
+ EdgeController_approveFollowRequest: {
10852
+ parameters: {
10853
+ query?: never;
10854
+ header?: never;
10855
+ path: {
10856
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
10857
+ communityId: string;
10858
+ /** @description The private actor being followed (approver). */
10859
+ dstActorId: string;
10860
+ /** @description The requesting actor. */
10861
+ srcActorId: string;
10862
+ };
10863
+ cookie?: never;
10864
+ };
10865
+ requestBody?: never;
10866
+ responses: {
10867
+ /** @description Request approved; follow edge created. */
10868
+ 201: {
10869
+ headers: {
10870
+ [name: string]: unknown;
10871
+ };
10872
+ content: {
10873
+ "application/json": components["schemas"]["CreateEdgeResponseDto"];
10874
+ };
10875
+ };
10876
+ /** @description No pending request for this pair. */
10877
+ 404: {
10878
+ headers: {
10879
+ [name: string]: unknown;
10880
+ };
10881
+ content: {
10882
+ "application/json": components["schemas"]["ErrorResponseDto"];
10883
+ };
10884
+ };
10885
+ };
10886
+ };
8359
10887
  EdgeController_follow: {
8360
10888
  parameters: {
8361
10889
  query?: never;
@@ -8372,13 +10900,13 @@ interface operations {
8372
10900
  };
8373
10901
  };
8374
10902
  responses: {
8375
- /** @description Follow edge created (or returned via idempotent retry). */
10903
+ /** @description Follow edge created / exists (`status: followed`), or a follow request created (`status: pending`). */
8376
10904
  201: {
8377
10905
  headers: {
8378
10906
  [name: string]: unknown;
8379
10907
  };
8380
10908
  content: {
8381
- "application/json": components["schemas"]["CreateEdgeResponseDto"];
10909
+ "application/json": components["schemas"]["FollowResultDto"];
8382
10910
  };
8383
10911
  };
8384
10912
  /** @description Missing / invalid src_actor_id / dst_actor_id. */
@@ -8528,6 +11056,10 @@ interface operations {
8528
11056
  HashtagController_list: {
8529
11057
  parameters: {
8530
11058
  query?: {
11059
+ /** @description `recent` (default) = newest tags first; `trending` = most posts in the window. */
11060
+ order?: "recent" | "trending";
11061
+ /** @description Trending window (only meaningful with `order=trending`). */
11062
+ window?: "24h" | "7d";
8531
11063
  limit?: number;
8532
11064
  cursor?: string;
8533
11065
  };
@@ -8549,6 +11081,15 @@ interface operations {
8549
11081
  "application/json": components["schemas"]["HashtagListResponseDto"];
8550
11082
  };
8551
11083
  };
11084
+ /** @description Invalid order / window. */
11085
+ 400: {
11086
+ headers: {
11087
+ [name: string]: unknown;
11088
+ };
11089
+ content: {
11090
+ "application/json": components["schemas"]["ErrorResponseDto"];
11091
+ };
11092
+ };
8552
11093
  /** @description PAK lacks `social.list`. */
8553
11094
  403: {
8554
11095
  headers: {
@@ -8624,7 +11165,9 @@ interface operations {
8624
11165
  HashtagFeedController_list: {
8625
11166
  parameters: {
8626
11167
  query?: {
11168
+ order?: "chronological" | "ranked";
8627
11169
  limit?: number;
11170
+ /** @description Chronological pages on (created_at, id); ranked on (score, id). A cursor is not portable across orders. */
8628
11171
  cursor?: string;
8629
11172
  };
8630
11173
  header?: never;
@@ -8647,7 +11190,7 @@ interface operations {
8647
11190
  "application/json": components["schemas"]["HashtagPostListResponseDto"];
8648
11191
  };
8649
11192
  };
8650
- /** @description Invalid tag (empty after normalisation, or longer than 32 chars). */
11193
+ /** @description Invalid tag or order value. */
8651
11194
  400: {
8652
11195
  headers: {
8653
11196
  [name: string]: unknown;
@@ -8676,6 +11219,67 @@ interface operations {
8676
11219
  };
8677
11220
  };
8678
11221
  };
11222
+ EdgeController_hidePost: {
11223
+ parameters: {
11224
+ query?: never;
11225
+ header?: never;
11226
+ path: {
11227
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
11228
+ communityId: string;
11229
+ };
11230
+ cookie?: never;
11231
+ };
11232
+ requestBody: {
11233
+ content: {
11234
+ "application/json": components["schemas"]["HidePostDto"];
11235
+ };
11236
+ };
11237
+ responses: {
11238
+ /** @description Post hidden. */
11239
+ 201: {
11240
+ headers: {
11241
+ [name: string]: unknown;
11242
+ };
11243
+ content: {
11244
+ "application/json": components["schemas"]["HideResultDto"];
11245
+ };
11246
+ };
11247
+ /** @description Community, actor, or post not found. */
11248
+ 404: {
11249
+ headers: {
11250
+ [name: string]: unknown;
11251
+ };
11252
+ content: {
11253
+ "application/json": components["schemas"]["ErrorResponseDto"];
11254
+ };
11255
+ };
11256
+ };
11257
+ };
11258
+ EdgeController_unhidePost: {
11259
+ parameters: {
11260
+ query?: never;
11261
+ header?: never;
11262
+ path: {
11263
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
11264
+ communityId: string;
11265
+ /** @description The actor who hid the post. */
11266
+ srcActorId: string;
11267
+ /** @description The hidden post UUID. */
11268
+ postId: string;
11269
+ };
11270
+ cookie?: never;
11271
+ };
11272
+ requestBody?: never;
11273
+ responses: {
11274
+ /** @description Un-hidden (or no-op). */
11275
+ 204: {
11276
+ headers: {
11277
+ [name: string]: unknown;
11278
+ };
11279
+ content?: never;
11280
+ };
11281
+ };
11282
+ };
8679
11283
  ActorListController_list: {
8680
11284
  parameters: {
8681
11285
  query?: {
@@ -10101,8 +12705,115 @@ interface operations {
10101
12705
  "application/json": components["schemas"]["ErrorResponseDto"];
10102
12706
  };
10103
12707
  };
10104
- /** @description Comment is in a status that cannot be approved (hidden / removed). */
10105
- 409: {
12708
+ /** @description Comment is in a status that cannot be approved (hidden / removed). */
12709
+ 409: {
12710
+ headers: {
12711
+ [name: string]: unknown;
12712
+ };
12713
+ content: {
12714
+ "application/json": components["schemas"]["ErrorResponseDto"];
12715
+ };
12716
+ };
12717
+ };
12718
+ };
12719
+ CommentController_pin: {
12720
+ parameters: {
12721
+ query?: never;
12722
+ header?: never;
12723
+ path: {
12724
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
12725
+ communityId: string;
12726
+ /** @description Social post UUID the comments thread under. */
12727
+ postId: string;
12728
+ /** @description Social comment UUID. */
12729
+ commentId: string;
12730
+ };
12731
+ cookie?: never;
12732
+ };
12733
+ requestBody: {
12734
+ content: {
12735
+ "application/json": components["schemas"]["PinCommentDto"];
12736
+ };
12737
+ };
12738
+ responses: {
12739
+ /** @description Comment pinned. */
12740
+ 201: {
12741
+ headers: {
12742
+ [name: string]: unknown;
12743
+ };
12744
+ content: {
12745
+ "application/json": components["schemas"]["CommentResponseDto"];
12746
+ };
12747
+ };
12748
+ /** @description Caller is not the post-author. */
12749
+ 403: {
12750
+ headers: {
12751
+ [name: string]: unknown;
12752
+ };
12753
+ content: {
12754
+ "application/json": components["schemas"]["ErrorResponseDto"];
12755
+ };
12756
+ };
12757
+ /** @description Post or comment not found. */
12758
+ 404: {
12759
+ headers: {
12760
+ [name: string]: unknown;
12761
+ };
12762
+ content: {
12763
+ "application/json": components["schemas"]["ErrorResponseDto"];
12764
+ };
12765
+ };
12766
+ /** @description Reply / non-published comment, or pin cap reached (`PIN_CAP_REACHED`). */
12767
+ 409: {
12768
+ headers: {
12769
+ [name: string]: unknown;
12770
+ };
12771
+ content: {
12772
+ "application/json": components["schemas"]["ErrorResponseDto"];
12773
+ };
12774
+ };
12775
+ };
12776
+ };
12777
+ CommentController_unpin: {
12778
+ parameters: {
12779
+ query?: never;
12780
+ header?: never;
12781
+ path: {
12782
+ /** @description Social community UUID. Must belong to the PAK's workspace. */
12783
+ communityId: string;
12784
+ /** @description Social post UUID the comments thread under. */
12785
+ postId: string;
12786
+ /** @description Social comment UUID. */
12787
+ commentId: string;
12788
+ };
12789
+ cookie?: never;
12790
+ };
12791
+ requestBody: {
12792
+ content: {
12793
+ "application/json": components["schemas"]["PinCommentDto"];
12794
+ };
12795
+ };
12796
+ responses: {
12797
+ /** @description Comment unpinned. */
12798
+ 200: {
12799
+ headers: {
12800
+ [name: string]: unknown;
12801
+ };
12802
+ content: {
12803
+ "application/json": components["schemas"]["CommentResponseDto"];
12804
+ };
12805
+ };
12806
+ /** @description Caller is not the post-author. */
12807
+ 403: {
12808
+ headers: {
12809
+ [name: string]: unknown;
12810
+ };
12811
+ content: {
12812
+ "application/json": components["schemas"]["ErrorResponseDto"];
12813
+ };
12814
+ };
12815
+ /** @description Post or comment not found. */
12816
+ 404: {
10106
12817
  headers: {
10107
12818
  [name: string]: unknown;
10108
12819
  };
@@ -10285,6 +12996,62 @@ interface operations {
10285
12996
  };
10286
12997
  };
10287
12998
  };
12999
+ InsightsController_postInsights: {
13000
+ parameters: {
13001
+ query?: {
13002
+ /** @description Window start (YYYY-MM-DD). */
13003
+ from?: string;
13004
+ /** @description Window end (YYYY-MM-DD). */
13005
+ to?: string;
13006
+ };
13007
+ header?: never;
13008
+ path: {
13009
+ /** @description Social community UUID. */
13010
+ communityId: string;
13011
+ postId: string;
13012
+ };
13013
+ cookie?: never;
13014
+ };
13015
+ requestBody?: never;
13016
+ responses: {
13017
+ /** @description Post insights. */
13018
+ 200: {
13019
+ headers: {
13020
+ [name: string]: unknown;
13021
+ };
13022
+ content: {
13023
+ "application/json": components["schemas"]["PostInsightsResponseDto"];
13024
+ };
13025
+ };
13026
+ /** @description Invalid window (inverted or > 366 days). */
13027
+ 400: {
13028
+ headers: {
13029
+ [name: string]: unknown;
13030
+ };
13031
+ content: {
13032
+ "application/json": components["schemas"]["ErrorResponseDto"];
13033
+ };
13034
+ };
13035
+ /** @description PAK lacks `social.analytics.read`. */
13036
+ 403: {
13037
+ headers: {
13038
+ [name: string]: unknown;
13039
+ };
13040
+ content: {
13041
+ "application/json": components["schemas"]["ErrorResponseDto"];
13042
+ };
13043
+ };
13044
+ /** @description Post not found in this community. */
13045
+ 404: {
13046
+ headers: {
13047
+ [name: string]: unknown;
13048
+ };
13049
+ content: {
13050
+ "application/json": components["schemas"]["ErrorResponseDto"];
13051
+ };
13052
+ };
13053
+ };
13054
+ };
10288
13055
  StoryController_getPollResults: {
10289
13056
  parameters: {
10290
13057
  query?: never;
@@ -10773,6 +13540,103 @@ interface operations {
10773
13540
  };
10774
13541
  };
10775
13542
  };
13543
+ PostTagController_approve: {
13544
+ parameters: {
13545
+ query?: never;
13546
+ header?: never;
13547
+ path: {
13548
+ /** @description Community UUID. */
13549
+ communityId: string;
13550
+ /** @description Post UUID. */
13551
+ postId: string;
13552
+ /** @description Tagged actor UUID. */
13553
+ actorId: string;
13554
+ };
13555
+ cookie?: never;
13556
+ };
13557
+ requestBody: {
13558
+ content: {
13559
+ "application/json": components["schemas"]["ActingActorDto"];
13560
+ };
13561
+ };
13562
+ responses: {
13563
+ /** @description Tag approved. */
13564
+ 201: {
13565
+ headers: {
13566
+ [name: string]: unknown;
13567
+ };
13568
+ content: {
13569
+ "application/json": components["schemas"]["PostTagResponseDto"];
13570
+ };
13571
+ };
13572
+ /** @description Acting actor is not the tagged actor. */
13573
+ 403: {
13574
+ headers: {
13575
+ [name: string]: unknown;
13576
+ };
13577
+ content?: never;
13578
+ };
13579
+ /** @description Post or tag not found. */
13580
+ 404: {
13581
+ headers: {
13582
+ [name: string]: unknown;
13583
+ };
13584
+ content?: never;
13585
+ };
13586
+ /** @description Tag already removed. */
13587
+ 409: {
13588
+ headers: {
13589
+ [name: string]: unknown;
13590
+ };
13591
+ content?: never;
13592
+ };
13593
+ };
13594
+ };
13595
+ PostTagController_remove: {
13596
+ parameters: {
13597
+ query?: never;
13598
+ header?: never;
13599
+ path: {
13600
+ /** @description Community UUID. */
13601
+ communityId: string;
13602
+ /** @description Post UUID. */
13603
+ postId: string;
13604
+ /** @description Tagged actor UUID. */
13605
+ actorId: string;
13606
+ };
13607
+ cookie?: never;
13608
+ };
13609
+ requestBody: {
13610
+ content: {
13611
+ "application/json": components["schemas"]["ActingActorDto"];
13612
+ };
13613
+ };
13614
+ responses: {
13615
+ /** @description Tag removed. */
13616
+ 201: {
13617
+ headers: {
13618
+ [name: string]: unknown;
13619
+ };
13620
+ content: {
13621
+ "application/json": components["schemas"]["PostTagResponseDto"];
13622
+ };
13623
+ };
13624
+ /** @description Acting actor is neither the tagged actor nor the post author. */
13625
+ 403: {
13626
+ headers: {
13627
+ [name: string]: unknown;
13628
+ };
13629
+ content?: never;
13630
+ };
13631
+ /** @description Post or tag not found. */
13632
+ 404: {
13633
+ headers: {
13634
+ [name: string]: unknown;
13635
+ };
13636
+ content?: never;
13637
+ };
13638
+ };
13639
+ };
10776
13640
  StoryController_listViewers: {
10777
13641
  parameters: {
10778
13642
  query: {
@@ -10899,6 +13763,66 @@ interface operations {
10899
13763
  };
10900
13764
  };
10901
13765
  };
13766
+ StoryController_listVoters: {
13767
+ parameters: {
13768
+ query: {
13769
+ /** @description Requester social actor UUID — must resolve to the poll author. */
13770
+ actor_id: string;
13771
+ /** @description Filter to voters who chose this option index. */
13772
+ option?: number;
13773
+ limit?: number;
13774
+ /** @description Cursor from the prior page. */
13775
+ cursor?: string;
13776
+ };
13777
+ header?: never;
13778
+ path: {
13779
+ /** @description Community UUID. */
13780
+ communityId: string;
13781
+ /** @description Post UUID containing the poll. */
13782
+ postId: string;
13783
+ };
13784
+ cookie?: never;
13785
+ };
13786
+ requestBody?: never;
13787
+ responses: {
13788
+ /** @description Page of voters. */
13789
+ 200: {
13790
+ headers: {
13791
+ [name: string]: unknown;
13792
+ };
13793
+ content: {
13794
+ "application/json": components["schemas"]["PollVotersResponse"];
13795
+ };
13796
+ };
13797
+ /** @description Missing/invalid actor_id (author-only endpoint). */
13798
+ 400: {
13799
+ headers: {
13800
+ [name: string]: unknown;
13801
+ };
13802
+ content: {
13803
+ "application/json": components["schemas"]["ErrorResponseDto"];
13804
+ };
13805
+ };
13806
+ /** @description PAK lacks `social.list` OR requester is not the poll author. */
13807
+ 403: {
13808
+ headers: {
13809
+ [name: string]: unknown;
13810
+ };
13811
+ content: {
13812
+ "application/json": components["schemas"]["ErrorResponseDto"];
13813
+ };
13814
+ };
13815
+ /** @description Community or post not found. */
13816
+ 404: {
13817
+ headers: {
13818
+ [name: string]: unknown;
13819
+ };
13820
+ content: {
13821
+ "application/json": components["schemas"]["ErrorResponseDto"];
13822
+ };
13823
+ };
13824
+ };
13825
+ };
10902
13826
  StoryController_castVote: {
10903
13827
  parameters: {
10904
13828
  query?: never;
@@ -10942,17 +13866,105 @@ interface operations {
10942
13866
  "application/json": components["schemas"]["ErrorResponseDto"];
10943
13867
  };
10944
13868
  };
10945
- /** @description Community / post / voter not found, or post invisible. */
10946
- 404: {
13869
+ /** @description Community / post / voter not found, or post invisible. */
13870
+ 404: {
13871
+ headers: {
13872
+ [name: string]: unknown;
13873
+ };
13874
+ content: {
13875
+ "application/json": components["schemas"]["ErrorResponseDto"];
13876
+ };
13877
+ };
13878
+ /** @description Block in place between voter and poll author. */
13879
+ 409: {
13880
+ headers: {
13881
+ [name: string]: unknown;
13882
+ };
13883
+ content: {
13884
+ "application/json": components["schemas"]["ErrorResponseDto"];
13885
+ };
13886
+ };
13887
+ /** @description Self-vote / no poll / option_index out of range / `POLL_CLOSED` (past the poll `closes_at`). */
13888
+ 422: {
13889
+ headers: {
13890
+ [name: string]: unknown;
13891
+ };
13892
+ content: {
13893
+ "application/json": components["schemas"]["ErrorResponseDto"];
13894
+ };
13895
+ };
13896
+ };
13897
+ };
13898
+ StoryController_getVote: {
13899
+ parameters: {
13900
+ query?: never;
13901
+ header?: never;
13902
+ path: {
13903
+ /** @description Community UUID. */
13904
+ communityId: string;
13905
+ /** @description Post UUID containing the poll. */
13906
+ postId: string;
13907
+ /** @description Voter social actor UUID. */
13908
+ actorId: string;
13909
+ };
13910
+ cookie?: never;
13911
+ };
13912
+ requestBody?: never;
13913
+ responses: {
13914
+ /** @description The actor's vote. */
13915
+ 200: {
13916
+ headers: {
13917
+ [name: string]: unknown;
13918
+ };
13919
+ content: {
13920
+ "application/json": components["schemas"]["PollVoteResponse"];
13921
+ };
13922
+ };
13923
+ /** @description PAK lacks `social.read`. */
13924
+ 403: {
13925
+ headers: {
13926
+ [name: string]: unknown;
13927
+ };
13928
+ content: {
13929
+ "application/json": components["schemas"]["ErrorResponseDto"];
13930
+ };
13931
+ };
13932
+ /** @description Post not found, or the actor has not voted. */
13933
+ 404: {
13934
+ headers: {
13935
+ [name: string]: unknown;
13936
+ };
13937
+ content: {
13938
+ "application/json": components["schemas"]["ErrorResponseDto"];
13939
+ };
13940
+ };
13941
+ };
13942
+ };
13943
+ StoryController_deleteVote: {
13944
+ parameters: {
13945
+ query?: never;
13946
+ header?: never;
13947
+ path: {
13948
+ /** @description Community UUID. */
13949
+ communityId: string;
13950
+ /** @description Post UUID containing the poll. */
13951
+ postId: string;
13952
+ /** @description Voter social actor UUID. */
13953
+ actorId: string;
13954
+ };
13955
+ cookie?: never;
13956
+ };
13957
+ requestBody?: never;
13958
+ responses: {
13959
+ /** @description Vote retracted (or no-op). */
13960
+ 204: {
10947
13961
  headers: {
10948
13962
  [name: string]: unknown;
10949
13963
  };
10950
- content: {
10951
- "application/json": components["schemas"]["ErrorResponseDto"];
10952
- };
13964
+ content?: never;
10953
13965
  };
10954
- /** @description Block in place between voter and poll author. */
10955
- 409: {
13966
+ /** @description PAK lacks `social.vote`. */
13967
+ 403: {
10956
13968
  headers: {
10957
13969
  [name: string]: unknown;
10958
13970
  };
@@ -10960,8 +13972,8 @@ interface operations {
10960
13972
  "application/json": components["schemas"]["ErrorResponseDto"];
10961
13973
  };
10962
13974
  };
10963
- /** @description Self-vote / no poll / option_index out of range. */
10964
- 422: {
13975
+ /** @description Post not found. */
13976
+ 404: {
10965
13977
  headers: {
10966
13978
  [name: string]: unknown;
10967
13979
  };
@@ -11100,6 +14112,8 @@ interface operations {
11100
14112
  * @description DEPRECATED alias of `actor_id` (task 008 / G11).
11101
14113
  */
11102
14114
  requester_id?: string;
14115
+ /** @description Opaque pagination cursor from a prior response. Valid only for the same `q` (task 022). */
14116
+ cursor?: string;
11103
14117
  };
11104
14118
  header?: never;
11105
14119
  path: {
@@ -11110,7 +14124,7 @@ interface operations {
11110
14124
  };
11111
14125
  requestBody?: never;
11112
14126
  responses: {
11113
- /** @description Ranked actor hits. */
14127
+ /** @description Ranked actor hits, cursor-paginated by (rank, id). */
11114
14128
  200: {
11115
14129
  headers: {
11116
14130
  [name: string]: unknown;
@@ -11215,6 +14229,8 @@ interface operations {
11215
14229
  * @description DEPRECATED alias of `actor_id` (task 008 / G11).
11216
14230
  */
11217
14231
  requester_id?: string;
14232
+ /** @description Opaque pagination cursor from a prior response. Valid only for the same `(q, order)` pair (task 022). */
14233
+ cursor?: string;
11218
14234
  };
11219
14235
  header?: never;
11220
14236
  path: {
@@ -11225,7 +14241,7 @@ interface operations {
11225
14241
  };
11226
14242
  requestBody?: never;
11227
14243
  responses: {
11228
- /** @description Ranked post hits. */
14244
+ /** @description Ranked post hits, cursor-paginated by (rank, id) for relevance or (created_at, id) for recent. */
11229
14245
  200: {
11230
14246
  headers: {
11231
14247
  [name: string]: unknown;
@@ -11927,6 +14943,102 @@ interface operations {
11927
14943
  };
11928
14944
  };
11929
14945
  };
14946
+ ExportController_comments: {
14947
+ parameters: {
14948
+ query?: {
14949
+ limit?: number;
14950
+ cursor?: string;
14951
+ };
14952
+ header?: never;
14953
+ path: {
14954
+ /** @description Workspace UUID. */
14955
+ workspaceId: string;
14956
+ /** @description Community UUID (must belong to the workspace). */
14957
+ communityId: string;
14958
+ /** @description The data subject — social actor UUID. */
14959
+ actorId: string;
14960
+ };
14961
+ cookie?: never;
14962
+ };
14963
+ requestBody?: never;
14964
+ responses: {
14965
+ /** @description Page of the actor's comments. */
14966
+ 200: {
14967
+ headers: {
14968
+ [name: string]: unknown;
14969
+ };
14970
+ content: {
14971
+ "application/json": components["schemas"]["ActorCommentsResponseDto"];
14972
+ };
14973
+ };
14974
+ /** @description Caller lacks `social.audit.read`. */
14975
+ 403: {
14976
+ headers: {
14977
+ [name: string]: unknown;
14978
+ };
14979
+ content: {
14980
+ "application/json": components["schemas"]["ErrorResponseDto"];
14981
+ };
14982
+ };
14983
+ /** @description Community not found in this workspace. */
14984
+ 404: {
14985
+ headers: {
14986
+ [name: string]: unknown;
14987
+ };
14988
+ content: {
14989
+ "application/json": components["schemas"]["ErrorResponseDto"];
14990
+ };
14991
+ };
14992
+ };
14993
+ };
14994
+ ExportController_reactions: {
14995
+ parameters: {
14996
+ query?: {
14997
+ limit?: number;
14998
+ cursor?: string;
14999
+ };
15000
+ header?: never;
15001
+ path: {
15002
+ /** @description Workspace UUID. */
15003
+ workspaceId: string;
15004
+ /** @description Community UUID (must belong to the workspace). */
15005
+ communityId: string;
15006
+ /** @description The data subject — social actor UUID. */
15007
+ actorId: string;
15008
+ };
15009
+ cookie?: never;
15010
+ };
15011
+ requestBody?: never;
15012
+ responses: {
15013
+ /** @description Page of the actor's reactions. */
15014
+ 200: {
15015
+ headers: {
15016
+ [name: string]: unknown;
15017
+ };
15018
+ content: {
15019
+ "application/json": components["schemas"]["ActorReactionsResponseDto"];
15020
+ };
15021
+ };
15022
+ /** @description Caller lacks `social.audit.read`. */
15023
+ 403: {
15024
+ headers: {
15025
+ [name: string]: unknown;
15026
+ };
15027
+ content: {
15028
+ "application/json": components["schemas"]["ErrorResponseDto"];
15029
+ };
15030
+ };
15031
+ /** @description Community not found in this workspace. */
15032
+ 404: {
15033
+ headers: {
15034
+ [name: string]: unknown;
15035
+ };
15036
+ content: {
15037
+ "application/json": components["schemas"]["ErrorResponseDto"];
15038
+ };
15039
+ };
15040
+ };
15041
+ };
11930
15042
  AnalyticsController_getCommunityAnalytics: {
11931
15043
  parameters: {
11932
15044
  query?: never;
@@ -11970,6 +15082,63 @@ interface operations {
11970
15082
  };
11971
15083
  };
11972
15084
  };
15085
+ ModerationAdminController_actDirect: {
15086
+ parameters: {
15087
+ query?: never;
15088
+ header?: {
15089
+ /** @description Opaque client-generated string used to deduplicate retries within a 24h window. Replays return the original response; same key + different body returns 409 `IDEMPOTENCY_KEY_REUSE`. */
15090
+ "Idempotency-Key"?: string;
15091
+ };
15092
+ path: {
15093
+ workspaceId: string;
15094
+ communityId: string;
15095
+ };
15096
+ cookie?: never;
15097
+ };
15098
+ requestBody: {
15099
+ content: {
15100
+ "application/json": components["schemas"]["DirectModerationActionDto"];
15101
+ };
15102
+ };
15103
+ responses: {
15104
+ /** @description Action recorded (flag_id=null audit row); side-effect applied. */
15105
+ 201: {
15106
+ headers: {
15107
+ [name: string]: unknown;
15108
+ };
15109
+ content: {
15110
+ "application/json": components["schemas"]["ModerationActionResponseDto"];
15111
+ };
15112
+ };
15113
+ /** @description Invalid target_kind / action / notes. */
15114
+ 400: {
15115
+ headers: {
15116
+ [name: string]: unknown;
15117
+ };
15118
+ content: {
15119
+ "application/json": components["schemas"]["ErrorResponseDto"];
15120
+ };
15121
+ };
15122
+ /** @description Caller lacks `social.moderate`. */
15123
+ 403: {
15124
+ headers: {
15125
+ [name: string]: unknown;
15126
+ };
15127
+ content: {
15128
+ "application/json": components["schemas"]["ErrorResponseDto"];
15129
+ };
15130
+ };
15131
+ /** @description Community or target not found. */
15132
+ 404: {
15133
+ headers: {
15134
+ [name: string]: unknown;
15135
+ };
15136
+ content: {
15137
+ "application/json": components["schemas"]["ErrorResponseDto"];
15138
+ };
15139
+ };
15140
+ };
15141
+ };
11973
15142
  ModerationAdminController_shadowBan: {
11974
15143
  parameters: {
11975
15144
  query?: never;
@@ -12123,6 +15292,118 @@ interface operations {
12123
15292
  };
12124
15293
  };
12125
15294
  };
15295
+ ModerationAdminController_listBlockedTerms: {
15296
+ parameters: {
15297
+ query?: {
15298
+ limit?: number;
15299
+ cursor?: string;
15300
+ };
15301
+ header?: never;
15302
+ path: {
15303
+ workspaceId: string;
15304
+ communityId: string;
15305
+ };
15306
+ cookie?: never;
15307
+ };
15308
+ requestBody?: never;
15309
+ responses: {
15310
+ /** @description Page of blocked terms. */
15311
+ 200: {
15312
+ headers: {
15313
+ [name: string]: unknown;
15314
+ };
15315
+ content: {
15316
+ "application/json": components["schemas"]["BlockedTermListResponseDto"];
15317
+ };
15318
+ };
15319
+ /** @description Caller lacks `social.config.read`. */
15320
+ 403: {
15321
+ headers: {
15322
+ [name: string]: unknown;
15323
+ };
15324
+ content: {
15325
+ "application/json": components["schemas"]["ErrorResponseDto"];
15326
+ };
15327
+ };
15328
+ };
15329
+ };
15330
+ ModerationAdminController_addBlockedTerm: {
15331
+ parameters: {
15332
+ query?: never;
15333
+ header?: never;
15334
+ path: {
15335
+ workspaceId: string;
15336
+ communityId: string;
15337
+ };
15338
+ cookie?: never;
15339
+ };
15340
+ requestBody: {
15341
+ content: {
15342
+ "application/json": components["schemas"]["CreateBlockedTermDto"];
15343
+ };
15344
+ };
15345
+ responses: {
15346
+ /** @description Blocked term added. */
15347
+ 201: {
15348
+ headers: {
15349
+ [name: string]: unknown;
15350
+ };
15351
+ content: {
15352
+ "application/json": components["schemas"]["BlockedTermResponseDto"];
15353
+ };
15354
+ };
15355
+ /** @description Empty or over-length term. */
15356
+ 400: {
15357
+ headers: {
15358
+ [name: string]: unknown;
15359
+ };
15360
+ content: {
15361
+ "application/json": components["schemas"]["ErrorResponseDto"];
15362
+ };
15363
+ };
15364
+ /** @description Caller lacks `social.config.update`. */
15365
+ 403: {
15366
+ headers: {
15367
+ [name: string]: unknown;
15368
+ };
15369
+ content: {
15370
+ "application/json": components["schemas"]["ErrorResponseDto"];
15371
+ };
15372
+ };
15373
+ };
15374
+ };
15375
+ ModerationAdminController_removeBlockedTerm: {
15376
+ parameters: {
15377
+ query?: never;
15378
+ header?: never;
15379
+ path: {
15380
+ workspaceId: string;
15381
+ communityId: string;
15382
+ /** @description The blocked term to remove (case-insensitive). */
15383
+ term: string;
15384
+ };
15385
+ cookie?: never;
15386
+ };
15387
+ requestBody?: never;
15388
+ responses: {
15389
+ /** @description Removed (or no-op). */
15390
+ 204: {
15391
+ headers: {
15392
+ [name: string]: unknown;
15393
+ };
15394
+ content?: never;
15395
+ };
15396
+ /** @description Caller lacks `social.config.update`. */
15397
+ 403: {
15398
+ headers: {
15399
+ [name: string]: unknown;
15400
+ };
15401
+ content: {
15402
+ "application/json": components["schemas"]["ErrorResponseDto"];
15403
+ };
15404
+ };
15405
+ };
15406
+ };
12126
15407
  ConversationModerationController_listConversations: {
12127
15408
  parameters: {
12128
15409
  query?: {