HorusEngine
API guidePricingSupportSign inGet started

HorusEngine API guide for integrators

Last updated: August 15, 2026

⚠️ Important Safety & Usage Restrictions
This API utilizes probabilistic artificial intelligence models for image processing. Because the outputs can contain inaccuracies, hallucinations, or processing delays, you must adhere to the following strict usage constraints:
• No High-Risk Accessibility Use: Do not integrate this API into tools, apps, or services designed to assist blind or visually impaired individuals in navigating the physical world or managing safety-critical tasks (e.g., identifying medications).
• No Safety-Critical or Standalone Use: Do not use this API as a standalone real-time safety system for physical movement; including autonomous passenger vehicles, drone piloting, or robotics without independent local sensors (e.g. LiDAR, radar, sonar) handling distance, collision avoidance, and emergency stops. Do not use for real-time spatial pathfinding or walking guidance for blind or visually impaired individuals.
• No Mission-Critical/Life-Safety Systems: Do not use this API in medical diagnostics, emergency response systems, or environments where an incorrect output poses a risk to human life, health, or property.
Integrators must ensure that human-in-the-loop validation is applied to all outputs before they are acted upon in production environments.

Understanding API Modes: Navigation vs. Tasks

The API categorizes image processing into two groups: Scene context modes (obstacles, nearby, social, full) and Task modes (identify, find). Integrators must understand these definitions and the usage restrictions below.

⚠️ Critical Safety Warning on "Scene context" modes

“Scene context” modes are informational - not physical navigation.

These modes return structured spatial descriptions from a still image. They must NEVER be used for: autonomous passenger vehicles; real-time spatial pathfinding or walking guidance for blind or visually impaired individuals; or any mission-critical physical movement where delayed, missing, or incorrect API output could cause injury or property damage. For robotics, use only as a semantic layer alongside local deterministic sensors. (see Robotics & Multi-Sensor Fusion below)

Advanced Use Case: Robotics & Multi-Sensor Fusion

While this API must never be used as a standalone, real-time safety system for physical movement, it is highly effective when deployed as a Semantic Reasoning Layer alongside deterministic sensors like LiDAR or Radar.

Safe Implementation Architecture

Integrators building robotic applications must separate Safety/Control loops from Cognitive/Intent loops:

• The Sensor Layer (LiDAR/Sonar): Must handle all real-time distance calculations, immediate obstacle avoidance, and emergency stopping. This layer must operate locally and independently of the API.

• The API Layer (Semantic context): Receives static image frames to provide informational context. It helps classify or describe what objects appear in the scene (e.g. "locate the charging dock sign"). It does not control movement, braking, or emergency stops."

Specific Restrictions for Wearable Devices

Wearable form-factors (e.g., smart glasses, action cameras, smartwatches, visual pins) present unique real-time risks. If your integration processes images sourced from a wearable device, you must strictly enforce the following constraints:

1. No Medical Diagnostics or Vital-Sign Auditing

• Prohibited: Using images from a wearable device to perform automated medical triage, skin lesion analysis, or physical health assessments.

2. No Real-Time Surveillance or Unconsented Facial Recognition

• Prohibited: Utilizing the API to scan public spaces via a wearable camera to match faces, track individuals, or create biometric databases.

3. Continuous Video Streaming Limitations

Our API is designed for discrete, frame-based requests and is not optimized for persistent, high-frequency live video streams. Integrators using wearables should capture imagery on a trigger basis (e.g., user-initiated button press or voice command) rather than sending continuous live video frames.

Category Classification

CategoryAcceptable Use CasesProhibited Use Cases
Scene context
(Digital & Semantic)
• UI/Layout: Mapping bounding boxes on digital screens or documents.
• Robotic Semantic Mapping: Labeling objects detected by hardware sensors like LiDAR (e.g., identifying a chair vs. a trash can) in non-hazardous environments.
• Slow-Paced Waypoint Guidance: Identifying a destination landmark from a static photo for low-speed, non-industrial robots.
• Wearables: Identifying text on a sign directly in front of a user on a non-continuous, triggered basis.
• Autonomous Driving: Real-time steering, braking, or telemetry data for passenger vehicles.
• Real-Time Guidance: Spatial pathfinding or walking navigation for the blind/visually impaired.
• Wearables: Continuous public crowd scanning, tracking, seeking out PII or real-time spatial pathfinding.
Tasks
(Analysis & Output)
• Transcribing text from images (OCR).
• Asset counting and inventory tracking.
• Scene captioning and visual auditing.
• Wearables: Logging meals or cataloging personal belongings via user-initiated command.
• Medical/Clinical: Autonomous medical surgery, real-time health monitoring, or clinical diagnostics (e.g., skin lesion analysis).
• Weaponry: Automated firearm or weapon targeting systems.
• High-Risk Safety: Real-time industrial hazard detection (e.g., fire, gas leaks) without hardware backup sensors.

Modes

CategoryModeUse casesResponse fields focus
Scene contextobstaclesForeground / path-area object context (lower frame region)obstacles[ ], primary_alert, speakable_summary
Scene contextnearbyTourist/scene context — landmarks, crowds, storefronts (general scene ok when no named landmark)nearby_objects[ ], speakable_summary ( obstacles[ ] stays empty)
Scene contextsocialRead the room — people, groups, queues (any distance)social_cues[ ] nearest→furthest; obstacles[ ] when someone occupies the lower frame region
Scene contextfullA balanced on-demand scene descriptionAll navigation arrays above
TaskidentifyName foreground objects — what you're holding or pointing atidentified_objects[ ], speakable_summary
TaskfindLocate something by name — restroom, exit, elevatorfind_matches[ ], speakable_summary

Detail Level

LevelGeneral behavior
briefOne speakable fact; at most one item per populated array; the silence_ok field may be true when the scene is unchanged (meaningful only for permitted repeat requests with previous_scan)
standardBalanced spatial context; objects in nearer frame regions emphasized in obstacles[ ]; balanced social and nearby context; honest handling of blurry/distant text
detailedRich spatial fields, social detail, fuller nearby lists

Context

The context field is optional. It tells HorusEngine what the user is doing or where they are, not what the camera shows.

Do• Keep it short — one phrase or sentence.
• Use stable situational facts the camera cannot infer.
Examples:• "In a grocery store"
• "Hotel lobby — user tapped button to find elevator"
Don’t• Describe pixels ("there is a red car on the left").
• Paste long transcripts or prior model output.
• Use context as a substitute for target in find mode unless you intentionally want the whole phrase treated as the search target.
ModeEffect of context
Scene context (obstacles, nearby, social, full)Biases emphasis - e.g. indoor lobby vs outdoor market
identifyOptional; e.g. “Checking what’s in my hand”
findRequired if the target field is omitted - the entire context string becomes the search phrase. If both the target field and the context field are set then target is what to find and context add hints (“Airport terminal” + target = restroom)

Target

The target field is used with the find mode only

Good targets:• "restroom", "bathroom", "elevator", "exit", "stairs"
• "for sale sign", "listing price on the flyer"
• "wheelchair accessible entrance"
Rules:• Find mode requires target or context. Prefer target for clarity.
• One target per call. Run separate requests for separate searches.
• Check find_matches[ ].found. When found is false, speakable_summary should say so in natural language ("not found", "not visible", etc.).
• Do not infer success from narrative alone, use find_matches and speakable_summary.

Repeat requests and delta (previous_scan)

For repeat calls in acceptable use cases (e.g. low-speed robotics with local LiDAR/radar handling safety), you may pass snippets from the previous response so HorusEngine reports what changed instead of repeating everything. This is not permitted for continuous wearable walking guidance. Wearables must use user-initiated, single-shot requests only (see Wearable restrictions above).

Multipart upload fields: previous_speakable_summary, previous_primary_alert_message. JSON body: previous_scan object.

Client rules for repeat requests (robotics / event-triggered only)

• Chain the last response using speakable_summary and primary_alert_message from call N and send them on call N+1.

• For permitted repeat calls (robotics with local sensors): use obstacles + brief + previous_scan at a slow interval (e.g. 10–30 seconds) or on scene-change triggers only.

• Respect silence_ok when true, your TTS layer may skip speaking if nothing immediate has changed. Meaningful for permitted repeat-request loops only.

• Re-scan after scene changes. If the user turns a corner or enters a new room, clear previous_scan or expect a fresh description.

Task modes (identify, find) generally force silence_ok: false when there is output to speak. Do not use silence_ok to suppress identify/find results.

Frame capture

HorusEngine analyzes one still frame per request. Capture choices affect spatial field accuracy, bearings, and task-mode accuracy.

Prefer normal field of view (~4:3 to 16:9)

Navigation modes treat the center-lower third of the frame as the primary subject region for scene context modes. Typical phone or fixed camera FOV (~4:3 to 16:9) works best. Avoid ultrawide or body-mounted panoramic capture unless cropped before upload.

Avoid ultrawide and panoramic frames

Do not send stitched panoramas, fisheye dumps, or frames much wider than 16:9

• The primary subject region becomes a thin horizontal strip, objects look smaller and bearings are less reliable.

• Targets in identify / find shrink in the frame, signs and handheld objects are harder to read.

• Very wide frames may compress more aggressively before analysis, reducing effective detail.

Instead: Crop to the subject or scene region you care about before upload. For identify and find, fill the frame with the subject when you can.

General tips

• Pause video before grabbing a frame, motion blur lowers confidence (preflight may reject very blurry frames).

• Move closer or crop tight before retrying a low-confidence identify result.

• Server normalization is a backstop; sensible capture on the client still matters.

Task TTS priority

For identify and find, use speakable_summary (and identified_objects[ ] / find_matches[ ] for UI). primary_alert is always null — do not expect scene-context-style alerts on task calls.

Scene context - output priority (informational only)

• If your app presents spoken output, you may prefer speakable_summary. The primary_alert field is optional structured text and not a safety alarm. Integrators must validate all output before presenting it to end users.

• Else speak speakable_summary.

• If silence_ok is true in an acceptable use case repeat-request loop, your output layer may consider skipping the TTS.

Identify mode honesty

• Blurry or distant objects may return low confidence or empty identified_objects[ ] which is a valid result, not a failure.

• Do not treat high-confidence identified_objects[ ] entries as ground truth if they contradict speakable_summary.

• Crop toward the object or move closer before retrying.

Sensitive scenes

Responses may include content_flags (distressing, adult). Spoken output should stay factual and non-graphic. Handle flags in your UI policy (warnings, alternate phrasing).

Recommended recipes

Robotics - periodic scene context (with local sensors)

Only when LiDAR/radar/sonar handles real-time safety locally. Slow interval or scene-change trigger.

Your stack moves; our API doesn’t hold state. Send optional headers (X-Horus-Frame-Id, X-Horus-Client-Timestamp, or X-Horus-Client-Metadata) with each analyze call. The response will return the same data in client_metadata so you can sync semantics with LiDAR, odometry, and frame buffers. Metadata never goes to the model and isn’t stored.

curl -X POST https://horusengine.fly.dev/v1/analyze/upload \
-H "Authorization: Bearer he_live_kK..." \
-H "X-Horus-Frame-Id: cam_front_001" \
-H "X-Horus-Client-Timestamp: 2026-08-17T05:13:00.000Z" \
-H 'X-Horus-Client-Metadata: {"sensor":"front_rgb","seq":42,"pose_id":"odom_8842"}' \
-F "file=@frame.jpg" \
-F "mode=obstacles" \
-F "detail_level=brief" \
-F "context=Warehouse aisle - LiDAR handles collision avoidance"

Wearable - user triggered snapshot

Single request per user action (button press or voice command). Do not loop. Example: read a sign or identify and object:

curl -X POST https://horusengine.fly.dev/v1/analyze/upload \
-H "Authorization: Bearer he_live_kK..." \
-F "file=@frame.jpg" \
-F "mode=find" \
-F "target=restroom" \
-F "context=User tapped button in hotel lobby"

On-demand “describe the scene”

curl -X POST https://horusengine.fly.dev/v1/analyze/upload \
-H "Authorization: Bearer he_live_kK..." \
-F "file=@frame.jpg" \
-F "mode=full" \
-F "detail_level=standard" \
-F "context=Busy outdoor market"

Identify a foreground object

Crop so the object fills the frame when possible.

curl -X POST https://horusengine.fly.dev/v1/analyze/upload \
-H "Authorization: Bearer he_live_kK..." \
-F "file=@object.jpg" \
-F "mode=identify" \
-F "detail_level=standard"

Find a restroom

curl -X POST https://horusengine.fly.dev/v1/analyze/upload \
-H "Authorization: Bearer he_live_kK..." \
-F "file=@lobby.jpg" \
-F "mode=find" \
-F "target=restroom" \
-F "context=Office building hallway"

Common mistakes

MistakeFix
Using full on a tight repeat loopUse obstacles + brief + previous_scan at 10s - 30s (robotics with local sensors only)
Describing the image in contextOmit context or state user situation only
find call with no target or contextAPI returns 400 (set at least one, target or context)
Speaking narrative to the userUse speakable_summary / primary_alert
Ignoring silence_ok in repeat-request loopsReduces TTS fatigue when nothing has changed
Expecting identify / find to stay quietTask modes speak results, silence_ok is not mute switch
Using detailed on task modesCoerced to standard
Retrying blurry framesFix capture (pause video, better light) or accept low confidence
Ultrawide or panoramic framesCrop to subject region (~4:3 - 16:9); see Frame capture section for more details.
Continuous wearable loop with obstaclesOne user-triggered request per action; use identify / find / full

Efficiency, latency, and cost

HorusEngine analyzes one still image per request. How you capture, send, and schedule those requests drives cost, response time, and user experience.

Response time

A typical analyze call takes about 3–10 seconds from request to JSON response. Complex scenes or task modes may take longer.

Set your HTTP client timeout to at least 120 seconds so slow responses are not cut off mid-scan.

Plan your UX for asynchronous results — show a “scanning” state, queue TTS, or show a loading state until the response arrives.

Still frames, not video

Send individual still frames (JPEG/PNG upload or a public image URL). HorusEngine does not accept continuous video streams.

Send one still frame per POST. For robotics (with local sensors), you may repeat at 10–30 second intervals or on scene change. For wearables, send one frame per user-initiated action only, not on a timer while moving. For kiosks, typically one request per user interaction.

Recommended settings by use case

Use caseSuggested modeSuggested detail_levelAlso set
Robotic: periodic context (local sensors required)obstaclesbriefprevious_scan from the last response
Wearable: user-triggeredIdentify / find / fullstandardtarget for find
One rich scene descriptionfullstandard or detailedOptional context
People / social contextsocialstandardOptional context
Tourist / scene contextnearbystandardOptional context
Name a foreground objectidentifystandardCrop toward the object
Find restroom, exit, sign, etc.findstandardtarget (+ optional context)

Do not use full or detailed on a tight repeat loop (e.g. sub-10 second) unless local sensors handle safety and you are on a robotics use case. Use obstacles + brief + previous_scan instead — lower cost and faster, focused answers.

Scan interval (your app decides)

HorusEngine does not prescribe how often you call the API. Choose an interval that matches how quickly your user can hear or act on updates:

• Robots and platforms: often 10–30 seconds, or only when the scene changes. (required: local LiDAR/radar/sonar for safety)

• Handheld / button press: one request per user action. Required pattern for wearables.

Sending frames faster than your output layer can use them increases cost and spoken-output fatigue without improving outcome.

Prefer file upload when the frame is on-device

If the image is already on the phone, glasses, or robot, use POST /v1/analyze/upload.

Use image_url only when the image is already available at a public http or https URL.

Rate limits

If you send too many requests in a short period, the API may respond with 429 Too Many Requests. Back off and reduce send rate. Rate limits (120/180 per min).

Typical integrator cadences are well within limits. Avoid sub-second repeat intervals or spending unchanged frames repeatedly.

Pricing SKUs

See /docs/pricing for SKU matrix and list prices.

Legal Disclaimer

Listing a workflow under Acceptable Use Cases does not constitute a technical endorsement, warranty, or guarantee of safety by our company. Integrators bear sole legal and operational responsibility for testing, validating, and ensuring the safety of their applications, including the implementation of necessary hardware backups (such as LiDAR) and human-in-the-loop reviews.

← Back to home · SKU catalog & pricing

© 2026 ZOEARK LLC

API guidePricingSupportTermsPrivacyDPASubprocessorsSign in