Coming soon We've been rebuilding our AI Code Detection so it's a lot better at catching ChatGPT and Claude, with an AI‑probability score on every check Learn more
Developer API

Code Plagiarism
Detection API

Build plagiarism detection into your apps. Check code against 20+ billion sources.

const response = await fetch('https://codequiry.com/api/v1/check', { method: 'POST', headers: { 'apikey': 'YOUR_API_KEY' }, body: formData }); // Check created!
GETTING STARTED

Getting Started with the Codequiry API

Everything you need to go from zero to your first plagiarism check in under 10 minutes. Follow this step-by-step guide to integrate Codequiry's powerful plagiarism detection into your application.

Prerequisites

1. Create an Account

Sign up at codequiry.com/signup to get access to the API. Free and paid plans available.

2. Generate an API Key

Navigate to your dashboard settings and generate an API key. Keep it secure - treat it like a password.

3. Have a REST Client

Use cURL, Postman, or any HTTP library in your programming language (fetch, requests, axios, etc.).

Step 1: Test Your API Key

First, verify your API key is working by calling the account endpoint:

curl -H "apikey: YOUR_API_KEY_HERE" \
  https://codequiry.com/api/v1/account
        
Test Connection

You should see a response with your account details:

{
    "id": 12345,
    "name": "Your Name",
    "email": "[email protected]",
    "plan": "pro",
    "checks_remaining": 100
}
        
Expected Response
Success! If you see your account details, your API key is working. If you get a 401 error, double-check your API key.

Step 2: Create a Plagiarism Check

A "check" is a container for your plagiarism analysis. Create one by providing a name and programming language:

curl -X POST "https://codequiry.com/api/v1/check/create" \
  -H "apikey: YOUR_API_KEY_HERE" \
  -d "name=My First Check" \
  -d "language=14"
        
Create Check
{
    "id": 2810,
    "name": "My First Check",
    "status_id": 1,
    "created_at": "2024-01-15 14:30:22"
}
        
Response
Save the check ID! You'll need the id value (e.g., 2810) for all subsequent API calls.
Common Language IDs
Language ID Language ID
Python 14 JavaScript 39
Java 13 C++ 17
C# 18 TypeScript 55
Go 30 PHP 21

See Languages API for the complete list of 65+ supported languages.

Step 3: Upload Code Files

Upload ZIP files containing source code. Each ZIP represents one student's submission:

# Upload first submission
curl -X POST "https://codequiry.com/api/v1/check/upload" \
  -H "apikey: YOUR_API_KEY_HERE" \
  -F "check_id=2810" \
  -F "file=@student1_code.zip"

# Upload second submission
curl -X POST "https://codequiry.com/api/v1/check/upload" \
  -H "apikey: YOUR_API_KEY_HERE" \
  -F "check_id=2810" \
  -F "file=@student2_code.zip"
        
Upload Files
Pro Tip: Have many files? Use the Batch Upload endpoint to upload up to 50 files in a single request.

Step 4: Start the Analysis

Once all files are uploaded, start the plagiarism detection:

curl -X POST "https://codequiry.com/api/v1/check/start" \
  -H "apikey: YOUR_API_KEY_HERE" \
  -d "check_id=2810" \
  -d "test_type=1"
        
Start Analysis
Test Types
  • 0 Peer Similarity - Compare submissions against each other only
  • 1 Web Check - Check against 20+ billion web sources (recommended)
  • 2 Database Check - Deep analysis with AI detection

Step 5: Wait for Completion

Analysis takes 2-10 minutes depending on file count and test type. Poll the status endpoint every 30 seconds:

# Poll every 30 seconds until status_id = 4 (completed)
curl -X POST "https://codequiry.com/api/v1/check/status" \
  -H "apikey: YOUR_API_KEY_HERE" \
  -d "check_id=2810"
        
Check Status
{
    "check_id": 2810,
    "status_id": 6,
    "status": "Checking",
    "progress": 65,
    "status_message": "Analyzing submissions..."
}
        
In Progress
Status Codes: 1 = Created, 6 = Checking, 7 = Queued, 4 = Completed, 5 = Error

Step 6: Retrieve Results

Once status_id is 4, retrieve the plagiarism results:

curl -X POST "https://codequiry.com/api/v1/check/overview" \
  -H "apikey: YOUR_API_KEY_HERE" \
  -d "check_id=2810"
        
Get Results
{
    "submissions": [
        {
            "id": 45001,
            "filename": "student1_code.zip",
            "total_result": 72.5,
            "local_result": 68.3,
            "web_result": 12.8,
            "status": "analyzed"
        },
        {
            "id": 45002,
            "filename": "student2_code.zip",
            "total_result": 15.2,
            "local_result": 10.1,
            "web_result": 5.3,
            "status": "analyzed"
        }
    ]
}
        
Results
Congratulations! You've completed your first plagiarism check! The total_result field shows the overall similarity percentage for each submission.

Complete Code Examples

Copy-paste ready examples for the complete workflow in popular languages.

JavaScript (Node.js)
const API_KEY = 'YOUR_API_KEY_HERE';
const BASE_URL = 'https://codequiry.com/api/v1';

async function apiCall(endpoint, data = {}) {
    const response = await fetch(`${BASE_URL}${endpoint}`, {
        method: 'POST',
        headers: { 'apikey': API_KEY, 'Content-Type': 'application/json' },
        body: JSON.stringify(data)
    });
    return response.json();
}

async function runPlagiarismCheck() {
    // 1. Create check
    const check = await apiCall('/check/create', { name: 'My Check', language: 14 });
    console.log(`Check created: ${check.id}`);

    // 2. Upload files (using FormData for file uploads)
    const formData = new FormData();
    formData.append('check_id', check.id);
    formData.append('file', fileBlob, 'student1.zip');
    await fetch(`${BASE_URL}/check/upload`, {
        method: 'POST',
        headers: { 'apikey': API_KEY },
        body: formData
    });

    // 3. Start analysis
    await apiCall('/check/start', { check_id: check.id, test_type: 1 });

    // 4. Poll for completion
    let status;
    do {
        await new Promise(r => setTimeout(r, 30000)); // Wait 30s
        status = await apiCall('/check/status', { check_id: check.id });
        console.log(`Progress: ${status.progress}%`);
    } while (status.status_id !== 4 && status.status_id !== 5);

    // 5. Get results
    const results = await apiCall('/check/overview', { check_id: check.id });
    results.submissions.forEach(sub => {
        console.log(`${sub.filename}: ${sub.total_result}% similarity`);
    });
}

runPlagiarismCheck();
        
JavaScript
Python
import requests
import time

API_KEY = 'YOUR_API_KEY_HERE'
BASE_URL = 'https://codequiry.com/api/v1'
HEADERS = {'apikey': API_KEY}

def run_plagiarism_check():
    # 1. Create check
    check = requests.post(f'{BASE_URL}/check/create',
        headers=HEADERS,
        data={'name': 'My Check', 'language': 14}
    ).json()
    print(f"Check created: {check['id']}")

    # 2. Upload files
    with open('student1.zip', 'rb') as f:
        requests.post(f'{BASE_URL}/check/upload',
            headers=HEADERS,
            data={'check_id': check['id']},
            files={'file': f}
        )

    # 3. Start analysis
    requests.post(f'{BASE_URL}/check/start',
        headers=HEADERS,
        data={'check_id': check['id'], 'test_type': 1}
    )

    # 4. Poll for completion
    while True:
        time.sleep(30)
        status = requests.post(f'{BASE_URL}/check/status',
            headers=HEADERS,
            data={'check_id': check['id']}
        ).json()
        print(f"Progress: {status['progress']}%")
        if status['status_id'] in (4, 5):
            break

    # 5. Get results
    results = requests.post(f'{BASE_URL}/check/overview',
        headers=HEADERS,
        data={'check_id': check['id']}
    ).json()

    for sub in results['submissions']:
        print(f"{sub['filename']}: {sub['total_result']}% similarity")

run_plagiarism_check()
        
Python

Faster Alternative: Quick Check API

Want to skip the multi-step workflow? The Quick Check API combines create, upload, and start into a single API call - 3x faster integration.

# All-in-one: create + upload + start in one request
curl -X POST "https://codequiry.com/api/v1/check/quick" \
  -H "apikey: YOUR_API_KEY_HERE" \
  -F "name=Quick Check" \
  -F "language=14" \
  -F "test_type=1" \
  -F "files[][email protected]" \
  -F "files[][email protected]"
        
Quick Check
Recommended: Use the Quick Check API for the fastest possible integration. One request instead of three.

Troubleshooting

401 Unauthorized

Cause: Invalid or missing API key

Fix: Ensure the apikey header (lowercase) is included in every request. Check for typos or extra spaces.

422 Validation Error

Cause: Missing or invalid parameters

Fix: Check that all required parameters are included. Name must be 3+ characters, language must be a valid ID.

Analysis Stuck

Cause: Large files or high server load

Fix: Wait up to 15 minutes. If status doesn't change, create a new check and retry. Contact support if issues persist.

Upload Fails

Cause: Invalid file format or size

Fix: Files must be ZIP archives under 10MB. Ensure you're using multipart/form-data encoding.