Skip to content
Private beta · waitlist only

Faces and images, as an API.

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.

face operations / month
1,000
face operations / month
image storage
1 GB
image storage
requests per key
60 / min
requests per key
Illustration. Hover or tap to see what face.detect returns.

Two building blocks

Everything a profile photo needs, in one place.

Upload an image once, deliver it from the CDN, and run Face on it by ID. No bytes shuttled between vendors.

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

Images

Public and private buckets. Types detected from content, streaming uploads, single-use browser upload URLs and signed delivery.

  • POST /v1/images/buckets/{id}/files
  • POST /v1/images/buckets/{id}/upload-urls
  • POST /v1/images/files/{id}/signed-url
  • GET cdn.viso.lol/{bucket}/{path}

One request

Store it, then look at it.

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

The parts you'd otherwise build yourself.

Keys, quotas, logs and deletion are part of the platform, not an afterthought.

Scoped API keys

Per-project keys with read and write scopes, expiry and instant revocation. Shown once, stored as a peppered hash.

Biometrics, opt-in

Face stays off until you accept the notice for a project. Images sent to Face are never stored.

Edge delivery

Files are cached close to your users with strong ETags, range requests and purges on every change.

Every request, visible

Usage charts and a filterable request log per project, with the request ID on every response.

Tenant isolation

Every query is scoped to your team and project. Someone else's IDs look exactly like missing ones.

Stable contract

Versioned routes, an OpenAPI 3.1 document, stable error codes and a typed SDK with retries.

Waitlist

Get early access.

We're onboarding teams in small batches. Tell us what you're building.

Optional, but it helps us prioritize.

No newsletter. One email when your spot opens.