anchor.diff:  }
   
   union OpeningHoursUnion = OpeningHoursArray | OpeningHoursText
  -
  -type OrderedSet {
  -  # A globally unique ID.
  -  id: ID!
  -
  -  # A type-specific ID.
  -  internalID: ID!
  -  cached: Int
  -  description: String
  -  key: String
  -  itemType: String
  -  items: [OrderedSetItem]
  -  name: String
  -}
  -
  -union OrderedSetItem = Artist | Artwork | FeaturedLink | Gene
   
   union OrderParty = Partner | User
   
  
positive.code:   email: String
  }
  
  type Metaphysics {
    queryTracing: Boolean!
    heapDumps: Boolean!
    stitching: Boolean!
    stitchingConvection: Boolean!
    stitchingExchange: Boolean!
    stitchingGravity: Boolean!
    stitchingKaws: Boolean!
    environment: String!
  }
  
  type Mutation {
    # Create a bidder
    createBidder(input: CreateBidderInput!): CreateBidderPayload
  
negative.code:     # A point which will be used to locate the nearest local discovery city within a threshold
      near: Near
    ): City
  
    # A Fair
    fair(
      # The slug or ID of the Fair
      id: String!
    ): Fair
    gene(
      # The slug or ID of the Gene
      id: String!
    ): Gene
  
    # Home screen content
    homePage: HomePage
  
    # A Search for Artists
    matchArtist(
      # Your search term
      term: String!
  
      # Maximum number of items to retrieve. Default: 5.
      size: Int
  
      # Page to retrieve. Default: 1.
      page: Int
  
      # Exclude these MongoDB ids from results
      excludeIDs: [String]
    ): [Artist]
    me: Me
  
    # Fetches an object given its globally unique ID.
    node(
      # The globally unique ID of the node.
      id: ID!
    ): Node
  
    # A Sale
    sale(
      # The slug or ID of the Sale
      id: String!
    ): Sale
  
    # A Sale Artwork
    saleArtwork(
      # The slug or ID of the SaleArtwork
      id: String!
    ): SaleArtwork
  
    # Sale Artworks search results
    saleArtworksConnection(
      aggregations: [SaleArtworkAggregation]
      artistIDs: [String]
      includeArtworksByFollowedArtists: Boolean
      liveSale: Boolean
      isAuction: Boolean
      geneIDs: [String]
      estimateRange: String
      page: Int
      saleID: ID
      size: Int
      sort: String
      after: String
      first: Int
      before: String
      last: Int
    ): SaleArtworksConnection
  
    # A list of Sales
    sales(
      # Limit by auction.
      isAuction: Boolean = true
  
      #
      #         Only return sales matching specified ids.
      #         Accepts list of ids.
      #
      ids: [String]
  
      # Limit by live status.
      live: Boolean = true
  
      # Limit by published status.
      published: Boolean = true
      size: Int
      sort: SaleSorts
    ): [Sale]
  
    # Global search
    searchConnection(
      # Search query to perform. Required.
      query: String!
  
      # Entities to include in search. Default: [ARTIST, ARTWORK].
      entities: [SearchEntity]
  
      # Mode of search to execute. Default: SITE.
      mode: SearchMode
      aggregations: [SearchAggregation]
  
      # If present, will be used for pagination instead of cursors.
      page: Int
      after: String
      first: Int
      before: String
      last: Int
    ): SearchableConnection
  
    # A Show
    show(
      # The slug or ID of the Show
      id: String!
    ): Show
  
    # Find list of competing orders
    commerceCompetingOrders(
      # Returns the elements in the list that come after the specified cursor.
      after: String
  
      # Returns the elements in the list that come before the specified cursor.
      before: String
  
      # Returns the first _n_ elements from the list.
      first: Int
  
      # Returns the last _n_ elements from the list.
      last: Int
      orderId: ID!
    ): CommerceOrderConnectionWithTotalCount
    commerceLineItems(
      # Returns the elements in the list that come after the specified cursor.
      after: String
      artworkId: String
  
      # Returns the elements in the list that come before the specified cursor.
      before: String
      editionSetId: String
  
      # Returns the first _n_ elements from the list.
      first: Int
  
      # Returns the last _n_ elements from the list.
      last: Int
      orderStates: [CommerceOrderStateEnum!]
    ): CommerceLineItemConnection
  
    # Find an order by ID
    commerceOrder(code: String, id: ID): CommerceOrder
  
    # Find list of orders
    commerceOrders(
      # Returns the elements in the list that come after the specified cursor.
      after: String
  
      # Returns the elements in the list that come before the specified cursor.
      before: String
      buyerId: String
      buyerType: String
  
      # Returns the first _n_ elements from the list.
      first: Int
  
      # Returns the last _n_ elements from the list.
      last: Int
      mode: CommerceOrderModeEnum
      sellerId: String
      sellerType: String
      sort: CommerceOrderConnectionSortEnum
      state: CommerceOrderStateEnum
    ): CommerceOrderConnectionWithTotalCount
  
    # Find PartnerStats
    analyticsPartnerStats(partnerId: String!): AnalyticsPartnerStats
    marketingCollections(
      category: String
      randomizationSeed: String
      size: Int
      isFeaturedArtistContent: Boolean
      showOnEditorial: Boolean
      artistID: String
    ): [MarketingCollection!]!
    marketingCategories: [MarketingCollectionCategory!]!
    marketingCollection(slug: String!): MarketingCollection
    marketingHubCollections: [MarketingCollection!]!
  }
  
  # Autogenerated input type of RecordArtworkView
  input RecordArtworkViewInput {
    artwork_id: String!
  
    # A unique identifier for the client performing the mutation.
    clientMutationId: String
  }
  
  # Autogenerated return type of RecordArtworkView
  type RecordArtworkViewPayload {
    # Id of viewed artwork
    artworkId: String!
  
    # Id of viewed artwork
    artwork_id: String! @deprecated(reason: "Use artworkId")
  
    # A unique identifier for the client performing the mutation.
    clientMutationId: String
  }
  
  enum RelatedArtistsKind {
    MAIN
    CONTEMPORARY
  }
  
  type RelatedArtworkGrid implements ArtworkContextGrid {
    title: String
    ctaTitle: String
    ctaHref: String
    artworksConnection(after: String, first: Int, before: String, last: Int): ArtworkConnection
  }
  
  input RequestCredentialsForAssetUploadInput {
    # The gemini template you want to request
    name: String!
  
    # The desired access control
    acl: String!
    clientMutationId: String
  }
  
  type RequestCredentialsForAssetUploadPayload {
    asset: Credentials
    clientMutationId: String
  }
  
  type ResizedImageUrl {
    factor: Float
    width: Int
    height: Int
    url: String
  }
  
  # The conditions for uploading assets to media.artsy.net
  type S3PolicyConditionsType {
    # The bucket to upload to.
    bucket: String!
  
    # The assigned access control
    acl: String!
  
    # A key which is prefixed on your file
    geminiKey: String!
  
    # The returned status code, currently always 201
    successActionStatus: String!
  }
  
  # An policy for uploading assets to media.artsy.net
  type S3PolicyDocumentType {
    # An expiration date string.
    expiration: String!
  
    # The details for the upload
    conditions: S3PolicyConditionsType!
  }
  
  type Sale implements Node {
    # A globally unique ID.
    id: ID!
  
    # A slug ID.
    slug: ID!
  
    # A type-specific ID likely used as a database ID.
    internalID: ID!
    cached: Int
  
    # Returns a connection of artworks for a sale.
    artworksConnection(
      # List of artwork IDs to exclude from the response (irrespective of size)
      exclude: [String]
      after: String
      first: Int
      before: String
      last: Int
    ): ArtworkConnection
    associatedSale: Sale
  
    # A bid increment policy that explains minimum bids in ranges.
    bidIncrements: [BidIncrement]
  
    # Auction's buyer's premium policy.
    buyersPremium: [BuyersPremium]
    coverImage: Image
    currency: String
    description: String
    displayTimelyAt: String
    eligibleSaleArtworksCount: Int
    endAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
    eventStartAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
    eventEndAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
  
    # A formatted description of when the auction starts or ends or if it has ended
    formattedStartDateTime: String
    href: String
    name: String
    initials(length: Int = 3): String
    isAuction: Boolean
    isBenefit: Boolean
    isGalleryAuction: Boolean
    isAuctionPromo: Boolean
    isClosed: Boolean
    isOpen: Boolean
    isLiveOpen: Boolean
    isPreview: Boolean
    isRegistrationClosed: Boolean
    isWithBuyersPremium: Boolean
    liveStartAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
  
    # Returns a live auctions url if the sale is open and start time is after now
    liveURLIfOpen: String
    partner: Partner
    profile: Profile
    promotedSale: Sale
    registrationEndsAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
  
    # A registration for this sale or null
    registrationStatus: Bidder
    requireBidderApproval: Boolean
    saleArtworksConnection(after: String, first: Int, before: String, last: Int): SaleArtworkConnection
    saleType: String
    startAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
    status: String
    saleArtwork(id: String!): SaleArtwork
    symbol: String
  }
  
  type SaleArtwork {
    # A globally unique ID.
    id: ID!
  
    # A slug ID.
    slug: ID!
  
    # A type-specific ID likely used as a database ID.
    internalID: ID!
    cached: Int
    artwork: Artwork
    counts: SaleArtworkCounts
  
    # Currency abbreviation (e.g. "USD")
    currency: String
    currentBid: SaleArtworkCurrentBid
    estimate: String
  
    # Singular estimate field, if specified
    estimateCents: Int
    highEstimate: SaleArtworkHighEstimate
    highestBid: SaleArtworkHighestBid
    increments(
      # Whether or not to start the increments at the user's latest bid
      useMyMaxBid: Boolean
    ): [BidIncrementsFormatted]
    isBidOn: Boolean
  
    # Can bids be placed on the artwork?
    isBiddable: Boolean
    isWithReserve: Boolean
    lotLabel: String
    lowEstimate: SaleArtworkLowEstimate
    minimumNextBid: SaleArtworkMinimumNextBid
    openingBid: SaleArtworkOpeningBid
    position: Float
    reserve: SaleArtworkReserve
    reserveMessage: String
    reserveStatus: String
    saleID: String
    sale: Sale
  
    # Currency symbol (e.g. "$")
    symbol: String
  }
  
  enum SaleArtworkAggregation {
    ARTIST
    FOLLOWED_ARTISTS
    MEDIUM
    TOTAL
  }
  
  # A connection to a list of items.
  type SaleArtworkConnection {
    # Information to aid in pagination.
    pageInfo: PageInfo!
  
    # A list of edges.
    edges: [SaleArtworkEdge]
  }
  
  type SaleArtworkCounts {
    bidderPositions(
      # Returns a `String` when format is specified. e.g.`'0,0.0000''`
      format: String
      label: String
    ): FormattedNumber
  }
  
  type SaleArtworkCurrentBid {
    # A formatted price with various currency formatting options.
    amount(
      decimal: String = "."
  
      # Allows control of symbol position (%v = value, %s = symbol)
      format: String = "%s%v"
      precision: Int = 0
      symbol: String
      thousand: String = ","
    ): String
  
    # An amount of money expressed in cents.
    cents: Float
  
    # A pre-formatted price.
    display: String
  }
  
  # An edge in a connection.
  type SaleArtworkEdge {
    # The item at the end of the edge
    node: SaleArtwork
  
    # A cursor for use in pagination
    cursor: String!
  }
  
  type SaleArtworkHighestBid {
    createdAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
    isCancelled: Boolean
  
    # A formatted price with various currency formatting options.
    amount(
      decimal: String = "."
  
      # Allows control of symbol position (%v = value, %s = symbol)
      format: String = "%s%v"
      precision: Int = 0
      symbol: String
      thousand: String = ","
    ): String
    cents: Int
    display: String
  }
  
  type SaleArtworkHighEstimate {
    # A formatted price with various currency formatting options.
    amount(
      decimal: String = "."
  
      # Allows control of symbol position (%v = value, %s = symbol)
      format: String = "%s%v"
      precision: Int = 0
      symbol: String
      thousand: String = ","
    ): String
  
    # An amount of money expressed in cents.
    cents: Float
  
    # A pre-formatted price.
    display: String
  }
  
  type SaleArtworkLowEstimate {
    # A formatted price with various currency formatting options.
    amount(
      decimal: String = "."
  
      # Allows control of symbol position (%v = value, %s = symbol)
      format: String = "%s%v"
      precision: Int = 0
      symbol: String
      thousand: String = ","
    ): String
  
    # An amount of money expressed in cents.
    cents: Float
  
    # A pre-formatted price.
    display: String
  }
  
  type SaleArtworkMinimumNextBid {
    # A formatted price with various currency formatting options.
    amount(
      decimal: String = "."
  
      # Allows control of symbol position (%v = value, %s = symbol)
      format: String = "%s%v"
      precision: Int = 0
      symbol: String
      thousand: String = ","
    ): String
  
    # An amount of money expressed in cents.
    cents: Float
  
    # A pre-formatted price.
    display: String
  }
  
  type SaleArtworkOpeningBid {
    # A formatted price with various currency formatting options.
    amount(
      decimal: String = "."
  
      # Allows control of symbol position (%v = value, %s = symbol)
      format: String = "%s%v"
      precision: Int = 0
      symbol: String
      thousand: String = ","
    ): String
  
    # An amount of money expressed in cents.
    cents: Float
  
    # A pre-formatted price.
    display: String
  }
  
  type SaleArtworkReserve {
    # A formatted price with various currency formatting options.
    amount(
      decimal: String = "."
  
      # Allows control of symbol position (%v = value, %s = symbol)
      format: String = "%s%v"
      precision: Int = 0
      symbol: String
      thousand: String = ","
    ): String
  
    # An amount of money expressed in cents.
    cents: Float
  
    # A pre-formatted price.
    display: String
  }
  
  # The results for one of the requested aggregations
  type SaleArtworksAggregationResults {
    counts: [AggregationCount]
    slice: SaleArtworkAggregation
  }
  
  # A connection to a list of items.
  type SaleArtworksConnection {
    # Information to aid in pagination.
    pageInfo: PageInfo!
  
    # A list of edges.
    edges: [SaleArtworksEdge]
  
    # Returns aggregation counts for the given filter query.
    aggregations: [SaleArtworksAggregationResults]
    counts: FilterSaleArtworksCounts
  }
  
  # An edge in a connection.
  type SaleArtworksEdge {
    # The item at the end of the edge
    node: SaleArtwork
  
    # A cursor for use in pagination
    cursor: String!
  }
  
  type SaleRegistration {
    bidder: Bidder
    isRegistered: Boolean
    sale: Sale
  }
  
  enum SaleSorts {
    _ID_ASC
    _ID_DESC
    CREATED_AT_ASC
    CREATED_AT_DESC
    ELIGIBLE_SALE_ARTWORKS_COUNT_ASC
    ELIGIBLE_SALE_ARTWORKS_COUNT_DESC
    END_AT_ASC
    END_AT_DESC
    NAME_ASC
    NAME_DESC
    START_AT_ASC
    START_AT_DESC
    TIMELY_AT_NAME_ASC
    TIMELY_AT_NAME_DESC
  }
  
  input SaveArtworkInput {
    artworkID: String
    remove: Boolean
    clientMutationId: String
  }
  
  type SaveArtworkPayload {
    artwork: Artwork
    clientMutationId: String
  }
  
  # A connection to a list of items.
  type SavedArtworksConnection {
    # Information to aid in pagination.
    pageInfo: PageInfo!
  
    # A list of edges.
    edges: [SavedArtworksEdge]
    pageCursors: PageCursors
    totalCount: Int
    description: String!
    default: Boolean!
    name: String!
    private: Boolean!
  }
  
  # An edge in a connection.
  type SavedArtworksEdge {
    # The item at the end of the edge
    node: Artwork
  
    # A cursor for use in pagination
    cursor: String!
  }
  
  # An object that may be searched for
  interface Searchable {
    displayLabel: String
    imageUrl: String
    href: String
  }
  
  # A connection to a list of items.
  type SearchableConnection {
    # Information to aid in pagination.
    pageInfo: PageInfo!
  
    # A list of edges.
    edges: [SearchableEdge]
    pageCursors: PageCursors
    totalCount: Int
  
    # Returns aggregation counts for the given filter query.
    aggregations: [SearchAggregationResults]
  }
  
  # An edge in a connection.
  type SearchableEdge {
    # The item at the end of the edge
    node: Searchable
  
    # A cursor for use in pagination
    cursor: String!
  }
  
  type SearchableItem implements Node & Searchable {
    # A globally unique ID.
    id: ID!
  
    # A slug ID.
    slug: ID!
  
    # A type-specific ID likely used as a database ID.
    internalID: ID!
    description: String
    displayLabel: String
    imageUrl: String
    href: String
    displayType: String
  }
  
  enum SearchAggregation {
    TYPE
  }
  
  # The results for a requested aggregations
  type SearchAggregationResults {
    counts: [AggregationCount]
    slice: SearchAggregation
  }
  
  enum SearchEntity {
    ARTIST
    ARTWORK
    ARTICLE
    CITY
    COLLECTION
    FAIR
    FEATURE
    GALLERY
    GENE
    INSTITUTION
    PROFILE
    SALE
    SHOW
    TAG
  }
  
  enum SearchMode {
    AUTOSUGGEST
    SITE
  }
  
  # A piece that can be sold
  interface Sellable {
    dimensions: dimensions
    editionOf: String
  
    # Whether a piece can be purchased through e-commerce
    isAcquireable: Boolean
  
    # Whether a user can make an offer on the work
    isOfferable: Boolean
    isForSale: Boolean
    isSold: Boolean
    saleMessage: String
  }
  
  input SendConversationMessageMutationInput {
    # The id of the conversation to be updated
    id: String!
  
    # The email address of the message sender
    from: String!
    bodyText: String!
  
    # The message being replied to
    replyToMessageID: String!
    clientMutationId: String
  }
  
  type SendConversationMessageMutationPayload {
    conversation: Conversation
    messageEdge: MessageEdge
    clientMutationId: String
  }
  
  type SendFeedbackMutationFailure {
    mutationError: GravityMutationError
  }
  
  input SendFeedbackMutationInput {
    # Message to be sent.
    message: String!
  
    # Email to associate with message (only used if logged out).
    email: String
  
    # Name to associate with message (only used if logged out).
    name: String
  
    # URL of page where feedback originated.
    url: String
    clientMutationId: String
  }
  
  type SendFeedbackMutationPayload {
    feedbackOrError: SendFeedbackMutationType
    clientMutationId: String
  }
  
  type SendFeedbackMutationSuccess {
    feedback: Feedback
  }
  
  union SendFeedbackMutationType = SendFeedbackMutationSuccess | SendFeedbackMutationFailure
  
  type Show implements Node & EntityWithFilterArtworksConnectionInterface {
    # A globally unique ID.
    id: ID!
  
    # A slug ID.
    slug: ID!
  
    # A type-specific ID likely used as a database ID.
    internalID: ID!
    cached: Int
  
    # The Artists presenting in this show
    artists: [Artist]
  
    # The artworks featured in the show
    artworksConnection(
      # List of artwork IDs to exclude from the response (irrespective of size)
      exclude: [String]
      forSale: Boolean = false
      published: Boolean = true
      after: String
      first: Int
      before: String
      last: Int
    ): ArtworkConnection
  
    # Artists inside the show who do not have artworks present
    artistsWithoutArtworks: [Artist]
  
    # Artists in the show grouped by last name
    artistsGroupedByName: [ArtistGroup]
  
    # The general city, derived from a fair location, a show location or a potential city
    city: String
  
    # The image you should use to represent this show
    coverImage: Image
  
    # An object that represents some of the numbers you might want to highlight
    counts: ShowCounts
  
    # A description of the show
    description: String
    endAt(
      format: String
  
      # A tz database time zone, otherwise falls back to `X-TIMEZONE` header
      timezone: String
    ): String
  
    # Events from the partner that runs this show
    events: [ShowEventType]
  
    # A formatted description of the start to end dates
    exhibitionPeriod: String
  
    # If the show is in a Fair, then that fair
    fair: Fair
  
    # Artworks Elastic Search results
    filterArtworksConnection(
  