Skip to main content

MoonDream API Reference

Complete API reference for MoonDream Vision API endpoints, including request/response formats and usage examples.

Base URL​

http://localhost:20200

Authentication​

Currently, MoonDream API does not require authentication for local installations. For production deployments, consider adding API key authentication.

Endpoints​

MoonDream provides four main API endpoints for different computer vision tasks.

Health Check​

GET /​

Returns basic service status with load balancer statistics.

Response:

{
"message": "Moondream Object Detection API is running!",
"load_balancer_stats": {
"total_models": 1,
"current_index": 0,
"device": "mps",
"model_stats": {
"0": {
"requests": 150,
"errors": 2,
"last_used": 1704120600.5
}
}
}
}

GET /health​

Returns health status with load balancer statistics.

Response:

{
"status": "healthy",
"load_balancer_stats": {
"total_models": 1,
"current_index": 0,
"device": "mps",
"model_stats": {
"0": {
"requests": 150,
"errors": 2,
"last_used": 1704120600.5
}
}
}
}

Status Codes:

  • 200: Service is healthy
  • 503: Service is starting up or has issues

Visual Question Answering​

POST /v1/query​

Answers natural language questions about images.

Request:

  • Content-Type: multipart/form-data

Parameters:

  • question (string, required): Question about the image
  • init_image (file, required): Image file (PNG, JPEG, WebP)

Example:

curl -X POST "http://localhost:20200/v1/query" \
-F "question=What do you see in this screenshot?" \
-F "init_image=@screenshot.png"

Response:

{
"answer": "I see a mobile app screenshot showing a login screen with username and password fields, and a blue login button.",
}

Error Responses:

  • 422: Validation Error (missing required parameters)

Image Captioning​

POST /v1/caption​

Generates descriptive captions for images.

Request:

  • Content-Type: multipart/form-data

Parameters:

  • init_image (file, required): Input image file

Example:

curl -X POST "http://localhost:20200/v1/caption" \
-F "init_image=@screenshot.png"

Response:

{
"answer": "..."
}

Error Responses:

  • 422: Validation Error (missing required parameters)

Object Detection​

POST /v1/detect​

Detects specific objects in images.

Request:

  • Content-Type: multipart/form-data

Parameters:

  • obj (string, required): The object to detect (e.g., 'face')
  • init_image (file, required): Input image file

Example:

curl -X POST "http://localhost:20200/v1/detect" \
-F "obj=login button" \
-F "init_image=@app_screenshot.png"

Response:

{
"objects": [...],
"request_id": 0
}

Error Responses:

  • 422: Validation Error (missing required parameters)

Point Detection​

POST /v1/point​

Finds precise coordinates for UI elements and objects.

Request:

  • Content-Type: multipart/form-data

Parameters:

  • obj (string, required): The element to point at (e.g., 'login button')
  • init_image (file, required): Input image file

Example:

curl -X POST "http://localhost:20200/v1/point" \
-F "obj=search button" \
-F "init_image=@mobile_app.png"

Response:

{
"points": [...],
"count": 0
}

Error Responses:

  • 422: Validation Error (missing required parameters)

Request/Response Formats​

Image Requirements​

Supported Formats​

  • PNG
  • JPEG/JPG
  • WebP
  • BMP
  • TIFF

Image Constraints​

  • Maximum Size: 10MB
  • Recommended Resolution: 720p - 1440p (1280x720 - 2560x1440)
  • Color Space: RGB
  • Aspect Ratio: Any (automatically handled)

Image Preprocessing​

MoonDream automatically:

  • Resizes large images for processing
  • Converts to RGB color space
  • Normalizes image data
  • Optimizes for model input requirements

Error Handling​

Common Error Responses​

Validation Error (422)​

{
"detail": [
{
"loc": ["body", "question"],
"msg": "field required",
"type": "value_error.missing"
}
]
}

Internal Server Error (500)​

{
"detail": "Model inference error: ..."
}

HTTP Status Codes​

  • 200: Successful Response
  • 422: Validation Error (missing or invalid parameters)
  • 500: Internal Server Error (model/hardware issues)

Performance Characteristics​

Hardware Acceleration​

  • Apple Silicon (MPS): Automatic detection and optimization for macOS devices
  • NVIDIA GPUs (CUDA): GPU acceleration for compatible hardware
  • CPU Fallback: Works on any system without GPU acceleration

Load Balancing​

Requests are automatically distributed across available model instances using a round-robin algorithm. The number of model instances is controlled by the MOONDREAM_WORKERS environment variable.

Client Libraries​

JavaScript/Node.js​

const FormData = require('form-data');
const fetch = require('node-fetch');
const fs = require('fs');

async function detectObject(imagePath, object) {
const form = new FormData();
form.append('object', object);
form.append('init_image', fs.createReadStream(imagePath));

const response = await fetch('http://localhost:20200/v1/point', {
method: 'POST',
body: form
});

return await response.json();
}

Python​

import requests

def detect_object(image_path, object_name):
with open(image_path, 'rb') as f:
files = {'init_image': f}
data = {'object': object_name}

response = requests.post(
'http://localhost:20200/v1/point',
files=files,
data=data
)

return response.json()

cURL Examples​

# Health check
curl http://localhost:20200/

# Image captioning
curl -X POST "http://localhost:20200/v1/caption" \
-F "init_image=@screenshot.png"

# Question answering
curl -X POST "http://localhost:20200/v1/query" \
-F "question=What UI elements do you see?" \
-F "init_image=@app.png"

# Object detection
curl -X POST "http://localhost:20200/v1/detect" \
-F "object=button" \
-F "init_image=@interface.png"

# Point detection
curl -X POST "http://localhost:20200/v1/point" \
-F "object=login button" \
-F "init_image=@screenshot.png"

Monitoring and Debugging​

Request Logging​

All requests are logged with basic information including:

  • Model worker used for processing
  • Success/failure status
  • Error details (if any)

Load Balancer Statistics​

Access load balancer statistics via the health endpoints:

  • GET / - Basic stats with load balancer information
  • GET /health - Health status with load balancer stats

Statistics include:

  • Total number of loaded models
  • Current model selection index
  • Hardware device being used
  • Per-model request counts and error counts