הזמנות
גישת קריאה בלבד להזמנות המאוחסנות תחת חשבונות חברות השילוח שלכם. שלוש נקודות הקצה הן תחומות-רישיון: הן פועלות תחת רישיון (License) יחיד, שנבחר באמצעות פרמטר השאילתה license_key (ראו בחירת רישיון). הזמנה מזוהה ב-URL לפי מזהה ההזמנה החיצוני (של הפלטפורמה) — המזהה מהחנות שיצרה אותה — ולא לפי המזהה המספרי הפנימי שלה.
בחירת רישיון
נקודות קצה תחומות-רישיון פועלות תחת חשבון חברת שילוח אחד (רישיון). בוחרים אותו באמצעות פרמטר השאילתה license_key, שערכו הוא ה-key של הרישיון. אם לחשבון יש בדיוק רישיון פעיל אחד — הוא משמש כברירת מחדל; כשיש כמה, license_key הוא חובה (אחרת 422); מפתח חסר, לא פעיל, שפג תוקפו או שאינו בבעלותכם מחזיר 403.
GET /orders
רשימת הזמנות הקורא עבור הרישיון הנבחר, מהחדשה לישנה, עם עימוד מבוסס cursor. אימות: client credentials. רישיון: חובה.
פרמטרים
שאילתה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
license_key | string | מותנה | ה-key של הרישיון לפעול תחתיו. חובה כאשר לחשבון יותר מרישיון פעיל אחד. |
per_page | integer | לא | מספר הזמנות בעמוד. ברירת מחדל 25, מוגבל ל-100. |
cursor | string | לא | Cursor עימוד אטום. השתמשו בערך meta.next_cursor / meta.prev_cursor שהוחזר בקריאה קודמת כדי לדפדף בתוצאות. |
בקשה לדוגמה
curl --location 'https://app.shipos.co.il/api/v2/orders?per_page=25' \
--header 'X-Client-Id: {client_id}' \
--header 'X-Client-Secret: {client_secret}' \
--header 'Accept: application/json'// Node.js 18+ / דפדפנים — ללא תלויות
const query = new URLSearchParams({ per_page: '25' })
const response = await fetch(`https://app.shipos.co.il/api/v2/orders?${query}`, {
headers: {
'X-Client-Id': process.env.SHIPOS_CLIENT_ID,
'X-Client-Secret': process.env.SHIPOS_CLIENT_SECRET,
Accept: 'application/json',
},
})
if (!response.ok) {
const { error } = await response.json()
throw new Error(`${error.code}: ${error.message}`)
}
const { data: orders, meta } = await response.json()
for (const order of orders) {
console.log(order.order_id, order.total, order.currency)
}
console.log('next cursor:', meta.next_cursor)<?php
// composer require guzzlehttp/guzzle
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.shipos.co.il/api/v2/',
'headers' => [
'X-Client-Id' => getenv('SHIPOS_CLIENT_ID'),
'X-Client-Secret' => getenv('SHIPOS_CLIENT_SECRET'),
'Accept' => 'application/json',
],
]);
$response = $client->get('orders', ['query' => ['per_page' => 25]]);
$payload = json_decode($response->getBody()->getContents(), true);
foreach ($payload['data'] as $order) {
echo $order['order_id'], ' ', $order['total'], ' ', $order['currency'], PHP_EOL;
}
echo 'next cursor: ', $payload['meta']['next_cursor'] ?? '-', PHP_EOL;<?php
use Illuminate\Support\Facades\Http;
$payload = Http::withHeaders([
'X-Client-Id' => config('services.shipos.client_id'),
'X-Client-Secret' => config('services.shipos.client_secret'),
])
->acceptJson()
->get('https://app.shipos.co.il/api/v2/orders', ['per_page' => 25])
->throw()
->json();
foreach ($payload['data'] as $order) {
logger()->info($order['order_id'].' '.$order['total'].' '.$order['currency']);
}
logger()->info('next cursor: '.($payload['meta']['next_cursor'] ?? '-'));# pip install httpx
import os
import httpx
response = httpx.get(
"https://app.shipos.co.il/api/v2/orders",
params={"per_page": 25},
headers={
"X-Client-Id": os.environ["SHIPOS_CLIENT_ID"],
"X-Client-Secret": os.environ["SHIPOS_CLIENT_SECRET"],
"Accept": "application/json",
},
)
response.raise_for_status()
payload = response.json()
for order in payload["data"]:
print(order["order_id"], order["total"], order["currency"])
print("next cursor:", payload["meta"]["next_cursor"])package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"os"
)
type ordersResponse struct {
Data []struct {
OrderID string `json:"order_id"`
Total string `json:"total"`
Currency string `json:"currency"`
} `json:"data"`
Meta struct {
NextCursor *string `json:"next_cursor"`
} `json:"meta"`
}
func main() {
query := url.Values{"per_page": {"25"}}
req, _ := http.NewRequest("GET",
"https://app.shipos.co.il/api/v2/orders?"+query.Encode(), nil)
req.Header.Set("X-Client-Id", os.Getenv("SHIPOS_CLIENT_ID"))
req.Header.Set("X-Client-Secret", os.Getenv("SHIPOS_CLIENT_SECRET"))
req.Header.Set("Accept", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var payload ordersResponse
if err := json.NewDecoder(res.Body).Decode(&payload); err != nil {
panic(err)
}
for _, order := range payload.Data {
fmt.Println(order.OrderID, order.Total, order.Currency)
}
}// Java 17+ — java.net.http, ללא תלויות (פענוח עם Jackson/Gson)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ShipOsOrders {
public static void main(String[] args) throws Exception {
String query = "per_page=25";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://app.shipos.co.il/api/v2/orders?" + query))
.header("X-Client-Id", System.getenv("SHIPOS_CLIENT_ID"))
.header("X-Client-Secret", System.getenv("SHIPOS_CLIENT_SECRET"))
.header("Accept", "application/json")
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new RuntimeException("ShipOS error: " + response.body());
}
System.out.println(response.body()); // {"data":[...],"meta":{...}}
}
}// .NET 8+ — System.Net.Http.Json
using System.Net.Http.Json;
using System.Text.Json;
using var http = new HttpClient
{
BaseAddress = new Uri("https://app.shipos.co.il/api/v2/"),
};
http.DefaultRequestHeaders.Add("X-Client-Id",
Environment.GetEnvironmentVariable("SHIPOS_CLIENT_ID"));
http.DefaultRequestHeaders.Add("X-Client-Secret",
Environment.GetEnvironmentVariable("SHIPOS_CLIENT_SECRET"));
var payload = await http.GetFromJsonAsync<JsonDocument>("orders?per_page=25")
?? throw new InvalidOperationException("Empty response");
foreach (var order in payload.RootElement.GetProperty("data").EnumerateArray())
{
Console.WriteLine($"{order.GetProperty("order_id").GetString()} " +
$"{order.GetProperty("total").GetString()}");
}require "net/http"
require "json"
uri = URI("https://app.shipos.co.il/api/v2/orders")
uri.query = URI.encode_www_form(per_page: 25)
request = Net::HTTP::Get.new(uri)
request["X-Client-Id"] = ENV.fetch("SHIPOS_CLIENT_ID")
request["X-Client-Secret"] = ENV.fetch("SHIPOS_CLIENT_SECRET")
request["Accept"] = "application/json"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
raise "ShipOS error: #{response.body}" unless response.is_a?(Net::HTTPSuccess)
payload = JSON.parse(response.body)
payload["data"].each { |order| puts "#{order["order_id"]} #{order["total"]}" }
puts "next cursor: #{payload.dig("meta", "next_cursor")}"// [dependencies]
// reqwest = { version = "0.12", features = ["json"] }
// tokio = { version = "1", features = ["full"] }
// serde_json = "1"
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload: Value = reqwest::Client::new()
.get("https://app.shipos.co.il/api/v2/orders")
.query(&[("per_page", "25")])
.header("X-Client-Id", std::env::var("SHIPOS_CLIENT_ID")?)
.header("X-Client-Secret", std::env::var("SHIPOS_CLIENT_SECRET")?)
.header("Accept", "application/json")
.send()
.await?
.error_for_status()?
.json()
.await?;
if let Some(orders) = payload["data"].as_array() {
for order in orders {
println!("{} {}", order["order_id"], order["total"]);
}
}
println!("next cursor: {}", payload["meta"]["next_cursor"]);
Ok(())
}תגובה 200
הרשימה מעומדת באמצעות cursor. כל פריט הוא הזמנה (ראו את מדריך השדות תחת GET /orders/{order}). המפתח shipments מושמט מפריטי הרשימה — הוא קיים רק כאשר יחס המשלוחים של ההזמנה נטען, וזה קורה בנקודת הקצה של הזמנה בודדת.
{
"data": [
{
"id": 84213,
"order_id": "19602",
"number": "19602",
"source": "woocommerce",
"total": "245.00",
"currency": "ILS",
"billing": {
"first_name": "ישראל",
"last_name": "ישראלי",
"address_1": "הרצל 10",
"city": "תל אביב",
"email": "israel@example.com",
"phone": "0521234567"
},
"shipping": {
"first_name": "ישראל",
"last_name": "ישראלי",
"address_1": "הרצל 10",
"city": "תל אביב"
},
"created_at": "2026-07-20T08:14:11.000000Z",
"updated_at": "2026-07-20T08:15:02.000000Z"
}
],
"links": {
"first": null,
"last": null,
"prev": null,
"next": "https://app.shipos.co.il/api/v2/orders?cursor=eyJpZCI6ODQyMTN9"
},
"meta": {
"path": "https://app.shipos.co.il/api/v2/orders",
"per_page": 25,
"next_cursor": "eyJpZCI6ODQyMTN9",
"prev_cursor": null
}
}
billingו-shippingמועברים כפי שהם מאוחסנים על ההזמנה, ולכן המפתחות המדויקים שלהם משתנים לפי פלטפורמת המקור.
שגיאות
| סטטוס | קוד | מתי |
|---|---|---|
| 401 | unauthenticated | פרטי הזדהות (client credentials) חסרים או שגויים. |
| 403 | forbidden | לחשבון אין רישיון פעיל, או שה-license_key שסופק אינו פעיל / פג תוקף / אינו בבעלותכם. |
| 422 | validation_failed | לחשבון יותר מרישיון פעיל אחד ו-license_key לא סופק. |
GET /orders/
מחזיר הזמנה בודדת יחד עם המשלוחים שלה. אימות: client credentials. רישיון: חובה.
פרמטרים
נתיב
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
order | string | כן | מזהה ההזמנה החיצוני (של הפלטפורמה) (order_id) של ההזמנה — מזהה ההזמנה של החנות עצמה, לא ה-id המספרי הפנימי. חייב להשתייך לרישיון הנבחר. |
שאילתה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
license_key | string | מותנה | ה-key של הרישיון לפעול תחתיו. חובה כאשר לחשבון יותר מרישיון פעיל אחד. |
בקשה לדוגמה
curl --location 'https://app.shipos.co.il/api/v2/orders/19602' \
--header 'X-Client-Id: {client_id}' \
--header 'X-Client-Secret: {client_secret}' \
--header 'Accept: application/json'// Node.js 18+ / דפדפנים — ללא תלויות
const orderId = '19602'
const response = await fetch(`https://app.shipos.co.il/api/v2/orders/${orderId}`, {
headers: {
'X-Client-Id': process.env.SHIPOS_CLIENT_ID,
'X-Client-Secret': process.env.SHIPOS_CLIENT_SECRET,
Accept: 'application/json',
},
})
if (!response.ok) {
const { error } = await response.json()
throw new Error(`${error.code}: ${error.message}`)
}
const { data: order } = await response.json()
console.log(order.order_id, order.total, order.currency)
for (const shipment of order.shipments) {
console.log(shipment.tracking_code, shipment.status?.description)
}<?php
// composer require guzzlehttp/guzzle
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.shipos.co.il/api/v2/',
'headers' => [
'X-Client-Id' => getenv('SHIPOS_CLIENT_ID'),
'X-Client-Secret' => getenv('SHIPOS_CLIENT_SECRET'),
'Accept' => 'application/json',
],
]);
$order = json_decode(
$client->get('orders/19602')->getBody()->getContents(),
true,
)['data'];
echo $order['order_id'], ' ', $order['total'], PHP_EOL;
foreach ($order['shipments'] as $shipment) {
echo $shipment['tracking_code'], PHP_EOL;
}<?php
use Illuminate\Support\Facades\Http;
$order = Http::withHeaders([
'X-Client-Id' => config('services.shipos.client_id'),
'X-Client-Secret' => config('services.shipos.client_secret'),
])
->acceptJson()
->get('https://app.shipos.co.il/api/v2/orders/19602')
->throw()
->json('data');
logger()->info($order['order_id'].' '.$order['total']);
foreach ($order['shipments'] as $shipment) {
logger()->info($shipment['tracking_code']);
}# pip install httpx
import os
import httpx
response = httpx.get(
"https://app.shipos.co.il/api/v2/orders/19602",
headers={
"X-Client-Id": os.environ["SHIPOS_CLIENT_ID"],
"X-Client-Secret": os.environ["SHIPOS_CLIENT_SECRET"],
"Accept": "application/json",
},
)
response.raise_for_status()
order = response.json()["data"]
print(order["order_id"], order["total"], order["currency"])
for shipment in order["shipments"]:
print(shipment["tracking_code"])package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
type orderResponse struct {
Data struct {
OrderID string `json:"order_id"`
Total string `json:"total"`
Shipments []struct {
TrackingCode string `json:"tracking_code"`
} `json:"shipments"`
} `json:"data"`
}
func main() {
req, _ := http.NewRequest("GET",
"https://app.shipos.co.il/api/v2/orders/19602", nil)
req.Header.Set("X-Client-Id", os.Getenv("SHIPOS_CLIENT_ID"))
req.Header.Set("X-Client-Secret", os.Getenv("SHIPOS_CLIENT_SECRET"))
req.Header.Set("Accept", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var payload orderResponse
if err := json.NewDecoder(res.Body).Decode(&payload); err != nil {
panic(err)
}
fmt.Println(payload.Data.OrderID, payload.Data.Total)
for _, shipment := range payload.Data.Shipments {
fmt.Println(shipment.TrackingCode)
}
}// Java 17+ — java.net.http, ללא תלויות (פענוח עם Jackson/Gson)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ShipOsOrder {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://app.shipos.co.il/api/v2/orders/19602"))
.header("X-Client-Id", System.getenv("SHIPOS_CLIENT_ID"))
.header("X-Client-Secret", System.getenv("SHIPOS_CLIENT_SECRET"))
.header("Accept", "application/json")
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new RuntimeException("ShipOS error: " + response.body());
}
System.out.println(response.body()); // {"data":{...}}
}
}// .NET 8+ — System.Net.Http.Json
using System.Net.Http.Json;
using System.Text.Json;
using var http = new HttpClient
{
BaseAddress = new Uri("https://app.shipos.co.il/api/v2/"),
};
http.DefaultRequestHeaders.Add("X-Client-Id",
Environment.GetEnvironmentVariable("SHIPOS_CLIENT_ID"));
http.DefaultRequestHeaders.Add("X-Client-Secret",
Environment.GetEnvironmentVariable("SHIPOS_CLIENT_SECRET"));
var payload = await http.GetFromJsonAsync<JsonDocument>("orders/19602")
?? throw new InvalidOperationException("Empty response");
var order = payload.RootElement.GetProperty("data");
Console.WriteLine($"{order.GetProperty("order_id").GetString()} " +
$"{order.GetProperty("total").GetString()}");
foreach (var shipment in order.GetProperty("shipments").EnumerateArray())
{
Console.WriteLine(shipment.GetProperty("tracking_code").GetString());
}require "net/http"
require "json"
uri = URI("https://app.shipos.co.il/api/v2/orders/19602")
request = Net::HTTP::Get.new(uri)
request["X-Client-Id"] = ENV.fetch("SHIPOS_CLIENT_ID")
request["X-Client-Secret"] = ENV.fetch("SHIPOS_CLIENT_SECRET")
request["Accept"] = "application/json"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
raise "ShipOS error: #{response.body}" unless response.is_a?(Net::HTTPSuccess)
order = JSON.parse(response.body).fetch("data")
puts "#{order["order_id"]} #{order["total"]}"
order["shipments"].each { |shipment| puts shipment["tracking_code"] }// [dependencies]
// reqwest = { version = "0.12", features = ["json"] }
// tokio = { version = "1", features = ["full"] }
// serde_json = "1"
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload: Value = reqwest::Client::new()
.get("https://app.shipos.co.il/api/v2/orders/19602")
.header("X-Client-Id", std::env::var("SHIPOS_CLIENT_ID")?)
.header("X-Client-Secret", std::env::var("SHIPOS_CLIENT_SECRET")?)
.header("Accept", "application/json")
.send()
.await?
.error_for_status()?
.json()
.await?;
let order = &payload["data"];
println!("{} {}", order["order_id"], order["total"]);
if let Some(shipments) = order["shipments"].as_array() {
for shipment in shipments {
println!("{}", shipment["tracking_code"]);
}
}
Ok(())
}תגובה 200
shipments קיים כאן משום שיחס המשלוחים נטען. זהו מערך של משאבי משלוח (ראו GET /orders/{order}/shipments למדריך שדות המשלוח).
{
"data": {
"id": 84213,
"order_id": "19602",
"number": "19602",
"source": "woocommerce",
"total": "245.00",
"currency": "ILS",
"billing": {
"first_name": "ישראל",
"last_name": "ישראלי",
"address_1": "הרצל 10",
"city": "תל אביב",
"email": "israel@example.com",
"phone": "0521234567"
},
"shipping": {
"first_name": "ישראל",
"last_name": "ישראלי",
"address_1": "הרצל 10",
"city": "תל אביב"
},
"shipments": [
{
"uuid": "9f1c2d34-5678-4abc-9012-3456789abcde",
"tracking_code": "66747921",
"service_type": "home",
"status": {
"code": "1",
"description": "נמסר",
"is_delivered": true
},
"is_active": true
}
],
"created_at": "2026-07-20T08:14:11.000000Z",
"updated_at": "2026-07-20T08:15:02.000000Z"
}
}שדות הזמנה
| שדה | סוג | תיאור |
|---|---|---|
id | integer | מזהה הזמנה פנימי של ShipOS. |
order_id | string | מזהה הזמנה חיצוני (של הפלטפורמה) — הערך שבשימוש ב-URL. |
number | string | מספר ההזמנה כפי שמוצג לסוחר/ללקוח. |
source | string | הפלטפורמה שממנה הגיעה ההזמנה (למשל woocommerce, shopify, wix, api_v2). |
total | string | סכום ההזמנה. |
currency | string | קוד מטבע ISO. |
billing | object | פרטי החיוב כפי שמאוחסנים על ההזמנה (המפתחות משתנים לפי פלטפורמה). |
shipping | object | פרטי המשלוח/הנמען כפי שמאוחסנים על ההזמנה (המפתחות משתנים לפי פלטפורמה). |
shipments | array | המשלוחים המשויכים להזמנה. קיים רק בנקודת הקצה של הזמנה בודדת. |
created_at | string | חותמת זמן בפורמט ISO 8601. |
updated_at | string | חותמת זמן בפורמט ISO 8601. |
מזהי קישור לפלטפורמה, מזהים פנימיים, פירוטי מס/הנחה ואמצעי תשלום/משלוח מוחרגים בכוונה מחוזה v2.
שגיאות
| סטטוס | קוד | מתי |
|---|---|---|
| 401 | unauthenticated | פרטי הזדהות (client credentials) חסרים או שגויים. |
| 403 | forbidden | הרישיון אינו שמיש (ראו בחירת רישיון). |
| 404 | not_found | אף הזמנה עם המזהה החיצוני הזה אינה שייכת לרישיון הנבחר. |
| 422 | validation_failed | מספר רישיונות פעילים ו-license_key הושמט. |
GET /orders/{order}/shipments
רשימת המשלוחים המשויכים להזמנה בודדת. אימות: client credentials. רישיון: חובה.
פרמטרים
נתיב
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
order | string | כן | מזהה ההזמנה החיצוני (של הפלטפורמה) (order_id). חייב להשתייך לרישיון הנבחר. |
שאילתה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
license_key | string | מותנה | ה-key של הרישיון לפעול תחתיו. חובה כאשר לחשבון יותר מרישיון פעיל אחד. |
בקשה לדוגמה
curl --location 'https://app.shipos.co.il/api/v2/orders/19602/shipments' \
--header 'X-Client-Id: {client_id}' \
--header 'X-Client-Secret: {client_secret}' \
--header 'Accept: application/json'// Node.js 18+ / דפדפנים — ללא תלויות
const orderId = '19602'
const response = await fetch(
`https://app.shipos.co.il/api/v2/orders/${orderId}/shipments`,
{
headers: {
'X-Client-Id': process.env.SHIPOS_CLIENT_ID,
'X-Client-Secret': process.env.SHIPOS_CLIENT_SECRET,
Accept: 'application/json',
},
},
)
if (!response.ok) {
const { error } = await response.json()
throw new Error(`${error.code}: ${error.message}`)
}
const { data: shipments } = await response.json()
for (const shipment of shipments) {
console.log(shipment.tracking_code, shipment.service_type, shipment.status?.description)
}<?php
// composer require guzzlehttp/guzzle
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.shipos.co.il/api/v2/',
'headers' => [
'X-Client-Id' => getenv('SHIPOS_CLIENT_ID'),
'X-Client-Secret' => getenv('SHIPOS_CLIENT_SECRET'),
'Accept' => 'application/json',
],
]);
$shipments = json_decode(
$client->get('orders/19602/shipments')->getBody()->getContents(),
true,
)['data'];
foreach ($shipments as $shipment) {
echo $shipment['tracking_code'], ' ', $shipment['service_type'], PHP_EOL;
}<?php
use Illuminate\Support\Facades\Http;
$shipments = Http::withHeaders([
'X-Client-Id' => config('services.shipos.client_id'),
'X-Client-Secret' => config('services.shipos.client_secret'),
])
->acceptJson()
->get('https://app.shipos.co.il/api/v2/orders/19602/shipments')
->throw()
->json('data');
foreach ($shipments as $shipment) {
logger()->info($shipment['tracking_code'].' '.$shipment['service_type']);
}# pip install httpx
import os
import httpx
response = httpx.get(
"https://app.shipos.co.il/api/v2/orders/19602/shipments",
headers={
"X-Client-Id": os.environ["SHIPOS_CLIENT_ID"],
"X-Client-Secret": os.environ["SHIPOS_CLIENT_SECRET"],
"Accept": "application/json",
},
)
response.raise_for_status()
shipments = response.json()["data"]
for shipment in shipments:
print(shipment["tracking_code"], shipment["service_type"])package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
type shipmentsResponse struct {
Data []struct {
TrackingCode string `json:"tracking_code"`
ServiceType string `json:"service_type"`
} `json:"data"`
}
func main() {
req, _ := http.NewRequest("GET",
"https://app.shipos.co.il/api/v2/orders/19602/shipments", nil)
req.Header.Set("X-Client-Id", os.Getenv("SHIPOS_CLIENT_ID"))
req.Header.Set("X-Client-Secret", os.Getenv("SHIPOS_CLIENT_SECRET"))
req.Header.Set("Accept", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var payload shipmentsResponse
if err := json.NewDecoder(res.Body).Decode(&payload); err != nil {
panic(err)
}
for _, shipment := range payload.Data {
fmt.Println(shipment.TrackingCode, shipment.ServiceType)
}
}// Java 17+ — java.net.http, ללא תלויות (פענוח עם Jackson/Gson)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ShipOsOrderShipments {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://app.shipos.co.il/api/v2/orders/19602/shipments"))
.header("X-Client-Id", System.getenv("SHIPOS_CLIENT_ID"))
.header("X-Client-Secret", System.getenv("SHIPOS_CLIENT_SECRET"))
.header("Accept", "application/json")
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new RuntimeException("ShipOS error: " + response.body());
}
System.out.println(response.body()); // {"data":[...]}
}
}// .NET 8+ — System.Net.Http.Json
using System.Net.Http.Json;
using System.Text.Json;
using var http = new HttpClient
{
BaseAddress = new Uri("https://app.shipos.co.il/api/v2/"),
};
http.DefaultRequestHeaders.Add("X-Client-Id",
Environment.GetEnvironmentVariable("SHIPOS_CLIENT_ID"));
http.DefaultRequestHeaders.Add("X-Client-Secret",
Environment.GetEnvironmentVariable("SHIPOS_CLIENT_SECRET"));
var payload = await http.GetFromJsonAsync<JsonDocument>("orders/19602/shipments")
?? throw new InvalidOperationException("Empty response");
foreach (var shipment in payload.RootElement.GetProperty("data").EnumerateArray())
{
Console.WriteLine($"{shipment.GetProperty("tracking_code").GetString()} " +
$"{shipment.GetProperty("service_type").GetString()}");
}require "net/http"
require "json"
uri = URI("https://app.shipos.co.il/api/v2/orders/19602/shipments")
request = Net::HTTP::Get.new(uri)
request["X-Client-Id"] = ENV.fetch("SHIPOS_CLIENT_ID")
request["X-Client-Secret"] = ENV.fetch("SHIPOS_CLIENT_SECRET")
request["Accept"] = "application/json"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
raise "ShipOS error: #{response.body}" unless response.is_a?(Net::HTTPSuccess)
JSON.parse(response.body).fetch("data").each do |shipment|
puts "#{shipment["tracking_code"]} #{shipment["service_type"]}"
end// [dependencies]
// reqwest = { version = "0.12", features = ["json"] }
// tokio = { version = "1", features = ["full"] }
// serde_json = "1"
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload: Value = reqwest::Client::new()
.get("https://app.shipos.co.il/api/v2/orders/19602/shipments")
.header("X-Client-Id", std::env::var("SHIPOS_CLIENT_ID")?)
.header("X-Client-Secret", std::env::var("SHIPOS_CLIENT_SECRET")?)
.header("Accept", "application/json")
.send()
.await?
.error_for_status()?
.json()
.await?;
if let Some(shipments) = payload["data"].as_array() {
for shipment in shipments {
println!("{} {}", shipment["tracking_code"], shipment["service_type"]);
}
}
Ok(())
}תגובה 200
{
"data": [
{
"uuid": "9f1c2d34-5678-4abc-9012-3456789abcde",
"tracking_code": "66747921",
"status": {
"code": "1",
"description": "נמסר",
"is_delivered": true
},
"service_type": "home",
"is_active": true,
"recipient": {
"name": "ישראל ישראלי",
"phone": "0521234567",
"company": null,
"address": {
"street": "הרצל 10",
"number": "10",
"city": "תל אביב",
"state": null,
"zip": "6100000",
"country": "IL"
}
},
"pickup_point_id": null,
"packages": 1,
"cod": null,
"order": {
"id": "19602",
"number": null
},
"references": {
"external_id": null
},
"short_tracking_code": null,
"label_generated": true,
"collection_status": null,
"collected_at": null,
"ready_at": null,
"created_at": "2026-07-20T08:15:02.000000Z",
"updated_at": "2026-07-20T08:20:44.000000Z"
}
]
}שדות משלוח
| שדה | סוג | תיאור |
|---|---|---|
uuid | string | מזהה משלוח ציבורי. |
tracking_code | string | קוד מעקב / קוד משלוח של חברת השילוח. |
carrier | object | חברת שילוח { id, name }. קיים רק כאשר יחס הספק נטען. |
status | object | null | { code, description, is_delivered } — מפתחות עם ערכי null מושמטים; הבלוק כולו הוא null כאשר אין סטטוס. |
service_type | string | אחד מסוגי השירות (home, pickup, exchange, return). |
is_active | boolean | האם המשלוח פעיל (לא בוטל). |
recipient | object | { name, phone, company, address{ street, number, city, state, zip, country } }. |
pickup_point_id | string | null | מזהה נקודת האיסוף שנבחרה, עבור משלוחי נקודת איסוף. |
packages | mixed | null | מספר חבילות / נתוני חבילות שנקלטו ביצירה. |
cod | object | null | { amount } כאשר מדובר בתשלום במזומן במסירה (COD), אחרת null. |
order | object | { id, number } — מזהה ההזמנה החיצוני, ומספר ההזמנה כאשר יחס ההזמנה נטען. |
references | object | { external_id } — הפניה חיצונית שסופקה על-ידי הקורא, כאשר הוגדרה. |
short_tracking_code | string | null | קוד מעקב מקוצר (בתהליכי נקודות איסוף). |
label_generated | boolean | האם נוצרה תווית משלוח. |
collection_status | string | null | סטטוס מחזור חיי האיסוף. |
collected_at | string | null | חותמת זמן ISO 8601 של האיסוף. |
ready_at | string | null | חותמת זמן ISO 8601 של מוכנות לאיסוף. |
created_at | string | חותמת זמן בפורמט ISO 8601. |
updated_at | string | חותמת זמן בפורמט ISO 8601. |
מטעני נתונים גולמיים של חברת השילוח, דגלי סנכרון פלטפורמה ומזהים פנימיים מוחרגים בכוונה מחוזה v2.
שגיאות
| סטטוס | קוד | מתי |
|---|---|---|
| 401 | unauthenticated | פרטי הזדהות (client credentials) חסרים או שגויים. |
| 403 | forbidden | הרישיון אינו שמיש (ראו בחירת רישיון). |
| 404 | not_found | אף הזמנה עם המזהה החיצוני הזה אינה שייכת לרישיון הנבחר. |
| 422 | validation_failed | מספר רישיונות פעילים ו-license_key הושמט. |