The voice server serves the dashboard and its APIs on port 8080, and the same
thing over TLS on 8443. Port 443 is the robot’s own gRPC connection and is not
HTTP. Port 80 carries one route the robot polls to decide whether its server is
alive.
Most routes take ordinary form or query parameters rather than a JSON body, and
most that concern a robot take esn= to say which one. Where a server carries a
single robot, that can usually be left off.
Routes fall into four families:
| Prefix | What it is |
|---|
/api/… | The server itself: configuration, firmware, presets, logs |
/api-sdk/… | Anything that acts on a robot through its SDK |
/api-ble/…, /api-ssh/…, /api-chipper/… | Setting a robot up |
/api-lua/… | Scripting |
This page lists what exists. Routes not listed here do not exist.
| Route | What it does |
|---|
/api/get_config | The whole server configuration |
/api/get_version_info | Server version |
/api/is_api_v3 | A trivial liveness answer |
/api/is_running | Whether the server is up |
/api/get_logs | The server log |
/api/get_debug_logs | The verbose log |
/api/generate_certs | Generate the server’s certificates |
/api/set_stt_info, /api/get_stt_info | The speech-to-text provider |
/api/set_stt_api | The transcription endpoint, model and key — any OpenAI-compatible endpoint |
/api/get_download_status | Progress while a speech model is downloading |
/api/set_kg_api, /api/get_kg_api | The knowledge-graph and language-model provider |
/api/set_weather_api, /api/get_weather_api | The weather provider |
/api/weather_now | Current conditions, used by the brain’s idle chatter |
/api/set_gif_api | The GIF provider key |
/api/gif_search | Search GIFs, proxied server-side so the key stays on the server |
/api/delete_chats | Clear stored conversation history |
| Route | What it does |
|---|
/api/get_custom_intents_json | The custom intent list |
/api/add_custom_intent | Add one |
/api/edit_custom_intent | Change one |
/api/remove_custom_intent | Remove one |
| Route | What it does |
|---|
/api/get_events | The last 200 events, for the dashboard’s activity table |
/api/set_events | Subscriber URLs, and whether the event system is on |
/api/emit_event | Emit an event by hand — a test hook |
/api/set_mqtt | Broker address, credentials and topic prefix |
/api/mqtt_status | Whether the bridge is connected |
See Events for the event catalogue itself.
| Route | What it does |
|---|
/api/find_robots | Find Vectors on the network over mDNS |
/api/robot_info | OS version, uptime and CPU ceiling, read over SSH |
/api/robot_endpoints | Where this robot is configured to talk to |
/api/point_robot_here | Write this server’s address and certificate onto the robot and restart its link |
/api/ssh_pubkey | This installation’s own public key, to append to the robot’s authorised keys |
/api/reboot_robot | Reboot him |
/api/say | Speak a line through behaviour control |
/api-sdk/print_robot_info | Robot information over the SDK |
/api-sdk/get_sdk_info, /api-sdk/get_sdk_settings | SDK-side settings |
/api-sdk/get_robot_stats | Robot statistics |
/api-sdk/get_stim_status | His current stimulation level |
/api-sdk/get_battery | Battery state |
/api-sdk/conn_test, /api-sdk/disconnect | Connection test and teardown |
/api-sdk/debug | Debug output |
/ok | The liveness check the robot itself polls, on port 80 |
| Route | What it does |
|---|
/api/cpu_status | The current CPU level and temperature |
/api/set_cpu_level | Set the CPU level |
/api/battery_history | Battery samples, hours= up to 30 days, default 24 |
/api/battery_health | The plain-language verdict on the pack |
| Route | What it does |
|---|
/api/get_firmware | The images available on this server |
/api/get_ota/<file> | Download one image |
/api/ota/<type>/<version>.ota | The robot’s own update endpoint: a newer image, or 404 |
/api/start_ota | Install an image on a robot |
/api/get_ota_status | Phase, progress and how many downloads are in flight |
/api/robot_update_status | His version against the newest here, the auto-update flag and the active slot |
/api/check_for_update | Ask him to check |
/api/set_auto_updates | Turn his own auto-update on or off |
/api/get_ota | Legacy image fetch |
See EmberOS firmware.
| Route | What it does |
|---|
/api/get_profiles | The presets on this server |
/api/robot_profile | Which preset a robot has, and whether an update means it needs re-applying |
/api/apply_profile | Apply one over SSH |
/api-sdk/mode | GET the current mode and the list; POST to switch |
See Modes and sound sets.
| Route | What it does |
|---|
/api/wakeword_status | The installed custom wake word |
/api/wakeword_install | Train a wake word offline and install it on the robot |
/api/wakeword_remove | Remove it |
/api/wifi_list | Saved networks — never with passwords |
/api/wifi_get | One network |
/api/wifi_save | Save one; the password is encrypted at rest |
/api/wifi_delete | Delete one |
| Route | What it does |
|---|
/api-sdk/vision_events | A server-sent-event stream of his detections |
/api-sdk/vision_stop | Stop that session |
/api/get_vision_config, /api/set_vision_config | The always-on detector settings on the robot |
/api-sdk/begin_cam_stream, /api-sdk/stop_cam_stream | Start and stop the camera feed |
/cam-stream | The camera as an MJPEG stream |
/api-sdk/get_image, /api-sdk/get_image_thumb, /api-sdk/get_image_ids, /api-sdk/delete_image | Photos on the robot |
/api-sdk/mirror_mode | Draw the camera on his own face |
/api-sdk/teach_snapshot | Save a labelled crop |
/api-sdk/teach_list | The labels taught so far |
/api-sdk/teach_index | Rebuild the recogniser’s index |
/api-sdk/recognise | Ask the server what it thinks it sees |
/api-sdk/get_faces, /api-sdk/add_face, /api-sdk/rename_face, /api-sdk/delete_face | The robot’s face album |
See Vision.
| Route | What it does |
|---|
/api-sdk/cube_status | Whether the cube is connected, and its state |
/api-sdk/cube_connect, /api-sdk/cube_disconnect | The Bluetooth link |
/api-sdk/cube_lights | Its lights |
/api-sdk/cube_action | Fetch, dock, play |
/api-sdk/cube_events | A stream of taps and movement |
| Route | What it does |
|---|
/api-sdk/eye_color, /api-sdk/custom_eye_color | Eye colour |
/api/get_eye_style, /api/set_eye_style | The eye style: scale, spacing, angle, radii, lids |
/api/expressions | List the drawn expressions; add a name to fetch one |
/api/animations | The animation clips on this server |
/api/install_animations | Install clips onto the robot |
/api-sdk/list_animations, /api-sdk/play_animation | The robot’s own clips |
/api-sdk/face_gif, /api-sdk/face_gif_stop | Play a GIF on his display, by URL or upload |
/api/set_clock, /api/clock_status, /api/clock_preview, /api/clock_show | The clock face |
| Route | What it does |
|---|
/api-sdk/sounds | The sound sets and their names; takes=1 expands each into its files |
/api-sdk/play_audio | Play one, sound=<set>/<name>, volume=0-100 |
/api-sdk/play_sound | Upstream’s raw playback route |
/api/sounds/… | Serve a sound file, so the browser can audition it |
/api/native_sounds | The catalogue of the robot’s own 474 audio events; group= for one bucket, unused=1 for what nothing fires |
/api-sdk/say_text | Speak a line |
/api-sdk/volume | His volume |
See Sounds.
| Route | What it does |
|---|
GET /api/social | Configuration, state, and the vocabularies |
POST /api/social | Replace the configuration |
GET /api/social/friends | The friends list |
POST /api/social/friends | Add, replace or delete one |
GET /api/social/repertoire | The isms, kinds, styles and step operations |
POST /api/social/rehearse | Run one reaction now |
GET /api/social/episodes | The last 100 episodes, newest first |
POST /api/social/stop | Cancel whatever is running |
See Social reactions.
| Route | What it does |
|---|
/api-sdk/assume_behavior_control, /api-sdk/release_behavior_control | Take and give back control |
/api-sdk/move_head, /api-sdk/move_lift, /api-sdk/move_wheels | Drive him |
/api-sdk/begin_event_stream, /api-sdk/stop_event_stream | The robot’s own event stream |
/api-sdk/trigger_wake_word, /api-sdk/button_hey_vector, /api-sdk/button_alexa | Trigger a voice request as if by wake word or button |
/api-sdk/cloud_intent | Send an intent directly |
| Route | What it does |
|---|
/api-sdk/locale, /api-sdk/timezone, /api-sdk/location | Language, time zone and place |
/api-sdk/temp_c, /api-sdk/temp_f | Temperature unit |
/api-sdk/time_format_12, /api-sdk/time_format_24 | Clock format |
/api-sdk/alexa_sign_in, /api-sdk/alexa_sign_out | The assistant account |
Note that the robot’s weather location lives in the robot’s own document store,
not in the server’s configuration. Editing it server-side is overwritten when he
reconnects.
| Route | What it does |
|---|
/api-ble/init, /api-ble/scan, /api-ble/connect, /api-ble/disconnect | Find and connect over Bluetooth |
/api-ble/send_pin, /api-ble/do_auth | The pin on his face, and authentication |
/api-ble/scan_wifi, /api-ble/connect_wifi, /api-ble/get_wifi_status | Put him on a network |
/api-ble/get_robot_status, /api-ble/get_ip_address, /api-ble/get_firmware_version | What he is and where he is |
/api-ble/start_ota, /api-ble/stop_ota, /api-ble/get_ota_status | Firmware over Bluetooth |
/api-ble/onboard, /api-ble/reset_onboarding, /api-ble/do_dev_setup | Finish, or start again |
/api-ssh/… | The legacy SSH-based setup path |
/api-chipper/use_ep, /api-chipper/use_ip, /api-chipper/restart | Server mode and restart |
The Bluetooth routes only work over HTTPS, because Web Bluetooth requires a
secure context. That is what port 8443 is for.
| Route | What it does |
|---|
/api-lua/run_script | Run a Lua script against the robot |
| Path | What it is |
|---|
/ | The dashboard |
/legacy/ | The previous web interface |
/brain/… | Reverse proxy to the Python brain |
/session-certs/… | Per-session certificates |
/sdk-app | Upstream’s SDK page |
The brain listens on 127.0.0.1:8090 and is reached from a browser through
/brain/…. It is a separate service with its own interface:
| Route | What it does |
|---|
POST /v1/events | The event subscriber |
POST /v1/chat/completions | The conversation endpoint |
GET /v1/mood, POST /v1/mood/reflect | Mood |
GET /v1/memory/list, POST /v1/memory/remember, /forget, /clear | Memory |
POST /v1/state/face_seen, GET /v1/state/face | Who he is looking at |
POST /v1/ambient, GET /v1/ambient/state, POST /v1/ambient/quiet | The ambient loop and quiet mode |
POST /v1/proactive_greeting | Decide whether to greet someone |
GET /v1/modes/state | Which events the current mode claims |
GET /v1/chatter/state, POST /v1/chatter/now | Idle chatter |
GET /v1/vision/reactions | Whether vision reactions are on, and what they have done |
POST /v1/vision/index, POST /v1/vision/recognise, GET /v1/vision/status | The server-side recogniser |
GET/PUT /v1/robots, GET/PUT /v1/robots/{esn} | Per-robot profiles |
GET/PUT /v1/settings | Environment settings, with secrets masked |
POST /v1/restart | Restart the brain |
GET /health | Liveness |