Infringement.Report's reverse image search API provides industry leading data that provides more comprehensive results than other search engines.

Infringement.Report is an API-first application - the API is always developed first, then the UI is built on top of that functionality. This means that every UI action is done via the API, and you are able to replicate everything to build your own frontend to our service.

Infringement.Report is Open Source

In leiu of an official SDK, we have released our app's source code. We're hoping that this will allow you to see what's going on under the hood, and quickly work out how we use the API to achieve our app's functionality. We're also happy for you to take our source and create a clone of Infringement.Report - fork the repo on Github. The source code is licensed under the MIT license (use it however you like, but we accept no liability and provide no warranties).

Prototype quickly with Zapier

To enable quick integrations and prototyping, we are actively developing a Zapier app which provides you access to most of the functionality of our API via an easy WYSIWYG interface. Try the Zapier app

Lifecycle policies

While it is inevitable that our services and data structures will change, we maintain a strict "no breaking changes" policy. Any breaking changes that we need to make are announced 12 months ahead of time: We release replacement functionality/data under a new API version, deprecate the old functionality, and sunset it after 12 months (or when usage decreases to zero). This policy gives you the confidence that changes to the API will not randomly break your integrations without notice. Read our full versioning and lifecycle policy

Unless otherwise stated, you must authenticate all requests that you make to the API. This is done by passing your API key in the "X-API-Key" HTTP header. For instance:

POST /3.0/search HTTP/1.1
Host: api.infringement.report
X-Api-Key: 123456789abcdef

Try it out and see API docs

To get data about websites who are using your images, you must create a search. A search is a request where you send one or more images to the API, so that our system can find the websites using them. Depending on the amount of images you send, their popularity across the internet (images used on more websites take longer to search), and the current load on the system, it could take several seconds for us to complete a search.

Because of the way that these search engines work, usages can be found even if the image has been renamed or edited, making this data critical for copyright enforcement firms. For monitored lists of images, we verify that the found image is online and score it for similarity against the source image (to help detect false positives), however this must be manually activated for one-off searches. Please be aware that monitored images tend to get more comprehensive results in the long term than a single one-off search.


All searches create an image list, even if only one image is submitted. We will provide a list_id within the search response, and you can optionally set a label to help you identify the images inside the list.

This endpoint accepts the following parameters:


Waiting for searches to complete

When you start a search, the API will immediately respond to your request with a list_id and the search will be completed in the background. You can then poll the list resource (/list or /list/{list_id}) until it returns search_in_progress=0. Alternatively you can begin polling the /list/{list_id}/query endpoint until it responds with search data. Note: /query will begin to return data as soon as it is available, even if some image searches have not completed yet.

Try it out and see API docs

After a search has completed, the result data will be saved and becomes queryable through the /list/{list_id}/query endpoint. There are several manipulations that you can do to the data.

Sorting and Pagination

You can specify the sorting of results by passing the "sort" parameter with the name of the metric you want to sort by, and "asc" or "desc". For instance:

By default, we will return 50 results per request, so you will need to use pagination to get all results for a large list of images. To do this you should pass the parameters "rows" (number of rows per page) and "start" (the start row of this page).

The maximum "rows" value is 1000. The query endpoint is realistically designed to be used for real time analysis and may not be suitable for getting all results for a given search. If you wish to export the complete result set in one request, you should use the /export endpoint.

Generating an export of all results

Rather than page through several requests to gather all data in a result set, it is easier to generate an export of all results. This export can be in CSV, JSON, or JSON line format.

See the full docs on /export


Filtering data to match specific requirements is easy.

Standard Filter Syntax

Filters are applied to your results by specifying a metric name, an operator, and a value.

Filters must be specified in JSON object using '[metric]-[operator]' as the key. An example of a filter is: {"host-cont":"domain.com"} (host contains "domain.com")

title string eql, cont, starts, ends
language string eql, cont, starts, ends
description string eql, cont, starts, ends
url string eql, cont, starts, ends
host string eql, cont, starts, ends
protocol string eql, cont, starts, ends
image_url string eql, cont, starts, ends
image_width number gt, lt, eql
image_height number gt, lt, eql
image_width_on_page number gt lt, eql
image_height_on_page number gt, lt, eql
image_id number gt, lt, eql
found_timestamp date before, after, between

Operator Meanings

Operator Means Use on Metric Type
eql Equals string, number
cont Contains string
starts Starts with string
ends Ends with string
gt Greater Than number
lt Equals number
before Before date date
after After date date
between Between two dates date

Filter Example

      "search_timestamp-between":"2017-10-01T01:01:01Z TO 2017-11-01T01:01:01Z"

Advanced Queries

Previously, we allowed Lucene query syntax for advanced queries. This has been deprecated and will be sunset on 1 July 2019. We will soon release an alternative advanced filtering syntax.


Lists are collections of images and image search results. A list can contain one or more images, and is broadly used for querying results and firing notifications.

Lists are controlled via a standard REST endpoint which accepts GET (read list properties or retrieve a list of lists), POST (create new list), PATCH (update existing list), and DELETE (delete list and all data). For more information about lists or their properties, see the API documentation.


Notifications of new domains found in lists can be sent up to daily - we can send either an email or a POST request to a public URL, containing data in a variety of formats.

Notifications can be sent up to once per day, and can be run on an entire list, or only a subset of results (via filters).

Notifications are controlled via a standard REST endpoint which accepts GET (read notification properties or retrieve a list of notifications), POST (create new notification), PATCH (update existing notification), and DELETE (delete a notification). For more information about lists or their properties, see the API documentation.

Ready to try Infringement.Report?

Request Info   Get Started