The SmartScanPro.ai API is a powerful medical device data extraction service that uses advanced AI to process images of medical devices and extract actionable data in JSON format.
https://api.smartscanpro.ai
register.html
The SmartScanPro.ai API uses API key authentication for all requests.
Include your API key in the request headers:
X-API-Key: dk_your_api_key_here
Or as a query parameter:
https://api.smartscanpro.ai/v1/extract-medical-data?api_key=dk_your_api_key_here
register.html
dashboard.html
/api/v1/extract-medical-data
Extract medical device data from images using advanced AI.
X-API-Key: dk_your_api_key_here
Content-Type: multipart/form-data
image
(file, required): Medical device imagedevice_type
(string, optional): Device type hintconfidence_threshold
(number, optional): Minimum confidence (0.0-1.0)/api/device-types
Get list of supported device types.
/api/health
Check API health status.
/api/auth/profile
/api/auth/profile
/api/projects
/api/projects
/api/projects/:id
/api/dashboard/stats
/api/usage/analytics
/api/usage/logs
/api/api-keys
/api/api-keys/generate
The SmartScanPro.ai API supports 15 different types of medical devices and documents:
Device Type: blood-pressure
Extracted Data:
Supported Brands: Omron, Withings, A&D Medical, Beurer, Generic monitors
Device Type: scale
Extracted Data:
Supported Brands: Withings, Fitbit Aria, Tanita, Renpho, Eufy, Generic smart scales
Device Type: glucose-meter
Extracted Data:
Supported Brands: Accu-Chek, OneTouch, FreeStyle, Contour, Bayer, Generic meters
Device Type: pulse-oximeter
Extracted Data:
Supported Brands: Masimo, Nonin, Contec, Zacurate, Innovo, Generic oximeters
Device Type: thermometer
Extracted Data:
Supported Brands: Braun, Omron, iHealth, Kinsa, Vicks, Generic digital thermometers
Device Type: peak-flow-meter
Extracted Data:
Supported Brands: Clement Clarke, Respironics, Omron, Vitalograph, Microlife
Device Type: ecg-monitor
Extracted Data:
Supported Brands: AliveCor, Omron HeartScan, EMAY, CheckMe, Wellue, Generic portable ECGs
Device Type: vaccine-certificate
Extracted Data:
Supported Types: COVID-19, Influenza, Hepatitis, MMR, Travel vaccines, Childhood immunizations, ALL vaccine types
Device Type: dialysis-machine
Extracted Data:
Supported Brands: Fresenius, Baxter, B. Braun, Nipro, Gambro, Generic dialysis equipment
Device Type: pregnancy-kit
Extracted Data:
Supported Types: Digital tests, strip tests, cassette tests, early detection tests, all major brands
Device Type: 5para-monitor
Extracted Data:
Supported Brands: Philips, GE Healthcare, Mindray, Nihon Kohden, Masimo, Generic patient monitors
Device Type: covid-test-strip
Extracted Data:
Supported Types: Rapid antigen (BinaxNOW, FlowFlex, QuickVue), lateral flow, home test kits, professional tests
Document Type: prescription
Extracted Data:
Document Type: discharge-summary
Extracted Data:
Document Type: clinical-notes
Extracted Data:
All API responses follow a consistent JSON format:
{
"success": true,
"data": {
"device_type": "blood-pressure",
"confidence": 0.95,
"extracted_data": {
"systolic": 120,
"diastolic": 80,
"pulse": 72,
"unit": "mmHg",
"timestamp": "2024-01-15T10:30:00Z"
},
"processing_time_ms": 1250,
"image_info": {
"width": 1920,
"height": 1080,
"format": "JPEG",
"size_bytes": 245760
}
}
}
{
"systolic": 120,
"diastolic": 80,
"pulse": 72,
"unit": "mmHg",
"pulseUnit": "bpm",
"meanArterialPressure": 93,
"pulsePressure": 40,
"timestamp": "2024-01-15T10:30:00Z",
"batteryStatus": "normal",
"irregularHeartbeat": false,
"userProfile": 1,
"memoryReading": false
}
{
"weight": 75.2,
"unit": "kg",
"bmi": 22.1,
"bodyFatPercentage": 15.2,
"muscleMass": 32.5,
"boneMass": 3.2,
"waterPercentage": 58.7,
"visceralFatRating": 8,
"metabolicAge": 28,
"basalMetabolicRate": 1650,
"userProfile": 2,
"timestamp": "2024-01-15T07:00:00Z",
"batteryLevel": "high",
"trend": "stable"
}
{
"glucoseLevel": 95,
"unit": "mg/dL",
"timestamp": "2024-01-15T08:15:00Z",
"testStripLot": "ABC123",
"mealIndicator": "before_meal",
"averages": {
"7day": 98,
"14day": 102,
"30day": 105
},
"highLowAlert": "normal",
"batteryLevel": "good",
"temperatureCompensation": true,
"userId": 1,
"memorySlot": 45
}
{
"oxygenSaturation": 98,
"pulse": 65,
"perfusionIndex": 12.5,
"signalStrength": "strong",
"waveformQuality": "good",
"lowPerfusionAlert": false,
"motionArtifact": false,
"pulseAmplitude": 2.8,
"sensorStatus": "connected",
"patientMode": "adult",
"alarmLimits": {
"spo2Low": 90,
"spo2High": 100,
"pulseLow": 50,
"pulseHigh": 120
},
"timestamp": "2024-01-15T09:45:00Z",
"batteryLevel": "medium"
}
{
"temperature": 36.8,
"unit": "°C",
"location": "oral",
"feverIndicator": false,
"normalRange": "36.1-37.2°C",
"memoryReading": "last: 36.9°C",
"timestamp": "2024-01-15T07:45:00Z",
"batteryLevel": "good",
"probeCover": "detected",
"calibrationStatus": "valid",
"environmentalCompensation": true,
"autoShutoff": "2min"
}
{
"peakFlowRate": 420,
"unit": "L/min",
"personalBest": 495,
"personalBestPercentage": 85,
"zone": "yellow",
"predictedValue": 480,
"previousReading": 435,
"averageReadings": {
"daily": 425,
"weekly": 418
},
"patientAge": 35,
"patientHeight": 175,
"asthmaActionPlan": "yellow_zone",
"timestamp": "2024-01-15T11:15:00Z",
"calibrationDate": "2024-01-01"
}
{
"heartRate": 68,
"rhythm": "normal_sinus",
"qtInterval": 380,
"qtcInterval": 410,
"leadConfig": "lead_I",
"pWaveAnalysis": "normal",
"qrsDuration": 95,
"stSegment": "normal",
"tWave": "normal",
"arrhythmiaDetection": "none",
"heartRateVariability": 45,
"recordingDuration": "30s",
"signalQuality": "excellent",
"electrodeContact": "good",
"artifactDetection": "minimal",
"timestamp": "2024-01-15T12:30:00Z",
"batteryStatus": "75%"
}
{
"patientName": "John Doe",
"dateOfBirth": "1985-03-15",
"vaccineName": "COVID-19 mRNA Vaccine",
"manufacturer": "Pfizer-BioNTech",
"vaccinationDate": "2024-01-10",
"lotNumber": "ABC123",
"administrator": "Dr. Smith",
"healthcareProvider": "City Medical Center",
"doseNumber": 2,
"routeOfAdministration": "intramuscular",
"injectionSite": "left deltoid",
"nextDueDate": "2024-07-10",
"visDate": "2023-12-01",
"vaccineExpiration": "2024-06-30"
}
{
"treatmentTime": "4:00",
"bloodFlowRate": 350,
"dialysateFlowRate": 500,
"ultrafiltrationRate": 800,
"transmembranePressure": 150,
"venousPressure": 120,
"arterialPressure": -80,
"fluidRemovalGoal": 2.5,
"ktVRatio": 1.4,
"treatmentStatus": "running",
"totalFluidRemoved": 1.8,
"conductivity": 14.0,
"temperature": 37.0,
"patientDryWeight": 72.7,
"sessionStartTime": "08:00",
"accessPressure": 165,
"alarmStatus": "none"
}
{
"testResult": "positive",
"testType": "digital",
"weeksIndicator": 3,
"controlLine": "visible",
"testLine": "strong",
"testDate": "2024-01-15T08:00:00Z",
"brandName": "Clearblue Digital",
"lotNumber": "LOT123",
"expirationDate": "2025-01-15",
"testTiming": "3",
"testValidity": "valid",
"sensitivityLevel": "25mIU/mL",
"sampleType": "urine"
}
{
"heartRate": 78,
"systolic": 125,
"diastolic": 82,
"oxygenSaturation": 97,
"respiratoryRate": 16,
"temperature": 37.1,
"meanArterialPressure": 96,
"pulsePressure": 43,
"alarmIndicators": "none",
"leadConfiguration": "3-lead",
"waveformQuality": "good",
"nibpCycleTime": "auto",
"spo2SensorStatus": "connected",
"temperatureProbe": "core",
"patientInfo": "Bed 12A",
"timestamp": "2024-01-15T10:15:00Z",
"deviceStatus": "monitoring"
}
{
"testResult": "negative",
"testType": "rapid antigen",
"manufacturer": "Abbott BinaxNOW",
"controlLine": "visible",
"testLine": "not visible",
"testDate": "2024-01-15T08:30:00Z",
"lotNumber": "ABC123",
"expirationDate": "2024-12-31",
"testTiming": "15",
"sampleType": "nasal swab",
"sensitivity": "84.6%",
"specificity": "98.5%",
"serialNumber": "BNX789",
"storageTemp": "2-30°C",
"qrCode": "detected"
}
{
"patientName": "Jane Smith",
"patientDOB": "1980-05-20",
"patientAddress": "123 Main St",
"prescriber": "Dr. Johnson",
"prescriberNPI": "1234567890",
"prescriberDEA": "BJ1234567",
"pharmacy": "CVS Pharmacy",
"datePrescribed": "2024-01-15",
"medication": "Lisinopril",
"genericName": "Lisinopril",
"brandName": "Prinivil",
"strength": "10mg",
"quantity": 30,
"directions": "Take 1 tablet daily by mouth",
"refills": 5,
"daysSupply": 30,
"ndcNumber": "12345-678-90",
"diagnosis": "Hypertension",
"genericSubstitution": "allowed"
}
{
"patientName": "Robert Brown",
"patientDOB": "1965-08-12",
"medicalRecordNumber": "MRN123456",
"admissionDate": "2024-01-10",
"dischargeDate": "2024-01-15",
"primaryDiagnosis": "Acute Myocardial Infarction",
"secondaryDiagnoses": ["Diabetes Type 2", "Hypertension"],
"procedures": ["Cardiac catheterization", "Stent placement"],
"attendingPhysician": "Dr. Williams",
"dischargeMedications": "Aspirin 81mg daily, Metoprolol 50mg BID",
"followUp": "Cardiology clinic in 1 week",
"activityRestrictions": "No lifting >10lbs",
"dietInstructions": "Low sodium, cardiac diet",
"disposition": "Home with family",
"vitalSignsAtDischarge": "BP: 128/78, HR: 68",
"condition": "Stable"
}
{
"patientName": "Mary Johnson",
"patientDOB": "1975-11-03",
"medicalRecordNumber": "MRN789012",
"visitDate": "2024-01-15",
"visitTime": "14:30",
"provider": "Dr. Davis",
"visitType": "office visit",
"chiefComplaint": "Chest pain",
"historyOfPresentIllness": "3-day history of chest discomfort",
"reviewOfSystems": "Positive for chest pain, negative for SOB",
"physicalExam": "Heart regular rate and rhythm",
"vitalSigns": "BP: 130/85, HR: 72, Temp: 36.8°C, RR: 16, O2: 98%",
"assessment": "Stable angina",
"plan": "Continue current medications, stress test in 2 weeks",
"medications": "Atorvastatin 40mg daily, Metoprolol 25mg BID",
"allergies": "NKDA",
"followUp": "Return in 2 weeks"
}
{
"success": false,
"error": "Error description",
"error_code": "ERROR_CODE",
"details": {
"field": "Additional error information"
}
}
Status Code | Description |
---|---|
200 | Success |
400 | Bad Request - Invalid parameters |
401 | Unauthorized - Invalid or missing API key |
403 | Forbidden - Rate limit exceeded |
413 | Payload Too Large - Image exceeds size limit |
415 | Unsupported Media Type - Invalid image format |
429 | Too Many Requests - Rate limit exceeded |
500 | Internal Server Error |
INVALID_API_KEY
: API key is invalid or expiredMISSING_API_KEY
: No API key providedRATE_LIMIT_EXCEEDED
: Too many requestsINVALID_IMAGE_FORMAT
: Unsupported image formatIMAGE_TOO_LARGE
: Image exceeds size limitIMAGE_PROCESSING_FAILED
: Failed to process imageLOW_CONFIDENCE
: Extraction confidence below thresholdUNREADABLE_DISPLAY
: Cannot read device displayNO_DEVICE_DETECTED
: No medical device foundsuccess
field before processing response data.
Plan | Requests/Hour | Requests/Day | Requests/Month |
---|---|---|---|
Free | 100 | 1,000 | 10,000 |
Basic | 1,000 | 10,000 | 100,000 |
Pro | 5,000 | 50,000 | 500,000 |
Enterprise | Custom | Custom | Custom |
All responses include rate limit information:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1642248000
X-RateLimit-Window: 3600
{
"success": false,
"error": "Rate limit exceeded",
"error_code": "RATE_LIMIT_EXCEEDED",
"details": {
"limit": 1000,
"window_seconds": 3600,
"reset_time": "2024-01-15T11:00:00Z"
}
}
const fs = require('fs');
const FormData = require('form-data');
async function extractMedicalData(imagePath, deviceType = null) {
const form = new FormData();
form.append('image', fs.createReadStream(imagePath));
if (deviceType) {
form.append('device_type', deviceType);
}
try {
const response = await fetch('https://api.smartscanpro.ai/v1/extract-medical-data', {
method: 'POST',
headers: {
'X-API-Key': process.env.SMARTSCANPRO_API_KEY,
...form.getHeaders()
},
body: form
});
const result = await response.json();
if (result.success) {
console.log('Extracted data:', result.data.extracted_data);
return result.data;
} else {
console.error('Extraction failed:', result.error);
return null;
}
} catch (error) {
console.error('Request failed:', error);
return null;
}
}
// Usage
extractMedicalData('./blood_pressure_reading.jpg', 'blood-pressure')
.then(data => {
if (data) {
const extracted = data.extracted_data;
console.log(`Blood Pressure: ${extracted.systolic}/${extracted.diastolic} mmHg`);
console.log(`Pulse: ${extracted.pulse} BPM`);
}
});
import requests
import os
class SmartScanProClient:
def __init__(self, api_key, base_url="https://api.smartscanpro.ai"):
self.api_key = api_key
self.base_url = base_url
def extract_medical_data(self, image_path, device_type=None, confidence_threshold=None):
"""Extract medical data from device image."""
url = f"{self.base_url}/v1/extract-medical-data"
headers = {"X-API-Key": self.api_key}
files = {"image": open(image_path, "rb")}
data = {}
if device_type:
data["device_type"] = device_type
if confidence_threshold:
data["confidence_threshold"] = confidence_threshold
try:
response = requests.post(url, headers=headers, files=files, data=data)
result = response.json()
if result.get("success"):
return result["data"]
else:
raise Exception(f"API Error: {result.get('error', 'Unknown error')}")
except requests.exceptions.RequestException as e:
raise Exception(f"Request failed: {str(e)}")
finally:
files["image"].close()
# Usage
client = SmartScanProClient(os.getenv("SMARTSCANPRO_API_KEY"))
try:
data = client.extract_medical_data(
"blood_pressure_reading.jpg",
device_type="blood-pressure"
)
extracted = data["extracted_data"]
print(f"Blood Pressure: {extracted['systolic']}/{extracted['diastolic']} {extracted['unit']}")
print(f"Pulse: {extracted['pulse']} BPM")
print(f"Confidence: {data['confidence']:.2%}")
except Exception as e:
print(f"Error: {e}")
# Basic request
curl -X POST \
https://api.smartscanpro.ai/v1/extract-medical-data \
-H "X-API-Key: dk_your_api_key_here" \
-F "image=@blood_pressure_reading.jpg" \
-F "device_type=blood-pressure"
# With confidence threshold
curl -X POST \
https://api.smartscanpro.ai/v1/extract-medical-data \
-H "X-API-Key: dk_your_api_key_here" \
-F "image=@glucose_reading.jpg" \
-F "device_type=glucose-meter" \
-F "confidence_threshold=0.8"
import { useState, useCallback } from 'react';
export const useSmartScanProAPI = (apiKey) => {
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const extractData = useCallback(async (imageFile, options = {}) => {
setLoading(true);
setError(null);
try {
const formData = new FormData();
formData.append('image', imageFile);
if (options.deviceType) {
formData.append('device_type', options.deviceType);
}
const response = await fetch('/api/v1/extract-medical-data', {
method: 'POST',
headers: {
'X-API-Key': apiKey
},
body: formData
});
const result = await response.json();
if (!result.success) {
throw new Error(result.error);
}
return result.data;
} catch (err) {
setError(err.message);
throw err;
} finally {
setLoading(false);
}
}, [apiKey]);
return { extractData, loading, error };
};
// Component usage
export const MedicalDeviceUploader = () => {
const { extractData, loading, error } = useSmartScanProAPI(process.env.REACT_APP_API_KEY);
const [result, setResult] = useState(null);
const handleFileUpload = async (event) => {
const file = event.target.files[0];
if (!file) return;
try {
const data = await extractData(file, {
deviceType: 'blood-pressure'
});
setResult(data);
} catch (err) {
console.error('Upload failed:', err);
}
};
return (
{loading && Processing image...
}
{error && Error: {error}
}
{result && (
Extracted Data:
{JSON.stringify(result.extracted_data, null, 2)}
)}
);
};