The YAZE HTTP REST API provides external access to YAZE functionality for automation, testing, and integration with external tools.
The HTTP API is enabled automatically when building with AI-enabled presets:
Or enable it explicitly with the CMake flag:
Start z3ed with the --http-port flag:
Security Note: The server currently binds 0.0.0.0 (all interfaces). Use firewall rules or SSH tunnels to keep it private. The --http-host flag only controls the URLs printed by z3ed.
All endpoints return JSON responses and include CORS headers. Send an OPTIONS request for a 204 preflight response with Access-Control-Allow-* headers. /api/v1/symbols returns plain text by default.
Health check endpoint for monitoring server status.
Request:
Response:
Status Codes:
200 OK - Server is healthyList all available AI models from all registered providers (Ollama, Gemini, etc.). Use ?refresh=1 (or ?refresh=true / ?refresh) to bypass the server-side model cache.
Request:
Request (bypass cache):
Response:
Status Codes:
200 OK - Models retrieved successfully500 Internal Server Error - Failed to retrieve models (see error field)Response Fields:
name (string) - Model identifierdisplay_name (string) - Human-friendly display name (falls back to name)provider (string) - Provider name ("ollama", "gemini", etc.)description (string) - Human-readable descriptionfamily (string) - Model family/seriesparameter_size (string) - Model size (e.g., "7B", "13B")quantization (string) - Quantization method (e.g., "Q4_0", "Q8_0")size_bytes (number) - Model size in bytesis_local (boolean) - Whether model is hosted locallyExport symbols from the active symbol provider. By default returns plain text; request JSON via Accept: application/json. Use format=mesen|asar|wla|bsnes to choose the export format (unsupported values return 400).
Request (plain text):
Request (JSON):
Response (plain text):
Response (JSON):
Status Codes:
200 OK - Symbols retrieved successfully400 Bad Request - Unsupported format value503 Service Unavailable - Symbol provider not available500 Internal Server Error - Export failedSend a navigation request (for example, jump to a disassembly address).
Request:
Response:
Status Codes:
200 OK - Navigation request accepted400 Bad Request - Invalid JSON payloadNotify YAZE that a breakpoint fired (optionally include CPU state).
Request:
Response:
Status Codes:
200 OK - Breakpoint report accepted400 Bad Request - Invalid JSON payloadSend a free-form JSON payload to update panel state (schema evolving).
Request:
Response:
Status Codes:
200 OK - State update accepted400 Bad Request - Invalid JSON payloadShow the desktop window (if supported).
Status Codes:
200 OK - Window shown501 Not Implemented - Window control unavailable500 Internal Server Error - Window action failedHide the desktop window (if supported).
Status Codes:
200 OK - Window hidden501 Not Implemented - Window control unavailable500 Internal Server Error - Window action failedAll endpoints return standard HTTP status codes and JSON error responses:
Common status codes:
200 OK - Request succeeded400 Bad Request - Invalid request parameters404 Not Found - Endpoint not found500 Internal Server Error - Server-side errorAll endpoints include CORS headers to allow cross-origin requests:
The HTTP API is built using:
The HTTP server runs in a background thread, allowing z3ed to continue normal operation. The server gracefully shuts down when z3ed exits.
Enable with:
When enabled, adds compile definition:
Use the provided test script:
The HTTP API can be tested in CI via workflow_dispatch:
See docs/internal/agents/archive/utility-tools/gh-actions-remote.md for details.
The following endpoints are planned for future releases:
POST /api/v1/chat - Send prompts to AI agentPOST /api/v1/tool/{tool_name} - Execute specific toolsGET /api/v1/rom/status - ROM loading statusGET /api/v1/rom/info - ROM metadataSee docs/internal/AI_API_ENHANCEMENT_HANDOFF.md for the full roadmap.
0.0.0.0 (all interfaces) by default; use firewall rules or SSH tunnels to keep it private.For production use, consider:
If you see Failed to listen on port, another process is using that port:
Check that:
YAZE_ENABLE_HTTP_API=ONVerify the server is running and reachable:
When adding new endpoints:
api_handlers.hapi_handlers.cchttp_server.cc::RegisterRoutes()scripts/agents/test-http-api.shFollow the existing handler pattern:
Part of the YAZE project. See LICENSE for details.