social bookmarking for atproto

[appview/misc] Finish OpenAPI document

hexmani.ac 7cb52652 e4d9dadd

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