רישיונות
רישיון (License) הוא חשבון בודד אצל חברת שילוח. כל נקודת קצה תחומת-רישיון ב-API הזה פועלת תחת רישיון אחד, שנבחר באמצעות פרמטר השאילתה license_key — והערך הזה הוא ה-key של רישיון, שאותו מאתרים כאן.
אזהרה — מידע רגיש
בלוק ה-settings של כל רישיון נחשף במלואו, כולל ה-JSON הגולמי של הגדרות הספק (settings), שמכיל פרטי הזדהות של חברת השילוח (username / password / token / api_key / api_secret / client_code / printer_api_key / …). התייחסו לתגובה זו כאל סוד. ה-key של הרישיון עצמו כלול כדי שתוכלו להשתמש בו כ-license_key.
GET /licenses
רשימת כל חשבונות חברות השילוח (רישיונות) שבבעלות הלקוח המאומת, ממוינים לפי id. אימות: client credentials. רישיון: לא רלוונטי — נקודת קצה זו מחזירה את כל רישיונות הלקוח ואינה דורשת license_key.
פרמטרים
אין.
בקשה לדוגמה
curl --location 'https://app.shipos.co.il/api/v2/licenses' \
--header 'X-Client-Id: {client_id}' \
--header 'X-Client-Secret: {client_secret}' \
--header 'Accept: application/json'// Node.js 18+ / דפדפנים — בלי תלויות
const response = await fetch('https://app.shipos.co.il/api/v2/licenses', {
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: licenses } = await response.json()
for (const license of licenses) {
console.log(license.key, '→', license.company.carrier.name)
}<?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',
],
]);
$licenses = json_decode(
$client->get('licenses')->getBody()->getContents(),
true,
)['data'];
foreach ($licenses as $license) {
echo $license['key'], ' → ', $license['company']['carrier']['name'], PHP_EOL;
}<?php
use Illuminate\Support\Facades\Http;
$licenses = 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/licenses')
->throw()
->json('data');
foreach ($licenses as $license) {
logger()->info($license['key'].' → '.$license['company']['carrier']['name']);
}# pip install httpx
import os
import httpx
response = httpx.get(
"https://app.shipos.co.il/api/v2/licenses",
headers={
"X-Client-Id": os.environ["SHIPOS_CLIENT_ID"],
"X-Client-Secret": os.environ["SHIPOS_CLIENT_SECRET"],
"Accept": "application/json",
},
)
response.raise_for_status()
licenses = response.json()["data"]
for lic in licenses:
print(lic["key"], "→", lic["company"]["carrier"]["name"])package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
type licensesResponse struct {
Data []struct {
Key string `json:"key"`
Company struct {
Carrier struct {
Name string `json:"name"`
} `json:"carrier"`
} `json:"company"`
} `json:"data"`
}
func main() {
req, _ := http.NewRequest("GET",
"https://app.shipos.co.il/api/v2/licenses", 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 licensesResponse
if err := json.NewDecoder(res.Body).Decode(&payload); err != nil {
panic(err)
}
for _, license := range payload.Data {
fmt.Println(license.Key, "→", license.Company.Carrier.Name)
}
}// 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 ShipOsLicenses {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://app.shipos.co.il/api/v2/licenses"))
.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":[...]} — contains credentials
}
}// .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>("licenses")
?? throw new InvalidOperationException("Empty response");
foreach (var license in payload.RootElement.GetProperty("data").EnumerateArray())
{
var carrier = license.GetProperty("company").GetProperty("carrier");
Console.WriteLine($"{license.GetProperty("key").GetString()} → " +
$"{carrier.GetProperty("name").GetString()}");
}require "net/http"
require "json"
uri = URI("https://app.shipos.co.il/api/v2/licenses")
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 |license|
puts "#{license["key"]} → #{license.dig("company", "carrier", "name")}"
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/licenses")
.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(licenses) = payload["data"].as_array() {
for license in licenses {
println!(
"{} → {}",
license["key"], license["company"]["carrier"]["name"]
);
}
}
Ok(())
}תגובה 200
כל פריט מטמיע את ה-company שלו (עם carrier מקונן) ואת ה-settings שלו (שורה אחת לכל ספק).
{
"data": [
{
"id": 812,
"key": "a1b2c3d4e5f6",
"name": "חשבון HFD ראשי",
"company": {
"id": 3391,
"name": "בלדר לוגיסטיקה בע\"מ",
"carrier": {
"id": 4,
"name": "HFD"
}
},
"commitment_day": 3,
"multiple_shipment": true,
"is_active": true,
"is_expired": false,
"expires_at": "2027-01-31T00:00:00.000000Z",
"settings": [
{
"id": 2201,
"provider_id": 4,
"settings": {
"username": "shipos",
"token": "eyJhbGciOi...",
"client_code": "14641"
},
"collect_street": "הרצל",
"collect_street_number": "10",
"collect_city": "תל אביב",
"collect_company": "בלדר לוגיסטיקה בע\"מ",
"print_products": true,
"print_variations": false,
"print_customer_detail_sku_and_quantity_bold_in_label": false,
"print_products_on_label_notes": false,
"print_products_on_a4_label_notes": false,
"print_products_name": true,
"print_products_sku": false,
"print_virtual_product_on_note": false,
"enable_cod": true,
"label_method": "pdf",
"label_type": "a4",
"separate_street_and_number": true,
"get_street_number_with_suffix": false,
"display_shipping_line_number": false,
"order_prefix": "SO-",
"send_note_on_order": false,
"created_at": "2026-01-31T00:00:00.000000Z",
"updated_at": "2026-07-01T10:22:14.000000Z"
}
]
}
]
}שדות רישיון
| שדה | סוג | תיאור |
|---|---|---|
id | integer | מזהה רישיון פנימי. |
key | string | פרט ההזדהות של הרישיון. זה הערך שיש להעביר כ-license_key בנקודות קצה תחומות-רישיון. |
name | string | null | שם הרישיון המוצג למשתמש. |
company | object | חברת השליחויות שאליה שייך הרישיון (ראו בהמשך). |
commitment_day | integer | null | הגדרת יום ההתחייבות של חברת השילוח. |
multiple_shipment | boolean | האם הרישיון מתיר משלוחים מרובים להזמנה. |
is_active | boolean | האם הרישיון פעיל. |
is_expired | boolean | האם תוקף הרישיון פג. |
expires_at | string | null | חותמת זמן פקיעה בפורמט ISO 8601. |
settings | array | שורות הגדרות לכל ספק (ראו בהמשך). |
company
| שדה | סוג | תיאור |
|---|---|---|
id | integer | מזהה החברה. |
name | string | שם החברה. |
carrier | object | חברת השילוח (ספק) { id, name }. קיים כאשר יחס הספק נטען (וזה המצב בנקודת קצה זו). |
carrier
| שדה | סוג | תיאור |
|---|---|---|
id | integer | מזהה חברת השילוח (ספק). |
name | string | שם חברת השילוח (למשל HFD, Cargo, Zigzag). |
settings[]
שורת license_settings מלאה עבור הספק. ה-JSON המקונן של settings מקוצץ מערכים ריקים — מפתחות שערכם null, מחרוזת ריקה או מערך ריק (רקורסיבית) מושמטים; ערכים בוליאניים תמיד נשמרים (גם true וגם false משמעותיים), וכך גם 0 וסקלרים ממשיים אחרים.
| שדה | סוג | תיאור |
|---|---|---|
id | integer | מזהה שורת ההגדרות. |
provider_id | integer | מזהה הספק (חברת השילוח) שעליו חלות ההגדרות. |
settings | object | JSON גולמי של הגדרות הספק, לאחר קיצוץ ערכים ריקים. מכיל פרטי הזדהות של חברת השילוח. |
collect_street | string | null | כתובת איסוף — רחוב. |
collect_street_number | string | null | כתובת איסוף — מספר רחוב. |
collect_city | string | null | כתובת איסוף — עיר. |
collect_company | string | null | כתובת איסוף — חברה. |
print_products | bool | null | אפשרות הדפסת תווית. |
print_variations | bool | null | אפשרות הדפסת תווית. |
print_customer_detail_sku_and_quantity_bold_in_label | bool | null | אפשרות הדפסת תווית. |
print_products_on_label_notes | bool | null | אפשרות הדפסת תווית. |
print_products_on_a4_label_notes | bool | null | אפשרות הדפסת תווית. |
print_products_name | bool | null | אפשרות הדפסת תווית. |
print_products_sku | bool | null | אפשרות הדפסת תווית. |
print_virtual_product_on_note | bool | null | אפשרות הדפסת תווית. |
enable_cod | bool | null | האם תשלום במזומן במסירה (COD) מופעל. |
label_method | string | null | שיטת יצירת התווית. |
label_type | string | null | פורמט/סוג התווית. |
separate_street_and_number | bool | null | אפשרות טיפול בכתובת. |
get_street_number_with_suffix | bool | null | אפשרות טיפול בכתובת. |
display_shipping_line_number | bool | null | אפשרות תצוגה בתווית. |
order_prefix | string | null | קידומת מספר הזמנה. |
send_note_on_order | bool | null | האם לשלוח הערה על ההזמנה. |
created_at | string | חותמת זמן בפורמט ISO 8601. |
updated_at | string | חותמת זמן בפורמט ISO 8601. |
שגיאות
| סטטוס | קוד | מתי |
|---|---|---|
| 401 | unauthenticated | פרטי הזדהות (client credentials) חסרים או שגויים. |