Face
Detection with landmarks, pose, quality and attributes. One-to-many comparison. Collections you can index and search.
- POST /v1/face/detect
- POST /v1/face/compare
- POST /v1/face/collections/{id}/faces
- POST /v1/face/collections/{id}/search
Detect, compare and search faces. Store and deliver images at the edge. One REST API, a typed SDK and a dashboard that shows every request.
Two building blocks
Upload an image once, deliver it from the CDN, and run Face on it by ID. No bytes shuttled between vendors.
Detection with landmarks, pose, quality and attributes. One-to-many comparison. Collections you can index and search.
Public and private buckets. Types detected from content, streaming uploads, single-use browser upload URLs and signed delivery.
One request
Every response is a plain, documented JSON object with the same shape whatever runs underneath.
curl -X POST "https://api.viso.lol/v1/images/buckets/$BUCKET_ID/files?path=avatars/ada.png" \
-H "Authorization: Bearer $VISO_API_KEY" \
--data-binary @ada.png
curl https://api.viso.lol/v1/face/detect \
-H "Authorization: Bearer $VISO_API_KEY" \
-F image=@portrait.jpg -F attributes=all{
"object": "face_detection",
"faces": [{
"boundingBox": { "left": 0.22, "top": 0.15, "width": 0.57, "height": 0.59 },
"confidence": 99.9,
"ageRange": { "low": 24, "high": 32 },
"smile": { "value": true, "confidence": 97.1 },
"pose": { "roll": 1.2, "yaw": 4.1, "pitch": -2.3 }
}],
"image": { "width": 1200, "height": 1600, "format": "jpeg" }
}Boxes are ratios of the image size. Attributes appear only when you ask for them.
Built to be boring
Keys, quotas, logs and deletion are part of the platform, not an afterthought.
Per-project keys with read and write scopes, expiry and instant revocation. Shown once, stored as a peppered hash.
Face stays off until you accept the notice for a project. Images sent to Face are never stored.
Files are cached close to your users with strong ETags, range requests and purges on every change.
Usage charts and a filterable request log per project, with the request ID on every response.
Every query is scoped to your team and project. Someone else's IDs look exactly like missing ones.
Versioned routes, an OpenAPI 3.1 document, stable error codes and a typed SDK with retries.
Waitlist
We're onboarding teams in small batches. Tell us what you're building.