انتقل إلى المحتوى
التوثيق

عمليات الحساب

تغطي نقاط النهاية هذه الأرصدة وعمليات الاسترداد والسحب والرد على النزاعات. وتستخدم المفاتيح والدوال المساعدة للطلبات نفسها المستخدمة في نقاط نهاية الدفع.

نقطة النهايةالغرض
GET /api/account/balanceالرصيد
GET /api/account/available-balanceالرصيد القابل للسحب
POST /api/account/refundsاسترداد دفعة أو إبطالها
GET /api/account/refunds[/{id}]سرد عمليات الاسترداد أو الاستعلام عنها
POST /api/account/withdrawalsطلب سحب USDT
GET /api/account/withdrawals[/{id}]سرد عمليات السحب أو الاستعلام عنها
GET /api/account/disputes[/{id}]سرد النزاعات أو الاستعلام عنها
POST /api/account/disputes/{id}/evidenceالرد على نزاع

الاصطلاحات

  • يعمل التوقيع والترويسات وIdempotency-Key على النحو الموضح في المصادقة.
  • يُعاد العنصر الواحد ككائن JSON عادي؛ وتُعاد القوائم بالصيغة { "data": [...], "meta": {...} }.
  • تستخدم معرّفات الدفع والاسترداد والسحب والنزاعات الصيغة LUVEI-ABCD-123456. احتفظ بالمعرّف كاملاً.
  • تستخدم الأرصدة وعمليات السحب العملة الرئيسية للنظام؛ بينما تستخدم عمليات الاسترداد والنزاعات عملة الدفعة.
  • يعني 201 أو 202 أن الطلب قد قُبل، لا أنه اكتمل. وتابع الحالة أو إشعارات Webhook.
  • لاختبار النتائج بالمفتاح التجريبي، راجع البيئة التجريبية والبطاقات التجريبية.

تقسيم النتائج إلى صفحات

الحقلالنوعإلزاميالوصف
pageinteger · queryاختياريرقم الصفحة، بدءًا من 1.
per_pageinteger · queryاختياريعدد العناصر في الصفحة، من 1 إلى 100. القيمة الافتراضية: 20.
statusstring · queryاختيارييُعيد العناصر ذات هذه الحالة فقط.
الحقلالنوعالوصف
pageintegerالصفحة الحالية.
per_pageintegerعدد العناصر في الصفحة.
totalintegerعدد العناصر المطابقة.
total_pagesintegerعدد الصفحات (0 إذا كانت القائمة فارغة).

تُرتَّب العناصر من الأحدث إلى الأقدم. وتُعيد الصفحة التي تلي الصفحة الأخيرة 200 مع data فارغة. وتُعيد قيمة page الأقل من 1، أو per_page الواقعة خارج النطاق 1–100، أو status غير المعروفة، أو أي معلمة غير معروفة الرمز 422 1000001. ولا تتوفر عوامل تصفية حسب التاريخ.

استجابة قائمة · مثال

{
  "data": [
    {
      "id": "LUVEI-RFND-100001",
      "operation": "refund",
      "status": "requested",
      "amount": "100.00",
      "currency": "USD",
      "reason": "Customer requested a full refund",
      "provider_reference": null,
      "provider_refunded_at": null,
      "created_at": "2026-11-02T09:00:00.000Z",
      "updated_at": null,
      "payment_id": "LUVEI-PAYN-123456",
      "environment": "live"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}
GET/api/account/balance

الرصيد

استعلم عن رصيدك وعن المبلغ المتاح للسحب حاليًا. وكلا الاستدعاءين للقراءة فقط، ويعرضان محفظة API الخاصة بك، التي تضم الأموال المحصّلة عبر واجهة API هذه. ولا تُعرض المحافظ الأخرى في لوحة التحكم ولا تُحتسب ضمنها.

الحقلالنوعالوصف
currency_codestringعملة جميع المبالغ: العملة الرئيسية للنظام.
available_amountstringالأموال المسوّاة في محفظة API الخاصة بك والمتاحة للاستخدام حاليًا. ولا تشمل المبالغ غير المسوّاة والمبالغ المعلّقة.
pending_settlement_amountstringأموال من مدفوعات لم تُسوَّ بعد. وتكون دائمًا 0.00 في البيئة التجريبية.
environmentstringsandbox أو live.
./payniko.sh GET '/api/account/balance'
import {api} from './payniko.mjs';

const balance = await api('GET', '/api/account/balance');
console.log(balance);
<?php
require __DIR__ . '/payniko.php';

$balance = payniko_api('GET', '/api/account/balance');
print_r($balance);
from payniko import api

balance = api("GET", "/api/account/balance")
print(balance)

الاستجابة · مثال

{
  "currency_code": "USD",
  "available_amount": "1250.00",
  "pending_settlement_amount": "300.00",
  "environment": "live"
}

تُحوَّل المدفوعات بالعملات الأخرى إلى العملة الرئيسية. ولا تتضمن هذه الاستجابة الرسوم ومواعيد التسوية.

GET/api/account/available-balance

الرصيد القابل للسحب

الحقلالنوعالوصف
currency_codestringالعملة الرئيسية للنظام.
withdrawable_amountstringالأموال المسوّاة في محفظة API الخاصة بك والقابلة للسحب حاليًا. وهو المبلغ نفسه الذي يتيح لك POST /api/account/withdrawals سحبه.
can_withdrawbooleanfalse ما دام أي من أرصدتك سالبًا، وفي هذه الحالة يتعذّر السحب. ولا تضمن true إتمام السحب.
environmentstringsandbox أو live.
./payniko.sh GET '/api/account/available-balance'
import {api} from './payniko.mjs';

const available = await api('GET', '/api/account/available-balance');
console.log(available);
<?php
require __DIR__ . '/payniko.php';

$available = payniko_api('GET', '/api/account/available-balance');
print_r($available);
from payniko import api

available = api("GET", "/api/account/available-balance")
print(available)

الاستجابة · مثال

{
  "currency_code": "USD",
  "withdrawable_amount": "1250.00",
  "can_withdraw": true,
  "environment": "live"
}

لا يشمل المبالغ المحجوزة لعمليات سحب مفتوحة، والأموال غير المسوّاة، والمبالغ المعلّقة. ويُتحقق من الرصيد مجددًا عند طلب السحب، لذا قد يفشل الطلب مع ذلك بالرمز 409 9000020.

POST/api/account/refundsيتطلب Idempotency-Key

طلب استرداد أو إبطال

أعِد المبلغ الكامل لدفعة ناجحة إلى العميل. ويراجع Payniko كل طلب ويعالجه؛ ولا يؤكد 202 سوى قبول الطلب.

متن الطلب

الحقلالنوعإلزاميالوصفمثال
payment_idstring · LUVEI-ABCD-123456إلزاميدفعة في الحالة succeeded أُنشئت عبر /api/payments في البيئة نفسها. ويُعيد أي معرّف آخر 404 9000009.LUVEI-PAYN-123456
operation_typestringإلزاميالعملية المطلوبة.
refundvoid
refund
reasonstringإلزاميمن 3 إلى 500 حرف. ويراجعه فريق العمليات في Payniko.Customer requested a full refund

لا يوجد حقل للمبلغ؛ إذ يُعاد مبلغ الدفعة كاملًا. ولا يمكن أن يكون للدفعة سوى عملية استرداد أو إبطال واحدة في الوقت نفسه. وما دامت إحداها مفتوحة أو مكتملة، أو ما دام على الدفعة نزاع لم يُحسم لصالحك، يُعيد أي طلب جديد 409 9000014.

KEY="$(openssl rand -hex 16)"  # store with the order before sending; reuse it after network errors
./payniko.sh POST '/api/account/refunds' '{
  "payment_id": "LUVEI-PAYN-123456",
  "operation_type": "refund",
  "reason": "Customer requested a full refund"
}' "$KEY"
import {api, randomUUID} from './payniko.mjs';

const key = randomUUID(); // Store this key with the order before sending; reuse it after network errors.
const refund = await api('POST', '/api/account/refunds', {
  "payment_id": "LUVEI-PAYN-123456",
  "operation_type": "refund",
  "reason": "Customer requested a full refund"
}, key);
console.log(refund);
<?php
require __DIR__ . '/payniko.php';

$key = bin2hex(random_bytes(16)); // store with the order; reuse it after network errors
$refund = payniko_api('POST', '/api/account/refunds', [
    "payment_id" => 'LUVEI-PAYN-123456',
    "operation_type" => 'refund',
    "reason" => 'Customer requested a full refund',
], $key);
print_r($refund);
from payniko import api
import uuid

key = str(uuid.uuid4())  # store with the order; reuse it after network errors
refund = api("POST", "/api/account/refunds", {
    "payment_id": "LUVEI-PAYN-123456",
    "operation_type": "refund",
    "reason": "Customer requested a full refund"
}, key)
print(refund)

الاستجابة · مثال

{
  "id": "LUVEI-RFND-100001",
  "operation": "refund",
  "status": "requested",
  "amount": "100.00",
  "currency": "USD",
  "reason": "Customer requested a full refund",
  "provider_reference": null,
  "provider_refunded_at": null,
  "created_at": "2026-11-02T09:00:00.000Z",
  "updated_at": null,
  "payment_id": "LUVEI-PAYN-123456",
  "environment": "live"
}

الاستجابة · 202

يُعيد عملية الاسترداد. وتؤدي إعادة إرسال المفتاح والمتن نفسيهما إلى إعادة 202 مع عملية الاسترداد نفسها.

الأخطاء المحتملة

سرد عمليات الاسترداد والاستعلام عنها

./payniko.sh GET '/api/account/refunds?status=completed&page=1&per_page=20'
import {api} from './payniko.mjs';

const refunds = await api('GET', '/api/account/refunds?status=completed&page=1&per_page=20');
console.log(refunds);
<?php
require __DIR__ . '/payniko.php';

$refunds = payniko_api('GET', '/api/account/refunds?status=completed&page=1&per_page=20');
print_r($refunds);
from payniko import api

refunds = api("GET", "/api/account/refunds?status=completed&page=1&per_page=20")
print(refunds)
الحقلالنوعإلزاميالوصف
pageinteger · queryاختياريرقم الصفحة، بدءًا من 1.
per_pageinteger · queryاختياريعدد العناصر في الصفحة، من 1 إلى 100. القيمة الافتراضية: 20.
statusstring · queryاختيارييُعيد عمليات الاسترداد ذات هذه الحالة فقط.
operation_typestring · queryاختياريrefund أو void.

يُعيد GET /api/account/refunds/{id} عملية استرداد واحدة (404 9000009 إذا لم تكن موجودة). وتتضمن القائمة عمليات الاسترداد المطلوبة عبر واجهة API.

كائن الاسترداد

الحقلالنوعالوصف
idstring · LUVEI-ABCD-123456معرّف عملية الاسترداد.
operationstringrefund أو void، كما أُرسلت في operation_type.
statusstringراجع الجدول أدناه.
amountstringالمبلغ الكامل للدفعة.
currencystringعملة الدفعة.
reasonstringالسبب المذكور في الطلب.
provider_referencestring | nullمرجع عملية الاسترداد المعالجة، عند توفره.
provider_refunded_atstring · date-time | nullوقت معالجة عملية الاسترداد، إن كان معروفًا.
created_atstring · date-timeوقت الطلب.
updated_atstring · date-time | nullوقت آخر تغيير.
payment_idstring · LUVEI-ABCD-123456 | nullالدفعة المستردّة.
environmentstringsandbox أو live.
الحالةالمعنى
requestedمقبولة ولم تُعالج بعد.
processingقيد المعالجة.
awaiting_provider_manualيجري استكمالها يدويًا؛ وقد يستغرق ذلك وقتًا أطول.
completedمكتملة. حالة نهائية.
rejectedمرفوضة. حالة نهائية.
failedفاشلة. حالة نهائية.
cancelledملغاة. حالة نهائية.

يُعيد GET /api/account/refunds/{id} الحالة الحالية دائمًا. كما تُرسل النتيجة في إشعار Webhook.

POST/api/account/withdrawalsيتطلب Idempotency-Key

طلب سحب

اسحب الأموال من محفظة API الخاصة بك بعملة USDT على شبكة TRON (TRC20). ويُحجز المبلغ ثم يُرسل بعد المراجعة.

متن الطلب

الحقلالنوعإلزاميالوصفمثال
amountstringإلزاميبمنزلتين عشريتين، على سبيل المثال 50.00؛ ويجب ألا يكون 0.00 وألا يقل عن الحد الأدنى المحدد لك. ويجب أن يظل، مع عمليات السحب المطلوبة والمرسلة اليوم، ضمن حدك اليومي."50.00"
addressstringإلزاميعنوان TRC20: يتكون من 34 حرفًا، ويبدأ بـ T، ويتضمن مجموعًا اختباريًا صالحًا.YOUR_VERIFIED_TRC20_ADDRESS
address_acknowledgedbooleanإلزامييجب أن تكون القيمة true، تأكيدًا لصحة العنوان.true
webhook_urlstring · uriإلزامينقطة النهاية التي تستقبل إشعارات Webhook الخاصة بعملية السحب هذه. وتسري القواعد نفسها المطبقة على المدفوعات.https://merchant.example/webhooks/withdrawals

لا يُسمح بـ success_url وfail_url في هذا الطلب.

# Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
KEY="$(openssl rand -hex 16)"  # store with the order before sending; reuse it after network errors
./payniko.sh POST '/api/account/withdrawals' '{
  "amount": "50.00",
  "address": "YOUR_VERIFIED_TRC20_ADDRESS",
  "address_acknowledged": true,
  "webhook_url": "https://merchant.example/webhooks/withdrawals"
}' "$KEY"
import {api, randomUUID} from './payniko.mjs';

// Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
const key = randomUUID(); // Store this key with the order before sending; reuse it after network errors.
const withdrawal = await api('POST', '/api/account/withdrawals', {
  "amount": "50.00",
  "address": "YOUR_VERIFIED_TRC20_ADDRESS",
  "address_acknowledged": true,
  "webhook_url": "https://merchant.example/webhooks/withdrawals"
}, key);
console.log(withdrawal);
<?php
require __DIR__ . '/payniko.php';

// Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
$key = bin2hex(random_bytes(16)); // store with the order; reuse it after network errors
$withdrawal = payniko_api('POST', '/api/account/withdrawals', [
    "amount" => '50.00',
    "address" => 'YOUR_VERIFIED_TRC20_ADDRESS',
    "address_acknowledged" => true,
    "webhook_url" => 'https://merchant.example/webhooks/withdrawals',
], $key);
print_r($withdrawal);
from payniko import api
import uuid

# Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
key = str(uuid.uuid4())  # store with the order; reuse it after network errors
withdrawal = api("POST", "/api/account/withdrawals", {
    "amount": "50.00",
    "address": "YOUR_VERIFIED_TRC20_ADDRESS",
    "address_acknowledged": True,
    "webhook_url": "https://merchant.example/webhooks/withdrawals"
}, key)
print(withdrawal)

الاستجابة · مثال

{
  "id": "LUVEI-WTHD-100002",
  "status": "requested",
  "amount": "50.00",
  "currency": "USD",
  "asset": "USDT",
  "network": "TRC20",
  "address": "YOUR_VERIFIED_TRC20_ADDRESS",
  "usdt_amount": "49.950000",
  "tx_hash": null,
  "rejection_reason": null,
  "requested_at": "2026-11-02T10:00:00.000Z",
  "processed_at": null,
  "created_at": "2026-11-02T10:00:00.000Z",
  "environment": "live"
}

الاستجابة · 201

يُعيد عملية السحب مع حالتها، وهي عادةً requested. وتؤدي إعادة إرسال المفتاح والمتن نفسيهما إلى إعادة 201 مع عملية السحب نفسها.

الأخطاء المحتملة

سرد عمليات السحب والاستعلام عنها

./payniko.sh GET '/api/account/withdrawals?status=requested&page=1&per_page=20'
import {api} from './payniko.mjs';

const withdrawals = await api('GET', '/api/account/withdrawals?status=requested&page=1&per_page=20');
console.log(withdrawals);
<?php
require __DIR__ . '/payniko.php';

$withdrawals = payniko_api('GET', '/api/account/withdrawals?status=requested&page=1&per_page=20');
print_r($withdrawals);
from payniko import api

withdrawals = api("GET", "/api/account/withdrawals?status=requested&page=1&per_page=20")
print(withdrawals)

صفِّ النتائج حسب status. ويُعيد GET /api/account/withdrawals/{id} عملية سحب واحدة (404 9000023 إذا لم تكن موجودة).

كائن السحب

الحقلالنوعالوصف
idstring · LUVEI-ABCD-123456معرّف عملية السحب.
statusstringراجع الجدول أدناه.
requestedsentrejected
amountstringالمبلغ المطلوب بالعملة الرئيسية.
currencystringالعملة الرئيسية.
assetstringدائمًا USDT.
networkstringدائمًا TRC20.
addressstringعنوان الوجهة.
usdt_amountstringمبلغ USDT المراد إرساله (ست منازل عشرية).
tx_hashstring | nullقيمة تجزئة المعاملة على سلسلة الكتل، بمجرد معرفتها.
rejection_reasonstring | nullسبب الرفض.
requested_atstring · date-timeوقت الطلب.
processed_atstring · date-time | nullوقت إرسال عملية السحب أو رفضها.
created_atstring · date-timeوقت الإنشاء.
environmentstringsandbox أو live.
الحالةالمعنى
requestedأُنشئت؛ والمبلغ محجوز ولم يُرسل بعد.
sentأُرسلت. حالة نهائية. وقد تكون قيمة tx_hash في البداية null ثم تُضاف لاحقًا.
rejectedلم تُرسل؛ ويُعاد المبلغ المحجوز إلى رصيدك المتاح. راجع rejection_reason. حالة نهائية.

يرسل فريق Payniko كل عملية سحب أو يرفضها، ثم يعيّن processed_at، إلى جانب tx_hash أو rejection_reason. وأثناء الصيانة، قد يُعيد طلب السحب الجديد 503 1000014.

GET/api/account/disputes

سرد النزاعات والاستعلام عنها

يُفتح النزاع (Chargeback) عندما يعترض حامل البطاقة على دفعة لدى بنكه. وعند فتح النزاع، يُخصم المبلغ عادةً من رصيدك؛ ويُعاد إليك إذا حُسم النزاع لصالحك، ويظل مخصومًا إذا حُسم ضدك. وردّ على النزاع قبل الموعد النهائي.

./payniko.sh GET '/api/account/disputes?status=open&page=1&per_page=20'
import {api} from './payniko.mjs';

const disputes = await api('GET', '/api/account/disputes?status=open&page=1&per_page=20');
console.log(disputes);
<?php
require __DIR__ . '/payniko.php';

$disputes = payniko_api('GET', '/api/account/disputes?status=open&page=1&per_page=20');
print_r($disputes);
from payniko import api

disputes = api("GET", "/api/account/disputes?status=open&page=1&per_page=20")
print(disputes)

الاستجابة · مثال

{
  "data": [
    {
      "id": "LUVEI-DSPT-100003",
      "service": "api",
      "amount": "100.00",
      "currency": "USD",
      "status": "open",
      "reason": "product_not_delivered",
      "reason_note": null,
      "occurred_on": "2026-11-03",
      "evidence_due_at": "2026-11-10T09:00:00.000Z",
      "evidence_submitted_at": null,
      "merchant_evidence_note": null,
      "merchant_evidence_submitted_at": null,
      "resolved_at": null,
      "created_at": "2026-11-03T09:00:00.000Z",
      "payment_id": "LUVEI-PAYN-123456",
      "environment": "sandbox"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}

صفِّ النتائج حسب status. ويُعيد GET /api/account/disputes/{id} نزاعًا واحدًا (404 9000015 إذا لم يكن موجودًا). وتتضمن القائمة جميع النزاعات على حسابك؛ ويُعيَّن payment_id عندما يتعلق النزاع بدفعة عبر واجهة API.

كائن النزاع

الحقلالنوعالوصف
idstring · LUVEI-ABCD-123456معرّف النزاع.
servicestringمصدر الدفعة، على سبيل المثال api.
amountstringالمبلغ المتنازع عليه بعملة الدفعة.
currencystringعملة الدفعة.
statusstringراجع الجدول أدناه.
openunder_reviewwonlost
reasonstringالسبب الذي قدّمه البنك. وتعامل كذلك مع القيم غير المعروفة.
fraudunauthorizedproduct_not_deliveredduplicateamount_mismatchother
reason_notestring | nullملاحظة من البنك، إن وُجدت.
occurred_onstring · dateتاريخ النزاع (YYYY-MM-DD).
evidence_due_atstring · date-time | nullالموعد النهائي لردّك.
evidence_submitted_atstring · date-time | nullوقت تقديم الدفاع إلى البنك.
merchant_evidence_notestring | nullأحدث ردّ قدّمته.
merchant_evidence_submitted_atstring · date-time | nullوقت تقديم ردّك.
resolved_atstring · date-time | nullوقت حسم النزاع.
created_atstring · date-timeوقت الإنشاء.
payment_idstring · LUVEI-ABCD-123456 | nullدفعة API المتنازع عليها؛ وإلا null.
environmentstringsandbox أو live.
الحالةالمعنى
openنزاع جديد. يمكنك الرد حتى evidence_due_at.
under_reviewقُدّم الدفاع إلى البنك والقرار قيد الانتظار. ولا يزال بإمكانك الرد حتى الموعد النهائي.
wonحُسم لصالحك. حالة نهائية.
lostحُسم ضدك. حالة نهائية.
POST/api/account/disputes/{id}/evidenceيتطلب Idempotency-Key

الرد على نزاع

متن الطلب

الحقلالنوعإلزاميالوصف
notestringإلزاميردّك، من 3 إلى 4000 حرف: تفاصيل تسليم طلب الشراء، والتواصل مع العميل، والأدلة المتوفرة لديك.
KEY="$(openssl rand -hex 16)"  # store with the order before sending; reuse it after network errors
./payniko.sh POST '/api/account/disputes/LUVEI-DSPT-100003/evidence' '{
  "note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available."
}' "$KEY"
import {api, randomUUID} from './payniko.mjs';

const key = randomUUID(); // Store this key with the order before sending; reuse it after network errors.
const dispute = await api('POST', '/api/account/disputes/LUVEI-DSPT-100003/evidence', {
  "note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available."
}, key);
console.log(dispute);
<?php
require __DIR__ . '/payniko.php';

$key = bin2hex(random_bytes(16)); // store with the order; reuse it after network errors
$dispute = payniko_api('POST', '/api/account/disputes/LUVEI-DSPT-100003/evidence', [
    "note" => 'The order was delivered on 2026-10-28; tracking number and signed receipt are available.',
], $key);
print_r($dispute);
from payniko import api
import uuid

key = str(uuid.uuid4())  # store with the order; reuse it after network errors
dispute = api("POST", "/api/account/disputes/LUVEI-DSPT-100003/evidence", {
    "note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available."
}, key)
print(dispute)

الاستجابة · مثال

{
  "id": "LUVEI-DSPT-100003",
  "service": "api",
  "amount": "100.00",
  "currency": "USD",
  "status": "open",
  "reason": "product_not_delivered",
  "reason_note": null,
  "occurred_on": "2026-11-03",
  "evidence_due_at": "2026-11-10T09:00:00.000Z",
  "evidence_submitted_at": null,
  "merchant_evidence_note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available.",
  "merchant_evidence_submitted_at": "2026-11-04T08:00:00.000Z",
  "resolved_at": null,
  "created_at": "2026-11-03T09:00:00.000Z",
  "payment_id": "LUVEI-PAYN-123456",
  "environment": "sandbox"
}

الاستجابة · 200

يُعيد النزاع متضمنًا ملاحظتك.

  • لا يُقبل الرد إلا ما دام النزاع في الحالة open أو under_review وقبل evidence_due_at؛ وإلا يُعيد الطلب 409 9000016.
  • يحل الطلب الجديد الذي يحمل Idempotency-Key جديدًا محل ملاحظتك السابقة.
  • لا تدعم واجهة API رفع الملفات. وصِف الأدلة المتوفرة في الملاحظة.

الأخطاء المحتملة

لاختبار النزاعات بالمفتاح التجريبي، أنشئ نزاعًا باستخدام POST /api/sandbox/disputes.