Fulfillments
Fulfillment orders, fulfillments, shipping labels and tracking. Every example sets SOOQUNA_TOKEN from the environment; see authentication. Responses are from a test store, cut to two items per list.
| Endpoint | Method | Path |
|---|---|---|
| Fulfil items of an order | POST | /orders/{id}/fulfillments |
| Update a shipment’s tracking or status | PATCH | /orders/{id}/fulfillments/{fulfillment_id} |
| Cancel a fulfillment | POST | /orders/{id}/fulfillments/{fulfillment_id}/cancel |
| List an order’s shipments | GET | /orders/{id}/shipments |
| Put fulfilment on hold | POST | /orders/{id}/fulfillment-orders/{fo_id}/hold |
| Release a fulfilment hold | POST | /orders/{id}/fulfillment-orders/{fo_id}/release-hold |
| Mark items ready for pickup | POST | /orders/{id}/fulfillment-orders/{fo_id}/ready-for-pickup |
| Get courier quotes for a label | POST | /orders/{id}/shipping-labels/quotes |
| Buy a shipping label | POST | /orders/{id}/shipping-labels |
| Refresh a shipment’s tracking | POST | /shipments/{id}/track |
| Cancel a courier shipment | POST | /shipments/{id}/cancel |
Fulfil items of an order
Section titled “Fulfil items of an order”POST /orders/{id}/fulfillments · Scope: write_fulfillments · Needs an Idempotency-Key header
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "lines": [{"line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1}], "tracking_company": "Aramex", "tracking_number": "47012233441", "notify_customer": true}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Idempotency-Key": crypto.randomUUID(), "Content-Type": "application/json", }, body: JSON.stringify({ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "lines": [{"line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1}], "tracking_company": "Aramex", "tracking_number": "47012233441", "notify_customer": true }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import os, uuidimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], "Idempotency-Key": str(uuid.uuid4()), }, json={ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "lines": [ { "line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1, }, ], "tracking_company": "Aramex", "tracking_number": "47012233441", "notify_customer": True, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Idempotency-Key: ' . bin2hex(random_bytes(16)), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'fulfillment_order_id' => '0193a1b2-c3d4-7e5f-8a6b-000000000036', 'lines' => [ [ 'line_id' => '0193a1b2-c3d4-7e5f-8a6b-000000000037', 'quantity' => 1, ], ], 'tracking_company' => 'Aramex', 'tracking_number' => '47012233441', 'notify_customer' => true, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings"
"github.com/google/uuid")
func main() { body := `{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "lines": [{"line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1}], "tracking_company": "Aramex", "tracking_number": "47012233441", "notify_customer": true}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Idempotency-Key", uuid.NewString()) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());req.Content = new StringContent("""{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "lines": [{"line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1}], "tracking_company": "Aramex", "tracking_number": "47012233441", "notify_customer": true}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 201
{ "attributes": {}, "billing_address": null, "buyer_accepts_marketing": false, "cancel_reason": "", "cancelled_at": null, "checkout_id": null, "closed_at": null, "cod_status": "", "created_at": "2026-10-18T09:30:00Z", "currency": "QAR", "customer": { "id": "0193a1b2-c3d4-7e5f-8a6b-000000000007", "name": "Noora Al-Kuwari", "orders_count": 1, "phone": "+97455123456" }, "delivery_method": "shipping", "delivery_title": "Doha delivery", "discount_applications": [], "discount_codes": [], "draft_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000013", "financial_status": "paid", "fulfillment_orders": [ { "delivery_method": "shipping", "hold_reason": "", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "lines": [ { "line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1, "remaining": 0 } ], "location": { "id": "0193a1b2-c3d4-7e5f-8a6b-000000000023", "name": "West Bay shop" }, "status": "closed" } ], "fulfillment_status": "fulfilled", "fulfillments": [ { "created_at": "2026-10-18T09:30:00Z", "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000050", "lines": [ { "line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1 } ], "location": { "id": "0193a1b2-c3d4-7e5f-8a6b-000000000023", "name": "West Bay shop" }, "name": "#1001-F1", "shipment_status": "", "status": "success", "tracking_company": "Aramex", "tracking_number": "47012233441", "tracking_url": "https://www.aramex.com/track/results?ShipmentNumber=47012233441" } ], "gift": false, "gift_message": "", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000035", "item_count": 1, "lines": [ { "discount_allocations": [{"amount": 4500, "class": "order", "title": "Loyal customer"}], "fulfilled_quantity": 1, "gift_card": false, "id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "image": "", "location_id": "0193a1b2-c3d4-7e5f-8a6b-000000000023", "original_price": "520.00", "price": "450.00", "product_id": "0193a1b2-c3d4-7e5f-8a6b-000000000005", "properties": {}, "quantity": 1, "refunded_quantity": 0, "requires_shipping": true, "sku": "ABY-LIN-M", "tax": "0.00", "tax_lines": [], "taxable": true, "title": "Embroidered linen abaya", "total": "405.00", "total_discount": "45.00", "variant_id": "0193a1b2-c3d4-7e5f-8a6b-000000000014", "variant_title": "M", "vendor": "Layla", "weight_grams": 0 } ], "locale": "en", "name": "#1001", "net_payment": "420.00", "note": "Call before delivery", "number": 1001, "order_discount": "45.00", "payment_fee": "0.00", "payment_method": "manual", "phone": "+97455123456", "processed_at": "2026-10-18T09:30:00Z", "refunds": [], "sample": false, "shipping_address": null, "shipping_line": { "final": 1500, "kind": "shipping", "price": 1500, "title": "Doha delivery" }, "source": "draft", "state": "open", "status_url": "https://shop.sooquna.test/orders/01a14f9f314a7de682d35010a325f162", "subtotal": "450.00", "tags": ["phone", "priority"], "tax_lines": [], "taxes_included": true, "tip": "0.00", "token": "01a14f9f314a7de682d35010a325f162", "total": "420.00", "total_discounts": "45.00", "total_outstanding": "0.00", "total_received": "420.00", "total_refunded": "0.00", "total_shipping": "15.00", "total_tax": "0.00", "transactions": [ { "actor": "Docs", "amount": "420.00", "created_at": "2026-10-18T09:30:00Z", "error_code": "", "gateway_ref": "", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000051", "kind": "sale", "method": "manual", "provider": "manual", "status": "success", "test": false } ], "updated_at": "2026-10-18T09:30:00Z", "version": 5}Update a shipment’s tracking or status
Section titled “Update a shipment’s tracking or status”PATCH /orders/{id}/fulfillments/{fulfillment_id} · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
fulfillment_id |
path | The fulfillment ID. |
curl -X PATCH "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "shipment_status": "in_transit", "tracking_number": "47012233442", "notify_customer": false}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050", { method: "PATCH", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "shipment_status": "in_transit", "tracking_number": "47012233442", "notify_customer": false }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.patch( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "shipment_status": "in_transit", "tracking_number": "47012233442", "notify_customer": False, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'shipment_status' => 'in_transit', 'tracking_number' => '47012233442', 'notify_customer' => false, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "shipment_status": "in_transit", "tracking_number": "47012233442", "notify_customer": false}` req, err := http.NewRequest("PATCH", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Patch, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "shipment_status": "in_transit", "tracking_number": "47012233442", "notify_customer": false}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "attributes": {}, "billing_address": null, "buyer_accepts_marketing": false, "cancel_reason": "", "cancelled_at": null, "checkout_id": null, "closed_at": null, "cod_status": "", "created_at": "2026-10-18T09:30:00Z", "currency": "QAR", "customer": { "id": "0193a1b2-c3d4-7e5f-8a6b-000000000007", "name": "Noora Al-Kuwari", "orders_count": 1, "phone": "+97455123456" }, "delivery_method": "shipping", "delivery_title": "Doha delivery", "discount_applications": [], "discount_codes": [], "draft_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000013", "financial_status": "paid", "fulfillment_orders": [ { "delivery_method": "shipping", "hold_reason": "", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "lines": [ { "line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1, "remaining": 0 } ], "location": { "id": "0193a1b2-c3d4-7e5f-8a6b-000000000023", "name": "West Bay shop" }, "status": "closed" } ], "fulfillment_status": "fulfilled", "fulfillments": [ { "created_at": "2026-10-18T09:30:00Z", "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000050", "lines": [ { "line_id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "quantity": 1 } ], "location": { "id": "0193a1b2-c3d4-7e5f-8a6b-000000000023", "name": "West Bay shop" }, "name": "#1001-F1", "shipment_status": "in_transit", "status": "success", "tracking_company": "Aramex", "tracking_number": "47012233442", "tracking_url": "https://www.aramex.com/track/results?ShipmentNumber=47012233442" } ], "gift": false, "gift_message": "", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000035", "item_count": 1, "lines": [ { "discount_allocations": [{"amount": 4500, "class": "order", "title": "Loyal customer"}], "fulfilled_quantity": 1, "gift_card": false, "id": "0193a1b2-c3d4-7e5f-8a6b-000000000037", "image": "", "location_id": "0193a1b2-c3d4-7e5f-8a6b-000000000023", "original_price": "520.00", "price": "450.00", "product_id": "0193a1b2-c3d4-7e5f-8a6b-000000000005", "properties": {}, "quantity": 1, "refunded_quantity": 0, "requires_shipping": true, "sku": "ABY-LIN-M", "tax": "0.00", "tax_lines": [], "taxable": true, "title": "Embroidered linen abaya", "total": "405.00", "total_discount": "45.00", "variant_id": "0193a1b2-c3d4-7e5f-8a6b-000000000014", "variant_title": "M", "vendor": "Layla", "weight_grams": 0 } ], "locale": "en", "name": "#1001", "net_payment": "420.00", "note": "Call before delivery", "number": 1001, "order_discount": "45.00", "payment_fee": "0.00", "payment_method": "manual", "phone": "+97455123456", "processed_at": "2026-10-18T09:30:00Z", "refunds": [], "sample": false, "shipping_address": null, "shipping_line": { "final": 1500, "kind": "shipping", "price": 1500, "title": "Doha delivery" }, "source": "draft", "state": "open", "status_url": "https://shop.sooquna.test/orders/01a14f9f314a7de682d35010a325f162", "subtotal": "450.00", "tags": ["phone", "priority"], "tax_lines": [], "taxes_included": true, "tip": "0.00", "token": "01a14f9f314a7de682d35010a325f162", "total": "420.00", "total_discounts": "45.00", "total_outstanding": "0.00", "total_received": "420.00", "total_refunded": "0.00", "total_shipping": "15.00", "total_tax": "0.00", "transactions": [ { "actor": "Docs", "amount": "420.00", "created_at": "2026-10-18T09:30:00Z", "error_code": "", "gateway_ref": "", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000051", "kind": "sale", "method": "manual", "provider": "manual", "status": "success", "test": false } ], "updated_at": "2026-10-18T09:30:00Z", "version": 5}Cancel a fulfillment
Section titled “Cancel a fulfillment”POST /orders/{id}/fulfillments/{fulfillment_id}/cancel · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
fulfillment_id |
path | The fulfillment ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050/cancel" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050/cancel", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050/cancel", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050/cancel');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050/cancel", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillments/0193a1b2-c3d4-7e5f-8a6b-000000000050/cancel");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());List an order’s shipments
Section titled “List an order’s shipments”GET /orders/{id}/shipments · Scope: read_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X GET "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipments" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipments", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipments", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipments');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipments", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipments");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{"data": []}Put fulfilment on hold
Section titled “Put fulfilment on hold”POST /orders/{id}/fulfillment-orders/{fo_id}/hold · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
fo_id |
path | The fo ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/hold" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"reason": "awaiting_payment", "note": "Waiting for the bank transfer"}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/hold", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"reason": "awaiting_payment", "note": "Waiting for the bank transfer"}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/hold", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "reason": "awaiting_payment", "note": "Waiting for the bank transfer", },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/hold');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'reason' => 'awaiting_payment', 'note' => 'Waiting for the bank transfer', ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"reason": "awaiting_payment", "note": "Waiting for the bank transfer"}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/hold", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/hold");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"reason": "awaiting_payment", "note": "Waiting for the bank transfer"}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Release a fulfilment hold
Section titled “Release a fulfilment hold”POST /orders/{id}/fulfillment-orders/{fo_id}/release-hold · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
fo_id |
path | The fo ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/release-hold" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/release-hold", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/release-hold", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/release-hold');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/release-hold", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/release-hold");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Mark items ready for pickup
Section titled “Mark items ready for pickup”POST /orders/{id}/fulfillment-orders/{fo_id}/ready-for-pickup · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
fo_id |
path | The fo ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/ready-for-pickup" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"notify_customer": true}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/ready-for-pickup", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"notify_customer": true}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/ready-for-pickup", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={"notify_customer": True},)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/ready-for-pickup');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode(['notify_customer' => true], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"notify_customer": true}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/ready-for-pickup", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/fulfillment-orders/0193a1b2-c3d4-7e5f-8a6b-000000000036/ready-for-pickup");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"notify_customer": true}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Get courier quotes for a label
Section titled “Get courier quotes for a label”POST /orders/{id}/shipping-labels/quotes · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels/quotes" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "weight_kg": "1.2", "collect_cod": true}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels/quotes", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "weight_kg": "1.2", "collect_cod": true }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels/quotes", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "weight_kg": "1.2", "collect_cod": True, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels/quotes');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'fulfillment_order_id' => '0193a1b2-c3d4-7e5f-8a6b-000000000036', 'carrier' => 'aramex', 'weight_kg' => '1.2', 'collect_cod' => true, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "weight_kg": "1.2", "collect_cod": true}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels/quotes", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels/quotes");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "weight_kg": "1.2", "collect_cod": true}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Buy a shipping label
Section titled “Buy a shipping label”POST /orders/{id}/shipping-labels · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "service": "domestic_express", "weight_kg": "1.2", "collect_cod": true, "notify_customer": true}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "service": "domestic_express", "weight_kg": "1.2", "collect_cod": true, "notify_customer": true }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "service": "domestic_express", "weight_kg": "1.2", "collect_cod": True, "notify_customer": True, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'fulfillment_order_id' => '0193a1b2-c3d4-7e5f-8a6b-000000000036', 'carrier' => 'aramex', 'service' => 'domestic_express', 'weight_kg' => '1.2', 'collect_cod' => true, 'notify_customer' => true, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "service": "domestic_express", "weight_kg": "1.2", "collect_cod": true, "notify_customer": true}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/orders/0193a1b2-c3d4-7e5f-8a6b-000000000035/shipping-labels");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "fulfillment_order_id": "0193a1b2-c3d4-7e5f-8a6b-000000000036", "carrier": "aramex", "service": "domestic_express", "weight_kg": "1.2", "collect_cod": true, "notify_customer": true}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Refresh a shipment’s tracking
Section titled “Refresh a shipment’s tracking”POST /shipments/{id}/track · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1d42-7f74-8582-da5d056e14a3/track" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1d42-7f74-8582-da5d056e14a3/track", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1d42-7f74-8582-da5d056e14a3/track", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1d42-7f74-8582-da5d056e14a3/track');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1d42-7f74-8582-da5d056e14a3/track", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1d42-7f74-8582-da5d056e14a3/track");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Cancel a courier shipment
Section titled “Cancel a courier shipment”POST /shipments/{id}/cancel · Scope: write_fulfillments
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X POST "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1bff-7dd8-893c-b1cea75cd4ca/cancel" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1bff-7dd8-893c-b1cea75cd4ca/cancel", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1bff-7dd8-893c-b1cea75cd4ca/cancel", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1bff-7dd8-893c-b1cea75cd4ca/cancel');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1bff-7dd8-893c-b1cea75cd4ca/cancel", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/shipments/0193a1b2-1bff-7dd8-893c-b1cea75cd4ca/cancel");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Was this page helpful?

