This module gives HTTP access to prosody’s storage mechanism. It uses normal HTTP verbs and Basic HTTP authentication, so you could call it RESTful if you like buzzwords.


To Fetch data, issue a normal GET request

GET /data[/<host>/<user>]/<store>[/<format>] HTTP/1.1
Authorization: <base64(authzid:password)>


PUT|POST /data[/<host>/<user>]/<store> HTTP/1.1
Content-Type: text/x-lua | application/json


These map to datamanager.method(user, host, store, data), where choice of method and its parameters are explained below.


Verb Meaning datamanager method
GET Just fetch data load() or list_load()
PUT Replace all data in the store store()
POST Append item to the store list_append()

Note: In a GET request, if load() returns nil, list_load() will be tried instead.


Field Description Default
host Which virtual host to access Required. If not set in the path, the domain-part of the authzid is used.
user Which users storage to access Required. If not set in the path, uses the node part of the authzid.
store Which storage to access. Required.
format Which format to serialize to. json and lua are supported. When uploading data, the Content-Type header is used. json
data The actual data to upload in a PUT or POST request. nil

Note: Only admins can change data for users other than themselves.

Example usage

Here follows some example usage using curl.

Get your account details:

curl http://prosody.local:5280/data/accounts -u

Set someones account details:

curl -X PUT http://prosody.local:5280/data/ -u admin@host:r00tp4ssw0rd --header 'Content-Type: application/json' --data-binary '{"password":"changeme"}'

Client library



trunk Doesn’t work (uses is_admin)
0.12 Works?


With the plugin installer in Prosody 0.12 you can use:

sudo prosodyctl install --server= mod_data_access

For earlier versions see the documentation for installing 3rd party modules