Documentation

Overview

Spellbreaker is an advanced AI-driven platform designed to detect deepfakes and combat digital identity fraud. Our flagship solution, Spellbreaker, leverages NeuroSymbolic AI and multimodal techniques to ensure transparency and accuracy in verifying digital content.

Key Features

  • •
    Identifies basic, partial, shallow and complex deepfakes across various media formats.
  • •
    Generates detailed, transparent, and defensible reports that are easily understood.
  • •
    Built with robust security measures to guard against manipulation and ensure data integrity.
  • •
    Offers intuitive interfaces and workflows tailored for legal professionals, organizations and individuals.
  • •
    Works seamlessly with governments, businesses and research institutions to set global standards in digital content verification.

Use Cases

Legal and Forensic Analysis

Assisting legal professionals in verifying the authenticity of digital evidence.

Media and Journalism

Helping journalists and media outlets detect and prevent the spread of manipulated content.

Corporate Security

Enabling businesses to protect against digital identity fraud and misinformation.

Public Sector Applications

Supporting government agencies in safeguarding public information and communications.

Accessing Spellbreaker

To learn more about our services or to schedule a demo, visit our website or contact us at support@spellbreaker.ai.

Getting Started

Welcome to Spellbreaker, your trusted solution for detecting deepfakes and protecting digital identity.

Ready to get started? Visit app.spellbreaker.ai to launch Spellbreaker.

This guide walks you through the basic steps to start using the Spellbreaker platform, whether you're a legal investigator, journalist or individual user seeking truth in digital content.

Step-by-Step Guide

1. Create an Account

Subscribe to get started:

  • Paid Subscription: Unlock full access with a personalized dashboard and file history.

💡 Note: API access requires a subscription. Once you have a subscription, you can create API keys directly from your dashboard.

2. Upload Your Media

  • Log in to your dashboard or use the public upload page.
  • Select your media file(s) for inspection — video, audio or image formats are supported.

3. Wait for Analysis

  • Our AI pipeline processes your media using multiple deepfake detection models.
  • Most results are returned within a few minutes.
  • Progress and status updates are visible in the dashboard (for subscribers).

4. Download Your Report

  • Once complete, a detailed forensic report is generated.
  • Reports include authenticity verdicts, visual evidence, metadata and model decisions.
  • Download or share securely via your dashboard.

API Access (For Developers and B2B Clients)

Subscribers can create API keys directly from their dashboard to use our RESTful API for automating uploads and receiving results. API documentation is available in the API section below.

Getting Started: After subscribing, navigate to your dashboard and click on the API Keys section to create your first API key. You can create multiple keys for different environments and configure IP/domain restrictions for enhanced security.

Next Steps

  • Explore the API Reference section below
  • Review our Security Practices section below

Need help? Contact us anytime at contact@spellbreaker.ai

Media Inspection

Once a media file is successfully uploaded using the POST api/v1.0/media/upload endpoint, you can initiate deepfake analysis through the "New Scan" action in the Spellbreaker interface.

This process automatically triggers backend analysis using multiple AI models, depending on the type of uploaded media (video, audio, or image). No additional API call or input parameters are required at this step.

Workflow

  1. Upload Media
    Upload a video, audio or image file using the api/v1.0/media/upload endpoint.
  2. Media Inspection
    After upload, click the "New Scan" button in the Spellbreaker dashboard. This triggers backend analysis.
  3. Model Processing
    Based on the type of media:
    • Visual models are run for images / videos.
    • Audio models for audio clips.
    • Audiovisual models for eligible media types.
    Each model processes the file in parallel or sequentially, depending on configuration.
  4. Live Feedback
    • During analysis, progress status is shown.
    • Once complete, the frontend displays predictions and confidence scores.

Backend Behavior

  • The system automatically selects the appropriate models based on the uploaded media type.
  • No additional input parameters are required.
  • The analysis status is updated in real time.

Example Response (GUI Display)

ModelConfidenceVerdict
VisualNet V293.2%Deepfake
AudioAnalyzer X98.7%Authentic
Fusion AI95.1%Deepfake

Final Decision: Deepfake Detected

Next Step: Generate Report

Once the inspection is complete, users can click on the "View Report" button to receive a downloadable PDF forensic report containing:

  • Metadata
  • Model decisions
  • Confidence scores
  • Visual evidence (if available)

Generate Report

After completing the media inspection, you can generate a comprehensive PDF report summarizing the results of the deepfake detection process. This report can be downloaded and printed for legal, forensic or internal documentation purposes.

How It Works

Once the media has been analyzed and predictions are available, clicking the "View Report" button will:

  1. Compile all analysis results.
  2. Structure the content into a formal forensic report.
  3. Provide a downloadable PDF report with optional print support. The verdict and confidence are available as JSON from the status endpoint, with no report needed.

Report Contents

The generated report includes the following sections:

1. General Information

  • Media ID
  • Upload timestamp
  • Media type (video, audio, image)
  • File name and format
  • User or API key identifier (if applicable)

2. Metadata Extraction

  • Resolution / duration / size
  • File properties and encoding format
  • Hash or unique media signature

3. Model Analysis Summary

  • List of models used for analysis
  • Individual predictions with confidence scores
  • Verdicts (e.g., Authentic / Deepfake)

4. Explanation & Evidence

  • Key frame thumbnails (for video / image)
  • Audio waveform or spectrogram (for audio)
  • Highlighted anomalies (if supported)

5. Final Verdict

  • Overall decision (e.g., Deepfake Detected)
  • Confidence level
  • Timestamp of decision

The report is digitally signed and watermarked with the Spellbreaker seal to ensure authenticity.

Download & Print

Reports are available in PDF format and can be:

  • Downloaded directly from the dashboard.
  • Printed for physical documentation.
  • Shared securely with authorized parties.

API Reference

Welcome to the Spellbreaker API Reference. This comprehensive guide provides detailed documentation for integrating deepfake detection capabilities into your applications. Our REST API makes integration straightforward.


Base URL

All API endpoints are prefixed with the following base URL:

https://app.spellbreaker.ai/api/v1.0

Interactive API Reference

Explore and try the endpoints live in our Swagger UI. Click Authorize and enter your API token to send requests.

Open interactive API reference

Quick Start Workflow

Here's a complete example of the typical analysis workflow:

  1. Upload Media: POST /media/upload → Returns referenceId
  2. Start Analysis: POST /deepfake/start with referenceId → Returns status "queued"
  3. Poll Status: GET /deepfake/<referenceId>/status → Check until status is "done"
  4. Download Report: Use reportUrl from status response to download the PDF report

Complete Python Example:

import requests
import hashlib
import time
import os

API_TOKEN = "<your_api_token_here>"
BASE_URL = "https://app.spellbreaker.ai/api/v1.0"

def get_mimetype(file_path):
    """Get MIME type based on file extension"""
    ext = os.path.splitext(file_path)[1].lower()
    mime_map = {
        # Video
        '.mp4': 'video/mp4',
        '.mkv': 'video/x-matroska',
        '.avi': 'video/x-msvideo',
        '.mov': 'video/quicktime',
        '.wmv': 'video/x-ms-wmv',
        '.flv': 'video/x-flv',
        '.webm': 'video/webm',
        # Audio
        '.mp3': 'audio/mpeg',
        '.wav': 'audio/wav',
        '.aac': 'audio/aac',
        '.flac': 'audio/flac',
        '.aif': 'audio/x-aiff',
        '.aiff': 'audio/x-aiff',
        '.ogg': 'audio/ogg',
        '.m4a': 'audio/mp4',
        # Image
        '.jpg': 'image/jpeg',
        '.jpeg': 'image/jpeg',
        '.png': 'image/png',
        '.bmp': 'image/bmp',
        '.tiff': 'image/tiff',
        '.webp': 'image/webp',
    }
    return mime_map.get(ext, 'application/octet-stream')

def analyze_media(file_path):
    """Complete workflow: Upload → Analyze → Poll → Download Report"""
    
    # Step 1: Calculate file hash
    sha256_hash = hashlib.sha256()
    with open(file_path, "rb") as f:
        for byte_block in iter(lambda: f.read(4096), b""):
            sha256_hash.update(byte_block)
    file_hash = sha256_hash.hexdigest()
    
    # Step 2: Upload media
    print("📤 Uploading media...")
    filename = os.path.basename(file_path)
    mimetype = get_mimetype(file_path)
    with open(file_path, 'rb') as f:
        upload_response = requests.post(
            f"{BASE_URL}/media/upload",
            headers={"Authorization": f"Bearer {API_TOKEN}"},
            files={'file': (filename, f, mimetype)},
            data={'fileHash': file_hash}
        )
    
    if upload_response.status_code != 201:
        print(f"❌ Upload failed: {upload_response.text}")
        return
    
    reference_id = upload_response.json()['data']['referenceId']
    print(f"✅ Uploaded successfully! Reference ID: {reference_id}")
    
    # Step 3: Start analysis
    print("🔍 Starting analysis...")
    start_response = requests.post(
        f"{BASE_URL}/deepfake/start",
        headers={
            "Authorization": f"Bearer {API_TOKEN}",
            "Content-Type": "application/json"
        },
        json={"referenceId": reference_id}
    )
    
    if start_response.status_code != 201:
        print(f"❌ Start failed: {start_response.text}")
        return
    
    print("✅ Analysis started!")
    
    # Step 4: Poll for status
    print("⏳ Waiting for analysis to complete...")
    while True:
        status_response = requests.get(
            f"{BASE_URL}/deepfake/{reference_id}/status",
            headers={"Authorization": f"Bearer {API_TOKEN}"}
        )
        
        if status_response.status_code != 200:
            print(f"❌ Status check failed: {status_response.text}")
            return
        
        status_data = status_response.json()['data']
        status = status_data['status']
        print(f"   Status: {status}")
        
        if status == 'done':
            print("✅ Analysis complete!")
            print(f"   Verdict: {status_data['result']} (confidence: {status_data['confidence']})")
            report_url = status_data['reportUrl']
            report_hash = status_data.get('reportFileHash')
            
            # Step 5: Download report
            print("📥 Downloading report...")
            report_response = requests.get(report_url, headers={'Authorization': f'Bearer {API_TOKEN}'})
            
            if report_response.status_code == 200:
                with open('deepfake_report.pdf', 'wb') as f:
                    f.write(report_response.content)
                
                # Verify report integrity
                actual_hash = hashlib.sha256(report_response.content).hexdigest()
                if actual_hash == report_hash:
                    print("✅ Report downloaded and verified!")
                else:
                    print("⚠️  Report downloaded but hash mismatch!")
            else:
                print(f"❌ Report download failed: {report_response.text}")
            
            break
        
        elif status in ['failed', 'stopped']:
            print(f"❌ Analysis {status}: {status_data.get('errorCode')} - {status_data.get('reason')}")
            break
        
        time.sleep(5)  # Poll every 5 seconds

# Usage
analyze_media("/path/to/your/video.mp4")

API Endpoints Summary

Overview of all available endpoints:

MethodEndpointDescription
POST/media/uploadUpload media file for analysis
POST/deepfake/startStart deepfake analysis
GET/deepfake/:id/statusCheck single task status
GET/deepfake/statusCheck bulk task status
POST/deepfake/stopStop running analysis
GET/reports/:filenameGenerate report (PDF)

Response Format

All API responses follow a consistent structure:

{
  "statusCode": 0,      // 0 = success, negative number like -9999 = error
  "data": { ... }       // Response payload
}

Error responses include a descriptive message field explaining what went wrong.

Authentication

All requests to the Spellbreaker API must be authenticated using secure, token-based authentication. This ensures robust, scalable access control to our deepfake detection services.


Overview of Authentication Flow

  1. Clients authenticate with server and obtain a api token.
  2. Clients include this token in the Authorization header when calling any protected API endpoint.
  3. API Gateway validates the token before forwarding the request to the backend.

Getting Access

To gain access to the Spellbreaker API:

  1. Sign up for a subscription account on Spellbreaker.
  2. Navigate to your dashboard and access the API Keys section.
  3. Create a new API key by providing a name and optionally configuring IP and domain restrictions.
  4. Copy your API key immediately after creation - you won't be able to see the full token again.

Note: You can create multiple API keys for different environments (e.g., production, staging) and manage them from your dashboard. Each key can have custom IP and domain restrictions for enhanced security.


Token-Based Authentication

Once authenticated, your client will receive a api token. These tokens are valid till you revoke them.

Include this token in the Authorization header of all API requests:

Authorization: Bearer <your_api_token_here>

The token is automatically validated by our API Gateway before any request is forwarded to the inference engine.


Example (Python + Token)

import requests

API_TOKEN = 'your_api_token_here'
API_URL = 'https://app.spellbreaker.ai/api/v1.0/deepfake/68ee18fbbf286d24fd9bdbdc/status'

headers = {
'Authorization': f'Bearer {API_TOKEN}'
}

response = requests.get(API_URL, headers=headers)

if response.ok:
  print("Success:", response.json())
else:
  print("Error:", response.status_code, response.text)

Security Best Practices

  • Never expose your token in frontend JavaScript or public repositories.
  • Rotate credentials periodically.
  • Use third-party tools like SecurityScorecard to regularly assess the security posture of your application.

Upload Media

The POST api/v1.0/media/upload endpoint allows you to upload video, audio or image files for deepfake forensic inspection. This is the first step in the Spellbreaker detection pipeline.

You can upload videos, audio or images for forensic evaluation.

Endpoint

POST https://app.spellbreaker.ai/api/v1.0/media/upload

Authentication

This endpoint requires a valid API key. Include it in the Authorization header. Tokens are valid until you revoke them:

Authorization: Bearer YOUR_API_KEY

Supported Media Types

  • Video .mp4 .mkv .avi .mov .wmv .flv .webm
  • Audio .mp3 .wav .aac .flac .aif .aiff .ogg .m4a
  • Image .jpg .png .bmp .tiff .webp

Headers

KeyValue
AuthorizationBearer <your_api_key_here>
Content-Typemultipart/form-data

Request Body

FieldTypeRequiredDescription
filefileYesThe media file to be analyzed
fileHashstringYesSHA-256 hash of the file content matching the uploaded file for validation

Code Example

cURL
curl -X POST https://app.spellbreaker.ai/api/v1.0/media/upload \
  -H "Authorization: Bearer <your_api_token_here>" \
  -F "file=@/path/to/your/video.mp4" \
  -F "fileHash=<sha256_hash_of_the_file>"

Success Response

{
  "statusCode": 0,
  "data": {
    "referenceId": "692a9390e18c3d5e423c5cb8"
  }
}

Error Responses

All endpoints return these common error responses:

400 Bad Request

{
  "statusCode": -9999,
  "message": "Unsupported file extension. Allowed extensions: .mp4, .mkv, .avi, .mov, .wmv, .flv, .webm, .mp3, .wav, .aac, .flac, .aif, .aiff, .ogg, .m4a, .jpg, .jpeg, .png, .bmp, .tiff, .webp"
}

400 Bad Request

{
  "statusCode": -9999,
  "message": "The file is not a valid image file. It may be corrupted, or its content may not match the .jpg extension."
}

403 Forbidden

{
  "statusCode": -9999,
  "message": "User not found"
}

400 Bad Request

{
  "statusCode": -9999,
  "message": "File size exceeds the limit for image"
}

Next Step

Once uploaded, use the returned referenceId to perform media inspection:

POST api/v1.0/deepfake/start

Developer Notes

  • Large media file may fail to upload depending on server-side configuration.
  • Files are checked on upload: the content must be a readable image, audio or video file that matches its extension. A renamed, empty or damaged file is refused with 400 before any analysis starts.
  • After uploading, you will receive a referenceId used in subsequent API calls (inspect, status, get report, etc.).

Media Inspection

Once a media file is successfully uploaded via the Upload Media Endpoint, you can initiate a forensic deepfake analysis using the Media Inspection endpoint.

We only store the hash of the file and the forensic report. The media file is deleted after certain number of days after inspection as configured on the server.

Once a media file is successfully uploaded using the Upload Media Endpoints, you can initiate deepfake analysis by calling the dedicated inspection endpoint for the specific media type and providing the referenceId in the request body.


There are separate endpoints to trigger the inspection process for the uploaded media.

1. Initiate Media Inspection

The POST api/v1.0/deepfake/start endpoint triggers the deepfake analysis pipeline for a previously uploaded media.

Endpoint

POST https://app.spellbreaker.ai/api/v1.0/deepfake/start
Authentication

This endpoint requires a valid API key. Include it in the Authorization header. Tokens are valid until you revoke them:

Authorization: Bearer YOUR_API_KEY
Request Body
FieldTypeRequiredDescription
referenceIdstringYesThe unique ID of the uploaded media file.
noReportbooleanNoSet to true to analyse without producing a PDF report. Defaults to false.

With noReport, the analysis runs as usual and the status endpoints return the verdict and its confidence, but no report is produced: reportUrl and reportFileHash stay null. The report cannot be produced later without running the analysis again, so use it only if your integration reads the verdict from the API and never opens the report.

Content-Type: application/json

Code Example

cURL

curl -X POST https://app.spellbreaker.ai/api/v1.0/deepfake/start \
  -H "Authorization: Bearer <your_api_token_here>" \
  -H "Content-Type: application/json" \
  -d '{"referenceId": "68ee18fbbf286d24fd9bdbdc"}'

Code Example (verdict only, no report)

curl -X POST https://app.spellbreaker.ai/api/v1.0/deepfake/start \
  -H "Authorization: Bearer <your_api_token_here>" \
  -H "Content-Type: application/json" \
  -d '{"referenceId": "68ee18fbbf286d24fd9bdbdc", "noReport": true}'

Success Response (Inspection Initiated)

{
  "statusCode": 0,
  "data": {
    "status": "queued"
  }
}

Missing referenceId

{
  "statusCode": -9999,
  "message": "referenceId should not be empty"
}

Invalid referenceId

{
  "statusCode": -9999,
  "message": "Media not found"
}

Unauthorized Token

{
  "statusCode": -9999,
  "message": "Invalid API token"
}

2. Check Inspection Status

Use these endpoints to monitor the progress of your deepfake analysis tasks. Three status check options are available depending on your use case.

2.1 Single Task Status

Check the status of a specific analysis task by its reference ID.

GET https://app.spellbreaker.ai/api/v1.0/deepfake/<referenceId>/status

Authentication:

Authorization: Bearer <your_api_token_here>

Example Request:

curl -X GET "https://app.spellbreaker.ai/api/v1.0/deepfake/692a8a6aec7dd33fcf9feb52/status" \
  -H "Authorization: Bearer <your_api_token_here>"

Success Response

{
  "statusCode": 0,
  "data": {
    "referenceId": "692a8a6aec7dd33fcf9feb52",
    "status": "done",
    "reportUrl": "https://app.spellbreaker.ai/api/v1.0/reports/39f39266-6deb-48e4-924d-21d12d76fc06.pdf",
    "reportFileHash": "50f0737dbebc69861353a6000c94ddd56029938c9c117df7abc4a1645d8abab0",
    "result": "fake",
    "confidence": 0.9412,
    "reason": "Analysis completed successfully",
    "errorCode": null,
    "mimeType": "image/png",
    "originalName": "avatar.png",
    "createdAt": "2025-11-29T05:53:46.782Z",
    "updatedAt": "2025-11-29T05:59:15.561Z"
  }
}
2.2 Bulk Status Check

Check the status of multiple tasks simultaneously by providing comma-separated reference IDs.

GET https://app.spellbreaker.ai/api/v1.0/deepfake/status?referenceIds=<id1>,<id2>,<id3>

Query Parameters:

ParameterTypeRequiredDescription
referenceIdsstringYesComma-separated list of reference IDs

Example Request:

curl -X GET "https://app.spellbreaker.ai/api/v1.0/deepfake/status?referenceIds=692a8a6aec7dd33fcf9feb52,692a9390e18c3d5e423c5cb8" \
  -H "Authorization: Bearer <your_api_token_here>"

Success Response (Array)

{
  "statusCode": 0,
  "data": [
    {
      "referenceId": "692a8a6aec7dd33fcf9feb52",
      "status": "done",
      "reportUrl": "https://app.spellbreaker.ai/api/v1.0/reports/39f39266-6deb-48e4-924d-21d12d76fc06.pdf",
      "reportFileHash": "50f0737dbebc69861353a6000c94ddd56029938c9c117df7abc4a1645d8abab0",
      "result": "fake",
      "confidence": 0.9412,
      "reason": "Analysis completed successfully",
      "errorCode": null,
      "mimeType": "image/png",
      "originalName": "avatar.png",
      "createdAt": "2025-11-29T05:53:46.782Z",
      "updatedAt": "2025-11-29T05:59:15.561Z"
    },
    {
      "referenceId": "692a9390e18c3d5e423c5cb8",
      "status": "processing",
      "reportUrl": null,
      "reportFileHash": null,
      "result": null,
      "confidence": null,
      "reason": null,
      "errorCode": null,
      "mimeType": "video/mp4",
      "originalName": "sample_video.mp4",
      "createdAt": "2025-11-29T06:12:30.123Z",
      "updatedAt": "2025-11-29T06:12:35.456Z"
    }
  ]
}
2.3 Reading the Verdict

When status is "done", result carries the verdict and confidence carries how strongly the analysis supports it, as a value between 0 and 1. The same numbers appear in the PDF report, so a threshold applied to the API gives the same decision as the report. No report download is needed to read the verdict.

FieldValuesMeaning
result"real" or "fake"The verdict for the analysed file. Treat any other value as no verdict.
confidence0 to 1, for example 0.9412Confidence in that verdict. Null for analyses run before mid-2026, and while a job is still running.
reasonTextA human-readable note, such as "Analysis completed successfully". Not a verdict: do not branch on it.

Which detection models ran, and what each scored, is internal and is not returned by the API. The models in the ensemble change over time; confidence is the value to build logic on.

2.4 Failed Analyses

When status is "failed", errorCode tells you why and reason is a short message you can show to your users. Use errorCode in your code, since the reason wording may change.

errorCodeMeaningWhat to do
INVALID_MEDIAThe file could not be read as a valid image, audio or video file.Check that the file opens correctly, then upload it again. Retrying the same file will not help.
MEDIA_EXPIREDThe media file was removed after the retention period.Upload the file again to analyze it.
SYSTEM_BUSYThe analysis could not be started, even after automatic retries, because the system was busy.Start the analysis again later with the same referenceId. This does not use upload quota.
PROCESSING_TIMEOUTThe analysis took too long and was stopped.Start the analysis again with the same referenceId.
ANALYSIS_FAILEDThe analysis could not be completed.Start the analysis again with the same referenceId. Contact support if it keeps failing.

Example Response (Failed)

{
  "statusCode": 0,
  "data": {
    "referenceId": "692a9390e18c3d5e423c5cb8",
    "status": "failed",
    "reportUrl": null,
    "reportFileHash": null,
    "result": null,
    "confidence": null,
    "reason": "The file could not be read as a valid image, audio or video file. Please check the file and upload it again.",
    "errorCode": "INVALID_MEDIA",
    "mimeType": "image/jpeg",
    "originalName": "evidence.jpg",
    "createdAt": "2025-11-29T06:12:30.123Z",
    "updatedAt": "2025-11-29T06:15:17.456Z"
  }
}

3. Stop Running Task

Cancel a queued or processing analysis task. Useful for stopping long-running analyses or correcting mistakes.

POST https://app.spellbreaker.ai/api/v1.0/deepfake/stop

Authentication:

Authorization: Bearer <your_api_token_here>

Request Body:

FieldTypeRequiredDescription
referenceIdstringYesReference ID of the task to stop

Example Request:

curl -X POST "https://app.spellbreaker.ai/api/v1.0/deepfake/stop" \
  -H "Authorization: Bearer <your_api_token_here>" \
  -H "Content-Type: application/json" \
  -d '{"referenceId": "692a9390e18c3d5e423c5cb8"}'

Success Response

{
  "statusCode": 0,
  "data": {
    "status": "stopped"
  }
}

4. Get User Statistics

Retrieve aggregate statistics for your account, including total scans, completed analyses, and status breakdown.

GET https://app.spellbreaker.ai/api/v1.0/deepfake/stats

Authentication Note:

This endpoint requires your email in the Authorization header (API tokens are not supported for this endpoint).

Authorization: Bearer your_email@example.com

Example Request:

curl -X GET "https://app.spellbreaker.ai/api/v1.0/deepfake/stats" \
  -H "Authorization: Bearer your_email@example.com"

Success Response

{
  "statusCode": 0,
  "data": {
    "totalScans": 125,
    "completedScans": 118,
    "queuedScans": 2,
    "processingScans": 1,
    "failedScans": 3,
    "stoppedScans": 1
  }
}
Security & Best Practices
  • API tokens are valid until you revoke them via the dashboard or API
  • Media files are automatically deleted after a configured retention period (server-side)
  • Only SHA-256 file hashes and analysis reports are permanently stored
  • Use reportFileHash to verify report integrity
  • Poll status endpoints at reasonable intervals (recommended: every 5-10 seconds)
  • Use the bulk status endpoint for checking multiple tasks efficiently

Generate Report

After media inspection is complete (status is done ), a detailed forensic report is available for download. The report includes classification results (real/fake), confidence scores, technical analysis details and visual evidence.


Endpoint

GET https://app.spellbreaker.ai/api/v1.0/reports/<filename>

The reportUrl is returned in the status API response when the analysis is complete. This URL already contains the filename. Request it with the same Authorization header you use for the rest of the API.


Authentication

Send your API token as a Bearer token in the Authorization header, the same as every other endpoint:

Authorization: Bearer <your_api_token_here>

An apitoken query parameter is also accepted, but avoid it for server-to-server calls: URLs are often written to server and proxy logs.


Code Example

cURL - Download Report

curl -X GET "https://app.spellbreaker.ai/api/v1.0/reports/f3a1754b-3329-4851-8ec8-10df78beac2a.pdf" \
  -H "Authorization: Bearer <your_api_token_here>" \
  -H "Accept: application/pdf" \
  -o report.pdf

Response

Success (200 OK)

Returns a binary stream of the report file (typically PDF). The response includes:

  • Content-Type: application/pdf
  • Content-Length: File size in bytes
  • Content-Disposition: inline; filename="..."
%PDF-1.7
1 0 obj
...binary PDF data...
%%EOF

Error Responses

HTTP Status CodeResponse Body (JSON)Description
400 Bad Request{"statusCode":-9999,"message":"Authentication required: provide an API token or JWT access token in the Authorization header, or apitoken/email in query string"}No credentials were sent. Add the Authorization header with your API token.
401 Unauthorized{"statusCode":-1010,"message":"Invalid API token"}The API token is wrong or has been revoked.
403 Forbidden{"statusCode":-9999,"message":"File not found or access denied"}The specified file_name does not exist or this file does not belong to the user.
500 Internal Server Error{ "error": "Internal Server Error", "message": "Failed to generate report." }An unexpected error occurred on the server while generating the report.

Developer Notes

  • All uploaded files are deleted after a configured retention period; only SHA256 hashes and reports are stored
  • Use reportFileHash to verify report integrity after download
  • Reports contain classification results (real/fake), confidence scores and detailed analysis

Common Error Codes

Status CodeError MessageSolution
400Authorization header is requiredInclude Authorization: Bearer <token> header
400File hash mismatchRecalculate SHA-256 hash of file content
400Unsupported file extensionUse supported formats: .mp4, .png, .jpg, .mp3, etc.
400The file is not a valid image/audio/video fileUpload the original file. Check that it opens correctly and that its extension matches its real format
400The uploaded file is emptyCheck the file was read completely before sending it
400File size exceeds the limitCompress or reduce file size before upload
401Invalid API tokenGenerate a new API token from dashboard
403User not foundVerify API token belongs to registered user
403File not found or access deniedEnsure file exists and belongs to your account
404Media not foundVerify the referenceId is correct
409Task already in progressWait for current analysis to complete or stop it first
500Internal server errorRetry request or contact support if issue persists

Best Practices for API Integration

  • Validate files locally: Check file type and size before uploading to save bandwidth
  • Calculate hash accurately: Use SHA-256 on the exact bytes being uploaded
  • Implement exponential backoff: When polling status, increase interval on repeated checks
  • Handle all status codes: Implement proper error handling for each HTTP status code
  • Store referenceIds: Keep track of referenceIds for future status checks
  • Verify report integrity: Always validate reportFileHash after download
  • Use bulk endpoints: Check multiple tasks at once with the bulk status endpoint
  • Secure your tokens: Never expose API tokens in client-side code or public repositories

Security & Privacy

At Spellbreaker, safeguarding your data and privacy is at the core of our platform. We are committed to providing a secure, trustworthy environment for detecting deepfakes and protecting digital identity.

Data Handling

  • End-to-End Encryption: All media uploads and API requests are encrypted using HTTPS (TLS 1.2+).
  • Temporary Storage: Uploaded media files are stored only for the duration required to complete analysis.
  • Automatic Deletion: Media files are automatically deleted after inspection and report generation, unless retention is explicitly enabled by the user.

Model Isolation

  • Each AI detection model runs in a sandboxed environment to prevent cross-contamination and ensure privacy.
  • No raw media data is shared with external systems or third-party services.

Audit & Compliance

  • Spellbreaker maintains internal audit logs for critical API events and model decisions.
  • We adhere to data protection standards aligned with GDPR and CCPA requirements.

API Security

  • API Keys: All endpoints require authentication via secure API.
  • Rate Limiting: To prevent abuse, API usage is rate-limited and monitored.
  • Token Expiry: Temporary access tokens (when used) expire automatically to reduce risk.
  • IP Whitelisting: API is accessible from whitelisted IPs. Ensure your IP is registered with Spellbreaker.

Integrity Protection

  • Hash Verification: Media file integrity is checked using SHA-256 hash comparison during upload.
  • Tamper Detection: We monitor anomalies in model execution that may indicate malicious inputs.

Questions?

For inquiries related to security or privacy compliance, contact our security team at:

team@spellbreaker.ai

Frequently Asked Questions (FAQ)

This page will be updated soon with answers to the most common questions about using the Spellbreaker API and platform.

Stay tuned!

Contact Us

We'd love to hear from you! Whether you're interested in our services, have questions about our platform or want to collaborate — feel free to get in touch.

General Inquiries

For general questions, partnership opportunities or media inquiries, reach out to:

Email: support@spellbreaker.ai

Business & Enterprise Solutions

For enterprise support, custom integrations or bulk analysis options, please contact:

Email: team@spellbreaker.ai

Office Location

Spellbreaker Inc.
300 W Michigan Ave. Suite DR1
Ypsilanti, MI 48197

Support Hours

Monday to Friday: 9:00 AM – 5:00 PM (EST)
Saturday & Sunday: Closed

Thank you for reaching out to us. We'll respond to your message as soon as possible!

© 2026 ProbeTruth, Inc. | All Rights Reserved Spellbreaker™ is a trademark of ProbeTruth, Inc.