Fatcat works API

**Work** entities group several Release entities which are different # TAGLINE versions of the same abstract piece of research. For example, three # TAGLINE release entities representing the pre-print, published article, and # TAGLINE retraction stages of the same journal paper would be grouped under a # TAGLINE single work. # TAGLINE See the "Catalog Style Guide" section of the guide for details and # TAGLINE semantics of what should be included in specific entity fields. # TAGLINE Specifically, the # TAGLINE [Work Entity Reference](https://guide.fatcat.wiki/entity_work.html). # TAGLINE

OpenAPI Specification

fatcat-works-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: fatcat auth works API
  version: 0.5.0
  description: 'Fatcat is a scalable, versioned, API-oriented catalog of bibliographic

    entities and file metadata.


    <!-- STARTLONGDESCRIPTION -->

    These API reference documents, along with client software libraries, are

    generated automatically from an OpenAPI 2.0 ("Swagger") definition file.


    ## Introduction



    A higher-level introduction to the API, as well as a description of the

    fatcat data model, are available in ["The Fatcat Guide"](https://guide.fatcat.wiki/).

    The guide also includes a [Cookbook](https://guide.fatcat.wiki/cookbook.html)

    section demonstrating end-to-end tasks like creating entities as part of

    editgroups, or safely merging duplicate entities.


    ### Expectations and Best Practices


    A test/staging QA API instance of fatcat is available at

    <https://api.qa.fatcat.wiki/v0>. The database backing this instance is

    separate from the production interface, and is periodically rebuilt from

    snapshots of the full production database, meaning that edits on the QA

    server will *NOT* persist, and that semantics like the changelog index

    monotonically increasing *MAY* be broken. Developers are expexcted to test

    their scripts and tools against the QA instance before running against

    production.


    NOTE: as of Spring 2021, the QA server is temporarily unavailable.


    Fatcat is made available as a gratis (no cost) and libre (freedom

    preserving) service to the public, with limited funding and resources. We

    welcome new and unforeseen uses and contributions, but may need to impose

    restrictions (like rate-limits) to keep the service functional for other

    users, and in extreme cases reserve the option to block accounts and IP

    ranges if necessary to keep the service operational.


    The Internet Archive owns and operates it''s own server equipment and data

    centers, and operations are optimized for low-cost, not high-availability.

    Users and partners should expect some downtime on the fatcat API, on the

    order of hours a month.


    Periodic metadata exports are available for batch processing, and database

    snapshots can be used to create locally-hosted mirrors of the service for

    more intensive and reliable querying.


    ### Other Nitty Gritties


    Cross-origin requests are allowed for the API service, to enable third

    parties to build in-browser applications.


    A metadata search service is available at <https://search.fatcat.wiki>.

    The API is currently the raw elasticsearch API, with only GET (read)

    requests allowed. This public service is experimental and may be removed or

    limited in the future.


    ## Authentication


    The API allows basic read-only "GET" HTTP requests with no authentication.

    Proposing changes to the metadata, or other mutating requests ("PUT",

    "POST", "DELETE") all require authentication, and some operations require

    additional account permissions.


    End-user account creation and login happens through the web interface. From

    a logged-in editor profile page, you can generate a API token. Tokens are

    "macaroons", similar to JWT tokens, and are used for all API

    authentication. The web interface includes macaroons in browser cookies and

    passes them through to the API to authenticate editor actions.


    <!-- ReDoc-Inject: <security-definitions> -->

    <!-- ENDLONGDESCRIPTION -->

    '
  termsOfService: https://guide.fatcat.wiki/policies.html
  contact:
    name: Internet Archive Web Group
    email: webservices@archive.org
    url: https://fatcat.wiki
  x-logo:
    url: https://fatcat.wiki/static/paper_man_confused.gif
    altText: Confused Papers Man (Logo)
    backgroundColor: '#FFFFFF'
host: api.fatcat.wiki
basePath: /v0
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: works
  x-displayName: Works
  description: '**Work** entities group several Release entities which are different  # TAGLINE

    versions of the same abstract piece of research. For example, three  # TAGLINE

    release entities representing the pre-print, published article, and  # TAGLINE

    retraction stages of the same journal paper would be grouped under a  # TAGLINE

    single work.  # TAGLINE


    See the "Catalog Style Guide" section of the guide for details and  # TAGLINE

    semantics of what should be included in specific entity fields.  # TAGLINE

    Specifically, the  # TAGLINE

    [Work Entity Reference](https://guide.fatcat.wiki/entity_work.html).  # TAGLINE

    '
paths:
  /editgroup/{editgroup_id}/work:
    parameters:
    - name: editgroup_id
      in: path
      type: string
      required: true
    post:
      operationId: create_work
      tags:
      - works
      parameters:
      - name: entity
        in: body
        required: true
        schema:
          $ref: '#/definitions/work_entity'
      security:
      - Bearer: []
      responses:
        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'
        401:
          description: Not Authorized
          schema:
            $ref: '#/definitions/error_response'
          headers:
            WWW_Authenticate:
              type: string
        403:
          description: Forbidden
          schema:
            $ref: '#/definitions/error_response'
        201:
          description: Created Entity
          schema:
            $ref: '#/definitions/entity_edit'
  /editgroup/auto/work/batch:
    post:
      operationId: create_work_auto_batch
      tags:
      - works
      parameters:
      - name: auto_batch
        in: body
        required: true
        schema:
          $ref: '#/definitions/work_auto_batch'
      security:
      - Bearer: []
      responses:
        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'
        401:
          description: Not Authorized
          schema:
            $ref: '#/definitions/error_response'
          headers:
            WWW_Authenticate:
              type: string
        403:
          description: Forbidden
          schema:
            $ref: '#/definitions/error_response'
        201:
          description: Created Editgroup
          schema:
            $ref: '#/definitions/editgroup'
  /work/{ident}:
    parameters:
    - name: ident
      in: path
      type: string
      required: true
    get:
      operationId: get_work
      tags:
      - works
      parameters:
      - name: expand
        in: query
        type: string
        required: false
        description: List of sub-entities to expand in response. For works, none accepted (yet).
      - name: hide
        in: query
        type: string
        required: false
        description: List of entity fields to elide in response. For works, none accepted (yet).
      responses:
        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'
        200:
          description: Found Entity
          schema:
            $ref: '#/definitions/work_entity'
  /editgroup/{editgroup_id}/work/{ident}:
    parameters:
    - name: editgroup_id
      in: path
      type: string
      required: true
    - name: ident
      in: path
      type: string
      required: true
    put:
      operationId: update_work
      tags:
      - works
      parameters:
      - name: entity
        in: body
        required: true
        schema:
          $ref: '#/definitions/work_entity'
      security:
      - Bearer: []
      responses:
        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'
        401:
          description: Not Authorized
          schema:
            $ref: '#/definitions/error_response'
          headers:
            WWW_Authenticate:
              type: string
        403:
          description: Forbidden
          schema:
            $ref: '#/definitions/error_response'
        200:
          description: Updated Entity
          schema:
            $ref: '#/definitions/entity_edit'
    delete:
      operationId: delete_work
      tags:
      - works
      security:
      - Bearer: []
      responses:
        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'
        401:
          description: Not Authorized
          schema:
            $ref: '#/definitions/error_response'
          headers:
            WWW_Authenticate:
              type: string
        403:
          description: Forbidden
          schema:
            $ref: '#/definitions/error_response'
        200:
          description: Deleted Entity
          schema:
            $ref: '#/definitions/entity_edit'
  /work/rev/{rev_id}:
    parameters:
    - type: string
      pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
      minLength: 36
      maxLength: 36
      description: UUID (lower-case, dash-separated, hex-encoded 128-bit)
      name: rev_id
      in: path
      required: true
    get:
      operationId: get_work_revision
      tags:
      - works
      parameters:
      - name: expand
        in: query
        type: string
        required: false
        description: List of sub-entities to expand in response. See `get_work`, though note that identifier-based expansions like `releases` will always be empty for revisions.
      - name: hide
        in: query
        type: string
        required: false
        description: List of entity fields to elide in response. See `get_work`.
      responses:
        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'
        200:
          description: Found Entity Revision
          schema:
            $ref: '#/definitions/work_entity'
  /work/{ident}/history:
    parameters:
    - name: ident
      in: path
      type: string
      required: true
    - name: limit
      in: query
      type: integer
      format: int64
      required: false
    get:
      operationId: get_work_history
      tags:
      - works
      responses:
        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'
        200:
          description: Found Entity History
          schema:
            type: array
            items:
              $ref: '#/definitions/entity_history_entry'
  /work/{ident}/redirects:
    parameters:
    - name: ident
      in: path
      type: string
      required: true
    get:
      operationId: get_work_redirects
      tags:
      - works
      responses:
        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'
        200:
          description: Found Entity Redirects
          schema:
            type: array
            items:
              type: string
              pattern: '[a-zA-Z2-7]{26}'
              minLength: 26
              maxLength: 26
              description: base32-encoded unique identifier
  /work/{ident}/releases:
    parameters:
    - name: ident
      in: path
      type: string
      required: true
    - name: hide
      in: query
      type: string
      required: false
      description: List of entity fields to elide in response. See `get_release`.
    get:
      operationId: get_work_releases
      tags:
      - works
      description: 'Returns the set of release entities that are part of this work (aka,

        have `work_id` pointing to this work entity).

        '
      responses:
        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'
        200:
          description: Found
          schema:
            type: array
            items:
              $ref: '#/definitions/release_entity'
  /work/edit/{edit_id}:
    get:
      operationId: get_work_edit
      tags:
      - works
      parameters:
      - type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: UUID (lower-case, dash-separated, hex-encoded 128-bit)
        name: edit_id
        in: path
        required: true
      responses:
        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'
        200:
          description: Found Edit
          schema:
            $ref: '#/definitions/entity_edit'
  /editgroup/{editgroup_id}/work/edit/{edit_id}:
    parameters:
    - name: editgroup_id
      in: path
      required: true
      type: string
    - type: string
      pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
      minLength: 36
      maxLength: 36
      description: UUID (lower-case, dash-separated, hex-encoded 128-bit)
      name: edit_id
      in: path
      required: true
    delete:
      operationId: delete_work_edit
      tags:
      - works
      security:
      - Bearer: []
      responses:
        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'
        401:
          description: Not Authorized
          schema:
            $ref: '#/definitions/error_response'
          headers:
            WWW_Authenticate:
              type: string
        403:
          description: Forbidden
          schema:
            $ref: '#/definitions/error_response'
        200:
          description: Deleted Edit
          schema:
            $ref: '#/definitions/success'
definitions:
  release_ref:
    type: object
    properties:
      index:
        type: integer
        format: int64
        description: 'Zero-indexed sequence number of this reference in the list of

          references. Assigned automatically and used internally; don''t confuse

          with `key`.

          '
      target_release_id:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: 'Optional, fatcat identifier of release entity that this reference is

          citing.

          '
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      extra:
        type: object
        additionalProperties: {}
        description: 'Additional free-form JSON metadata about this citation. Generally

          follows Citation Style Language (CSL) JSON schema. See guide for

          details.

          '
      key:
        type: string
        example: SMITH2016
        description: 'Short string used to indicate this reference from within the release

          text; or numbering of references as typeset in the release itself.

          Optional; don''t confuse with `index` field.

          '
      year:
        type: integer
        format: int64
        example: 1972
        description: 'Year that the cited work was published in.

          '
      container_name:
        type: string
        description: 'Name of the container (eg, journal) that the citation work was

          published as part of. May be an acronym or full name.

          '
      title:
        type: string
        description: Name of the work being cited.
      locator:
        type: string
        example: p123
        description: 'Page number or other indicator of the specific subset of a work being

          cited. Not to be confused with the first page (or page range) of an

          entire paper or chapter being cited.

          '
  container_entity:
    type: object
    properties:
      state:
        type: string
        enum:
        - wip
        - active
        - redirect
        - deleted
        example: active
      ident:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      revision:
        type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: UUID (lower-case, dash-separated, hex-encoded 128-bit)
        example: 86daea5b-1b6b-432a-bb67-ea97795f80fe
      redirect:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with the other entity

          metadata. See guide for (unenforced) schema conventions.

          '
        additionalProperties: {}
      edit_extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with specific entity edits

          (eg, creation/update/delete).

          '
        additionalProperties: {}
      name:
        type: string
        description: Name of the container (eg, Journal title). Required for entity creation.
        example: Journal of Important Results
      container_type:
        type: string
        description: Type of container, eg 'journal' or 'proceedings'. See Guide for list of valid types.
        example: journal
      publication_status:
        type: string
        description: Whether the container is active, discontinued, etc
        example: active
      publisher:
        type: string
        description: 'Name of the organization or entity responsible for publication. Not

          the complete imprint/brand.

          '
        example: Society of Curious Students
      issnl:
        type: string
        pattern: \d{4}-\d{3}[0-9X]
        minLength: 9
        maxLength: 9
        example: 1234-5678
        description: Linking ISSN number (ISSN-L). Should be valid and registered with issn.org
      issne:
        type: string
        pattern: \d{4}-\d{3}[0-9X]
        minLength: 9
        maxLength: 9
        example: 1234-5678
        description: Electronic ISSN number (ISSN-E). Should be valid and registered with issn.org
      issnp:
        type: string
        pattern: \d{4}-\d{3}[0-9X]
        minLength: 9
        maxLength: 9
        example: 1234-5678
        description: Print ISSN number (ISSN-P). Should be valid and registered with issn.org
      wikidata_qid:
        type: string
        example: Q42812
  editor:
    type: object
    required:
    - username
    properties:
      editor_id:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: 'Fatcat identifier for the editor. Can not be changed.

          '
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      username:
        type: string
        example: zerocool93
        description: 'Username/handle (short slug-like string) to identify this editor. May

          be changed at any time by the editor; use the `editor_id` as a

          persistend identifier.

          '
      is_admin:
        type: boolean
        example: false
        description: 'Whether this editor has the `admin` role.

          '
      is_bot:
        type: boolean
        example: false
        description: 'Whether this editor is a bot (as opposed to a human making manual

          edits)

          '
      is_active:
        type: boolean
        example: true
        description: 'Whether this editor''s account is enabled (if not API tokens and web

          logins will not work).

          '
  webcapture_url:
    type: object
    required:
    - url
    - rel
    properties:
      url:
        type: string
        format: url
        example: https://web.archive.org/web/
        description: 'URL/URI pointing to archive of this web resource.

          '
      rel:
        type: string
        example: wayback
        description: 'Type of archive endpoint. Usually `wayback` (WBM replay of primary

          resource), or `warc` (direct URL to a WARC file containing all

          resources of the capture). See guide for full list.

          '
  file_entity:
    type: object
    properties:
      state:
        type: string
        enum:
        - wip
        - active
        - redirect
        - deleted
        example: active
      ident:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      revision:
        type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: UUID (lower-case, dash-separated, hex-encoded 128-bit)
        example: 86daea5b-1b6b-432a-bb67-ea97795f80fe
      redirect:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with the other entity

          metadata. See guide for (unenforced) schema conventions.

          '
        additionalProperties: {}
      edit_extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with specific entity edits

          (eg, creation/update/delete).

          '
        additionalProperties: {}
      size:
        type: integer
        example: 1048576
        format: int64
        description: Size of file in bytes. Non-zero.
      md5:
        type: string
        pattern: '[a-f0-9]{32}'
        minLength: 32
        maxLength: 32
        description: MD5 hash of data, in hex encoding
        example: 1b39813549077b2347c0f370c3864b40
      sha1:
        type: string
        pattern: '[a-f0-9]{40}'
        minLength: 40
        maxLength: 40
        description: SHA-1 hash of data, in hex encoding
        example: e9dd75237c94b209dc3ccd52722de6931a310ba3
      sha256:
        type: string
        pattern: '[a-f0-9]{64}'
        minLength: 64
        maxLength: 64
        description: SHA-256 hash of data, in hex encoding
        example: cb1c378f464d5935ddaa8de28446d82638396c61f042295d7fb85e3cccc9e452
      urls:
        type: array
        items:
          $ref: '#/definitions/file_url'
      mimetype:
        type: string
        example: application/pdf
      content_scope:
        type: string
        example: issue
      release_ids:
        type: array
        items:
          type: string
          pattern: '[a-zA-Z2-7]{26}'
          minLength: 26
          maxLength: 26
          description: base32-encoded unique identifier
          example: q3nouwy3nnbsvo3h5klxsx4a7y
        description: 'Set of identifier of release entities this file represents a full

          manifestation of. Usually a single release, but some files contain

          content of multiple full releases (eg, an issue of a journal).

          '
      releases:
        description: 'Full release entities, included in GET responses when `releases`

          included in `expand` parameter. Ignored if included in PUT or POST

          requests.

          '
        type: array
        items:
          $ref: '#/definitions/release_entity'
  file_url:
    type: object
    required:
    - url
    - rel
    properties:
      url:
        type: string
        format: url
        example: https://example.edu/~frau/prcding.pdf
        description: 'URL/URI pointing directly to a machine retrievable copy of this exact

          file.

          '
      rel:
        type: string
        example: web
        description: 'Indicates type of host this URL points to. Eg, "publisher",

          "repository", "webarchive". See guide for list of acceptable values.

          '
  creator_entity:
    type: object
    properties:
      state:
        type: string
        enum:
        - wip
        - active
        - redirect
        - deleted
        example: active
      ident:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      revision:
        type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: UUID (lower-case, dash-separated, hex-encoded 128-bit)
        example: 86daea5b-1b6b-432a-bb67-ea97795f80fe
      redirect:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with the other entity

          metadata. See guide for (unenforced) schema conventions.

          '
        additionalProperties: {}
      edit_extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with specific entity edits

          (eg, creation/update/delete).

          '
        additionalProperties: {}
      display_name:
        type: string
        example: Grace Hopper
        description: 'Name as should be displayed in web interface or in author lists (not

          index/sorted). Required for valid entities.

          '
      given_name:
        type: string
        description: 'In English commonly the first name, but ordering is context and

          culture specific.

          '
      surname:
        type: string
        description: 'In English commonly the last, or family name, but ordering is context

          and culture specific.

          '
      orcid:
        type: string
        pattern: \d{4}-\d{4}-\d{4}-\d{3}[\dX]
        minLength: 19
        maxLength: 19
        description: ORCiD (https://orcid.org) identifier
        example: 0000-0002-1825-0097
      wikidata_qid:
        type: string
        example: Q42812
        description: Wikidata entity QID
  entity_edit:
    type: object
    required:
    - edit_id
    - ident
    - editgroup_id
    properties:
      edit_id:
        type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: 'Unique UUID for this specific edit object.

          '
        example: 86daea5b-1b6b-432a-bb67-ea97795f80fe
      ident:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: 'Fatcat identifier of the entity this edit is mutating.

          '
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      revision:
        type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: 'Entity revision that this edit will set the entity to. May be

          `null` in the case of deletions.

          '
        example: 86daea5b-1b6b-432a-bb67-ea97795f80fe
      prev_revision:
        type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: 'Revision of entity just before this edit. May be used in the future

          to prevent edit race conditions.

          '
        example: 86daea5b-1b6b-432a-bb67-ea97795f80fe
      redirect_ident:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: 'When an edit is to merge entities (redirect one to another), this

          is the entity fatcat identifier for the target entity.

          '
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      editgroup_id:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: 'Editgroup identifier that this edit is part of.

          '
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      extra:
        type: object
        additionalProperties: {}
  error_response:
    type: object
    required:
    - success
    - error
    - message
    properties:
      success:
        type: boolean
        example: false
      error:
        type: string
        example: unexpected-thing
      message:
        type: string
        example: A really confusing, totally unexpected thing happened
  fileset_entity:
    type: object
    properties:
      state:
        type: string
        enum:
        - wip
        - active
        - redirect
        - deleted
        example: active
      ident:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      revision:
        type: string
        pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
        minLength: 36
        maxLength: 36
        description: UUID (lower-case, dash-separated, hex-encoded 128-bit)
        example: 86daea5b-1b6b-432a-bb67-ea97795f80fe
      redirect:
        type: string
        pattern: '[a-zA-Z2-7]{26}'
        minLength: 26
        maxLength: 26
        description: base32-encoded unique identifier
        example: q3nouwy3nnbsvo3h5klxsx4a7y
      extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with the other entity

          metadata. See guide for (unenforced) schema conventions.

          '
        additionalProperties: {}
      edit_extra:
        type: object
        description: 'Free-form JSON metadata that will be stored with specific entity edits

          (eg, creation/update/delete).

          '
        additionalProperties: {}
      content_scope:
        type: string
        example: issue
      manifest:
        type: array
        items:
          $ref: '#/definitions/fileset_file'
      urls:
        type: array
        items:
          $ref: '#/definitions/fileset_url'
      release_ids:
        type: array
        items:
          type: string
          pattern: '[a-zA-Z2-7]{26}'
          minLength: 26


# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fatcat/refs/heads/main/openapi/fatcat-works-api-openapi.yml