anchor.diff:    # A requested location
     requestLocation(ip: String!): RequestLocation
   
  +  # Search for matching artworks by image
  +  reverseImageSearch(
  +    # Image file
  +    image: Upload!
  +  ): ReverseImageSearchResults
  +
     # A Sale
     sale(
       # The slug or ID of the Sale
  
positive.code:   # A requested location
    requestLocation(ip: String!): RequestLocation
  
    # A Sale
    sale(
      # The slug or ID of the Sale
  
negative.code:   srcSet: String!
    url: String!
    width: Int
  }
  
  type ReverseImageSearchResult {
    # The matching collection image’s file path
    filepath: String!
  
    # How much of the query image’s fingerprint overlaps the collection image’s fingerprint, as a percentage
    matchPercent: Float!
  
    # Location of the matching area in the first image
    queryMatchRect: ReverseImageSearchResultMatchRect!
  
    # How much of the query image overlaps the collection image, as a percentage
    queryOverlapPercent: Float!
  
    # How closely the query image matches the collection image
    score: Float!
  
    # Location of the matching area in the second image
    targetMatchRect: ReverseImageSearchResultMatchRect!
  
    # How much of the collection image overlaps the query image, as a percentage
    targetOverlapPercent: Float!
  }
  
  type ReverseImageSearchResultMatchRect {
    bottom: Float!
    left: Float!
    right: Float!
    top: Float!
  }
  
  type ReverseImageSearchResults {
    results: [ReverseImageSearchResult]
  }
  
  enum Role {
  