Apart from this help page, all URIs will serve only resources
of type application/json
, and will require HTTP basic
authentication (using the standard RabbitMQ user database). The
default user is guest/guest.
Many URIs require the name of a virtual host as part of the
path, since names only uniquely identify objects within a virtual
host. As the default virtual host is called "/
", this
will need to be encoded as "%2F
".
PUTing a resource creates it. The JSON object you upload must have certain mandatory keys (documented below) and may have optional keys. Other keys are ignored. Missing mandatory keys constitute an error.
Since bindings do not have names or IDs in AMQP we synthesise one based on all its properties. Since predicting this name is hard in the general case, you can also create bindings by POSTing to a factory URI. See the example below.
Many URIs return lists. Such URIs can have the query string
parameters sort
and sort_reverse
added. sort
allows you to select a primary field to
sort by, and sort_reverse
will reverse the sort order
if set to true
. The sort
parameter can
contain subfields separated by dots. This allows you to sort by a
nested component of the listed items; it does not allow you to
sort by more than one field. See the example below.
You can also restrict what information is returned per item
with the columns
parameter. This is a comma-separated
list of subfields separated by dots. See the example below.
Most of the GET queries return many fields per object. See the separate stats documentation.
A few quick examples for Windows and Unix, using the command line
tool curl
:
:: Windows C:\> curl -i -u guest:guest http://localhost:15672/api/vhosts # Unix $ curl -i -u guest:guest http://localhost:15672/api/vhosts HTTP/1.1 200 OK Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Mon, 16 Sep 2013 12:00:02 GMT Content-Type: application/json Content-Length: 30 [{"name":"/","tracing":false}]
:: Windows C:\> curl -i -u guest:guest "http://localhost:15672/api/channels?sort=message_stats.publish_details.rate&sort_reverse=true&columns=name,message_stats.publish_details.rate,message_stats.deliver_get_details.rate" # Unix $ curl -i -u guest:guest 'http://localhost:15672/api/channels?sort=message_stats.publish_details.rate&sort_reverse=true&columns=name,message_stats.publish_details.rate,message_stats.deliver_get_details.rate' HTTP/1.1 200 OK Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Mon, 16 Sep 2013 12:01:17 GMT Content-Type: application/json Content-Length: 219 Cache-Control: no-cache [{"message_stats":{"publish_details":{"rate" ... (remainder elided)
:: Windows C:\> curl -i -u guest:guest -H "content-type:application/json" ^ -XPUT http://localhost:15672/api/vhosts/foo # Unix $ curl -i -u guest:guest -H "content-type:application/json" \ -XPUT http://localhost:15672/api/vhosts/foo HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Mon, 16 Sep 2013 12:03:00 GMT Content-Type: application/json Content-Length: 0
Note: you must specify application/json
as the
mime type.
Note: the name of the object is not needed in the JSON object uploaded, since it is in the URI. As a virtual host has no properties apart from its name, this means you do not need to specify a body at all!
:: Windows C:\> curl -i -u guest:guest -H "content-type:application/json" ^ -XPUT -d"{""type"":""direct"",""durable"":true}" ^ http://localhost:15672/api/exchanges/%2F/my-new-exchange # Unix $ curl -i -u guest:guest -H "content-type:application/json" \ -XPUT -d'{"type":"direct","durable":true}' \ http://localhost:15672/api/exchanges/%2F/my-new-exchange HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Mon, 16 Sep 2013 12:04:00 GMT Content-Type: application/json Content-Length: 0
Note: we never return a body in response to a PUT or DELETE, unless it fails.
:: Windows C:\> curl -i -u guest:guest -H "content-type:application/json" ^ -XDELETE http://localhost:15672/api/exchanges/%2F/my-new-exchange # Unix $ curl -i -u guest:guest -H "content-type:application/json" \ -XDELETE http://localhost:15672/api/exchanges/%2F/my-new-exchange HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Mon, 16 Sep 2013 12:05:30 GMT Content-Type: application/json Content-Length: 0
GET | PUT | DELETE | POST | Path | Description |
---|---|---|---|---|---|
X | /api/overview | Various random bits of information that describe the whole system. | |||
X | X | /api/cluster-name | Name identifying this RabbitMQ cluster. | ||
X | /api/nodes | A list of nodes in the RabbitMQ cluster. | |||
X | /api/nodes/name | An individual node in the RabbitMQ cluster. Add "?memory=true" to get memory statistics, and "?binary=true" to get a breakdown of binary memory use (may be expensive if there are many small binaries in the system). | |||
X | /api/extensions | A list of extensions to the management plugin. | |||
X | X | /api/definitions /api/all-configuration (deprecated) |
The server definitions - exchanges, queues, bindings, users,
virtual hosts, permissions, topic permissions, and parameters. Everything apart from
messages. POST to upload an existing set of definitions. Note
that:
multipart/form-data as
well as application/json ) in which case the
definitions should be uploaded as a form field named
"file".
|
||
X | X | /api/definitions/vhost |
The server definitions for a given virtual host -
exchanges, queues, bindings and policies.
POST to upload an existing set of definitions. Note that:
multipart/form-data as
well as application/json ) in which case the
definitions should be uploaded as a form field named
"file".
|
||
X | /api/connections | A list of all open connections. | |||
X | /api/vhosts/vhost/connections | A list of all open connections in a specific vhost. | |||
X | X | /api/connections/name | An individual connection. DELETEing it will close the connection. Optionally set the "X-Reason" header when DELETEing to provide a reason. | ||
X | /api/connections/name/channels | List of all channels for a given connection. | |||
X | /api/channels | A list of all open channels. | |||
X | /api/vhosts/vhost/channels | A list of all open channels in a specific vhost. | |||
X | /api/channels/channel | Details about an individual channel. | |||
X | /api/consumers | A list of all consumers. | |||
X | /api/consumers/vhost | A list of all consumers in a given virtual host. | |||
X | /api/exchanges | A list of all exchanges. | |||
X | /api/exchanges/vhost | A list of all exchanges in a given virtual host. | |||
X | X | X | /api/exchanges/vhost/name |
An individual exchange. To PUT an exchange, you will need a body looking something like this:
{"type":"direct","auto_delete":false,"durable":true,"internal":false,"arguments":{}}The type key is mandatory; other keys are optional.
When DELETEing an exchange you can add the query string
parameter |
|
X | /api/exchanges/vhost/name/bindings/source | A list of all bindings in which a given exchange is the source. | |||
X | /api/exchanges/vhost/name/bindings/destination | A list of all bindings in which a given exchange is the destination. | |||
X | /api/exchanges/vhost/name/publish |
Publish a message to a given exchange. You will need a body
looking something like:
{"properties":{},"routing_key":"my key","payload":"my body","payload_encoding":"string"}All keys are mandatory. The payload_encoding
key should be either "string" (in which case the payload
will be taken to be the UTF-8 encoding of the payload field)
or "base64" (in which case the payload field is taken to be
base64 encoded).If the message is published successfully, the response will look like: {"routed": true} routed will be true if the message was sent to
at least one queue.
Please note that the HTTP API is not ideal for high performance publishing; the need to create a new TCP connection for each message published can limit message throughput compared to AMQP or other protocols using long-lived connections. |
|||
X | /api/queues | A list of all queues. | |||
X | /api/queues/vhost | A list of all queues in a given virtual host. | |||
X | X | X | /api/queues/vhost/name |
An individual queue. To PUT a queue, you will need a body looking something like this:
{"auto_delete":false,"durable":true,"arguments":{},"node":"rabbit@smacmullen"}All keys are optional.
When DELETEing a queue you can add the query string
parameters |
|
X | /api/queues/vhost/name/bindings | A list of all bindings on a given queue. | |||
X | /api/queues/vhost/name/contents | Contents of a queue. DELETE to purge. Note you can't GET this. | |||
X | /api/queues/vhost/name/actions |
Actions that can be taken on a queue. POST a body like:
{"action":"sync"}Currently the actions which are supported are sync and cancel_sync .
|
|||
X | /api/queues/vhost/name/get |
Get messages from a queue. (This is not an HTTP GET as it
will alter the state of the queue.) You should post a body looking like:
{"count":5,"ackmode":"ack_requeue_true","encoding":"auto","truncate":50000}
Please note that the get path in the HTTP API is intended for diagnostics etc - it does not implement reliable delivery and so should be treated as a sysadmin's tool rather than a general API for messaging. |
|||
X | /api/bindings | A list of all bindings. | |||
X | /api/bindings/vhost | A list of all bindings in a given virtual host. | |||
X | X | /api/bindings/vhost/e/exchange/q/queue |
A list of all bindings between an exchange and a queue. Remember, an exchange and a queue can be bound together many times!
To create a new binding, POST to this
URI. Request body should be a JSON object optionally containing
two fields, {"routing_key":"my_routing_key", "arguments":{"x-arg": "value"}}All keys are optional. The response will contain a Location header
telling you the URI of your new binding.
|
||
X | X | /api/bindings/vhost/e/exchange/q/queue/props | An individual binding between an exchange and a queue. The props part of the URI is a "name" for the binding composed of its routing key and a hash of its arguments. props is the field named "properties_key" from a bindings listing response. | ||
X | X | /api/bindings/vhost/e/source/e/destination |
A list of all bindings between two exchanges, similar to the list of all bindings between an exchange and a queue, above.
To create a new binding, POST to this
URI. Request body should be a JSON object optionally containing
two fields, {"routing_key":"my_routing_key", "arguments":{"x-arg": "value"}}All keys are optional. The response will contain a Location header
telling you the URI of your new binding.
|
||
X | X | /api/bindings/vhost/e/source/e/destination/props | An individual binding between two exchanges. Similar to the individual binding between an exchange and a queue, above. | ||
X | /api/vhosts | A list of all vhosts. | |||
X | X | X | /api/vhosts/name | An individual virtual host. As a virtual host usually only
has a name, you do not need an HTTP body when PUTing one of
these. To enable / disable tracing, provide a body looking like:
{"tracing":true} |
|
X | /api/vhosts/name/permissions | A list of all permissions for a given virtual host. | |||
X | /api/vhosts/name/topic-permissions | A list of all topic permissions for a given virtual host. | |||
X | /api/vhosts/name/start/node | Starts virtual host name on node node. | |||
X | /api/users/ | A list of all users. | |||
X | /api/users/without-permissions | A list of users that do not have access to any virtual host. | |||
X | /api/users/bulk-delete | Bulk deletes a list of users. Request body must contain the list:
{"users" : ["user1", "user2", "user3"]} |
|||
X | X | X | /api/users/name | An individual user. To PUT a user, you will need a body looking something like this:
{"password":"secret","tags":"administrator"}or: {"password_hash":"2lmoth8l4H0DViLaK9Fxi6l9ds8=", "tags":"administrator"}The tags key is mandatory. Either
password or password_hash
must be set. Setting password_hash to "" will ensure the
user cannot use a password to log in. tags is a
comma-separated list of tags for the user. Currently recognised tags
are administrator , monitoring and management .
password_hash must be generated using the algorithm described
here.
|
|
X | /api/users/user/permissions | A list of all permissions for a given user. | |||
X | /api/users/user/topic-permissions | A list of all topic permissions for a given user. | |||
X | /api/whoami | Details of the currently authenticated user. | |||
X | /api/permissions | A list of all permissions for all users. | |||
X | X | X | /api/permissions/vhost/user | An individual permission of a user and virtual host. To PUT a permission, you will need a body looking something like this:
{"configure":".*","write":".*","read":".*"}All keys are mandatory. |
|
X | /api/topic-permissions | A list of all topic permissions for all users. | |||
X | X | X | /api/topic-permissions/vhost/user | Topic permissions for a user and virtual host. To PUT a topic permission, you will need a body looking something like this:
{"exchange":"amq.topic","write":"^a","read":".*"}All keys are mandatory. |
|
X | /api/parameters | A list of all vhost-scoped parameters. | |||
X | /api/parameters/component | A list of all vhost-scoped parameters for a given component. | |||
X | /api/parameters/component/vhost | A list of all vhost-scoped parameters for a given component and virtual host. | |||
X | X | X | /api/parameters/component/vhost/name | An individual vhost-scoped parameter. To PUT a parameter, you will need a body looking something like this:
{"vhost": "/","component":"federation","name":"local_username","value":"guest"} |
|
X | /api/global-parameters | A list of all global parameters. | |||
X | X | X | /api/global-parameters/name | An individual global parameter. To PUT a parameter, you will need a body looking something like this:
{"name":"user_vhost_mapping","value":{"guest":"/","rabbit":"warren"}} |
|
X | /api/policies | A list of all policies. | |||
X | /api/policies/vhost | A list of all policies in a given virtual host. | |||
X | X | X | /api/policies/vhost/name |
An individual policy. To PUT a policy, you will need a body looking something like this:
{"pattern":"^amq.", "definition": {"federation-upstream-set":"all"}, "priority":0, "apply-to": "all"} pattern and definition are mandatory, priority and apply-to are optional.
|
|
X | /api/operator-policies | A list of all operator policiy overrides. | |||
X | /api/operator-policies/vhost | A list of all operator policiy overrides in a given virtual host. | |||
X | X | X | /api/operator-policies/vhost/name |
An individual operator policy. To PUT a policy, you will need a body looking something like this:
{"pattern":"^amq.", "definition": {"expires":100}, "priority":0, "apply-to": "queues"} pattern and definition are mandatory, priority and apply-to are optional.
|
|
X | /api/aliveness-test/vhost |
Declares a test queue, then publishes and consumes a
message. Intended for use by monitoring tools. If everything
is working correctly, will return HTTP status 200 with
body: {"status":"ok"}Note: the test queue will not be deleted (to to prevent queue churn if this is repeatedly pinged). |
|||
X | /api/healthchecks/node |
Runs basic healthchecks in the current node. Checks that the rabbit
application is running, channels and queues can be listed successfully, and
that no alarms are in effect. If everything is working correctly, will
return HTTP status 200 with body: {"status":"ok"}If something fails, will return HTTP status 200 with the body of {"status":"failed","reason":"string"} |
|||
X | /api/healthchecks/node/node |
Runs basic healthchecks in the given node. Checks that the rabbit
application is running, list_channels and list_queues return, and
that no alarms are raised. If everything is working correctly, will
return HTTP status 200 with body: {"status":"ok"}If something fails, will return HTTP status 200 with the body of {"status":"failed","reason":"string"} |
|||
X | /api/vhost-limits | Lists per-vhost limits for all vhosts. | |||
X | /api/vhost-limits/vhost | Lists per-vhost limits for specific vhost. | |||
X | X | /api/vhost-limits/vhost/name |
Set or delete per-vost limit for vhost with name .
Limits are set using a JSON document in the body:
{"max-connections": 100, "max-queues": 200} |