|====================================| | ArtiNodeAPI Protocol Version 1.00 | | Written by: Michel van Osenbruggen | | CopyRight 2026 ArtiLED B.V. | |====================================| Node versions : LED Computer 1.52, Master Computer 1.61, Audio Processor 1.52, Video Processor 2.35 Latest change : 06-10-2026 ======================= | Protocol Definition | ======================= Protocol : HTTP Port : 80 URL : http://node_ip/api DATA : GET or POST variables "token" and "data" (JSON object, {} when empty) Token : The node's own token (data/token) |=============| | Products | |=============| LED Computer : All commands except Relay/Slave Commands Master Computer : All commands Audio Processor : /alive, /version, /info, /config, /modes, /mode Video Processor : /alive, /version, /info, /config, /light, /modes, /mode, see also ArtiVideoAPI.txt |=============| | Error Codes | |=============| 1 : Login Failed (invalid username or password) 2 : Token Invalid (request new token) 3 : Incomplete data (not all data supplied) 4 : Invalid data (data value incorrect) 5 : Invalid item (id does not exist) 6 : Command Invalid 7 : Command Execution Failed |===================| | Command Structure | |===================| $ response : Command Response => { "success":1/0, "error":error Number, "error_text":"Error Text", "execution_time":ms, "data": { data } } ================== | Data Structure | ================== $ name : {"name":"name"} -> Node Name $ ident : {"ident":"ident"} -> Node Ident $ version : {"version":"version"} -> LED Computer, Master Computer: LED Controller Firmware Version; Audio, Video Processor: Software Version $ token : {"token":"token"} -> Node Token $ scene : {"id":"id","name":"name","image":"image","running":"0"/"1"} $ mode : {"id":"id","name":"name","image":"image","running":"0"/"1"} -> LED Computer, Master Computer : {"id":id,"name":"name","image":"/images/modes/image"} -> Audio, Video Processor $ settings : LED Computer : {"leds":1-1000,"channels":1-4,"hardware":1-14,"profile":1-3,"white_model":0-3,"max_brightness":1-255,"max_brightness_mode":0-1, "psu_control":0-3,"psu_startup_delay":0-10,"psu_remote_ip":"ip","psu_remote_token_set":true/false, "power_auto_mode":0-3,"power_save_mode":0-5,"power_save_time":0-24} : Master Computer : {"psu_control":0-3,"psu_startup_delay":0-10,"psu_remote_ip":"ip","psu_remote_token_set":true/false, "power_auto_mode":0-3,"power_save_mode":0-5,"power_save_time":0-24} : Audio Processor : {"audio_1_channel":1-99, ... "audio_N_channel":1-99} -> N = Channels (number of analyzers) : Video Processor : {"video_main_channel":1-99,"video_ambi_channel":1-99,"video_matrix_channel":1-99} $ info : LED Computer, Master Computer : {"name","type","serial","mac","node_version","led_version","uptime","voltage","current","power", "led_voltage","led_current","led_power","cpu_temp","temperature"} : Audio Processor : {"name","type","serial","mac","node_version","analyzer_version","channels","uptime","cpu_temp","temperature", "audio_1_port", ... "audio_N_port"} : Video Processor : {"name","type","serial","mac","node_version","uptime","cpu_temp","temperature", "video_main_port","video_ambi_port","video_matrix_port"} : uptime in seconds, voltage V, current A, power W, temperatures °C, null = not available : temperature = highest controller temperature sensor : audio_N_port "ttyUSB0"-"ttyUSB3" or "analyzer1"-"analyzer8"; video_*_port 50200 + channel $ channel, color_w, color_rgb, color_rgbw, color_hsv, segment, palette, custom_palette, advanced_palette, effect_rgb, effect_rgbw : See ArtiAPI.txt > /alive : No Data -> Returns Node Name and Ident -> See Data Structure 'name' and 'ident' (no token) ----------------- | Login Command | ----------------- > /login : Data {"username":"username","password":"password"} -> Returns Token -> See Data Structure 'token' (no token) : LED Computer, Master Computer ----------------- | Info Commands | ----------------- > /version : Empty Data {} -> Returns Version -> See Data Structure 'version' > /info : Empty Data {} -> Returns {"version":"version","config_api":1,"settings":{settings},"config_pending":true/false,"info":{info}} : See Data Structure 'settings' and 'info' : config_pending true = a saved change is not applied yet, /config applies it again ------------------ | Config Command | ------------------ > /config : Data {"setting":value, ...} -> Any of the keys in 'settings' (psu_remote_token instead of psu_remote_token_set) : Returns {"changed":["setting", ...],"applied":true/false,"config_pending":true/false,"settings":{settings}} : "psu_remote_ip" "ip" or "", "psu_remote_token" 25 letters/digits or ""; psu_control 3 needs both : Video Processor: main, ambi and matrix channel must differ : One invalid value -> error 4, nothing is saved : Saved but not applied -> error 7 with data, config_pending true ---------------- | Light Command | ---------------- > /light : Data {"channel":channel},{"state":state},{"brightness":brightness},{"clear":clear},{"segment"}, {"color_w"},{"color_rgb"},{"color_rgbw"},{"color_hsv"},{"palette"},{"custom_palette"},{"advanced_palette"}, {"effect_rgb"},{"effect_rgbw"} -> Sets the node's own LEDs -> Returns Response See Data Structure 'response' : One color, palette or effect per command : Video Processor: no "clear" and "segment" ------------------------ | Scene / Mode Commands | ------------------------ > /scenes : Empty Data {} -> Returns {"scenes":[{scene1, scene2, ....}]} See Data Structure 'scene' > /scene : Data {"scene":scene_id} or {"scene":"scene_name"} and optional {"running":0/1},{"test":1} -> Starts (default) or Stops (running:0) > /modes : Empty Data {} -> Returns {"modes":[{mode1, mode2, ....}]} See Data Structure 'mode' > /mode : Data {"mode":mode_id} or {"mode":"mode_name"} and optional {"running":0/1},{"test":1} -> Starts (default) or Stops (running:0) : Audio, Video Processor: {"mode":"mode_name"}; Video Processor also {"running":0} ---------------------------------- | Relay / Slave Commands (Master) | ---------------------------------- > /relay_info : POST "ip","token" (Relay Controller) + "api_token" -> Returns the Relay Controller /api/info > /slave_info : POST "ip","token" (Slave Controller) + "api_token" -> Returns the Slave Controller /api/info > /relay_command : POST "ip","token","data" (Relay Controller) + "api_token" -> Sends data to the Relay Controller /api -> See ArtiRelayAPI.txt