📡 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",
"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",
"infected": true,
"maxscore": 94.5,
"infected_yolo": true,
"maxscore_yolo": 96.8,
"toenails_detected": 3,
"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
},
],
"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"
}
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
{
"error": "request_id is required"
}
{
"error": "Diagnosis not completed yet"
}
{
"error": "Email address required"
}
{
"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"
},
]
}
Response (No History)
{
"email": "newuser@example.com",
"total_requests": 0,
"submissions": [],
"message": "No history found for this email"
}
⏱️ 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
<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();
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);
}
});