Fermax Blue intercom – Full HA integration with auto token renewal (no hardware)
After reverse-engineering the Blue by Fermax official app API, here is a complete solution to integrate your Fermax intercom into Home Assistant with automatic token renewal every 24 hours.
Advantages
- No extra hardware: No relays, no ESP32, no physical wiring.
- Zero maintenance: Token renews itself automatically.
- Instant response: Perfect for HomeKit, CarPlay or widgets.
STEP 1: Capture data with Proxyman
Install Proxyman on your computer, enable SSL on your phone and open the Fermax app.
1. Authorization Basic code
Find oauth-pro-duoxme.fermax.io → request POST /oauth/token → Headers tab → copy everything after Basic .
2. Your credentials
Same request, Body → Form tab. Watch out for special characters:
@ → %40 / ? → %3F / # → %23
3. Device ID
Tap the open door button in the app. Proxyman shows POST /deviceaction/api/v1/device/[ID]. Copy that long ID at the end of the URL.
STEP 2: configuration.yaml
sensor:
- platform: rest
name: "Fermax Token"
resource: "https://oauth-pro-duoxme.fermax.io/oauth/token"
method: POST
payload: "grant_type=password&password=[YOUR_URL_PASSWORD]&username=[YOUR_URL_EMAIL]"
headers:
Content-Type: "application/x-www-form-urlencoded; charset=utf-8"
Authorization: "Basic [YOUR_BASIC_CODE]"
app-version: "4.3.1"
Accept: "*/*"
Accept-Language: "es-ES;q=1.0"
phone-os: "26.5"
User-Agent: "Blue/4.3.1 (com.fermax.bluefermax; build:3; iOS 26.5.0) Alamofire/5.10.2"
phone-model: "iPhone18,1"
app-build: "3"
value_template: >-
{% if value_json is defined and value_json.access_token is defined %}
Connected
{% else %}
Credential Error
{% endif %}
json_attributes:
- access_token
scan_interval: 86400
rest_command:
open_door_fermax:
url: "https://pro-duoxme.fermax.io/deviceaction/api/v1/device/[YOUR_DEVICE_ID]"
method: POST
headers:
Authorization: "Bearer {{ state_attr('sensor.fermax_token', 'access_token') }}"
app-version: "4.3.1"
Accept: "*/*"
Accept-Language: "es-ES;q=1.0"
phone-os: "26.5"
User-Agent: "Blue/4.3.1 (com.fermax.bluefermax; build:3; iOS 26.5.0) Alamofire/5.10.2"
phone-model: "iPhone18,1"
app-build: "3"
content_type: "application/json"
payload: '{"block": 200, "number": 0, "subblock": -1}'
The
AcceptandAccept-Languagevalues shown are from my device. Check your own Proxyman capture to confirm yours, as they may vary depending on your phone language and app version.
![]()
Accept-Encoding: bris intentionally removed to prevent Brotli compression from breaking HA's JSON parser.