--- swagger: "2.0" info: title: fatcat description: A scalable, versioned, API-oriented catalog of bibliographic entities and file metadata version: 0.1.0 schemes: [http] basePath: /v0 #host: api.fatcat.wiki consumes: - application/json produces: - application/json # Common properties across entities x-entity-props: &ENTITYPROPS state: type: string enum: ["wip", "active", "redirect", "deleted"] ident: type: string #format: ident example: "q3nouwy3nnbsvo3h5klxsx4a7y" revision: type: integer example: 42 format: int64 redirect: type: string #format: uuid example: "q3nouwy3nnbsvo3h5klxsx4a7y" editgroup_id: type: integer example: 16 format: int64 extra: type: object additionalProperties: {} definitions: error_response: type: object required: - message properties: message: type: string example: "A really confusing, totally unexpected thing happened" success: type: object required: - message properties: message: type: string example: "The computers did the thing successfully!" container_entity: type: object required: - name properties: <<: *ENTITYPROPS name: type: string example: "Journal of Important Results" publisher: type: string example: "Society of Curious Students" issnl: type: string #format: custom example: "1234-5678" abbrev: type: string coden: type: string creator_entity: type: object required: - display_name properties: <<: *ENTITYPROPS display_name: type: string example: "Grace Hopper" given_name: type: string surname: type: string orcid: type: string #format: custom example: "0000-0002-1825-0097" file_entity: type: object properties: <<: *ENTITYPROPS size: type: integer example: 1048576 format: int64 sha1: type: string #format: custom example: "f013d66c7f6817d08b7eb2a93e6d0440c1f3e7f8" md5: type: string #format: custom example: "d41efcc592d1e40ac13905377399eb9b" sha256: type: string #format: custom example: "a77e4c11a57f1d757fca5754a8f83b5d4ece49a2d28596889127c1a2f3f28832" url: type: string format: url example: "https://example.edu/~frau/prcding.pdf" mimetype: type: string example: "application/pdf" releases: type: array items: type: string #format: uuid release_entity: type: object required: - title properties: <<: *ENTITYPROPS title: type: string work_id: type: string example: "q3nouwy3nnbsvo3h5klxsx4a7y" container_id: type: string example: "q3nouwy3nnbsvo3h5klxsx4a7y" release_type: type: string example: "book" release_status: type: string example: "preprint" release_date: type: string format: date doi: type: string #format: custom example: "10.1234/abcde.789" isbn13: type: string #format: custom volume: type: string issue: type: string example: "12" pages: type: string publisher: type: string language: description: "Two-letter RFC1766/ISO639-1 language code, with extensions" type: string contribs: type: array items: $ref: "#/definitions/release_contrib" refs: type: array items: $ref: "#/definitions/release_ref" work_entity: type: object properties: <<: *ENTITYPROPS work_type: type: string entity_history_entry: type: object required: - edit - editgroup - changelog_entry properties: edit: $ref: "#/definitions/entity_edit" editgroup: $ref: "#/definitions/editgroup" changelog_entry: $ref: "#/definitions/changelog_entry" entity_edit: type: object required: - edit_id - ident - editgroup_id properties: edit_id: type: integer example: 847 format: int64 ident: type: string example: "q3nouwy3nnbsvo3h5klxsx4a7y" revision: type: integer example: 42 format: int64 redirect_ident: type: string example: "q3nouwy3nnbsvo3h5klxsx4a7y" #format: ident editgroup_id: type: integer example: 16 format: int64 extra: type: object additionalProperties: {} editor: type: object required: - username properties: username: type: string example: "zerocool93" editgroup: type: object required: - editor_id properties: id: type: integer format: int64 editor_id: type: integer format: int64 description: type: string extra: type: object additionalProperties: {} edits: type: object properties: containers: type: array items: $ref: "#/definitions/entity_edit" creators: type: array items: $ref: "#/definitions/entity_edit" files: type: array items: $ref: "#/definitions/entity_edit" releases: type: array items: $ref: "#/definitions/entity_edit" works: type: array items: $ref: "#/definitions/entity_edit" changelog_entry: type: object required: - index - editgroup_id - timestamp properties: index: type: integer format: int64 editgroup_id: type: integer format: int64 timestamp: type: string format: date-time editgroup: $ref: "#/definitions/editgroup" release_ref: type: object properties: index: type: integer format: int64 target_release_id: type: string #format: ident raw: type: string key: type: string year: type: integer format: int64 container_title: type: string title: type: string locator: type: string example: "p123" release_contrib: type: object properties: index: type: integer format: int64 creator_id: type: string #format: ident raw: type: string role: type: string stats_response: type: object properties: extra: type: object additionalProperties: {} x-entity-responses: &ENTITYRESPONSES 400: description: Bad Request schema: $ref: "#/definitions/error_response" 404: description: Not Found schema: $ref: "#/definitions/error_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response" paths: /container: post: operationId: "create_container" parameters: - name: entity in: body required: true schema: $ref: "#/definitions/container_entity" responses: 201: description: Created Entity schema: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /container/batch: post: operationId: "create_container_batch" parameters: - name: entity_list in: body required: true schema: type: array items: $ref: "#/definitions/container_entity" responses: 201: description: Created Entities schema: type: array items: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /container/{id}: parameters: - name: id in: path type: string required: true get: operationId: "get_container" responses: 200: description: Found Entity schema: $ref: "#/definitions/container_entity" <<: *ENTITYRESPONSES /container/{id}/history: parameters: - name: id in: path type: string required: true - name: limit in: query type: integer format: int64 required: false get: operationId: "get_container_history" responses: 200: description: Found Entity History schema: type: array items: $ref: "#/definitions/entity_history_entry" <<: *ENTITYRESPONSES /container/lookup: get: operationId: "lookup_container" parameters: - name: issnl in: query type: string required: true responses: 200: description: Found Entity schema: $ref: "#/definitions/container_entity" <<: *ENTITYRESPONSES /creator: post: operationId: "create_creator" parameters: - name: entity in: body required: true schema: $ref: "#/definitions/creator_entity" responses: 201: description: Created Entity schema: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /creator/batch: post: operationId: "create_creator_batch" parameters: - name: entity_list in: body required: true schema: type: array items: $ref: "#/definitions/creator_entity" responses: 201: description: Created Entities schema: type: array items: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /creator/{id}: parameters: - name: id in: path type: string required: true get: operationId: "get_creator" responses: 200: description: Found Entity schema: $ref: "#/definitions/creator_entity" <<: *ENTITYRESPONSES /creator/{id}/history: parameters: - name: id in: path type: string required: true - name: limit in: query type: integer format: int64 required: false get: operationId: "get_creator_history" responses: 200: description: Found Entity History schema: type: array items: $ref: "#/definitions/entity_history_entry" <<: *ENTITYRESPONSES /creator/{id}/releases: parameters: - name: id in: path type: string required: true get: operationId: "get_creator_releases" responses: 200: description: Found Entity schema: type: array items: $ref: "#/definitions/release_entity" <<: *ENTITYRESPONSES /creator/lookup: get: operationId: "lookup_creator" parameters: - name: orcid in: query type: string required: true responses: 200: description: Found Entity schema: $ref: "#/definitions/creator_entity" <<: *ENTITYRESPONSES /file: post: operationId: "create_file" parameters: - name: entity in: body required: true schema: $ref: "#/definitions/file_entity" responses: 201: description: Created Entity schema: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /file/batch: post: operationId: "create_file_batch" parameters: - name: entity_list in: body required: true schema: type: array items: $ref: "#/definitions/file_entity" responses: 201: description: Created Entities schema: type: array items: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /file/{id}: parameters: - name: id in: path type: string required: true get: operationId: "get_file" responses: 200: description: Found Entity schema: $ref: "#/definitions/file_entity" <<: *ENTITYRESPONSES /file/{id}/history: parameters: - name: id in: path type: string required: true - name: limit in: query type: integer format: int64 required: false get: operationId: "get_file_history" responses: 200: description: Found Entity History schema: type: array items: $ref: "#/definitions/entity_history_entry" <<: *ENTITYRESPONSES /file/lookup: get: operationId: "lookup_file" parameters: - name: sha1 in: query type: string required: true responses: 200: description: Found Entity schema: $ref: "#/definitions/file_entity" <<: *ENTITYRESPONSES /release: post: operationId: "create_release" parameters: - name: entity in: body required: true schema: $ref: "#/definitions/release_entity" responses: 201: description: Created Entity schema: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /release/batch: post: operationId: "create_release_batch" parameters: - name: entity_list in: body required: true schema: type: array items: $ref: "#/definitions/release_entity" responses: 201: description: Created Entities schema: type: array items: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /release/{id}: parameters: - name: id in: path type: string required: true get: operationId: "get_release" responses: 200: description: Found Entity schema: $ref: "#/definitions/release_entity" <<: *ENTITYRESPONSES /release/{id}/history: parameters: - name: id in: path type: string required: true - name: limit in: query type: integer format: int64 required: false get: operationId: "get_release_history" responses: 200: description: Found Entity History schema: type: array items: $ref: "#/definitions/entity_history_entry" <<: *ENTITYRESPONSES /release/{id}/files: parameters: - name: id in: path type: string required: true get: operationId: "get_release_files" responses: 200: description: Found Entity schema: type: array items: $ref: "#/definitions/file_entity" <<: *ENTITYRESPONSES /release/lookup: get: operationId: "lookup_release" parameters: - name: doi in: query type: string required: true responses: 200: description: Found Entity schema: $ref: "#/definitions/release_entity" <<: *ENTITYRESPONSES /work: post: operationId: "create_work" parameters: - name: entity in: body required: true schema: $ref: "#/definitions/work_entity" responses: 201: description: Created Entity schema: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /work/batch: post: operationId: "create_work_batch" parameters: - name: entity_list in: body required: true schema: type: array items: $ref: "#/definitions/work_entity" responses: 201: description: Created Entities schema: type: array items: $ref: "#/definitions/entity_edit" <<: *ENTITYRESPONSES /work/{id}: parameters: - name: id in: path type: string required: true get: operationId: "get_work" responses: 200: description: Found Entity schema: $ref: "#/definitions/work_entity" <<: *ENTITYRESPONSES /work/{id}/history: parameters: - name: id in: path type: string required: true - name: limit in: query type: integer format: int64 required: false get: operationId: "get_work_history" responses: 200: description: Found Entity History schema: type: array items: $ref: "#/definitions/entity_history_entry" <<: *ENTITYRESPONSES /work/{id}/releases: parameters: - name: id in: path type: string required: true get: operationId: "get_work_releases" responses: 200: description: Found Entity schema: type: array items: $ref: "#/definitions/release_entity" <<: *ENTITYRESPONSES /editor/{username}: parameters: - name: username in: path type: string required: true get: operationId: "get_editor" responses: 200: description: Found Editor schema: $ref: "#/definitions/editor" 404: description: Not Found schema: $ref: "#/definitions/error_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response" /editor/{username}/changelog: parameters: - name: username in: path type: string required: true get: operationId: "get_editor_changelog" responses: 200: description: Found Merged Changes schema: type: array items: $ref: "#/definitions/changelog_entry" 404: description: Not Found schema: $ref: "#/definitions/error_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response" /editgroup: post: operationId: "create_editgroup" parameters: - name: entity in: body required: true schema: $ref: "#/definitions/editgroup" responses: 201: description: Successfully Created schema: $ref: "#/definitions/editgroup" 400: description: Bad Request schema: $ref: "#/definitions/error_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response" /editgroup/{id}: parameters: - name: id in: path type: integer format: int64 required: true get: operationId: "get_editgroup" responses: 200: description: Found Entity schema: $ref: "#/definitions/editgroup" 400: description: Bad Request schema: $ref: "#/definitions/error_response" 404: description: Not Found schema: $ref: "#/definitions/error_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response" /editgroup/{id}/accept: parameters: - name: id in: path type: integer format: int64 required: true post: operationId: "accept_editgroup" responses: 200: description: Merged Successfully schema: $ref: "#/definitions/success" 400: description: Unmergable schema: $ref: "#/definitions/error_response" 404: description: Not Found schema: $ref: "#/definitions/error_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response" /changelog: parameters: - name: limit in: query type: integer format: int64 required: false get: operationId: "get_changelog" responses: 200: description: Success schema: type: array items: $ref: "#/definitions/changelog_entry" 500: description: Generic Error schema: $ref: "#/definitions/error_response" /changelog/{id}: parameters: - name: id in: path type: integer format: int64 required: true get: operationId: "get_changelog_entry" responses: 200: description: Found Changelog Entry schema: $ref: "#/definitions/changelog_entry" 404: description: Not Found schema: $ref: "#/definitions/error_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response" /stats: get: operationId: "get_stats" parameters: - name: more in: query type: string required: false responses: 200: description: Success schema: $ref: "#/definitions/stats_response" 500: description: Generic Error schema: $ref: "#/definitions/error_response"