tangled
alpha
login
or
join now
hexmani.ac
/
clippr
12
fork
atom
social bookmarking for atproto
12
fork
atom
overview
issues
1
pulls
pipelines
[appview/misc] Finish OpenAPI document
hexmani.ac
8 months ago
7cb52652
e4d9dadd
verified
This commit was signed with the committer's
known signature
.
hexmani.ac
SSH Key Fingerprint:
SHA256:tV3v2UX4P3x12jjh+mHVzpRQ4ZhNBCHoFwqRiYzzTcM=
3/3
build_backend.yaml
success
21s
build_frontend.yaml
success
16s
build_lexicons.yaml
success
17s
+900
-49
1 changed file
expand all
collapse all
unified
split
backend
static
api.json
+900
-49
backend/static/api.json
reviewed
···
2
2
"openapi": "3.1.1",
3
3
"info": {
4
4
"title": "Clippr AppView API",
5
5
-
"version": "1.0.0",
6
6
-
"description": "Official API reference documentation for Clippr's backend.",
5
5
+
"version": "1.0.1",
6
6
+
"description": "API reference documentation for Clippr's backend.",
7
7
"license": {
8
8
"name": "GNU Affero General Public License v3.0 only",
9
9
"identifier": "AGPL-3.0-only"
···
15
15
"description": "Development server"
16
16
},
17
17
{
18
18
-
"url": "https://clippr.social",
18
18
+
"url": "https://api.clippr.social",
19
19
"description": "Production server"
20
20
}
21
21
],
22
22
"tags": [
23
23
{
24
24
"name": "Clips",
25
25
-
"description": "API paths that relate to user clips."
25
25
+
"description": "API paths that relate to user bookmarks, or 'clips'."
26
26
},
27
27
{
28
28
"name": "Tags",
···
38
38
}
39
39
],
40
40
"paths": {
41
41
+
"/xrpc/social.clippr.actor.getPreferences": {
42
42
+
"get": {
43
43
+
"tags": [
44
44
+
"Profile"
45
45
+
],
46
46
+
"summary": "Get a user's preferences",
47
47
+
"operationId": "social.clippr.actor.getPreferences",
48
48
+
"description": "Get a user's private preferences. Requires authentication.",
49
49
+
"security": [
50
50
+
{
51
51
+
"Bearer": []
52
52
+
}
53
53
+
],
54
54
+
"responses": {
55
55
+
"200": {
56
56
+
"description": "OK",
57
57
+
"content": {
58
58
+
"application/json": {
59
59
+
"schema": {
60
60
+
"$ref": "#/components/schemas/social.clippr.actor.defs.preferences"
61
61
+
}
62
62
+
}
63
63
+
}
64
64
+
},
65
65
+
"400": {
66
66
+
"description": "Bad Request",
67
67
+
"content": {
68
68
+
"application/json": {
69
69
+
"schema": {
70
70
+
"type": "object",
71
71
+
"properties": {
72
72
+
"error": {
73
73
+
"type": "string",
74
74
+
"description": "A general error code",
75
75
+
"oneOf": [
76
76
+
{
77
77
+
"const": "InvalidRequest"
78
78
+
},
79
79
+
{
80
80
+
"const": "ExpiredToken"
81
81
+
},
82
82
+
{
83
83
+
"const": "InvalidToken"
84
84
+
}
85
85
+
]
86
86
+
},
87
87
+
"message": {
88
88
+
"type": "string",
89
89
+
"description": "A detailed description of the error"
90
90
+
}
91
91
+
}
92
92
+
}
93
93
+
}
94
94
+
}
95
95
+
},
96
96
+
"401": {
97
97
+
"description": "Unauthorized",
98
98
+
"content": {
99
99
+
"application/json": {
100
100
+
"schema": {
101
101
+
"type": "object",
102
102
+
"properties": {
103
103
+
"error": {
104
104
+
"type": "string",
105
105
+
"description": "A general error code",
106
106
+
"oneOf": [
107
107
+
{
108
108
+
"const": "AuthMissing"
109
109
+
}
110
110
+
]
111
111
+
},
112
112
+
"message": {
113
113
+
"type": "string",
114
114
+
"description": "A detailed description of the error"
115
115
+
}
116
116
+
}
117
117
+
}
118
118
+
}
119
119
+
}
120
120
+
}
121
121
+
}
122
122
+
}
123
123
+
},
41
124
"/xrpc/social.clippr.actor.getProfile": {
42
125
"get": {
126
126
+
"tags": [
127
127
+
"Profile"
128
128
+
],
43
129
"summary": "Get a profile",
44
44
-
"description": "Get an user's profile based on their DID or handle.",
130
130
+
"operationId": "social.clippr.actor.getProfile",
131
131
+
"description": "Get a user's profile based on a given DID or handle.",
45
132
"parameters": [
46
133
{
47
134
"name": "actor",
48
135
"in": "query",
49
49
-
"description": "The DID or handle of the account to get the profile record of.",
136
136
+
"description": "Handle or DID of account to fetch profile of",
50
137
"required": true,
51
138
"content": {
52
139
"schema": {
53
53
-
"type": "string"
140
140
+
"type": "string",
141
141
+
"description": "Handle or DID of account to fetch profile of",
142
142
+
"format": "at-identifier"
54
143
}
55
144
},
56
145
"deprecated": false,
···
64
153
"application/json": {
65
154
"schema": {
66
155
"type": "object",
156
156
+
"$ref": "#/components/schemas/social.clippr.actor.defs.profileView"
157
157
+
}
158
158
+
}
159
159
+
}
160
160
+
},
161
161
+
"400": {
162
162
+
"description": "Bad Request",
163
163
+
"content": {
164
164
+
"application/json": {
165
165
+
"schema": {
166
166
+
"type": "object",
67
167
"properties": {
68
68
-
"did": {
168
168
+
"error": {
169
169
+
"type": "string",
170
170
+
"description": "A general error code",
171
171
+
"oneOf": [
172
172
+
{
173
173
+
"const": "InvalidRequest"
174
174
+
}
175
175
+
]
176
176
+
},
177
177
+
"message": {
178
178
+
"type": "string",
179
179
+
"description": "A detailed description of the error"
180
180
+
}
181
181
+
}
182
182
+
}
183
183
+
}
184
184
+
}
185
185
+
}
186
186
+
}
187
187
+
}
188
188
+
},
189
189
+
"/xrpc/social.clippr.actor.putPreferences": {
190
190
+
"post": {
191
191
+
"tags": [
192
192
+
"Profile"
193
193
+
],
194
194
+
"summary": "Set a user's preferences",
195
195
+
"operationId": "social.clippr.actor.putPreferences",
196
196
+
"description": "Sets the private preferences attached to the account. Requires authentication.",
197
197
+
"security": [
198
198
+
{
199
199
+
"Bearer": []
200
200
+
}
201
201
+
],
202
202
+
"requestBody": {
203
203
+
"required": true,
204
204
+
"content": {
205
205
+
"application/json": {
206
206
+
"schema": {
207
207
+
"type": "object",
208
208
+
"properties": {
209
209
+
"preferences": {
210
210
+
"$ref": "#/components/schemas/social.clippr.actor.defs.preferences"
211
211
+
}
212
212
+
}
213
213
+
}
214
214
+
}
215
215
+
}
216
216
+
},
217
217
+
"responses": {
218
218
+
"200": {
219
219
+
"description": "OK"
220
220
+
},
221
221
+
"400": {
222
222
+
"description": "Bad Request",
223
223
+
"content": {
224
224
+
"application/json": {
225
225
+
"schema": {
226
226
+
"type": "object",
227
227
+
"properties": {
228
228
+
"error": {
229
229
+
"type": "string",
230
230
+
"oneOf": [
231
231
+
{
232
232
+
"const": "InvalidRequest"
233
233
+
},
234
234
+
{
235
235
+
"const": "ExpiredToken"
236
236
+
},
237
237
+
{
238
238
+
"const": "InvalidToken"
239
239
+
}
240
240
+
],
241
241
+
"description": "A general error code"
242
242
+
},
243
243
+
"message": {
244
244
+
"type": "string",
245
245
+
"description": "A detailed description of the error"
246
246
+
}
247
247
+
}
248
248
+
}
249
249
+
}
250
250
+
}
251
251
+
},
252
252
+
"401": {
253
253
+
"description": "Unauthorized",
254
254
+
"content": {
255
255
+
"application/json": {
256
256
+
"schema": {
257
257
+
"type": "object",
258
258
+
"properties": {
259
259
+
"error": {
260
260
+
"type": "string",
261
261
+
"description": "A general error code",
262
262
+
"oneOf": [
263
263
+
{
264
264
+
"const": "AuthMissing"
265
265
+
}
266
266
+
]
267
267
+
},
268
268
+
"message": {
269
269
+
"type": "string",
270
270
+
"description": "A detailed description of the error"
271
271
+
}
272
272
+
}
273
273
+
}
274
274
+
}
275
275
+
}
276
276
+
}
277
277
+
}
278
278
+
}
279
279
+
},
280
280
+
"/xrpc/social.clippr.actor.searchClips": {
281
281
+
"get": {
282
282
+
"tags": [
283
283
+
"Clips"
284
284
+
],
285
285
+
"summary": "Search clips",
286
286
+
"operationId": "social.clippr.actor.searchClips",
287
287
+
"description": "Find clips matching search criteria.",
288
288
+
"parameters": [
289
289
+
{
290
290
+
"name": "q",
291
291
+
"in": "query",
292
292
+
"description": "Search query string",
293
293
+
"required": true,
294
294
+
"schema": {
295
295
+
"type": "string",
296
296
+
"description": "Search query string"
297
297
+
}
298
298
+
},
299
299
+
{
300
300
+
"name": "limit",
301
301
+
"in": "query",
302
302
+
"description": "How many clips to return in the query output",
303
303
+
"required": false,
304
304
+
"schema": {
305
305
+
"type": "integer",
306
306
+
"minimum": 1,
307
307
+
"maximum": 100,
308
308
+
"default": 25
309
309
+
}
310
310
+
},
311
311
+
{
312
312
+
"name": "actor",
313
313
+
"in": "query",
314
314
+
"description": "An actor to filter results to",
315
315
+
"required": false,
316
316
+
"schema": {
317
317
+
"type": "string",
318
318
+
"description": "An actor to filter results to",
319
319
+
"format": "at-identifier"
320
320
+
}
321
321
+
},
322
322
+
{
323
323
+
"name": "cursor",
324
324
+
"in": "query",
325
325
+
"description": "A parameter to paginate results",
326
326
+
"required": false,
327
327
+
"schema": {
328
328
+
"type": "string",
329
329
+
"description": "A parameter to paginate results"
330
330
+
}
331
331
+
}
332
332
+
],
333
333
+
"responses": {
334
334
+
"200": {
335
335
+
"description": "OK",
336
336
+
"content": {
337
337
+
"application/json": {
338
338
+
"schema": {
339
339
+
"type": "object",
340
340
+
"properties": {
341
341
+
"cursor": {
342
342
+
"type": "string",
343
343
+
"description": "A parameter to paginate results"
344
344
+
},
345
345
+
"clips": {
346
346
+
"type": "array",
347
347
+
"items": {
348
348
+
"$ref": "#/components/schemas/social.clippr.feed.defs.clipView"
349
349
+
}
350
350
+
}
351
351
+
}
352
352
+
}
353
353
+
}
354
354
+
}
355
355
+
},
356
356
+
"400": {
357
357
+
"description": "Bad Request",
358
358
+
"content": {
359
359
+
"application/json": {
360
360
+
"schema": {
361
361
+
"type": "object",
362
362
+
"properties": {
363
363
+
"error": {
364
364
+
"type": "string",
365
365
+
"description": "A general error code",
366
366
+
"oneOf": [
367
367
+
{
368
368
+
"const": "InvalidRequest"
369
369
+
}
370
370
+
]
371
371
+
},
372
372
+
"message": {
373
373
+
"type": "string",
374
374
+
"description": "A detailed description of the error"
375
375
+
}
376
376
+
}
377
377
+
}
378
378
+
}
379
379
+
}
380
380
+
}
381
381
+
}
382
382
+
}
383
383
+
},
384
384
+
"/xrpc/social.clippr.actor.searchProfiles": {
385
385
+
"get": {
386
386
+
"tags": [
387
387
+
"Profile"
388
388
+
],
389
389
+
"summary": "Search profiles",
390
390
+
"operationId": "social.clippr.actor.searchProfiles",
391
391
+
"description": "Find profiles matching search criteria.",
392
392
+
"parameters": [
393
393
+
{
394
394
+
"name": "q",
395
395
+
"in": "query",
396
396
+
"description": "Search query string",
397
397
+
"required": false,
398
398
+
"schema": {
399
399
+
"type": "string",
400
400
+
"description": "Search query string"
401
401
+
}
402
402
+
},
403
403
+
{
404
404
+
"name": "limit",
405
405
+
"in": "query",
406
406
+
"description": "The number of profiles to be returned in the query",
407
407
+
"required": false,
408
408
+
"schema": {
409
409
+
"type": "integer",
410
410
+
"minimum": 1,
411
411
+
"maximum": 100,
412
412
+
"default": 25
413
413
+
}
414
414
+
},
415
415
+
{
416
416
+
"name": "cursor",
417
417
+
"in": "query",
418
418
+
"description": "A parameter used for pagination",
419
419
+
"required": false,
420
420
+
"schema": {
421
421
+
"type": "string",
422
422
+
"description": "A parameter used for pagination"
423
423
+
}
424
424
+
}
425
425
+
],
426
426
+
"responses": {
427
427
+
"200": {
428
428
+
"description": "OK",
429
429
+
"content": {
430
430
+
"application/json": {
431
431
+
"schema": {
432
432
+
"type": "object",
433
433
+
"properties": {
434
434
+
"cursor": {
435
435
+
"type": "string",
436
436
+
"description": "A parameter used for pagination"
437
437
+
},
438
438
+
"actors": {
439
439
+
"type": "array",
440
440
+
"items": {
441
441
+
"$ref": "#/components/schemas/social.clippr.actor.defs.profileView"
442
442
+
}
443
443
+
}
444
444
+
}
445
445
+
}
446
446
+
}
447
447
+
}
448
448
+
},
449
449
+
"400": {
450
450
+
"description": "Bad Request",
451
451
+
"content": {
452
452
+
"application/json": {
453
453
+
"schema": {
454
454
+
"type": "object",
455
455
+
"properties": {
456
456
+
"error": {
457
457
+
"type": "string",
458
458
+
"description": "A general error code",
459
459
+
"oneOf": [
460
460
+
{
461
461
+
"const": "InvalidRequest"
462
462
+
}
463
463
+
]
464
464
+
},
465
465
+
"message": {
466
466
+
"type": "string",
467
467
+
"description": "A detailed description of the error"
468
468
+
}
469
469
+
}
470
470
+
}
471
471
+
}
472
472
+
}
473
473
+
}
474
474
+
}
475
475
+
}
476
476
+
},
477
477
+
"/xrpc/social.clippr.actor.searchTags": {
478
478
+
"get": {
479
479
+
"tags": [
480
480
+
"Tags"
481
481
+
],
482
482
+
"summary": "Search tags",
483
483
+
"operationId": "social.clippr.actor.searchTags",
484
484
+
"description": "Find tags matching search criteria.",
485
485
+
"parameters": [
486
486
+
{
487
487
+
"name": "q",
488
488
+
"in": "query",
489
489
+
"description": "Search query string",
490
490
+
"required": true,
491
491
+
"schema": {
492
492
+
"type": "string",
493
493
+
"description": "Search query string"
494
494
+
}
495
495
+
},
496
496
+
{
497
497
+
"name": "limit",
498
498
+
"in": "query",
499
499
+
"description": "How many tags to return in the query output",
500
500
+
"required": false,
501
501
+
"schema": {
502
502
+
"type": "integer",
503
503
+
"minimum": 1,
504
504
+
"maximum": 100,
505
505
+
"default": 25
506
506
+
}
507
507
+
},
508
508
+
{
509
509
+
"name": "actor",
510
510
+
"in": "query",
511
511
+
"description": "An actor to filter results to",
512
512
+
"required": false,
513
513
+
"schema": {
514
514
+
"type": "string",
515
515
+
"description": "An actor to filter results to",
516
516
+
"format": "at-identifier"
517
517
+
}
518
518
+
},
519
519
+
{
520
520
+
"name": "cursor",
521
521
+
"in": "query",
522
522
+
"description": "A parameter to paginate results",
523
523
+
"required": false,
524
524
+
"schema": {
525
525
+
"type": "string",
526
526
+
"description": "A parameter to paginate results"
527
527
+
}
528
528
+
}
529
529
+
],
530
530
+
"responses": {
531
531
+
"200": {
532
532
+
"description": "OK",
533
533
+
"content": {
534
534
+
"application/json": {
535
535
+
"schema": {
536
536
+
"type": "object",
537
537
+
"properties": {
538
538
+
"cursor": {
69
539
"type": "string",
70
70
-
"description": "The decentralized identifier associated to the profile.",
71
71
-
"example": "did:plc:z72i7hdynmk6r22z27h6tvur"
540
540
+
"description": "A parameter to paginate results"
72
541
},
73
73
-
"handle": {
542
542
+
"tags": {
543
543
+
"type": "array",
544
544
+
"items": {
545
545
+
"$ref": "#/components/schemas/social.clippr.feed.defs.tagView"
546
546
+
}
547
547
+
}
548
548
+
}
549
549
+
}
550
550
+
}
551
551
+
}
552
552
+
},
553
553
+
"400": {
554
554
+
"description": "Bad Request",
555
555
+
"content": {
556
556
+
"application/json": {
557
557
+
"schema": {
558
558
+
"type": "object",
559
559
+
"properties": {
560
560
+
"error": {
74
561
"type": "string",
75
75
-
"description": "The handle associated to the profile.",
76
76
-
"example": "alice.bsky.social"
562
562
+
"description": "A general error code",
563
563
+
"oneOf": [
564
564
+
{
565
565
+
"const": "InvalidRequest"
566
566
+
}
567
567
+
]
77
568
},
78
78
-
"displayName": {
569
569
+
"message": {
570
570
+
"type": "string",
571
571
+
"description": "A detailed description of the error"
572
572
+
}
573
573
+
}
574
574
+
}
575
575
+
}
576
576
+
}
577
577
+
}
578
578
+
}
579
579
+
}
580
580
+
},
581
581
+
"/xrpc/social.clippr.feed.getClips": {
582
582
+
"get": {
583
583
+
"tags": [
584
584
+
"Clips"
585
585
+
],
586
586
+
"summary": "Get clips",
587
587
+
"operationId": "social.clippr.feed.getClips",
588
588
+
"description": "Get the hydrated views of a list of clips from their AT URIs.",
589
589
+
"parameters": [
590
590
+
{
591
591
+
"name": "uris",
592
592
+
"in": "query",
593
593
+
"description": "List of tag AT-URIs to return hydrated views for",
594
594
+
"required": true,
595
595
+
"schema": {
596
596
+
"type": "array",
597
597
+
"items": {
598
598
+
"type": "string",
599
599
+
"format": "at-uri"
600
600
+
},
601
601
+
"maxItems": 25
602
602
+
}
603
603
+
}
604
604
+
],
605
605
+
"responses": {
606
606
+
"200": {
607
607
+
"description": "OK",
608
608
+
"content": {
609
609
+
"application/json": {
610
610
+
"schema": {
611
611
+
"type": "array",
612
612
+
"items": {
613
613
+
"$ref": "#/components/schemas/social.clippr.feed.defs.clipView"
614
614
+
}
615
615
+
}
616
616
+
}
617
617
+
}
618
618
+
},
619
619
+
"400": {
620
620
+
"description": "Bad Request",
621
621
+
"content": {
622
622
+
"application/json": {
623
623
+
"schema": {
624
624
+
"type": "object",
625
625
+
"properties": {
626
626
+
"error": {
79
627
"type": "string",
80
80
-
"description": "The display name associated to the profile.",
81
81
-
"example": "Alice"
628
628
+
"description": "A general error code",
629
629
+
"oneOf": [
630
630
+
{
631
631
+
"const": "InvalidRequest"
632
632
+
}
633
633
+
]
82
634
},
83
83
-
"avatar": {
635
635
+
"message": {
636
636
+
"type": "string",
637
637
+
"description": "A detailed description of the error"
638
638
+
}
639
639
+
}
640
640
+
}
641
641
+
}
642
642
+
}
643
643
+
}
644
644
+
}
645
645
+
}
646
646
+
},
647
647
+
"/xrpc/social.clippr.feed.getTags": {
648
648
+
"get": {
649
649
+
"tags": [
650
650
+
"Tags"
651
651
+
],
652
652
+
"summary": "Get tags",
653
653
+
"operationId": "social.clippr.feed.getTags",
654
654
+
"description": "Get a the hydrated views of a list of tags from their AT URIs.",
655
655
+
"parameters": [
656
656
+
{
657
657
+
"name": "uris",
658
658
+
"in": "query",
659
659
+
"description": "List of tag AT-URIs to return hydrated views for",
660
660
+
"required": true,
661
661
+
"schema": {
662
662
+
"type": "array",
663
663
+
"items": {
664
664
+
"type": "string",
665
665
+
"format": "at-uri"
666
666
+
},
667
667
+
"maxItems": 25
668
668
+
}
669
669
+
}
670
670
+
],
671
671
+
"responses": {
672
672
+
"200": {
673
673
+
"description": "OK",
674
674
+
"content": {
675
675
+
"application/json": {
676
676
+
"schema": {
677
677
+
"type": "array",
678
678
+
"items": {
679
679
+
"$ref": "#/components/schemas/social.clippr.feed.defs.tagView"
680
680
+
}
681
681
+
}
682
682
+
}
683
683
+
}
684
684
+
},
685
685
+
"400": {
686
686
+
"description": "Bad Request",
687
687
+
"content": {
688
688
+
"application/json": {
689
689
+
"schema": {
690
690
+
"type": "object",
691
691
+
"properties": {
692
692
+
"error": {
84
693
"type": "string",
85
85
-
"format": "uri",
86
86
-
"description": "A URI linking to an JPEG or PNG file.",
87
87
-
"example": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:b6bhzquz665p6bgjuaqz6xjp/bafkreicoqygyiqhhmjod4hvezo3besjyza24neldcxkz55keos3dg5mmj4@jpeg"
694
694
+
"description": "A general error code",
695
695
+
"oneOf": [
696
696
+
{
697
697
+
"const": "InvalidRequest"
698
698
+
}
699
699
+
]
88
700
},
89
89
-
"description": {
701
701
+
"message": {
90
702
"type": "string",
91
91
-
"description": "A biography associated to the profile.",
92
92
-
"example": "This is an example bio."
703
703
+
"description": "A detailed description of the error"
704
704
+
}
705
705
+
}
706
706
+
}
707
707
+
}
708
708
+
}
709
709
+
}
710
710
+
}
711
711
+
}
712
712
+
},
713
713
+
"/xrpc/social.clippr.feed.getProfileClips": {
714
714
+
"get": {
715
715
+
"tags": [
716
716
+
"Clips"
717
717
+
],
718
718
+
"summary": "Get a profile's clip feed",
719
719
+
"operationId": "social.clippr.feed.getProfileClips",
720
720
+
"description": "Get a view of a profile's reverse-chronological clips feed.",
721
721
+
"parameters": [
722
722
+
{
723
723
+
"name": "actor",
724
724
+
"in": "query",
725
725
+
"description": "An actor to get feed data from",
726
726
+
"required": true,
727
727
+
"schema": {
728
728
+
"type": "string",
729
729
+
"description": "An actor to get feed data from",
730
730
+
"format": "at-identifier"
731
731
+
}
732
732
+
},
733
733
+
{
734
734
+
"name": "limit",
735
735
+
"in": "query",
736
736
+
"description": "How many results to return with the query",
737
737
+
"required": false,
738
738
+
"schema": {
739
739
+
"type": "integer",
740
740
+
"minimum": 1,
741
741
+
"maximum": 100,
742
742
+
"default": 50
743
743
+
}
744
744
+
},
745
745
+
{
746
746
+
"name": "cursor",
747
747
+
"in": "query",
748
748
+
"description": "A parameter to paginate results",
749
749
+
"required": false,
750
750
+
"schema": {
751
751
+
"type": "string",
752
752
+
"description": "A parameter to paginate results"
753
753
+
}
754
754
+
},
755
755
+
{
756
756
+
"name": "filter",
757
757
+
"in": "query",
758
758
+
"description": "What types to include in response",
759
759
+
"required": false,
760
760
+
"schema": {
761
761
+
"type": "string",
762
762
+
"description": "What types of clips to include in response",
763
763
+
"default": "all_clips",
764
764
+
"enum": [
765
765
+
"all_clips",
766
766
+
"tagged_clips",
767
767
+
"untagged_clips"
768
768
+
]
769
769
+
}
770
770
+
}
771
771
+
],
772
772
+
"responses": {
773
773
+
"200": {
774
774
+
"description": "OK",
775
775
+
"content": {
776
776
+
"application/json": {
777
777
+
"schema": {
778
778
+
"type": "object",
779
779
+
"properties": {
780
780
+
"cursor": {
781
781
+
"type": "string"
93
782
},
94
94
-
"createdAt": {
783
783
+
"feed": {
784
784
+
"type": "array",
785
785
+
"items": {
786
786
+
"$ref": "#/components/schemas/social.clippr.feed.defs.clipView"
787
787
+
}
788
788
+
}
789
789
+
}
790
790
+
}
791
791
+
}
792
792
+
}
793
793
+
},
794
794
+
"400": {
795
795
+
"description": "Bad Request",
796
796
+
"content": {
797
797
+
"application/json": {
798
798
+
"schema": {
799
799
+
"type": "object",
800
800
+
"properties": {
801
801
+
"error": {
95
802
"type": "string",
96
96
-
"format": "date-time",
97
97
-
"description": "The date and time of the creation of the profile record."
803
803
+
"description": "A general error code",
804
804
+
"oneOf": [
805
805
+
{
806
806
+
"const": "InvalidRequest"
807
807
+
}
808
808
+
]
809
809
+
},
810
810
+
"message": {
811
811
+
"type": "string",
812
812
+
"description": "A detailed description of the error"
813
813
+
}
814
814
+
}
815
815
+
}
816
816
+
}
817
817
+
}
818
818
+
}
819
819
+
}
820
820
+
}
821
821
+
},
822
822
+
"/xrpc/social.clippr.feed.getProfileTags": {
823
823
+
"get": {
824
824
+
"tags": [
825
825
+
"Tags"
826
826
+
],
827
827
+
"summary": "Get a profile's tag feed",
828
828
+
"operationId": "social.clippr.feed.getProfileTags",
829
829
+
"description": "Get a view of a profile's reverse-chronological clips feed.",
830
830
+
"parameters": [
831
831
+
{
832
832
+
"name": "actor",
833
833
+
"in": "query",
834
834
+
"description": "An actor to get feed data from",
835
835
+
"required": true,
836
836
+
"schema": {
837
837
+
"type": "string",
838
838
+
"description": "An actor to get feed data from",
839
839
+
"format": "at-identifier"
840
840
+
}
841
841
+
},
842
842
+
{
843
843
+
"name": "limit",
844
844
+
"in": "query",
845
845
+
"description": "How many results to return with the query",
846
846
+
"required": false,
847
847
+
"schema": {
848
848
+
"type": "integer",
849
849
+
"minimum": 1,
850
850
+
"maximum": 100,
851
851
+
"default": 50
852
852
+
}
853
853
+
},
854
854
+
{
855
855
+
"name": "cursor",
856
856
+
"in": "query",
857
857
+
"description": "A parameter to paginate results",
858
858
+
"required": false,
859
859
+
"schema": {
860
860
+
"type": "string",
861
861
+
"description": "A parameter to paginate results"
862
862
+
}
863
863
+
}
864
864
+
],
865
865
+
"responses": {
866
866
+
"200": {
867
867
+
"description": "OK",
868
868
+
"content": {
869
869
+
"application/json": {
870
870
+
"schema": {
871
871
+
"type": "object",
872
872
+
"properties": {
873
873
+
"cursor": {
874
874
+
"type": "string"
875
875
+
},
876
876
+
"feed": {
877
877
+
"type": "array",
878
878
+
"items": {
879
879
+
"$ref": "#/components/schemas/social.clippr.feed.defs.tagView"
880
880
+
}
98
881
}
99
882
}
100
883
}
···
110
893
"properties": {
111
894
"error": {
112
895
"type": "string",
113
113
-
"description": "A general error code.",
114
114
-
"example": "InvalidRequest"
896
896
+
"description": "A general error code",
897
897
+
"oneOf": [
898
898
+
{
899
899
+
"const": "InvalidRequest"
900
900
+
}
901
901
+
]
115
902
},
116
903
"message": {
117
904
"type": "string",
118
118
-
"description": "A detailed description of the error.",
119
119
-
"example": "Error: Parameters must have the actor property included"
905
905
+
"description": "A detailed description of the error"
120
906
}
121
907
}
122
908
}
123
909
}
124
910
}
125
911
}
126
126
-
},
912
912
+
}
913
913
+
}
914
914
+
},
915
915
+
"/xrpc/social.clippr.feed.getTagList": {
916
916
+
"get": {
127
917
"tags": [
128
128
-
"Profile"
129
129
-
]
918
918
+
"Tags"
919
919
+
],
920
920
+
"summary": "Get a profile's tag list",
921
921
+
"operationId": "social.clippr.feed.getProfileTags",
922
922
+
"description": "Get a profile's complete list of tags.",
923
923
+
"parameters": [
924
924
+
{
925
925
+
"name": "actor",
926
926
+
"in": "query",
927
927
+
"description": "An actor to fetch the tag list from",
928
928
+
"required": false,
929
929
+
"schema": {
930
930
+
"type": "string",
931
931
+
"description": "An actor to fetch the tag list from",
932
932
+
"format": "at-identifier"
933
933
+
}
934
934
+
}
935
935
+
],
936
936
+
"responses": {
937
937
+
"200": {
938
938
+
"description": "OK",
939
939
+
"content": {
940
940
+
"application/json": {
941
941
+
"schema": {
942
942
+
"type": "object",
943
943
+
"properties": {
944
944
+
"tags": {
945
945
+
"type": "array",
946
946
+
"items": {
947
947
+
"$ref": "#/components/schemas/social.clippr.feed.defs.tagView"
948
948
+
}
949
949
+
}
950
950
+
}
951
951
+
}
952
952
+
}
953
953
+
}
954
954
+
},
955
955
+
"400": {
956
956
+
"description": "Bad Request",
957
957
+
"content": {
958
958
+
"application/json": {
959
959
+
"schema": {
960
960
+
"type": "object",
961
961
+
"properties": {
962
962
+
"error": {
963
963
+
"type": "string",
964
964
+
"description": "A general error code",
965
965
+
"oneOf": [
966
966
+
{
967
967
+
"error": "InvalidRequest"
968
968
+
}
969
969
+
]
970
970
+
},
971
971
+
"message": {
972
972
+
"type": "string",
973
973
+
"description": "A detailed description of the error"
974
974
+
}
975
975
+
}
976
976
+
}
977
977
+
}
978
978
+
}
979
979
+
}
980
980
+
}
130
981
}
131
982
},
132
983
"/xrpc/_health": {
···
143
994
"properties": {
144
995
"version": {
145
996
"type": "string",
146
146
-
"description": "The version number of the AppView.",
147
147
-
"example": "0.1.0"
997
997
+
"description": "The version number of the AppView."
148
998
}
149
999
}
150
1000
}
···
177
1027
}
178
1028
}
179
1029
},
180
180
-
"social.clippr.actor.defs#profileView": {
1030
1030
+
"social.clippr.actor.defs.profileView": {
181
1031
"type": "object",
182
182
-
"description": "A view of an actor's profile.",
1032
1032
+
"description": "A view of an actor's profile",
183
1033
"required": [
184
1034
"did",
185
185
-
"handle"
1035
1035
+
"handle",
1036
1036
+
"displayName"
186
1037
],
187
1038
"properties": {
188
1039
"did": {
···
217
1068
}
218
1069
}
219
1070
},
220
220
-
"social.clippr.actor.defs#preferences": {
1071
1071
+
"social.clippr.actor.defs.preferences": {
221
1072
"type": "array",
222
1073
"items": {
223
1074
"oneOf": [
224
1075
{
225
225
-
"$ref": "#/components/schemas/social.clippr.actor.defs#publishingScopesPref"
1076
1076
+
"$ref": "#/components/schemas/social.clippr.actor.defs.publishingScopesPref"
226
1077
}
227
1078
]
228
1079
}
229
1080
},
230
230
-
"social.clippr.actor.defs#publishingScopesPref": {
1081
1081
+
"social.clippr.actor.defs.publishingScopesPref": {
231
1082
"type": "object",
232
232
-
"description": "Preferences for an user's publishing scopes",
1083
1083
+
"description": "Preferences for a user's publishing scopes",
233
1084
"required": [
234
1085
"defaultScope"
235
1086
],
···
244
1095
}
245
1096
}
246
1097
},
247
247
-
"social.clippr.feed.defs#clipView": {
1098
1098
+
"social.clippr.feed.defs.clipView": {
248
1099
"type": "object",
249
249
-
"description": "A view of a single bookmark (or 'clip').",
1100
1100
+
"description": "A view of a single bookmark (or 'clip')",
250
1101
"required": [
251
1102
"uri",
252
1103
"cid",
···
267
1118
},
268
1119
"author": {
269
1120
"description": "A reference to the actor's profile",
270
270
-
"$ref": "#/components/schemas/social.clippr.actor.defs#profileView"
1121
1121
+
"$ref": "#/components/schemas/social.clippr.actor.defs.profileView"
271
1122
},
272
1123
"record": {
273
1124
"type": "object",
···
280
1131
}
281
1132
}
282
1133
},
283
283
-
"social.clippr.feed.defs#tagView": {
1134
1134
+
"social.clippr.feed.defs.tagView": {
284
1135
"type": "object",
285
285
-
"description": "A view of a single tag.",
1136
1136
+
"description": "A view of a single tag",
286
1137
"required": [
287
1138
"uri",
288
1139
"cid",
···
303
1154
},
304
1155
"author": {
305
1156
"description": "A reference to the actor's profile",
306
306
-
"$ref": "#/components/schemas/social.clippr.actor.defs#profileView"
1157
1157
+
"$ref": "#/components/schemas/social.clippr.actor.defs.profileView"
307
1158
},
308
1159
"record": {
309
1160
"type": "object",
···
311
1162
},
312
1163
"indexedAt": {
313
1164
"type": "string",
314
314
-
"description": "The time in which the tag's recoord was indexed by the AppView",
1165
1165
+
"description": "The time in which the tag's record was indexed by the AppView",
315
1166
"format": "date-time"
316
1167
}
317
1168
}