Skip to main content

Core routes

Each router below is mounted at its root path and again under /v1 (/detect and /v1/detect behave identically). Field names are the multipart/query names the handlers declare. For full request and response schemas, open the running API's /docs.

Detection​

MethodPathInputsReturns
POST/detectimage; query model_name, confidencedetections[] (normalized box, confidence, class_id, class_name), image size, timing
POST/detect/batchimages (up to 64); same queryOne result per image

model_name selects any loaded detector, YOLO11 end2end or YOLO26 alike: the output format is resolved from Triton metadata.

curl -X POST "http://localhost:4603/detect?confidence=0.3" -F "image=@photo.jpg"

Faces and persons​

MethodPathInputsPurpose
POST/faces/detectimage; confidenceSCRFD boxes + 5-point landmarks
POST/faces/recognizeimage; confidenceDetection + ArcFace 512-dim embeddings
POST/faces/verifyimage1, image2; threshold, confidence1:1 comparison
POST/faces/searchimage; face_index, top_k, min_scoreSimilar faces in the index
POST/faces/identifyimage; top_k, threshold1:N identification
POST/persons/clustersimilarity_threshold, min_faces_per_person, max_personsGroup indexed faces into persons
GET/persons, /persons/{person_id}limitList / get persons
PUT/persons/{person_id}/nameName a person
POST/persons/mergeMerge persons
DELETE/persons/{person_id}delete_facesDelete a person

Embeddings​

MethodPathInputsReturns
POST/embed/imageimage; use_cache, index, image_id512-dim MobileCLIP image embedding
POST/embed/textJSON {"text": "..."}; use_cache512-dim text embedding (77-token limit)
POST/embed/batchimagesOne embedding per image
POST/embed/boxesimage, boxes (JSON [[x1,y1,x2,y2], ...], normalized)One embedding per crop
MethodPathInputsSearches
POST/search/imageimage; top_k, min_scoreGlobal image embeddings
POST/search/textquery text, top_k, min_scoreText-to-image via CLIP
POST/search/faceimage; face_index, top_k, min_scoreFace embeddings
POST/search/ocrquery text, top_k, min_scoreImages by recognized text
POST/search/objectimage; box_index, top_k, min_score, class_filterObject-crop embeddings
curl -X POST "http://localhost:4603/search/text?text=sunset+beach&top_k=10"

Ingest and analysis​

MethodPathInputsPurpose
POST/ingestimage; form image_id, image_path, metadata, skip_duplicates, detect_near_duplicates, near_duplicate_threshold, enable_ocr, enable_detection, enable_faces, enable_clipRun every enabled model and index the results
POST/ingest/batchimages (up to 64); form image_ids, image_paths, same toggles, defer_heavy_opsBatch ingest
POST/ingest/directoryquery directory, recursive, max_images, batch_size, same togglesIngest a server-side directory
POST/analyzeimage; include_embedding, include_face_embeddings, enable_ocr, confidence, face_confidenceDetection + faces + CLIP + OCR in one call, no indexing
POST/analyze/batchimages; include_full_results, ...Batch analysis

OCR​

MethodPathInputsPurpose
POST/ocr/predictimage; min_det_score, min_rec_score, filter_by_scorePP-OCRv5 text boxes, strings, scores
POST/ocr/batchimages; min_det_score, min_rec_score, max_workersBatch OCR
POST/ocr/searchquery text, page, size, fuzzySearch indexed OCR text

Clustering, albums and queries​

MethodPathPurpose
POST/clusters/train/{index}Train FAISS clustering for an index (n_clusters, max_samples)
POST/clusters/assign/{index}Assign vectors to clusters
GET/clusters/stats/{index}Cluster statistics
GET/clusters/{index}/{cluster_id}Cluster members (page, size)
POST/clusters/rebalance/{index}Force a rebalance
GET/clusters/balance/{index}Check whether clusters are balanced
GET/clusters/albumsAuto-generated albums (min_size)
GET/query/statsStatistics for every index
GET, DELETE/query/image/{image_id}Stored image data (include_embedding) / delete from all indexes
GET/query/duplicates, /query/duplicates/stats, /query/duplicates/{group_id}Duplicate groups

Model management​

MethodPathPurpose
GET/modelsModels in the Triton repository
POST/models/uploadUpload a checkpoint (file; form triton_name, max_batch, formats, normalize_boxes, auto_load)
POST/models/{model_name}/exportExport to TensorRT in the background
GET/models/export/{task_id}, /models/exportsExport task status
GET/models/{model_name}/statusLoad status
POST/models/{model_name}/load, /models/{model_name}/unloadRuntime load / unload
DELETE/models/{model_name}Remove from the repository. Refused (403, even with force) for the configured detector and OCR models, and 409 for other core pipeline models unless ?force=true; nothing is deleted when refused
POST/models/{model_name}/testRun a test image through a model

Example response​

{
"detections": [
{"x1": 0.094, "y1": 0.278, "x2": 0.870, "y2": 0.989,
"confidence": 0.918, "class_id": 0, "class_name": "person"}
],
"image": {"width": 1920, "height": 1080},
"inference_time_ms": 12.5
}