@zilfu/sdk 0.0.1

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.
package/openapi.json ADDED
@@ -0,0 +1,3541 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Zilfu",
5
+ "version": "0.0.1"
6
+ },
7
+ "servers": [
8
+ {
9
+ "url": "https://zilfu.app/api"
10
+ }
11
+ ],
12
+ "security": [
13
+ {
14
+ "http": []
15
+ }
16
+ ],
17
+ "paths": {
18
+ "/spaces/{space}/accounts": {
19
+ "get": {
20
+ "operationId": "accounts.index",
21
+ "description": "Returns all connected social accounts for the given space.",
22
+ "summary": "List accounts",
23
+ "tags": [
24
+ "Account"
25
+ ],
26
+ "parameters": [
27
+ {
28
+ "name": "space",
29
+ "in": "path",
30
+ "required": true,
31
+ "description": "The space ID",
32
+ "schema": {
33
+ "type": "integer"
34
+ }
35
+ }
36
+ ],
37
+ "responses": {
38
+ "200": {
39
+ "description": "Array of `AccountResource`",
40
+ "content": {
41
+ "application/json": {
42
+ "schema": {
43
+ "type": "object",
44
+ "properties": {
45
+ "data": {
46
+ "type": "array",
47
+ "items": {
48
+ "$ref": "#/components/schemas/AccountResource"
49
+ }
50
+ }
51
+ },
52
+ "required": [
53
+ "data"
54
+ ]
55
+ }
56
+ }
57
+ }
58
+ },
59
+ "403": {
60
+ "$ref": "#/components/responses/AuthorizationException"
61
+ },
62
+ "404": {
63
+ "$ref": "#/components/responses/ModelNotFoundException"
64
+ },
65
+ "401": {
66
+ "$ref": "#/components/responses/AuthenticationException"
67
+ }
68
+ }
69
+ },
70
+ "delete": {
71
+ "operationId": "accounts.destroy-many",
72
+ "description": "Removes several social account connections in a single request and dispatches a webhook event for each.",
73
+ "summary": "Disconnect multiple accounts",
74
+ "tags": [
75
+ "Account"
76
+ ],
77
+ "parameters": [
78
+ {
79
+ "name": "space",
80
+ "in": "path",
81
+ "required": true,
82
+ "description": "The space ID",
83
+ "schema": {
84
+ "type": "integer"
85
+ }
86
+ },
87
+ {
88
+ "name": "ids[]",
89
+ "in": "query",
90
+ "schema": {
91
+ "type": "array",
92
+ "items": {
93
+ "type": "integer"
94
+ }
95
+ }
96
+ }
97
+ ],
98
+ "responses": {
99
+ "200": {
100
+ "description": "",
101
+ "content": {
102
+ "application/json": {
103
+ "schema": {
104
+ "type": "object"
105
+ }
106
+ }
107
+ }
108
+ },
109
+ "403": {
110
+ "$ref": "#/components/responses/AuthorizationException"
111
+ },
112
+ "422": {
113
+ "$ref": "#/components/responses/ValidationException"
114
+ },
115
+ "404": {
116
+ "$ref": "#/components/responses/ModelNotFoundException"
117
+ },
118
+ "401": {
119
+ "$ref": "#/components/responses/AuthenticationException"
120
+ }
121
+ }
122
+ }
123
+ },
124
+ "/spaces/{space}/accounts/{account}/activate": {
125
+ "patch": {
126
+ "operationId": "accounts.activate",
127
+ "description": "Activates the given account and deactivates all other accounts on the same platform within the space.",
128
+ "summary": "Activate an account",
129
+ "tags": [
130
+ "Account"
131
+ ],
132
+ "parameters": [
133
+ {
134
+ "name": "space",
135
+ "in": "path",
136
+ "required": true,
137
+ "description": "The space ID",
138
+ "schema": {
139
+ "type": "integer"
140
+ }
141
+ },
142
+ {
143
+ "name": "account",
144
+ "in": "path",
145
+ "required": true,
146
+ "description": "The account ID",
147
+ "schema": {
148
+ "type": "integer"
149
+ }
150
+ }
151
+ ],
152
+ "responses": {
153
+ "200": {
154
+ "description": "`AccountResource`",
155
+ "content": {
156
+ "application/json": {
157
+ "schema": {
158
+ "anyOf": [
159
+ {
160
+ "type": "object",
161
+ "properties": {
162
+ "data": {
163
+ "$ref": "#/components/schemas/AccountResource"
164
+ }
165
+ },
166
+ "required": [
167
+ "data"
168
+ ]
169
+ },
170
+ {
171
+ "type": "object"
172
+ }
173
+ ]
174
+ }
175
+ }
176
+ }
177
+ },
178
+ "403": {
179
+ "$ref": "#/components/responses/AuthorizationException"
180
+ },
181
+ "404": {
182
+ "$ref": "#/components/responses/ModelNotFoundException"
183
+ },
184
+ "401": {
185
+ "$ref": "#/components/responses/AuthenticationException"
186
+ }
187
+ }
188
+ }
189
+ },
190
+ "/spaces/{space}/accounts/{account}/boards": {
191
+ "get": {
192
+ "operationId": "accounts.boards",
193
+ "description": "Returns the Pinterest boards available for the given account.",
194
+ "summary": "List Pinterest boards",
195
+ "tags": [
196
+ "Account"
197
+ ],
198
+ "parameters": [
199
+ {
200
+ "name": "space",
201
+ "in": "path",
202
+ "required": true,
203
+ "description": "The space ID",
204
+ "schema": {
205
+ "type": "integer"
206
+ }
207
+ },
208
+ {
209
+ "name": "account",
210
+ "in": "path",
211
+ "required": true,
212
+ "description": "The account ID",
213
+ "schema": {
214
+ "type": "integer"
215
+ }
216
+ }
217
+ ],
218
+ "responses": {
219
+ "200": {
220
+ "description": "",
221
+ "content": {
222
+ "application/json": {
223
+ "schema": {
224
+ "type": "object",
225
+ "properties": {
226
+ "data": {
227
+ "type": "array",
228
+ "items": {
229
+ "type": "object",
230
+ "properties": {
231
+ "id": {
232
+ "type": "string"
233
+ },
234
+ "name": {
235
+ "type": "string"
236
+ },
237
+ "description": {
238
+ "type": [
239
+ "string",
240
+ "null"
241
+ ]
242
+ },
243
+ "image": {
244
+ "type": [
245
+ "string",
246
+ "null"
247
+ ]
248
+ }
249
+ },
250
+ "required": [
251
+ "id",
252
+ "name",
253
+ "description",
254
+ "image"
255
+ ]
256
+ }
257
+ }
258
+ },
259
+ "required": [
260
+ "data"
261
+ ]
262
+ }
263
+ }
264
+ }
265
+ },
266
+ "403": {
267
+ "$ref": "#/components/responses/AuthorizationException"
268
+ },
269
+ "404": {
270
+ "$ref": "#/components/responses/ModelNotFoundException"
271
+ },
272
+ "401": {
273
+ "$ref": "#/components/responses/AuthenticationException"
274
+ }
275
+ }
276
+ }
277
+ },
278
+ "/spaces/{space}/accounts/{account}": {
279
+ "delete": {
280
+ "operationId": "accounts.destroy",
281
+ "description": "Removes the social account connection and dispatches a webhook event.",
282
+ "summary": "Disconnect an account",
283
+ "tags": [
284
+ "Account"
285
+ ],
286
+ "parameters": [
287
+ {
288
+ "name": "space",
289
+ "in": "path",
290
+ "required": true,
291
+ "description": "The space ID",
292
+ "schema": {
293
+ "type": "integer"
294
+ }
295
+ },
296
+ {
297
+ "name": "account",
298
+ "in": "path",
299
+ "required": true,
300
+ "description": "The account ID",
301
+ "schema": {
302
+ "type": "integer"
303
+ }
304
+ }
305
+ ],
306
+ "responses": {
307
+ "200": {
308
+ "description": "",
309
+ "content": {
310
+ "application/json": {
311
+ "schema": {
312
+ "type": "object"
313
+ }
314
+ }
315
+ }
316
+ },
317
+ "403": {
318
+ "$ref": "#/components/responses/AuthorizationException"
319
+ },
320
+ "404": {
321
+ "$ref": "#/components/responses/ModelNotFoundException"
322
+ },
323
+ "401": {
324
+ "$ref": "#/components/responses/AuthenticationException"
325
+ }
326
+ }
327
+ }
328
+ },
329
+ "/api-tokens": {
330
+ "post": {
331
+ "operationId": "api-tokens.store",
332
+ "description": "Generates a new personal access token for the authenticated user.",
333
+ "summary": "Create an API token",
334
+ "tags": [
335
+ "ApiToken"
336
+ ],
337
+ "requestBody": {
338
+ "required": true,
339
+ "content": {
340
+ "application/json": {
341
+ "schema": {
342
+ "type": "object",
343
+ "properties": {
344
+ "name": {
345
+ "type": "string",
346
+ "maxLength": 255
347
+ }
348
+ },
349
+ "required": [
350
+ "name"
351
+ ]
352
+ }
353
+ }
354
+ }
355
+ },
356
+ "responses": {
357
+ "200": {
358
+ "description": "",
359
+ "content": {
360
+ "application/json": {
361
+ "schema": {}
362
+ }
363
+ }
364
+ },
365
+ "422": {
366
+ "$ref": "#/components/responses/ValidationException"
367
+ },
368
+ "401": {
369
+ "$ref": "#/components/responses/AuthenticationException"
370
+ }
371
+ }
372
+ }
373
+ },
374
+ "/api-tokens/{tokenId}": {
375
+ "delete": {
376
+ "operationId": "api-tokens.destroy",
377
+ "description": "Deletes the specified personal access token.",
378
+ "summary": "Revoke an API token",
379
+ "tags": [
380
+ "ApiToken"
381
+ ],
382
+ "parameters": [
383
+ {
384
+ "name": "tokenId",
385
+ "in": "path",
386
+ "required": true,
387
+ "schema": {
388
+ "type": "string"
389
+ }
390
+ }
391
+ ],
392
+ "responses": {
393
+ "200": {
394
+ "description": "",
395
+ "content": {
396
+ "application/json": {
397
+ "schema": {}
398
+ }
399
+ }
400
+ },
401
+ "401": {
402
+ "$ref": "#/components/responses/AuthenticationException"
403
+ }
404
+ }
405
+ }
406
+ },
407
+ "/spaces/{space}/bio/blocks": {
408
+ "get": {
409
+ "operationId": "bio.blocks.index",
410
+ "tags": [
411
+ "BioBlock"
412
+ ],
413
+ "parameters": [
414
+ {
415
+ "name": "space",
416
+ "in": "path",
417
+ "required": true,
418
+ "description": "The space ID",
419
+ "schema": {
420
+ "type": "integer"
421
+ }
422
+ }
423
+ ],
424
+ "responses": {
425
+ "200": {
426
+ "description": "Array of items",
427
+ "content": {
428
+ "application/json": {
429
+ "schema": {
430
+ "type": "object",
431
+ "properties": {
432
+ "data": {
433
+ "type": "array",
434
+ "items": {
435
+ "type": "string"
436
+ }
437
+ }
438
+ },
439
+ "required": [
440
+ "data"
441
+ ]
442
+ }
443
+ }
444
+ }
445
+ },
446
+ "403": {
447
+ "$ref": "#/components/responses/AuthorizationException"
448
+ },
449
+ "404": {
450
+ "$ref": "#/components/responses/ModelNotFoundException"
451
+ },
452
+ "401": {
453
+ "$ref": "#/components/responses/AuthenticationException"
454
+ }
455
+ }
456
+ },
457
+ "post": {
458
+ "operationId": "bio.blocks.store",
459
+ "tags": [
460
+ "BioBlock"
461
+ ],
462
+ "parameters": [
463
+ {
464
+ "name": "space",
465
+ "in": "path",
466
+ "required": true,
467
+ "description": "The space ID",
468
+ "schema": {
469
+ "type": "integer"
470
+ }
471
+ }
472
+ ],
473
+ "requestBody": {
474
+ "required": true,
475
+ "content": {
476
+ "application/json": {
477
+ "schema": {
478
+ "$ref": "#/components/schemas/StoreBioBlockRequest"
479
+ }
480
+ }
481
+ }
482
+ },
483
+ "responses": {
484
+ "200": {
485
+ "description": "",
486
+ "content": {
487
+ "application/json": {
488
+ "schema": {
489
+ "type": "object"
490
+ }
491
+ }
492
+ }
493
+ },
494
+ "403": {
495
+ "$ref": "#/components/responses/AuthorizationException"
496
+ },
497
+ "404": {
498
+ "$ref": "#/components/responses/ModelNotFoundException"
499
+ },
500
+ "401": {
501
+ "$ref": "#/components/responses/AuthenticationException"
502
+ },
503
+ "422": {
504
+ "$ref": "#/components/responses/ValidationException"
505
+ }
506
+ }
507
+ }
508
+ },
509
+ "/spaces/{space}/bio/blocks/{block}": {
510
+ "put": {
511
+ "operationId": "bio.blocks.update",
512
+ "tags": [
513
+ "BioBlock"
514
+ ],
515
+ "parameters": [
516
+ {
517
+ "name": "space",
518
+ "in": "path",
519
+ "required": true,
520
+ "description": "The space ID",
521
+ "schema": {
522
+ "type": "integer"
523
+ }
524
+ },
525
+ {
526
+ "name": "block",
527
+ "in": "path",
528
+ "required": true,
529
+ "description": "The block ID",
530
+ "schema": {
531
+ "type": "integer"
532
+ }
533
+ }
534
+ ],
535
+ "requestBody": {
536
+ "content": {
537
+ "application/json": {
538
+ "schema": {
539
+ "$ref": "#/components/schemas/UpdateBioBlockRequest"
540
+ }
541
+ }
542
+ }
543
+ },
544
+ "responses": {
545
+ "200": {
546
+ "description": "`BioBlockResource`",
547
+ "content": {
548
+ "application/json": {
549
+ "schema": {
550
+ "anyOf": [
551
+ {
552
+ "type": "object",
553
+ "properties": {
554
+ "data": {
555
+ "$ref": "#/components/schemas/BioBlockResource"
556
+ }
557
+ },
558
+ "required": [
559
+ "data"
560
+ ]
561
+ },
562
+ {
563
+ "type": "object"
564
+ }
565
+ ]
566
+ }
567
+ }
568
+ }
569
+ },
570
+ "403": {
571
+ "$ref": "#/components/responses/AuthorizationException"
572
+ },
573
+ "404": {
574
+ "$ref": "#/components/responses/ModelNotFoundException"
575
+ },
576
+ "401": {
577
+ "$ref": "#/components/responses/AuthenticationException"
578
+ },
579
+ "422": {
580
+ "$ref": "#/components/responses/ValidationException"
581
+ }
582
+ }
583
+ },
584
+ "delete": {
585
+ "operationId": "bio.blocks.destroy",
586
+ "tags": [
587
+ "BioBlock"
588
+ ],
589
+ "parameters": [
590
+ {
591
+ "name": "space",
592
+ "in": "path",
593
+ "required": true,
594
+ "description": "The space ID",
595
+ "schema": {
596
+ "type": "integer"
597
+ }
598
+ },
599
+ {
600
+ "name": "block",
601
+ "in": "path",
602
+ "required": true,
603
+ "description": "The block ID",
604
+ "schema": {
605
+ "type": "integer"
606
+ }
607
+ }
608
+ ],
609
+ "responses": {
610
+ "200": {
611
+ "description": "",
612
+ "content": {
613
+ "application/json": {
614
+ "schema": {
615
+ "type": "object"
616
+ }
617
+ }
618
+ }
619
+ },
620
+ "403": {
621
+ "$ref": "#/components/responses/AuthorizationException"
622
+ },
623
+ "404": {
624
+ "$ref": "#/components/responses/ModelNotFoundException"
625
+ },
626
+ "401": {
627
+ "$ref": "#/components/responses/AuthenticationException"
628
+ }
629
+ }
630
+ }
631
+ },
632
+ "/spaces/{space}/bio/blocks/{block}/reorder": {
633
+ "post": {
634
+ "operationId": "bio.blocks.reorder",
635
+ "tags": [
636
+ "BioBlock"
637
+ ],
638
+ "parameters": [
639
+ {
640
+ "name": "space",
641
+ "in": "path",
642
+ "required": true,
643
+ "description": "The space ID",
644
+ "schema": {
645
+ "type": "integer"
646
+ }
647
+ },
648
+ {
649
+ "name": "block",
650
+ "in": "path",
651
+ "required": true,
652
+ "description": "The block ID",
653
+ "schema": {
654
+ "type": "integer"
655
+ }
656
+ }
657
+ ],
658
+ "requestBody": {
659
+ "required": true,
660
+ "content": {
661
+ "application/json": {
662
+ "schema": {
663
+ "type": "object",
664
+ "properties": {
665
+ "direction": {
666
+ "type": "string",
667
+ "enum": [
668
+ "up",
669
+ "down"
670
+ ]
671
+ }
672
+ },
673
+ "required": [
674
+ "direction"
675
+ ]
676
+ }
677
+ }
678
+ }
679
+ },
680
+ "responses": {
681
+ "200": {
682
+ "description": "",
683
+ "content": {
684
+ "application/json": {
685
+ "schema": {
686
+ "type": "object"
687
+ }
688
+ }
689
+ }
690
+ },
691
+ "403": {
692
+ "$ref": "#/components/responses/AuthorizationException"
693
+ },
694
+ "422": {
695
+ "$ref": "#/components/responses/ValidationException"
696
+ },
697
+ "404": {
698
+ "$ref": "#/components/responses/ModelNotFoundException"
699
+ },
700
+ "401": {
701
+ "$ref": "#/components/responses/AuthenticationException"
702
+ }
703
+ }
704
+ }
705
+ },
706
+ "/spaces/{space}/bio": {
707
+ "get": {
708
+ "operationId": "bio.show",
709
+ "tags": [
710
+ "BioPageEditor"
711
+ ],
712
+ "parameters": [
713
+ {
714
+ "name": "space",
715
+ "in": "path",
716
+ "required": true,
717
+ "description": "The space ID",
718
+ "schema": {
719
+ "type": "integer"
720
+ }
721
+ }
722
+ ],
723
+ "responses": {
724
+ "200": {
725
+ "description": "`BioPageResource`",
726
+ "content": {
727
+ "application/json": {
728
+ "schema": {
729
+ "type": "object",
730
+ "properties": {
731
+ "data": {
732
+ "$ref": "#/components/schemas/BioPageResource"
733
+ }
734
+ },
735
+ "required": [
736
+ "data"
737
+ ]
738
+ }
739
+ }
740
+ }
741
+ },
742
+ "403": {
743
+ "$ref": "#/components/responses/AuthorizationException"
744
+ },
745
+ "404": {
746
+ "$ref": "#/components/responses/ModelNotFoundException"
747
+ },
748
+ "401": {
749
+ "$ref": "#/components/responses/AuthenticationException"
750
+ }
751
+ }
752
+ },
753
+ "post": {
754
+ "operationId": "bio.store",
755
+ "tags": [
756
+ "BioPageEditor"
757
+ ],
758
+ "parameters": [
759
+ {
760
+ "name": "space",
761
+ "in": "path",
762
+ "required": true,
763
+ "description": "The space ID",
764
+ "schema": {
765
+ "type": "integer"
766
+ }
767
+ }
768
+ ],
769
+ "requestBody": {
770
+ "required": true,
771
+ "content": {
772
+ "application/json": {
773
+ "schema": {
774
+ "$ref": "#/components/schemas/StoreBioPageRequest"
775
+ }
776
+ }
777
+ }
778
+ },
779
+ "responses": {
780
+ "200": {
781
+ "description": "",
782
+ "content": {
783
+ "application/json": {
784
+ "schema": {
785
+ "type": "object"
786
+ }
787
+ }
788
+ }
789
+ },
790
+ "403": {
791
+ "$ref": "#/components/responses/AuthorizationException"
792
+ },
793
+ "404": {
794
+ "$ref": "#/components/responses/ModelNotFoundException"
795
+ },
796
+ "401": {
797
+ "$ref": "#/components/responses/AuthenticationException"
798
+ },
799
+ "422": {
800
+ "$ref": "#/components/responses/ValidationException"
801
+ }
802
+ }
803
+ },
804
+ "put": {
805
+ "operationId": "bio.update",
806
+ "tags": [
807
+ "BioPageEditor"
808
+ ],
809
+ "parameters": [
810
+ {
811
+ "name": "space",
812
+ "in": "path",
813
+ "required": true,
814
+ "description": "The space ID",
815
+ "schema": {
816
+ "type": "integer"
817
+ }
818
+ }
819
+ ],
820
+ "requestBody": {
821
+ "content": {
822
+ "application/json": {
823
+ "schema": {
824
+ "$ref": "#/components/schemas/UpdateBioPageRequest"
825
+ }
826
+ }
827
+ }
828
+ },
829
+ "responses": {
830
+ "200": {
831
+ "description": "`BioPageResource`",
832
+ "content": {
833
+ "application/json": {
834
+ "schema": {
835
+ "anyOf": [
836
+ {
837
+ "type": "object",
838
+ "properties": {
839
+ "data": {
840
+ "$ref": "#/components/schemas/BioPageResource"
841
+ }
842
+ },
843
+ "required": [
844
+ "data"
845
+ ]
846
+ },
847
+ {
848
+ "type": "object"
849
+ }
850
+ ]
851
+ }
852
+ }
853
+ }
854
+ },
855
+ "404": {
856
+ "$ref": "#/components/responses/ModelNotFoundException"
857
+ },
858
+ "403": {
859
+ "$ref": "#/components/responses/AuthorizationException"
860
+ },
861
+ "401": {
862
+ "$ref": "#/components/responses/AuthenticationException"
863
+ },
864
+ "422": {
865
+ "$ref": "#/components/responses/ValidationException"
866
+ }
867
+ }
868
+ }
869
+ },
870
+ "/spaces/{space}/bio/avatar": {
871
+ "post": {
872
+ "operationId": "bio.avatar",
873
+ "tags": [
874
+ "BioPageEditor"
875
+ ],
876
+ "parameters": [
877
+ {
878
+ "name": "space",
879
+ "in": "path",
880
+ "required": true,
881
+ "description": "The space ID",
882
+ "schema": {
883
+ "type": "integer"
884
+ }
885
+ }
886
+ ],
887
+ "requestBody": {
888
+ "required": true,
889
+ "content": {
890
+ "multipart/form-data": {
891
+ "schema": {
892
+ "type": "object",
893
+ "properties": {
894
+ "file": {
895
+ "type": "string",
896
+ "format": "binary",
897
+ "contentMediaType": "application/octet-stream",
898
+ "maxLength": 5120
899
+ }
900
+ },
901
+ "required": [
902
+ "file"
903
+ ]
904
+ }
905
+ }
906
+ }
907
+ },
908
+ "responses": {
909
+ "200": {
910
+ "description": "",
911
+ "content": {
912
+ "application/json": {
913
+ "schema": {
914
+ "type": "object"
915
+ }
916
+ }
917
+ }
918
+ },
919
+ "404": {
920
+ "$ref": "#/components/responses/ModelNotFoundException"
921
+ },
922
+ "403": {
923
+ "$ref": "#/components/responses/AuthorizationException"
924
+ },
925
+ "422": {
926
+ "$ref": "#/components/responses/ValidationException"
927
+ },
928
+ "401": {
929
+ "$ref": "#/components/responses/AuthenticationException"
930
+ }
931
+ }
932
+ }
933
+ },
934
+ "/media": {
935
+ "post": {
936
+ "operationId": "media.store",
937
+ "description": "Accepts images (JPEG, PNG, WebP) and videos (MP4, QuickTime). Images are auto-optimized.",
938
+ "summary": "Upload a media file",
939
+ "tags": [
940
+ "Media"
941
+ ],
942
+ "requestBody": {
943
+ "required": true,
944
+ "content": {
945
+ "multipart/form-data": {
946
+ "schema": {
947
+ "type": "object",
948
+ "properties": {
949
+ "file": {
950
+ "type": "string",
951
+ "format": "binary",
952
+ "contentMediaType": "application/octet-stream",
953
+ "maxLength": 102400
954
+ }
955
+ },
956
+ "required": [
957
+ "file"
958
+ ]
959
+ }
960
+ }
961
+ }
962
+ },
963
+ "responses": {
964
+ "201": {
965
+ "description": "`MediaResource`",
966
+ "content": {
967
+ "application/json": {
968
+ "schema": {
969
+ "type": "object",
970
+ "properties": {
971
+ "data": {
972
+ "$ref": "#/components/schemas/MediaResource"
973
+ }
974
+ },
975
+ "required": [
976
+ "data"
977
+ ]
978
+ }
979
+ }
980
+ }
981
+ },
982
+ "422": {
983
+ "$ref": "#/components/responses/ValidationException"
984
+ },
985
+ "401": {
986
+ "$ref": "#/components/responses/AuthenticationException"
987
+ }
988
+ }
989
+ }
990
+ },
991
+ "/media/{media}": {
992
+ "delete": {
993
+ "operationId": "media.destroy",
994
+ "description": "Removes the media file from storage and deletes the record.",
995
+ "summary": "Delete a media file",
996
+ "tags": [
997
+ "Media"
998
+ ],
999
+ "parameters": [
1000
+ {
1001
+ "name": "media",
1002
+ "in": "path",
1003
+ "required": true,
1004
+ "description": "The media ID",
1005
+ "schema": {
1006
+ "type": "integer"
1007
+ }
1008
+ }
1009
+ ],
1010
+ "responses": {
1011
+ "200": {
1012
+ "description": "",
1013
+ "content": {
1014
+ "application/json": {
1015
+ "schema": {
1016
+ "type": "object"
1017
+ }
1018
+ }
1019
+ }
1020
+ },
1021
+ "403": {
1022
+ "$ref": "#/components/responses/AuthorizationException"
1023
+ },
1024
+ "404": {
1025
+ "$ref": "#/components/responses/ModelNotFoundException"
1026
+ },
1027
+ "401": {
1028
+ "$ref": "#/components/responses/AuthenticationException"
1029
+ }
1030
+ }
1031
+ }
1032
+ },
1033
+ "/spaces/{space}/posts": {
1034
+ "get": {
1035
+ "operationId": "posts.index",
1036
+ "description": "Returns paginated posts for the space. Filterable by status, account, and date range via query parameters.",
1037
+ "summary": "List posts",
1038
+ "tags": [
1039
+ "Post"
1040
+ ],
1041
+ "parameters": [
1042
+ {
1043
+ "name": "space",
1044
+ "in": "path",
1045
+ "required": true,
1046
+ "description": "The space ID",
1047
+ "schema": {
1048
+ "type": "integer"
1049
+ }
1050
+ },
1051
+ {
1052
+ "name": "status",
1053
+ "in": "query",
1054
+ "schema": {
1055
+ "type": "string"
1056
+ }
1057
+ },
1058
+ {
1059
+ "name": "account_id",
1060
+ "in": "query",
1061
+ "schema": {
1062
+ "type": "string"
1063
+ }
1064
+ },
1065
+ {
1066
+ "name": "from",
1067
+ "in": "query",
1068
+ "schema": {
1069
+ "type": "string"
1070
+ }
1071
+ },
1072
+ {
1073
+ "name": "to",
1074
+ "in": "query",
1075
+ "schema": {
1076
+ "type": "string"
1077
+ }
1078
+ }
1079
+ ],
1080
+ "responses": {
1081
+ "200": {
1082
+ "description": "Paginated set of `PostResource`",
1083
+ "content": {
1084
+ "application/json": {
1085
+ "schema": {
1086
+ "type": "object",
1087
+ "properties": {
1088
+ "data": {
1089
+ "type": "array",
1090
+ "items": {
1091
+ "$ref": "#/components/schemas/PostResource"
1092
+ }
1093
+ },
1094
+ "links": {
1095
+ "type": "object",
1096
+ "properties": {
1097
+ "first": {
1098
+ "type": [
1099
+ "string",
1100
+ "null"
1101
+ ]
1102
+ },
1103
+ "last": {
1104
+ "type": [
1105
+ "string",
1106
+ "null"
1107
+ ]
1108
+ },
1109
+ "prev": {
1110
+ "type": [
1111
+ "string",
1112
+ "null"
1113
+ ]
1114
+ },
1115
+ "next": {
1116
+ "type": [
1117
+ "string",
1118
+ "null"
1119
+ ]
1120
+ }
1121
+ },
1122
+ "required": [
1123
+ "first",
1124
+ "last",
1125
+ "prev",
1126
+ "next"
1127
+ ]
1128
+ },
1129
+ "meta": {
1130
+ "type": "object",
1131
+ "properties": {
1132
+ "current_page": {
1133
+ "type": "integer",
1134
+ "minimum": 1
1135
+ },
1136
+ "from": {
1137
+ "type": [
1138
+ "integer",
1139
+ "null"
1140
+ ],
1141
+ "minimum": 1
1142
+ },
1143
+ "last_page": {
1144
+ "type": "integer",
1145
+ "minimum": 1
1146
+ },
1147
+ "links": {
1148
+ "type": "array",
1149
+ "description": "Generated paginator links.",
1150
+ "items": {
1151
+ "type": "object",
1152
+ "properties": {
1153
+ "url": {
1154
+ "type": [
1155
+ "string",
1156
+ "null"
1157
+ ]
1158
+ },
1159
+ "label": {
1160
+ "type": "string"
1161
+ },
1162
+ "active": {
1163
+ "type": "boolean"
1164
+ }
1165
+ },
1166
+ "required": [
1167
+ "url",
1168
+ "label",
1169
+ "active"
1170
+ ]
1171
+ }
1172
+ },
1173
+ "path": {
1174
+ "type": [
1175
+ "string",
1176
+ "null"
1177
+ ],
1178
+ "description": "Base path for paginator generated URLs."
1179
+ },
1180
+ "per_page": {
1181
+ "type": "integer",
1182
+ "description": "Number of items shown per page.",
1183
+ "minimum": 0
1184
+ },
1185
+ "to": {
1186
+ "type": [
1187
+ "integer",
1188
+ "null"
1189
+ ],
1190
+ "description": "Number of the last item in the slice.",
1191
+ "minimum": 1
1192
+ },
1193
+ "total": {
1194
+ "type": "integer",
1195
+ "description": "Total number of items being paginated.",
1196
+ "minimum": 0
1197
+ }
1198
+ },
1199
+ "required": [
1200
+ "current_page",
1201
+ "from",
1202
+ "last_page",
1203
+ "links",
1204
+ "path",
1205
+ "per_page",
1206
+ "to",
1207
+ "total"
1208
+ ]
1209
+ }
1210
+ },
1211
+ "required": [
1212
+ "data",
1213
+ "links",
1214
+ "meta"
1215
+ ]
1216
+ }
1217
+ }
1218
+ }
1219
+ },
1220
+ "403": {
1221
+ "$ref": "#/components/responses/AuthorizationException"
1222
+ },
1223
+ "404": {
1224
+ "$ref": "#/components/responses/ModelNotFoundException"
1225
+ },
1226
+ "401": {
1227
+ "$ref": "#/components/responses/AuthenticationException"
1228
+ }
1229
+ }
1230
+ },
1231
+ "post": {
1232
+ "operationId": "posts.store",
1233
+ "description": "Creates one or more posts as a cluster. Supports draft, scheduled, or immediate publishing modes.",
1234
+ "summary": "Create posts",
1235
+ "tags": [
1236
+ "Post"
1237
+ ],
1238
+ "parameters": [
1239
+ {
1240
+ "name": "space",
1241
+ "in": "path",
1242
+ "required": true,
1243
+ "schema": {
1244
+ "type": "string"
1245
+ }
1246
+ }
1247
+ ],
1248
+ "requestBody": {
1249
+ "required": true,
1250
+ "content": {
1251
+ "application/json": {
1252
+ "schema": {
1253
+ "$ref": "#/components/schemas/StorePostRequest"
1254
+ }
1255
+ }
1256
+ }
1257
+ },
1258
+ "responses": {
1259
+ "200": {
1260
+ "description": "",
1261
+ "content": {
1262
+ "application/json": {
1263
+ "schema": {
1264
+ "type": "object"
1265
+ }
1266
+ }
1267
+ }
1268
+ },
1269
+ "401": {
1270
+ "$ref": "#/components/responses/AuthenticationException"
1271
+ },
1272
+ "422": {
1273
+ "$ref": "#/components/responses/ValidationException"
1274
+ },
1275
+ "403": {
1276
+ "$ref": "#/components/responses/AuthorizationException"
1277
+ }
1278
+ }
1279
+ }
1280
+ },
1281
+ "/spaces/{space}/posts/{post}": {
1282
+ "get": {
1283
+ "operationId": "posts.show",
1284
+ "description": "Returns a single post with its account, children, and media.",
1285
+ "summary": "Get a post",
1286
+ "tags": [
1287
+ "Post"
1288
+ ],
1289
+ "parameters": [
1290
+ {
1291
+ "name": "space",
1292
+ "in": "path",
1293
+ "required": true,
1294
+ "description": "The space ID",
1295
+ "schema": {
1296
+ "type": "integer"
1297
+ }
1298
+ },
1299
+ {
1300
+ "name": "post",
1301
+ "in": "path",
1302
+ "required": true,
1303
+ "description": "The post ID",
1304
+ "schema": {
1305
+ "type": "integer"
1306
+ }
1307
+ }
1308
+ ],
1309
+ "responses": {
1310
+ "200": {
1311
+ "description": "`PostResource`",
1312
+ "content": {
1313
+ "application/json": {
1314
+ "schema": {
1315
+ "type": "object",
1316
+ "properties": {
1317
+ "data": {
1318
+ "$ref": "#/components/schemas/PostResource"
1319
+ }
1320
+ },
1321
+ "required": [
1322
+ "data"
1323
+ ]
1324
+ }
1325
+ }
1326
+ }
1327
+ },
1328
+ "403": {
1329
+ "$ref": "#/components/responses/AuthorizationException"
1330
+ },
1331
+ "404": {
1332
+ "$ref": "#/components/responses/ModelNotFoundException"
1333
+ },
1334
+ "401": {
1335
+ "$ref": "#/components/responses/AuthenticationException"
1336
+ }
1337
+ }
1338
+ },
1339
+ "put": {
1340
+ "operationId": "posts.update",
1341
+ "description": "Updates a single post's content, schedule, and media attachments.",
1342
+ "summary": "Update a post",
1343
+ "tags": [
1344
+ "Post"
1345
+ ],
1346
+ "parameters": [
1347
+ {
1348
+ "name": "space",
1349
+ "in": "path",
1350
+ "required": true,
1351
+ "description": "The space ID",
1352
+ "schema": {
1353
+ "type": "integer"
1354
+ }
1355
+ },
1356
+ {
1357
+ "name": "post",
1358
+ "in": "path",
1359
+ "required": true,
1360
+ "description": "The post ID",
1361
+ "schema": {
1362
+ "type": "integer"
1363
+ }
1364
+ }
1365
+ ],
1366
+ "requestBody": {
1367
+ "content": {
1368
+ "application/json": {
1369
+ "schema": {
1370
+ "$ref": "#/components/schemas/UpdatePostRequest"
1371
+ }
1372
+ }
1373
+ }
1374
+ },
1375
+ "responses": {
1376
+ "200": {
1377
+ "description": "`PostResource`",
1378
+ "content": {
1379
+ "application/json": {
1380
+ "schema": {
1381
+ "anyOf": [
1382
+ {
1383
+ "type": "object",
1384
+ "properties": {
1385
+ "data": {
1386
+ "$ref": "#/components/schemas/PostResource"
1387
+ }
1388
+ },
1389
+ "required": [
1390
+ "data"
1391
+ ]
1392
+ },
1393
+ {
1394
+ "type": "object"
1395
+ }
1396
+ ]
1397
+ }
1398
+ }
1399
+ }
1400
+ },
1401
+ "403": {
1402
+ "$ref": "#/components/responses/AuthorizationException"
1403
+ },
1404
+ "404": {
1405
+ "$ref": "#/components/responses/ModelNotFoundException"
1406
+ },
1407
+ "401": {
1408
+ "$ref": "#/components/responses/AuthenticationException"
1409
+ },
1410
+ "422": {
1411
+ "$ref": "#/components/responses/ValidationException"
1412
+ }
1413
+ }
1414
+ },
1415
+ "delete": {
1416
+ "operationId": "posts.destroy",
1417
+ "description": "Permanently deletes the given post.",
1418
+ "summary": "Delete a post",
1419
+ "tags": [
1420
+ "Post"
1421
+ ],
1422
+ "parameters": [
1423
+ {
1424
+ "name": "space",
1425
+ "in": "path",
1426
+ "required": true,
1427
+ "description": "The space ID",
1428
+ "schema": {
1429
+ "type": "integer"
1430
+ }
1431
+ },
1432
+ {
1433
+ "name": "post",
1434
+ "in": "path",
1435
+ "required": true,
1436
+ "description": "The post ID",
1437
+ "schema": {
1438
+ "type": "integer"
1439
+ }
1440
+ }
1441
+ ],
1442
+ "responses": {
1443
+ "200": {
1444
+ "description": "",
1445
+ "content": {
1446
+ "application/json": {
1447
+ "schema": {
1448
+ "type": "object"
1449
+ }
1450
+ }
1451
+ }
1452
+ },
1453
+ "403": {
1454
+ "$ref": "#/components/responses/AuthorizationException"
1455
+ },
1456
+ "404": {
1457
+ "$ref": "#/components/responses/ModelNotFoundException"
1458
+ },
1459
+ "401": {
1460
+ "$ref": "#/components/responses/AuthenticationException"
1461
+ }
1462
+ }
1463
+ }
1464
+ },
1465
+ "/spaces/{space}/clusters/{cluster_id}": {
1466
+ "put": {
1467
+ "operationId": "clusters.update",
1468
+ "description": "Updates all posts sharing the given cluster ID. Handles adding/removing accounts and re-scheduling.",
1469
+ "summary": "Update a cluster of posts",
1470
+ "tags": [
1471
+ "Post"
1472
+ ],
1473
+ "parameters": [
1474
+ {
1475
+ "name": "space",
1476
+ "in": "path",
1477
+ "required": true,
1478
+ "description": "The space ID",
1479
+ "schema": {
1480
+ "type": "integer"
1481
+ }
1482
+ },
1483
+ {
1484
+ "name": "cluster_id",
1485
+ "in": "path",
1486
+ "required": true,
1487
+ "schema": {
1488
+ "type": "string"
1489
+ }
1490
+ }
1491
+ ],
1492
+ "requestBody": {
1493
+ "required": true,
1494
+ "content": {
1495
+ "application/json": {
1496
+ "schema": {
1497
+ "$ref": "#/components/schemas/UpdateClusterRequest"
1498
+ }
1499
+ }
1500
+ }
1501
+ },
1502
+ "responses": {
1503
+ "200": {
1504
+ "description": "Array of items",
1505
+ "content": {
1506
+ "application/json": {
1507
+ "schema": {
1508
+ "anyOf": [
1509
+ {
1510
+ "type": "object",
1511
+ "properties": {
1512
+ "data": {
1513
+ "type": "array",
1514
+ "items": {
1515
+ "type": "string"
1516
+ }
1517
+ }
1518
+ },
1519
+ "required": [
1520
+ "data"
1521
+ ]
1522
+ },
1523
+ {
1524
+ "type": "object"
1525
+ }
1526
+ ]
1527
+ }
1528
+ }
1529
+ }
1530
+ },
1531
+ "404": {
1532
+ "$ref": "#/components/responses/ModelNotFoundException"
1533
+ },
1534
+ "401": {
1535
+ "$ref": "#/components/responses/AuthenticationException"
1536
+ },
1537
+ "422": {
1538
+ "$ref": "#/components/responses/ValidationException"
1539
+ },
1540
+ "403": {
1541
+ "$ref": "#/components/responses/AuthorizationException"
1542
+ }
1543
+ }
1544
+ }
1545
+ },
1546
+ "/spaces/{space}/queue": {
1547
+ "get": {
1548
+ "operationId": "queue.index",
1549
+ "description": "Returns up to 9 upcoming available time slots based on the space's scheduling configuration.",
1550
+ "summary": "Get next available queue slots",
1551
+ "tags": [
1552
+ "Queue"
1553
+ ],
1554
+ "parameters": [
1555
+ {
1556
+ "name": "space",
1557
+ "in": "path",
1558
+ "required": true,
1559
+ "description": "The space ID",
1560
+ "schema": {
1561
+ "type": "integer"
1562
+ }
1563
+ }
1564
+ ],
1565
+ "responses": {
1566
+ "200": {
1567
+ "description": "",
1568
+ "content": {
1569
+ "application/json": {
1570
+ "schema": {
1571
+ "anyOf": [
1572
+ {
1573
+ "type": "object",
1574
+ "properties": {
1575
+ "data": {
1576
+ "type": "array",
1577
+ "items": {
1578
+ "type": "object",
1579
+ "properties": {
1580
+ "datetime": {
1581
+ "type": "string"
1582
+ },
1583
+ "timestamp_ms": {
1584
+ "type": "string"
1585
+ },
1586
+ "label": {
1587
+ "type": "string"
1588
+ }
1589
+ },
1590
+ "required": [
1591
+ "datetime",
1592
+ "timestamp_ms",
1593
+ "label"
1594
+ ]
1595
+ }
1596
+ }
1597
+ },
1598
+ "required": [
1599
+ "data"
1600
+ ]
1601
+ },
1602
+ {
1603
+ "type": "object",
1604
+ "properties": {
1605
+ "data": {
1606
+ "type": "array",
1607
+ "items": {
1608
+ "type": "string"
1609
+ },
1610
+ "minItems": 0,
1611
+ "maxItems": 0,
1612
+ "additionalItems": false
1613
+ }
1614
+ },
1615
+ "required": [
1616
+ "data"
1617
+ ]
1618
+ }
1619
+ ]
1620
+ }
1621
+ }
1622
+ }
1623
+ },
1624
+ "403": {
1625
+ "$ref": "#/components/responses/AuthorizationException"
1626
+ },
1627
+ "404": {
1628
+ "$ref": "#/components/responses/ModelNotFoundException"
1629
+ },
1630
+ "401": {
1631
+ "$ref": "#/components/responses/AuthenticationException"
1632
+ }
1633
+ }
1634
+ }
1635
+ },
1636
+ "/spaces/{space}/slots": {
1637
+ "get": {
1638
+ "operationId": "slots.index",
1639
+ "description": "Returns all scheduling slots for the space, ordered by day and time.",
1640
+ "summary": "List slots",
1641
+ "tags": [
1642
+ "Slot"
1643
+ ],
1644
+ "parameters": [
1645
+ {
1646
+ "name": "space",
1647
+ "in": "path",
1648
+ "required": true,
1649
+ "description": "The space ID",
1650
+ "schema": {
1651
+ "type": "integer"
1652
+ }
1653
+ }
1654
+ ],
1655
+ "responses": {
1656
+ "200": {
1657
+ "description": "Array of `SlotResource`",
1658
+ "content": {
1659
+ "application/json": {
1660
+ "schema": {
1661
+ "type": "object",
1662
+ "properties": {
1663
+ "data": {
1664
+ "type": "array",
1665
+ "items": {
1666
+ "$ref": "#/components/schemas/SlotResource"
1667
+ }
1668
+ }
1669
+ },
1670
+ "required": [
1671
+ "data"
1672
+ ]
1673
+ }
1674
+ }
1675
+ }
1676
+ },
1677
+ "403": {
1678
+ "$ref": "#/components/responses/AuthorizationException"
1679
+ },
1680
+ "404": {
1681
+ "$ref": "#/components/responses/ModelNotFoundException"
1682
+ },
1683
+ "401": {
1684
+ "$ref": "#/components/responses/AuthenticationException"
1685
+ }
1686
+ }
1687
+ },
1688
+ "post": {
1689
+ "operationId": "slots.store",
1690
+ "description": "Creates scheduling slots for the given days of the week and time.",
1691
+ "summary": "Create slots",
1692
+ "tags": [
1693
+ "Slot"
1694
+ ],
1695
+ "parameters": [
1696
+ {
1697
+ "name": "space",
1698
+ "in": "path",
1699
+ "required": true,
1700
+ "description": "The space ID",
1701
+ "schema": {
1702
+ "type": "integer"
1703
+ }
1704
+ }
1705
+ ],
1706
+ "requestBody": {
1707
+ "required": true,
1708
+ "content": {
1709
+ "application/json": {
1710
+ "schema": {
1711
+ "$ref": "#/components/schemas/StoreSlotRequest"
1712
+ }
1713
+ }
1714
+ }
1715
+ },
1716
+ "responses": {
1717
+ "200": {
1718
+ "description": "",
1719
+ "content": {
1720
+ "application/json": {
1721
+ "schema": {
1722
+ "type": "object"
1723
+ }
1724
+ }
1725
+ }
1726
+ },
1727
+ "403": {
1728
+ "$ref": "#/components/responses/AuthorizationException"
1729
+ },
1730
+ "404": {
1731
+ "$ref": "#/components/responses/ModelNotFoundException"
1732
+ },
1733
+ "401": {
1734
+ "$ref": "#/components/responses/AuthenticationException"
1735
+ },
1736
+ "422": {
1737
+ "$ref": "#/components/responses/ValidationException"
1738
+ }
1739
+ }
1740
+ }
1741
+ },
1742
+ "/spaces/{space}/slots/{slot}": {
1743
+ "delete": {
1744
+ "operationId": "slots.destroy",
1745
+ "description": "Removes a scheduling slot from the space.",
1746
+ "summary": "Delete a slot",
1747
+ "tags": [
1748
+ "Slot"
1749
+ ],
1750
+ "parameters": [
1751
+ {
1752
+ "name": "space",
1753
+ "in": "path",
1754
+ "required": true,
1755
+ "description": "The space ID",
1756
+ "schema": {
1757
+ "type": "integer"
1758
+ }
1759
+ },
1760
+ {
1761
+ "name": "slot",
1762
+ "in": "path",
1763
+ "required": true,
1764
+ "description": "The slot ID",
1765
+ "schema": {
1766
+ "type": "integer"
1767
+ }
1768
+ }
1769
+ ],
1770
+ "responses": {
1771
+ "200": {
1772
+ "description": "",
1773
+ "content": {
1774
+ "application/json": {
1775
+ "schema": {
1776
+ "type": "object"
1777
+ }
1778
+ }
1779
+ }
1780
+ },
1781
+ "403": {
1782
+ "$ref": "#/components/responses/AuthorizationException"
1783
+ },
1784
+ "404": {
1785
+ "$ref": "#/components/responses/ModelNotFoundException"
1786
+ },
1787
+ "401": {
1788
+ "$ref": "#/components/responses/AuthenticationException"
1789
+ }
1790
+ }
1791
+ }
1792
+ },
1793
+ "/spaces": {
1794
+ "get": {
1795
+ "operationId": "spaces.index",
1796
+ "description": "Returns all spaces belonging to the authenticated user, ordered by most recent.",
1797
+ "summary": "List spaces",
1798
+ "tags": [
1799
+ "Space"
1800
+ ],
1801
+ "responses": {
1802
+ "200": {
1803
+ "description": "Array of `SpaceResource`",
1804
+ "content": {
1805
+ "application/json": {
1806
+ "schema": {
1807
+ "type": "object",
1808
+ "properties": {
1809
+ "data": {
1810
+ "type": "array",
1811
+ "items": {
1812
+ "$ref": "#/components/schemas/SpaceResource"
1813
+ }
1814
+ }
1815
+ },
1816
+ "required": [
1817
+ "data"
1818
+ ]
1819
+ }
1820
+ }
1821
+ }
1822
+ },
1823
+ "401": {
1824
+ "$ref": "#/components/responses/AuthenticationException"
1825
+ }
1826
+ }
1827
+ },
1828
+ "post": {
1829
+ "operationId": "spaces.store",
1830
+ "description": "Creates a new space for the authenticated user.",
1831
+ "summary": "Create a space",
1832
+ "tags": [
1833
+ "Space"
1834
+ ],
1835
+ "requestBody": {
1836
+ "required": true,
1837
+ "content": {
1838
+ "application/json": {
1839
+ "schema": {
1840
+ "$ref": "#/components/schemas/StoreSpaceRequest"
1841
+ }
1842
+ }
1843
+ }
1844
+ },
1845
+ "responses": {
1846
+ "200": {
1847
+ "description": "",
1848
+ "content": {
1849
+ "application/json": {
1850
+ "schema": {
1851
+ "type": "object"
1852
+ }
1853
+ }
1854
+ }
1855
+ },
1856
+ "401": {
1857
+ "$ref": "#/components/responses/AuthenticationException"
1858
+ },
1859
+ "422": {
1860
+ "$ref": "#/components/responses/ValidationException"
1861
+ },
1862
+ "403": {
1863
+ "$ref": "#/components/responses/AuthorizationException"
1864
+ }
1865
+ }
1866
+ }
1867
+ },
1868
+ "/spaces/{space}": {
1869
+ "get": {
1870
+ "operationId": "spaces.show",
1871
+ "description": "Returns a single space by ID.",
1872
+ "summary": "Get a space",
1873
+ "tags": [
1874
+ "Space"
1875
+ ],
1876
+ "parameters": [
1877
+ {
1878
+ "name": "space",
1879
+ "in": "path",
1880
+ "required": true,
1881
+ "description": "The space ID",
1882
+ "schema": {
1883
+ "type": "integer"
1884
+ }
1885
+ }
1886
+ ],
1887
+ "responses": {
1888
+ "200": {
1889
+ "description": "`SpaceResource`",
1890
+ "content": {
1891
+ "application/json": {
1892
+ "schema": {
1893
+ "type": "object",
1894
+ "properties": {
1895
+ "data": {
1896
+ "$ref": "#/components/schemas/SpaceResource"
1897
+ }
1898
+ },
1899
+ "required": [
1900
+ "data"
1901
+ ]
1902
+ }
1903
+ }
1904
+ }
1905
+ },
1906
+ "403": {
1907
+ "$ref": "#/components/responses/AuthorizationException"
1908
+ },
1909
+ "404": {
1910
+ "$ref": "#/components/responses/ModelNotFoundException"
1911
+ },
1912
+ "401": {
1913
+ "$ref": "#/components/responses/AuthenticationException"
1914
+ }
1915
+ }
1916
+ },
1917
+ "put": {
1918
+ "operationId": "spaces.update",
1919
+ "description": "Updates the given space's settings.",
1920
+ "summary": "Update a space",
1921
+ "tags": [
1922
+ "Space"
1923
+ ],
1924
+ "parameters": [
1925
+ {
1926
+ "name": "space",
1927
+ "in": "path",
1928
+ "required": true,
1929
+ "description": "The space ID",
1930
+ "schema": {
1931
+ "type": "integer"
1932
+ }
1933
+ }
1934
+ ],
1935
+ "requestBody": {
1936
+ "content": {
1937
+ "application/json": {
1938
+ "schema": {
1939
+ "$ref": "#/components/schemas/UpdateSpaceRequest"
1940
+ }
1941
+ }
1942
+ }
1943
+ },
1944
+ "responses": {
1945
+ "200": {
1946
+ "description": "`SpaceResource`",
1947
+ "content": {
1948
+ "application/json": {
1949
+ "schema": {
1950
+ "anyOf": [
1951
+ {
1952
+ "type": "object",
1953
+ "properties": {
1954
+ "data": {
1955
+ "$ref": "#/components/schemas/SpaceResource"
1956
+ }
1957
+ },
1958
+ "required": [
1959
+ "data"
1960
+ ]
1961
+ },
1962
+ {
1963
+ "type": "object"
1964
+ }
1965
+ ]
1966
+ }
1967
+ }
1968
+ }
1969
+ },
1970
+ "403": {
1971
+ "$ref": "#/components/responses/AuthorizationException"
1972
+ },
1973
+ "404": {
1974
+ "$ref": "#/components/responses/ModelNotFoundException"
1975
+ },
1976
+ "401": {
1977
+ "$ref": "#/components/responses/AuthenticationException"
1978
+ },
1979
+ "422": {
1980
+ "$ref": "#/components/responses/ValidationException"
1981
+ }
1982
+ }
1983
+ },
1984
+ "delete": {
1985
+ "operationId": "spaces.destroy",
1986
+ "description": "Permanently deletes the given space and all associated data.",
1987
+ "summary": "Delete a space",
1988
+ "tags": [
1989
+ "Space"
1990
+ ],
1991
+ "parameters": [
1992
+ {
1993
+ "name": "space",
1994
+ "in": "path",
1995
+ "required": true,
1996
+ "description": "The space ID",
1997
+ "schema": {
1998
+ "type": "integer"
1999
+ }
2000
+ }
2001
+ ],
2002
+ "responses": {
2003
+ "200": {
2004
+ "description": "",
2005
+ "content": {
2006
+ "application/json": {
2007
+ "schema": {
2008
+ "type": "object"
2009
+ }
2010
+ }
2011
+ }
2012
+ },
2013
+ "403": {
2014
+ "$ref": "#/components/responses/AuthorizationException"
2015
+ },
2016
+ "404": {
2017
+ "$ref": "#/components/responses/ModelNotFoundException"
2018
+ },
2019
+ "401": {
2020
+ "$ref": "#/components/responses/AuthenticationException"
2021
+ }
2022
+ }
2023
+ }
2024
+ },
2025
+ "/subscription": {
2026
+ "get": {
2027
+ "operationId": "subscription.show",
2028
+ "description": "Returns the current plan, usage limits, trial status, and cancellation state.",
2029
+ "summary": "Get subscription details",
2030
+ "tags": [
2031
+ "Subscription"
2032
+ ],
2033
+ "responses": {
2034
+ "200": {
2035
+ "description": "",
2036
+ "content": {
2037
+ "application/json": {
2038
+ "schema": {
2039
+ "type": "object",
2040
+ "properties": {
2041
+ "plan": {
2042
+ "type": "string"
2043
+ },
2044
+ "is_gifted": {
2045
+ "type": "boolean"
2046
+ },
2047
+ "limits": {
2048
+ "type": "object",
2049
+ "properties": {
2050
+ "max_spaces": {
2051
+ "type": [
2052
+ "integer",
2053
+ "null"
2054
+ ],
2055
+ "enum": [
2056
+ 2,
2057
+ 10,
2058
+ 50
2059
+ ]
2060
+ },
2061
+ "max_posts_per_month": {
2062
+ "type": [
2063
+ "integer",
2064
+ "null"
2065
+ ],
2066
+ "enum": [
2067
+ 20,
2068
+ 200
2069
+ ]
2070
+ },
2071
+ "has_analytics": {
2072
+ "type": "boolean"
2073
+ },
2074
+ "remaining_spaces": {
2075
+ "type": [
2076
+ "integer",
2077
+ "null"
2078
+ ]
2079
+ },
2080
+ "remaining_posts": {
2081
+ "type": [
2082
+ "integer",
2083
+ "null"
2084
+ ]
2085
+ },
2086
+ "posts_this_month": {
2087
+ "type": "integer",
2088
+ "minimum": 0
2089
+ }
2090
+ },
2091
+ "required": [
2092
+ "max_spaces",
2093
+ "max_posts_per_month",
2094
+ "has_analytics",
2095
+ "remaining_spaces",
2096
+ "remaining_posts",
2097
+ "posts_this_month"
2098
+ ]
2099
+ },
2100
+ "trial": {
2101
+ "type": "object",
2102
+ "properties": {
2103
+ "on_trial": {
2104
+ "anyOf": [
2105
+ {
2106
+ "type": "string"
2107
+ },
2108
+ {
2109
+ "type": "boolean"
2110
+ }
2111
+ ]
2112
+ },
2113
+ "ends_at": {
2114
+ "type": "string"
2115
+ }
2116
+ },
2117
+ "required": [
2118
+ "on_trial",
2119
+ "ends_at"
2120
+ ]
2121
+ },
2122
+ "cancelled": {
2123
+ "anyOf": [
2124
+ {
2125
+ "type": "string"
2126
+ },
2127
+ {
2128
+ "type": "boolean"
2129
+ }
2130
+ ]
2131
+ },
2132
+ "ends_at": {
2133
+ "type": "string"
2134
+ }
2135
+ },
2136
+ "required": [
2137
+ "plan",
2138
+ "is_gifted",
2139
+ "limits",
2140
+ "trial",
2141
+ "cancelled",
2142
+ "ends_at"
2143
+ ]
2144
+ }
2145
+ }
2146
+ }
2147
+ },
2148
+ "401": {
2149
+ "$ref": "#/components/responses/AuthenticationException"
2150
+ }
2151
+ }
2152
+ }
2153
+ },
2154
+ "/spaces/{space}/webhooks": {
2155
+ "get": {
2156
+ "operationId": "webhooks.index",
2157
+ "description": "Returns all webhooks configured for the given space.",
2158
+ "summary": "List webhooks",
2159
+ "tags": [
2160
+ "Webhook"
2161
+ ],
2162
+ "parameters": [
2163
+ {
2164
+ "name": "space",
2165
+ "in": "path",
2166
+ "required": true,
2167
+ "description": "The space ID",
2168
+ "schema": {
2169
+ "type": "integer"
2170
+ }
2171
+ }
2172
+ ],
2173
+ "responses": {
2174
+ "200": {
2175
+ "description": "Array of `WebhookResource`",
2176
+ "content": {
2177
+ "application/json": {
2178
+ "schema": {
2179
+ "type": "object",
2180
+ "properties": {
2181
+ "data": {
2182
+ "type": "array",
2183
+ "items": {
2184
+ "$ref": "#/components/schemas/WebhookResource"
2185
+ }
2186
+ }
2187
+ },
2188
+ "required": [
2189
+ "data"
2190
+ ]
2191
+ }
2192
+ }
2193
+ }
2194
+ },
2195
+ "403": {
2196
+ "$ref": "#/components/responses/AuthorizationException"
2197
+ },
2198
+ "404": {
2199
+ "$ref": "#/components/responses/ModelNotFoundException"
2200
+ },
2201
+ "401": {
2202
+ "$ref": "#/components/responses/AuthenticationException"
2203
+ }
2204
+ }
2205
+ },
2206
+ "post": {
2207
+ "operationId": "webhooks.store",
2208
+ "description": "Registers a new webhook endpoint with an auto-generated signing secret.",
2209
+ "summary": "Create a webhook",
2210
+ "tags": [
2211
+ "Webhook"
2212
+ ],
2213
+ "parameters": [
2214
+ {
2215
+ "name": "space",
2216
+ "in": "path",
2217
+ "required": true,
2218
+ "description": "The space ID",
2219
+ "schema": {
2220
+ "type": "integer"
2221
+ }
2222
+ }
2223
+ ],
2224
+ "requestBody": {
2225
+ "required": true,
2226
+ "content": {
2227
+ "application/json": {
2228
+ "schema": {
2229
+ "$ref": "#/components/schemas/StoreWebhookRequest"
2230
+ }
2231
+ }
2232
+ }
2233
+ },
2234
+ "responses": {
2235
+ "200": {
2236
+ "description": "",
2237
+ "content": {
2238
+ "application/json": {
2239
+ "schema": {
2240
+ "type": "object"
2241
+ }
2242
+ }
2243
+ }
2244
+ },
2245
+ "403": {
2246
+ "$ref": "#/components/responses/AuthorizationException"
2247
+ },
2248
+ "404": {
2249
+ "$ref": "#/components/responses/ModelNotFoundException"
2250
+ },
2251
+ "401": {
2252
+ "$ref": "#/components/responses/AuthenticationException"
2253
+ },
2254
+ "422": {
2255
+ "$ref": "#/components/responses/ValidationException"
2256
+ }
2257
+ }
2258
+ }
2259
+ },
2260
+ "/spaces/{space}/webhooks/{webhook}": {
2261
+ "put": {
2262
+ "operationId": "webhooks.update",
2263
+ "description": "Updates the webhook's URL, events, or active status.",
2264
+ "summary": "Update a webhook",
2265
+ "tags": [
2266
+ "Webhook"
2267
+ ],
2268
+ "parameters": [
2269
+ {
2270
+ "name": "space",
2271
+ "in": "path",
2272
+ "required": true,
2273
+ "description": "The space ID",
2274
+ "schema": {
2275
+ "type": "integer"
2276
+ }
2277
+ },
2278
+ {
2279
+ "name": "webhook",
2280
+ "in": "path",
2281
+ "required": true,
2282
+ "description": "The webhook ID",
2283
+ "schema": {
2284
+ "type": "integer"
2285
+ }
2286
+ }
2287
+ ],
2288
+ "requestBody": {
2289
+ "content": {
2290
+ "application/json": {
2291
+ "schema": {
2292
+ "$ref": "#/components/schemas/UpdateWebhookRequest"
2293
+ }
2294
+ }
2295
+ }
2296
+ },
2297
+ "responses": {
2298
+ "200": {
2299
+ "description": "`WebhookResource`",
2300
+ "content": {
2301
+ "application/json": {
2302
+ "schema": {
2303
+ "anyOf": [
2304
+ {
2305
+ "type": "object",
2306
+ "properties": {
2307
+ "data": {
2308
+ "$ref": "#/components/schemas/WebhookResource"
2309
+ }
2310
+ },
2311
+ "required": [
2312
+ "data"
2313
+ ]
2314
+ },
2315
+ {
2316
+ "type": "object"
2317
+ }
2318
+ ]
2319
+ }
2320
+ }
2321
+ }
2322
+ },
2323
+ "403": {
2324
+ "$ref": "#/components/responses/AuthorizationException"
2325
+ },
2326
+ "404": {
2327
+ "$ref": "#/components/responses/ModelNotFoundException"
2328
+ },
2329
+ "401": {
2330
+ "$ref": "#/components/responses/AuthenticationException"
2331
+ },
2332
+ "422": {
2333
+ "$ref": "#/components/responses/ValidationException"
2334
+ }
2335
+ }
2336
+ },
2337
+ "delete": {
2338
+ "operationId": "webhooks.destroy",
2339
+ "description": "Permanently removes the webhook endpoint.",
2340
+ "summary": "Delete a webhook",
2341
+ "tags": [
2342
+ "Webhook"
2343
+ ],
2344
+ "parameters": [
2345
+ {
2346
+ "name": "space",
2347
+ "in": "path",
2348
+ "required": true,
2349
+ "description": "The space ID",
2350
+ "schema": {
2351
+ "type": "integer"
2352
+ }
2353
+ },
2354
+ {
2355
+ "name": "webhook",
2356
+ "in": "path",
2357
+ "required": true,
2358
+ "description": "The webhook ID",
2359
+ "schema": {
2360
+ "type": "integer"
2361
+ }
2362
+ }
2363
+ ],
2364
+ "responses": {
2365
+ "200": {
2366
+ "description": "",
2367
+ "content": {
2368
+ "application/json": {
2369
+ "schema": {
2370
+ "type": "object"
2371
+ }
2372
+ }
2373
+ }
2374
+ },
2375
+ "403": {
2376
+ "$ref": "#/components/responses/AuthorizationException"
2377
+ },
2378
+ "404": {
2379
+ "$ref": "#/components/responses/ModelNotFoundException"
2380
+ },
2381
+ "401": {
2382
+ "$ref": "#/components/responses/AuthenticationException"
2383
+ }
2384
+ }
2385
+ }
2386
+ }
2387
+ },
2388
+ "components": {
2389
+ "securitySchemes": {
2390
+ "http": {
2391
+ "type": "http",
2392
+ "scheme": "bearer"
2393
+ }
2394
+ },
2395
+ "schemas": {
2396
+ "AccountResource": {
2397
+ "type": "object",
2398
+ "properties": {
2399
+ "id": {
2400
+ "type": "integer"
2401
+ },
2402
+ "social": {
2403
+ "type": "string"
2404
+ },
2405
+ "display_name": {
2406
+ "type": "string"
2407
+ },
2408
+ "handler": {
2409
+ "type": "string"
2410
+ },
2411
+ "avatar": {
2412
+ "type": [
2413
+ "string",
2414
+ "null"
2415
+ ]
2416
+ },
2417
+ "is_active": {
2418
+ "type": "boolean"
2419
+ },
2420
+ "disconnected_at": {
2421
+ "type": "string"
2422
+ }
2423
+ },
2424
+ "required": [
2425
+ "id",
2426
+ "social",
2427
+ "display_name",
2428
+ "handler",
2429
+ "avatar",
2430
+ "is_active",
2431
+ "disconnected_at"
2432
+ ],
2433
+ "title": "AccountResource"
2434
+ },
2435
+ "BioBlockResource": {
2436
+ "type": "object",
2437
+ "properties": {
2438
+ "id": {
2439
+ "type": "integer"
2440
+ },
2441
+ "type": {
2442
+ "type": "string"
2443
+ },
2444
+ "content": {
2445
+ "type": "array",
2446
+ "items": {}
2447
+ },
2448
+ "sort_order": {
2449
+ "type": "integer"
2450
+ },
2451
+ "is_visible": {
2452
+ "type": "boolean"
2453
+ }
2454
+ },
2455
+ "required": [
2456
+ "id",
2457
+ "type",
2458
+ "content",
2459
+ "sort_order",
2460
+ "is_visible"
2461
+ ],
2462
+ "title": "BioBlockResource"
2463
+ },
2464
+ "BioPageResource": {
2465
+ "type": "object",
2466
+ "properties": {
2467
+ "id": {
2468
+ "type": "integer"
2469
+ },
2470
+ "slug": {
2471
+ "type": "string"
2472
+ },
2473
+ "title": {
2474
+ "type": [
2475
+ "string",
2476
+ "null"
2477
+ ]
2478
+ },
2479
+ "description": {
2480
+ "type": [
2481
+ "string",
2482
+ "null"
2483
+ ]
2484
+ },
2485
+ "theme": {
2486
+ "type": "string"
2487
+ },
2488
+ "avatar": {
2489
+ "type": "string"
2490
+ },
2491
+ "is_enabled": {
2492
+ "type": "boolean"
2493
+ },
2494
+ "public_url": {
2495
+ "type": "string"
2496
+ },
2497
+ "created_at": {
2498
+ "type": [
2499
+ "string",
2500
+ "null"
2501
+ ],
2502
+ "format": "date-time"
2503
+ },
2504
+ "updated_at": {
2505
+ "type": [
2506
+ "string",
2507
+ "null"
2508
+ ],
2509
+ "format": "date-time"
2510
+ }
2511
+ },
2512
+ "required": [
2513
+ "id",
2514
+ "slug",
2515
+ "title",
2516
+ "description",
2517
+ "theme",
2518
+ "avatar",
2519
+ "is_enabled",
2520
+ "public_url",
2521
+ "created_at",
2522
+ "updated_at"
2523
+ ],
2524
+ "title": "BioPageResource"
2525
+ },
2526
+ "MediaResource": {
2527
+ "type": "object",
2528
+ "properties": {
2529
+ "id": {
2530
+ "type": "string"
2531
+ },
2532
+ "type": {
2533
+ "type": "string"
2534
+ },
2535
+ "url": {
2536
+ "type": "string"
2537
+ },
2538
+ "mime": {
2539
+ "type": "string"
2540
+ },
2541
+ "width": {
2542
+ "type": "string"
2543
+ },
2544
+ "height": {
2545
+ "type": "string"
2546
+ },
2547
+ "size": {
2548
+ "type": "string"
2549
+ },
2550
+ "alt": {
2551
+ "type": "string"
2552
+ },
2553
+ "order": {
2554
+ "type": "string"
2555
+ }
2556
+ },
2557
+ "required": [
2558
+ "id",
2559
+ "type",
2560
+ "url",
2561
+ "mime",
2562
+ "width",
2563
+ "height",
2564
+ "size",
2565
+ "alt",
2566
+ "order"
2567
+ ],
2568
+ "title": "MediaResource"
2569
+ },
2570
+ "PostResource": {
2571
+ "type": "object",
2572
+ "properties": {
2573
+ "id": {
2574
+ "type": "integer"
2575
+ },
2576
+ "content": {
2577
+ "type": "string"
2578
+ },
2579
+ "status": {
2580
+ "$ref": "#/components/schemas/PostStatus"
2581
+ },
2582
+ "order": {
2583
+ "type": "integer"
2584
+ },
2585
+ "scheduled_at": {
2586
+ "type": [
2587
+ "string",
2588
+ "null"
2589
+ ],
2590
+ "format": "date-time"
2591
+ },
2592
+ "published_at": {
2593
+ "type": [
2594
+ "string",
2595
+ "null"
2596
+ ],
2597
+ "format": "date-time"
2598
+ },
2599
+ "metadata": {
2600
+ "type": [
2601
+ "array",
2602
+ "null"
2603
+ ],
2604
+ "items": {}
2605
+ },
2606
+ "cluster_id": {
2607
+ "type": "string"
2608
+ },
2609
+ "parent_id": {
2610
+ "type": [
2611
+ "integer",
2612
+ "null"
2613
+ ]
2614
+ },
2615
+ "user_id": {
2616
+ "type": "integer"
2617
+ },
2618
+ "account_id": {
2619
+ "type": "integer"
2620
+ },
2621
+ "created_at": {
2622
+ "type": [
2623
+ "string",
2624
+ "null"
2625
+ ],
2626
+ "format": "date-time"
2627
+ },
2628
+ "updated_at": {
2629
+ "type": [
2630
+ "string",
2631
+ "null"
2632
+ ],
2633
+ "format": "date-time"
2634
+ },
2635
+ "analytics": {
2636
+ "type": [
2637
+ "array",
2638
+ "null"
2639
+ ],
2640
+ "items": {}
2641
+ },
2642
+ "account": {
2643
+ "$ref": "#/components/schemas/AccountResource"
2644
+ },
2645
+ "children": {
2646
+ "type": "array",
2647
+ "items": {
2648
+ "$ref": "#/components/schemas/PostResource"
2649
+ }
2650
+ },
2651
+ "media": {
2652
+ "type": "array",
2653
+ "items": {
2654
+ "$ref": "#/components/schemas/MediaResource"
2655
+ }
2656
+ }
2657
+ },
2658
+ "required": [
2659
+ "id",
2660
+ "content",
2661
+ "status",
2662
+ "order",
2663
+ "scheduled_at",
2664
+ "published_at",
2665
+ "metadata",
2666
+ "cluster_id",
2667
+ "parent_id",
2668
+ "user_id",
2669
+ "account_id",
2670
+ "created_at",
2671
+ "updated_at",
2672
+ "analytics"
2673
+ ],
2674
+ "title": "PostResource"
2675
+ },
2676
+ "PostStatus": {
2677
+ "type": "integer",
2678
+ "enum": [
2679
+ 0,
2680
+ 1,
2681
+ 2,
2682
+ 3,
2683
+ 4
2684
+ ],
2685
+ "title": "PostStatus"
2686
+ },
2687
+ "SlotResource": {
2688
+ "type": "object",
2689
+ "properties": {
2690
+ "id": {
2691
+ "type": "integer"
2692
+ },
2693
+ "day_of_week": {
2694
+ "type": "integer"
2695
+ },
2696
+ "time": {
2697
+ "type": "string"
2698
+ }
2699
+ },
2700
+ "required": [
2701
+ "id",
2702
+ "day_of_week",
2703
+ "time"
2704
+ ],
2705
+ "title": "SlotResource"
2706
+ },
2707
+ "SpaceResource": {
2708
+ "type": "object",
2709
+ "properties": {
2710
+ "id": {
2711
+ "type": "integer"
2712
+ },
2713
+ "name": {
2714
+ "type": "string"
2715
+ },
2716
+ "created_at": {
2717
+ "type": [
2718
+ "string",
2719
+ "null"
2720
+ ],
2721
+ "format": "date-time"
2722
+ },
2723
+ "updated_at": {
2724
+ "type": [
2725
+ "string",
2726
+ "null"
2727
+ ],
2728
+ "format": "date-time"
2729
+ }
2730
+ },
2731
+ "required": [
2732
+ "id",
2733
+ "name",
2734
+ "created_at",
2735
+ "updated_at"
2736
+ ],
2737
+ "title": "SpaceResource"
2738
+ },
2739
+ "StoreBioBlockRequest": {
2740
+ "type": "object",
2741
+ "properties": {
2742
+ "type": {
2743
+ "type": "string",
2744
+ "enum": [
2745
+ "link",
2746
+ "header",
2747
+ "social_icons",
2748
+ "text"
2749
+ ]
2750
+ },
2751
+ "content": {
2752
+ "type": "array",
2753
+ "items": {
2754
+ "type": "string"
2755
+ }
2756
+ },
2757
+ "is_visible": {
2758
+ "type": "boolean"
2759
+ }
2760
+ },
2761
+ "required": [
2762
+ "type",
2763
+ "content"
2764
+ ],
2765
+ "title": "StoreBioBlockRequest"
2766
+ },
2767
+ "StoreBioPageRequest": {
2768
+ "type": "object",
2769
+ "properties": {
2770
+ "slug": {
2771
+ "type": "string",
2772
+ "pattern": "^[a-z0-9][a-z0-9\\-]*[a-z0-9]$",
2773
+ "maxLength": 100
2774
+ },
2775
+ "title": {
2776
+ "type": [
2777
+ "string",
2778
+ "null"
2779
+ ],
2780
+ "maxLength": 255
2781
+ },
2782
+ "description": {
2783
+ "type": [
2784
+ "string",
2785
+ "null"
2786
+ ],
2787
+ "maxLength": 1000
2788
+ },
2789
+ "theme": {
2790
+ "type": "string",
2791
+ "enum": [
2792
+ "minimal",
2793
+ "bold",
2794
+ "neon",
2795
+ "soft",
2796
+ "classic"
2797
+ ]
2798
+ }
2799
+ },
2800
+ "required": [
2801
+ "slug",
2802
+ "theme"
2803
+ ],
2804
+ "title": "StoreBioPageRequest"
2805
+ },
2806
+ "StorePostRequest": {
2807
+ "type": "object",
2808
+ "properties": {
2809
+ "at": {
2810
+ "type": [
2811
+ "integer",
2812
+ "null"
2813
+ ]
2814
+ },
2815
+ "is_draft": {
2816
+ "type": "boolean"
2817
+ },
2818
+ "space_id": {
2819
+ "type": "integer"
2820
+ },
2821
+ "items": {
2822
+ "type": "array",
2823
+ "items": {
2824
+ "type": "object",
2825
+ "properties": {
2826
+ "account_id": {
2827
+ "type": "integer"
2828
+ },
2829
+ "social": {
2830
+ "type": "string"
2831
+ },
2832
+ "children": {
2833
+ "type": [
2834
+ "array",
2835
+ "null"
2836
+ ],
2837
+ "items": {
2838
+ "type": "object",
2839
+ "properties": {
2840
+ "content": {
2841
+ "type": "string",
2842
+ "maxLength": 5000
2843
+ },
2844
+ "media": {
2845
+ "type": [
2846
+ "array",
2847
+ "null"
2848
+ ],
2849
+ "items": {
2850
+ "type": "object",
2851
+ "properties": {
2852
+ "id": {
2853
+ "type": "integer"
2854
+ },
2855
+ "type": {
2856
+ "type": "string",
2857
+ "enum": [
2858
+ "image",
2859
+ "video"
2860
+ ]
2861
+ }
2862
+ },
2863
+ "required": [
2864
+ "id",
2865
+ "type"
2866
+ ]
2867
+ }
2868
+ }
2869
+ },
2870
+ "required": [
2871
+ "content"
2872
+ ]
2873
+ }
2874
+ },
2875
+ "metadata": {
2876
+ "type": [
2877
+ "object",
2878
+ "null"
2879
+ ],
2880
+ "properties": {
2881
+ "topic_tag": {
2882
+ "type": [
2883
+ "string",
2884
+ "null"
2885
+ ]
2886
+ },
2887
+ "post_type": {
2888
+ "type": [
2889
+ "string",
2890
+ "null"
2891
+ ]
2892
+ },
2893
+ "link": {
2894
+ "type": [
2895
+ "string",
2896
+ "null"
2897
+ ],
2898
+ "format": "uri"
2899
+ },
2900
+ "privacy_level": {
2901
+ "type": [
2902
+ "string",
2903
+ "null"
2904
+ ]
2905
+ },
2906
+ "allow_comments": {
2907
+ "type": [
2908
+ "boolean",
2909
+ "null"
2910
+ ]
2911
+ },
2912
+ "allow_duet": {
2913
+ "type": [
2914
+ "boolean",
2915
+ "null"
2916
+ ]
2917
+ },
2918
+ "allow_stitch": {
2919
+ "type": [
2920
+ "boolean",
2921
+ "null"
2922
+ ]
2923
+ },
2924
+ "branded_content": {
2925
+ "type": [
2926
+ "boolean",
2927
+ "null"
2928
+ ]
2929
+ },
2930
+ "brand_organic": {
2931
+ "type": [
2932
+ "boolean",
2933
+ "null"
2934
+ ]
2935
+ },
2936
+ "board_id": {
2937
+ "type": [
2938
+ "string",
2939
+ "null"
2940
+ ]
2941
+ },
2942
+ "title": {
2943
+ "type": [
2944
+ "string",
2945
+ "null"
2946
+ ],
2947
+ "maxLength": 100
2948
+ },
2949
+ "cover_image_url": {
2950
+ "type": [
2951
+ "string",
2952
+ "null"
2953
+ ],
2954
+ "format": "uri"
2955
+ }
2956
+ }
2957
+ },
2958
+ "main": {
2959
+ "type": "object",
2960
+ "properties": {
2961
+ "content": {
2962
+ "type": "string",
2963
+ "maxLength": 5000
2964
+ },
2965
+ "media": {
2966
+ "type": [
2967
+ "array",
2968
+ "null"
2969
+ ],
2970
+ "items": {
2971
+ "type": "object",
2972
+ "properties": {
2973
+ "id": {
2974
+ "type": "integer"
2975
+ },
2976
+ "type": {
2977
+ "type": "string",
2978
+ "enum": [
2979
+ "image",
2980
+ "video"
2981
+ ]
2982
+ }
2983
+ },
2984
+ "required": [
2985
+ "id",
2986
+ "type"
2987
+ ]
2988
+ }
2989
+ }
2990
+ },
2991
+ "required": [
2992
+ "content"
2993
+ ]
2994
+ }
2995
+ },
2996
+ "required": [
2997
+ "account_id",
2998
+ "social"
2999
+ ]
3000
+ },
3001
+ "minItems": 1
3002
+ }
3003
+ },
3004
+ "required": [
3005
+ "space_id",
3006
+ "items"
3007
+ ],
3008
+ "title": "StorePostRequest"
3009
+ },
3010
+ "StoreSlotRequest": {
3011
+ "type": "object",
3012
+ "properties": {
3013
+ "time": {
3014
+ "type": "string",
3015
+ "pattern": "^\\d{2}:\\d{2}$"
3016
+ },
3017
+ "days_of_week": {
3018
+ "type": "array",
3019
+ "items": {
3020
+ "type": "integer",
3021
+ "minimum": 1,
3022
+ "maximum": 7
3023
+ },
3024
+ "minItems": 1
3025
+ }
3026
+ },
3027
+ "required": [
3028
+ "time",
3029
+ "days_of_week"
3030
+ ],
3031
+ "title": "StoreSlotRequest"
3032
+ },
3033
+ "StoreSpaceRequest": {
3034
+ "type": "object",
3035
+ "properties": {
3036
+ "name": {
3037
+ "type": "string",
3038
+ "maxLength": 255
3039
+ }
3040
+ },
3041
+ "required": [
3042
+ "name"
3043
+ ],
3044
+ "title": "StoreSpaceRequest"
3045
+ },
3046
+ "StoreWebhookRequest": {
3047
+ "type": "object",
3048
+ "properties": {
3049
+ "url": {
3050
+ "type": "string",
3051
+ "format": "uri"
3052
+ },
3053
+ "events": {
3054
+ "type": "array",
3055
+ "items": {
3056
+ "type": "string",
3057
+ "enum": [
3058
+ "post.published",
3059
+ "post.failed",
3060
+ "post.scheduled",
3061
+ "account.connected",
3062
+ "account.disconnected"
3063
+ ]
3064
+ },
3065
+ "minItems": 1
3066
+ }
3067
+ },
3068
+ "required": [
3069
+ "url",
3070
+ "events"
3071
+ ],
3072
+ "title": "StoreWebhookRequest"
3073
+ },
3074
+ "UpdateBioBlockRequest": {
3075
+ "type": "object",
3076
+ "properties": {
3077
+ "content": {
3078
+ "type": "array",
3079
+ "items": {
3080
+ "type": "string"
3081
+ }
3082
+ },
3083
+ "is_visible": {
3084
+ "type": "boolean"
3085
+ }
3086
+ },
3087
+ "title": "UpdateBioBlockRequest"
3088
+ },
3089
+ "UpdateBioPageRequest": {
3090
+ "type": "object",
3091
+ "properties": {
3092
+ "slug": {
3093
+ "type": "string",
3094
+ "pattern": "^[a-z0-9][a-z0-9\\-]*[a-z0-9]$",
3095
+ "maxLength": 100
3096
+ },
3097
+ "title": {
3098
+ "type": [
3099
+ "string",
3100
+ "null"
3101
+ ],
3102
+ "maxLength": 255
3103
+ },
3104
+ "description": {
3105
+ "type": [
3106
+ "string",
3107
+ "null"
3108
+ ],
3109
+ "maxLength": 1000
3110
+ },
3111
+ "theme": {
3112
+ "type": "string",
3113
+ "enum": [
3114
+ "minimal",
3115
+ "bold",
3116
+ "neon",
3117
+ "soft",
3118
+ "classic"
3119
+ ]
3120
+ },
3121
+ "is_enabled": {
3122
+ "type": "boolean"
3123
+ }
3124
+ },
3125
+ "title": "UpdateBioPageRequest"
3126
+ },
3127
+ "UpdateClusterRequest": {
3128
+ "type": "object",
3129
+ "properties": {
3130
+ "at": {
3131
+ "type": [
3132
+ "integer",
3133
+ "null"
3134
+ ]
3135
+ },
3136
+ "is_draft": {
3137
+ "type": "boolean"
3138
+ },
3139
+ "space_id": {
3140
+ "type": "integer"
3141
+ },
3142
+ "items": {
3143
+ "type": "array",
3144
+ "items": {
3145
+ "type": "object",
3146
+ "properties": {
3147
+ "account_id": {
3148
+ "type": "integer"
3149
+ },
3150
+ "social": {
3151
+ "type": "string"
3152
+ },
3153
+ "children": {
3154
+ "type": [
3155
+ "array",
3156
+ "null"
3157
+ ],
3158
+ "items": {
3159
+ "type": "object",
3160
+ "properties": {
3161
+ "content": {
3162
+ "type": "string",
3163
+ "maxLength": 5000
3164
+ },
3165
+ "media": {
3166
+ "type": [
3167
+ "array",
3168
+ "null"
3169
+ ],
3170
+ "items": {
3171
+ "type": "object",
3172
+ "properties": {
3173
+ "id": {
3174
+ "type": "integer"
3175
+ },
3176
+ "type": {
3177
+ "type": "string",
3178
+ "enum": [
3179
+ "image",
3180
+ "video"
3181
+ ]
3182
+ }
3183
+ },
3184
+ "required": [
3185
+ "id",
3186
+ "type"
3187
+ ]
3188
+ }
3189
+ }
3190
+ },
3191
+ "required": [
3192
+ "content"
3193
+ ]
3194
+ }
3195
+ },
3196
+ "metadata": {
3197
+ "type": [
3198
+ "object",
3199
+ "null"
3200
+ ],
3201
+ "properties": {
3202
+ "topic_tag": {
3203
+ "type": [
3204
+ "string",
3205
+ "null"
3206
+ ]
3207
+ },
3208
+ "post_type": {
3209
+ "type": [
3210
+ "string",
3211
+ "null"
3212
+ ]
3213
+ },
3214
+ "link": {
3215
+ "type": [
3216
+ "string",
3217
+ "null"
3218
+ ],
3219
+ "format": "uri"
3220
+ },
3221
+ "privacy_level": {
3222
+ "type": [
3223
+ "string",
3224
+ "null"
3225
+ ]
3226
+ },
3227
+ "allow_comments": {
3228
+ "type": [
3229
+ "boolean",
3230
+ "null"
3231
+ ]
3232
+ },
3233
+ "allow_duet": {
3234
+ "type": [
3235
+ "boolean",
3236
+ "null"
3237
+ ]
3238
+ },
3239
+ "allow_stitch": {
3240
+ "type": [
3241
+ "boolean",
3242
+ "null"
3243
+ ]
3244
+ },
3245
+ "branded_content": {
3246
+ "type": [
3247
+ "boolean",
3248
+ "null"
3249
+ ]
3250
+ },
3251
+ "brand_organic": {
3252
+ "type": [
3253
+ "boolean",
3254
+ "null"
3255
+ ]
3256
+ },
3257
+ "board_id": {
3258
+ "type": [
3259
+ "string",
3260
+ "null"
3261
+ ]
3262
+ },
3263
+ "title": {
3264
+ "type": [
3265
+ "string",
3266
+ "null"
3267
+ ],
3268
+ "maxLength": 100
3269
+ },
3270
+ "cover_image_url": {
3271
+ "type": [
3272
+ "string",
3273
+ "null"
3274
+ ],
3275
+ "format": "uri"
3276
+ }
3277
+ }
3278
+ },
3279
+ "main": {
3280
+ "type": "object",
3281
+ "properties": {
3282
+ "content": {
3283
+ "type": "string",
3284
+ "maxLength": 5000
3285
+ },
3286
+ "media": {
3287
+ "type": [
3288
+ "array",
3289
+ "null"
3290
+ ],
3291
+ "items": {
3292
+ "type": "object",
3293
+ "properties": {
3294
+ "id": {
3295
+ "type": "integer"
3296
+ },
3297
+ "type": {
3298
+ "type": "string",
3299
+ "enum": [
3300
+ "image",
3301
+ "video"
3302
+ ]
3303
+ }
3304
+ },
3305
+ "required": [
3306
+ "id",
3307
+ "type"
3308
+ ]
3309
+ }
3310
+ }
3311
+ },
3312
+ "required": [
3313
+ "content"
3314
+ ]
3315
+ }
3316
+ },
3317
+ "required": [
3318
+ "account_id",
3319
+ "social"
3320
+ ]
3321
+ },
3322
+ "minItems": 1
3323
+ }
3324
+ },
3325
+ "required": [
3326
+ "space_id",
3327
+ "items"
3328
+ ],
3329
+ "title": "UpdateClusterRequest"
3330
+ },
3331
+ "UpdatePostRequest": {
3332
+ "type": "object",
3333
+ "properties": {
3334
+ "content": {
3335
+ "type": "string",
3336
+ "maxLength": 5000
3337
+ },
3338
+ "status": {
3339
+ "$ref": "#/components/schemas/PostStatus"
3340
+ },
3341
+ "scheduled_at": {
3342
+ "type": [
3343
+ "string",
3344
+ "null"
3345
+ ],
3346
+ "format": "date-time"
3347
+ },
3348
+ "metadata": {
3349
+ "type": [
3350
+ "array",
3351
+ "null"
3352
+ ],
3353
+ "items": {
3354
+ "type": "string"
3355
+ }
3356
+ },
3357
+ "media_ids": {
3358
+ "type": [
3359
+ "array",
3360
+ "null"
3361
+ ],
3362
+ "items": {
3363
+ "type": "integer"
3364
+ }
3365
+ }
3366
+ },
3367
+ "title": "UpdatePostRequest"
3368
+ },
3369
+ "UpdateSpaceRequest": {
3370
+ "type": "object",
3371
+ "properties": {
3372
+ "name": {
3373
+ "type": "string",
3374
+ "maxLength": 255
3375
+ },
3376
+ "timezone": {
3377
+ "type": "string"
3378
+ }
3379
+ },
3380
+ "title": "UpdateSpaceRequest"
3381
+ },
3382
+ "UpdateWebhookRequest": {
3383
+ "type": "object",
3384
+ "properties": {
3385
+ "url": {
3386
+ "type": "string",
3387
+ "format": "uri"
3388
+ },
3389
+ "is_active": {
3390
+ "type": "boolean"
3391
+ },
3392
+ "events": {
3393
+ "type": "array",
3394
+ "items": {
3395
+ "type": "string",
3396
+ "enum": [
3397
+ "post.published",
3398
+ "post.failed",
3399
+ "post.scheduled",
3400
+ "account.connected",
3401
+ "account.disconnected"
3402
+ ]
3403
+ },
3404
+ "minItems": 1
3405
+ }
3406
+ },
3407
+ "title": "UpdateWebhookRequest"
3408
+ },
3409
+ "WebhookResource": {
3410
+ "type": "object",
3411
+ "properties": {
3412
+ "id": {
3413
+ "type": "integer"
3414
+ },
3415
+ "url": {
3416
+ "type": "string"
3417
+ },
3418
+ "events": {
3419
+ "type": "array",
3420
+ "items": {}
3421
+ },
3422
+ "is_active": {
3423
+ "type": "boolean"
3424
+ },
3425
+ "created_at": {
3426
+ "type": [
3427
+ "string",
3428
+ "null"
3429
+ ],
3430
+ "format": "date-time"
3431
+ },
3432
+ "updated_at": {
3433
+ "type": [
3434
+ "string",
3435
+ "null"
3436
+ ],
3437
+ "format": "date-time"
3438
+ }
3439
+ },
3440
+ "required": [
3441
+ "id",
3442
+ "url",
3443
+ "events",
3444
+ "is_active",
3445
+ "created_at",
3446
+ "updated_at"
3447
+ ],
3448
+ "title": "WebhookResource"
3449
+ }
3450
+ },
3451
+ "responses": {
3452
+ "AuthenticationException": {
3453
+ "description": "Unauthenticated",
3454
+ "content": {
3455
+ "application/json": {
3456
+ "schema": {
3457
+ "type": "object",
3458
+ "properties": {
3459
+ "message": {
3460
+ "type": "string",
3461
+ "description": "Error overview."
3462
+ }
3463
+ },
3464
+ "required": [
3465
+ "message"
3466
+ ]
3467
+ }
3468
+ }
3469
+ }
3470
+ },
3471
+ "AuthorizationException": {
3472
+ "description": "Authorization error",
3473
+ "content": {
3474
+ "application/json": {
3475
+ "schema": {
3476
+ "type": "object",
3477
+ "properties": {
3478
+ "message": {
3479
+ "type": "string",
3480
+ "description": "Error overview."
3481
+ }
3482
+ },
3483
+ "required": [
3484
+ "message"
3485
+ ]
3486
+ }
3487
+ }
3488
+ }
3489
+ },
3490
+ "ModelNotFoundException": {
3491
+ "description": "Not found",
3492
+ "content": {
3493
+ "application/json": {
3494
+ "schema": {
3495
+ "type": "object",
3496
+ "properties": {
3497
+ "message": {
3498
+ "type": "string",
3499
+ "description": "Error overview."
3500
+ }
3501
+ },
3502
+ "required": [
3503
+ "message"
3504
+ ]
3505
+ }
3506
+ }
3507
+ }
3508
+ },
3509
+ "ValidationException": {
3510
+ "description": "Validation error",
3511
+ "content": {
3512
+ "application/json": {
3513
+ "schema": {
3514
+ "type": "object",
3515
+ "properties": {
3516
+ "message": {
3517
+ "type": "string",
3518
+ "description": "Errors overview."
3519
+ },
3520
+ "errors": {
3521
+ "type": "object",
3522
+ "description": "A detailed description of each field that failed validation.",
3523
+ "additionalProperties": {
3524
+ "type": "array",
3525
+ "items": {
3526
+ "type": "string"
3527
+ }
3528
+ }
3529
+ }
3530
+ },
3531
+ "required": [
3532
+ "message",
3533
+ "errors"
3534
+ ]
3535
+ }
3536
+ }
3537
+ }
3538
+ }
3539
+ }
3540
+ }
3541
+ }