The Copyleaks Image Plagiarism Detection API detects unauthorized copies of your images across the web. Submit an image and receive a categorized list of matches - all in a single synchronous API call. This guide walks you through submitting an image and interpreting the results.

Get started

  1. Before you begin

    Before you start, ensure you have the following:
  2. Installation

    Choose your preferred method for making API calls.
    # macOS
    brew install curl
    
    # Ubuntu/Debian
    sudo apt-get install curl
    
    # Windows - download from https://curl.se
    
    HTTP needs no installation - call the API with any standard HTTP client, or import our Postman collection for a quicker start.
  3. Login

    To perform a scan, we first need to generate an access token. For that, we will use the login endpoint. The API key can be found on the Copyleaks API Dashboard. Upon successful authentication, you will receive a token that must be attached to subsequent API calls via the Authorization: Bearer <TOKEN> header. This token remains valid for 48 hours.
    POST https://id.copyleaks.com/v3/account/login/api
    
    Headers
    Content-Type: application/json
    
    Body
    {
        "email": "[email protected]",
        "key": "00000000-0000-0000-0000-000000000000"
    }
    
    Response
    {
        "access_token": "<ACCESS_TOKEN>",
        ".issued": "2025-07-31T10:19:40.0690015Z",
        ".expires": "2025-08-02T10:19:40.0690016Z"
    }
    
    Save this token. It is valid for 48 hours and can be reused for subsequent API calls.
  4. Submit image for plagiarism check

    Use the Image Plagiarism Detection Endpoint to submit an image using multipart/form-data.
    For testing, set sandbox: true. Sandbox mode is free and returns mock results without consuming credits.

    Image Requirements

    • File size: Less than 20MB
    • Max resolution: 75 megapixels (width × height ≤ 75,000,000)
    • Formats: JPG, JPEG, PNG, GIF, BMP, WebP, RAW, ICO
    POST https://api.copyleaks.com/v1/image-plagiarism-detector/my-scan-1/check
    
    Headers
    Authorization: Bearer <YOUR_AUTH_TOKEN>
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
    
    Body
    ------WebKitFormBoundary
    Content-Disposition: form-data; name="image"; filename="my-photo.jpg"
    Content-Type: image/jpeg
    
    [binary image data]
    ------WebKitFormBoundary
    Content-Disposition: form-data; name="filename"
    
    my-photo.jpg
    ------WebKitFormBoundary
    Content-Disposition: form-data; name="sandbox"
    
    false
    ------WebKitFormBoundary--
    
  5. Interpreting the response

    A successful response contains scan metadata and a matches object with:
    • matches.internet - All matching images found on the web. Each entry has a url, a matchType, and an optional webPages list:
      • 0 - Full match: Exact or near-exact copy of the submitted image.
      • 1 - Partial match: Cropped, resized, recolored, or otherwise modified version.
      • webPages - The web pages where the image was found (each with a url). Omitted when the image was not located on any page. The same image URL never appears more than once.
    • matches.score - A summary with totalMatches, fullMatches, and partialMatches counts.
    • scannedImage - Metadata about the submitted image: scan ID, credits charged, dimensions, filename, and creation time.
    {
      "developerPayload": null,
      "scannedImage": {
        "scanId": "my-scan-1",
        "expectedCredits": 1,
        "actualCredits": 1,
        "creationTime": "2026-05-24T10:00:00Z",
        "width": 1920,
        "height": 1080,
        "filename": "my-photo.jpg"
      },
      "matches": {
        "internet": [
          {
            "url": "https://example.com/images/photo.jpg",
            "matchType": 0,
            "webPages": [
              { "url": "https://example.com/blog/my-post" },
              { "url": "https://example.org/news/article" }
            ]
          },
          {
            "url": "https://example.com/thumbs/photo-thumb.jpg",
            "matchType": 1,
            "webPages": [
              { "url": "https://example.org/gallery" }
            ]
          },
          {
            "url": "https://example.org/gallery/photo-sm.jpg",
            "matchType": 1
          }
        ],
        "score": {
          "totalMatches": 3,
          "fullMatches": 1,
          "partialMatches": 2
        }
      }
    }
    
    An empty matches.internet array with all-zero scores means no matching content was found on the web.
  6. Summary

    You have successfully checked your image for plagiarism. You can now use the match URLs in your application to alert users, file takedown requests, or record provenance data.

Next steps

API Reference

Full API reference for the Image Plagiarism Detection endpoint.

Image Plagiarism Response

Detailed breakdown of every field in the Image Plagiarism Detection response.