openapi: 3.0.3 info: title: Gallery-Archivist API version: 1.0.0 description: A tool for archiving online galleries paths: /api/auth/logout/: post: operationId: auth_logout_create tags: - auth requestBody: content: application/json: schema: $ref: '#/components/schemas/Logout' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Logout' multipart/form-data: schema: $ref: '#/components/schemas/Logout' required: true security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Logout' description: '' /api/auth/token/: post: operationId: auth_token_create description: |- Takes a set of user credentials and returns an access and refresh JSON web token pair to prove the authentication of those credentials. tags: - auth requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenObtainPair' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TokenObtainPair' multipart/form-data: schema: $ref: '#/components/schemas/TokenObtainPair' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenObtainPair' description: '' /api/auth/token/refresh/: post: operationId: auth_token_refresh_create description: |- Takes a refresh type JSON web token and returns an access type JSON web token if the refresh token is valid. tags: - auth requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenRefresh' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TokenRefresh' multipart/form-data: schema: $ref: '#/components/schemas/TokenRefresh' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenRefresh' description: '' /api/creators/: get: operationId: creators_list tags: - creators security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/CreatorList' description: '' /api/creators/{creator_id}/: get: operationId: creators_retrieve parameters: - in: path name: creator_id schema: type: string required: true tags: - creators security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CreatorDetails' description: '' /api/images/: get: operationId: images_list tags: - images security: - cookieAuth: [] - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Image' description: '' post: operationId: images_create tags: - images requestBody: content: application/json: schema: $ref: '#/components/schemas/Image' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Image' multipart/form-data: schema: $ref: '#/components/schemas/Image' required: true security: - cookieAuth: [] - jwtAuth: [] - {} responses: '201': content: application/json: schema: $ref: '#/components/schemas/Image' description: '' /api/images/{id}/: get: operationId: images_retrieve parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this image. required: true tags: - images security: - cookieAuth: [] - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/Image' description: '' put: operationId: images_update parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this image. required: true tags: - images requestBody: content: application/json: schema: $ref: '#/components/schemas/Image' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Image' multipart/form-data: schema: $ref: '#/components/schemas/Image' required: true security: - cookieAuth: [] - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/Image' description: '' patch: operationId: images_partial_update parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this image. required: true tags: - images requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedImage' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedImage' multipart/form-data: schema: $ref: '#/components/schemas/PatchedImage' security: - cookieAuth: [] - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/Image' description: '' delete: operationId: images_destroy parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this image. required: true tags: - images security: - cookieAuth: [] - jwtAuth: [] - {} responses: '204': description: No response body /api/posts/: get: operationId: posts_list tags: - posts security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/PostPreview' description: '' /api/posts/{post_id}/: get: operationId: posts_retrieve parameters: - in: path name: post_id schema: type: string required: true tags: - posts security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Post' description: '' /api/posts/{source_site}/: get: operationId: posts_list_2 parameters: - in: path name: source_site schema: type: string required: true tags: - posts security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/PostPreview' description: '' /api/posts/{source_site}/{creator_slug_or_id}/: get: operationId: posts_list_3 parameters: - in: path name: creator_slug_or_id schema: type: string required: true - in: path name: source_site schema: type: string required: true tags: - posts security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/PostPreview' description: '' /api/posts/{source_site}/{creator_slug_or_id}/{category}: get: operationId: posts_list_4 parameters: - in: path name: category schema: type: string required: true - in: path name: creator_slug_or_id schema: type: string required: true - in: path name: source_site schema: type: string required: true tags: - posts security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/PostPreview' description: '' /api/protected/: get: operationId: protected_retrieve tags: - protected security: - cookieAuth: [] - jwtAuth: [] responses: '200': description: No response body /api/user/profile/: get: operationId: user_profile_retrieve description: Retrieve and update the authenticated user's profile. tags: - user security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' put: operationId: user_profile_update description: Retrieve and update the authenticated user's profile. tags: - user requestBody: content: application/json: schema: $ref: '#/components/schemas/User' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/User' multipart/form-data: schema: $ref: '#/components/schemas/User' required: true security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' patch: operationId: user_profile_partial_update description: Retrieve and update the authenticated user's profile. tags: - user requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedUser' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedUser' multipart/form-data: schema: $ref: '#/components/schemas/PatchedUser' security: - cookieAuth: [] - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' components: schemas: CreatorDetails: type: object properties: creator_id: type: string nullable: true maxLength: 128 slug: type: string maxLength: 64 name: type: string maxLength: 64 mature: type: boolean avatar_url: type: string nullable: true readOnly: true banner_url: type: string nullable: true readOnly: true description: type: array items: type: object additionalProperties: type: string readOnly: true date: type: object additionalProperties: type: string readOnly: true categories: type: array items: type: object additionalProperties: type: string readOnly: true required: - avatar_url - banner_url - categories - date - description - name - slug CreatorList: type: object properties: creator_id: type: string nullable: true maxLength: 128 source_site: type: string readOnly: true slug: type: string maxLength: 64 name: type: string maxLength: 64 mature: type: boolean date: type: object additionalProperties: type: string readOnly: true description: type: string nullable: true readOnly: true avatar_url: type: string readOnly: true banner_url: type: string readOnly: true required: - avatar_url - banner_url - date - description - name - slug - source_site Image: type: object properties: id: type: integer readOnly: true title: type: string maxLength: 255 image: type: string format: uri uploaded_at: type: string format: date-time readOnly: true required: - id - image - title - uploaded_at Logout: type: object properties: refresh: type: string required: - refresh PatchedImage: type: object properties: id: type: integer readOnly: true title: type: string maxLength: 255 image: type: string format: uri uploaded_at: type: string format: date-time readOnly: true PatchedUser: type: object properties: username: type: string description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 email: type: string format: email title: Email address maxLength: 254 first_name: type: string maxLength: 150 last_name: type: string maxLength: 150 profile: $ref: '#/components/schemas/UserProfile' Post: type: object properties: post_id: type: string maxLength: 128 title: type: string maxLength: 64 description: type: object additionalProperties: type: string readOnly: true source_site: type: object additionalProperties: type: string readOnly: true creator: type: object additionalProperties: type: string readOnly: true date: type: object additionalProperties: type: string readOnly: true mature: type: boolean media: type: array items: type: object additionalProperties: type: string readOnly: true tags: type: array items: type: string readOnly: true required: - creator - date - description - media - post_id - source_site - tags - title PostPreview: type: object properties: post_id: type: string maxLength: 128 mature: type: boolean title: type: string maxLength: 64 description: type: string nullable: true readOnly: true source_site: type: object additionalProperties: type: string readOnly: true category: type: array items: type: object additionalProperties: type: string readOnly: true creator: type: object additionalProperties: type: string nullable: true readOnly: true date: type: object additionalProperties: type: string readOnly: true media: type: array items: type: object additionalProperties: type: string readOnly: true tags: type: array items: type: string readOnly: true required: - category - creator - date - description - media - post_id - source_site - tags - title TokenObtainPair: type: object properties: username: type: string writeOnly: true password: type: string writeOnly: true access: type: string readOnly: true refresh: type: string readOnly: true required: - access - password - refresh - username TokenRefresh: type: object properties: access: type: string readOnly: true refresh: type: string writeOnly: true required: - access - refresh User: type: object properties: username: type: string description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 email: type: string format: email title: Email address maxLength: 254 first_name: type: string maxLength: 150 last_name: type: string maxLength: 150 profile: $ref: '#/components/schemas/UserProfile' required: - profile - username UserProfile: type: object properties: show_mature: type: boolean securitySchemes: cookieAuth: type: apiKey in: cookie name: sessionid jwtAuth: type: http scheme: bearer bearerFormat: JWT