basePath: / definitions: auth.credentialsRequest: properties: email: type: string name: type: string password: type: string type: object auth.passwordRequest: properties: currentPassword: type: string newPassword: type: string type: object auth.profileRequest: properties: email: type: string name: type: string type: object galleries.createRequest: properties: clientName: type: string description: type: string title: type: string type: object galleries.publicPasswordRequest: properties: password: type: string type: object media.updateRequest: properties: sortOrder: type: integer type: object media.uploadRequest: properties: fileSize: type: integer filename: type: string mimeType: type: string type: object info: contact: {} description: REST API for photographer galleries and client delivery. title: Noah Bianchi Studio API version: "1.0" paths: /api/auth/login: post: consumes: - application/json parameters: - description: Account credentials in: body name: request required: true schema: $ref: '#/definitions/auth.credentialsRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Sign in a photographer tags: - authentication /api/auth/logout: post: produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object summary: Sign out the current photographer tags: - authentication /api/auth/me: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Get the current photographer tags: - authentication patch: consumes: - application/json parameters: - description: Profile details in: body name: request required: true schema: $ref: '#/definitions/auth.profileRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "409": description: Conflict schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Update the current photographer profile tags: - authentication /api/auth/password: post: consumes: - application/json parameters: - description: Password details in: body name: request required: true schema: $ref: '#/definitions/auth.passwordRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Change the current photographer password tags: - authentication /api/auth/register: post: consumes: - application/json parameters: - description: Account details in: body name: request required: true schema: $ref: '#/definitions/auth.credentialsRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "409": description: Conflict schema: additionalProperties: type: string type: object summary: Register a photographer account tags: - authentication /api/dev/diagnostics: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Inspect local development dependencies tags: - development /api/dev/storage-check: post: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: true type: object "503": description: Service Unavailable schema: additionalProperties: true type: object security: - studioSession: [] summary: Check MinIO storage read/write access tags: - development /api/galleries: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - studioSession: [] summary: List owned galleries tags: - galleries post: consumes: - application/json parameters: - description: Gallery details in: body name: request required: true schema: $ref: '#/definitions/galleries.createRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Create a gallery tags: - galleries /api/galleries/{id}: delete: parameters: - description: Gallery UUID in: path name: id required: true type: string produces: - application/json responses: "204": description: No Content "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Delete a gallery tags: - galleries get: parameters: - description: Gallery UUID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Get an owned gallery tags: - galleries patch: consumes: - application/json parameters: - description: Gallery UUID in: path name: id required: true type: string - description: Gallery changes in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Update a gallery tags: - galleries /api/galleries/{id}/media: get: parameters: - description: Gallery UUID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: List gallery media tags: - media /api/galleries/{id}/preview: get: parameters: - description: Gallery UUID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Preview a gallery as a client tags: - galleries /api/galleries/{id}/publish: post: parameters: - description: Gallery UUID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Publish a gallery tags: - galleries /api/galleries/{id}/unpublish: post: parameters: - description: Gallery UUID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Unpublish a gallery tags: - galleries /api/galleries/{id}/uploads: post: consumes: - application/json parameters: - description: Gallery UUID in: path name: id required: true type: string - description: Upload metadata in: body name: request required: true schema: $ref: '#/definitions/media.uploadRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Create a presigned media upload tags: - media /api/media/{id}: delete: parameters: - description: Media UUID in: path name: id required: true type: string produces: - application/json responses: "204": description: No Content "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Delete media or cancel an upload tags: - media patch: consumes: - application/json parameters: - description: Media UUID in: path name: id required: true type: string - description: Media changes in: body name: request required: true schema: $ref: '#/definitions/media.updateRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Update media ordering tags: - media /api/media/{id}/download: post: parameters: - description: Media UUID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Create a signed original media download URL tags: - media /api/public/galleries/{slug}: get: parameters: - description: Gallery slug in: path name: slug required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object summary: Get a published public gallery tags: - public galleries /api/public/galleries/{slug}/authenticate: post: consumes: - application/json parameters: - description: Gallery slug in: path name: slug required: true type: string - description: Gallery password in: body name: request required: true schema: $ref: '#/definitions/galleries.publicPasswordRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object summary: Authenticate to a password-protected gallery tags: - public galleries /api/public/galleries/{slug}/download-all: post: parameters: - description: Gallery slug in: path name: slug required: true type: string produces: - application/json responses: "202": description: Accepted schema: additionalProperties: type: string type: object "403": description: Forbidden schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object summary: Start a public gallery ZIP download tags: - public downloads /api/public/galleries/{slug}/download-all/{jobId}: get: parameters: - description: Gallery slug in: path name: slug required: true type: string - description: Download job UUID in: path name: jobId required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "403": description: Forbidden schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object summary: Get public gallery ZIP download status tags: - public downloads /api/public/galleries/{slug}/media/{mediaId}/download: post: parameters: - description: Gallery slug in: path name: slug required: true type: string - description: Media UUID in: path name: mediaId required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "403": description: Forbidden schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object "500": description: Internal Server Error schema: additionalProperties: type: string type: object summary: Download one public gallery media item tags: - public downloads /api/public/galleries/{slug}/media/{mediaId}/favorite: delete: parameters: - description: Gallery slug in: path name: slug required: true type: string - description: Media UUID in: path name: mediaId required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: boolean type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "403": description: Forbidden schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object summary: Remove a favorite from a gallery media item tags: - public galleries post: parameters: - description: Gallery slug in: path name: slug required: true type: string - description: Media UUID in: path name: mediaId required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: boolean type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "403": description: Forbidden schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object summary: Favorite a gallery media item tags: - public galleries /api/uploads/{id}: delete: parameters: - description: Media UUID in: path name: id required: true type: string produces: - application/json responses: "204": description: No Content "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Delete media or cancel an upload tags: - media /api/uploads/{id}/complete: post: parameters: - description: Media UUID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object "404": description: Not Found schema: additionalProperties: type: string type: object security: - studioSession: [] summary: Complete a media upload tags: - media /health: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object summary: Check API health tags: - system schemes: - http - https securityDefinitions: studioSession: description: Use the studio_session cookie as studio_session=. in: header name: Cookie type: apiKey swagger: "2.0"