curl --request GET \
--url https://mm-api.merchantspring.io/clientReports \
--header 'x-api-key: <api-key>'import requests
url = "https://mm-api.merchantspring.io/clientReports"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://mm-api.merchantspring.io/clientReports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mm-api.merchantspring.io/clientReports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mm-api.merchantspring.io/clientReports"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://mm-api.merchantspring.io/clientReports")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://mm-api.merchantspring.io/clientReports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"pagination": {
"pageIndex": 0,
"pageSize": 10,
"count": 1
},
"data": [
{
"reportId": "6a72ba589131de9029111111",
"reportName": "Report Demo",
"reportType": "SINGLE",
"channels": [
{
"channelId": "1",
"channelName": "Seller Demo (USA)",
"merchantId": "XXXUS @ ATVPDKIKX0DER",
"marketplaceType": "amazon",
"marketplaceSubtype": "amazon",
"marketplaceCountry": "USA"
}
],
"recipients": [
"demo@merchantspring.com.au"
],
"selectedTags": null,
"reportingPeriod": {
"period": "LAST12",
"fromDate": "2025-08-01T07:00:00.000Z",
"toDate": "2026-08-01T06:59:59.000Z",
"comparisonPeriod": "THISYEAR",
"priorFromDate": "2024-08-01T07:00:00.000Z",
"priorToDate": "2025-08-01T06:59:59.000Z",
"timezone": "Australia/Sydney",
"interval": "MONTH"
},
"schedule": {
"frequency": "m",
"reportingDelay": 4,
"reportDay": "5th",
"reportHour": 6
},
"isSent": true,
"isScheduled": true,
"reportUrl": "https://merchantspring.io/report?id=6a72ba589131de9029111111",
"createdAt": "2026-08-05T04:21:44.503Z",
"updatedAt": null
}
]
}List all sent and scheduled client reports
Retrieve a paginated list of client-deliverable reports that have been sent and/or are currently scheduled, each annotated with its sent/scheduled status and a link to view it. Saved report configurations that have never been sent or scheduled are excluded. Visibility is scoped by the caller’s role: administrators and owners see every user’s reports in the organisation, other roles see only their own. Sorted by createdAt descending unless sortKey/sortOrder are given. Requires the reportsOn entitlement on the API key’s associated account.
curl --request GET \
--url https://mm-api.merchantspring.io/clientReports \
--header 'x-api-key: <api-key>'import requests
url = "https://mm-api.merchantspring.io/clientReports"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://mm-api.merchantspring.io/clientReports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mm-api.merchantspring.io/clientReports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mm-api.merchantspring.io/clientReports"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://mm-api.merchantspring.io/clientReports")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://mm-api.merchantspring.io/clientReports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"pagination": {
"pageIndex": 0,
"pageSize": 10,
"count": 1
},
"data": [
{
"reportId": "6a72ba589131de9029111111",
"reportName": "Report Demo",
"reportType": "SINGLE",
"channels": [
{
"channelId": "1",
"channelName": "Seller Demo (USA)",
"merchantId": "XXXUS @ ATVPDKIKX0DER",
"marketplaceType": "amazon",
"marketplaceSubtype": "amazon",
"marketplaceCountry": "USA"
}
],
"recipients": [
"demo@merchantspring.com.au"
],
"selectedTags": null,
"reportingPeriod": {
"period": "LAST12",
"fromDate": "2025-08-01T07:00:00.000Z",
"toDate": "2026-08-01T06:59:59.000Z",
"comparisonPeriod": "THISYEAR",
"priorFromDate": "2024-08-01T07:00:00.000Z",
"priorToDate": "2025-08-01T06:59:59.000Z",
"timezone": "Australia/Sydney",
"interval": "MONTH"
},
"schedule": {
"frequency": "m",
"reportingDelay": 4,
"reportDay": "5th",
"reportHour": 6
},
"isSent": true,
"isScheduled": true,
"reportUrl": "https://merchantspring.io/report?id=6a72ba589131de9029111111",
"createdAt": "2026-08-05T04:21:44.503Z",
"updatedAt": null
}
]
}Authorizations
Query Parameters
Zero-based page index (default 0). A page beyond the last one returns 200 with an empty data array, not an error.
x >= 0Number of results per page, max 100 (default 10).
1 <= x <= 100Response column to sort by (default createdAt).
createdAt, reportName Sort direction (default desc).
asc, desc Filter by report name (partial match)
Filter to reports configured for this store/channel. Not applicable for multi-channel reports, which are grouped by tag rather than a fixed set of channels.
Filter to reports configured for this merchant ID
Only show reports that are scheduled to, or have been sent to, this email address.
Filter to reports that have (or have not) ever been sent. Can be combined with isScheduled: isSent=true&isScheduled=true - sent and still scheduled; isSent=true&isScheduled=false - sent but no longer scheduled; isSent=false&isScheduled=true - scheduled but never sent; isSent=false&isScheduled=false - always empty.
Filter to reports that are (or are not) currently scheduled. Can be combined with isSent: isSent=true&isScheduled=true - sent and still scheduled; isSent=true&isScheduled=false - sent but no longer scheduled; isSent=false&isScheduled=true - scheduled but never sent; isSent=false&isScheduled=false - always empty.
Start of date range, as Unix epoch seconds (not milliseconds). Filters on when the report record was created , not the date range the report's own data covers (see reportingPeriod in the response). Defaults to 30 days ago.
End of date range, as Unix epoch seconds (not milliseconds). Filters on when the report record was created , not the date range the report's own data covers (see reportingPeriod in the response). Defaults to now. The range must not exceed 6 months; passing milliseconds instead of seconds is a common cause of an unexpected "Date range must not exceed 6 months" error.
Was this page helpful?