<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bcmeter.org/wiki/index.php?action=history&amp;feed=atom&amp;title=API_reference</id>
	<title>API reference - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://bcmeter.org/wiki/index.php?action=history&amp;feed=atom&amp;title=API_reference"/>
	<link rel="alternate" type="text/html" href="https://bcmeter.org/wiki/index.php?title=API_reference&amp;action=history"/>
	<updated>2026-06-23T13:36:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.0</generator>
	<entry>
		<id>https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=427&amp;oldid=prev</id>
		<title>Bcmwiki: Restructure: platform separation (ESP32 commercial prioritised, Raspberry Pi DIY in own section); verified against firmware/Pi source; complete serial command list</title>
		<link rel="alternate" type="text/html" href="https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=427&amp;oldid=prev"/>
		<updated>2026-06-08T18:59:35Z</updated>

		<summary type="html">&lt;p&gt;Restructure: platform separation (ESP32 commercial prioritised, Raspberry Pi DIY in own section); verified against firmware/Pi source; complete serial command list&lt;/p&gt;
&lt;a href=&quot;https://bcmeter.org/wiki/index.php?title=API_reference&amp;amp;diff=427&amp;amp;oldid=410&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Bcmwiki</name></author>
	</entry>
	<entry>
		<id>https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=410&amp;oldid=prev</id>
		<title>Bcmwiki: Reframe: bcMeter (DIY) / source-available</title>
		<link rel="alternate" type="text/html" href="https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=410&amp;oldid=prev"/>
		<updated>2026-06-08T10:35:02Z</updated>

		<summary type="html">&lt;p&gt;Reframe: bcMeter (DIY) / source-available&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:35, 8 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The bcMeter exposes a REST API on port 80. All endpoints are accessible without authentication when connected to the device network. CORS is enabled for all GET requests (&amp;lt;code&amp;gt;allow_origins=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The bcMeter exposes a REST API on port 80. All endpoints are accessible without authentication when connected to the device network. CORS is enabled for all GET requests (&amp;lt;code&amp;gt;allow_origins=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The software is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;open &lt;/del&gt;source: [https://github.com/dahljo/bcmeter github.com/dahljo/bcmeter]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The software is source&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-available — freely available for private, educational and research use (CC BY-NC 4.0)&lt;/ins&gt;: [https://github.com/dahljo/bcmeter github.com/dahljo/bcmeter]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Status &amp;amp; Diagnostics ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Status &amp;amp; Diagnostics ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bcmwiki</name></author>
	</entry>
	<entry>
		<id>https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=341&amp;oldid=prev</id>
		<title>Bcmwiki: Update API reference to match current bcmeter-dev codebase: add incidents section to /api/logs, add identify/debug_mobile actions, add /api/maintenance-logs and /api/debug_mobile/status, add wifi/scan/refresh POST, update response schemas, add static routes, remove endpoints not in current codebase (cleanempty/export/factory_reset), add CORS note</title>
		<link rel="alternate" type="text/html" href="https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=341&amp;oldid=prev"/>
		<updated>2026-03-31T17:41:47Z</updated>

		<summary type="html">&lt;p&gt;Update API reference to match current bcmeter-dev codebase: add incidents section to /api/logs, add identify/debug_mobile actions, add /api/maintenance-logs and /api/debug_mobile/status, add wifi/scan/refresh POST, update response schemas, add static routes, remove endpoints not in current codebase (cleanempty/export/factory_reset), add CORS note&lt;/p&gt;
&lt;a href=&quot;https://bcmeter.org/wiki/index.php?title=API_reference&amp;amp;diff=341&amp;amp;oldid=332&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Bcmwiki</name></author>
	</entry>
	<entry>
		<id>https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=332&amp;oldid=prev</id>
		<title>Bcmwiki: Fix hostname: bcmeter-XXXX.local (last 4 hex chars of MAC)</title>
		<link rel="alternate" type="text/html" href="https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=332&amp;oldid=prev"/>
		<updated>2026-03-08T18:38:56Z</updated>

		<summary type="html">&lt;p&gt;Fix hostname: bcmeter-XXXX.local (last 4 hex chars of MAC)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:38, 8 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l131&quot;&gt;Line 131:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 131:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Sync time first&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Sync time first&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter.local/api/control?action=synctime&amp;amp;ts=$(date +%s)&amp;amp;tz=Europe/Berlin&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-XXXX&lt;/ins&gt;.local/api/control?action=synctime&amp;amp;ts=$(date +%s)&amp;amp;tz=Europe/Berlin&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Start measurement&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Start measurement&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter.local/api/control?action=start&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-XXXX&lt;/ins&gt;.local/api/control?action=start&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Poll status&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Poll status&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter.local/api/status&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-XXXX&lt;/ins&gt;.local/api/status&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Download current data&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Download current data&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter.local/api/csv&amp;quot; -o measurement.csv&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;curl &amp;quot;http://bcmeter&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-XXXX&lt;/ins&gt;.local/api/csv&amp;quot; -o measurement.csv&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bcmwiki</name></author>
	</entry>
	<entry>
		<id>https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=318&amp;oldid=prev</id>
		<title>Bcmwiki: Update: V1/V2 naming, remove ESP32/Pi distinction</title>
		<link rel="alternate" type="text/html" href="https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=318&amp;oldid=prev"/>
		<updated>2026-03-08T13:21:06Z</updated>

		<summary type="html">&lt;p&gt;Update: V1/V2 naming, remove ESP32/Pi distinction&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:21, 8 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== API Reference ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== API Reference ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The bcMeter exposes a REST API on port 80. All endpoints are accessible without authentication when connected to the device network. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;This API &lt;/del&gt;is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;identical between the ESP32 firmware and the &lt;/del&gt;[https://github.com/dahljo/bcmeter&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-dev &lt;/del&gt;bcmeter&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-dev&lt;/del&gt;] &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;open-source implementation.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The bcMeter exposes a REST API on port 80. All endpoints are accessible without authentication when connected to the device network.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The software &lt;/ins&gt;is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;open source: &lt;/ins&gt;[https://github.com/dahljo/bcmeter &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;github.com/dahljo/&lt;/ins&gt;bcmeter]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Status &amp;amp; Diagnostics ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Status &amp;amp; Diagnostics ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l78&quot;&gt;Line 78:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 80:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| GET || &amp;lt;code&amp;gt;/api/control?action=cleanempty&amp;lt;/code&amp;gt; || Remove empty (0 byte) log files&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| GET || &amp;lt;code&amp;gt;/api/control?action=cleanempty&amp;lt;/code&amp;gt; || Remove empty (0 byte) log files&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| GET || &amp;lt;code&amp;gt;/api/control?action=export&amp;lt;/code&amp;gt; || Export all logs to SD card &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(ESP32 only)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| GET || &amp;lt;code&amp;gt;/api/control?action=export&amp;lt;/code&amp;gt; || Export all logs to SD card&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bcmwiki</name></author>
	</entry>
	<entry>
		<id>https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=297&amp;oldid=prev</id>
		<title>Bcmwiki: Wiki update: sync with manual and dev docs (2026-03)</title>
		<link rel="alternate" type="text/html" href="https://bcmeter.org/wiki/index.php?title=API_reference&amp;diff=297&amp;oldid=prev"/>
		<updated>2026-03-08T13:10:07Z</updated>

		<summary type="html">&lt;p&gt;Wiki update: sync with manual and dev docs (2026-03)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== API Reference ==&lt;br /&gt;
&lt;br /&gt;
The bcMeter exposes a REST API on port 80. All endpoints are accessible without authentication when connected to the device network. This API is identical between the ESP32 firmware and the [https://github.com/dahljo/bcmeter-dev bcmeter-dev] open-source implementation.&lt;br /&gt;
&lt;br /&gt;
=== Status &amp;amp; Diagnostics ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/status&amp;lt;/code&amp;gt; || Current measurement state, last sensor readings, error codes, sample count, WiFi mode, firmware version&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/system&amp;lt;/code&amp;gt; || Hardware info: MAC address, memory, time, last calibration, GPS position, barometric altitude&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/logs&amp;lt;/code&amp;gt; || Structured health report with sections: hardware, measurement, system, network&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Measurement Control ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=start&amp;lt;/code&amp;gt; || Begin measurement session (requires time sync + calibration). Add &amp;lt;code&amp;gt;&amp;amp;force=1&amp;lt;/code&amp;gt; to override preflight checks.&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=stop&amp;lt;/code&amp;gt; || Stop measurement and save session file&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=calibrate&amp;lt;/code&amp;gt; || Start calibration routine (async — poll &amp;lt;code&amp;gt;/api/calibration&amp;lt;/code&amp;gt; for progress)&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/calibration&amp;lt;/code&amp;gt; || Calibration status: running, elapsed time, log output, success/failure&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=clear_error&amp;lt;/code&amp;gt; || Reset error state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/config&amp;lt;/code&amp;gt; || All settings as JSON. Each parameter includes type, value, label, tab, and description.&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/config&amp;lt;/code&amp;gt; || Update settings. JSON body with key-value pairs. Only changed values need to be sent.&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/device/rename&amp;lt;/code&amp;gt; || Set device name. Body: &amp;lt;code&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;bcmeter01&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=synctime&amp;amp;ts=EPOCH&amp;amp;tz=IANA&amp;lt;/code&amp;gt; || Sync device clock. &amp;lt;code&amp;gt;ts&amp;lt;/code&amp;gt; = Unix timestamp, &amp;lt;code&amp;gt;tz&amp;lt;/code&amp;gt; = IANA timezone string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== WiFi Management ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/wifi/scan&amp;lt;/code&amp;gt; || List nearby networks. Add &amp;lt;code&amp;gt;?refresh=1&amp;lt;/code&amp;gt; to trigger a new scan.&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/wifi/status&amp;lt;/code&amp;gt; || Current connection: mode (sta/ap), SSID, IP address&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/wifi/connect&amp;lt;/code&amp;gt; || Connect to network. Body: &amp;lt;code&amp;gt;{&amp;quot;ssid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;pass&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;hidden&amp;quot;: false}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/wifi/connect/status&amp;lt;/code&amp;gt; || Connection progress: state, hostname, log messages&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/wifi/delete&amp;lt;/code&amp;gt; || Clear saved WiFi credentials, switch to AP mode&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/ap-security&amp;lt;/code&amp;gt; || Hotspot security settings: secured (bool), password&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/ap-security&amp;lt;/code&amp;gt; || Update hotspot password. Body: &amp;lt;code&amp;gt;{&amp;quot;secured&amp;quot;: true, &amp;quot;password&amp;quot;: &amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data Management ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/csv&amp;lt;/code&amp;gt; || Current session CSV data. Add &amp;lt;code&amp;gt;?file=FILENAME&amp;lt;/code&amp;gt; for archived files.&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/files&amp;lt;/code&amp;gt; || List stored CSV logs as JSON: &amp;lt;code&amp;gt;[{&amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;size&amp;quot;: 1234}, ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=cleardata&amp;lt;/code&amp;gt; || Delete all stored log files&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=cleanempty&amp;lt;/code&amp;gt; || Remove empty (0 byte) log files&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=export&amp;lt;/code&amp;gt; || Export all logs to SD card (ESP32 only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Firmware Updates ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/ota/status&amp;lt;/code&amp;gt; || Check if update available: version, release notes, apply state/progress&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/ota/check&amp;lt;/code&amp;gt; || Force check for new firmware&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/ota/skip&amp;lt;/code&amp;gt; || Skip current available update&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/ota/apply&amp;lt;/code&amp;gt; || Download and flash firmware update&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/update&amp;lt;/code&amp;gt; || Direct firmware upload (multipart form-data, .tar.gz)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== System Operations ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=reboot&amp;lt;/code&amp;gt; || Reboot the device&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=shutdown&amp;lt;/code&amp;gt; || Safely shut down&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/control?action=factory_reset&amp;lt;/code&amp;gt; || Erase all data and settings, reboot to factory state&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/email/validate&amp;lt;/code&amp;gt; || Validate email API key. Body: &amp;lt;code&amp;gt;{&amp;quot;api_key&amp;quot;: &amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Captive Portal ===&lt;br /&gt;
&lt;br /&gt;
These endpoints handle captive portal detection on mobile devices:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Endpoint !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/generate_204&amp;lt;/code&amp;gt; || Android captive portal check&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/hotspot-detect.html&amp;lt;/code&amp;gt; || Apple captive portal check&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/success.txt&amp;lt;/code&amp;gt; || Generic connectivity probe&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example: Start a Measurement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Sync time first&lt;br /&gt;
curl &amp;quot;http://bcmeter.local/api/control?action=synctime&amp;amp;ts=$(date +%s)&amp;amp;tz=Europe/Berlin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Start measurement&lt;br /&gt;
curl &amp;quot;http://bcmeter.local/api/control?action=start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Poll status&lt;br /&gt;
curl &amp;quot;http://bcmeter.local/api/status&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Download current data&lt;br /&gt;
curl &amp;quot;http://bcmeter.local/api/csv&amp;quot; -o measurement.csv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bcmwiki</name></author>
	</entry>
</feed>