مرجع API
صادق بمفتاح API، أنشئ الفواتير وثبّتها، وأدر العملاء والفواتير المتكررة. كل نقطة نهاية أدناه تعمل في الإنتاج.
https://hisab.ma/api/v1واجهة حساب هي API REST بصيغة JSON عبر HTTPS. كل طلب يُصادَق بمفتاح API ويقتصر على مؤسستك.
https://hisab.ma/api/v1الطلبات محدودة في الدقيقة لكل مفتاح API. عند التجاوز تعيد الواجهة 429 RATE_LIMIT_EXCEEDED مع ترويسة Retry-After.
| العرض | الطلبات | مفاتيح API |
|---|---|---|
| Professional | 120 req/min | 10 |
| Fiduciaire | 300 req/min | غير محدودة |
كل استجابة تُظهر استهلاكك الحالي في هذه الترويسات:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 119
X-RateLimit-Reset: 1780750800تُنشأ مفاتيح API من لوحة التحكم: الإعدادات ثم مفاتيح API. تختار الصلاحيات عند الإنشاء، ويُعرض السر الكامل مرة واحدة فقط.
أرسل المفتاح كرمز Bearer في ترويسة Authorization:
curl https://hisab.ma/api/v1/invoices \
-H "Authorization: Bearer hisab_live_***"hisab_live_***مفتاح إنتاج. يعمل على بياناتك الحقيقية.
hisab_test_***مفتاح اختبار. نفس الصيغة، لبيئات التجريب.
تُخزن المفاتيح مُجزأة (SHA-256) لدينا ويمكن إلغاؤها في أي وقت من لوحة التحكم. استجابة 401 تعني أن المفتاح مفقود أو غير صالح أو مُلغى:
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key"
}
}كل مفتاح يحمل قائمة صريحة من الصلاحيات. الطلب الذي يتطلب صلاحية غير موجودة يعيد 403 FORBIDDEN مع الصلاحيات المطلوبة في تفاصيل الخطأ.
invoices:readinvoices:writeinvoices:finalizeinvoices:sendinvoices:paymentinvoices:voidinvoices:exportrecurring:readrecurring:writerecurring:deletecustomers:readcustomers:writecustomers:deleteorganization:readorganization:writewebhooks:readwebhooks:writeorganizations:readorganizations:writeorganizations:archiveعند إنشاء مفتاح تقترح لوحة التحكم ثلاث حزم (قراءة فقط، فوترة، وصول كامل)، ويمكنك دائماً اختيار الصلاحيات واحدة واحدة.
نقاط نهاية القوائم تقبل page وper_page (بحد أقصى 100) وتعيد كتلة pagination داخل meta:
{
"success": true,
"data": [ ... ],
"meta": {
"pagination": { "total": 128, "page": 1, "perPage": 20, "totalPages": 7 }
}
}كل الأخطاء بنفس الشكل: success تساوي false، وerror يحمل رمزاً ثابتاً ورسالة مقروءة وتفاصيل اختيارية لكل حقل. الرموز القياسية:
VALIDATION_ERROR | 400 |
INVALID_JSON | 400 |
UNAUTHORIZED | 401 |
FORBIDDEN | 403 |
API_DISABLED | 403 |
SUBSCRIPTION_EXPIRED | 403 |
API_TIER_NOT_SUPPORTED | 403 |
ORG_HEADER_REQUIRED | 400 |
ACCOUNT_KEY_REQUIRED | 403 |
ENTITY_CAP_REACHED | 403 |
NOT_FOUND | 404 |
RATE_LIMIT_EXCEEDED | 429 |
INTERNAL_ERROR | 500 |
يوقع حساب ويرسل حدثاً إلى نقطتك عند كل تغيير في فاتورة أو عميل. تُضبط Webhooks من لوحة التحكم: الإعدادات ثم Webhooks.
invoice.createdinvoice.updatedinvoice.finalizedinvoice.sentinvoice.paidinvoice.voidedcustomer.createdcustomer.updatedcustomer.deletedأنشئ مسودات فواتير، ثبّتها للحصول على الرقم الرسمي، ثم تتبع الإرسال والدفع والإلغاء. الفواتير المثبتة تُصدّر PDF وXML بصيغة UBL 2.1.
/api/v1/invoicesتعيد فواتير مؤسستك، الأحدث أولاً. رشّح حسب الحالة أو العميل أو تاريخ الإصدار.
invoices:readpage | integerdefault: 1 |
per_page | integerdefault: 20 (max 100) |
order | stringdefault: descascdesc |
status | stringdraftfinalizedsentpaidvoid |
customer_id | uuid |
date_from | date (YYYY-MM-DD) |
date_to | date (YYYY-MM-DD) |
curl https://hisab.ma/api/v1/invoices \
-H "Authorization: Bearer hisab_live_***"/api/v1/invoices/:idتعيد فاتورة واحدة مع عميلها وبنودها ومجاميعها.
invoices:readcurl https://hisab.ma/api/v1/invoices/{id} \
-H "Authorization: Bearer hisab_live_***"/api/v1/invoicesتنشئ مسودة. تُحسب المجاميع والضرائب على الخادم من البنود.
invoices:writeinvoice.createdcustomer_idrequired | uuid |
issue_daterequired | date (YYYY-MM-DD) |
due_date | date (YYYY-MM-DD) |
currency | stringdefault: MAD |
payment_terms | string |
notes | string |
internal_notes | string |
items[].descriptionrequired | string |
items[].quantityrequired | number |
items[].unit_pricerequired | number |
items[].tax_rate | numberdefault: 20 |
curl https://hisab.ma/api/v1/invoices \
-X POST \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cus_2b81fe",
"issue_date": "2026-06-05",
"items": [
{
"description": "Integration services",
"quantity": 8,
"unit_price": 1300,
"tax_rate": 20
}
]
}'/api/v1/invoices/:idتعدل مسودة. الفواتير المثبتة غير قابلة للتغيير؛ يعيد الاستدعاء INVOICE_NOT_EDITABLE.
invoices:writeinvoice.updatedcustomer_id | uuid |
issue_date | date (YYYY-MM-DD) |
due_date | date (YYYY-MM-DD) |
currency | string |
payment_terms | string |
notes | string |
items[].description | string |
items[].quantity | number |
items[].unit_price | number |
items[].tax_rate | numberdefault: 20 |
INVOICE_NOT_EDITABLEcurl https://hisab.ma/api/v1/invoices/{id} \
-X PATCH \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"due_date": "2026-08-05"
}'/api/v1/invoices/:id/finalizeيمنح الرقم التسلسلي الرسمي ويقفل الفاتورة. هذه خطوة الإصدار القانوني.
invoices:finalizeinvoice.finalizedINVOICE_NOT_DRAFTVALIDATION_ERRORcurl https://hisab.ma/api/v1/invoices/{id}/finalize \
-X POST \
-H "Authorization: Bearer hisab_live_***"/api/v1/invoices/:id/sendيسجل أن الفاتورة المثبتة سُلمت إلى العميل.
invoices:writeinvoice.sentINVALID_STATUS_TRANSITIONcurl https://hisab.ma/api/v1/invoices/{id}/send \
-X POST \
-H "Authorization: Bearer hisab_live_***"/api/v1/invoices/:id/payيسجل دفعة، مع طريقة ومرجع اختياريين.
invoices:writeinvoice.paidpaid_at | datetime (ISO 8601) |
payment_method | string |
payment_reference | string |
INVALID_STATUS_TRANSITIONcurl https://hisab.ma/api/v1/invoices/{id}/pay \
-X POST \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"payment_method": "bank_transfer",
"payment_reference": "VIR-20260605"
}'/api/v1/invoices/:id/voidيلغي فاتورة مثبتة بسبب إلزامي. الفاتورة المدفوعة لا يمكن إلغاؤها.
invoices:writeinvoice.voidedreasonrequired | string |
CANNOT_VOID_PAIDALREADY_VOIDEDcurl https://hisab.ma/api/v1/invoices/{id}/void \
-X POST \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"reason": "Duplicate billing"
}'/api/v1/invoices/:id/pdfيعيد ملف PDF المُتحقق منه بالفرنسية أو الإنجليزية أو العربية. متاح بعد التثبيت.
invoices:exportlocale | stringdefault: frfrenar |
PDF_NOT_AVAILABLEcurl https://hisab.ma/api/v1/invoices/{id}/pdf \
-H "Authorization: Bearer hisab_live_***"/api/v1/invoices/:id/xmlيعيد XML بصيغة UBL 2.1 للفاتورة المثبتة.
invoices:exportXML_NOT_AVAILABLEcurl https://hisab.ma/api/v1/invoices/{id}/xml \
-H "Authorization: Bearer hisab_live_***"عملاء B2B وB2C بمعرفات مغربية (ICE، السجل التجاري). الأرشفة تحافظ على سجل الفواتير.
/api/v1/customersتعيد العملاء، مع بحث في الاسم والبريد ورقم ICE.
customers:readpage | integerdefault: 1 |
per_page | integerdefault: 20 (max 100) |
order | stringdefault: descascdesc |
search | string |
type | stringb2bb2c |
status | stringactiveinactivearchived |
curl https://hisab.ma/api/v1/customers \
-H "Authorization: Bearer hisab_live_***"/api/v1/customers/:idيعيد عميلاً واحداً مع بيانات الاتصال والعنوان.
customers:readcurl https://hisab.ma/api/v1/customers/{id} \
-H "Authorization: Bearer hisab_live_***"/api/v1/customersعملاء B2B يجب أن يحملوا رقم ICE من 15 رقماً. تُرفض التكرارات داخل مؤسستك.
customers:writecustomer.creatednamerequired | string |
typerequired | stringb2bb2c |
ice | string (15 digits) |
legal_name | string |
rc | string |
email | string |
phone | string |
address.street | string |
address.city | string |
address.postal_code | string |
address.country | stringdefault: MA |
notes | string |
tags | string[] |
curl https://hisab.ma/api/v1/customers \
-X POST \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"name": "MERIT Sarl",
"type": "b2b",
"ice": "001234567000089",
"email": "compta@example.ma"
}'/api/v1/customers/:idتحديث جزئي: أرسل الحقول المتغيرة فقط.
customers:writecustomer.updatedname | string |
type | stringb2bb2c |
ice | string (15 digits) |
email | string |
phone | string |
address | object |
notes | string |
tags | string[] |
status | stringactiveinactivearchived |
curl https://hisab.ma/api/v1/customers/{id} \
-X PATCH \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"email": "finance@example.ma"
}'/api/v1/customers/:idحذف ناعم. يُؤرشف العميل ويبقى سجل فواتيره سليماً.
customers:deletecustomer.deletedALREADY_ARCHIVEDcurl https://hisab.ma/api/v1/customers/{id} \
-X DELETE \
-H "Authorization: Bearer hisab_live_***"جداول تولّد الفواتير تلقائياً، من أسبوعية إلى سنوية، مع تثبيت وإرسال تلقائيين اختياريين.
/api/v1/recurring-invoicesتعيد جداول الفواتير المتكررة. رشّح حسب الحالة أو العميل أو التكرار.
invoices:readpage | integerdefault: 1 |
per_page | integerdefault: 20 (max 100) |
order | stringdefault: descascdesc |
status | stringactivepausedcompletedcancelled |
customer_id | uuid |
frequency | stringweeklybiweeklymonthlyquarterlybiannuallyyearly |
search | string |
curl https://hisab.ma/api/v1/recurring-invoices \
-H "Authorization: Bearer hisab_live_***"/api/v1/recurring-invoices/:idيعيد جدولاً مع آخر سجل توليد.
invoices:readcurl https://hisab.ma/api/v1/recurring-invoices/{id} \
-H "Authorization: Bearer hisab_live_***"/api/v1/recurring-invoicesيحدد التكرار وتاريخ البداية وبنود الفواتير القادمة.
invoices:writecustomer_idrequired | uuid |
frequencyrequired | stringweeklybiweeklymonthlyquarterlybiannuallyyearly |
start_daterequired | date (YYYY-MM-DD) |
name | string |
interval_count | integer (1-12)default: 1 |
day_of_month | integer (1-28) |
day_of_week | integer (0-6) |
end_date | date (YYYY-MM-DD) |
max_occurrences | integer |
auto_finalize | booleandefault: false |
auto_send | booleandefault: false |
days_until_due | integer (0-365)default: 30 |
currency | stringdefault: MAD |
items[].descriptionrequired | string |
items[].quantityrequired | number |
items[].unit_pricerequired | number |
items[].tax_rate | numberdefault: 20 |
QUOTA_EXCEEDEDcurl https://hisab.ma/api/v1/recurring-invoices \
-X POST \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cus_2b81fe",
"frequency": "monthly",
"start_date": "2026-07-01",
"auto_finalize": true,
"items": [
{
"description": "Monthly retainer",
"quantity": 1,
"unit_price": 10400,
"tax_rate": 20
}
]
}'/api/v1/recurring-invoices/:idيضبط جدولاً نشطاً أو متوقفاً. الجداول المكتملة أو الملغاة للقراءة فقط.
invoices:writefrequency | stringweeklybiweeklymonthlyquarterlybiannuallyyearly |
end_date | date (YYYY-MM-DD) |
auto_finalize | boolean |
auto_send | boolean |
days_until_due | integer (0-365) |
items | array |
INVALID_STATEcurl https://hisab.ma/api/v1/recurring-invoices/{id} \
-X PUT \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"auto_send": true
}'/api/v1/recurring-invoices/:idيحذف الجدول وسجله. الفواتير المولدة سابقاً لا تتأثر.
invoices:writecurl https://hisab.ma/api/v1/recurring-invoices/{id} \
-X DELETE \
-H "Authorization: Bearer hisab_live_***"/api/v1/recurring-invoices/:id/generateينشئ الفاتورة التالية فوراً، مع احترام التثبيت والإرسال التلقائيين.
invoices:writeissue_date | date (YYYY-MM-DD)default: today |
INVALID_STATECUSTOMER_INACTIVEcurl https://hisab.ma/api/v1/recurring-invoices/{id}/generate \
-X POST \
-H "Authorization: Bearer hisab_live_***"/api/v1/recurring-invoices/:id/historyيسرد التشغيلات السابقة بأرقام الفواتير المولدة وحالتها.
invoices:readlimit | integerdefault: 20 (max 100) |
curl https://hisab.ma/api/v1/recurring-invoices/{id}/history \
-H "Authorization: Bearer hisab_live_***"/api/v1/recurring-invoices/:id/pauseيوقف التوليد حتى استئناف الجدول.
invoices:writeINVALID_STATEcurl https://hisab.ma/api/v1/recurring-invoices/{id}/pause \
-X POST \
-H "Authorization: Bearer hisab_live_***"/api/v1/recurring-invoices/:id/resumeيعيد تشغيل جدول متوقف، اختيارياً من تاريخ تشغيل جديد.
invoices:writenext_run_date | date (YYYY-MM-DD) |
INVALID_STATEcurl https://hisab.ma/api/v1/recurring-invoices/{id}/resume \
-X POST \
-H "Authorization: Bearer hisab_live_***"ملف مؤسستك وحالة الاشتراك وحصص API.
/api/v1/organizationيعيد المعرفات القانونية وبيانات الاتصال والاشتراك وحصص API.
organization:readcurl https://hisab.ma/api/v1/organization \
-H "Authorization: Bearer hisab_live_***"/api/v1/organizationيحدث المعرفات القانونية وبيانات الاتصال وعنوان الفوترة.
organization:writelegal_name | string |
ice | string |
rc | string |
if_number | string |
vat_number | string |
phone | string |
email | string |
website | string (URL) |
billing_address | object |
curl https://hisab.ma/api/v1/organization \
-X PATCH \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"phone": "+212 5 22 00 00 01"
}'إدارة المؤسسات للتكاملات متعددة الكيانات. تتطلب هذه النقاط مفتاح حساب (hisab_acct_). بعد الإنشاء، شغّل أي كيان عبر النقاط المعتادة بإرسال الترويسة X-Organization-Id مع نفس مفتاح الحساب. لا يمكن إعادة استخدام رقم ICE مسجل مسبقًا على المنصة، حتى من حساب آخر - فهو يحدد كيانًا قانونيًا واحدًا بالضبط.
/api/v1/organizationsتعيد جميع المؤسسات التي يملكها صاحب المفتاح. تُستبعد الكيانات المؤرشفة ما لم يُحدد include_archived=true.
organizations:readinclude_archived | booleandefault: false |
ACCOUNT_KEY_REQUIREDcurl https://hisab.ma/api/v1/organizations \
-H "Authorization: Bearer hisab_live_***"/api/v1/organizationsينشئ كيانًا قانونيًا جديدًا ضمن حسابك. يُطبق حد الكيانات في باقتك؛ تواصل مع الدعم لرفعه.
organizations:writelegal_namerequired | string |
ice | string (15 digits) |
rc | string |
if_number | string |
phone | string |
email | string |
address_street | string |
address_city | string |
address_postal_code | string |
ACCOUNT_KEY_REQUIREDENTITY_CAP_REACHEDcurl https://hisab.ma/api/v1/organizations \
-X POST \
-H "Authorization: Bearer hisab_live_***" \
-H "Content-Type: application/json" \
-d '{
"legal_name": "Filiale Casablanca SARL",
"ice": "002345678000071"
}'/api/v1/organizations/{id}تعيد مؤسسة مملوكة واحدة. المعرفات المجهولة أو الأجنبية تعيد 404.
organizations:readACCOUNT_KEY_REQUIREDcurl https://hisab.ma/api/v1/organizations/{id} \
-H "Authorization: Bearer hisab_live_***"/api/v1/organizations/{id}/archiveأرشفة مرنة: يُجمّد الكيان في كل مكان (API ولوحة التحكم والمهام المجدولة) دون حذف أي شيء. قابلة للعكس تمامًا.
organizations:archiveACCOUNT_KEY_REQUIREDALREADY_ARCHIVEDcurl https://hisab.ma/api/v1/organizations/{id}/archive \
-X POST \
-H "Authorization: Bearer hisab_live_***"/api/v1/organizations/{id}/restoreتلغي الأرشفة؛ يستأنف الكيان عمله الطبيعي فورًا.
organizations:archiveACCOUNT_KEY_REQUIREDNOT_ARCHIVEDcurl https://hisab.ma/api/v1/organizations/{id}/restore \
-X POST \
-H "Authorization: Bearer hisab_live_***"