yealinkymcs

n8n community node for the Yealink Management Cloud Service (YMCS) API

Package Information

Released: this month
Downloads: 459 weekly / 503 monthly
Latest Version: 0.4.0
Author: David Szpunar

Documentation

n8n-nodes-yealinkymcs

This is an n8n community node for the Yealink Management Cloud Service (YMCS) Open API V4X. It lets you manage Yealink VoIP phones and room devices directly from your n8n workflows, including provisioning, configuration, diagnostics, and firmware management.

n8n is a fair-code licensed workflow automation platform.

Installation

Follow the installation guide in the n8n community nodes documentation.

npm install @dszp/n8n-nodes-yealinkymcs

Or install from the n8n GUI: Settings > Community Nodes > Install and enter @dszp/n8n-nodes-yealinkymcs.

Credentials

You need a Yealink YMCS enterprise account with API access enabled.

  1. Log into the Yealink YMCS portal
  2. Navigate to Enterprise Settings > API Service
  3. Copy the AccessKey ID (Client ID) and AccessKey Secret (Client Secret)
  4. In n8n, create a new Yealink YMCS API credential
  5. Select your Region (US, EU, or AU) and enter the Client ID and Client Secret

Click Test in the credential dialog to verify the connection before saving.

Using the credential from an HTTP Request node

The credential also works outside this node. In an HTTP Request node, set
Authentication to Predefined Credential Type, then choose Yealink YMCS API as the
Credential Type. Every request then carries the Bearer token plus the timestamp and nonce
headers the API requires, so you can call any endpoint directly:

POST https://us-api.ymcs.yealink.com/v2/dm/listSites
{ "skip": 0, "limit": 10, "autoCount": true }

Note that the base URL is region-specific and must be written out in full — the HTTP Request
node does not read the Region from the credential.

Resources

This node supports 16 resources covering the full YMCS API:

Resource Operations
Alarm Get Many
Configuration Create, Delete, Get, Get Many, Push (Device, Site and Group configs); Update (Site and Group configs only: a device config cannot be updated, so delete it and create it again)
Custom API Call Make API Request
Device Create, Create Many, Delete, Delete Many, Get, Get Configuration, Get Many, Update
Device Accessory Get, Get Many, Restart, Factory Reset
Device Account Bind, Get Many, Unbind
Device Control Factory Reset, Restart
Device Group Add Devices, Create, Delete, Get Devices, Get Many, Remove Devices, Update
Device Identification Get ID
Diagnosis Capture Screenshot, Export Config, Export Syslog, Get Network Interfaces, Get Status, Ping, Start Packet Capture, Stop Packet Capture, Traceroute
Firmware Get Many Custom, Get Many Official, Push, Push Official
Model Get Many
Operation Log Get Many
RPS Create, Create Many, Create Server, Delete, Delete Server, Get Many, Get Servers, Update, Update Server
SIP Account Create, Delete, Get Many, Update
Site Create, Delete, Get, Get Many, Update

Custom API Call

Not every endpoint has a dedicated operation, and the API gains new ones over time. The
Custom API Call resource calls any YMCS path using the credential's authentication:

  • Method — defaults to POST, which is what every YMCS list endpoint uses
  • Endpoint — a path such as /v2/dm/listDevices; the host comes from the credential's Region
  • Query Parameters / Body — sent as-is
  • Options → Paginate All Pages — walks a POST list endpoint using the standard
    skip/limit/autoCount pattern and returns the combined items, so you do not have to build the
    paging loop yourself. Pair with Response Data Key (default data) and Max Page Size
    (500 for most endpoints, but listDevices caps at 100).

The output shape depends on that toggle. With Paginate All Pages on you get one n8n item
per record. With it off you get the API response verbatim — for a list endpoint that means a
single item holding the { skip, limit, total, data } envelope. Leaving raw responses
untouched is intentional: this operation is a passthrough, and non-list endpoints return
shapes that no generic unwrapping would handle correctly.

An empty body ({}) is sent as-is rather than omitted. Most YMCS endpoints reject a request
with no body at all (HTTP 412, code 900444) but accept {} and apply their own defaults.

Compatibility

  • Minimum n8n version: 1.0.0+
  • Node.js: 18+ (tested with Node 22 and 24)
  • Tested against Yealink YMCS API V4X (version 1.0.0)

Known Limitations

  • Earlier versions shipped a custom HTTPS agent for legacy TLS renegotiation. It was removed in 0.3.0 because all three regional hosts now negotiate TLS 1.3. If your n8n instance sits behind a TLS-intercepting proxy that forces a lower version, connections may fail.
  • Diagnosis operations (packet capture, ping, traceroute, etc.) return a diagnosisId. Poll the Get Status operation in your workflow to check for completion.
  • The Yealink API misspells "official" as "offical" in firmware endpoints. The node matches the API spelling internally but uses the correct spelling in the UI.

API Documentation

License

MIT

Author

David Szpunar - GitHub

Discussion