توثيق API
دمج ملصقات الشحن في تطبيقك باستخدام واجهة REST API القوية. احصل على الأسعار الفورية وأنشئ الملصقات وتتبع الشحنات برمجياً.
المصادقة
جميع طلبات API تتطلب المصادقة باستخدام مفتاح API والسر الخاص بك. قم بتضمين هذه الرؤوس في كل طلب:
X-API-Key: your_api_key
X-API-Secret: your_api_secretتنبيه أمني
حافظ على سرية مفتاح API الخاص بك. لا تعرضه أبداً في كود العميل أو المستودعات العامة.
مثال على الطلب
curl -X GET https://uspostage.io/api/v1/account/balance \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret"رصيد الحساب
تحقق من أرصدة محفظة العملات المشفرة وسجل المعاملات. تستخدم API محفظتك (BTC, LTC, LTCT) للمدفوعات.
/api/v1/account/balanceالحصول على أرصدة ومعاملات المحفظة
معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| includeTransactions | boolean | اختياري | تضمين سجل المعاملات |
| currency | string | اختياري | تصفية المعاملات حسب العملة (BTC, LTC, LTCT) |
| limit | number | اختياري | عدد المعاملات (افتراضي: 20، الحد الأقصى: 100) |
مثال على الطلب
curl -X GET "https://uspostage.io/api/v1/account/balance?includeTransactions=true&limit=10" \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret"الاستجابة
{
"success": true,
"data": {
"balances": [
{ "currency": "BTC", "balance": 0.00125000 },
{ "currency": "LTC", "balance": 0.50000000 },
{ "currency": "LTCT", "balance": 0.00000000 }
],
"supportedCurrencies": ["BTC", "LTC", "LTCT"],
"transactions": [
{
"id": "txn_abc123",
"currency": "BTC",
"type": "deposit",
"amount": 0.00100000,
"balanceAfter": 0.00125000,
"description": "Deposit via CoinPayments",
"createdAt": "2024-01-10T12:00:00Z"
},
{
"id": "txn_def456",
"currency": "BTC",
"type": "label_purchase",
"amount": -0.00015000,
"balanceAfter": 0.00025000,
"description": "API labels purchase for order USP-12345678",
"createdAt": "2024-01-09T15:30:00Z"
}
],
"pagination": {
"limit": 10,
"offset": 0,
"total": 25,
"hasMore": true
}
}
}إضافة رصيد
لإضافة رصيد إلى محفظتك، قم بزيارة صفحة محفظتي وأودع باستخدام BTC أو LTC أو LTCT.
التحقق من العنوان
تحقق من عناوين الشحن وقم بتوحيدها لضمان إمكانية التسليم.
/api/v1/shipping/verify-addressالتحقق من عنوان الشحن وتصحيحه
جسم الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| address | Address | مطلوب | العنوان للتحقق |
| strict | boolean | اختياري | تفعيل وضع التحقق الصارم |
مثال على الطلب
curl -X POST https://uspostage.io/api/v1/shipping/verify-address \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{
"address": {
"name": "John Doe",
"street1": "123 Main Street",
"city": "San Francisco",
"state": "CA",
"zip": "94102",
"country": "US"
}
}'الاستجابة
{
"success": true,
"data": {
"verified": true,
"addressId": "adr_abc123",
"verifiedAddress": {
"name": "JOHN DOE",
"street1": "123 MAIN ST",
"city": "SAN FRANCISCO",
"state": "CA",
"zip": "94102-1234",
"country": "US"
},
"verification": {
"success": true,
"errors": []
}
}
}أسعار الشحن
احصل على أسعار الشحن الفورية من شركات نقل متعددة بما في ذلك USPS و UPS و FedEx و DHL.
/api/v1/shipping/ratesحساب أسعار الشحن للطرد
جسم الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| fromAddress | Address | مطلوب | كائن عنوان المرسل |
| toAddress | Address | مطلوب | كائن عنوان المستلم |
| packageDetails | Package | مطلوب | أبعاد ووزن الطرد |
| carriers | string[] | اختياري | تصفية حسب شركات نقل محددة |
| customsInfo | CustomsInfo | اختياري | مطلوب للشحنات الدولية |
كائن العنوان
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| name | string | مطلوب | الاسم الكامل |
| company | string | اختياري | اسم الشركة |
| street1 | string | مطلوب | سطر العنوان 1 |
| street2 | string | اختياري | سطر العنوان 2 |
| city | string | مطلوب | المدينة |
| state | string | مطلوب | رمز الولاية/المقاطعة |
| zip | string | مطلوب | الرمز البريدي |
| country | string | مطلوب | رمز البلد (US, CA, إلخ) |
| phone | string | اختياري | رقم الهاتف |
string | اختياري | البريد الإلكتروني |
كائن الطرد
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| length | number | مطلوب | الطول بالبوصة |
| width | number | مطلوب | العرض بالبوصة |
| height | number | مطلوب | الارتفاع بالبوصة |
| weight | number | مطلوب | الوزن بالأونصة |
كائن CustomsInfo
الشحنات الدولية
مطلوب عند الشحن دولياً.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| contents_type | string | مطلوب | نوع المحتويات |
| contents_explanation | string | اختياري | مطلوب عندما يكون contents_type هو 'other' |
| customs_certify | boolean | مطلوب | يجب أن يكون true - يشهد على دقة الإعلان |
| customs_signer | string | مطلوب | اسم الشخص المصادق على الإعلان الجمركي |
| eel_pfc | string | مطلوب | رمز إعفاء التصدير |
| non_delivery_option | string | مطلوب | ماذا تفعل إذا لم يمكن التسليم: 'return' أو 'abandon' |
| restriction_type | string | مطلوب | نوع القيد |
| restriction_comments | string | اختياري | مطلوب عندما لا يكون restriction_type هو 'none' |
| customs_items | CustomsItem[] | مطلوب | مصفوفة العناصر المشحونة (1-100 عنصر) |
كائن CustomsItem
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| description | string | مطلوب | وصف تفصيلي للعنصر |
| quantity | number | مطلوب | عدد العناصر (الحد الأدنى: 1) |
| value | number | مطلوب | القيمة بالدولار الأمريكي |
| weight | number | مطلوب | الوزن بالأونصة |
| origin_country | string | مطلوب | رمز البلد المكون من حرفين |
| hs_tariff_number | string | مطلوب | رمز التعريفة الجمركية HS |
مثال على الطلب
curl -X POST https://uspostage.io/api/v1/shipping/rates \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{
"fromAddress": {
"name": "John Doe",
"street1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zip": "94102",
"country": "US"
},
"toAddress": {
"name": "Jane Smith",
"street1": "456 Oak Ave",
"city": "Los Angeles",
"state": "CA",
"zip": "90001",
"country": "US"
},
"packageDetails": {
"length": 10,
"width": 8,
"height": 4,
"weight": 16
}
}'الاستجابة
{
"success": true,
"data": {
"shipmentId": "shp_abc123",
"rates": [
{
"id": "rate_xyz789",
"carrier": "USPS",
"service": "Priority Mail",
"rate": 8.95,
"currency": "USD",
"delivery_days": 2,
"delivery_date": "2024-01-15"
},
{
"id": "rate_def456",
"carrier": "UPS",
"service": "Ground",
"rate": 12.50,
"currency": "USD",
"delivery_days": 5,
"delivery_date": "2024-01-18"
}
]
}
}مثال على الشحن الدولي
للشحنات الدولية، قم بتضمين كائن customsInfo مع إعلانات العناصر:
curl -X POST https://uspostage.io/api/v1/shipping/rates \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{
"fromAddress": {
"name": "John Doe",
"street1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zip": "94102",
"country": "US",
"phone": "4155551234"
},
"toAddress": {
"name": "Jane Smith",
"street1": "456 Queen St W",
"city": "Toronto",
"state": "ON",
"zip": "M5V 2A8",
"country": "CA",
"phone": "4165551234"
},
"packageDetails": {
"length": 10,
"width": 8,
"height": 4,
"weight": 16
},
"customsInfo": {
"contents_type": "merchandise",
"customs_certify": true,
"customs_signer": "John Doe",
"eel_pfc": "NOEEI 30.37(a)",
"non_delivery_option": "return",
"restriction_type": "none",
"customs_items": [
{
"description": "Cotton T-Shirt",
"quantity": 2,
"value": 25.00,
"weight": 8,
"origin_country": "US",
"hs_tariff_number": "6109100010"
}
]
}
}'إنشاء طلب
إنشاء وإدارة طلبات الشحن. تحتوي الطلبات على عنصر واحد أو أكثر من ملصقات الشحن.
/api/v1/ordersعرض جميع الطلبات
/api/v1/ordersإنشاء طلب جديد
/api/v1/orders/{id}الحصول على تفاصيل الطلب
قائمة الطلبات - معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| limit | number | اختياري | عدد النتائج (افتراضي: 50، الحد الأقصى: 100) |
| offset | number | اختياري | إزاحة الترقيم |
إنشاء طلب - جسم الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| items | OrderItem[] | مطلوب | مصفوفة عناصر الطلب |
string | اختياري | بريد العميل الإلكتروني | |
| externalReference | string | اختياري | معرف المرجع الخاص بك |
كائن OrderItem
API مبسطة
فقط shipmentId و rateId مطلوبان. يتم استخراج العناوين وتفاصيل الطرد ومعلومات الجمارك تلقائياً من الشحنة.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| shipmentId | string | مطلوب | معرف الشحنة من نقطة النهاية rates |
| rateId | string | مطلوب | معرف السعر من نقطة النهاية rates |
مثال: إنشاء طلب
curl -X POST https://uspostage.io/api/v1/orders \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{
"items": [
{
"shipmentId": "shp_abc123",
"rateId": "rate_xyz789"
}
],
"externalReference": "ORDER-12345"
}'الاستجابة
{
"success": true,
"data": {
"orderId": "ord_abc123",
"trackingId": "USP-12345678",
"totalAmount": 8.95,
"paymentStatus": "pending",
"items": [
{
"orderItemId": "item_xyz789",
"rateId": "rate_xyz789"
}
]
}
}شراء الملصقات
شراء ملصقات الشحن لجميع عناصر الطلب. يتم شراء الملصقات باستخدام رصيد محفظتك (BTC, LTC أو LTCT).
/api/v1/labels/purchaseشراء ملصقات الشحن لطلب
جسم الطلب
الدفع بالعملات المشفرة
ستقوم API بتحويل تكلفة الملصق بالدولار إلى العملة المشفرة بالأسعار الحالية. يجب أن يكون لديك رصيد كافٍ (بما في ذلك 10% احتياطي لتقلبات الأسعار).
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| orderId | string | مطلوب | معرف الطلب لشراء الملصقات |
| currency | string | اختياري | العملة المشفرة للدفع (BTC, LTC, LTCT). إذا لم يتم تحديدها، يتم اختيار أول عملة برصيد كافٍ تلقائياً. |
مثال على الطلب
curl -X POST https://uspostage.io/api/v1/labels/purchase \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{
"orderId": "ord_abc123",
"currency": "BTC"
}'الاستجابة
{
"success": true,
"data": {
"orderId": "ord_abc123",
"externalReference": "ORDER-12345",
"totalLabels": 2,
"successCount": 2,
"failCount": 0,
"labels": [
{
"orderItemId": "item_xyz789",
"success": true,
"trackingCode": "9400111899223456789012",
"labelUrl": "https://easypost.com/labels/lbl_abc123.pdf",
"carrier": "USPS",
"service": "Priority Mail",
"labelFormats": {
"pdf": "https://easypost.com/labels/lbl_abc123.pdf",
"png": "https://easypost.com/labels/lbl_abc123.png"
}
},
{
"orderItemId": "item_def456",
"success": true,
"trackingCode": "9400111899223456789013",
"labelUrl": "https://easypost.com/labels/lbl_def456.pdf",
"carrier": "FedEx",
"service": "Ground",
"labelFormats": {
"pdf": "https://easypost.com/labels/lbl_def456.pdf"
}
}
]
}
}402 رصيد غير كافٍ
إذا كان رصيد محفظتك منخفضاً جداً، تُرجع API حالة 402 مع المبلغ المطلوب بالعملة المشفرة.
استجابة الرصيد غير الكافي
{
"success": false,
"error": "Insufficient balance",
"message": "Need 0.00011000 BTC (includes 10% buffer), have 0.00005000",
"currency": "BTC",
"required": 0.00011000,
"requiredUsd": 5.50,
"available": 0.00005000,
"balanceEndpoint": "/api/v1/account/balance"
}التتبع
تتبع الشحنات باستخدام رمز التتبع من الملصقات المشتراة.
/api/v1/tracking/{code}الحصول على معلومات التتبع
معاملات المسار
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| code | string | مطلوب | رمز التتبع |
مثال على الطلب
curl -X GET https://uspostage.io/api/v1/tracking/9400111899223456789012 \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret"الاستجابة
{
"success": true,
"data": {
"trackingCode": "9400111899223456789012",
"carrier": "USPS",
"status": "in_transit",
"statusDetail": "In Transit to Next Facility",
"estDeliveryDate": "2024-01-15T00:00:00Z",
"publicUrl": "https://tools.usps.com/go/TrackConfirmAction?tLabels=9400111899223456789012",
"trackingDetails": [
{
"status": "in_transit",
"message": "In Transit to Next Facility",
"datetime": "2024-01-12T14:30:00Z",
"location": "San Francisco, CA"
},
{
"status": "accepted",
"message": "Accepted at USPS Origin Facility",
"datetime": "2024-01-11T09:15:00Z",
"location": "San Francisco, CA"
}
],
"updatedAt": "2024-01-12T14:30:00Z"
}
}Webhooks
تلقي إشعارات فورية عند حدوث أحداث مثل إنشاء الملصقات أو تحديثات التتبع.
/api/v1/webhooksعرض webhooks المسجلة
/api/v1/webhooksتسجيل webhook جديد
/api/v1/webhooks/{id}الحصول على تفاصيل webhook
/api/v1/webhooks/{id}حذف webhook
الأحداث المتاحة
label.createdعند شراء ملصق بنجاح
label.failedعند فشل إنشاء الملصق
تسجيل Webhook - جسم الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
| webhookUrl | string | مطلوب | عنوان URL لاستقبال أحداث webhook |
| events | string[] | مطلوب | مصفوفة أنواع الأحداث للاشتراك |
مثال: تسجيل Webhook
curl -X POST https://uspostage.io/api/v1/webhooks \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{
"webhookUrl": "https://yoursite.com/webhooks/uspostage",
"events": ["label.created", "label.failed"]
}'الاستجابة
{
"success": true,
"data": {
"id": "whk_abc123",
"webhookUrl": "https://yoursite.com/webhooks/uspostage",
"events": ["label.created", "label.failed"],
"secret": "whsec_abc123xyz789..."
}
}التحقق من توقيع Webhook
كل webhook يتضمن رأس توقيع للتحقق. تحقق من التوقيع باستخدام HMAC-SHA256:
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}مثال على حمولة Webhook
{
"event": "label.created",
"timestamp": "2024-01-12T14:30:00Z",
"data": {
"orderId": "ord_abc123",
"orderItemId": "item_xyz789",
"externalReference": "ORDER-12345",
"label": {
"trackingCode": "9400111899223456789012",
"carrier": "USPS",
"service": "Priority Mail",
"labelUrl": "https://uspostage.io/labels/lbl_abc123.pdf"
}
}
}