Management API - Using the API
This website is currently being updated to match the upcoming version 9 that will be released soon. Please note that some information might not 100% accurate. Thank you for your understanding.
Access to the Management API is provided by the HTTP server of the MailStore Service Provider Edition Management Server which listens on TCP port 8474 by default. All communication is SSL encrypted.
Each request to the Management API must be authenticated by sending username and password following the standards for HTTP basic authentication as defined in RFC 2617.
When a function needs additional data, this data must be send urlencoded. The HTTP header Content-Type: application/x-www-form-urlencoded should be set.
Refer to Function Reference for a full list of available API functions.
Please note: Depending on the scope of the called function, the URL may vary (/api/ or /api/invoke). Please carefully check to which URL you are sending your requests in case of unexpected results.
Executing Regular API Functions
To execute regular Management API functions, send HTTP POST request to the following URL:
https://<mgmt-server>:8474/api/invoke/<function>
Example
HTTP Request
POST /api/invoke/GetEnvironmentInfo HTTP/1.1
Authorization: Basic YWRtaW46UGFzc3cwcmQ=
User-Agent: curl/7.35.0
Host: spe.example.com:8474
Accept: */*
Content-Length: 0
HTTP Response
HTTP/1.1 200 OK
Cache-Control: no-cache,private,no-store,must-revalidate,max-stale=0,post-check=0,pre-check=0
Pragma: no-cache
Content-Length: 798
Content-Type: application/json
Expires: Wed, 25 Jun 2014 13:50:53 GMT
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 26 Jun 2014 13:50:53 GMT
{
"error": null,
"token": null,
"statusVersion": 2,
"statusCode": "succeeded",
"percentProgress": null,
"statusText": null,
"result": {
"version": "9.0.0.9672",
"copyright": "Copyright (c) 2005-2014 MailStore Software GmbH",
"licenseeName": "MailStore Software GmbH",
"licenseeID": 10510,
"serverName": "spe.example.com",
"userName": "admin",
"systemProperties": {
"processors": [
"Intel(R) Xeon(R) CPU E5645 @ 2.40GHz",
"Intel(R) Xeon(R) CPU E5645 @ 2.40GHz",
"Intel(R) Xeon(R) CPU E5645 @ 2.40GHz",
"Intel(R) Xeon(R) CPU E5645 @ 2.40GHz"
],
"totalPhysicalMemory": 12884430848,
"operatingSystem": "Microsoft Windows Server 2012 Standard"
}
},
"logOutput": null
}
Long Running Processes
Some API functions start a long running process that may take several minutes or even hours to complete. To keep track of the progress a unique token is returned upon initial request, which can be used to periodically poll for status updates.
The overall process is as follows:
- Send HTTP POST to https://<mgmt-server>:8474/api/invoke/VerifyStore in order to execute the function.
- Check the server's response for the keys token, statusCode and statusVersion.
- To retrieve status updates, send periodic requests to https://<mgmt-server>:8474/api/get-status with the following parameters:
Name | Description |
---|---|
token | The received unique token for the process. |
lastKnownStatusVersion | Value of statusVersion from last response. |
millisecondsTimeout | Time in milliseconds until the the server stops waiting for a new status update to send. If a new status update is available it will be sent to the client immediately, otherwise the last status is repeated. |
- 4. The process finished when the statusCode is not running.
Example
Initial HTTP Request
POST /api/invoke/VerifyStore HTTP/1.1
User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Host: server.ms-spe.tesst:8470
Accept: */*
Cookie: MSWEB_MGM_AUTH=ZsByPD0aV4gYcGt3DL6elnMSKAaQTyRe%2fqHQCGFkbWlu
X-AntiXsrfToken: BTp4ZWF5n8sDDpI0LG5z5bKYIzakLfzubebQCGFkbWlu
Content-Length: 28
Content-Type: application/x-www-form-urlencoded
instanceID=i20140122-01&id=2
Initial HTTP Response
HTTP/1.1 200 OK
Cache-Control: no-cache,private,no-store,must-revalidate,max-stale=0,post-check=0,pre-check=0
Pragma: no-cache
Content-Length: 359
Content-Type: application/json
Expires: Wed, 22 Jan 2014 16:13:50 GMT
Server: Microsoft-HTTPAPI/2.0
Set-Cookie: MSWEB_MGM_AUTH=wG332pdxKrKEbmAvsc81kOja7QOG7wDvbebQCGFkbWlu;path=/;secure;HttpOnly
Date: Thu, 23 Jan 2014 16:13:49 GMT
{
"error": null,
"token": "sa71c6ef0d880a14eb2220fa87f276710e",
"antiXsrfToken": "Z1aU+nQNasuCl9pvKGTANHKfFuyG7wDvbebQCGFkbWlu",
"statusVersion": 3,
"statusCode": "running",
"percentProgress": 0,
"statusText": null,
"result": null,
"logOutput": "Verifying file group #2...\r\nCreating a list of messages to be verified...\r\n"
}
Periodic HTTP Request of Progress
POST /api/get-status HTTP/1.1
User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Host: server.ms-spe.test:8470
Accept: */*
Cookie: MSWEB_MGM_AUTH=wG332pdxKrKEbmAvsc81kOja7QOG7wDvbebQCGFkbWlu
X-AntiXsrfToken: Z1aU+nQNasuCl9pvKGTANHKfFuyG7wDvbebQCGFkbWlu
Content-Length: 90
Content-Type: application/x-www-form-urlencoded
token=sa71c6ef0d880a14eb2220fa87f276710e&lastKnownStatusVersion=3&millisecondsTimeout=5000
HTTP Response to Periodic Progress Requests
HTTP/1.1 200 OK
Cache-Control: no-cache,private,no-store,must-revalidate,max-stale=0,post-check=0,pre-check=0
Pragma: no-cache
Content-Length: 309
Content-Type: application/json
Expires: Wed, 22 Jan 2014 16:21:55 GMT
Server: Microsoft-HTTPAPI/2.0
Set-Cookie: MSWEB_MGM_AUTH=Fo00yVkaGWgRFyhpf4KPDdDMdLrxM4AQb%2bbQCGFkbWlu;path=/;secure;HttpOnly
Date: Thu, 23 Jan 2014 16:21:55 GMT
{
"error": null,
"token": null,
"antiXsrfToken": "Zrt40mK3S5xIG3HOce688LZ/QCXxM4AQb+bQCGFkbWlu",
"statusVersion": 4,
"statusCode": "running",
"percentProgress": 0,
"statusText": null,
"result": null,
"logOutput": "500047 messages are about to be verified.\r\nVerifying...\r\n"
}
Final HTTP Response
HTTP/1.1 200 OK
Cache-Control: no-cache,private,no-store,must-revalidate,max-stale=0,postcheck=0,pre-check=0
Pragma: no-cache
Content-Length: 242
Content-Type: application/json
Expires: Tue, 29 Oct 2013 16:09:42 GMT
Server: Microsoft-HTTPAPI/2.0
Set-Cookie: MSWEB_MGM_AUTH=ZsByPD0aV4gYcGt3DL6elnMSKAaQTyRe%2fqHQCGFkbWlu;path=/;secure;HttpOnly
Date: Wed, 30 Oct 2013 16:09:41 GMT
{
"error": null,
"token": null,
"antiXsrfToken": "Dg5geOu431l/5k36IXd13FlqLQ0Ki6ElcObQCGFkbWlu"
"statusVersion": 269,
"statusCode": "succeeded",
"percentProgress": null,
"statusText": null,
"result": null,
"logOutput": null
}
Error Handling
Additionally to handling protocol specific issues such as HTTP or TCP errors, developers receive detailed information from the API itself in case the request did not succeed,
In case the request was successfully be processed, the response will contain:
"error": null
Otherwise in the event of a failure the error key will have the following structure
"error": { "message": string, "details": string }
allowing developers to display a meaningful error message and further technical details.