curl --request POST \
--url https://api.gowinston.ai/v2/plagiarism \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"text": "<string>",
"file": "<string>",
"website": "<string>",
"excluded_sources": [
"<string>"
],
"language": "auto",
"country": "us"
}
'import requests
url = "https://api.gowinston.ai/v2/plagiarism"
payload = {
"text": "<string>",
"file": "<string>",
"website": "<string>",
"excluded_sources": ["<string>"],
"language": "auto",
"country": "us"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
text: '<string>',
file: '<string>',
website: '<string>',
excluded_sources: ['<string>'],
language: 'auto',
country: 'us'
})
};
fetch('https://api.gowinston.ai/v2/plagiarism', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gowinston.ai/v2/plagiarism",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => '<string>',
'file' => '<string>',
'website' => '<string>',
'excluded_sources' => [
'<string>'
],
'language' => 'auto',
'country' => 'us'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gowinston.ai/v2/plagiarism"
payload := strings.NewReader("{\n \"text\": \"<string>\",\n \"file\": \"<string>\",\n \"website\": \"<string>\",\n \"excluded_sources\": [\n \"<string>\"\n ],\n \"language\": \"auto\",\n \"country\": \"us\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gowinston.ai/v2/plagiarism")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\",\n \"file\": \"<string>\",\n \"website\": \"<string>\",\n \"excluded_sources\": [\n \"<string>\"\n ],\n \"language\": \"auto\",\n \"country\": \"us\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gowinston.ai/v2/plagiarism")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\",\n \"file\": \"<string>\",\n \"website\": \"<string>\",\n \"excluded_sources\": [\n \"<string>\"\n ],\n \"language\": \"auto\",\n \"country\": \"us\"\n}"
response = http.request(request)
puts response.read_body{
"status": 123,
"scanInformation": {
"service": "<string>",
"scanTime": "<string>",
"inputType": "<string>",
"language": "<string>"
},
"result": {
"score": 123,
"sourceCounts": 123,
"textWordCounts": 123,
"totalPlagiarismWords": 123,
"identicalWordCounts": 123,
"similarWordCounts": 123
},
"sources": [
{
"score": 123,
"canAccess": true,
"url": "<string>",
"title": "<string>",
"plagiarismWords": 123,
"identicalWordCounts": 123,
"similarWordCounts": 123,
"totalNumberOfWords": 123,
"author": "<string>",
"description": "<string>",
"publishedDate": 123,
"source": "<string>",
"citation": true,
"plagiarismFound": [
{
"startIndex": 123,
"endIndex": 123,
"sequence": "<string>"
}
],
"is_excluded": true
}
],
"attackDetected": {
"zero_width_space": true,
"homoglyph_attack": true
},
"text": "<string>",
"similarWords": [
{
"index": 123,
"word": "<string>"
}
],
"citations": [
"<string>"
],
"indexes": [
{
"startIndex": 123,
"endIndex": 123,
"sequence": "<string>"
}
],
"credits_used": 123,
"credits_remaining": 123
}{
"error": "BAD_REQUEST",
"description": "The request was invalid and could not be processed. Make sure you pass valid arguments."
}{
"error": "UNAUTHORIZED",
"description": "Pass a valid API key in the Authorization header as a Bearer token."
}{
"error": "PAYMENT_REQUIRED",
"description": "Insufficient credits. Make sure you have enough credits to make the request."
}{
"error": "FORBIDDEN",
"description": "The request was forbidden. Make sure you pass a valid URL or document that we can access."
}{
"error": "UNSUPPORTED_MEDIA_TYPE",
"description": "The request content type is not supported. Make sure you pass a valid content type."
}{
"error": "TOO_MANY_REQUESTS",
"description": "You have exceeded the rate limit. Please try again later."
}{
"error": "INTERNAL_SERVER_ERROR",
"description": "An unexpected error occurred. Please try again later."
}{
"error": "SERVICE_UNAVAILABLE",
"description": "The service is currently unavailable. Please try again later."
}Plagiarism
Winston AI’s plagiarism API is a powerful tool designed to check text for plagiarism by scouring the internet for similar content. It queries multiple websites and compares the input text with the content found on these websites. This can be particularly useful in academic settings, content creation, legal scenarios or any other situation where originality of content is required.
curl --request POST \
--url https://api.gowinston.ai/v2/plagiarism \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"text": "<string>",
"file": "<string>",
"website": "<string>",
"excluded_sources": [
"<string>"
],
"language": "auto",
"country": "us"
}
'import requests
url = "https://api.gowinston.ai/v2/plagiarism"
payload = {
"text": "<string>",
"file": "<string>",
"website": "<string>",
"excluded_sources": ["<string>"],
"language": "auto",
"country": "us"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
text: '<string>',
file: '<string>',
website: '<string>',
excluded_sources: ['<string>'],
language: 'auto',
country: 'us'
})
};
fetch('https://api.gowinston.ai/v2/plagiarism', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gowinston.ai/v2/plagiarism",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => '<string>',
'file' => '<string>',
'website' => '<string>',
'excluded_sources' => [
'<string>'
],
'language' => 'auto',
'country' => 'us'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gowinston.ai/v2/plagiarism"
payload := strings.NewReader("{\n \"text\": \"<string>\",\n \"file\": \"<string>\",\n \"website\": \"<string>\",\n \"excluded_sources\": [\n \"<string>\"\n ],\n \"language\": \"auto\",\n \"country\": \"us\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gowinston.ai/v2/plagiarism")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\",\n \"file\": \"<string>\",\n \"website\": \"<string>\",\n \"excluded_sources\": [\n \"<string>\"\n ],\n \"language\": \"auto\",\n \"country\": \"us\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gowinston.ai/v2/plagiarism")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\",\n \"file\": \"<string>\",\n \"website\": \"<string>\",\n \"excluded_sources\": [\n \"<string>\"\n ],\n \"language\": \"auto\",\n \"country\": \"us\"\n}"
response = http.request(request)
puts response.read_body{
"status": 123,
"scanInformation": {
"service": "<string>",
"scanTime": "<string>",
"inputType": "<string>",
"language": "<string>"
},
"result": {
"score": 123,
"sourceCounts": 123,
"textWordCounts": 123,
"totalPlagiarismWords": 123,
"identicalWordCounts": 123,
"similarWordCounts": 123
},
"sources": [
{
"score": 123,
"canAccess": true,
"url": "<string>",
"title": "<string>",
"plagiarismWords": 123,
"identicalWordCounts": 123,
"similarWordCounts": 123,
"totalNumberOfWords": 123,
"author": "<string>",
"description": "<string>",
"publishedDate": 123,
"source": "<string>",
"citation": true,
"plagiarismFound": [
{
"startIndex": 123,
"endIndex": 123,
"sequence": "<string>"
}
],
"is_excluded": true
}
],
"attackDetected": {
"zero_width_space": true,
"homoglyph_attack": true
},
"text": "<string>",
"similarWords": [
{
"index": 123,
"word": "<string>"
}
],
"citations": [
"<string>"
],
"indexes": [
{
"startIndex": 123,
"endIndex": 123,
"sequence": "<string>"
}
],
"credits_used": 123,
"credits_remaining": 123
}{
"error": "BAD_REQUEST",
"description": "The request was invalid and could not be processed. Make sure you pass valid arguments."
}{
"error": "UNAUTHORIZED",
"description": "Pass a valid API key in the Authorization header as a Bearer token."
}{
"error": "PAYMENT_REQUIRED",
"description": "Insufficient credits. Make sure you have enough credits to make the request."
}{
"error": "FORBIDDEN",
"description": "The request was forbidden. Make sure you pass a valid URL or document that we can access."
}{
"error": "UNSUPPORTED_MEDIA_TYPE",
"description": "The request content type is not supported. Make sure you pass a valid content type."
}{
"error": "TOO_MANY_REQUESTS",
"description": "You have exceeded the rate limit. Please try again later."
}{
"error": "INTERNAL_SERVER_ERROR",
"description": "An unexpected error occurred. Please try again later."
}{
"error": "SERVICE_UNAVAILABLE",
"description": "The service is currently unavailable. Please try again later."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The text to be scanned. This is required unless you provide a website or file. Each request must contain at least 100 characters and no more than 120,000 characters.
A publicly accessible URL to a file to scan. The file must be publicly available online (not a local file path) so our API can access it. The file must be in plain .pdf, .doc or .docx format. The file has priority over the text, so if you give a text and a file, it's the file that will be scanned.
A website URL to scan. If you supply a website, the API will fetch the content of the website and scan it. The website must be publicly accessible. It's important to know that the website has priority over the text and the file, so if you give a text, a file and a website, it's the website that will be scanned.
An array of sources to exclude from the scan. The excluded sources won't be taken into account for the plagiarism scan score. Sources can either be a domain name like example.com or a url like https://example.com. If you specify a domain name, the API will exclude all the urls belonging to that domain and all subdomains. Sources are case-sensitive.
2 letter language code. Default: auto.
If you put 'auto', the API will automatically detect the language of the text.
The plagiarism-checking endpoint currently supports 47 languages: English (en), French (fr), German (de), Spanish (es), Portuguese (pt), Dutch (nl), Italian (it), Chinese (zh), Norwegian (no), Swedish (sv), Danish (da), Finnish (fi), Icelandic (is), Irish (ga), Polish (pl), Czech (cs), Slovak (sk), Romanian (ro), Hungarian (hu), Bulgarian (bg), Croatian (hr), Greek (el), Turkish (tr), Hebrew (he), Arabic (ar), Vietnamese (vi), Malay (ms), Thai (th), Korean (ko), Japanese (ja), Russian (ru), Kazakh (kk), Georgian (ka), Tagalog (tl), Hindi (hi), Bengali (bn), Persian (fa), Urdu (ur), Indonesian (id), Malayalam (ml), Tamil (ta), Telugu (te), Kannada (kn), Marathi (mr), Gujarati (gu), Ukrainian (uk) and Albanian (sq).
The country code of the country where the text was written. We accept all country codes. Default: us.
Response
Plagiarism response
HTTP status code representing the result of the plagiarism scan request.
Some basic scan information about the request.
Show child attributes
Show child attributes
The result field is the main object that contains the results of the plagiarism scan.
Show child attributes
Show child attributes
The sources field is an array which contains one or more objects, each corresponding to a different website where matching content has been found.
Show child attributes
Show child attributes
An object with two boolean properties indicating if the text contains zero-width spaces or homoglyph attacks.
Show child attributes
Show child attributes
The input text that was used for the plagiarism scan.
List of similar words found in the input text.
Show child attributes
Show child attributes
The citations is an array which contains one or more objects, each corresponding to a different website where the website was cited in the provided text.
List of plagiarism sequences found in the input text.
Show child attributes
Show child attributes
The credits_used field represents the number of credits consumed for processing your request. Each word that is processed by the API consumes two credits.
The credits_remaining field shows how many credits you have left in your account after your request has been processed.