       data = JSON.parse(body)
       return callback(data)
 
+  customFetchAndUpload = (msg, title, url, link) ->
+    requestHeaders = {
+      encoding: "utf8",
+      Authorization: "Bearer #{grafana_api_key}",
+      Accept: "application/json"
+    }
+
+    req_opts = {
+      method: "POST",
+      url: "#{grafana_images_host}/grafana-images",
+      headers: requestHeaders,
+      json: {
+        imageUrl: url
+      }
+    }
+
+    # post to grafana-images
+    request req_opts, (err, res, json) ->
+      robot.logger.debug "grafana-images POST: #{req_opts.url}, content-type[#{res.headers['content-type']}]"
+
+      if res.statusCode == 200
+        sendRobotResponse msg, title, json.pubImg, link
+      else
+        robot.logger.debug res
+        robot.logger.error "Upload Error Code: #{res.statusCode}"
+        msg.send "#{title} - [Access Error] - #{link}"
+
   # Pick a random filename
-  uploadPath = () ->
+  s3UploadPath = () ->
     prefix = s3_prefix || 'grafana'
     "#{prefix}/#{crypto.randomBytes(20).toString('hex')}.png"
 
   # Fetch an image from provided URL, upload it to S3, returning the resulting URL
-  fetchAndUpload = (msg, title, url, link) ->
+  s3FetchAndUpload = (msg, title, url, link) ->
     if grafana_api_key
         requestHeaders =
           encoding: null,

      response.trim()

      msg.send response

  # Handle generic errors
  sendError = (message, msg) ->

      'encoding'       : null
    }

    filename = s3UploadPath()

    req = client.put(filename, headers)
    req.on 'response', (res) ->
