SDKs & Libraries
Ztrace Documentation
Official SDKs for popular programming languages. All SDKs provide full type support, automatic retries, and convenient helper methods.
Installation
Node.js / TypeScript
Bash
npm install @ztrace/sdkPython
Bash
pip install ztraceNode.js SDK
node-example.ts
TypeScript
1<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>import</span></span> { <span class="text-yellow-300">Ztrace</span> } <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>from</span></span> <span class="text-emerald-<span class="text-orange-400">400</span>">'@ztrace/sdk'</span>;2 3// Initialize the client with your API key4<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> client = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>new</span> <span class="text-blue-400"><span class="text-yellow-300">Ztrace</span></span>({5 apiKey: process.<span class="text-cyan-300">env</span>.<span class="text-cyan-300">ZTRACE_API_KEY</span>,6 region: <span class="text-emerald-<span class="text-orange-400">400</span>">'us-east-<span class="text-orange-400">1</span>'</span>,7 timeout: <span class="text-orange-400">30000</span>,8 retries: <span class="text-orange-400">3</span>9});10 11// Analyze an image and get location data12<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> result = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> client.<span class="text-blue-400">analyze</span>({13 image: <span class="text-emerald-<span class="text-orange-400">400</span>">'./path/to/image.<span class="text-cyan-300">jpg</span>'</span>,14 options: {15 confidence_threshold: <span class="text-orange-400">0.<span class="text-cyan-300">85</span></span>,16 include_metadata: <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>true</span>,17 include_features: <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>true</span>,18 include_landmarks: <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>true</span>19 }20});21 22console.<span class="text-blue-400">log</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">'<span class="text-yellow-300">Location</span>:'</span>, result.<span class="text-cyan-300">location</span>);23// Output: { lat: 35.6762, lng: 139.6503, confidence: 0.947 }24 25console.<span class="text-blue-400">log</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">'<span class="text-yellow-300">Place</span>:'</span>, result.<span class="text-cyan-300">place_name</span>);26// Output: "Shibuya Crossing, Tokyo, Japan"Python SDK
python-example.py
Python
1# Ztrace Python SDK - Complete Example2<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>from</span></span> ztrace <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>import</span></span> <span class="text-yellow-300">ZtraceClient</span>, <span class="text-yellow-300">AnalysisOptions</span>, <span class="text-yellow-300">BatchConfig</span>3<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>from</span></span> ztrace.<span class="text-cyan-300">models</span> <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>import</span></span> <span class="text-yellow-300">Location</span>, <span class="text-yellow-300">AnalysisResult</span>4<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>import</span></span> asyncio5 6# Initialize client with configuration7client = <span class="text-blue-400"><span class="text-yellow-300">ZtraceClient</span></span>(8 api_key=<span class="text-emerald-<span class="text-orange-400">400</span>">"your-api-key"</span>,9 region=<span class="text-emerald-<span class="text-orange-400">400</span>">"us-east-<span class="text-orange-400">1</span>"</span>,10 timeout=<span class="text-orange-400">30</span>,11 max_retries=<span class="text-orange-400">3</span>12)13 14# Single image analysis15<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>async</span></span> <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>def</span> <span class="text-blue-400">analyze_single_image</span>():16 result: <span class="text-yellow-300">AnalysisResult</span> = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> client.<span class="text-blue-400">analyze</span>(17 image_path=<span class="text-emerald-<span class="text-orange-400">400</span>">"./image.<span class="text-cyan-300">jpg</span>"</span>,18 options=<span class="text-blue-400"><span class="text-yellow-300">AnalysisOptions</span></span>(19 confidence_threshold=<span class="text-orange-400">0.<span class="text-cyan-300">85</span></span>,20 include_features=<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class="text-yellow-300">True</span></span>,21 include_landmarks=<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class="text-yellow-300">True</span></span>,22 include_weather=<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class="text-yellow-300">True</span></span>23 )24 )25 26 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Location</span>: {result.<span class="text-cyan-300">location</span>.<span class="text-cyan-300">lat</span>}, {result.<span class="text-cyan-300">location</span>.<span class="text-cyan-300">lng</span>}"</span>)27 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Place</span>: {result.<span class="text-cyan-300">place_name</span>}"</span>)28 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Confidence</span>: {result.<span class="text-cyan-300">confidence</span>:.<span class="text-orange-400">1</span>%}"</span>)29 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Country</span>: {result.<span class="text-cyan-300">country</span>}"</span>)30 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Features</span>: {', '.<span class="text-blue-400">join</span>(result.<span class="text-cyan-300">features</span>)}"</span>)31 32 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>if</span></span> result.<span class="text-cyan-300">landmarks</span>:33 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>for</span></span> landmark <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>in</span></span> result.<span class="text-cyan-300">landmarks</span>:34 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">" - {landmark.<span class="text-cyan-300">name</span>} ({landmark.<span class="text-cyan-300">distance_m</span>}m away)"</span>)35 36 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>return</span></span> result37 38# Batch processing with async39<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>async</span></span> <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>def</span> <span class="text-blue-400">batch_analyze</span>():40 images = [41 <span class="text-emerald-<span class="text-orange-400">400</span>">"./images/img1.<span class="text-cyan-300">jpg</span>"</span>,42 <span class="text-emerald-<span class="text-orange-400">400</span>">"./images/img2.<span class="text-cyan-300">jpg</span>"</span>,43 <span class="text-emerald-<span class="text-orange-400">400</span>">"https://example.<span class="text-cyan-300">com</span>/img3.<span class="text-cyan-300">jpg</span>"</span>44 ]45 46 config = <span class="text-blue-400"><span class="text-yellow-300">BatchConfig</span></span>(47 parallel=<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class="text-yellow-300">True</span></span>,48 max_concurrency=<span class="text-orange-400">5</span>,49 on_progress=<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>lambda</span> p: <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Progress</span>: {p.<span class="text-cyan-300">completed</span>}/{p.<span class="text-cyan-300">total</span>}"</span>)50 )51 52 results = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> client.<span class="text-blue-400">batch_analyze</span>(images, config=config)53 54 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>for</span></span> result <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>in</span></span> results:55 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>if</span></span> result.<span class="text-cyan-300">success</span>:56 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"{result.<span class="text-cyan-300">image_id</span>}: {result.<span class="text-cyan-300">location</span>}"</span>)57 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>else</span></span>:58 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">"{result.<span class="text-cyan-300">image_id</span>}: <span class="text-yellow-300">Failed</span> - {result.<span class="text-cyan-300">error</span>}"</span>)59 60 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>return</span></span> results61 62# Feature extraction only63<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>async</span></span> <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>def</span> <span class="text-blue-400">extract_features</span>():64 features = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> client.<span class="text-blue-400">extract_features</span>(65 image_path=<span class="text-emerald-<span class="text-orange-400">400</span>">"./image.<span class="text-cyan-300">jpg</span>"</span>,66 feature_types=[<span class="text-emerald-<span class="text-orange-400">400</span>">"landmarks"</span>, <span class="text-emerald-<span class="text-orange-400">400</span>">"text"</span>, <span class="text-emerald-<span class="text-orange-400">400</span>">"objects"</span>, <span class="text-emerald-<span class="text-orange-400">400</span>">"climate"</span>]67 )68 69 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Detected</span> <span class="text-yellow-300">Features</span>:"</span>)70 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>for</span></span> feature <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>in</span></span> features.<span class="text-cyan-300">items</span>:71 <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>print</span>(f<span class="text-emerald-<span class="text-orange-400">400</span>">" {feature.<span <span class="</span>text-purple-<span class="text-orange-400">400</span> font-medium<span class="text-emerald-<span class="text-orange-400">400</span>">">class</span>="</span>text-purple-<span class="text-orange-400">400</span> font-medium<span class="text-emerald-<span class="text-orange-400">400</span>">">type</span>}: {feature.<span class="text-cyan-300">value</span>} (conf: {feature.<span class="text-cyan-300">confidence</span>:.<span class="text-cyan-300">2f</span>})"</span>)72 73# Run examples74<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>if</span></span> __name__ == <span class="text-emerald-<span class="text-orange-400">400</span>">"__main__"</span>:75 asyncio.<span class="text-blue-400">run</span>(<span class="text-blue-400">analyze_single_image</span>())cURL Examples
curl-examples.sh
Bash
1# Ztrace API - cURL Examples2 3# 1. Analyze image from URL4curl -<span class="text-yellow-300">X</span> <span class="text-yellow-300">POST</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"https://api.<span class="text-cyan-300">ztrace</span>.<span class="text-cyan-300">ai</span>/v2/analyze"</span> \5 -<span class="text-yellow-300">H</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Authorization</span>: <span class="text-yellow-300">Bearer</span> $ZTRACE_API_KEY"</span> \6 -<span class="text-yellow-300">H</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Content</span>-<span class="text-yellow-300">Type</span>: application/json"</span> \7 -d '{8 <span class="text-emerald-<span class="text-orange-400">400</span>">"image_url"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"https://example.<span class="text-cyan-300">com</span>/image.<span class="text-cyan-300">jpg</span>"</span>,9 <span class="text-emerald-<span class="text-orange-400">400</span>">"options"</span>: {10 <span class="text-emerald-<span class="text-orange-400">400</span>">"model"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"geo-v3"</span>,11 <span class="text-emerald-<span class="text-orange-400">400</span>">"confidence_threshold"</span>: <span class="text-orange-400">0.<span class="text-cyan-300">85</span></span>,12 <span class="text-emerald-<span class="text-orange-400">400</span>">"include_features"</span>: <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>true</span>,13 <span class="text-emerald-<span class="text-orange-400">400</span>">"include_landmarks"</span>: <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>true</span>14 }15 }'16 17# Response:18# {19# "id": "analysis_abc123",20# "status": "completed",21# "location": {22# "lat": 35.6762,23# "lng": 139.6503,24# "accuracy_m": 150,25# "confidence": 0.94726# },27# "place_name": "Shibuya Crossing, Tokyo, Japan",28# "country": "JP",29# "country_name": "Japan",30# "features": ["urban", "crosswalk", "japanese_signage", "crowd"],31# "landmarks": [32# {"name": "Shibuya 109", "distance_m": 85},33# {"name": "Hachiko Statue", "distance_m": 120}34# ],35# "processing_time_ms": 124336# }37 38# 2. Analyze with file upload39curl -<span class="text-yellow-300">X</span> <span class="text-yellow-300">POST</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"https://api.<span class="text-cyan-300">ztrace</span>.<span class="text-cyan-300">ai</span>/v2/analyze"</span> \40 -<span class="text-yellow-300">H</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Authorization</span>: <span class="text-yellow-300">Bearer</span> $ZTRACE_API_KEY"</span> \41 -<span class="text-yellow-300">F</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"image=@./photo.<span class="text-cyan-300">jpg</span>"</span> \42 -<span class="text-yellow-300">F</span> <span class="text-emerald-<span class="text-orange-400">400</span>">'options={"confidence_threshold": <span class="text-orange-400">0.<span class="text-cyan-300">8</span></span>}'</span>43 44# 3. Create batch job45curl -<span class="text-yellow-300">X</span> <span class="text-yellow-300">POST</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"https://api.<span class="text-cyan-300">ztrace</span>.<span class="text-cyan-300">ai</span>/v2/batch"</span> \46 -<span class="text-yellow-300">H</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Authorization</span>: <span class="text-yellow-300">Bearer</span> $ZTRACE_API_KEY"</span> \47 -<span class="text-yellow-300">H</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Content</span>-<span class="text-yellow-300">Type</span>: application/json"</span> \48 -d '{49 <span class="text-emerald-<span class="text-orange-400">400</span>">"images"</span>: [50 {<span class="text-emerald-<span class="text-orange-400">400</span>">"id"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"img1"</span>, <span class="text-emerald-<span class="text-orange-400">400</span>">"url"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"https://example.<span class="text-cyan-300">com</span>/<span class="text-orange-400">1.</span>jpg"</span>},51 {<span class="text-emerald-<span class="text-orange-400">400</span>">"id"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"img2"</span>, <span class="text-emerald-<span class="text-orange-400">400</span>">"url"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"https://example.<span class="text-cyan-300">com</span>/<span class="text-orange-400">2.</span>jpg"</span>}52 ],53 <span class="text-emerald-<span class="text-orange-400">400</span>">"options"</span>: {54 <span class="text-emerald-<span class="text-orange-400">400</span>">"priority"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"high"</span>,55 <span class="text-emerald-<span class="text-orange-400">400</span>">"webhook_url"</span>: <span class="text-emerald-<span class="text-orange-400">400</span>">"https://your-app.<span class="text-cyan-300">com</span>/webhook"</span>56 }57 }'58 59# 4. Get batch status60curl -<span class="text-yellow-300">X</span> <span class="text-yellow-300">GET</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"https://api.<span class="text-cyan-300">ztrace</span>.<span class="text-cyan-300">ai</span>/v2/batch/batch_xyz789"</span> \61 -<span class="text-yellow-300">H</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Authorization</span>: <span class="text-yellow-300">Bearer</span> $ZTRACE_API_KEY"</span>62 63# 5. List API keys64curl -<span class="text-yellow-300">X</span> <span class="text-yellow-300">GET</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"https://api.<span class="text-cyan-300">ztrace</span>.<span class="text-cyan-300">ai</span>/v2/api-keys"</span> \65 -<span class="text-yellow-300">H</span> <span class="text-emerald-<span class="text-orange-400">400</span>">"<span class="text-yellow-300">Authorization</span>: <span class="text-yellow-300">Bearer</span> $ZTRACE_API_KEY"</span>Batch Processing
batch-processing.ts
TypeScript
1// Batch processing with progress tracking2<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>import</span></span> { <span class="text-yellow-300">Ztrace</span>, <span class="text-yellow-300">BatchJob</span> } <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>from</span></span> <span class="text-emerald-<span class="text-orange-400">400</span>">'@ztrace/sdk'</span>;3 4<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> client = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>new</span> <span class="text-blue-400"><span class="text-yellow-300">Ztrace</span></span>({ apiKey: process.<span class="text-cyan-300">env</span>.<span class="text-cyan-300">ZTRACE_API_KEY</span> });5 6// Define images to process7<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> images = [8 { id: <span class="text-emerald-<span class="text-orange-400">400</span>">'img-<span class="text-orange-400">001</span>'</span>, path: <span class="text-emerald-<span class="text-orange-400">400</span>">'./images/location1.<span class="text-cyan-300">jpg</span>'</span> },9 { id: <span class="text-emerald-<span class="text-orange-400">400</span>">'img-<span class="text-orange-400">002</span>'</span>, path: <span class="text-emerald-<span class="text-orange-400">400</span>">'./images/location2.<span class="text-cyan-300">jpg</span>'</span> },10 { id: <span class="text-emerald-<span class="text-orange-400">400</span>">'img-<span class="text-orange-400">003</span>'</span>, url: <span class="text-emerald-<span class="text-orange-400">400</span>">'https://example.<span class="text-cyan-300">com</span>/image3.<span class="text-cyan-300">jpg</span>'</span> },11 { id: <span class="text-emerald-<span class="text-orange-400">400</span>">'img-<span class="text-orange-400">004</span>'</span>, buffer: imageBuffer },12];13 14// Create batch job with configuration15<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> batchJob = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> client.<span class="text-cyan-300">batch</span>.<span class="text-blue-400">create</span>({16 images,17 options: {18 model: <span class="text-emerald-<span class="text-orange-400">400</span>">'geo-v3-turbo'</span>,19 confidence_threshold: <span class="text-orange-400">0.<span class="text-cyan-300">75</span></span>,20 parallel: <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>true</span>,21 maxConcurrency: <span class="text-orange-400">10</span>,22 priority: <span class="text-emerald-<span class="text-orange-400">400</span>">'high'</span>,23 webhook_url: <span class="text-emerald-<span class="text-orange-400">400</span>">'https://your-app.<span class="text-cyan-300">com</span>/webhooks/batch'</span>24 }25});26 27console.<span class="text-blue-400">log</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">'<span class="text-yellow-300">Batch</span> <span class="text-yellow-300">ID</span>:'</span>, batchJob.<span class="text-cyan-300">id</span>);28console.<span class="text-blue-400">log</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">'<span class="text-yellow-300">Total</span> <span class="text-yellow-300">Images</span>:'</span>, batchJob.<span class="text-cyan-300">total_count</span>);29 30// Option 1: Poll for results31<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> results = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> client.<span class="text-cyan-300">batch</span>.<span class="text-blue-400">wait</span>(batchJob.<span class="text-cyan-300">id</span>, {32 pollInterval: <span class="text-orange-400">2000</span>,33 timeout: <span class="text-orange-400">300000</span>,34 onProgress: (progress) => {35 console.<span class="text-blue-400">log</span>(<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-emerald-<span class="text-orange-400">400</span>"</span>>`<span class="text-yellow-300">Progress</span>: ${progress.<span class="text-cyan-300">completed</span>}/${progress.<span class="text-cyan-300">total</span>}`</span>);36 }37});38 39// Option 2: Stream results as they complete40<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>for</span></span> <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> (<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> result <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>of</span> client.<span class="text-cyan-300">batch</span>.<span class="text-blue-400">stream</span>(batchJob.<span class="text-cyan-300">id</span>)) {41 console.<span class="text-blue-400">log</span>(<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-emerald-<span class="text-orange-400">400</span>"</span>>`<span class="text-yellow-300">Completed</span>: ${result.<span class="text-cyan-300">image_id</span>}`</span>);42 console.<span class="text-blue-400">log</span>(<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-emerald-<span class="text-orange-400">400</span>"</span>>`<span class="text-yellow-300">Location</span>: ${result.<span class="text-cyan-300">location</span>.<span class="text-cyan-300">lat</span>}, ${result.<span class="text-cyan-300">location</span>.<span class="text-cyan-300">lng</span>}`</span>);43 console.<span class="text-blue-400">log</span>(<span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-emerald-<span class="text-orange-400">400</span>"</span>>`<span class="text-yellow-300">Confidence</span>: ${(result.<span class="text-cyan-300">confidence</span> * <span class="text-orange-400">100</span>).<span class="text-blue-400">toFixed</span>(<span class="text-orange-400">1</span>)}%`</span>);44 45 // Save to database46 <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> db.<span class="text-cyan-300">results</span>.<span class="text-blue-400">insert</span>({47 imageId: result.<span class="text-cyan-300">image_id</span>,48 location: result.<span class="text-cyan-300">location</span>,49 features: result.<span class="text-cyan-300">features</span>,50 processedAt: <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>new</span> <span class="text-blue-400"><span class="text-yellow-300">Date</span></span>()51 });52}53 54// Get batch summary55<span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>const</span> summary = <span <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>class</span>=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>><span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-purple-<span class="text-orange-400">400</span> font-medium"</span>>await</span></span> client.<span class="text-cyan-300">batch</span>.<span class="text-blue-400">getSummary</span>(batchJob.<span class="text-cyan-300">id</span>);56console.<span class="text-blue-400">log</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">'<span class="text-yellow-300">Success</span> <span class="text-yellow-300">Rate</span>:'</span>, <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-emerald-<span class="text-orange-400">400</span>"</span>>`${summary.<span class="text-cyan-300">success_rate</span>}%`</span>);57console.<span class="text-blue-400">log</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">'<span class="text-yellow-300">Average</span> <span class="text-yellow-300">Confidence</span>:'</span>, summary.<span class="text-cyan-300">avg_confidence</span>);58console.<span class="text-blue-400">log</span>(<span class="text-emerald-<span class="text-orange-400">400</span>">'<span class="text-yellow-300">Processing</span> <span class="text-yellow-300">Time</span>:'</span>, <span class=<span class="text-emerald-<span class="text-orange-400">400</span>">"text-emerald-<span class="text-orange-400">400</span>"</span>>`${summary.<span class="text-cyan-300">total_time_ms</span>}ms`</span>);Last updated December 2025
Was this helpful?