curl --request GET \
--url https://panel.sendcloud.sc/api/v3/dsf/tickets/{ticket_id} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://panel.sendcloud.sc/api/v3/dsf/tickets/{ticket_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/dsf/tickets/{ticket_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/dsf/tickets/{ticket_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/dsf/tickets/{ticket_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/dsf/tickets/{ticket_id}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.sendcloud.sc/api/v3/dsf/tickets/{ticket_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": 42,
"status": "pending",
"stage": "in_progress",
"type": "damaged",
"parcel_id": 98765,
"carrier": "postnl",
"tracking_number": "3SYZXG5051720",
"order_number": "ORD-2026-1234",
"brand_id": 3,
"created_at": "2026-03-15T10:30:00+00:00",
"updated_at": "2026-03-18T14:22:00+00:00",
"requested_actions": [
{
"id": 301,
"data_type": "sales_invoice",
"created_at": "2026-03-16T09:00:00+00:00"
}
],
"resolution": null
}{
"errors": [
{
"code": "bad_request",
"detail": "Ticket not found",
"title": "Bad Request",
"status": 404
}
]
}{
"errors": [
{
"code": "hit_rate_limit",
"detail": "Rate limit exceeded: 30 per 1 minute",
"title": "Rate limit exceeded",
"status": 429
}
]
}Retrieve a support ticket
Retrieve a single support ticket by its ID. Returns 404 if the ticket does not exist or does not belong to your organization.
curl --request GET \
--url https://panel.sendcloud.sc/api/v3/dsf/tickets/{ticket_id} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://panel.sendcloud.sc/api/v3/dsf/tickets/{ticket_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/dsf/tickets/{ticket_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/dsf/tickets/{ticket_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/dsf/tickets/{ticket_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/dsf/tickets/{ticket_id}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.sendcloud.sc/api/v3/dsf/tickets/{ticket_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": 42,
"status": "pending",
"stage": "in_progress",
"type": "damaged",
"parcel_id": 98765,
"carrier": "postnl",
"tracking_number": "3SYZXG5051720",
"order_number": "ORD-2026-1234",
"brand_id": 3,
"created_at": "2026-03-15T10:30:00+00:00",
"updated_at": "2026-03-18T14:22:00+00:00",
"requested_actions": [
{
"id": 301,
"data_type": "sales_invoice",
"created_at": "2026-03-16T09:00:00+00:00"
}
],
"resolution": null
}{
"errors": [
{
"code": "bad_request",
"detail": "Ticket not found",
"title": "Bad Request",
"status": 404
}
]
}{
"errors": [
{
"code": "hit_rate_limit",
"detail": "Rate limit exceeded: 30 per 1 minute",
"title": "Rate limit exceeded",
"status": 429
}
]
}Authorizations
Basic Authentication using API key and secrets is currently the main authentication mechanism.
Path Parameters
The ID of the ticket to retrieve.
42
Response
OK
A support ticket with its current status, parcel information, any outstanding data requests, and resolution details.
Unique ticket ID.
Current ticket status.
action_required, carrier_reminder_sent, carrier_update_received, claim_paid, closed, communicated_to_carrier, customer_documents_requested, customer_reminder_sent, delayed, delivered_scan_received, delivery_confirmation_rejected, delivery_confirmation_requested, documents_forwarded_to_carrier, escalated, escalated_ava, hold, manually_solved, new_scan_received, pending, processing, smart_refund_available, smart_refund_update, solved, solved_by_automation, unknown, waiting_for_carrier, waiting_for_customer, waiting_for_scan High-level stage of the ticket lifecycle.
in_progress, action_required, manually_solved_stage, solved_by_automation_stage, unknown Ticket creation timestamp (ISO 8601).
Outstanding data requests from the carrier.
Show child attributes
Show child attributes
Ticket category (e.g. damaged, lost, delayed).
address_change, damaged, delayed, delivered_not_received, late_delivery, lost, unjust_return, other_shipping, null Sendcloud parcel ID.
Carrier code (e.g. postnl, dpd, ups).
Tracking number of the parcel associated with the ticket.
Order number associated with the parcel.
Brand ID associated with the parcel.
Last update timestamp (ISO 8601).
Resolution details, present only when the ticket is resolved.
Show child attributes
Show child attributes