Developers
The Vision API
JSON under /api/v1, with application/problem+json errors. A person is the vision_at session cookie or a Network user token as a Bearer. A service token needs the capability on the route; Design's Arena calls the UI check with vision.ui.check.
Ask, read, compare
POST /api/v1/ask (alias /api/v1/describe)- One image and a question:
{ task, question, mode, image_url }, a multipartimage, or animagedata URL. Local OCR answers a read question first, otherwise OpenVibe.AI. Capability:vision.image.ask. POST /api/v1/ocr- The local Tesseract reader.
fallback=1asks AI only when no text is found and the caller is signed in or holdsvision.text.read. POST /api/v1/compare- The same image through local OCR and one to three AI hints (
models). Returns each engine's answer, provider, model, cost and latency. Capability:vision.model.compare. POST /api/v1/ui-check- HTML, URL or screenshot with
viewport. Returnsfindings: overflow, cut_off, contrast, overlap and layering. Capability:vision.ui.check. POST /api/v1/alt- Pics, Media and Chat send an image for short editable alt text. Capability:
vision.alt.write. POST /api/v1/index; GET or POST /api/v1/find- Media and Search index an owner image and find it by words or image. Requires the owner user token. Capability:
vision.media.find. POST /api/v1/receipt- Food sends a receipt image; Tesseract reads store, items and total first. Capability:
vision.receipt.read. POST /api/v1/product- Deals sends a product image for description, CLIP vector and configured offer candidates. Capability:
vision.product.match. POST /api/v1/watch- Cam sends an owner-provided still and watched classes. Requires the owner user token. Capability:
vision.camera.watch. POST /api/v1/moments- Live or Media sends timestamped frames for scenes and candidate moments. Requires the owner user token. Capability:
vision.video.moments. GET /api/v1/answers/:id- One saved answer, for its owner or a service holding the route capability.
GET /api/v1/ui-checks/:id- One saved UI check, for its owner or a service holding
vision.ui.check. GET /api/v1/models- The AI route's offered provider:model hints and the local engine. No subject data.
GET /api/v1/benchmarks?task=&limit=- Aggregate compare samples: task, engine, provider, model, samples, mean latency and mean cost. No subject data.
Faces, by consent
POST /api/v1/faces/detect- Anyone. YuNet boxes and a count; no template, identity or cross-frame tracking.
POST /api/v1/faces/blur- Anyone. The same YuNet boxes drive an image/png redaction. Both open routes are rate-limited.
GET /api/v1/faces/consents/text- The four signed texts and their versions. A person signs one purpose with
signed_nameandtext_versionatPOST /api/v1/faces/consents/:feature;DELETErevokes and erases. POST /api/v1/faces/enrol/:feature- A person, after that purpose's consent: exactly one face into an AES-GCM encrypted SFace template.
POST /api/v1/faces/verify- A person. Returns
{ score, match, threshold, liveness: "not_checked" }against their own template, never an identity. A match alone unlocks nothing. POST /api/v1/faces/media- A person with find or library consent. Stores an encrypted Vision upload;
GET /api/v1/faces/media/:idis owner-only. POST /api/v1/faces/find- A person with self-search consent. Matches only their own template in their own Vision uploads and returns private links.
POST /api/v1/faces/cast/match- Live with
vision.face.cast.matchand a signedchannel_idclaim. Reads only that channel's adult, consenting roster. GET /api/v1/faces/cast/tags- A person's own cast tags; revoking a grant deletes them.
POST /api/v1/faces/library/cluster- A person with library consent in an allowed region. Private clusters; unknown faces stay unlabelled.
GET /api/v1/faces/library/groups- A person's own groups. No subject or public index.
POST /api/v1/faces/library/correct- A person's own group correction:
exclude,mergeorsplit.
Capabilities and grants
Vision calls OpenVibe.AI with ai.run.create, audience openvibe.ai and namespace ai.*. The twenty Vision capability manifests cover image questions, text, comparison, UI checks, network tools and consent-scoped face operations. A service token needs the capability named on its route; a person manages only their own face consent. Vision also offers eleven tools on /mcp, with Network token discovery at /.well-known/oauth-protected-resource.
POST /api/v1/ui-check
Authorization: Bearer <Network service token for openvibe.vision>
Content-Type: application/json
{ "html": "<!doctype html>…", "viewport": { "w": 390, "h": 844 } }
What leaves this host
The local OCR engine, UI check and all face tools run on this host. Only an ask, compare or OCR fallback sends the normalised image to OpenVibe.AI; face images and templates never go there. General answers store no image bytes; opt-in face uploads are encrypted and private. AI may describe people, including how they look; it never names a stranger or uses a face as identity.
AI on this host: configured. Model hints: from AI's routes at request time.
Search
v1 has no public objects: answers and UI checks belong to the caller and are not indexed, so Vision writes no Search document and has no outbox. The v2 Arena's public leaderboards are where public records will begin.