Member of STM and COPE · Supporting research and publication integrity
Version 1.5
Last updated: February 2026
| Date | Changelog Content |
|---|---|
| 25.02.2026 | Added excludeIdenticalPaper as optional parameter to the scan endpoint. Default behaviour is unchanged. |
| 21.12.2025 | Added highestScore to the scan result. |
| 03.07.2025 | Provide a callback URL to get notified when a scan finishes. You can now retrieve an overview of scans for a specific time span. |
| 08.04.2025 | AI-Generated images are now detected. We added a new field aiImageCount to the JSON result. You can now also select a minimum confidence score. |
| 03.12.2024 | Added the new endpoint scan for scanning documents and images. Deprecated scanPdf and scanImages. |
| 27.04.2024 | Vertical image splicing in gel band images is now detected. We added a new field alterationCount to the JSON result indicating the number of detected image alterations, such as splicing. |
| 11.11.2023 | A PDF report containing the findings of a conducted scan can now be downloaded. |
| 03.10.2023 | API launched. |
Learn how Imagetwin can be used programmatically via a REST API.
Are you already using Imagetwin and want to access the API? Contact us at [email protected] to activate the API.
Access to the API requires authentication through a distinctive API key. At app.imagetwin.ai/account, you can generate a new API key or delete a previously generated key. Per user, one API key can be active. Generating a new key invalidates the previous one.
POST
multipart/form-data
https://api.imagetwin.ai/v1/scan
| Property Name | Type | Description |
|---|---|---|
| Authorization Bearer | header | API key used as a bearer token for authentication |
| file | file | PDF or image files to scan. In case of scanning images, multiple files can be provided. |
| minScore | float | (Optional) A minimum confidence score from 0.0 to 0.9. Detected integrity issues below this score will be ignored in the PDF report and the JSON result, and will be hidden by default in the web application. The default value is 0.33, which includes fair- and high-confidence integrity issues. |
| callbackUrl | text | (Optional) A URL to which we will send a POST request once the scan is finished. |
| excludeIdenticalPaper | text | (Optional) If the scanned paper is in our database, the software might detect irrelevant duplicates. If set to true, we exclude duplicates from identical papers in the PDF report and the API response. Allowed values: true, false; Default: false |
| Property Name | Type | Description |
|---|---|---|
| scanId | text | A unique ID associated with the performed scan |
| message | text | A message indicating that the scan was started successfully |
curl -X POST https://api.imagetwin.ai/v1/scan -H 'Authorization: Bearer API_Key' -F file=@'path/to/file.pdf'
Scanning images
curl -X POST https://api.imagetwin.ai/v1/scan -H 'Authorization: Bearer API_Key' -F file=@'path/to/file1.png' -F file=@'path/to/file2.jpg' A successful response is indicated by a 200 OK HTTP status code.
{
'scanId': 'd904c90756d6653f27ce9fc27847a5bf61e35b4cb288d0a301e879cbef3e4579',
'message': 'Scan started successfully.'
} If you provided the optional callback URL, we will send a POST request to this URL to inform you that your scan has finished. You can use the callback as an alternative to constantly polling the result endpoint.
The request you receive will be in JSON format. The status will be either finished or failed. Here is an example:
{
'scanId': 'd904c90756d6653f27ce9fc27847a5bf61e35b4cb288d0a301e879cbef3e4579',
'status': 'finished'
} curl -X POST https://api.imagetwin.ai/v1/sandbox/scan -H 'Authorization: Bearer API_Key' -F file=@'path/to/file.pdf' GET
multipart/form-data
https://api.imagetwin.ai/v1/result/scanId | Property Name | Type | Description |
|---|---|---|
| Authorization Bearer | header | API key used as a bearer token for authentication |
| Property Name | Type | Description |
|---|---|---|
| scanId | text | A unique ID associated with the performed scan. |
| alterationCount | number | Number of alterations (e.g., image splicing) detected in the provided images. |
| localDuplicateCount | number | Number of duplicates detected within and between the provided images. |
| externDuplicateCount | number | Number of duplicates detected between the provided images and our reference database. |
| aiImageCount | number | Number of potential AI-generated images detected in the provided images. |
| pdfReport | text | URL to a PDF Report containing the detected duplicates. Accessible for 90 days and contains up to 1000 findings. |
| resultUrl | text | URL to a web interface displaying all detections, active for 90 days. |
| minScore | float | The minimum confidence score supplied when submitting the scan. Will be 0.33 if no minScore was defined. |
| highestScore | float | The highest confidence value of all findings. 0 if nothing was found. |
curl -X GET https://api.imagetwin.ai/v1/result/scanId -H 'Authorization: Bearer API_Key' If the scan is still in progress, a 202 Accepted HTTP status code is returned.
A successful response is indicated by a 200 OK HTTP status code.
{
'scanId': 'd904c90756d6653f27ce9fc27847a5bf61e35b4cb288d0a301e879cbef3e4579',
'alterationCount': 0,
'localDuplicateCount': 2,
'externDuplicateCount': 0,
'aiImageCount': 0,
'pdfReport': 'https://app.imagetwin.ai/pdfreport/e590ff7414eef232b52c990ab15773e58c5ad9965340b8f3461531d047184a60.pdf',
'resultUrl': 'https://app.imagetwin.ai/result/e590ff7414eef232b52c990ab15773e58c5ad9965340b8f3461531d047184a60',
'minScore': 0.33,
'highestScore': 0.99
} | Scan type | HTTP status code | scanId |
|---|---|---|
| Successful scan | 200 | d904c90756d6653f27ce9fc27847a5bf61e35b4cb288d0a301e879cbef3e4579 |
| Scan still in progress | 202 | bbe5489089af902791419a29f3fac98606c43359afc623f852c5e00e10afd0d9 |
| Scan failed | 500 | 21e16e8c71c015715dae4a64b6c12fc5f267b776ebafa27f175e27b48da788fd |
GET
https://api.imagetwin.ai/v1/scan-overview
| Property Name | Type | Description |
|---|---|---|
| Authorization Bearer | header | API key used as a bearer token for authentication |
| startDate | text | Start date in YYYY-MM-DD format. Scans performed on this date are included. |
| endDate | text | End date in YYYY-MM-DD format. Scans performed on this date are included. |
| exportFormat | text | (Optional) Format of the response; can be either json (default) or csv. |
curl -X GET https://api.imagetwin.ai/v1/scan-overview?startDate=2023-01-01&endDate=2023-06-30&exportFormat=json -H 'Authorization: Bearer API_Key' {
"startDate": "2025-04-10",
"endDate": "2025-04-12",
"scans": [
{
"scanId": "1625b21d-0492-44b5-83bb-76161ab116eb",
"scanDate": "2025-04-10T13:54:05",
"user": "[email protected]",
"freeOfCharge": false,
"apiScan": false
},
{
"scanId": "b8218b13-ad59-4f59-8067-d5406732440f",
"scanDate": "2025-04-10T15:07:23",
"user": "[email protected]",
"freeOfCharge": true,
"apiScan": false
}
]
} | HTTP status code | Type | Description |
|---|---|---|
| 200 | OK | Response for successful HTTP requests. |
| 202 | Accepted | The request has been accepted for processing, but has not been completed. |
| 400 | Bad Request | The request body payload might be invalid, or the request limitations are exceeded. |
| 401 | Unauthorized | Unauthorized to use the requested endpoint. Make sure that you are using a valid API key. |
| 404 | Not Found | No result found for the provided scanId. |
| 429 | Too Many Requests | The scan endpoint allows 20 requests per minute. The result endpoint allows 60 requests per minute. |
| 500 | Internal Server Error | A server error occurred during processing the provided data. |
| 503 | Internal Server Error | The service is currently unavailable or under maintenance. |
| 504 | Internal Server Error | The service is currently unavailable or under maintenance. |
The following endpoints are deprecated and will not be supported in the future.
One PDF file under 30 MB with fewer than 50 pages
POST
multipart/form-data
https://api.imagetwin.ai/v1/scanPdf | Property Name | Type | Description |
|---|---|---|
| Authorization Bearer | header | API key used as a bearer token for authentication |
| pdfFile | file | PDF file to scan |
| Property Name | Type | Description |
|---|---|---|
| scanId | text | A unique ID associated with the performed scan |
| message | text | A message indicating that the scan was started successfully |
POST
https://api.imagetwin.ai/v1/scanImages
| Property Name | Type | Description |
|---|---|---|
| Authorization Bearer | header | API key used as a bearer token for authentication |
| imageFile | file | Image file to scan. Multiple images can be added to a single request. |
| Property Name | Type | Description |
|---|---|---|
| scanId | text | A unique ID associated with the performed scan |
| message | text | A message indicating that the scan was started successfully |