curl --request GET \
--url https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}', 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://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$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://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"id": "419f3be0-2f49-434b-bee4-d8cff9cf7d01",
"organization_id": 12345,
"status": "ready",
"status_message": "The report is ready",
"fields": [
"parcel_id",
"tracking_number",
"shipping_option_code",
"status",
"announced_at",
"delivered_at"
],
"filters": {
"announced_after": "2025-04-01T00:00:00Z",
"announced_before": "2025-04-30T23:59:59Z",
"direction": "outgoing"
},
"url": "https://reporting-service.s3.eu-central-1.amazonaws.com/reports/parcels_v3/2025-05-01/419f3be0-2f49-434b-bee4-d8cff9cf7d01.csv",
"expires_at": "2025-05-01T08:38:10.226217Z",
"updated_at": "2025-05-01T08:24:10.226265Z",
"created_at": "2025-05-01T08:23:10.226265Z"
}{
"errors": [
{
"status": "401",
"code": "authentication_failed",
"title": "Authentication Failed",
"detail": "Unauthorized"
}
]
}{
"errors": [
{
"status": "403",
"code": "forbidden",
"title": "Forbidden",
"detail": "Forbidden"
}
]
}{
"errors": [
{
"status": "404",
"code": "not_found",
"title": "Not Found",
"detail": "Not found"
}
]
}Retrieve a parcels report
Retrieve a parcels report by id, including its current status and download URL when ready.
curl --request GET \
--url https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}', 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://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$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://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.sendcloud.sc/api/v3/reporting/parcels/{report_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"id": "419f3be0-2f49-434b-bee4-d8cff9cf7d01",
"organization_id": 12345,
"status": "ready",
"status_message": "The report is ready",
"fields": [
"parcel_id",
"tracking_number",
"shipping_option_code",
"status",
"announced_at",
"delivered_at"
],
"filters": {
"announced_after": "2025-04-01T00:00:00Z",
"announced_before": "2025-04-30T23:59:59Z",
"direction": "outgoing"
},
"url": "https://reporting-service.s3.eu-central-1.amazonaws.com/reports/parcels_v3/2025-05-01/419f3be0-2f49-434b-bee4-d8cff9cf7d01.csv",
"expires_at": "2025-05-01T08:38:10.226217Z",
"updated_at": "2025-05-01T08:24:10.226265Z",
"created_at": "2025-05-01T08:23:10.226265Z"
}{
"errors": [
{
"status": "401",
"code": "authentication_failed",
"title": "Authentication Failed",
"detail": "Unauthorized"
}
]
}{
"errors": [
{
"status": "403",
"code": "forbidden",
"title": "Forbidden",
"detail": "Forbidden"
}
]
}{
"errors": [
{
"status": "404",
"code": "not_found",
"title": "Not Found",
"detail": "Not found"
}
]
}Authorizations
Basic Authentication using API key and secrets is currently the main authentication mechanism.
Path Parameters
Unique identifier of the report.
"419f3be0-2f49-434b-bee4-d8cff9cf7d01"
Response
OK
Represents a parcels report and its processing state.
Unique identifier of the report.
"419f3be0-2f49-434b-bee4-d8cff9cf7d01"
Identifier of the organization the report belongs to.
x >= 112345
Current processing status of the report.
queued, generating, ready, failed, expired "ready"
Human-readable description of the current status.
"The report is ready"
Columns included in the report.
A column that can be included in a parcels report.
parcel_id, direction, carrier_code, carrier_name, from_address_company_name, contract_id, contract_type, from_address_city, from_address_postal_code, from_address_country_code, from_address_country_name, to_address_city, to_address_postal_code, to_address_country_code, to_address_country_name, order_number, tracking_number, announced_at, shipped_at, first_offer_at, delivered_at, shipping_option_code, total_cost, status, sub_status, integration_id, integration_type, weight, brand_id, brand_name Filters that determine which parcels are included in the report.
Show child attributes
Show child attributes
URL to download the CSV. null until the report status is ready, and again after expiry.
"https://reporting-service.s3.eu-central-1.amazonaws.com/reports/parcels_v3/2025-05-01/419f3be0-2f49-434b-bee4-d8cff9cf7d01.csv"
When the report (and its download URL) will expire. null until the report is ready.
"2025-05-01T08:38:10.226217Z"
When the report was last updated.
"2025-05-01T08:24:10.226265Z"
When the report was created.
"2025-05-01T08:23:10.226265Z"