Toenail Fungus Detection API

AI-powered toenail fungus diagnosis for WordPress integration

Quick Test Interface

🔐 Authentication

All API requests require authentication using an API key in the Authorization header.

Note: Contact FYELABS to obtain your API key for production use.

Header Format

Authorization: Api-Key YOUR_API_KEY_HERE

📡 API Endpoints

POST /api/submit

Submit a toenail image for AI diagnosis. Returns immediate results including infection status, confidence scores, individual toenail analysis, and annotated images. A professional PDF report is automatically generated and saved.

Request Parameters

Parameter Type Required Description
input_image File Required Image file of toenail (JPG, PNG)
name String Required Patient name
age Integer Required Patient age (0-150)
email String Optional Patient email address
gender String Optional Patient gender

Example Request (cURL)

curl -X POST http://172.105.24.127:8000/api/submit \ -H "Authorization: Api-Key YOUR_API_KEY" \ -F "input_image=@toenail.jpg" \ -F "name=John Doe" \ -F "age=45" \ -F "email=john@example.com" \ -F "gender=Male"

Example Request (Python)

import requests url = "http://172.105.24.127:8000/api/submit" headers = { "Authorization": "Api-Key YOUR_API_KEY" } files = { "input_image": open("toenail.jpg", "rb") } data = { "name": "John Doe", "age": 45, "email": "john@example.com", "gender": "Male" } response = requests.post(url, headers=headers, files=files, data=data) result = response.json() print(result)

Response (200 OK)

{ "request_id": "550e8400-e29b-41d4-a716-446655440000", "status": "COMPLETED", "created_at": "2025-11-19T10:30:00Z", "completed_at": "2025-11-19T10:30:02Z", "name": "John Doe", "age": 45, "gender": "Male", "email": "john@example.com", // Image URLs "input_image_url": "http://172.105.24.127:8000/media/inputs/toenail.jpg", "output_image_url": "http://172.105.24.127:8000/media/outputs/img_abc123.jpg", "output_image_yolo_url": "http://172.105.24.127:8000/media/outputsyolo/img_xyz789.jpg", // Diagnosis Results "infected": true, // ResNet-152 result "maxscore": 94.5, // ResNet confidence % "infected_yolo": true, // YOLO result "maxscore_yolo": 96.8, // YOLO confidence % "toenails_detected": 3, // Number of toenails found // Individual Toenail Results "toenail_results": [ { "toenail_number": 1, "detection_confidence": 0.987, "bbox_x1": 120, "bbox_y1": 150, "bbox_x2": 280, "bbox_y2": 310, "resnet_score": 94.5, "resnet_infected": true, "yolo_score": 96.2, "yolo_infected": true }, // ... additional toenails ], // Analysis Summaries "resnet_diagnosis": { "status": "infected", "confidence": 94.5, "message": "Based on the diagnostic analysis..." }, "yolo_diagnosis": { "status": "infected", "confidence": 96.8, "message": "The secondary diagnostic analysis..." }, "error_message": null }

POST /api/request-report

Request a professional PDF report to be emailed to the patient. The PDF report is automatically generated during diagnosis, this endpoint simply emails it to the specified address.

Request Parameters (JSON)

Parameter Type Required Description
request_id UUID Required The request_id from /api/submit response
email String Optional Email address (uses stored email if not provided)

Example Request (cURL)

curl -X POST http://172.105.24.127:8000/api/request-report \ -H "Authorization: Api-Key YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"request_id": "550e8400-e29b-41d4-a716-446655440000"}'

Example Request (Python)

import requests url = "http://172.105.24.127:8000/api/request-report" headers = { "Authorization": "Api-Key YOUR_API_KEY", "Content-Type": "application/json" } data = { "request_id": "550e8400-e29b-41d4-a716-446655440000", "email": "patient@example.com" # Optional } response = requests.post(url, headers=headers, json=data) result = response.json() print(result)

Response (200 OK)

{ "message": "Report sent successfully", "request_id": "550e8400-e29b-41d4-a716-446655440000", "email": "patient@example.com" }

Error Responses

// 400 Bad Request - Missing request_id { "error": "request_id is required" } // 400 Bad Request - Diagnosis not completed { "error": "Diagnosis not completed yet" } // 400 Bad Request - No email provided { "error": "Email address required" } // 404 Not Found - Invalid request_id { "detail": "Not found." }

GET /api/result/<request_id>/

Retrieve diagnosis results using the request ID. Returns the same data structure as /api/submit.

Example Request (cURL)

curl -X GET http://172.105.24.127:8000/api/result/550e8400-e29b-41d4-a716-446655440000/ \ -H "Authorization: Api-Key YOUR_API_KEY"

POST /api/user-history

Retrieve all previous diagnosis submissions for a user by email. Returns a list of all historical diagnoses.

Request Parameters (JSON)

Parameter Type Required Description
email String Required User email address to look up history

Example Request (cURL)

curl -X POST http://172.105.24.127:8000/api/user-history \ -H "Authorization: Api-Key YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email": "user@example.com"}'

Example Request (Python)

import requests url = "http://172.105.24.127:8000/api/user-history" headers = { "Authorization": "Api-Key YOUR_API_KEY", "Content-Type": "application/json" } data = { "email": "user@example.com" } response = requests.post(url, headers=headers, json=data) result = response.json() print(result)

Response (200 OK)

{ "email": "user@example.com", "total_requests": 5, "submissions": [ { "request_id": "550e8400-e29b-41d4-a716-446655440000", "status": "COMPLETED", "created_at": "2025-11-19T10:30:00Z", "completed_at": "2025-11-19T10:30:02Z", "name": "John Doe", "age": 35, "gender": "Male", "infected": true, "maxscore": 94.5, "infected_yolo": true, "maxscore_yolo": 96.8, "toenails_detected": 3, "input_image_url": "http://172.105.24.127:8000/media/inputs/img.jpg", "output_image_url": "http://172.105.24.127:8000/media/outputs/img.jpg" }, // ... more submissions ordered by most recent first ] }

Response (No History)

{ "email": "newuser@example.com", "total_requests": 0, "submissions": [], "message": "No history found for this email" }

📋 Response Fields

Field Type Description
request_id UUID Unique identifier for this diagnosis request
status String Processing status: COMPLETED, FAILED
infected Boolean Infection detected by ResNet-152 model
maxscore Float ResNet confidence score (0-100%)
infected_yolo Boolean Infection detected by YOLO model
maxscore_yolo Float YOLO confidence score (0-100%)
toenails_detected Integer Number of toenails detected in image
output_image_url String URL to ResNet-annotated result image
output_image_yolo_url String URL to YOLO-annotated result image
toenail_results Array Individual toenail analysis data (number, bbox, scores)
resnet_diagnosis Object ResNet analysis summary (status, confidence, message)
yolo_diagnosis Object YOLO analysis summary (status, confidence, message)
PDF Report: A professional PDF report is automatically generated during diagnosis and saved on the server. Use the /api/request-report endpoint to email it to patients after payment.

⚠️ Error Codes

Status Code Error Description
400 Bad Request Missing required parameters or invalid data format
401 Unauthorized Missing or invalid API key
403 Forbidden Valid API key but access denied
500 Internal Server Error Processing error on server side

Example Error Response

{ "detail": "Invalid API key" }

⏱️ Performance & Limits

Processing Time: Typical response time is 1-3 seconds per request
Concurrent Requests: Optimal performance with up to 5 concurrent requests. Higher concurrency may increase response times.
File Retention: Uploaded images and results are retained for 120 days, then automatically deleted.

🔌 WordPress Integration

To integrate this API into your WordPress site:

1. Create a Simple Form

<!-- Add to your WordPress page/post --> <form id="toenail-form" enctype="multipart/form-data"> <input type="text" name="name" placeholder="Your Name" required> <input type="number" name="age" placeholder="Age" required> <input type="email" name="email" placeholder="Email"> <input type="file" name="input_image" accept="image/*" required> <button type="submit">Analyze</button> </form> <div id="results"></div>

2. Add JavaScript Handler

document.getElementById('toenail-form').addEventListener('submit', async (e) => { e.preventDefault(); const formData = new FormData(e.target); try { const response = await fetch('http://172.105.24.127:8000/api/submit', { method: 'POST', headers: { 'Authorization': 'Api-Key YOUR_API_KEY' }, body: formData }); const result = await response.json(); // Display results document.getElementById('results').innerHTML = ` <h3>Results</h3> <p>Infection Detected: ${result.infected ? 'Yes' : 'No'}</p> <p>Confidence: ${result.maxscore.toFixed(1)}%</p> <img src="${result.output_image_url}" alt="Result"> `; } catch (error) { console.error('Error:', error); } });

💬 Support & Contact

For API keys, technical support, or integration assistance: