Skip to content

HTTP routes

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:

PrefixWhat 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.

RouteWhat it does
/api/get_configThe whole server configuration
/api/get_version_infoServer version
/api/is_api_v3A trivial liveness answer
/api/is_runningWhether the server is up
/api/get_logsThe server log
/api/get_debug_logsThe verbose log
/api/generate_certsGenerate the server’s certificates
/api/set_stt_info, /api/get_stt_infoThe speech-to-text provider
/api/set_stt_apiThe transcription endpoint, model and key — any OpenAI-compatible endpoint
/api/get_download_statusProgress while a speech model is downloading
/api/set_kg_api, /api/get_kg_apiThe knowledge-graph and language-model provider
/api/set_weather_api, /api/get_weather_apiThe weather provider
/api/weather_nowCurrent conditions, used by the brain’s idle chatter
/api/set_gif_apiThe GIF provider key
/api/gif_searchSearch GIFs, proxied server-side so the key stays on the server
/api/delete_chatsClear stored conversation history
RouteWhat it does
/api/get_custom_intents_jsonThe custom intent list
/api/add_custom_intentAdd one
/api/edit_custom_intentChange one
/api/remove_custom_intentRemove one
RouteWhat it does
/api/get_eventsThe last 200 events, for the dashboard’s activity table
/api/set_eventsSubscriber URLs, and whether the event system is on
/api/emit_eventEmit an event by hand — a test hook
/api/set_mqttBroker address, credentials and topic prefix
/api/mqtt_statusWhether the bridge is connected

See Events for the event catalogue itself.

RouteWhat it does
/api/find_robotsFind Vectors on the network over mDNS
/api/robot_infoOS version, uptime and CPU ceiling, read over SSH
/api/robot_endpointsWhere this robot is configured to talk to
/api/point_robot_hereWrite this server’s address and certificate onto the robot and restart its link
/api/ssh_pubkeyThis installation’s own public key, to append to the robot’s authorised keys
/api/reboot_robotReboot him
/api/saySpeak a line through behaviour control
/api-sdk/print_robot_infoRobot information over the SDK
/api-sdk/get_sdk_info, /api-sdk/get_sdk_settingsSDK-side settings
/api-sdk/get_robot_statsRobot statistics
/api-sdk/get_stim_statusHis current stimulation level
/api-sdk/get_batteryBattery state
/api-sdk/conn_test, /api-sdk/disconnectConnection test and teardown
/api-sdk/debugDebug output
/okThe liveness check the robot itself polls, on port 80
RouteWhat it does
/api/cpu_statusThe current CPU level and temperature
/api/set_cpu_levelSet the CPU level
/api/battery_historyBattery samples, hours= up to 30 days, default 24
/api/battery_healthThe plain-language verdict on the pack
RouteWhat it does
/api/get_firmwareThe images available on this server
/api/get_ota/<file>Download one image
/api/ota/<type>/<version>.otaThe robot’s own update endpoint: a newer image, or 404
/api/start_otaInstall an image on a robot
/api/get_ota_statusPhase, progress and how many downloads are in flight
/api/robot_update_statusHis version against the newest here, the auto-update flag and the active slot
/api/check_for_updateAsk him to check
/api/set_auto_updatesTurn his own auto-update on or off
/api/get_otaLegacy image fetch

See EmberOS firmware.

RouteWhat it does
/api/get_profilesThe presets on this server
/api/robot_profileWhich preset a robot has, and whether an update means it needs re-applying
/api/apply_profileApply one over SSH
/api-sdk/modeGET the current mode and the list; POST to switch

See Modes and sound sets.

RouteWhat it does
/api/wakeword_statusThe installed custom wake word
/api/wakeword_installTrain a wake word offline and install it on the robot
/api/wakeword_removeRemove it
/api/wifi_listSaved networks — never with passwords
/api/wifi_getOne network
/api/wifi_saveSave one; the password is encrypted at rest
/api/wifi_deleteDelete one
RouteWhat it does
/api-sdk/vision_eventsA server-sent-event stream of his detections
/api-sdk/vision_stopStop that session
/api/get_vision_config, /api/set_vision_configThe always-on detector settings on the robot
/api-sdk/begin_cam_stream, /api-sdk/stop_cam_streamStart and stop the camera feed
/cam-streamThe camera as an MJPEG stream
/api-sdk/get_image, /api-sdk/get_image_thumb, /api-sdk/get_image_ids, /api-sdk/delete_imagePhotos on the robot
/api-sdk/mirror_modeDraw the camera on his own face
/api-sdk/teach_snapshotSave a labelled crop
/api-sdk/teach_listThe labels taught so far
/api-sdk/teach_indexRebuild the recogniser’s index
/api-sdk/recogniseAsk the server what it thinks it sees
/api-sdk/get_faces, /api-sdk/add_face, /api-sdk/rename_face, /api-sdk/delete_faceThe robot’s face album

See Vision.

RouteWhat it does
/api-sdk/cube_statusWhether the cube is connected, and its state
/api-sdk/cube_connect, /api-sdk/cube_disconnectThe Bluetooth link
/api-sdk/cube_lightsIts lights
/api-sdk/cube_actionFetch, dock, play
/api-sdk/cube_eventsA stream of taps and movement
RouteWhat it does
/api-sdk/eye_color, /api-sdk/custom_eye_colorEye colour
/api/get_eye_style, /api/set_eye_styleThe eye style: scale, spacing, angle, radii, lids
/api/expressionsList the drawn expressions; add a name to fetch one
/api/animationsThe animation clips on this server
/api/install_animationsInstall clips onto the robot
/api-sdk/list_animations, /api-sdk/play_animationThe robot’s own clips
/api-sdk/face_gif, /api-sdk/face_gif_stopPlay a GIF on his display, by URL or upload
/api/set_clock, /api/clock_status, /api/clock_preview, /api/clock_showThe clock face
RouteWhat it does
/api-sdk/soundsThe sound sets and their names; takes=1 expands each into its files
/api-sdk/play_audioPlay one, sound=<set>/<name>, volume=0-100
/api-sdk/play_soundUpstream’s raw playback route
/api/sounds/…Serve a sound file, so the browser can audition it
/api/native_soundsThe catalogue of the robot’s own 474 audio events; group= for one bucket, unused=1 for what nothing fires
/api-sdk/say_textSpeak a line
/api-sdk/volumeHis volume

See Sounds.

RouteWhat it does
GET /api/socialConfiguration, state, and the vocabularies
POST /api/socialReplace the configuration
GET /api/social/friendsThe friends list
POST /api/social/friendsAdd, replace or delete one
GET /api/social/repertoireThe isms, kinds, styles and step operations
POST /api/social/rehearseRun one reaction now
GET /api/social/episodesThe last 100 episodes, newest first
POST /api/social/stopCancel whatever is running

See Social reactions.

RouteWhat it does
/api-sdk/assume_behavior_control, /api-sdk/release_behavior_controlTake and give back control
/api-sdk/move_head, /api-sdk/move_lift, /api-sdk/move_wheelsDrive him
/api-sdk/begin_event_stream, /api-sdk/stop_event_streamThe robot’s own event stream
/api-sdk/trigger_wake_word, /api-sdk/button_hey_vector, /api-sdk/button_alexaTrigger a voice request as if by wake word or button
/api-sdk/cloud_intentSend an intent directly
RouteWhat it does
/api-sdk/locale, /api-sdk/timezone, /api-sdk/locationLanguage, time zone and place
/api-sdk/temp_c, /api-sdk/temp_fTemperature unit
/api-sdk/time_format_12, /api-sdk/time_format_24Clock format
/api-sdk/alexa_sign_in, /api-sdk/alexa_sign_outThe 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.

RouteWhat it does
/api-ble/init, /api-ble/scan, /api-ble/connect, /api-ble/disconnectFind and connect over Bluetooth
/api-ble/send_pin, /api-ble/do_authThe pin on his face, and authentication
/api-ble/scan_wifi, /api-ble/connect_wifi, /api-ble/get_wifi_statusPut him on a network
/api-ble/get_robot_status, /api-ble/get_ip_address, /api-ble/get_firmware_versionWhat he is and where he is
/api-ble/start_ota, /api-ble/stop_ota, /api-ble/get_ota_statusFirmware over Bluetooth
/api-ble/onboard, /api-ble/reset_onboarding, /api-ble/do_dev_setupFinish, or start again
/api-ssh/…The legacy SSH-based setup path
/api-chipper/use_ep, /api-chipper/use_ip, /api-chipper/restartServer mode and restart

The Bluetooth routes only work over HTTPS, because Web Bluetooth requires a secure context. That is what port 8443 is for.

RouteWhat it does
/api-lua/run_scriptRun a Lua script against the robot
PathWhat it is
/The dashboard
/legacy/The previous web interface
/brain/…Reverse proxy to the Python brain
/session-certs/…Per-session certificates
/sdk-appUpstream’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:

RouteWhat it does
POST /v1/eventsThe event subscriber
POST /v1/chat/completionsThe conversation endpoint
GET /v1/mood, POST /v1/mood/reflectMood
GET /v1/memory/list, POST /v1/memory/remember, /forget, /clearMemory
POST /v1/state/face_seen, GET /v1/state/faceWho he is looking at
POST /v1/ambient, GET /v1/ambient/state, POST /v1/ambient/quietThe ambient loop and quiet mode
POST /v1/proactive_greetingDecide whether to greet someone
GET /v1/modes/stateWhich events the current mode claims
GET /v1/chatter/state, POST /v1/chatter/nowIdle chatter
GET /v1/vision/reactionsWhether vision reactions are on, and what they have done
POST /v1/vision/index, POST /v1/vision/recognise, GET /v1/vision/statusThe server-side recogniser
GET/PUT /v1/robots, GET/PUT /v1/robots/{esn}Per-robot profiles
GET/PUT /v1/settingsEnvironment settings, with secrets masked
POST /v1/restartRestart the brain
GET /healthLiveness