🌙 Happy Karwa Chauth from IsolatedStudy! Check your work with confidence – plans from $3
IsolatedStudySimilarity Check
Start free
Developers · API v1

IsolatedStudy API

Check documents for similarity from your own website, Moodle or app. Send a file, get the report as JSON, and download the PDF – in a few lines of code.

Base URLhttp://scan.isolatedstudy.in/api/v1
Your key headerAuthorization: Bearer isk_…
AnswersJSON · PDF
Examples incurl · Python · PHP · JavaScript · Java · C# · Go · Ruby

How it works

  1. 1. Get a key On the API keys page. It starts with isk_ and is shown once.
  2. 2. Send a document POST /checks with a file or text – you get a check id at once.
  3. 3. Wait for the result Ask GET /checks/<id> every few seconds until it is done (about a minute).
  4. 4. Use the report Similarity, sources and grade are in the answer – download the PDF from pdf_urls.
Try it in 30 seconds. Replace the key and run:
curl http://scan.isolatedstudy.in/api/v1/options -H "Authorization: Bearer isk_your_key_here"
It answers with everything your key may use – formats, filters and word limits.

Authentication

Send your key with every request, in one of these two headers:

Authorization: Bearer isk_your_key_here
X-API-Key: isk_your_key_here
Keep the key on your server. Never put it in a web page or an app people can open – call the API from your server. A missing or wrong key gives 401. You can revoke a key at any time on the API keys page.

Your access

Each API key has its own PDF formats and filters, approved by the site administrator. Using one that is not approved for your key is refused with 403 “You don't have access …” – ask the administrator to enable more.

Log in to see which formats and filters your keys may use.

Limits & queue

One file per requestSend many in a row – they queue and are checked in order, a few at a time.
Counted on your planEach check uses one check of the key owner's plan. None left → 429 with the reason.
Word limitsA key can have a minimum / maximum number of words – outside them → 400.
How long things stayA check's status: 6 hours. The report: until you delete it.

PDF formats

Reports come in 8 styles: classic (Classic), modern (Modern), certificate (Certificate), academic (Academic), minimal (Minimal), executive (Executive), infographic (Infographic), letter (Official letter) – each also in colour versions, e.g. modern-ocean. A key can only use the formats the administrator approved for it (never more than its owner's plan). Every report lists them in pdf_formats.

Another format gives 403 {"error": "This PDF format is not enabled for your API key. Allowed formats: …"}

POST /api/v1/checks

Starts a check. Send multipart/form-data with a file, or JSON / form fields with text.

FieldTypeDescription
fileor textfileThe document: PDF (also scanned), Word, PowerPoint, Excel, OpenDocument, RTF, HTML, EPUB, text, code, pictures.
textor filestringPlain text instead of a file.
titleoptionalstringTitle of the report (default: from the file name).
authoroptionalstringAuthor name shown in the report.
internetoptionalboolSearch the internet and research databases (default true).
repositoryoptionalstringnone (default, not stored) or standard (stored so later copies are found).
extrasoptionalstringComma-separated extra checks: refs, cites, fix, style, own, images, code, translate.
quotes bib cited min_words min_percent kindsoptional filtersFilters applied when the report is made – only the ones approved for your key, see Filters.

Answer 202:

{"id": "3f9c…", "status": "running", "status_url": "http://scan.isolatedstudy.in/api/v1/checks/3f9c…"}
curl -X POST http://scan.isolatedstudy.in/api/v1/checks \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@thesis.docx" \
  -F "title=My thesis" \
  -F "repository=none"

Text instead of a file: curl -X POST http://scan.isolatedstudy.in/api/v1/checks -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{"text": "Your text…", "title": "Essay"}'

GET /api/v1/checks/<id>

status is running (with the current step), done (with the full report) or error (with error). Ask every 3–5 seconds.

{"id": "3f9c…", "status": "done", "elapsed": 58,
 "summary": {"words": 4210, "similarity": 18.4, "issues": []},
 "report": { …same as GET /api/v1/reports/<id>… }}
curl http://scan.isolatedstudy.in/api/v1/checks/$CHECK_ID \
  -H "Authorization: Bearer $API_KEY"

GET /api/v1/reports/<report_id>

The whole report. Add ?text=true to get the document text with every match marked.

FieldMeaning
similarityOverall similarity in % · grade: letter A–D and label
submission_idThe ID printed on the PDF; anyone can check it on verify_url
by_kind% from internet, publications, student papers, your repository
sourcesEach source: n, title, url, kind, percent, exact and paraphrased words
words, charactersCounted like Microsoft Word
pdf_formats, pdf_urlsThe formats this key may download and their URLs
download_linksSigned links that work without a key for 7 days (see below)
textWith ?text=true: pieces {text, source, kind} – kind exact, para or ex
curl "http://scan.isolatedstudy.in/api/v1/reports/$REPORT_ID?text=true" \
  -H "Authorization: Bearer $API_KEY"

GET /api/v1/reports/<report_id>/pdf?format=classic

The PDF report. format is one of your key's pdf_formats (default: the first one).

curl -L "http://scan.isolatedstudy.in/api/v1/reports/$REPORT_ID/pdf?format=classic" \
  -H "Authorization: Bearer $API_KEY" -o report.pdf

Filters

Filters decide what counts towards the similarity. Your key can only use the filters the administrator approved (see Your access). Every filter:

FilterValuesWhat it doesExample
quotes
Exclude quoted text
true / falseText inside quotation marks does not count towards the similarity. true
bib
Exclude the bibliography
true / falseThe reference list / bibliography at the end does not count. true
cited
Exclude cited text
true / falseSentences with an in-text citation, e.g. (Smith, 2020) or [3], do not count. true
min_words
Ignore small matches
whole number 5–1000 (default 5)Matching passages shorter than this many words are ignored. 12
min_percent
Hide small sources
number 0–100 (default 0)Sources that match less than this % of the document are hidden. 1
kinds
Source types
list of: web, publication, source, submissionOnly matches from these kinds of sources count (web pages, publications, submitted papers, repository documents). ["web", "publication"]
exclude
Remove sources
list of source doc_idRemoves chosen sources from the report (their doc_id is in the report's sources). [123, 456]

Three ways to use filters

  1. When you send the document – add them to POST /api/v1/checks (form fields or JSON), e.g. quotes=true, bib=true, min_words=12, min_percent=1, kinds=web,publication. The report is made with them.
  2. Change them on a report – POST /api/v1/reports/<report_id>/filters scores it again and saves them (examples below). exclude takes source doc_ids from the report's sources.
  3. Just for one download – put them in the query string of the PDF or JSON report; nothing is saved: GET /api/v1/reports/<report_id>/pdf?format=classic&quotes=true&bib=true&min_words=12
curl -L "http://scan.isolatedstudy.in/api/v1/reports/$REPORT_ID/pdf?format=classic&quotes=true&bib=true&min_words=12" \
  -H "Authorization: Bearer $API_KEY" -o report-filtered.pdf

A filter your key may not use is refused – nothing is changed:

HTTP/1.1 403 Forbidden
{"error": "You don't have access to the filter 'cited' (Exclude cited text). Filters your API key may use: quotes, bib, min_words. Ask the site administrator to enable it.",
 "filter": "cited", "allowed_filters": ["quotes", "bib", "min_words"]}

POST /api/v1/reports/<report_id>/filters

Score the report again with other filters (saved with the report). Send only the filters you want to change. The answer is the updated report, with filters and allowed_filters.

curl -X POST http://scan.isolatedstudy.in/api/v1/reports/$REPORT_ID/filters \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"quotes": true, "bib": true, "min_words": 10, "exclude": [123]}'

GET /api/v1/reports?limit=50

This key's reports, newest first (limit up to 200): id, Submission ID, title, date, similarity, words, grade, download links.

curl "http://scan.isolatedstudy.in/api/v1/reports?limit=20" -H "Authorization: Bearer $API_KEY"

DELETE /api/v1/reports/<report_id>

Deletes the report (and the stored paper, if it was stored). Answer: {"deleted": "<report_id>"}.

curl -X DELETE http://scan.isolatedstudy.in/api/v1/reports/$REPORT_ID -H "Authorization: Bearer $API_KEY"

GET /api/v1/verify/<submission_id>

Is a Submission ID (printed on every PDF) genuine? Works for any report of this site. Answer: {"valid": true, "created_at": …, "title": …, "similarity": …, "words": …, "pdf_downloads": …} or {"valid": false}.

curl http://scan.isolatedstudy.in/api/v1/verify/8F3A1C0B9E2D4F67 -H "Authorization: Bearer $API_KEY"

GET /api/v1/options

Everything your key accepts: fields, extra checks, its PDF formats, its word limits and every filter with "allowed": true/false (plus allowed_filters, the list your key may use).

curl http://scan.isolatedstudy.in/api/v1/options -H "Authorization: Bearer $API_KEY"

Errors

Every error is JSON with a message you can show to people: {"error": "a readable message"}.

CodeWhat it meansWhat to do
200 / 202OK / the check was accepted and is running.Ask the status until done.
400Something is missing or wrong: no file or text, words outside the key's limits, a bad filter value.Fix the request – the message says what.
401No API key, or the key is wrong or revoked.Check the Authorization header.
403No access: a PDF format or a filter that is not approved for your key.Use one from pdf_formats / allowed_filters, or ask the admin.
404Unknown check or report (or one of another key).Use the id you got back.
413The upload is too large for the server.Send a smaller file.
429No checks left on the plan, or the site's limit is reached.Renew the plan, or try again later.
503The service is busy for a moment.Wait the retry_after seconds and try again.

Full example: check a file and save the PDF

#!/bin/sh
API=http://scan.isolatedstudy.in/api/v1
KEY=isk_your_key_here

ID=$(curl -s -X POST $API/checks -H "Authorization: Bearer $KEY" -F "file=@thesis.docx" | jq -r .id)
while :; do
  JOB=$(curl -s $API/checks/$ID -H "Authorization: Bearer $KEY")
  STATUS=$(echo "$JOB" | jq -r .status)
  [ "$STATUS" = running ] || break
  sleep 4
done
echo "$JOB" | jq '.report.similarity, .report.grade.letter'
REPORT=$(echo "$JOB" | jq -r .report.id)
curl -s "$API/reports/$REPORT/pdf" -H "Authorization: Bearer $KEY" -o report.pdf

Working…