Indicates the confidence in which this text was written by AI.
explain object beta
Example: `{}`
patterns object
statistics object
aiCount array\[number]
The number of occurrences of AI-generated text patterns per 1 million texts.
humanCount array\[number]
The number of occurrences of human-written text patterns per 1 million texts.
text object
chars object
starts array\[number]
Start positions of character matches.
lengths array\[number]
Lengths of the character matches.
words object
starts array\[number]
Start positions of word matches.
lengths array\[number]
Lengths of the word matches.
## Example
[Section titled “Example”](#example)
```json
{
"modelVersion": "v5",
"results": [
{
"classification": 2,
"probability": 1,
"matches": [
{
"text": {
"chars": {
"starts": [
0
],
"lengths": [
1509
]
},
"words": {
"starts": [
0
],
"lengths": [
221
]
}
}
}
]
}
],
"summary": {
"human": 0,
"ai": 1
},
"explain": {
"patterns": {
"statistics": {
"aiCount": [
15.9636,
39.5495,
84.7079,
119.8710,
9.9233,
185.6670,
14.4536,
19.1995
],
"humanCount": [
0.8076,
1.5076,
3.8228,
8.5071,
0.3769,
4.2536,
0.3231,
1.1845
]
},
"text": {
"chars": {
"starts": [31, 55, 303, 909, 961, 987, 1129, 1775],
"lengths": [23, 32, 23, 33, 25, 30, 30, 19]
},
"words": {
"starts": [5, 9, 45, 135, 144, 148, 169, 257],
"lengths": [4, 6, 3, 6, 4, 5, 5, 3]
}
}
}
}
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Detect AI-Generated Text ](/guides/ai-detector/ai-text-detection/)Learn how to use the AI Detection API to check if content was written by a human or generated by an AI.
[AI Logic ](/concepts/features/ai-logic/)Understand how AI logic can help you interpret the results of AI text detection.
[Export Method ](/reference/actions/downloads/export/)Learn how to export scan results, including AI detection data.
---
# AI Overview
> Copyleaks’ Gen AI thoroughly analyzes each scan, summarizing content, identifying central themes, pinpointing key insights, and leveraging historical data to provide a richer, context-driven perspective.
Results
Copyleaks’ Gen AI thoroughly analyzes each scan, summarizing content, identifying central themes, pinpointing key insights, and leveraging historical data to provide a richer, context-driven perspective.
overview string
A markdown-formatted string containing the Gen-AI overview of the scan.
modelVersion string
The version of the model used for the Overview generation.
## Example
[Section titled “Example”](#example)
```json
{
"overview": "### Historical Author Data:\n- Four scans analyzed with an average plagiarism similarity of 13.18%\n- 4 instances of AI-generated content detected\n\n### Current Plagiarism Detection:\n- 0% overall plagiarism\n- Main sources: \n - yard.com (3.0%, 74 words)\n - brainly.com (3.2%, 45 words)\n - llcattorney.com (1.3%, 29 words)\n - montrosedemocrats.org (3.0%, 12 words)\n\n### AI Content Detection:\n- 100% AI-written content detected\n\n### Writing Assistant:\n- 100% writing quality with no errors in grammar, sentence structure, word choice, and mechanics.",
"modelVersion": "v1"
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[GenAI Scan Overview ](/concepts/features/gen-ai-scan-overview/)Learn more about the GenAI Scan feature and its capabilities.
[AI Logic ](/concepts/features/ai-logic/)Understand how AI logic can help you interpret the results of AI text detection.
[Export Method ](/reference/actions/downloads/export/)Learn how to export scan results, including the AI Overview.
---
# Crawled Version
> A snapshot of the submitted document. It shows how Copyleaks viewed your submitted file.
Results
A snapshot of the submitted document. It shows how Copyleaks viewed your submitted file.
## Webhook HTTP verb
[Section titled “Webhook HTTP verb”](#webhook-http-verb)
The HTTP verb for this webhook is upon developer request. You need to specify your verb while executing the [Export method](/reference/actions/downloads/export) See `crawledVersion.verb` field.
Tip
We recommend you use the HTTP verb `PUT`. It will allow Copyleaks to override an existing file as needed.
The crawled version is available in textual format, and if the `properties.includeHtml` field (in the `submit` method) is set to `true`, it is also in HTML format.
metadata object
words integer
Number of words in the text.
excluded integer
Number of excluded words in the text.
text object
value string
The crawled version of the submitted text.
exclude object
starts array
The start position of the section to exclude.
lengths array
The length, in characters, of the section to exclude.
reasons array
The reason why this section was excluded.
pages object
startPosition array
A list of pages start positions of the text.
## Example
[Section titled “Example”](#example)
```json
{
"metadata": {
"words": 30,
"excluded": 2
},
"html": {
"value": "Example Domain
This domain is established to be used for illustrative examples in documents.",
"exclude": {
"starts": [
16
],
"lengths": [
14
],
"reasons": [
3
],
"groupIds": [
1
]
}
},
"text": {
"value": "Example Domain This domain is established to be used for illustrative examples in documents.",
"exclude": {
"starts": [
0
],
"lengths": [
14
],
"reasons": [
3
]
},
"pages": {
"startPosition": [
0
]
}
}
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Export Method ](/reference/actions/downloads/export/)Learn how to use the export method to retrieve detailed scan results.
[How to Display Scan Reports ](/concepts/features/how-to-display/)Understand how to present crawled versions and other scan data to your users.
---
# New Plagiarism Result
> A snapshot of specific results detected by Copyleaks. It provides the data from the matched results.
Results
A snapshot of specific results detected by Copyleaks. It provides the data from the matched results.
## Webhook HTTP verb
[Section titled “Webhook HTTP verb”](#webhook-http-verb)
The HTTP verb for this webhook is upon developer request. You need to specify your verb while executing the [Export method](/reference/actions/downloads/export) See `results.verb` field.
Tip
We recommend you use the HTTP verb `PUT`. It will allow Copyleaks to override an existing file as needed.
statistics object
identical integer
Number of exact words in the text.
minorChanges integer
Number of nearly identical words with small differences like slow becomes slowly.
relatedMeaning integer
Number of paraphrased words stating similar ideas with different words.
text object
value string
The text of the specific result that was found to contain similar content to the submitted text.
pages object
startPosition array
A list of pages’ start positions of the text, the first startPosition is the start position of the first page.
## Example
[Section titled “Example”](#example)
```json
{
"statistics": {
"identical": 0,
"minorChanges": 0,
"relatedMeaning": 0
},
"text": {
"value": "Hello world!",
"pages": {
"startPosition": [
0
]
},
"comparison": {
"identical": {
"source": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
},
"suspected": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
}
},
"minorChanges": {
"source": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
},
"suspected": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
}
},
"relatedMeaning": {
"source": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
},
"suspected": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
}
}
}
},
"html": {
"value": "
Hello world!
",
"comparison": {
"identical": {
"groupId": [
0
],
"source": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
},
"suspected": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
}
},
"minorChanges": {
"groupId": [
0
],
"source": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
},
"suspected": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
}
},
"relatedMeaning": {
"groupId": [
0
],
"source": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
},
"suspected": {
"chars": {
"starts": [
0
],
"lengths": [
1
]
},
"words": {
"starts": [
0
],
"lengths": [
1
]
}
}
}
}
}
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Export Method ](/reference/actions/downloads/export/)Learn how to use the export method to retrieve detailed scan results.
[How to Display Scan Reports ](/concepts/features/how-to-display/)Understand how to present plagiarism results to your users effectively.
---
# New Result
> A new result was found during the scan process.
Results
The new results webhook is triggered when a new plagiarism result is found during the scan process. **When you receive this webhook, the scan is still in progress.**
score number
The current score of the scan up to this point.
developerPayload string
The developer payload that was provided in the submit method.
internet object
id string
Unique result ID to identify the result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
url string\
Public URL of the resource.
metadata object
tags array\[object]
database object
id integer
Unique result ID to identify this result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
scanId string
In case a result was found in the Copyleaks internal database, and was submitted by you, this will show the scan id of the specific result. Otherwise, this field will remain empty.
metadata object
finalUrl string\
Final result url after all http redirects.
canonicalUrl string\
Extracted canonical url from the result.
publishDate string\
Publication date of the result.
creationDate string\
Creation date of the result.
lastModificationDate string\
Last modification date of the result.
author string
Result author.
organization string
Result organization.
filename string
Result filename.
tags array\[object]
code string
Unique ID that signifies the type of result tag.
title string
A simple name for this tag.
description string
Short text describing this tag.
batch object
id string
Unique result ID to identify this result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
scanId string
The batch id that is unique for all scans in this batch.
metadata object
finalUrl string\
Final result url after all http redirects.
canonicalUrl string\
Extracted canonical url from the result.
publishDate string\
Publication date of the result.
creationDate string\
Creation date of the result.
lastModificationDate string\
Last modification date of the result.
author string
Result author.
organization string
Result organization.
filename string
Result filename.
tags array\[object]
code string
Unique ID that signifies the type of result tag.
title string
A simple name for this tag.
description string
Short text describing this tag.
repositories object
id string
Unique result ID to identify this result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
repositoryId string
The repository Id that has the result.
scanId string
The scanId of the matched results in the repository.
metadata object
finalUrl string\
Final result url after all http redirects.
canonicalUrl string\
Extracted canonical url from the result.
publishDate string\
Publication date of the result.
creationDate string\
Creation date of the result.
lastModificationDate string\
Last modification date of the result.
author string
Result author.
organization string
Result organization.
filename string
Result filename.
submittedBy string
Email of the user which added this document to the repository.
tags array\[object]
code string
Unique ID that signifies the type of result tag.
title string
A simple name for this tag.
description string
Short text describing this tag.
## Example
[Section titled “Example”](#example)
```json
{
"score": 0,
"developerPayload": "string",
"internet": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"url": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string"
}
}
],
"database": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"scanId": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string"
}
}
],
"batch": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"scanId": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string"
}
}
],
"repositories": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"repositoryId": "string",
"scanId": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string",
"submittedBy": "string"
}
}
]
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Webhooks Overview ](/reference/data-types/authenticity/webhooks/overview/)Learn about the different types of webhooks and how to handle them.
[Export Method ](/reference/actions/downloads/export/)Learn how to export scan results, including new plagiarism results.
[How to Display Scan Reports ](/concepts/features/how-to-display/)Understand how to present new results to your users effectively.
---
# Results Data Types
> Explore the various data structures for scan results, including plagiarism, AI detection, and writing feedback.
This section provides detailed information about the different types of results you can receive from a Copyleaks scan. Each result type has a specific data structure, which is detailed in the pages below.
[AI Detection ](/reference/data-types/authenticity/results/ai-detection)A snapshot of AI Detection results, providing data from the matched results.
[AI Overview ](/reference/data-types/authenticity/results/ai-overview)A summary of the scan's findings, generated by our AI.
[Crawled Version ](/reference/data-types/authenticity/results/crawled-version)A snapshot of the submitted document as viewed by Copyleaks.
[New Plagiarism Result ](/reference/data-types/authenticity/results/new-plagiarism-result)A snapshot of specific plagiarism results detected by Copyleaks.
[Writing Assistant ](/reference/data-types/authenticity/results/writing-assistant)A snapshot of writing feedback and corrections.
---
# Writing Assistant
> A snapshot of Writing Assistant results detected by Copyleaks. It provides the data from the matched results.
A snapshot of Writing Assistant results detected by Copyleaks. It provides the data from the matched results.
scanType string
The type of the scan.
## Example
[Section titled “Example”](#example)
```json
{
"scanType": "sandbox",
"corrections": {
"text": {
"chars": {
"types": [
4,
14
],
"starts": [
3,
11
],
"lengths": [
5,
5
],
"operationTexts": [
"loves ",
"dance."
]
}
}
}
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Assess Grammar & Writing Quality ](/guides/writing/check-grammar/)Learn how to use the Writing Assistant API to detect and correct writing issues.
[Correction Types ](/reference/data-types/authenticity/correction-types/)See a detailed list of all supported correction types and languages.
[Export Method ](/reference/actions/downloads/export/)Learn how to export scan results, including writing assistant data.
---
# Scan Alerts
> All available alert type codes
Authenticity
When submitting documents, you may receive various types of alerts. These alerts provide important information about your scan results and any issues that occurred during processing. As an API user, you can use these alerts to improve the user experience by supporting more detection features and handling cases of failure.
Alerts are triggered for different scenarios, including:
* Features that failed to execute
* Text manipulation attempts and suspicious behavior
* Private Cloud Hub issues
Scan alerts are found in the [scan completion webhook](/reference/data-types/authenticity/webhooks/scan-completed) at:
```plaintext
notifications.alerts[]
```
Note
Alert titles and messages may change over time as we improve our system. Each alert includes a specific code, category, and detailed message to help you understand what occurred.
## Categories
[Section titled “Categories”](#categories)
| id | Category |
| -- | ------------------ |
| 1 | General |
| 2 | AiContentDetection |
| 3 | CheatingDetection |
| 4 | WritingAssistant |
| 5 | CrossLanguage |
| 6 | InternalDatabase |
| 7 | Repository |
| 8 | ExcludeTemplate |
| 9 | PdfReport |
## Alerts
[Section titled “Alerts”](#alerts)
| Code | Title | Message | Category | Additional Data |
| ----------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------- |
| suspected-ai-text | Suspected Cheating: AI Text Detected | We are unable to verify that the text was written by a human. | 2 | [AI Content Detection Response](/reference/data-types/authenticity/results/ai-detection) |
| ai-detection-failed | AI Detection Failed | We were unable to validate that there was no AI text in the submitted document due to an internal error. | 2 | |
| file-type-not-supported | AI Detection Not Executed: File Type not Supported | The submitted file type is currently not supported for AI detection. | 2 | |
| ai-detection-lang-not-supported | AI Detection Not Executed: Language not Supported | The submitted language is currently not supported for AI detection. | 2 | |
| ai-detection-text-too-short | AI Detection Not Executed: Text too Short | The submitted text is too short for AI content detection. | 2 | |
| ai-insights-lang-unsupported | AI Insights: Unsupported Language | The submitted language is currently not supported for AI Insights. | 2 | |
| ai-logic-source-code-unsupported | AI Logic: Source Code Unsupported | AI Logic does not support source code files. | 2 | |
| suspected-cheating-detected | Advanced Detection: Hidden Characters | We have detected the possible use of hidden characters to cheat the plagiarism scan. | 3 | |
| suspected-character-replacement | Advanced Detection: Character Replacement | We have detected possible use of special characters to cheat the plagiarism scan. | 3 | |
| suspected-white-text | Suspected Cheating: Invisible Text | We have detected a possible use of invisible text, switch to the textual version of the document to see all text. | 3 | |
| text-mostly-excluded | Advanced Detection: Major Text Exclusion | We have detected a possible cheating attempt to exclude the majority of text. | 3 | |
| cheat-detection-failed | Advanced Detection Failed | We were unable to validate that there was no cheating in the submitted document. | 3 | |
| writing-feedback-failed | Writing Assistant Failed | We were unable to produce a Writing Assistant report. | 4 | |
| writing-feedback-lang-not-supported | Writing Assistant Not Executed: Language not Supported | The submitted language is currently not supported for Writing Assistant. | 4 | |
| cross-language-same-as-doc-lang | Cross Language: Same Document Language | Submitted language and cross-language text are the same language. No credits were used. | 5 | |
| cross-language-unsupported-doc-lang | Cross Language: Unsupported Document Language | Your submitted document language is not supported for cross-language plagiarism detection. Cross language feature has been disabled for this scan. | 5 | |
| internal-db-forbidden-for-team | Shared Data Hub Team Policy Violation | Your organization does not allow scanning files against Copyleaks Shared Data Hub, this scan was not added or scanned against the Copyleaks Shared Data Hub. If you still wish to use the Shared Data Hub please contact your organization admin. | 6 | |
| unable-to-index | Add to Database Failed | We were unable to add your file to the database due to an internal error. | 6 | |
| repository-index-failed | Not Able to Index Against Repository | You do not have permission to index against `{RepositoryName}` or the repository does not exist. | 7 | |
| repository-scan-failed | Not Able to Scan Against Repository | You do not have permission to scan against `{RepositoryName}`. | 7 | |
| repository-full | This Private Cloud Hub is Full | Indexing to private cloud hub `{RepositoryName}` failed because the private cloud hub storage capacity has been reached. | 7 | |
| document-template-not-found | Document Template Not Found | We were unable to find the following exclusion document template:`{ScanIds}`. | 8 | |
| pdf-generation-failed | Unable to Generate PDF Report | The PDF report was not able to be generated. | 9 | |
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Webhooks Overview ](/reference/data-types/authenticity/webhooks/overview/)Learn how to receive and process notifications from Copyleaks, including scan alerts.
[Technical Specifications ](/reference/data-types/authenticity/technical-specifications/)Review API limits and other technical details that might impact scan alerts.
[Text Manipulation Detection ](/concepts/features/text-manipulation/)Understand how to detect and handle various text manipulation attempts.
[AI Text Detection ](/guides/ai-detector/ai-text-detection/)Learn more about detecting AI-generated text and related alerts.
---
# Scanned Document
> Detailed reference for the Scanned Document object, which contains metadata about a submitted scan.
Authenticity
The `scannedDocument` object provides metadata and information about a scan that has been submitted to the Copyleaks API.
scanId string
The unique identifier for the scan that you provided during submission.
totalWords integer
The total number of words detected in the submitted content.
totalExcluded integer
The total number of words that were excluded from the scan based on your `exclude` settings.
credits integer
The number of credits consumed by the scan. This will be `0` until the scan is completed.
expectedCredits integer
The number of credits that are expected to be consumed by the scan upon completion.
creationTime string
The Coordinated Universal Time (UTC) timestamp indicating when the scan was created. Format: `YYYY-MM-DDTHH:mm:ss.sssssssZ`
metadata object
An object containing metadata about the submitted file. For example, it can contain the `filename`.
enabled object
An object indicating which scan features were enabled for this scan.
plagiarismDetection boolean
Indicates if plagiarism detection was enabled.
aiDetection boolean
Indicates if AI-generated text detection was enabled.
explainableAi boolean
Indicates if the AI Logic (explainable AI) feature was enabled.
writingFeedback boolean
Indicates if the Writing Assistant feature was enabled.
pdfReport boolean
Indicates if the generation of a PDF report was enabled.
cheatDetection boolean
Indicates if cheat detection was enabled.
aiSourceMatch boolean
Indicates if AI source matching was enabled.
detectedLanguage string
The language code (ISO 639-1) of the language detected in the submitted content.
---
# Technical Specifications
> API limits, requirements, and constraints
Authenticity
This page describes the technical specifications of the Copyleaks API.
## Page Definition
[Section titled “Page Definition”](#page-definition)
A page is defined as up to **250 words**. This means that every 250 words (or portion thereof) in your document counts as one page for billing purposes.
How Page Counting Works:
* 1-250 words = 1 page
* 251-500 words = 2 pages
* 501-750 words = 3 pages
* etc.
## Input Limits
[Section titled “Input Limits”](#input-limits)
### Supported File Types
[Section titled “Supported File Types”](#supported-file-types)
| Type | File Types List |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Textual: | `html`, `htm`, `txt`, `csv`, `rtf`, `xml`, `md` |
| Non-Textual: | `pdf`, `docx`, `doc`, `pptx`, `ppt`, `odt`, `chm`, `epub`, `odp`, `ppsx`, `pages`, `xlsx`, `xls`, `LaTeX` |
| Source code: | `ts`, `py`, `go`, `cs`, `c`, `h`, `idc`, `cpp`, `hpp`, `c++`, `h++`, `cc`, `hh`, `java`, `js`, `swift`, `rb`, `pl`, `php`, `sh`, `m`, `scala`, `css` |
Note
You can access this list programmatically, for more info [click here](/reference/actions/miscellaneous/supported-file-types).
### Supported Textual File Types
[Section titled “Supported Textual File Types”](#supported-textual-file-types)
The supported online format are all supported file types are also supported when online. Submitted by URL.
### Supported Image Types (OCR)
[Section titled “Supported Image Types (OCR)”](#supported-image-types-ocr)
The supported image files are `pdf, docx, gif, png, bmp, jpg and jpeg` . The files must contain textual content. Upload only.
Note
You can access this list programmatically, for more info [click here](/reference/actions/miscellaneous/ocr-supported-languages).
### Supported Plagiarism Languages
[Section titled “Supported Plagiarism Languages”](#supported-plagiarism-languages)
| Setting | Description |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Supported Languages** | All languages supported by Unicode, including English, Spanish, French, Portuguese, Arabic, Russian, German, Greek, Chinese, Japanese, and more. [More info](https://unicode.org/standard/supported.html). |
| **Supported OCR Languages** | See full list [here](/reference/actions/miscellaneous/ocr-supported-languages). |
| **Supported Cross Languages** | See full list [here](/reference/actions/miscellaneous/supported-cross-languages). |
| **Maximum Document Length** | The maximum length allowed is **2000 pages** (500K words). |
### File Size
[Section titled “File Size”](#file-size)
| Description | Max Upload File Size |
| ----------------------------------------------- | -------------------- |
| HTML files (`html`, `htm`, …) | 5 MB |
| Text files (`txt`, `csv`) and source-code | 3 MB |
| Non-Textual Documents (`pdf`, `doc`, `docx`, …) | 50 MB |
| Image Types (`jpg`, `png`, `bmp`, …) | 25 MB |
## Rate Limit
[Section titled “Rate Limit”](#rate-limit)
An account by default has a rate of 10 requests per second. If you still need higher rates, feel free to [contact us](https://help.copyleaks.com/s/contactsupport).
Warning
Rate Limit Exceeded, If your host has reached its API limit, you will receive the HTTP error 429 (Too Many Requests) and you will be unable to authenticate with the Copyleaks API for 5 minutes.
## Maintenance Periods
[Section titled “Maintenance Periods”](#maintenance-periods)
When our servers are under maintenance you will receive a `503` HTTP status code. Please wait a full minute and try again.
For more information about the service status -[ Copyleaks System Status](https://status.copyleaks.com).
## Time
[Section titled “Time”](#time)
| Setting | Value |
| -------------------------------- | --------------------- |
| **Time Format** | `dd/MM/yyyy HH:mm:ss` |
| **Time Zone** | UTC |
| **Default HTTP Request Timeout** | 110 seconds |
## Scan Expiration
[Section titled “Scan Expiration”](#scan-expiration)
Your created scans using the [/v3/submit](/reference/actions/scans/submit-file) endpoints will be stored in Copyleaks servers for a specific duration of time. You can control the expiration of your scans in your submit request. Make sure you save your data before it expires:
| Type | hours |
| ------------------ | ----- |
| Max Expiration | 2880 |
| Default Expiration | 2880 |
---
# Credits Checked
> Copyleaks inspected the submitted file and provides a cost for the scan.
Webhooks
Copyleaks supports a price check operation. In some cases, you won’t know the exact length of your document, so using the price check will be helpful to understand how many credits are necessary. Copyleaks allows you to send your document and receive back the amount of credits that the system will require to complete a scan **(1 credit = 250 words)**.
To proceed with scanning the document after checking the credits needed, you should call the Start method.
Note
Scans that are not triggered by calling the Start method within 48 hours will be deleted and will no longer be available.
status integer
The current status of the scan. Possible values: 0 (Success), 1 (Error), 2 (CreditsChecked), 3 (Indexed)
developerPayload string
The developer payload that was provided in the submit method.
`<= 512` characters
credits integer
The price of the scan. If you will continue scanning, this is the price you will pay.
scannedDocument object
General information about the scanned document.
scanId string
The unique scan id provided by you.
totalWords integer
Unsigned Integer
Total number of words found in the scanned text.
totalExcluded integer
Unsigned Integer
Number of excluded words in the submitted content.
credits integer
Overall credits used for the scan.
creationTime string\
The creation time of the scan.
Timezone: UTC+0
metadata object
finalUrl string\
The submitted url after all http redirects.
canonicalUrl string\
Extracted canonical url from the scanned document.
publishDate string\
Publication date of the scanned document.
creationDate string\
Creation date of the scanned document.
lastModificationDate string\
Last modification date of the scanned document.
author string
Scanned document author.
organization string
Scanned document organization.
filename string
Scanned document filename.
## Example
[Section titled “Example”](#example)
```json
{
"status": 2,
"developerPayload": "Custom developer payload",
"credits": 1
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Start a Scan ](/reference/actions/scans/start/)Learn how to initiate a scan after checking the credit cost.
[Manage Your Credits ](/concepts/management/manage-your-credits/)Explore strategies for managing your Copyleaks credits effectively.
[Webhooks Overview ](/reference/data-types/authenticity/webhooks/overview/)Learn about the different types of webhooks and how to handle them.
---
# Error
> The scan ended with an error.
Webhooks
The `error` event happens as soon as the scan process reaches an end due to an error.
status integer
The current status of the scan. Possible values: 0 (Success), 1 (Error), 2 (CreditsChecked), 3 (Indexed)
error array
code integer
Error code that represents the reason for failure. See below the full error table.
message string
Error message that represents the reason for failure.
developerPayload string
The developer payload that was provided in the submit method.
`<= 512` characters
Copyleaks provides you with the specific error message describing the reason for the error. Some of the failures are related to incorrect configuration on your side. Others are related to Copyleaks server-side errors. The full error list is provided here:
| **Error Code** | **Error Message** |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | Bad request. One or several required parameters are missing or incorrect. |
| 2 | Invalid login credentials. |
| 3 | To use your account, you need to confirm the email address. |
| 4 | This user is disabled. Contact support for help. |
| 5 | Failed to download the requested URL. |
| 6 | Cannot complete the scan request because the file is too large. For more information: |
| 7 | Failed reading the submitted text. |
| 8 | The image quality is too low to scan. |
| 9 | Temporarily unavailable. Please try again later. |
| 10 | This file type is not supported. Read more - [link](http://bit.ly/2fqJOqP) |
| 11 | Not enough text to scan. The minimum text length is 30 characters and at least 6 words. |
| 12 | This document is too long (The maximum number of pages allowed is ``, while this document contains `` pages). |
| 13 | You don’t have enough credits to complete the request (required `` credits)! |
| 14 | The submitted file is invalid. |
| 15 | The submitted URL is invalid! |
| 16 | The server encountered an internal error or misconfiguration and was unable to complete your request. We are investigating the problem. Ticket ID `<00000000-0000-0000-0000-000000000000>`. |
| 17 | You have no credits. You need to purchase credits in order to complete the request. |
| 18 | Copyshield widget is not showing on your webpage. |
| 19 | ’`*`’ headers are too long (limited to `` characters together)! |
| 20 | Only MIME multipart content type is allowed! |
| 21 | You can upload one file at a time! |
| 22 | Unable to determine file size. |
| 24 | Bad filename! |
| 25 | Undefined language! |
| 26 | The request cannot be completed because the process is still running. |
| 27 | Unknown process id! |
| 30 | Missing ‘``’ header value! |
| 31 | Bad parameter ‘``’! |
| 32 | Too many failed login attempts. Please try again in `` hours. |
| 33 | Http header ‘``’ key is too long (max length is `` characters)! |
| 37 | Authorization has been denied for this request. |
| 38 | Order has already been activated. |
| 39 | Unsupported method. |
| 40 | Institution subscription has expired. |
| 41 | The submitted file is password protected. |
We are doing our best to successfully respond to all of your requests.
Still, sometimes we encounter an internal error. In that case, we will fix the problem as soon as possible. You will also get a unique ticket ID that will help identify the problem when contacting Copyleaks customer support.
| **Error Code** | **Error Message** |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 16 | The server encountered an internal error or misconfiguration and was unable to complete your request. We are investigating the problem. Ticket ID `<00000000-0000-0000-0000-000000000000>`. |
***
status integer
The current status of the scan. Possible values: 0 (Success), 1 (Error), 2 (CreditsChecked), 3 (Indexed)
developerPayload string
The developer payload that was provided in the submit method.
## Example
[Section titled “Example”](#example)
```json
{
"status": 1,
"error": {
"message": "You don't have enough credits to complete the request (required 10 credits)!",
"code": "13"
},
"developerPayload": "Custom developer payload"
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Webhooks Overview ](/reference/data-types/authenticity/webhooks/overview/)Learn about the different types of webhooks and how to handle them.
[Handling Failures ](/concepts/performance/handling-failures/)Understand how to implement an exponential backoff strategy for retrying requests.
[Scan Alerts ](/reference/data-types/authenticity/scan-alerts/)Explore the full list of scan alerts and their meanings.
---
# Export Completed
> The export request is done.
Webhooks
Once the export request is done, a completion webhook is fired. When the webhook reaches your servers, please verify that all the requested data was copied correctly. To check that the commands finished successfully, check:
1. The `completed` flag should be equal to `true`.
2. Each `task.isHealthy` should be equal to `true`.
3. Each `task.httpStatusCode` should be equal to `2xx` (200, 204, …).
completed boolean
This flag gives an indication of whether the scan was completed without internal errors on the Copyleaks side. Possible values: true (Completed successfully), false (Error)
developerPayload string
The developer payload that was provided in the submit method.
tasks array\[object]
A List of completed tasks.
endpoint string\
The endpoint address of the export task.
isHealthy boolean
This flag gives an indication whether the scan was completed without internal errors on the Copyleaks side.
httpStatusCode integer
The status code reported by the customer servers. If the `tasks.isHealthy` is equal to false - this field will be null.
## Example
[Section titled “Example”](#example)
```json
{
"completed": true,
"developerPayload": "This is my payload",
"tasks": [
{
"endpoint": "https://yourserver.com/export/export-id/results/my-result-id",
"httpStatusCode": 200,
"isHealthy": true
},
{
"endpoint": "https://yourserver.com/export/export-id/pdf-report",
"httpStatusCode": 200,
"isHealthy": true
},
{
"endpoint": "https://yourserver.com/export/export-id/crawled-version",
"httpStatusCode": 200,
"isHealthy": true
}
]
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Export Method ](/reference/actions/downloads/export/)Learn how to initiate export requests for various scan artifacts.
[Webhooks Overview ](/reference/data-types/authenticity/webhooks/overview/)Understand the different types of webhooks and how to handle them.
[How to Display Scan Reports ](/concepts/features/how-to-display/)Learn how to present exported scan data to your users.
---
# Indexed
> Copyleaks indexed the submitted file in its Shared Data Hub or repository.
Webhooks
Copyleaks allows users to upload and index their existing documents into the Copyleaks Shared Data Hub without performing a scan. This feature enables future submissions to be compared against these stored documents for enhanced plagiarism detection.
To activate the indexing mode, submit your content with the `properties.action=2` parameter. Indexing documents to the Copyleaks Shared Data Hub is free of charge.
Once the document is processed, a webhook will notify you of the indexing status:
* **Success:** A webhook will confirm that your document has been indexed successfully.
* **Error:** If indexing fails, an error webhook will be triggered, providing details about the reason for the failure.
status integer
The current status of the scan. Possible values: 0 (Success), 1 (Error), 2 (CreditsChecked), 3 (Indexed)
developerPayload string
The developer payload that was provided in the submit method.
`<= 512` characters
## Example
[Section titled “Example”](#example)
```json
{
"status": 3,
"developerPayload": "Custom developer payload"
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Webhooks Overview ](/reference/data-types/authenticity/webhooks/overview/)Learn about the different types of webhooks and how to handle them.
[Submit File for Scan ](/reference/actions/scans/submit-file/)Learn how to submit files for scanning, including enabling indexing.
[Compare Multiple Documents ](/concepts/features/data-hubs/)Understand how to compare documents within your Private Cloud Hub and against other sources.
---
# Webhooks Overview
> Get notified immediately when your scan status changes, without having to call any other methods.
Webhooks
A webhook is an automated message sent from an application when a specific event occurs. Think of it as a push notification for your server.
Instead of your application repeatedly asking the Copyleaks API, “Is the scan finished yet?” (a process known as polling), a webhook lets our servers notify you automatically as soon as an event happens. This approach is far more efficient and provides real-time updates.
Since authenticity scans can take time to complete, webhooks are essential for building a responsive and scalable integration. By using them, you can get immediate notifications for key events—like when a scan is completed, an error occurs, or the credit cost is calculated - without writing complex polling logic.
This page explains how to configure your endpoints to receive these events and what to expect from our system.
## System Events
[Section titled “System Events”](#system-events)
Copyleaks system is able to notify you about a few different event types related to your scan. These events are critical for the scan success.
To allow us to fire your webhook, you will need to provide us with a valid HTTP(s) endpoint. You can do this by populating the `properties.webhooks.status` field in the submit method (URL, file, or OCR).
### Suggested Endpoint Format
[Section titled “Suggested Endpoint Format”](#suggested-endpoint-format)
The recommended format for your webhook endpoint is:
```http
https://yoursite.com/copyleaks/{status}/SCAN_ID
```
The endpoint contains two dynamic parts:
1. **`{status}`** – This token is replaced by the Copyleaks server with the relevant event. Possible values include:
* ([completed](/reference/data-types/authenticity/webhooks/scan-completed)) – The scan completed successfully.
* **([error](/reference/data-types/authenticity/webhooks/error))** – The scan ended with an error.
* **([creditsChecked](/reference/data-types/authenticity/webhooks/credits-checked))** – Copyleaks inspected the submitted file and provides a cost for the scan.
* **([indexed](/reference/data-types/authenticity/webhooks/indexed))** – Copyleaks indexed the submitted file in its Shared Data Hub or repository.
2. **`SCAN_ID`** - This segment should be replaced with your actual process ID. For For example, if your scan ID is `hello123`, the endpoint would be:
### Example
[Section titled “Example”](#example)
If your scan ID is `hello123`, your webhook endpoints would be:
* `https://yoursite.com/copyleaks/completed/hello123`
* `https://yoursite.com/copyleaks/error/hello123`
* `https://yoursite.com/copyleaks/creditsChecked/hello123`
Tip
Including the `SCAN_ID` in the webhook URL allows you to quickly identify and track the scan. While optional, it is highly recommended.
## New-Result Webhook
[Section titled “New-Result Webhook”](#new-result-webhook)
In addition to the `{status}` webhooks, there is a **new-result webhook** that reports newly found results as they are identified. This is useful for time-sensitive applications, providing a live stream of results without waiting for the scan to complete.
To use this webhook, populate the `properties.webhooks.newResult` field in the submit method (URL, file, or OCR). For more details, refer to the ([new result webhook](/reference/data-types/authenticity/results/new-result)) documentation.
## Client Requirements
[Section titled “Client Requirements”](#client-requirements)
To use the asynchronous model, your system must meet the following requirements:
* A web server connected to the internet.
* The ability to respond to webhook calls within **70 seconds** with an HTTP success code (2xx).
* Once a success code is received, the webhook will not be fired again for the same scan.
## Retry Policy
[Section titled “Retry Policy”](#retry-policy)
To ensure reliable delivery, Copyleaks implements an **automatic retry mechanism** in case of communication failures (e.g., server downtime, network instability).
If your server fails to respond or returns a **5xx error**, the webhook will be retried **up to 17 times**, following an **exponential backoff** strategy:
1, 2, 4, 8, 16, …, **up to 65,535 seconds** between attempts.
To manually resend a webhook for a specific scan, use the [resend webhook](/reference/actions/scans/resend-webhook) endpoint.
## At-Least-Once Delivery Guarantee
[Section titled “At-Least-Once Delivery Guarantee”](#at-least-once-delivery-guarantee)
Copyleaks follows an **“at-least-once”** delivery approach, ensuring that webhooks are always sent, even in cases of temporary failures.
Note
While a webhook is guaranteed to be sent, it **may be delivered more than once** in rare cases. Your system should be designed to handle duplicate webhook notifications gracefully.
By implementing these best practices, you can ensure seamless integration with Copyleaks’ asynchronous webhook system while maintaining the security and reliability of your application.
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Completed Webhook ](/reference/data-types/authenticity/webhooks/scan-completed)Learn about the completed webhook and its contents.
[Error Webhook ](/reference/data-types/authenticity/webhooks/error/)Understand how to handle error webhooks and troubleshoot issues.
[Credits Checked Webhook ](/reference/data-types/authenticity/webhooks/credits-checked/)Learn about the webhook for checking credit costs before a scan.
[Indexed Webhook ](/reference/data-types/authenticity/webhooks/indexed/)Understand the webhook for documents indexed in the Copyleaks database.
[New Result Webhook ](/reference/data-types/authenticity/results/new-result/)Learn about the webhook that reports newly found results as they are identified.
[Webhooks Security ](/concepts/security/webhooks/)Learn how to secure your webhook endpoints against unauthorized access.
---
# Scan Completed
> The scan completed successfully.
Webhooks
The `completed` event occurs once the scan process has been completed and the scan finished successfully.
Note
Successful scans provide you all the output information from the scan process.
status integer
The current status of the scan. Possible values: `0` (Success), `1` (Error), `2` (CreditsChecked), `3` (Indexed)
developerPayload string
The developer payload that was provided in the submit method.
`<= 512 characters`
scannedDocument object
General information about the scanned document.
scanId string
The unique scan id provided by you.
totalWords integer
Unsigned Integer
Total number of words found in the scanned text.
totalExcluded integer
Unsigned Integer
Number of excluded words in the submitted content.
credits integer
Overall credits used for the scan.
creationTime string\
The creation time of the scan.
Timezone: UTC+0
metadata object
finalUrl string\
The submitted url after all http redirects.
canonicalUrl string\
Extracted canonical url from the scanned document.
publishDate string\
Publication date of the scanned document.
creationDate string\
Creation date of the scanned document.
lastModificationDate string\
Last modification date of the scanned document.
author string
Scanned document author.
organization string
Scanned document organization.
filename string
Scanned document filename.
results object
A list of all the results that were found.
internet object
id string
Unique result ID to identify the result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
url string\
Public URL of the resource.
metadata object
tags array\[object]
database object
id integer
Unique result ID to identify this result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
scanId string
In case a result was found in the Copyleaks internal database, and was submitted by you, this will show the scan id of the specific result. Otherwise, this field will remain empty.
metadata object
finalUrl string\
Final result url after all http redirects.
canonicalUrl string\
Extracted canonical url from the result.
publishDate string\
Publication date of the result.
creationDate string\
Creation date of the result.
lastModificationDate string\
Last modification date of the result.
author string
Result author.
organization string
Result organization.
filename string
Result filename.
tags array\[object]
code string
Unique ID that signifies the type of result tag.
title string
A simple name for this tag.
description string
Short text describing this tag.
batch object
id string
Unique result ID to identify this result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
scanId string
The batch id that is unique for all scans in this batch.
metadata object
finalUrl string\
Final result url after all http redirects.
canonicalUrl string\
Extracted canonical url from the result.
publishDate string\
Publication date of the result.
creationDate string\
Creation date of the result.
lastModificationDate string\
Last modification date of the result.
author string
Result author.
organization string
Result organization.
filename string
Result filename.
tags array\[object]
code string
Unique ID that signifies the type of result tag.
title string
A simple name for this tag.
description string
Short text describing this tag.
repositories object
id string
Unique result ID to identify this result.
title string
Document title. Mostly extracted from the document content.
introduction string
Document brief introduction. Mostly extracted from the document content.
matchedWords integer
Unsigned Integer
Total matched words between this result and the scanned document.
repositoryId string
The repository Id that has the result.
scanId string
The scanId of the matched results in the repository.
metadata object
finalUrl string\
Final result url after all http redirects.
canonicalUrl string\
Extracted canonical url from the result.
publishDate string\
Publication date of the result.
creationDate string\
Creation date of the result.
lastModificationDate string\
Last modification date of the result.
author string
Result author.
organization string
Result organization.
filename string
Result filename.
submittedBy string
Email of the user which added this document to the repository.
tags array\[object]
code string
Unique ID that signifies the type of result tag.
title string
A simple name for this tag.
description string
Short text describing this tag.
score object
The aggregated score of all results.
identicalWords integer
Unsigned Integer
Number of words which matched exactly
minorChangedWords integer
Unsigned Integer
Number of nearly identical words with small differences like ‘slow’ and ‘slowly’.
relatedMeaningWords integer
Unsigned Integer
Number of paraphrased words showing similar ideas with different words.
aggregatedScore number\
Unsigned float
The percentage of similar words from all results. The calculation does not include excluded references, quotations, etc…
notifications object
A list of all the notifications that were found.
alerts array\[object]
A list of scan alerts that were detected in the scan. See more about [Alert Types](/reference/data-types/authenticity/scan-alerts)
category integer
Scan alert category.
code string
Scan alert code. The code is unique for each scan alert.
title string
Scan alert human-readable title.
message string
Provides human-readable information about the scan alert.
helpLink string
Url to a resource describing the specific scan alert.
severity integer
Unsigned Integer
Specifies the importance of the scan alert.
**Possible values:**
`0` : Very Low
`1` : Low
`2` : Medium
`3` : High
`4` : Very High
additionalData string
Additional data about the scan alert. Supplied as a json string.
## Example
[Section titled “Example”](#example)
```json
{
"status": 0,
"developerPayload": "Custom developer payload",
"scannedDocument": {
"scanId": "string",
"totalWords": 0,
"totalExcluded": 0,
"credits": 0,
"creationTime": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string"
}
},
"results": {
"internet": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"url": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string"
}
}
],
"database": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"scanId": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string"
}
}
],
"batch": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"scanId": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string"
}
}
],
"repositories": [
{
"id": "string",
"title": "string",
"introduction": "string",
"matchedWords": 0,
"repositoryId": "string",
"scanId": "string",
"metadata": {
"finalUrl": "string",
"canonicalUrl": "string",
"author": "string",
"organization": "string",
"filename": "string",
"publishDate": "string",
"creationDate": "string",
"lastModificationDate": "string",
"submittedBy": "string"
}
}
],
"score": {
"identicalWords": 0,
"minorChangedWords": 0,
"relatedMeaningWords": 0,
"aggregatedScore": 0
}
},
"downloadableReport": {
"status": "Success = 0",
"report": "string"
},
"notifications": {
"alerts": [
{
"category": 2,
"code": "string",
"title": "string",
"message": "string",
"helpLink": "string",
"severity": 0,
"additionalData": "string"
}
]
}
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Webhooks Overview ](/reference/data-types/authenticity/webhooks/overview/)Learn about the different types of webhooks and how to handle them.
[Export Method ](/reference/actions/downloads/export/)Learn how to export scan results, including new plagiarism results.
[How to Display Scan Reports ](/concepts/features/how-to-display/)Understand how to present new results to your users effectively.
[Scan Alerts ](/reference/data-types/authenticity/scan-alerts/)Explore the full list of scan alerts and their meanings.
---
# Moderation
> Explore the data types related to content moderation.
Moderation
This section provides detailed information about the data types related to content moderation.
[Text Moderation Labels ](/reference/data-types/moderation/text-moderation-labels)A comprehensive list of the content categories supported by the Copyleaks Text Moderation API.
---
# Content Moderation Labels
> A comprehensive list of the content categories supported by the Copyleaks Text Moderation API.
Moderation
The Copyleaks Text Moderation API provides a flexible and powerful solution for identifying and managing a wide range of harmful or risky content. Our API supports a comprehensive set of moderation labels, allowing you to tailor the moderation process to your specific community standards.
## Supported Labels
[Section titled “Supported Labels”](#supported-labels)
| Label ID | Description |
| ------------------ | ------------------------------------------------------------------------------------ |
| `toxic-v1` | General toxic or harmful content that doesn’t fit other specific categories |
| `profanity-v1` | Content containing explicit language, profanity, or vulgar expressions |
| `hate-speech-v1` | Content promoting hatred, discrimination, or prejudice against individuals or groups |
| `harassment-v1` | Bullying, intimidation, or targeted harassment content |
| `self-harm-v1` | Content promoting self-injury, suicide, or other forms of self-harm |
| `adult-v1` | Sexually explicit or suggestive material inappropriate for minors |
| `violent-v1` | Content depicting, promoting, or threatening violence or dangerous activities |
| `drugs-v1` | Content related to illegal drug use, drug trafficking, or substance abuse |
| `firearms-v1` | Content related to weapons, firearms, or other dangerous implements |
| `cybersecurity-v1` | Potential security threats, malicious content, or cyber attack material |
## Usage
[Section titled “Usage”](#usage)
When submitting text for moderation, include the desired labels in your request. You can specify all labels or only the ones relevant to your use case:
**Request**
```http
POST https://api.copyleaks.com/v1/text-moderation/{scanId}/check
```
**Headers**
```http
Content-Type: application/json
Authorization: Bearer YOUR_LOGIN_TOKEN
```
**Body**
```json
{
"text": "Your text content to be moderated goes here.",
"language": "en",
"labels": [
{ "id": "toxic-v1" },
{ "id": "profanity-v1" },
{ "id": "hate-speech-v1" },
{ "id": "harassment-v1" },
{ "id": "self-harm-v1" },
{ "id": "adult-v1" },
{ "id": "violent-v1" },
{ "id": "drugs-v1" },
{ "id": "firearms-v1" },
{ "id": "cybersecurity-v1" }
]
}
```
Full details about the request and response structure can be found in the [Text Moderation API Reference](/reference/actions/text-moderation/check/).
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Moderate Text Content ](/guides/moderation/moderate-text/)Learn how to use the Text Moderation API to scan and moderate text content.
[Text Moderation API Reference ](/reference/actions/text-moderation/check/)Explore the complete API reference for text moderation, including request and response details.
---
# Data Types
> Explore the comprehensive Copyleaks API reference for data types, from scan results to webhook payloads.
Data Types
Understand the structure of the data you’ll work with. Our API reference provides detailed information on every data object, from scan results to webhook payloads, ensuring you can build robust and reliable integrations.
## Explore Our Data Models
[Section titled “Explore Our Data Models”](#explore-our-data-models)
Dive into the specifics of each data type to understand how to work with the Copyleaks API.
[Authenticity ](/reference/data-types/authenticity/overview)Explore the data types related to authenticity, including plagiarism, AI detection, and webhooks.
[AI Detector ](/reference/data-types/ai-detector/overview)Explore the data types related to AI detection.
[Writing ](/reference/data-types/writing/overview)Explore the data types related to writing assistance.
[Moderation ](/reference/data-types/moderation/overview)Explore the data types related to content moderation.
---
# Correction Types
> Writing assistant correction categories
Writing
Each detected correction has an attached type. These types may be used to understand what error was detected and show it in the user interface.
You are able to fetch the list of correction types programmatically using the following [endpoint](/reference/actions/writing-assistant/correction-types).
## Categories
[Section titled “Categories”](#categories)
| id | Category |
| -- | ------------------ |
| 1 | Sentence Structure |
| 2 | Grammar |
| 3 | Word Choice |
| 4 | Mechanics |
## Types
[Section titled “Types”](#types)
| ID | Title | Message | Description | Category |
| ---- | -------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| `1` | General | A general correction detected | A general correction detected. | 2 |
| `2` | Subject Verb Disagreement | Subject-verb disagreement detected | The subject and verb do not agree in number. | 2 |
| `3` | Noun Form | Use a different noun form | Using an incorrect form of a noun (such as pluralization or possessive form) in a sentence. | 2 |
| `4` | Verb Form | Use a different verb form | Using an incorrect form of a verb (such as tense, aspect, or agreement) in a sentence results. | 2 |
| `5` | Article | Use the appropriate article | Using the wrong article (a, an, or the) or omitting an article inappropriately in a sentence. | 2 |
| `6` | Preposition | Incorrect preposition usage | Using the wrong preposition or misplacing a preposition in a sentence. | 2 |
| `7` | Pronoun | Incorrect pronoun usage | Using an incorrect pronoun or misplacing a pronoun in a sentence. | 2 |
| `8` | Part of Speech | Incorrect part of speech | Misusing or misidentifying a word’s grammatical category, such as confusing a noun with a verb. | 2 |
| `9` | Conjunction | Incorrect conjunction usage | Misusing or misplacing conjunctions, which are words that connect words, phrases, or clauses in a sentence. | 2 |
| `10` | Misused Word | Use a different word to convey the message | Words that are used incorrectly or inappropriately in a given context. | 3 |
| `11` | Homophone | Incorrect homophone usage detected | Confusing two words that phonetically sound similar but have a different meaning (e.g., “their” and “there” or “to” and “too”). | 3 |
| `12` | Capitalization | Incorrect capitalization | Word was not capitalized correctly (e.g., “paris” should be “Paris”). | 4 |
| `13` | Hyphen | Hyphen usage is incorrect | Incorrect or inconsistent use of hyphens in a sentence. | 4 |
| `14` | Punctuation | Incorrect punctuation usage | Incorrect use of punctuation marks, such as commas, periods, semicolons, or colons. | 4 |
| `15` | Comma | Incorrect comma usage | Incorrect use of commas in sentences. | 4 |
| `16` | Apostrophe | Incorrect apostrophe usage | Incorrect use of apostrophes in sentences. | 4 |
| `17` | Space | Missing or extra spaces | Missing or extra spaces detected in sentence. | 4 |
| `18` | Spelling | Misspelling detected | Misspelling of a word. | 4 |
| `19` | Fused Sentence | Fused sentence detected | When two independent clauses are incorrectly joined without appropriate punctuation or conjunction. | 1 |
| `20` | Comma Splice | Comma splice detected | Two independent clauses are incorrectly joined by a comma without a coordinating conjunction or appropriate punctuation. | 1 |
| `21` | Sentence Fragments | Ensure your sentence has a complete subject and predicate | When a group of words appears to be a sentence but is incomplete because it lacks a subject, a predicate, or both. | 1 |
| `22` | Ineffective Construction | Revise the sentence for better clarity and structure | Refers to sentences or phrases that are poorly constructed or lack clarity, making it difficult for readers to understand the intended meaning. | 1 |
| `23` | Extra Words | Sentence contains extra words | Sentences that contain unnecessary or redundant words, which can be removed for clearer and more concise writing. | 1 |
| `24` | Missing Words | Sentence with missing words | Identifies sentences that are missing essential words, resulting in incomplete or unclear meaning. | 1 |
| `25` | Adjective Gender Agreement | Gender agreement mismatch in adjectives | Detects errors in the gender agreement between adjectives and nouns. | 2 |
| `26` | Adjective Number Agreement | Number agreement error with adjectives | Highlights discrepancies in the number agreement between adjectives and nouns for improved grammatical precision. | 2 |
| `27` | Article Gender Agreement | Gender agreement error in articles | Agreement between articles and nouns in terms of gender is incorrect , ensuring grammatical accuracy. | 2 |
| `28` | Article Number Agreement | Number agreement error in articles | Number mismatch between articles and nouns creating inconsistency in how they refer to the same or similar elements in a sentence. | 2 |
| `29` | Noun Gender Agreement | Gender agreement error with nouns | Lack of agreement between nouns and their associated genders, ensuring grammatical harmony. | 2 |
| `30` | Subjunctive Mood | Subjunctive mood misuse | Identifies the incorrect usage of the subjunctive mood in sentences, ensuring proper expression of hypothetical or unreal situations. | 2 |
| `31` | Compound Word Error | Compound word usage error | Identifies incorrect compound word usage. | 2 |
| `32` | Mood Inconsistency | Inconsistency in mood detected | Detects inconsistencies in the expression of mood within a sentence, ensuring cohesive writing. | 2 |
| `33` | Accent Error | Incorrect or missing usage of accents | Highlights deviations in accents, promoting uniform language usage. | 4 |
| `34` | Homoglyph Error | Homoglyphs detected in text | Non-standard characters that appear identical or very similar but have a different meaning have been detected. | 2 |
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Assess Grammar & Writing Quality ](/guides/writing/check-grammar/)Learn how to use the Writing Assistant API to detect and correct writing issues.
[Writing Assistant API Reference ](/reference/actions/writing-assistant/check/)Explore the complete API reference for writing assistant, including request and response details.
---
# Writing
> Explore the data types related to writing assistance.
Writing
This section provides detailed information about the data types related to writing assistance.
[Correction Types ](/reference/data-types/writing/correction-types)Writing assistant correction categories
[Writing Assistant Response ](/reference/data-types/writing/writing-assistant)A snapshot of Writing Assistant results detected by Copyleaks.
---
# Writing Assistant Object
> A snapshot of Writing Assistant results detected by Copyleaks. It provides detailed data on writing quality, corrections, and readability.
Writing
The Writing Assistant object provides a comprehensive analysis of a submitted text, including scores, readability metrics, and detailed corrections.
score object
An object containing the overall score, readability, and text statistics.
readability object
score integer
Readability score for the submitted text. Score ranges between 0 to 100. Higher score means the text is more readable.
readabilityLevel integer
The estimated readability level of the submitted text.
Available values:
* 1 - Text is readable for 5th grader
* 2 - Text is readable for 6th grader
* 3 - Text is readable for 7th grader
* 4 - Text is readable for 8th-9th grader
* 5 - Text is readable for 10th-12th grader
* 6 - Text is readable for college student
* 7 - Text is readable for college graduate
* 8 - Text is readable for professional
readabilityLevelText string
Text corresponding to the estimated readability level. For example: “7th Grader”.
readabilityLevelDescription string
Description corresponding to the estimated readability level. For example: “Very easy to read”.
statistics object
sentenceCount integer
Number of sentences in the submitted text.
averageSentenceLength number
Average number of words in a sentence.
averageWordLength number
Average number of characters in a word.
readingTimeSeconds number
Estimated reading time of the submitted text.
speakingTimeSeconds number
Estimated speaking time of the submitted text.
corrections object
grammarCorrectionsCount integer
Total number of grammar corrections.
grammarCorrectionsScore integer
Overall grammar score.
grammarScoreWeight number
Grammar category weight in the overall score. This value is configurable upon submission.
mechanicsCorrectionsCount integer
Total number of mechanics corrections.
mechanicsCorrectionsScore integer
Overall mechanics score.
mechanicsScoreWeight number
Mechanics category weight in the overall score. This value is configurable upon submission.
sentenceStructureCorrectionsCount integer
Total number of sentence structure corrections.
sentenceStructureCorrectionsScore integer
Overall sentence structure score.
sentenceStructureScoreWeight number
Sentence structure category weight in the overall score. This value is configurable upon submission.
wordChoiceCorrectionsCount integer
Total number of word choice corrections.
wordChoiceCorrectionsScore integer
Overall word choice score.
wordChoiceScoreWeight number
Word choice category weight in the overall score. This value is configurable upon submission.
overallScore integer
Overall writing score. The score is calculated as a weighted average of the correction categories above. Weight for each category is configurable upon submission.
corrections object
An object containing the detailed corrections for the text.
text object
Corrections to be applied on the textual version. Each position in the inner arrays corresponds to a single correction to be applied to the textual version. If you use the submit endpoint, the textual version can be retrieved by using the [Export](/reference/actions/downloads/export) endpoint and exporting the crawled version.
chars object
The character positions of the corrections for the textual version. All nested arrays have the same length and each coordinate corresponds to one correction.
types array\
The classification of this correction. For example: 12 is Capitalization Error. For a full list of correction types refer to [Correction Types documentation](/guides/writing/check-grammar).
starts array\
Starting character position of the suggested text to be corrected in the textual version.
lengths array\
Length in characters of the suggested text to be corrected in the textual version.
operationTexts array\
The recommended text to substitute into the textual version.
scannedDocument object
Metadata about the scan.
scanId string
The unique scan id provided by you.
totalWords integer
Unsigned Integer
Total number of words found in the scanned text.
totalExcluded integer
Unsigned Integer
Number of excluded words in the submitted content.
credits integer
Overall credits used for the scan.
creationTime string\
The creation time of the scan.
Timezone: UTC+0
metadata object
finalUrl string\
The submitted url after all http redirects.
canonicalUrl string\
Extracted canonical url from the scanned document.
publishDate string\
Publication date of the scanned document.
creationDate string\
Creation date of the scanned document.
lastModificationDate string\
Last modification date of the scanned document.
author string
Scanned document author.
organization string
Scanned document organization.
filename string
Scanned document filename.
## Example
[Section titled “Example”](#example)
```json
{
"score": {
"corrections": {
"grammarCorrectionsCount": 2,
"grammarCorrectionsScore": 87,
"grammarScoreWeight": 1.0,
"mechanicsCorrectionsCount": 9,
"mechanicsCorrectionsScore": 38,
"mechanicsScoreWeight": 1.0,
"sentenceStructureCorrectionsCount": 0,
"sentenceStructureCorrectionsScore": 100,
"sentenceStructureScoreWeight": 1.0,
"wordChoiceCorrectionsCount": 1,
"wordChoiceCorrectionsScore": 93,
"wordChoiceScoreWeight": 1.0,
"overallScore": 79
},
"readability": {
"score": 59,
"readabilityLevel": 5,
"readabilityLevelText": "10th to 12th Grader",
"readabilityLevelDescription": "Fairly difficult to read"
},
"statistics": {
"sentenceCount": 5,
"averageSentenceLength": 12.2,
"averageWordLength": 5.5,
"readingTimeSeconds": 16.0,
"speakingTimeSeconds": 28.2
}
},
"corrections": {
"text": {
"chars": {
"types": [
5,
18,
3,
18,
18,
18,
18,
10,
18,
16,
18,
18
],
"starts": [
13,
22,
61,
104,
118,
136,
179,
233,
288,
347,
353,
374
],
"lengths": [
2,
10,
9,
6,
8,
35,
13,
9,
12,
4,
8,
11
],
"operationTexts": [
"an ",
"plagiarism ",
"businesses ",
"their ",
"original.",
"texts from the internet and data bases ",
"similarities.",
"multilingual ",
"positives, ",
"it's ",
"useful ",
"maintaining "
]
}
}
},
"scannedDocument": {
"scanId": "{scanId}",
"totalWords": 61,
"totalExcluded": 0,
"actualCredits": 1,
"expectedCredits": 1,
"creationTime": "2025-08-11T06:46:01.2886658Z"
}
}
```
## Next Steps
[Section titled “Next Steps”](#next-steps)
[Assess Grammar & Writing Quality ](/guides/writing/check-grammar/)Learn how to use the Writing Assistant API to detect and correct writing issues.
[Correction Types ](/reference/actions/writing-assistant/correction-types/)See a detailed list of all supported correction types and languages.
[Export Method ](/reference/actions/downloads/export/)Learn how to export scan results, including writing assistant data.
---
# API Reference
> Explore the comprehensive Copyleaks API reference, with detailed information about endpoints, data types, and specifications.
API Reference
Explore the comprehensive Copyleaks API reference, with detailed information about endpoints, data types, and specifications.
[Actions ](/reference/actions/overview)Endpoints for submitting scans, checking credits, downloading reports, and more.
[Data Types ](/reference/data-types/overview)Detailed informations about various data types, supported languages, and other technical details.
---
# Working with LLMs
> Copyleaks Docs provide llms.txt standard to optimize AI interactions with our documentation.
Resources
When working with any AI or Large Language Model (LLM), providing relevant and accurate context is critical for achieving high-quality results. To help developers and their AI applications better understand our documentation, we have adopted the `llms.txt` standard.
This standard provides a structured, machine-readable format that guides AI models on how to interpret and utilize our documentation, ensuring the highest level of integrity and accuracy in AI-powered applications.
Note
The `llms.txt` standard is an open initiative for GenAI Governance. You can learn more about its specification and goals at [llmstxt.org](https://llmstxt.org/).
## Available Documents
[Section titled “Available Documents”](#available-documents)
We provide several versions of our documentation in the `llms.txt` format, each tailored for different use cases:
1. ### Sitemap Version
[Section titled “Sitemap Version”](#sitemap-version)
This file provides a high-level, structured sitemap of our documentation, including page descriptions. It is ideal for use cases where a concise overview of the content is required.
[**llms.txt**](/llms.txt)
2. ### Structure-Only Version
[Section titled “Structure-Only Version”](#structure-only-version)
This file provides an index of all the pages in the documentation, showing only the titles and hierarchy. It is the most concise option, perfect for quickly understanding the structure of the documentation.
[**llms-small.txt**](/llms-small.txt)
3. ### Full Content Version
[Section titled “Full Content Version”](#full-content-version)
This file contains the entire, unabridged content of our documentation in a single markdown file, providing the most comprehensive context possible.
Caution
The full content version is extensive and may exceed the context window of some Large Language Models.
[**llms-full.txt**](/llms-full.txt)
---
# Run in Postman
> Access and utilize the Copyleaks API Postman collection for seamless integration and testing.
Resources
Postman is a popular tool that simplifies API testing and development. To help developers integrating with the Copyleaks APIs, we’ve created a Postman collection that covers all available API calls. This document will guide you through setting up the collection and making requests.
### 🚀 Get Started
[Section titled “🚀 Get Started”](#-get-started)
1. #### Fork the Copyleaks Postman Collection
[Section titled “Fork the Copyleaks Postman Collection”](#fork-the-copyleaks-postman-collection)
* Sign up or log in to your account on [**Postman**](https://www.postman.com)
* Click the button below to access the Copyleaks Postman collection:
[](https://god.gw.postman.com/run-collection/25022653-e2c2987f-c1b5-462f-8590-71d28b7f4b32?action=collection%2Ffork\&source=rip_markdown\&collection-url=entityId%3D25022653-e2c2987f-c1b5-462f-8590-71d28b7f4b32%26entityType%3Dcollection%26workspaceId%3D21147b7c-8cb3-4566-8f5d-8dfc6926eb5e)
* Select **Fork Collection**
* Name your fork and select a workspace
2. #### Authenticate Your API Requests
[Section titled “Authenticate Your API Requests”](#authenticate-your-api-requests)
* To make API calls, you need to authenticate:
* Find your **API Key** in the **[API Dashboard](https://api.copyleaks.com/dashboard)**
* In Postman, select your fork of the Copyleaks collection
* Go to the **Variables** tab and enter the following values in the **CURRENT VALUE** column:
* **email**: `YOUR_EMAIL_ADDRESS`
* **key**: `YOUR_API_KEY`
* Save the changes
* After logging in, check the response for the `access_token`
* Take the value of the `access_token` and place it in the Authorization tab of your fork in Postman as the value of Token. All endpoints will inherit this token from the parent and will use it for authentication automatically
3. #### Make API Calls
[Section titled “Make API Calls”](#make-api-calls)
You can now start making API requests.
For example, to run an AI detection scan:
* In your Postman workspace, navigate to your fork of the Copyleaks collection
* Select **AI Detection** > **Submit Natural Language** > Update the request body and add the scan ID, then click **Send**
* Review the response
## 🗺️ Next Steps
[Section titled “🗺️ Next Steps”](#️-next-steps)
[Copyleaks API in Postman ](https://www.postman.com/copyleaks-api)Check out our Copyleaks API Postman Profile
[Postman Collection ](https://documenter.getpostman.com/view/25022653/2sB34foMwz#188b7bdf-4a34-4397-88dc-ca892747dbd3)Visit the complete Copyleaks API Postman Collection documentation
[Account Documentation ](/reference/actions/account/overview/)Learn how to authenticate and get started with Copyleaks APIs
[Scans Methods ](/reference/actions/scans/overview)Discover the full list of available Scans Methods Endpoints. Submit, start, and manage plagiarism scans
---
# C# SDK Quickstart
> Install the Copyleaks C# SDK, authenticate, and submit your first scan in under 5 minutes with this step-by-step guide.
Official SDKs
This guide will walk you through installing the official C# SDK and running your first scan. In just a few minutes, you’ll be able to check content for plagiarism, AI-generated text, and more directly from your .NET application.
## 🔑 Before you begin
In order to start integrating Copyleaks API, you'll need an account and an API key:
* Don't have an account? **[Sign up for free](https://api.copyleaks.com/signup)**
* You can find your API key on the **[API Dashboard](https://api.copyleaks.com/dashboard)**
## 🚀 Get Started
[Section titled “🚀 Get Started”](#-get-started)
1. **Installation**
First, install the official `Copyleaks` package from NuGet into your project using the Package Manager Console.
```powershell
Install-Package Copyleaks
```
2. **Quick Example: Scan Text**
Caution
Remember to replace the placeholder credentials and webhook URL with your actual values.
Program.cs
```csharp
using System;
using System.Text;
using System.Threading.Tasks;
using Copyleaks.SDK.V3.API;
using Copyleaks.SDK.V3.API.Models.Requests;
using Copyleaks.SDK.V3.API.Models.Requests.Properties;
public class Program
{
// --- Your Credentials ---
private const string USER_EMAIL = "YOUR_EMAIL_ADDRESS";
private const string USER_KEY = "YOUR_API_KEY";
private const string WEBHOOK_URL = "https://your-server.com/webhook/{STATUS}";
// --------------------
public static async Task Main(string[] args)
{
try
{
// Log in to the Copyleaks API
Console.WriteLine("Authenticating...");
var identityClient = new CopyleaksIdentityApi();
var loginResponse = await identityClient.LoginAsync(USER_EMAIL, USER_KEY);
Console.WriteLine("✅ Logged in successfully!");
// Prepare your content for scanning
Console.WriteLine("Submitting text for scanning...");
var apiClient = new CopyleaksScansApi();
var scanId = Guid.NewGuid().ToString();
var textToScan = "Hello world, this is a test.";
var base64Content = Convert.ToBase64String(Encoding.UTF8.GetBytes(textToScan));
// Configure the scan
var scanProperties = new ClientScanProperties();
scanProperties.Sandbox = true; // Turn on sandbox mode for testing
scanProperties.Webhooks = new Webhooks { Status = new Uri($"{WEBHOOK_URL}") };
var fileDocument = new FileDocument
{
Base64 = base64Content,
Filename = "test.txt",
PropertiesSection = scanProperties
};
// Submit the scan to Copyleaks
await apiClient.SubmitFileAsync(scanId, fileDocument, loginResponse.Token);
Console.WriteLine($"🚀 Scan submitted successfully! Scan ID: {scanId}");
Console.WriteLine("You will be notified via your webhook when the scan is complete.");
}
catch (Exception ex)
{
Console.WriteLine($"🛑 An error occurred: {ex.Message}");
}
}
}
```
3. **Understanding the Code**
The example code performs four main actions to submit a scan:
1. **Login:** It authenticates with your email and API key to get a secure login token. This token is required for all subsequent requests.
2. **Prepare Content:** It takes a simple string of text and converts it into a Base64 string.
3. **Configure Scan:** It creates a `ClientScanProperties` object to define the scan’s behavior. We enable `sandbox` mode for safe testing and provide a `webhook` URL for completion notifications.
4. **Submit for Scanning:** It creates a `FileDocument` with the content and properties, then sends it to the Copyleaks API. The process is asynchronous; Copyleaks will notify your webhook URL once the scan is complete.
## 🗺️ Next Steps
[Section titled “🗺️ Next Steps”](#️-next-steps)
Now that you’ve submitted your first scan, here are some recommended steps:
### Package Source
[Section titled “Package Source”](#package-source)
[GitHub Repository ](https://github.com/Copyleaks/.net-core-plagiarism-checker)Check the official SDK repository on GitHub for more examples and details.
[NuGet Package ](https://www.nuget.org/packages/Copyleaks)View the official package on the NuGet Gallery to see all available versions.
[Check for Plagiarism ](/guides/authenticity/detect-plagiarism-text)Detect plagiarism in text documents using the Copyleaks API. Search billions of sources to find unoriginal content.
[Detect AI-Generated Content ](/guides/ai-detector/ai-text-detection)Detect AI-generated text via sync or async API calls. This guide covers sync detection—see the Authenticity API Guide for async.
[Assess Grammar and Writing Quality ](/guides/writing/check-grammar)Get writing and grammar suggestions via API. Authenticate, submit text, and access full details in the docs.
[Moderate Text ](/guides/moderation/moderate-text)Scan and moderate text content for unsafe or policy-relevant material across 10+ categories.
---
# Java Quickstart Guide
> Install the Copyleaks Java SDK, authenticate, and submit your first scan in under 5 minutes with this step-by-step guide.
Official SDKs
This guide will walk you through installing the official Java SDK and running your first scan. In just a few minutes, you’ll be able to check content for plagiarism, AI-generated text, moderation and more directly from your Java application.
## 🔑 Before you begin
In order to start integrating Copyleaks API, you'll need an account and an API key:
* Don't have an account? **[Sign up for free](https://api.copyleaks.com/signup)**
* You can find your API key on the **[API Dashboard](https://api.copyleaks.com/dashboard)**
## 🚀 Get Started
[Section titled “🚀 Get Started”](#-get-started)
1. **Installation**
The SDK requires **Java 11 or higher**. Add the official `copyleaks-java-sdk` dependency to your project’s `pom.xml` file.
pom.xml
```xml
com.copyleaks.sdk
copyleaks-java-sdk
4.3.0
```
2. **Quick Example: Scan Text**
Caution
Remember to replace the placeholder credentials and webhook URL with your actual values.
ScanExample.java
```java
import classes.Copyleaks;
import models.response.CopyleaksAuthToken;
import models.submissions.CopyleaksFileSubmissionModel;
import models.submissions.properties.SubmissionProperties;
import models.submissions.properties.SubmissionWebhooks;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Random;
public class ScanExample {
// --- Your Credentials ---
private static final String EMAIL_ADDRESS = "YOUR_EMAIL_ADDRESS";
private static final String KEY = "YOUR_API_KEY";
private static final String WEBHOOK_URL = "[https://your-server.com/webhook/](https://your-server.com/webhook/){STATUS}";
// --------------------
public static void main(String[] args) {
CopyleaksAuthToken token;
try {
// Log in to the Copyleaks API
System.out.println("Authenticating...");
token = Copyleaks.login(EMAIL_ADDRESS, KEY);
System.out.println("✅ Logged in successfully!");
// Prepare your content for scanning
System.out.println("Submitting text for scanning...");
String textToScan = "Hello world, this is a test.";
String base64Content = Base64.getEncoder().encodeToString(textToScan.getBytes(StandardCharsets.UTF_8));
String filename = "test.txt";
String scanId = Integer.toString(new Random().nextInt(100000));
// Configure the scan
SubmissionWebhooks webhooks = new SubmissionWebhooks(WEBHOOK_URL);
SubmissionProperties submissionProperties = new SubmissionProperties(webhooks);
submissionProperties.setSandbox(true); // Turn on sandbox mode for testing
CopyleaksFileSubmissionModel submissionModel = new CopyleaksFileSubmissionModel(base64Content, filename, submissionProperties);
// Submit the scan to Copyleaks
Copyleaks.submitFile(token, scanId, submissionModel);
System.out.println("🚀 Scan submitted successfully! Scan ID: " + scanId);
System.out.println("You will be notified via your webhook when the scan is complete.");
} catch (Exception e) {
System.out.println("🛑 An error occurred:");
e.printStackTrace();
}
}
}
```
3. **Understanding the Code**
The example code performs four main actions to submit a scan:
1. **Login:** It authenticates with your email and API key to get a secure `CopyleaksAuthToken` object, which is required for all subsequent requests.
2. **Prepare Content:** It takes a simple string of text and encodes it into Base64 format.
3. **Configure Scan:** It creates a `SubmissionProperties` object containing `SubmissionWebhooks` to define the scan’s behavior. We enable `sandbox` mode for safe testing and provide the webhook URL.
4. **Submit for Scanning:** It creates a `CopyleaksFileSubmissionModel` with the content and properties, then sends it to the Copyleaks API. The process is asynchronous; Copyleaks will notify your webhook URL once the scan is complete.
## 🗺️ Next Steps
[Section titled “🗺️ Next Steps”](#️-next-steps)
Now that you’ve submitted your first scan, here are some recommended steps:
### Package Source
[Section titled “Package Source”](#package-source)
[GitHub Repository ](https://github.com/Copyleaks/Java-Plagiarism-Checker)Check the official SDK repository on GitHub for more examples and details.
[Maven Central ](https://central.sonatype.com/artifact/com.copyleaks.sdk/copyleaks-java-sdk?smo=true)View the official package on the Maven Central Repository to see all available versions.
[Check for Plagiarism ](/guides/authenticity/detect-plagiarism-text)Detect plagiarism in text documents using the Copyleaks API. Search billions of sources to find unoriginal content.
[Detect AI-Generated Content ](/guides/ai-detector/ai-text-detection)Detect AI-generated text via sync or async API calls. This guide covers sync detection—see the Authenticity API Guide for async.
[Assess Grammar and Writing Quality ](/guides/writing/check-grammar)Get writing and grammar suggestions via API. Authenticate, submit text, and access full details in the docs.
[Moderate Text ](/guides/moderation/moderate-text)Scan and moderate text content for unsafe or policy-relevant material across 10+ categories.
---
# JavaScript Quickstart Guide
> Install the Copyleaks JavaScript SDK, authenticate, and submit your first scan in minutes with this step-by-step guide.
Official SDKs
This guide will walk you through installing the official JavaScript SDK and running your first scan. In just a few minutes, you’ll be able to easily use Copyleaks products directly from your JavaScript or TypeScript application.
## 🔑 Before you begin
In order to start integrating Copyleaks API, you'll need an account and an API key:
* Don't have an account? **[Sign up for free](https://api.copyleaks.com/signup)**
* You can find your API key on the **[API Dashboard](https://api.copyleaks.com/dashboard)**
## 🚀 Get Started
[Section titled “🚀 Get Started”](#-get-started)
1. **Installation**
First, install the official `plagiarism-checker` package from npm into your project.
```bash
npm i plagiarism-checker
```
2. **Quick Example: Scan Text**
The following example shows how to authenticate and submit a simple string of text for a plagiarism scan using the SDK’s data models.
Caution
Remember to replace the placeholder credentials and webhook URL with your actual values.
* JavaScript
scan.js
```javascript
const { Copyleaks, CopyleaksFileSubmissionModel } = require('plagiarism-checker');
// --- Your Credentials ---
const EMAIL_ADDRESS = 'YOUR_EMAIL_ADDRESS';
const KEY = 'YOUR_API_KEY';
const WEBHOOK_URL = 'https://your-server.com/webhook/{STATUS}';
// --------------------
async function main() {
console.log('Authenticating...');
const copyleaks = new Copyleaks();
const authToken = await copyleaks.loginAsync(EMAIL_ADDRESS, KEY);
console.log('✅ Login successful!');
console.log('Submitting text for scanning...');
const scanId = `${Date.now()}`; // Use a timestamp for a unique ID
const textToScan = 'Hello world, this is a test.';
const base64Content = Buffer.from(textToScan).toString('base64');
const submission = new CopyleaksFileSubmissionModel(
base64Content,
'test.txt',
{
sandbox: true, // Turn on sandbox mode for testing
webhooks: {
status: WEBHOOK_URL
}
}
);
await copyleaks.submitFileAsync(authToken, scanId, submission);
console.log(`🚀 Scan submitted successfully! Scan ID: ${scanId}`);
}
main().catch(err => console.error(err));
```
* TypeScript
scan.ts
```typescript
import {
Copyleaks,
CopyleaksFileSubmissionModel,
type CopyleaksAuthToken
} from 'plagiarism-checker';
// --- Your Credentials ---
const EMAIL_ADDRESS = 'YOUR_EMAIL_ADDRESS';
const KEY = 'YOUR_API_KEY';
const WEBHOOK_URL = 'https://your-server.com/webhook/{STATUS}';
// --------------------
async function main() {
console.log('Authenticating...');
const copyleaks = new Copyleaks();
const authToken: CopyleaksAuthToken = await copyleaks.loginAsync(EMAIL_ADDRESS, KEY);
console.log('✅ Login successful!');
console.log('Submitting text for scanning...');
const scanId = `${Date.now()}`; // Use a timestamp for a unique ID
const textToScan = 'Hello world, this is a test.';
const base64Content = Buffer.from(textToScan).toString('base64');
const submission = new CopyleaksFileSubmissionModel(
base64Content,
'test.txt',
{
sandbox: true, // Turn on sandbox mode for testing
webhooks: {
status: WEBHOOK_URL
}
}
);
await copyleaks.submitFileAsync(authToken, scanId, submission);
console.log(`🚀 Scan submitted successfully! Scan ID: ${scanId}`);
}
main().catch(err => console.error(err));
```
3. **Understanding the Code**
1. **Login**: We authenticate with your email and API key to get a secure login token.
2. **Prepare Submission**: We encode a string to Base64 and create a new `CopyleaksFileSubmissionModel`. This model is the recommended way to structure your submission data.
3. **Configure & Submit**: We pass the submission model to `submitFileAsync`. The model itself contains the sandbox settings and the webhook URL where Copyleaks will send a notification when the scan is complete.
## 🗺️ Next Steps
[Section titled “🗺️ Next Steps”](#️-next-steps)
Now that you’ve submitted your first scan, here are some recommended steps:
### Package Source
[Section titled “Package Source”](#package-source)
[GitHub Repository ](https://github.com/Copyleaks/NodeJS-Plagiarism-Checker)Check the official Copyleaks NodeJS SDK repository on GitHub for installation and usage details.
[NPM Package ](https://www.npmjs.com/package/plagiarism-checker)Install the official Copyleaks NodeJS package from NPM for easy integration.
[Check for Plagiarism ](/guides/authenticity/detect-plagiarism-text)Detect plagiarism in text documents using the Copyleaks API. Search billions of sources to find unoriginal content.
[Detect AI-Generated Content ](/guides/ai-detector/ai-text-detection)Detect AI-generated text via sync or async API calls. This guide covers sync detection—see the Authenticity API Guide for async.
[Assess Grammar and Writing Quality ](/guides/writing/check-grammar)Get writing and grammar suggestions via API. Authenticate, submit text, and access full details in the docs.
[Moderate Text ](/guides/moderation/moderate-text)Scan and moderate text content for unsafe or policy-relevant material across 10+ categories.
---
# Official SDKs & Libraries
> Accelerate your integration with our official SDKs. Connect to the Copyleaks API with just a few lines of code and start building with confidence.
Official SDKs
Integrate the full power of the Copyleaks API with just a few lines of code. Our official Software Development Kits (SDKs) are designed to provide a seamless developer experience, allowing you to build robust applications quickly and confidently.
### The Developer Experience
[Section titled “The Developer Experience”](#the-developer-experience)
We are committed to providing a best-in-class developer experience. Our SDKs are:
Built for Speed
Save hours of development time with pre-built functions for every API endpoint.
Continuously Updated
Our SDKs are always in sync with the latest API features, so you can take advantage of new capabilities as soon as they are released.
Production-Ready
Rely on officially maintained, production-ready code with comprehensive documentation and clear examples.
Simple to Use
We handle the complexities of authentication, request signing, and error handling, so you can focus on building great features for your users.
### Get Started with Your Language
[Section titled “Get Started with Your Language”](#get-started-with-your-language)
Select an official SDK for your preferred programming language and start building with Copyleaks today.
[Python ](/resources/sdks/python)
[JavaScript ](/resources/sdks/javascript)
[Java ](/resources/sdks/java)
[C# ](/resources/sdks/csharp)
[PHP ](/resources/sdks/php)
[Ruby ](/resources/sdks/ruby)
---
# PHP Quickstart Guide
> Install the Copyleaks PHP SDK, authenticate, and submit your first scan in under 5 minutes with this step-by-step guide.
Official SDKs
This guide will walk you through installing the official PHP SDK and running your first scan. In just a few minutes, you’ll be able to check content for plagiarism, AI-generated text, and more directly from your PHP application.
## 🔑 Before you begin
In order to start integrating Copyleaks API, you'll need an account and an API key:
* Don't have an account? **[Sign up for free](https://api.copyleaks.com/signup)**
* You can find your API key on the **[API Dashboard](https://api.copyleaks.com/dashboard)**
## 🚀 Get Started
[Section titled “🚀 Get Started”](#-get-started)
1. **Installation**
First, install the official `copyleaks/php-plagiarism-checker` package from Packagist into your project using Composer.
```bash
composer require copyleaks/php-plagiarism-checker
```
2. **Quick Example: Scan Text**
Caution
Remember to replace the placeholder credentials and webhook URL with your actual values.
scan.php
```php
login($EMAIL_ADDRESS, $KEY);
echo "✅ Logged in successfully!\n";
// Prepare your content for scanning
echo "Submitting text for scanning...\n";
$textToScan = "Hello world, this is a test.";
$base64Content = base64_encode($textToScan);
$scanId = time();
// Configure the scan
$webhooks = new SubmissionWebhooks($WEBHOOK_URL);
$properties = new SubmissionProperties($webhooks);
$properties->setSandbox(true); // Turn on sandbox mode for testing
$submission = new CopyleaksFileSubmissionModel($base64Content, 'test.txt', $properties);
// Submit the scan to Copyleaks
$copyleaks->submitFile($loginToken, $scanId, $submission);
echo "🚀 Scan submitted successfully! Scan ID: " . $scanId . "\n";
echo "You will be notified via your webhook when the scan is complete.\n";
} catch (Exception $e) {
echo "🛑 An error occurred: " . $e->getMessage() . "\n";
}
```
3. **Understanding the Code**
The example code performs four main actions to submit a scan:
1. **Login:** It authenticates with your email and API key to get a secure login token, which is required for all subsequent requests.
2. **Prepare Content:** It takes a simple string of text and encodes it into Base64 format.
3. **Configure Scan:** It creates a `SubmissionProperties` object containing `SubmissionWebhooks` to define the scan’s behavior. We enable `sandbox` mode for safe testing and provide the webhook URL.
4. **Submit for Scanning:** It creates a `CopyleaksFileSubmissionModel` with the content and properties, then sends it to the Copyleaks API. The process is asynchronous; Copyleaks will notify your webhook URL once the scan is complete.
## 🗺️ Next Steps
[Section titled “🗺️ Next Steps”](#️-next-steps)
Now that you’ve submitted your first scan, here are some recommended steps:
### Package Source
[Section titled “Package Source”](#package-source)
[GitHub Repository ](https://github.com/Copyleaks/PHP-Plagiarism-Checker)Check the official SDK repository on GitHub for more examples and details.
[Packagist Package ](https://packagist.org/packages/copyleaks/php-plagiarism-checker)View the official package on Packagist to see all available versions.
[Check for Plagiarism ](/guides/authenticity/detect-plagiarism-text)Detect plagiarism in text documents using the Copyleaks API. Search billions of sources to find unoriginal content.
[Detect AI-Generated Content ](/guides/ai-detector/ai-text-detection)Detect AI-generated text via sync or async API calls. This guide covers sync detection—see the Authenticity API Guide for async.
[Assess Grammar and Writing Quality ](/guides/writing/check-grammar)Get writing and grammar suggestions via API. Authenticate, submit text, and access full details in the docs.
[Moderate Text ](/guides/moderation/moderate-text)Scan and moderate text content for unsafe or policy-relevant material across 10+ categories.
---
# Python SDK Quickstart
> Install the Copyleaks Python SDK, authenticate, and submit your first scan in under 5 minutes with this step-by-step guide.
Official SDKs
This guide will walk you through installing the official Python SDK and running your first scan. In just a few minutes, you’ll be able to run your first scan directly from your Python application.
## 🔑 Before you begin
In order to start integrating Copyleaks API, you'll need an account and an API key:
* Don't have an account? **[Sign up for free](https://api.copyleaks.com/signup)**
* You can find your API key on the **[API Dashboard](https://api.copyleaks.com/dashboard)**
## 🚀 Get Started
[Section titled “🚀 Get Started”](#-get-started)
1. **Installation**
First, install the official `copyleaks` package from PyPI into your project using pip:
```bash
pip install copyleaks
```
2. **Quick Example: Scan Text**
Caution
Remember to replace the placeholder `YOUR_EMAIL_ADDRESS` and `YOUR_API_KEY` with your actual credentials.
scan\_text.py
```python
import base64
from copyleaks.copyleaks import Copyleaks
from copyleaks.exceptions.command_error import CommandError
from copyleaks.models.submit.document import FileDocument
from copyleaks.models.submit.properties.scan_properties import ScanProperties
# --- Your Credentials ---
EMAIL_ADDRESS = 'YOUR_EMAIL_ADDRESS'
KEY = 'YOUR_API_KEY'
# --------------------
# Log in to the Copyleaks API
try:
auth_token = Copyleaks.login(EMAIL_ADDRESS, KEY)
print("✅ Logged in successfully!")
except CommandError as ce:
print(f"🛑 Login failed: {ce}")
exit()
# Prepare your content for scanning
# You can scan a URL, a local file, or raw text.
# This example scans a simple string of text.
print("Submitting text for scanning...")
text_to_scan = "Hello world, this is a test."
base64_content = base64.b64encode(text_to_scan.encode()).decode()
# Configure the scan
# A unique scan ID for this submission
scan_id = "my-first-scan"
scan_properties = ScanProperties("https://your-server.com/webhook/{STATUS}")
scan_properties.set_sandbox(True) # Turn on sandbox mode for testing
file_submission = FileDocument(base64_content, "test.txt")
file_submission.set_properties(scan_properties)
# Submit the scan to Copyleaks
Copyleaks.submit_file(auth_token, scan_id, file_submission)
print(f"🚀 Scan submitted successfully! Scan ID: {scan_id}")
print("You will be notified via your webhook when the scan is complete.")
```
3. **Understanding the Code**
The example code performs four main actions to submit a scan:
1. **Login:** It authenticates with your email and API key to get a secure login token from the Copyleaks server. This token is required for all subsequent requests.
2. **Prepare Content:** It takes a simple string of text and encodes it into Base64 format. The SDK requires content to be in this format for submission.
3. **Configure Scan:** It creates a `ScanProperties` object to define the scan’s behavior. We enable `sandbox` mode for safe testing without using credits and provide a `webhook` URL.
4. **Submit for Scanning:** It sends the prepared content and its configuration to the Copyleaks API. The process is asynchronous, meaning you don’t have to wait for the results. Instead, Copyleaks will notify your webhook URL once the scan is complete.
## 🗺️ Next Steps
[Section titled “🗺️ Next Steps”](#️-next-steps)
Now that you’ve submitted your first scan, here are some recommended steps:
### Package Source
[Section titled “Package Source”](#package-source)
[GitHub Repository ](https://github.com/Copyleaks/Python-Plagiarism-Checker)Check the official Copyleaks Python SDK repository on GitHub for installation and usage details.
[PyPi Package ](https://pypi.org/project/copyleaks/)Install the official Copyleaks Python package from PyPI for easy integration.
[Check for Plagiarism ](/guides/authenticity/detect-plagiarism-text)Detect plagiarism in text documents using the Copyleaks API. Search billions of sources to find unoriginal content.
[Detect AI-Generated Content ](/guides/ai-detector/ai-text-detection)Detect AI-generated text via sync or async API calls. This guide covers sync detection—see the Authenticity API Guide for async.
[Assess Grammar and Writing Quality ](/guides/writing/check-grammar)Get writing and grammar suggestions via API. Authenticate, submit text, and access full details in the docs.
[Moderate Text ](/guides/moderation/moderate-text)Scan and moderate text content for unsafe or policy-relevant material across 10+ categories.
---
# Ruby Quickstart Guide
> Install the Copyleaks Ruby SDK, authenticate, and submit your first scan in under 5 minutes with this step-by-step guide.
Official SDKs
This guide will walk you through installing the official Ruby SDK and running your first scan. In just a few minutes, you’ll be able to check content for plagiarism, AI-generated text, and more directly from your Ruby application.
## 🔑 Before you begin
In order to start integrating Copyleaks API, you'll need an account and an API key:
* Don't have an account? **[Sign up for free](https://api.copyleaks.com/signup)**
* You can find your API key on the **[API Dashboard](https://api.copyleaks.com/dashboard)**
## 🚀 Get Started
[Section titled “🚀 Get Started”](#-get-started)
1. **Installation**
First, install the official `plagiarism-checker` gem from RubyGems into your project.
```bash
gem install plagiarism-checker
```
2. **Quick Example: Scan Text**
Caution
Remember to replace the placeholder credentials and webhook URL with your actual values.
scan.rb
```ruby
require 'copyleaks'
require 'base64'
# --- Your Credentials ---
USER_EMAIL = 'YOUR_EMAIL_ADDRESS'
USER_API_KEY = 'YOUR_API_KEY'
WEBHOOK_URL = 'https://your-server.com/webhook/{STATUS}'
# --------------------
begin
# Log in to the Copyleaks API
puts "Authenticating..."
copyleaks = Copyleaks::API.new
auth_token = copyleaks.login(USER_EMAIL, USER_API_KEY)
puts "✅ Logged in successfully!"
# Prepare your content for scanning
puts "Submitting text for scanning..."
scan_id = Time.now.to_i.to_s
text_to_scan = 'Hello world, this is a test.'
base64_content = Base64.strict_encode64(text_to_scan)
# Configure the scan
webhooks = Copyleaks::SubmissionWebhooks.new(WEBHOOK_URL)
properties = Copyleaks::SubmissionProperties.new(webhooks)
properties.sandbox = true # Turn on sandbox mode for testing
submission = Copyleaks::CopyleaksFileSubmissionModel.new(
base64_content,
'test.txt',
properties
)
# Submit the scan to Copyleaks
copyleaks.submit_file(auth_token, scan_id, submission)
puts "🚀 Scan submitted successfully! Scan ID: #{scan_id}"
puts "You will be notified via your webhook when the scan is complete."
rescue StandardError => e
puts "🛑 An error occurred: #{e.message}"
end
```
3. **Understanding the Code**
The example code performs four main actions to submit a scan:
1. **Login:** It authenticates with your email and API key to get a secure login token, which is required for all subsequent requests.
2. **Prepare Content:** It takes a simple string of text and encodes it into Base64 format.
3. **Configure Scan:** It creates a `SubmissionProperties` object containing `SubmissionWebhooks` to define the scan’s behavior. We enable `sandbox` mode for safe testing and provide the webhook URL.
4. **Submit for Scanning:** It creates a `CopyleaksFileSubmissionModel` with the content and properties, then sends it to the Copyleaks API. The process is asynchronous; Copyleaks will notify your webhook URL once the scan is complete.
## 🗺️ Next Steps
[Section titled “🗺️ Next Steps”](#️-next-steps)
Now that you’ve submitted your first scan, here are some recommended steps:
### Package Source
[Section titled “Package Source”](#package-source)
[GitHub Repository ](https://github.com/Copyleaks/Ruby-Plagiarism-Checker)Check the official SDK repository on GitHub for more examples and details.
[RubyGems Package ](https://rubygems.org/gems/plagiarism-checker)View the official package on RubyGems.org to see all available versions.
[Check for Plagiarism ](/guides/authenticity/detect-plagiarism-text)Detect plagiarism in text documents using the Copyleaks API. Search billions of sources to find unoriginal content.
[Detect AI-Generated Content ](/guides/ai-detector/ai-text-detection)Detect AI-generated text via sync or async API calls. This guide covers sync detection—see the Authenticity API Guide for async.
[Assess Grammar and Writing Quality ](/guides/writing/check-grammar)Get writing and grammar suggestions via API. Authenticate, submit text, and access full details in the docs.
[Moderate Text ](/guides/moderation/moderate-text)Scan and moderate text content for unsafe or policy-relevant material across 10+ categories.
---
# Release Notes
> Release notes for Copyleaks API updates.
Updates & Support
Please periodically check this page to get official updates on the product. In this document, you will find information about product updates, new releases, deprecated functionality, bug fixes, and known issues.
## July 08, 2025 NEW
[Section titled “July 08, 2025 ”](#july-08-2025)
**Text Moderation API Launch**
We are pleased to announce the launch of our new Text Moderation API, designed to help you maintain safe and appropriate content across your platform.
**Key Features:**
* **Real-time content analysis** - Get instant results for submitted text
* **10+ moderation categories** - Detect hate speech, toxic language, adult content, violence, self-harm, cybersecurity threats, and more
* **Precise flagging** - Receive exact character positions for each flagged segment
* **Simple integration** - RESTful API that fits seamlessly into any content workflow
Visit our [Text Moderation API documentation](/guides/moderation/moderate-text/) to learn more and start integrating today.
***
## May 15, 2025 NEW
[Section titled “May 15, 2025 ”](#may-15-2025)
**PDF Report Version Management**
A new field has been added for scan submissions:
* `properties.pdf.reportVersion` - Specifies which version of the PDF report to generate. This string-based property overrides the legacy `version` (integer) property if both are provided. It also allows you to select the latest stable version of the PDF report by using `"latest"`.
**Default Behavior:** If neither `reportVersion` nor `version` is set:
* New users (created after **2025-05-15**) receive **v3** by default
* Existing users receive **v1** by default
***
## May 14, 2025 NEW
[Section titled “May 14, 2025 ”](#may-14-2025)
**AI Source Match Feature Launch**
In an evolving digital landscape, understanding the origin and nature of content is more crucial than ever. AI Source Match revolutionizes our plagiarism and AI detection capabilities by identifying online sources that are suspected to be AI-generated.
**Key Benefits:**
* **Comprehensive Plagiarism Analysis** - Go beyond standard plagiarism checks by providing insights into whether the source of plagiarized content is likely AI-generated
* **Deeper Source Intelligence** - Gain a clearer understanding of the authenticity of external sources, helping you assess content originality more thoroughly
* **Enhanced Authenticity & Integrity** - Equip yourself with advanced tools to better uphold originality and academic/creative integrity by identifying both direct plagiarism and reliance on AI-generated source material
**Implementation:** The `properties.aiSourceMatch` feature can be easily activated with the `enable` parameter within your Authenticity API calls.
***
## May 08, 2025 NEW
[Section titled “May 08, 2025 ”](#may-08-2025)
**Display Language Support**
A new field has been added for scan submissions:
* **Display Language** - When specified, the PDF report will be generated in the selected language. Future updates may also apply this setting to the overview and other components.
***
## March 09, 2025 NEW
[Section titled “March 09, 2025 ”](#march-09-2025)
**Overview API Introduction**
Copyleaks introduces the Overview API to provide key insights from user scans and author’s historical data.
**Features:**
* **Gen AI Overview** - Delivers a thorough analysis of each submitted scan, summarizing its content and identifying central themes or patterns
* **Key Insights Analysis** - Pinpoints notable findings and directs user attention to significant details within the scanned material
* **Historical Context** - When historical scan data is available, incorporates past insights and trends to provide a richer, context-driven perspective on current scan results
***
## March 05, 2025 NEW
[Section titled “March 05, 2025 ”](#march-05-2025)
**Course and Assignment Identification**
New fields have been added for scan submissions:
* **Course ID** - A unique identifier for the course associated with the submission
* **Assignment ID** - A unique identifier for the assignment associated with the submission
***
## April 18, 2024 NEW
[Section titled “April 18, 2024 ”](#april-18-2024)
**Enhanced Alert Categorization**
A new field has been added for alerts in the completed webhook response:
* `category` - Scan alert category
***
## April 16, 2024 NEW
[Section titled “April 16, 2024 ”](#april-16-2024)
**AI Content Detection Model Versioning**
Added a new field to the response of AI Content Detection:
* `modelVersion` - The version of the AI Content Detection model used
***
## April 16, 2024 NEW
[Section titled “April 16, 2024 ”](#april-16-2024--1)
**ID Pattern Filtering for Scan Results**
Added a new field in the different types of Submit Endpoints in the API:
* `properties.scanning.include.idPattern` - Includes results only if their scan ID matches the supplied pattern. Matched submissions will be the only submissions included from Shared Data Hub and Private Cloud Hubs results.
Documentation available in the [API Reference](/reference/actions/overview).
***
## April 4, 2024 NEW
[Section titled “April 4, 2024 ”](#april-4-2024)
**Alert Types Documentation**
Added comprehensive [Alert Types documentation](/reference/data-types/authenticity/scan-alerts).
When scanning with Copyleaks, various alerts may be received in your Completion Webhook for AI detection, writing suggestions, failed scans, cheating, and more. This page provides a complete list of possible alerts.
***
## February 26, 2024 NEW
[Section titled “February 26, 2024 ”](#february-26-2024)
**Writing Assistant API Enhancement**
New field added to the Writing Assistant API - [Get Correction Types](/reference/data-types/writing/correction-types):
* `correctionTypes[].category` - Category of the correction type
***
## February 26, 2024 NEW
[Section titled “February 26, 2024 ”](#february-26-2024--1)
**Language Code Support**
New field added to the request body for:
* [AI Content Detection - Submit Natural Language](/reference/actions/writer-detector/check)
* [Writing Assistant - Submit Text](/reference/actions/writing-assistant/check)
* `language` - The language code of your content. The selected language should be from the Supported Languages list. If not supplied, the system will automatically detect the content language.
***
## February 25, 2024 NEW
[Section titled “February 25, 2024 ”](#february-25-2024)
**Private Cloud Hubs API**
Introduction of the [Private Cloud Hubs API](/reference/actions/private-cloud-hub/overview).
Retrieve Private Cloud Hub information including credit consumption, metadata values, and current status. Requires “Super Admin” or “Admin” role.
***
## December 7, 2023 NEW
[Section titled “December 7, 2023 ”](#december-7-2023)
**Writing Assistant API Launch**
Introduction of the [Writing Assistant API](/reference/actions/writing-assistant/overview).
Writing Assistant offers real-time, AI-driven writing corrections, serving as a virtual assessment API capable of providing constructive critiques and instantaneous enhancements to textual content.
***
## September 28, 2023 NEW
[Section titled “September 28, 2023 ”](#september-28-2023)
**AI Content Detection for Source Code**
Launch of [AI Content Detection API for Source Code](/reference/actions/writer-detector/overview).
Use Copyleaks AI Content Detection to differentiate between human-written and AI-generated source code.
***
## May 3, 2023 NEW
[Section titled “May 3, 2023 ”](#may-3-2023)
**PDF Report Version 2 Public Release**
PDF version 2 is now publicly available for API users. The updated PDF report includes AI detection results, cheat alerts, and an updated interface. To enable the newest version, edit the `properties.pdf.version` flag of the [Submit endpoint](/reference/actions/scans/overview).
***
## January 29, 2023 NEW
[Section titled “January 29, 2023 ”](#january-29-2023)
**Document Template Exclusion**
You can now easily exclude document template text from plagiarism scanning. For more information, check the `properties.exclude.documentTemplateIds` flag on the [Submit endpoint](/reference/actions/scans/overview).
***
## January 12, 2023 NEW
[Section titled “January 12, 2023 ”](#january-12-2023)
**AI Content Detection API Launch**
Launch of the AI Content Detection API, which confirms whether provided text was created by a human or AI.
Read the [AI Content Detection API Documentation](/reference/actions/writer-detector/overview).
***
## January 1, 2023 NEW
[Section titled “January 1, 2023 ”](#january-1-2023)
**AI Content Detection Integration**
AI Content Detection is now available as an option within the plagiarism detection API. To enable this option, use the flag `properties.aiGeneratedText.detect`.
Documentation available for the [Submit endpoint](/reference/actions/scans/overview).
***
## November 13, 2022 NEW
[Section titled “November 13, 2022 ”](#november-13-2022)
**Cross-Language Plagiarism Detection**
Launch of Cross-Language Plagiarism Detection feature. Scans can be performed on uploaded documents across nearly 30 languages, with additional languages regularly added. For example, a document uploaded in English can find potential plagiarism matches in Chinese, Spanish, German, or any other selected language.
To activate this feature, use the flag: `properties.scanning.crossLanguages.languages[]`.
Documentation available for the [Submit endpoint](/reference/actions/scans/overview).
***
## November 1, 2022 NEW
[Section titled “November 1, 2022 ”](#november-1-2022)
**New-Result Webhook Enhancement**
Added two fields to the [New-Result webhook](/reference/data-types/authenticity/results/new-result):
* `developerPayload` - The developer payload provided in the submit method
* `score` - The current aggregate score of the scan up to this point
***
## May 25, 2022 NEW
[Section titled “May 25, 2022 ”](#may-25-2022)
**Product Unification**
Merged Education and Business products into one unified product that includes all features from both previous products.
**Key Changes:**
* Former Business users can now access Education-exclusive features, such as the Copyleaks Shared Data Hub
* [New endpoints](/reference/actions/scans/overview) available for the merged product (existing integrations remain unchanged)
* Pricing model aligned with Education pricing model (existing subscriptions unchanged)
***
## February 9, 2022 NEW
[Section titled “February 9, 2022 ”](#february-9-2022)
**Indexed Document Masking Policy**
Added support for indexed document masking policy for repository users. Define custom masking policies for each document in your repository.
For more information, see the `properties.indexing.repositories[].maskingPolicy` flag on the submit method.
***
## February 8, 2022 NEW
[Section titled “February 8, 2022 ”](#february-8-2022)
**Enhanced URL Submission Control**
Added options to control HTTP headers (`headers` field) and request method (`verb` field) when using Submit by URL for both Business and Education users.
***
## February 6, 2022 NEW
[Section titled “February 6, 2022 ”](#february-6-2022)
**Copyleaks Platform Release**
Released new version of Copyleaks with comprehensive management capabilities:
* [Copyleaks Identity](https://id.copyleaks.com) - Manage security settings, billing, and teams or Private Cloud Hubs
* [Copyleaks Authentication](https://id.copyleaks.com/security) - Multi-factor authentication options: email or authenticator app
* [Copyleaks Teams](https://admin.copyleaks.com/members) & [Private Cloud Hubs](https://admin.copyleaks.com/repositories) - Manage users, documents, analytics, and permissions
* [Copyleaks Billing](https://id.copyleaks.com/billing) - View current plan, past invoices, and billing information
***
## January 9, 2022 NEW
[Section titled “January 9, 2022 ”](#january-9-2022)
**Credits Management Documentation**
Added comprehensive article about effective Copyleaks credits management and monitoring: [How to manage your credits?](/concepts/management/manage-your-credits)
***
## September 1, 2021 NEW
[Section titled “September 1, 2021 ”](#september-1-2021)
**Teams Integration Documentation**
Added integration guide between Copyleaks API and Copyleaks Teams.
***
## February 28, 2021 NEW
[Section titled “February 28, 2021 ”](#february-28-2021)
**Java SDK Launch**
Launched official SDK for Java developers: [Java SDK](https://github.com/Copyleaks/Java-Plagiarism-Checker).
Package available via [Maven](https://search.maven.org/search?q=g:com.copyleaks.sdk).
***
## February 1, 2021 CHANGE
[Section titled “February 1, 2021 ”](#february-1-2021)
**Server IP Address Update**
Server IP addresses changed starting March 1, 2021.
If your application is behind a firewall, update your HTTP endpoints to allow the new Copyleaks IP policy. If you are not filtering access by IP, no action is required.
Starting March 1, 2021, specific IP addresses for contacting your service are not guaranteed.
***
## January 24, 2021 NEW
[Section titled “January 24, 2021 ”](#january-24-2021)
**Whitelist IP Authentication**
Security enhancement: Whitelist IP Authentication allows approval of requests from specified IP addresses. Read more: [Whitelist IP Authentication](https://api.copyleaks.com/dashboard/ip-whitelist).
***
## January 21, 2021 CHANGE
[Section titled “January 21, 2021 ”](#january-21-2021)
**Date Format Update**
Updated date format in result titles for better readability.
* Old format: “dd/MM/yyyy”
* New format: “MMMM dd, yyyy”
***
## January 19, 2021 NEW
[Section titled “January 19, 2021 ”](#january-19-2021)
**PHP SDK Launch**
Launched official SDK for PHP developers: [PHP SDK](https://github.com/Copyleaks/PHP-Plagiarism-Checker).
Package available via [Packagist](https://packagist.org/packages/copyleaks/php-plagiarism-checker).
***
## January 17, 2021 NEW
[Section titled “January 17, 2021 ”](#january-17-2021)
**Node.js SDK Launch**
Launched official SDK for Node.js developers: [Node.js SDK](https://github.com/Copyleaks/NodeJS-Plagiarism-Checker).
Package available via [npm](https://www.npmjs.com/package/plagiarism-checker).
***
## January 13, 2021 NEW
[Section titled “January 13, 2021 ”](#january-13-2021)
**Python SDK Launch**
Launched official SDK for Python developers: [Python SDK](https://github.com/Copyleaks/Python-Plagiarism-Checker).
Package available via [PyPI](https://pypi.org/project/copyleaks/).
***
## December 24, 2020 CHANGE
[Section titled “December 24, 2020 ”](#december-24-2020)
**Webhook Retry Policy Enhancement**
Increased the number of retry attempts when sending system webhooks. Read more in the “Retry Policy” section on the [Webhooks page](/reference/data-types/authenticity/webhooks/overview).
* Previous: Up to 12 attempts (2, 4, 8, …, 4096 seconds)
* Updated: Up to 17 attempts (2, 4, …, 65535 seconds)
***
## December 23, 2020 NEW />
[Section titled “December 23, 2020 />”](#december-23-2020-)
**ID Pattern Exclusion**
Added new feature to Submit methods: `properties.scanning.exclude.idPattern`. This feature allows exclusion of submissions from results if their ID matches the supplied pattern.
Available for all Submit endpoints in both Business and Education APIs.
***
## December 10, 2020 CHANGE
[Section titled “December 10, 2020 ”](#december-10-2020)
**Webhooks Documentation Update**
Updated [Webhooks documentation page](/reference/data-types/authenticity/webhooks/overview) with “At-Least-Once Delivery” section.
***
## November 24, 2020 DEPRECATED
[Section titled “November 24, 2020 ”](#november-24-2020)
**Batch Method Deprecation**
The following method is now obsolete:
* `PATCH https://api.copyleaks.com/v3/education/batch/start`
To compare multiple files, see instructions: [Cross Compare Multiple Files](/reference/actions/miscellaneous/supported-cross-languages).
***
## November 23, 2020 NEW
[Section titled “November 23, 2020 ”](#november-23-2020)
**Cross Compare Documentation**
New article: [Cross Compare Multiple Files](/reference/actions/miscellaneous/supported-cross-languages).
***
## November 2, 2020 NEW
[Section titled “November 2, 2020 ”](#november-2-2020)
**API Dashboard Launch**
Launched new version of the API dashboard. Easily administer scans and visualize API scan results to ensure comprehensive monitoring.
***
## October 25, 2020 CHANGE
[Section titled “October 25, 2020 ”](#october-25-2020)
**Rate Limiting Implementation**
Copyleaks API now enforces rate limits for the following methods:
* `https://id.copyleaks.com/v3/account/login/api` - Maximum 12 calls per 15 minutes
* `https://api.copyleaks.com/v3/education|businesses/scans/{scanId}/webhooks/resend` - Maximum 300 calls per 60 minutes
* `https://api.copyleaks.com/v3/education|businesses/usages/history` - Maximum 10 calls per 60 minutes
* `https://api.copyleaks.com/v3/businesses/credits` - Maximum 10 calls per 15 minutes
Exceeding the maximum number of calls will result in an HTTP 429 response code.
***
## October 15, 2020 NEW
[Section titled “October 15, 2020 ”](#october-15-2020)
**Open Source Plagiarism Report**
Launched the Open Source Plagiarism Report. Embed a ready-to-use plagiarism report within your own domain (whitelabel). Read more: [Open Source Plagiarism Report](https://github.com/Copyleaks/plagiarism-report).
***
## October 10, 2020 NEW
[Section titled “October 10, 2020 ”](#october-10-2020)
**Cheat Detection**
Added cheat detection capabilities. To enable this feature, turn on the `properties.cheatDetection` flag in the Submit methods. Available for both Education and Business users.
***
## September 18, 2020 NEW
[Section titled “September 18, 2020 ”](#september-18-2020)
**Teams Capabilities**
Copyleaks V3 API now supports Teams capabilities. Build your own team, invite members, and share credits across multiple users.
***
## September 1, 2020 DEPRECATED
[Section titled “September 1, 2020 ”](#september-1-2020)
**Download Methods Deprecation**
The following methods are now obsolete:
* `https://api.copyleaks.com/v3/downloads/{scanId}`
* `https://api.copyleaks.com/v3/downloads/{scanId}/results/{resultId}`
* `https://api.copyleaks.com/v3/downloads/{scanId}/report.pdf`
Use the [Export method](/reference/actions/downloads/overview) instead.
***
## August 7, 2020 NEW
[Section titled “August 7, 2020 ”](#august-7-2020)
**.NET Core SDK Launch**
Launched official SDK for .NET Core: [.NET Core SDK](https://github.com/Copyleaks/.net-core-plagiarism-checker).
Package available via [NuGet](https://www.nuget.org/packages/Copyleaks/).
***
## August 5, 2020 NEW
[Section titled “August 5, 2020 ”](#august-5-2020)
**Sensitive Data Masking**
Added Sensitive Data Masking feature to prevent leakage of sensitive data within submitted materials. This feature works on textual content and images; other media types are not covered. For more information, visit the Submit method documentation.
***
## June 25, 2020 NEW
[Section titled “June 25, 2020 ”](#june-25-2020)
**Reference Exclusion**
Copyleaks now supports excluding references from educational plagiarism scans. This text detection algorithm is based on advanced AI capabilities to ensure high success rates. To use this feature, turn on the `properties.exclude.references` flag.
***
## June 1, 2020 NEW
[Section titled “June 1, 2020 ”](#june-1-2020)
**Private Cloud Hubs**
Use Copyleaks to host all your internal documents and compare scans against them. This feature works similarly to the Copyleaks Shared Data Hub but provides private storage accessible only to you. To use this feature, purchase the product hosting plan and use the `properties.scanning.repositories` flag in the Submit method.
***
## May 15, 2020 CHANGE
[Section titled “May 15, 2020 ”](#may-15-2020)
**PDF Reports for Business Users**
PDF reports are now available for Business users. To enable this feature, turn on the `properties.pdf.create` flag in the Submit method.
***
## February 28, 2019 NEW
[Section titled “February 28, 2019 ”](#february-28-2019)
**API Version 3 Launch**
API version 3 is now deployed and in production. />
**ID Pattern Exclusion**
Added new feature to Submit methods: `properties.scanning.exclude.idPattern`. This feature allows exclusion of submissions from results if their ID matches the supplied pattern.
Available for all Submit endpoints in both Business and Education APIs.
***
## December 10, 2020 CHANGE
[Section titled “December 10, 2020 ”](#december-10-2020--1)
**Webhooks Documentation Update**
Updated [Webhooks documentation page](/reference/data-types/authenticity/webhooks/overview) with “At-Least-Once Delivery” section.
***
## November 24, 2020 DEPRECATED
[Section titled “November 24, 2020 ”](#november-24-2020--1)
**Batch Method Deprecation**
The following method is now obsolete:
* `PATCH https://api.copyleaks.com/v3/education/batch/start`
To compare multiple files, see instructions: [Cross Compare Multiple Files](/reference/actions/miscellaneous/supported-cross-languages).
***
## November 23, 2020 NEW
[Section titled “November 23, 2020 ”](#november-23-2020--1)
**Cross Compare Documentation**
New article: [Cross Compare Multiple Files](/reference/actions/miscellaneous/supported-cross-languages).
***
## November 2, 2020 NEW
[Section titled “November 2, 2020 ”](#november-2-2020--1)
**API Dashboard Launch**
Launched new version of the API dashboard. Easily administer scans and visualize API scan results to ensure comprehensive monitoring.
***
## October 25, 2020 CHANGE
[Section titled “October 25, 2020 ”](#october-25-2020--1)
**Rate Limiting Implementation**
Copyleaks API now enforces rate limits for the following methods:
* `https://id.copyleaks.com/v3/account/login/api` - Maximum 12 calls per 15 minutes
* `https://api.copyleaks.com/v3/education|businesses/scans/{scanId}/webhooks/resend` - Maximum 300 calls per 60 minutes
* `https://api.copyleaks.com/v3/education|businesses/usages/history` - Maximum 10 calls per 60 minutes
* `https://api.copyleaks.com/v3/businesses/credits` - Maximum 10 calls per 15 minutes
Exceeding the maximum number of calls will result in an HTTP 429 response code.
***
## October 15, 2020 NEW
[Section titled “October 15, 2020 ”](#october-15-2020--1)
**Open Source Plagiarism Report**
Launched the Open Source Plagiarism Report. Embed a ready-to-use plagiarism report within your own domain (whitelabel). Read more: [Open Source Plagiarism Report](https://github.com/Copyleaks/plagiarism-report).
***
## October 10, 2020 NEW
[Section titled “October 10, 2020 ”](#october-10-2020--1)
**Cheat Detection**
Added cheat detection capabilities. To enable this feature, turn on the `properties.cheatDetection` flag in the Submit methods. Available for both Education and Business users.
***
## September 18, 2020 NEW
[Section titled “September 18, 2020 ”](#september-18-2020--1)
**Teams Capabilities**
Copyleaks V3 API now supports Teams capabilities. Build your own team, invite members, and share credits across multiple users.
***
## September 1, 2020 DEPRECATED
[Section titled “September 1, 2020 ”](#september-1-2020--1)
**Download Methods Deprecation**
The following methods are now obsolete:
* `https://api.copyleaks.com/v3/downloads/{scanId}`
* `https://api.copyleaks.com/v3/downloads/{scanId}/results/{resultId}`
* `https://api.copyleaks.com/v3/downloads/{scanId}/report.pdf`
Use the [Export method](/reference/actions/downloads/overview) instead.
***
## August 7, 2020 NEW
[Section titled “August 7, 2020 ”](#august-7-2020--1)
**.NET Core SDK Launch**
Launched official SDK for .NET Core: [.NET Core SDK](https://github.com/Copyleaks/.net-core-plagiarism-checker).
Package available via [NuGet](https://www.nuget.org/packages/Copyleaks/).
***
## August 5, 2020 NEW
[Section titled “August 5, 2020 ”](#august-5-2020--1)
**Sensitive Data Masking**
Added Sensitive Data Masking feature to prevent leakage of sensitive data within submitted materials. This feature works on textual content and images; other media types are not covered. For more information, visit the Submit method documentation.
***
## June 25, 2020 NEW
[Section titled “June 25, 2020 ”](#june-25-2020--1)
**Reference Exclusion**
Copyleaks now supports excluding references from educational plagiarism scans. This text detection algorithm is based on advanced AI capabilities to ensure high success rates. To use this feature, turn on the `properties.exclude.references` flag.
***
## June 1, 2020 NEW
[Section titled “June 1, 2020 ”](#june-1-2020--1)
**Private Cloud Hubs**
Use Copyleaks to host all your internal documents and compare scans against them. This feature works similarly to the Copyleaks Shared Data Hub but provides private storage accessible only to you. To use this feature, purchase the product hosting plan and use the `properties.scanning.repositories` flag in the Submit method.
***
## May 15, 2020 CHANGE
[Section titled “May 15, 2020 ”](#may-15-2020--1)
**PDF Reports for Business Users**
PDF reports are now available for Business users. To enable this feature, turn on the `properties.pdf.create` flag in the Submit method.
***
## February 28, 2019 NEW
[Section titled “February 28, 2019 ”](#february-28-2019--1)
**API Version 3 Launch**
API version 3 is now deployed and in production.