- HTTP API
- HTTP API
- Interface security
- Response code
- API Endpoints
- /api/v4
- Broker Basic Information
- Node
- Client
- GET /api/v4/clients
- GET /api/v4/clients/{clientid}
- DELETE /api/v4/clients/{clientid}
- GET /api/v4/nodes/{node}/clients
- GET /api/v4/nodes/{node}/clients/{clientid}
- DELETE /api/v4/nodes/{node}/clients/{clientid}
- GET /api/v4/clients/username/{username}
- GET /api/v4/nodes/{node}/clients/username/{username}
- GET /api/v4/clients/{clientid}/acl_cache
- DELETE /api/v4/clients/{clientid}/acl_cache
- Subscription Information
- Routes
- Publish message
- Subscribe to topic
- Message publish in batch
- Topic subscription in batch
- plugins
- listeners
HTTP API
HTTP API
EMQ X Broker provides HTTP APIs for integration with external systems, such as querying client information, publishing messages, and creating rules.
EMQ X Broker’s HTTP API service listens on port 8081 by default. You can modify the listening port through the configuration file of etc/plugins/emqx_management.conf, or enable HTTPS listening. All API calls start with api/v4 after EMQ X Broker 4.0.0
(opens new window).
Interface security
EMQ X Broker’s HTTP API uses the method of Basic Authentication
(opens new window). The id and password must be filled with AppID and AppSecret respectively. The default AppID and AppSecret are: admin/public. You can modify and add AppID / AppSecret in the left menu bar of Dashboard by selecting “Manage”-> “Apps”.
Response code
HTTP status codes
The EMQ X Broker interface always returns 200 OK when the call is successful, and the response content is returned in JSON format.
The possible status codes are as follows:
| Status Code | Description |
|---|---|
| 200 | Succeed, and the returned JSON data will provide more information |
| 400 | Invalid client request, such as wrong request body or parameters |
| 401 | Client authentication failed , maybe because of invalid authentication credentials |
| 404 | The requested path cannot be found or the requested object does not exist |
| 500 | An internal error occurred while the server was processing the request |
result codes
The response message body of the EMQ X Broker interface is in JSON format, which always contains the returned code.
The possible returned codes are as follows:
| Return Code | Description |
|---|---|
| 0 | Succeed |
| 101 | RPC error |
| 102 | unknown mistake |
| 103 | wrong user name or password |
| 104 | Empty username or password |
| 105 | User does not exist |
| 106 | Administrator account cannot be deleted |
| 107 | Missing key request parameters |
| 108 | Request parameter error |
| 109 | Request parameters are not in legal JSON format |
| 110 | Plug-in is enabled |
| 111 | Plugin is closed |
| 112 | Client is offline |
| 113 | User already exists |
| 114 | Old password is wrong |
| 115 | Illegal subject |
API Endpoints
/api/v4
GET /api/v4
Return all Endpoints supported by EMQ X Broker.
Parameters: None
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array | Endpoints list |
| - data[0].path | String | Endpoint |
| - data[0].name | String | Endpoint name |
| - data[0].method | String | HTTP Method |
| - data[0].descr | String | Description |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4"
{"data":[{"path":"/auth_clientid","name":"list_clientid","method":"GET","descr":"List available clientid in the cluster"}, ...],"code":0}
Broker Basic Information
GET /api/v4/brokers/{node}
Return basic information of all nodes in the cluster.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| node | String | False | Node name, such as “emqx@127.0.0.1. |
| If not specified, returns all node information |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Object/Array of Objects | Returns the information of the specified node when the parameter exists, |
| otherwise, returns the information of all nodes | ||
| data.datetime | String | Current time, in the format of “YYYY-MM-DD HH: mm: ss” |
| data.node | String | Node name |
| data.node_status | String | Node status |
| data.otp_release | String | Erlang/OTP version used by EMQ X Broker |
| data.sysdescr | String | Software description |
| data.uptime | String | EMQ X Broker runtime, in the format of “H hours, m minutes, s seconds” |
| data.version | String | EMQ X Broker version |
Examples:
Get the basic information of all nodes:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/brokers"
{"data":[{"version":"develop","uptime":"4 hours, 21 minutes, 19 seconds","sysdescr":"EMQ X Broker","otp_release":"R21/10.3.5","node_status":"Running","node":"emqx@127.0.0.1","datetime":"2020-02-19 15:27:24"}],"code":0}
Get the basic information of node emqx@127.0.0.1 :
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/brokers/emqx@127.0.0.1"
{"data":{"version":"develop","uptime":"1 minutes, 51 seconds","sysdescr":"EMQ X Broker","otp_release":"R21/10.3.5","node_status":"Running","node":"emqx@127.0.0.1","datetime":"2020-02-20 14:11:31"},"code":0}
Node
GET /api/v4/nodes/{node}
Return the status of the node.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| node | String | False | Node name, such as “emqx@127.0.0.1。 |
| If not specified, returns all node information |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Object/Array of Objects | Returns node information when node parameter exists, |
| otherwise, returns information about all nodes in an Array | ||
| data.connections | Integer | Number of clients currently connected to this node |
| data.load1 | String | CPU average load in 1 minute |
| data.load5 | String | CPU average load in 5 minute |
| data.load15 | String | CPU average load in 15 minute |
| data.max_fds | Integer | Maximum file descriptor limit for the operating system |
| data.memory_total | String | VM allocated system memory |
| data.memory_used | String | VM occupied system memory |
| data.node | String | Node name |
| data.node_status | String | Node status |
| data.otp_release | String | Erlang/OTP version used by EMQ X Broker |
| data.process_available | Integer | Number of available processes |
| data.process_used | Integer | Number of used processes |
| data.uptime | String | EMQ X Broker runtime |
| data.version | String | EMQ X Broker version |
Examples:
Get the status of all nodes:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes"
{"data":[{"version":"develop","uptime":"7 seconds","process_used":315,"process_available":2097152,"otp_release":"R21/10.3.5","node_status":"Running","node":"emqx@127.0.0.1","memory_used":"96.75M","memory_total":"118.27M","max_fds":10240,"load5":"2.60","load15":"2.65","load1":"2.31","connections":0}],"code":0}
Get the status of the specified node:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1"
{"data":{"version":"develop","uptime":"2 minutes, 21 seconds","process_used":310,"process_available":2097152,"otp_release":"R21/10.3.5","node_status":"Running","node":"emqx@127.0.0.1","memory_used":101379168,"memory_total":123342848,"max_fds":10240,"load5":"2.50","load15":"2.61","load1":"1.99","connections":0},"code":0}
Client
GET /api/v4/clients
Returns the information of all clients under the cluster, and supports paging.
Query String Parameters:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| _page | Integer | False | 1 | Page |
| _limit | Integer | False | 10000 | The number of data displayed per page. If not specified, it is determined by the configuration item max_row_limit of theemqx-management plugin |
After version 4.1, multiple conditions and fuzzy queries are supported. The query parameters included are shown below.
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | False | Client identifier |
| username | String | False | Client username |
| zone | String | False | Client configuration group name |
| ip_address | String | False | Client IP address |
| conn_state | Enum | False | The current connection status of the client, the possible values areconnected,idle,disconnected |
| clean_start | Bool | False | Whether the client uses a new session |
| proto_name | Enum | False | Client protocol name, the possible values areMQTT,CoAP,LwM2M,MQTT-SN |
| proto_ver | Integer | False | Client protocol version |
| _like_clientid | String | False | Fuzzy search of client identifier by substring method |
| _like_username | String | False | Client user name, fuzzy search by substring |
| _gte_created_at | Integer | False | Search client session creation time by less than or equal method |
| _lte_created_at | Integer | False | Search client session creation time by greater than or equal method |
| _gte_connected_at | Integer | False | Search client connection creation time by less than or equal method |
| _lte_connected_at | Integer | False | Search client connection creation time by greater than or equal method |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | Information for all clients |
| data[0].node | String | Name of the node to which the client is connected |
| data[0].clientid | String | Client identifier |
| data[0].username | String | User name of client when connecting |
| data[0].proto_name | String | Client protocol name |
| data[0].proto_ver | Integer | Protocol version used by the client |
| data[0].ip_address | String | Client’s IP address |
| data[0].port | Integer | Client port |
| data[0].is_bridge | Boolean | Indicates whether the client is connected via bridge |
| data[0].connected_at | String | Client connection time, in the format of “YYYY-MM-DD HH:mm:ss” |
| data[0].disconnected_at | String | Client offline time, in the formatof “YYYY-MM-DD HH:mm:ss”, |
This field is only valid and returned when connected isfalse |
||
| data[0].connected | Boolean | Whether the client is connected |
| data[0].zone | String | Indicate the configuration group used by the client |
| data[0].keepalive | Integer | keepalive time, with the unit of second |
| data[0].clean_start | Boolean | Indicate whether the client is using a brand new session |
| data[0].expiry_interval | Integer | Session expiration interval, with the unit of second |
| data[0].created_at | String | Session creation time, in the format “YYYY-MM-DD HH:mm:ss” |
| data[0].subscriptions_cnt | Integer | Number of subscriptions established by this client |
| data[0].max_subscriptions | Integer | Maximum number of subscriptions allowed by this client |
| data[0].inflight | Integer | Current length of inflight |
| data[0].max_inflight | Integer | Maximum length of inflight |
| data[0].mqueue_len | Integer | Current length of message queue |
| data[0].max_mqueue | Integer | Maximum length of message queue |
| data[0].mqueue_dropped | Integer | Number of messages dropped by the message queue due to exceeding the length |
| data[0].awaiting_rel | Integer | Number of awaiting PUBREC packet |
| data[0].max_awaiting_rel | Integer | Maximum allowed number of awaiting PUBREC packet |
| data[0].recv_oct | Integer | Number of bytes received by EMQ X Broker (the same below) |
| data[0].recv_cnt | Integer | Number of TCP packets received |
| data[0].recv_pkt | Integer | Number of MQTT packets received |
| data[0].recv_msg | Integer | Number of PUBLISH packets received |
| data[0].send_oct | Integer | Number of bytes sent |
| data[0].send_cnt | Integer | Number of TCP packets sent |
| data[0].send_pkt | Integer | Number of MQTT packets sent |
| data[0].send_msg | Integer | Number of PUBLISH packets sent |
| data[0].mailbox_len | Integer | Process mailbox size |
| data[0].heap_size | Integer | Process heap size with the unit of byte |
| data[0].reductions | Integer | Erlang reduction |
| meta | Object | Paging information |
| meta.page | Integer | Page number |
| meta.limit | Integer | Number of data displayed per page |
| meta.count | Integer | Total number of data |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients?_page=1&_limit=10"
{"meta":{"page":1,"limit":10,"count":1},"data":[{"zone":"external","recv_cnt":2,"max_mqueue":1000,"node":"emqx@127.0.0.1","username":"test","mqueue_len":0,"max_inflight":32,"is_bridge":false,"mqueue_dropped":0,"inflight":0,"heap_size":2586,"max_subscriptions":0,"proto_name":"MQTT","created_at":"2020-02-19 17:01:26","proto_ver":4,"reductions":3997,"send_msg":0,"ip_address":"127.0.0.1","send_cnt":0,"mailbox_len":1,"awaiting_rel":0,"keepalive":60,"recv_msg":0,"send_pkt":0,"recv_oct":29,"clientid":"example","clean_start":true,"expiry_interval":0,"connected":true,"port":64491,"send_oct":0,"recv_pkt":1,"connected_at":"2020-02-19 17:01:26","max_awaiting_rel":100,"subscriptions_cnt":0}],"code":0}
Note: After 4.1, the contents of the returned meta were modified:
count:It still represents the total number. However, in multi-condition/fuzzy query, it is fixed at -1.hasnext:It is a newly added field indicating whether there is a next page.
GET /api/v4/clients/{clientid}
Returns information for the specified client
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | Client information, for details, see |
| GET /api/v4/clients |
Examples:
Query the specified client
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients/example"
{"data":[{"recv_cnt":2,"max_subscriptions":0,"node":"emqx@127.0.0.1","proto_ver":4,"recv_pkt":1,"inflight":0,"max_mqueue":1000,"heap_size":2586,"username":"test","proto_name":"MQTT","subscriptions_cnt":0,"send_pkt":0,"created_at":"2020-02-20 13:38:51","reductions":3978,"ip_address":"127.0.0.1","send_msg":0,"send_cnt":0,"expiry_interval":0,"keepalive":60,"mqueue_dropped":0,"is_bridge":false,"max_inflight":32,"recv_msg":0,"max_awaiting_rel":100,"awaiting_rel":0,"mailbox_len":1,"mqueue_len":0,"recv_oct":29,"connected_at":"2020-02-20 13:38:51","clean_start":true,"clientid":"example","connected":true,"port":54889,"send_oct":0,"zone":"external"}],"code":0}
DELETE /api/v4/clients/{clientid}
Kick out the specified client. Note that this operation will terminate the connection with the session.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
Kick out the specified client
$ curl -i --basic -u admin:public -X DELETE "http://localhost:8081/api/v4/clients/example"
{"code":0}
GET /api/v4/nodes/{node}/clients
similar with GET /api/v4/clients, Returns information about all clients under the specified node, and supports paging.
Query String Parameters:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| _page | Integer | False | 1 | page number |
| _limit | Integer | False | 10000 | The number of data displayed per page, if not specified, it is determined by the configuration item max_row_limit of the emqx-management plugin |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | Information about all clients, see GET /api/v4/clients for details |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/clients?_page=1&_limit=10"
{"meta":{"page":1,"limit":10,"count":1},"data":[{"recv_cnt":2,"max_subscriptions":0,"node":"emqx@127.0.0.1","proto_ver":4,"recv_pkt":1,"inflight":0,"max_mqueue":1000,"heap_size":2586,"username":"test","proto_name":"MQTT","subscriptions_cnt":0,"send_pkt":0,"created_at":"2020-02-19 18:25:18","reductions":4137,"ip_address":"127.0.0.1","send_msg":0,"send_cnt":0,"expiry_interval":0,"keepalive":60,"mqueue_dropped":0,"is_bridge":false,"max_inflight":32,"recv_msg":0,"max_awaiting_rel":100,"awaiting_rel":0,"mailbox_len":1,"mqueue_len":0,"recv_oct":29,"connected_at":"2020-02-19 18:25:18","clean_start":true,"clientid":"example","connected":true,"port":49509,"send_oct":0,"zone":"external"}],"code":0}
GET /api/v4/nodes/{node}/clients/{clientid}
Similar with GET /api/v4/clients/{clientid},return information about the specified client under the specified node.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Object | Information about all clients, for details, see |
| GET /api/v4/clients |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/clients/example"
{"data":[{"recv_cnt":4,"max_subscriptions":0,"node":"emqx@127.0.0.1","proto_ver":4,"recv_pkt":1,"inflight":0,"max_mqueue":1000,"heap_size":2586,"username":"test","proto_name":"MQTT","subscriptions_cnt":0,"send_pkt":3,"created_at":"2020-02-20 13:38:51","reductions":5994,"ip_address":"127.0.0.1","send_msg":0,"send_cnt":3,"expiry_interval":0,"keepalive":60,"mqueue_dropped":0,"is_bridge":false,"max_inflight":32,"recv_msg":0,"max_awaiting_rel":100,"awaiting_rel":0,"mailbox_len":0,"mqueue_len":0,"recv_oct":33,"connected_at":"2020-02-20 13:38:51","clean_start":true,"clientid":"example","connected":true,"port":54889,"send_oct":8,"zone":"external"}],"code":0}
DELETE /api/v4/nodes/{node}/clients/{clientid}
Similar with DELETE /api/v4/clients/{clientid},kick out the specified client under the specified node.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X DELETE "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/clients/example"
{"code":0}
GET /api/v4/clients/username/{username}
Query client information by Username. Since there may be multiple clients using the same user name, multiple client information may be returned at the same time.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| username | String | True | Username |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | Information about clients, for details, see |
| GET /api/v4/clients |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients/username/steve"
{"data":[{"clean_start":true,"awaiting_rel":0,"recv_msg":0,"proto_name":"MQTT","recv_cnt":2,"mailbox_len":0,"node":"emqx@127.0.0.1","mqueue_len":0,"max_subscriptions":0,"created_at":"2020-02-20 13:50:11","is_bridge":false,"heap_size":2586,"proto_ver":4,"subscriptions_cnt":0,"clientid":"example","expiry_interval":0,"send_msg":0,"inflight":0,"reductions":4673,"send_pkt":1,"zone":"external","send_cnt":1,"ip_address":"127.0.0.1","keepalive":60,"max_inflight":32,"recv_oct":29,"recv_pkt":1,"max_awaiting_rel":100,"username":"steve","connected_at":"2020-02-20 13:50:11","connected":true,"port":56429,"send_oct":4,"mqueue_dropped":0,"max_mqueue":1000}],"code":0}
GET /api/v4/nodes/{node}/clients/username/{username}
Similar with GET /api/v4/clients/username/{username}, query the information of the specified client through Username under the specified node.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| username | String | True | Username |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | Information about clients, for details, see |
| GET /api/v4/clients |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/clients/username/test"
{"data":[{"clean_start":true,"awaiting_rel":0,"recv_msg":0,"proto_name":"MQTT","recv_cnt":6,"mailbox_len":0,"node":"emqx@127.0.0.1","mqueue_len":0,"max_subscriptions":0,"created_at":"2020-02-20 13:50:11","is_bridge":false,"heap_size":1598,"proto_ver":4,"subscriptions_cnt":0,"clientid":"example","expiry_interval":0,"send_msg":0,"inflight":0,"reductions":7615,"send_pkt":5,"zone":"external","send_cnt":5,"ip_address":"127.0.0.1","keepalive":60,"max_inflight":32,"recv_oct":37,"recv_pkt":1,"max_awaiting_rel":100,"username":"test","connected_at":"2020-02-20 13:50:11","connected":true,"port":56429,"send_oct":12,"mqueue_dropped":0,"max_mqueue":1000}],"code":0}
GET /api/v4/clients/{clientid}/acl_cache
Query the ACL cache of the specified client.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | ACL Details |
| data[0].access | String | Publish/Scribe |
| data[0].topic | String | MQTT Topic |
| data[0].result | String | Allow/Deny |
| data[0].updated_time | Integer | ACL Cache settling time |
Examples:
Querying the ACL cache
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients/example/acl_cache"
{"data":[{"updated_time":1582180824571,"topic":"test","result":"allow","access":"publish"}],"code":0}
DELETE /api/v4/clients/{clientid}/acl_cache
Delete the ACL cache of the specified client。
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
Delete the ACL cache
$ curl -i --basic -u admin:public -X DELETE "http://localhost:8081/api/v4/clients/example/acl_cache"
{"code":0}
Subscription Information
GET /api/v4/subscriptions
Returns all subscription information under the cluster, and supports paging mechanism
Query String Parameters:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| _page | Integer | False | 1 | Page number |
| _limit | Integer | False | 10000 | The number of data displayed per page, if not specified, it is determined by the configuration item max_row_limit of the emqx-management plugin |
After version 4.1, multiple conditions and fuzzy queries are supported:
| Name | Type | Description |
|---|---|---|
| clientid | String | Client identifier |
| topic | String | congruent query |
| qos | Enum | Possible values are 0,1,2` |
| share | String | Shared subscription group name |
| _match_topic | String | Match query |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | All subscription information |
| data[0].node | String | Node name |
| data[0].clientid | String | Client identifier |
| data[0].topic | String | Subscribe to topic |
| data[0].qos | Integer | QoS level |
| meta | Object | same as /api/v4/clients |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/subscriptions?_page=1&_limit=10"
{"meta":{"page":1,"limit":10000,"count":2},"data":[{"topic":"a/+/c","qos":0,"node":"emqx@127.0.0.1","clientid":"78082755-e8eb-4a87-bab7-8277541513f0"},{"topic":"a/b/c","qos":1,"node":"emqx@127.0.0.1","clientid":"7a1dfceb-89c0-4f7e-992b-dfeb09329f01"}],"code":0}
Note: After 4.1, the contents of the returned meta were modified:
count:It still represents the total number, but in multi-condition/fuzzy query, it is fixed at -1.hasnext:It is a newly added field indicating whether there is a next page.
GET /api/v4/subscriptions/{clientid}
Return the subscription information of the specified client in the cluster.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Object | All subscription information |
| data.node | String | Node name |
| data.clientid | String | Client identifier |
| data.topic | String | Subscribe to topic |
| data.qos | Integer | QoS level |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/subscriptions/123"
{"data":[{"topic":"a/b/c","qos":1,"node":"emqx@127.0.0.1","clientid":"123"}],"code":0}
GET /api/v4/nodes/{node}/subscriptions
Similar with GET /api/v4/subscriptions,returns all subscription information under the specified node, and supports paging mechanism.
Query String Parameters:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| _page | Integer | False | 1 | Page number |
| _limit | Integer | False | 10000 | The number of data displayed per page, if not specified, it is determined by the configuration item max_row_limit of the emqx-management plugin |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | All subscription information |
| data[0].node | String | Node name |
| data[0].clientid | String | Client identifier |
| data[0].topic | String | Subscribe to topic |
| data[0].qos | Integer | QoS level |
| meta | Object | Same as /api/v4/clients |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/subscriptions?_page=1&limit=10"
{"meta":{"page":1,"limit":10000,"count":2},"data":[{"topic":"a/+/c","qos":0,"node":"emqx@127.0.0.1","clientid":"78082755-e8eb-4a87-bab7-8277541513f0"},{"topic":"a/b/c","qos":1,"node":"emqx@127.0.0.1","clientid":"7a1dfceb-89c0-4f7e-992b-dfeb09329f01"}],"code":0}
GET /api/v4/nodes/{node}/subscriptions/{clientid}
Similar with GET /api/v4/subscriptions/{clientid}, query all subscription information of a clientid under the specified node, and support paging mechanism.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| clientid | String | True | ClientID |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Object | All subscription information |
| data.node | String | Node name |
| data.clientid | String | Client identifier |
| data.topic | String | Subscribe to topic |
| data.qos | Integer | QoS level |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/subscriptions/sample"
{"data":[{"topic":"a/+/c","qos":0,"node":"emqx@127.0.0.1","clientid":"sample"}],"code":0}
Routes
GET /api/v4/routes
List all routes, support pagination.
Query String Parameters:
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| _page | Integer | False | 1 | page |
| _limit | Integer | False | 10000 | Page size,default use emqx-management max_row_limit option |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | routes |
| data[0].topic | String | MQTT Topic |
| data[0].node | String | Node name |
| meta | Object | see /api/v4/clients |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/routes"
{"meta":{"page":1,"limit":10000,"count":2},"data":[{"topic":"a/+/c","node":"emqx@127.0.0.1"},{"topic":"a/b/c","node":"emqx@127.0.0.1"}],"code":0}
GET /api/v4/routes/{topic}
List all routes of a topic.
Path Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| topic | Integer | True | Topic |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Object | All routes information |
| data.topic | String | MQTT Topic |
| data.node | String | Node name |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/routes/a%2fb%2fc"
{"data":[{"topic":"a/b/c","node":"emqx@127.0.0.1"}],"code":0}
Publish message
POST /api/v4/mqtt/publish
Publish MQTT message。
Parameters (json):
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| topic | String | Optional | For topic and topics, with at least one of them specified | |
| topics | String | Optional | Multiple topics separated by ,. This field is used to publish messages to multiple topics at the same time |
|
| clientid | String | Required | Client identifier | |
| payload | String | Required | Message body | |
| encoding | String | Optional | plain | The encoding used in the message body. Currently only plain and base64 are supported. |
| qos | Integer | Optional | 0 | QoS level |
| retain | Boolean | Optional | false | Whether it is a retained message |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/publish" -d '{"topic":"a/b/c","payload":"Hello World","qos":1,"retain":false,"clientid":"example"}'
{"code":0}
Subscribe to topic
POST /api/v4/mqtt/subscribe
Subscribe to MQTT topic
Parameters (json):
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| topic | String | Optional | For topic and topics, with at least one of them specified | |
| topics | String | Optional | Multiple topics separated by ,. This field is used to subscribe to multiple topics at the same time |
|
| clientid | String | Required | Client identifier | |
| qos | Integer | Optional | 0 | QoS level |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
Subscribe to the three topics of a, b, c at the same time
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/subscribe" -d '{"topics":"a,b,c","qos":1,"clientid":"example"}'
{"code":0}
POST /api/v4/mqtt/unsubscribe
Unsubscribe.
Parameters (json):
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| topic | String | Required | Topic | |
| clientid | String | Required | Client identifier |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
Unsubscribe from a topic
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/unsubscribe" -d '{"topic":"a","qos":1,"clientid":"example"}'
{"code":0}
Message publish in batch
POST /api/v4/mqtt/publish_batch
Publish MQTT messages in batch.
Parameters (json):
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| [0].topic | String | Optional | Topic, at least one of which is specified with topics |
|
| [0].topics | String | Optional | Multiple topics divided by ,, which can be used to publish messages to multiple topics at the same time |
|
| [0].clientid | String | Required | Client identifier | |
| [0].payload | String | Required | Message body | |
| [0].encoding | String | Optional | plain | The encoding method used in the message body, only plain and base64 are supported currently |
| [0].qos | Integer | Optional | 0 | QoS level |
| [0].retain | Boolean | Optional | false | Whether it is a retained message or not |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/publish_batch" -d '[{"topic":"a/b/c","payload":"Hello World","qos":1,"retain":false,"clientid":"example"},{"topic":"a/b/c","payload":"Hello World Again","qos":0,"retain":false,"clientid":"example"}]'
{"code":0}
Topic subscription in batch
POST /api/v4/mqtt/subscribe_batch
Subscribe to MQTT topics in batch.
Parameters (json):
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| [0].topic | String | Optional | Topic, at least one of which is specified with topics |
|
| [0].topics | String | Optional | Multiple topics divided by ,, which can be used to publish messages to multiple topics at the same time |
|
| [0].clientid | String | Required | Client identifier | |
| [0].qos | Integer | Optional | 0 | QoS level |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
Subscribe to the three topics of a,b, and c at one time
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/subscribe_batch" -d '[{"topic":"a","qos":1,"clientid":"example"},{"topic":"b","qos":1,"clientid":"example"},{"topic":"c","qos":1,"clientid":"example"}]'
{"code":0}
POST /api/v4/mqtt/unsubscribe_batch
Unsubscribe in batch.
Parameters (json):
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| [0].topic | String | Required | Topic | |
| [0].clientid | String | Required | Client identifier |
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
Unsubscribe from a,b topics at one time
$ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/mqtt/unsubscribe_batch" -d '[{"topic":"a","qos":1,"clientid":"example"},{"topic":"b","qos":1,"clientid":"example"}]'
{"code":0}
plugins
GET /api/v4/plugins
Returns information of all plugins in the cluster.
Path Parameters: None
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | All routes information |
| data[0].node | String | Node name |
| data[0].plugins | Array | Plugin information, an array of objects, see below |
| data[0].plugins.name | String | Plugin name |
| data[0].plugins.version | String | Plugin version |
| data[0].plugins.description | String | Plugin description |
| data[0].plugins.active | Boolean | Whether the plugin is active |
| data[0].plugins.type | String | Plug-in type, currently includes |
auth、bridge、feature、protocol |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/plugins"
{"data":[{"plugins":[{"version":"develop","type":"auth","name":"emqx_auth_clientid","description":"EMQ X Broker Authentication with ClientId/Password","active":false}, ...],"node":"emqx@127.0.0.1"}],"code":0}
GET /api/v4/nodes/{node}/plugins
Similar with GET /api/v4/plugins, return the plugin information under the specified node
Path Parameters: None
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | All routes information |
| data[0].name | String | Plugin name |
| data[0].version | String | Plugin version |
| data[0].description | String | Plugin description |
| data[0].active | Boolean | Whether the plugin is active |
| data[0].type | String | Plug-n type, currently include |
auth、bridge、feature、protocol |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/plugins"
{"data":[{"version":"develop","type":"auth","name":"emqx_auth_clientid","description":"EMQ X Broker Authentication with ClientId/Password","active":false}, ...],"code":0}
PUT /api/v4/nodes/{node}/plugins/{plugin}/load {#load_plugin}
Load the specified plugin under the specified node.
Parameters: None
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X PUT "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/plugins/emqx_delayed_publish/load"
{"code":0}
PUT /api/v4/nodes/{node}/plugins/{plugin}/unload
Unload the specified plugin under the specified node.
Parameters: None
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X PUT "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/plugins/emqx_delayed_publish/unload"
{"code":0}
PUT /api/v4/nodes/{node}/plugins/{plugin}/reload
Reloads the specified plugin under the specified node.
Parameters: None
Success Response Body (JSON):
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X PUT "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/plugins/emqx_delayed_publish/reload"
{"code":0}
listeners
GET /api/v4/listeners
Returns information about all listeners in the cluster.
Path Parameters: 无
Success Response Body (JSON):**
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | List of listeners for each node |
| data[0].node | String | Node name |
| data[0].listeners | Array of Objects | Listener list |
| data[0].listeners[0].acceptors | Integer | Number of Acceptor process |
| data[0].listeners[0].listen_on | String | Listening port |
| data[0].listeners[0].identifier | String | Identifier |
| data[0].listeners[0].protocol | String | Plugin description |
| data[0].listeners[0].current_conns | Integer | Whether plugin is enabled |
| data[0].listeners[0].max_conns | Integer | Maximum number of allowed connections |
| data[0].listeners[0].shutdown_count | Array of Objects | Reasons and counts for connection shutdown |
Normal shutdown_count*
| Name | Type | Description |
|---|---|---|
| normal | Integer | Number of normally closed connections, only returned when the count is greater than 0 |
| kicked | Integer | Number of manually dropped connections, only returned if the count is greater than 0 |
| discarded | Integer | Number of connections dropped because Clean Session or Clean Start is true |
| takeovered | Integer | Number of connections takeovered because Clean Session or Clean Start is false |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/listeners"
{"data":[{"node":"emqx@127.0.0.1","listeners":[{"shutdown_count":[],"protocol":"mqtt:ssl","max_conns":102400,"listen_on":"8883","identifier":"mqtt:ssl:external","current_conns":1,"acceptors":32},{"shutdown_count":[],"protocol":"mqtt:tcp","max_conns":1024000,"listen_on":"0.0.0.0:1883","identifier":"mqtt:tcp:external","current_conns":1,"acceptors":64},{"shutdown_count":[],"protocol":"mqtt:tcp","max_conns":1024000,"listen_on":"127.0.0.1:11883","identifier":"mqtt:tcp:internal","current_conns":0,"acceptors":4},{"shutdown_count":[],"protocol":"http:dashboard","max_conns":512,"listen_on":"18083","current_conns":0,"acceptors":4},{"shutdown_count":[],"protocol":"http:management","max_conns":512,"listen_on":"8081","current_conns":1,"acceptors":2},{"shutdown_count":[],"protocol":"mqtt:ws:8083","max_conns":102400,"listen_on":"8083","current_conns":0,"acceptors":16},{"shutdown_count":[],"protocol":"mqtt:wss:8084","max_conns":102400,"listen_on":"8084","current_conns":0,"acceptors":16}]}],"code":0}
PUT /api/v4/listeners/{identifier}/restart
Restarts a listener in the cluster
Path Parameters: 无
Success Response Body (JSON):**
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X PUT "http://localhost:8081/api/v4/listeners/mqtt:tcp:external/restart"
{"code":0}
GET /api/v4/nodes/{node}/listeners
Similar with GET /api/v4/listeners, returns the listener information for the specified node.
Success Response Body (JSON):**
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
| data | Array of Objects | List of listeners for each node |
| data[0].acceptors | Integer | Number of Acceptor process |
| data[0].listen_on | String | Listening port |
| data[0].identifier | String | Identifier |
| data[0].protocol | String | Plugin description |
| data[0].current_conns | Integer | Whether the plugin is enabled |
| data[0].max_conns | Integer | Maximum number of allowed connections |
| data[0].shutdown_count | Array of Objects | Reasons and counts for connection shutdown |
Examples:
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/nodes/emqx@127.0.0.1/listeners"
{"data":[{"shutdown_count":[],"protocol":"mqtt:ssl","max_conns":102400,"listen_on":"8883","identifier":"mqtt:ssl:external","current_conns":1,"acceptors":32},{"shutdown_count":[],"protocol":"mqtt:tcp","max_conns":1024000,"listen_on":"0.0.0.0:1883","identifier":"mqtt:tcp:external","current_conns":1,"acceptors":64},{"shutdown_count":[],"protocol":"mqtt:tcp","max_conns":1024000,"listen_on":"127.0.0.1:11883","identifier":"mqtt:tcp:internal","current_conns":0,"acceptors":4},{"shutdown_count":[],"protocol":"http:dashboard","max_conns":512,"listen_on":"18083","current_conns":0,"acceptors":4},{"shutdown_count":[],"protocol":"http:management","max_conns":512,"listen_on":"8081","current_conns":1,"acceptors":2},{"shutdown_count":[],"protocol":"mqtt:ws:8083","max_conns":102400,"listen_on":"8083","current_conns":0,"acceptors":16},{"shutdown_count":[],"protocol":"mqtt:wss:8084","max_conns":102400,"listen_on":"8084","current_conns":0,"acceptors":16}],"code":0}
PUT /api/v4/nodes/{node}/listeners/{identifier}/restart
Restarts a listener in the cluster
Path Parameters: 无
Success Response Body (JSON):**
| Name | Type | Description |
|---|---|---|
| code | Integer | 0 |
Examples:
$ curl -i --basic -u admin:public -X PUT "http://localhost:8081/api/v4/listeners/mqtt:tcp:external/restart"
{"code":0}
