Documentation
Code Examples
Ready-to-use examples in popular programming languages
Before You Start
Replace scopix_your_api_key with your actual API key from the dashboard.
Quick Start: Analyze an Image
One API call to upload, describe, and extract text
cURL
bash
curl -X POST https://api.scopix.ai/api/v2/images/analyze \ -H "Authorization: Bearer scopix_your_api_key" \ -F "file=@photo.jpg"Python
python
import requests
response = requests.post( "https://api.scopix.ai/api/v2/images/analyze", headers={"Authorization": "Bearer scopix_your_api_key"}, files={"file": open("photo.jpg", "rb")})result = response.json()print(f"Description: {result['description']}")print(f"Tags: {result['tags']}")print(f"Status: {result['status']}")Async with Polling
python
import requests, time
API_KEY = "scopix_your_api_key"BASE = "https://api.scopix.ai/api/v2"headers = {"Authorization": f"Bearer {API_KEY}"}
# Submit asyncresp = requests.post( f"{BASE}/images/analyze/async", headers=headers, files={"file": open("photo.jpg", "rb")})job = resp.json()print(f"Job ID: {job['job_id']}")
# Poll for resultswhile True: status = requests.get( f"{BASE}/job/{job['job_id']}", headers=headers ).json()
if status["status"] in ("completed", "failed"): break time.sleep(2)
for r in status["results"]: print(f"Description: {r['description']}") print(f"Tags: {r['tags']}")Python
Using the requests library
Upload Image with Auto-Description
python
import requests
API_KEY = "scopix_your_api_key"BASE_URL = "https://api.scopix.ai/api/v2"
# Upload and describe in a single requestwith open("product.jpg", "rb") as f: response = requests.post( f"{BASE_URL}/files/upload", headers={"Authorization": f"Bearer {API_KEY}"}, files={"file": ("product.jpg", f, "image/jpeg")}, data={"auto_describe": "true"} )
result = response.json()print(f"Image ID: {result['image_id']}")print(f"Status: {result['status']}")print(f"Analysis started: {result['analysis_started']}")Multi-File Upload with Session Tracking
python
import requestsimport time
API_KEY = "scopix_your_api_key"BASE_URL = "https://api.scopix.ai/api/v2"headers = {"Authorization": f"Bearer {API_KEY}"}
# Upload multiple files in a single batch requestfiles = [ ("files", ("image1.jpg", open("image1.jpg", "rb"), "image/jpeg")), ("files", ("image2.jpg", open("image2.jpg", "rb"), "image/jpeg")),]
response = requests.post( f"{BASE_URL}/files/upload/batch", headers=headers, files=files,)batch_data = response.json()session_id = batch_data["session_id"]print(f"Session ID: {session_id}")print(f"Accepted: {batch_data['accepted_files']}/{batch_data['total_files']} files")
# For small batches (<=5 files), immediate_results is includedif batch_data.get("immediate_results"): for img in batch_data["immediate_results"]: print(f" {img['filename']}: {img['status']}")else: # Poll session status for larger batches while True: status_resp = requests.get( f"{BASE_URL}/files/sessions/{session_id}/status", headers=headers ) status = status_resp.json() pct = status.get("progress_percentage", 0) print(f"Status: {status['status']} - Progress: {pct:.0f}%")
if status["status"] in ["completed", "failed", "cancelled"]: break time.sleep(2)cURL
Command line examples
Upload Image
bash
# Single file uploadcurl -X POST https://api.scopix.ai/api/v2/files/upload \ -H "Authorization: Bearer scopix_your_api_key" \ -F "file=@image.jpg"
# Batch upload (multiple files)curl -X POST https://api.scopix.ai/api/v2/files/upload/batch \ -H "Authorization: Bearer scopix_your_api_key" \ -F "files=@image1.jpg" \ -F "files=@image2.jpg" \ -F "tags=inspection,site"Error Handling
python
import requestsimport time
def upload_with_retry(file_path, max_retries=3): """Upload a file with automatic retry and error handling.""" API_KEY = "scopix_your_api_key" BASE_URL = "https://api.scopix.ai/api/v2" headers = {"Authorization": f"Bearer {API_KEY}"}
for attempt in range(max_retries): try: with open(file_path, "rb") as f: response = requests.post( f"{BASE_URL}/files/upload", headers=headers, files={"file": f}, )
if response.status_code == 200: result = response.json() print(f"Success: {result['image_id']}") return result
elif response.status_code == 429: retry_after = int(response.headers.get('Retry-After', 5)) print(f"Rate limited, waiting {retry_after} seconds...") time.sleep(retry_after) continue
elif response.status_code == 413: print("File too large — maximum size is 100MB") return None
else: error = response.json().get('detail', response.text) print(f"Error {response.status_code}: {error}") return None
except requests.exceptions.RequestException as e: print(f"Request failed (attempt {attempt + 1}/{max_retries}): {e}") if attempt < max_retries - 1: wait_time = 2 ** attempt # Exponential backoff print(f"Retrying in {wait_time} seconds...") time.sleep(wait_time) continue raise
