Screenshotbot has a relatively simple REST API. In most cases, you shouldn’t need to use this API directly, and we suggest you instead use the command line interface instead

Uploading a test run to screenshotbot, is a two/three step process. First you find-or-create each image using the md5sum of the image. For each image, if its the first time screenshotbot is seeing the image, we might ask you to upload the actual png (If you’ve uploaded it previously, it will tell you not to do that). Once you have all your images uploaded, you create a run. Screenshotbot will process your run and decide if it needs to do anything with it such as sending out GitHub issues.

General Overview

All our APIs are accessed from All requests will accept two arguments to indicate your API user: api-key, and api-secret-key. (You can get these values from you dashboard).

All resource objects will have "type" attribute that tells you what type it is. It will always be one of the documented types.

API responses will be returned in a JSON object that looks like this

      "success": <true|false>
      "response": <actual-response>
      "error": <error message if success is false>

Find or create an image record

Send a POST request to /api/image.


  • hash: An md5sum of the image file
  • content-type: Content type of the image. Currently only image/png is supported.


      "id": <unique-id>,
      "uploadUrl": <a url to upload to>

If the uploadUrl is present, it means you have to upload the image via a PUT request to the given URL. This will usually only be present the first time you upload this specific image (determined by the md5sum). However we might ask you to reupload images occasionally, so you should not rely on this assumption.

Create a run

Send a POST request to /api/run.


  • channel: A channel name chosen by the user. If the channel doesn’t exist we’ll create it.
  • github-repo: A link to GitHub repo for the project. Please contact us if you host your repository elsewhere. Can be omitted for non production runs.
  • commit: A SHA1 hash denoting the current Git commit. Can be omitted for non trunk runs.
  • is-clean: Boolean, true if the current git repository is clean. Can be omitted for non trunk runs`.
  • branch: The branch name. For example master, or v2.0.1. Can be omitted for non trunk runs.
  • is-trunk: If this is a primary branch that’s being tracked. For instance you might track master branch or a release branch. But you wouldn’t track a feature branch created by a developer.
  • screenshot-records: A JSON-encoded list of screenshot objects.

Each screenshot object has the following structure:

       "name": <name of the screenshot>,
       "imageId": <id of the image object associated with this screenshot>


      "id": <id of the run>

Ready to get started?

Sign up or contact us.