الانتقال إلى المحتوى الرئيسي
PapyDocs

PapyDocs للمطوّرين

تنقل واجهة Papy البرمجية معالجة المستندات في PapyDocs إلى تطبيقاتك ومواقعك وبرامجك عبر واجهة REST بسيطة ومرقّمة الإصدارات.

  • كل نقطة وصول موثّقة تشغّل المحرّكات نفسها التي تستخدمها أدوات PapyDocs.
  • تُخزَّن المفاتيح كبصمات، وتُعرض مرة واحدة، ويمكن تجديدها أو إلغاؤها.
  • تُعالَج الملفات في الذاكرة ولا تُحفظ أبدًا؛ لا يُحتفظ إلا بعدّادات الاستخدام.

جارٍ التحقق من التوفر…

بداية سريعة

  1. اطلب مفتاح API من مسؤول هذا النشر لـ PapyDocs (يُنشأ في قسم «المفاتيح والاستخدام» أدناه).
  2. أرسل طلب POST بصيغة multipart/form-data إلى /api/v1/OPERATION مع ملفات PDF والمعاملات.
  3. أضف الترويسة Authorization: Bearer YOUR_KEY إلى كل طلب.
  4. اقرأ نتيجة JSON أو احفظ ملف PDF أو ZIP المُعاد. تُعاد الأخطاء دائمًا بصيغة JSON مع رمز ثابت.
عرض العمليات المتاحة في هذا النشر
curl https://papydocs.com/api/v1

المصادقة

يُصادَق على كل طلب بمفتاح API يُرسل في الترويسة Authorization.

HTTP
Authorization: Bearer papy_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • لا يحتفظ PapyDocs إلا ببصمة SHA-256 لكل مفتاح، وليس بالمفتاح نفسه أبدًا.
  • يُعرض المفتاح الجديد مرة واحدة عند إنشائه. احفظه في مدير الأسرار لديك: لا يمكن عرضه مرة أخرى.
  • يصدر التجديد مفتاحًا جديدًا ويلغي القديم فورًا؛ ويسري الإلغاء من الطلب التالي.
  • استدعِ الواجهة من خادمك. لا تضع مفتاحًا أبدًا في صفحة ويب أو في تطبيق جوال.

مرجع نقاط الوصول

كل العمليات طلبات POST إلى /api/v1/OPERATION بجسم multipart/form-data. تُعيد عمليات JSON النوع application/json؛ وتُعيد عمليات الملفات ملف PDF أو ZIP مباشرة.

عمليات المستندات

POST/api/v1/info— معلومات المستند

تُعيد عدد الصفحات والحجم والبيانات الوصفية لملف PDF.

الحقلالنوعإلزامي
fileملف PDFنعم

الاستجابة: JSON

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/info" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
مثال على الاستجابة (مختصر)
{
  "pages": 2,
  "bytes": 48213,
  "metadata": {
    "title": "Contract",
    "author": "",
    "subject": "",
    "keywords": "",
    "creator": "",
    "producer": "pdf-lib",
    "creationDate": "2026-10-14T09:00:00.000Z",
    "modificationDate": null,
    "customKeys": [],
    "hasXmp": false,
    "hasJavaScript": false,
    "hasEmbeddedFiles": false,
    "pageCount": 2
  }
}

POST/api/v1/merge— دمج

تدمج عدة ملفات PDF بترتيب إرسالها.

الحقلالنوعإلزامي
filesعدة ملفات PDFنعم

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/merge" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "files=@document.pdf" \
  -F "files=@other.pdf" \
  -o result.pdf

POST/api/v1/split— تقسيم

تقسم ملف PDF حسب نطاقات الصفحات (مثل 1-2,5) أو إلى ملف لكل صفحة، وتُعيد ملف ZIP.

الحقلالنوعإلزامي
fileملف PDFنعم
modeإحدى القيم (ranges | every-page)لا
rangesنصلا

الاستجابة: أرشيف ZIP لملفات PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/split" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'mode=ranges' \
  -F 'ranges=1-2,5' \
  -o result.zip

POST/api/v1/compress— ضغط

تحسين بنيوي بلا فقدان لملف PDF (لا يُعاد ترميز الصور).

الحقلالنوعإلزامي
fileملف PDFنعم

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/compress" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -o result.pdf

POST/api/v1/rotate— تدوير

تدوّر كل الصفحات بزاوية 90 أو 180 أو 270 درجة.

الحقلالنوعإلزامي
fileملف PDFنعم
angleإحدى القيم (90 | 180 | 270)لا

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/rotate" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'angle=90' \
  -o result.pdf

POST/api/v1/page-numbers— أرقام الصفحات

تضيف أرقام الصفحات انطلاقًا من قالب يستخدم المتغيّرين {page} و{total} (أحرف لاتينية).

الحقلالنوعإلزامي
fileملف PDFنعم
formatنصلا
startرقملا

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/page-numbers" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'format={page} / {total}' \
  -F 'start=1' \
  -o result.pdf

POST/api/v1/watermark— علامة مائية

تضيف علامة مائية نصية مائلة على كل صفحة (أحرف لاتينية).

الحقلالنوعإلزامي
fileملف PDFنعم
textنصنعم
opacityرقملا

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/watermark" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'text=CONFIDENTIAL' \
  -F 'opacity=0.2' \
  -o result.pdf

ذكاء المستندات

POST/api/v1/text— استخراج النص

تُعيد نص كل صفحة وتبيّن ما إذا كان المستند يبدو ممسوحًا ضوئيًا (needsOcr). لا يُجرى أي تعرّف ضوئي على الخادم.

الحقلالنوعإلزامي
fileملف PDFنعم

الاستجابة: JSON

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/text" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
مثال على الاستجابة (مختصر)
{
  "pages": [
    {
      "page": 1,
      "text": "Facture N° FAC-2026-0042\nTotal TTC 144,00 €"
    }
  ],
  "characters": 41,
  "needsOcr": false
}

POST/api/v1/invoice— استخراج بيانات الفواتير

تستخرج المورّد والعميل والرقم والتواريخ والعملة والمبالغ والبنود وشروط الدفع ومرجع الطلب، كلٌّ مع صفحته وسطره المصدر، إضافة إلى عمليات تحقق من الاتساق. تُعاد القيم الناقصة كـ null ولا تُقدَّر أبدًا.

الحقلالنوعإلزامي
fileملف PDFنعم

الاستجابة: JSON

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/invoice" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
مثال على الاستجابة (مختصر)
{
  "fields": {
    "invoiceNumber": {
      "value": "FAC-2026-0042",
      "status": "found",
      "source": {
        "pageNumber": 1,
        "excerpt": "Facture N° FAC-2026-0042"
      }
    },
    "total": {
      "value": "144",
      "status": "found",
      "source": {
        "pageNumber": 1,
        "excerpt": "Total TTC 144,00 €"
      }
    },
    "dueDate": {
      "value": null,
      "status": "missing",
      "source": null
    }
  },
  "lineItems": [
    {
      "description": "Ramette papier A4",
      "quantity": 10,
      "unitPrice": 5,
      "amount": 50,
      "source": {
        "pageNumber": 1,
        "excerpt": "Ramette papier A4 10 5,00 € 50,00 €"
      }
    }
  ],
  "checks": [
    {
      "code": "missing",
      "field": "dueDate"
    }
  ]
}

POST/api/v1/contract— تحليل عقد

تُعيد عناوين البنود والمقاطع حسب الموضوع (الأطراف، الدفع، المدة، الفسخ…) والتواريخ والمبالغ ومهل الإشعار والمقاطع التي تحتاج إلى تحقق، وكلها منسوخة من المستند مع صفحتها. مؤشرات بالكلمات المفتاحية، لا استشارة قانونية.

الحقلالنوعإلزامي
fileملف PDFنعم

الاستجابة: JSON

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/contract" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
مثال على الاستجابة (مختصر)
{
  "notice": "Passages are copied from the document; categories and flags are keyword-based pointers to verify, not legal advice.",
  "pageCount": 2,
  "clauses": [
    {
      "heading": "Article 7 - Résiliation",
      "pageNumber": 2
    }
  ],
  "findings": [
    {
      "category": "termination",
      "pageNumber": 2,
      "clause": "Article 7 - Résiliation",
      "excerpt": "Chaque partie peut résilier le contrat moyennant un préavis de 3 mois."
    }
  ],
  "flags": [
    {
      "reason": "auto-renewal",
      "pageNumber": 1,
      "clause": "Article 2 - Durée",
      "excerpt": "Il est renouvelé par tacite reconduction…",
      "match": "tacite reconduction"
    }
  ],
  "facts": [
    {
      "type": "notice",
      "value": "préavis de 3 mois",
      "pageNumber": 2,
      "clause": "Article 7 - Résiliation",
      "excerpt": "…"
    }
  ],
  "sentenceCount": 14
}

POST/api/v1/compare— مقارنة نسختين

تقارن نص ملفي PDF صفحة بصفحة وتُعيد المقاطع المضافة والمحذوفة والمعدّلة مع سياقها.

الحقلالنوعإلزامي
originalملف PDFنعم
revisedملف PDFنعم

الاستجابة: JSON

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/compare" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "original=@contract-v1.pdf" \
  -F "revised=@contract-v2.pdf"
مثال على الاستجابة (مختصر)
{
  "identical": false,
  "pageCountOriginal": 2,
  "pageCountRevised": 2,
  "wordsAdded": 11,
  "wordsRemoved": 1,
  "changes": [
    {
      "type": "modified",
      "pageNumber": 1,
      "before": "12",
      "after": "24",
      "context": "Le contrat est conclu pour une durée de 24 mois."
    }
  ]
}

POST/api/v1/proofread— تدقيق

تطبّق قواعد التدقيق المحلية في PapyDocs (المسافات، علامات الترقيم، الكلمات المكرّرة، الأحرف الكبيرة، الأخطاء الشائعة) وتُعيد كل مشكلة مع تصحيحها وموضعها.

الحقلالنوعإلزامي
fileملف PDFنعم
languageإحدى القيم (auto | fr | en | es | pt)لا

الاستجابة: JSON

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/proofread" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'language=auto'
مثال على الاستجابة (مختصر)
{
  "language": "fr",
  "engine": "local-rules",
  "issues": [
    {
      "page": 1,
      "start": 11,
      "end": 15,
      "original": "recu",
      "suggestion": "reçu",
      "category": "spelling",
      "rule": "misspelling"
    }
  ]
}

الأمان والخصوصية

POST/api/v1/remove-metadata— إزالة البيانات الوصفية

تزيل البيانات الوصفية للمستند والمحتوى النشط (JavaScript والملفات المضمّنة).

الحقلالنوعإلزامي
fileملف PDFنعم

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/remove-metadata" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -o result.pdf

POST/api/v1/protect— الحماية بكلمة مرور

تشفّر ملف PDF (AES-256) بكلمة مرور للفتح.

الحقلالنوعإلزامي
fileملف PDFنعم
passwordنصنعم
owner_passwordنصلا

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/protect" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'password=your-password' \
  -o result.pdf

POST/api/v1/unlock— إزالة كلمة المرور

تفك تشفير ملف PDF عند تقديم كلمة المرور الصحيحة.

الحقلالنوعإلزامي
fileملف PDFنعم
passwordنصنعم

الاستجابة: ملف PDF

أمثلة على الشيفرة والاستجابة
cURL
curl -X POST "https://papydocs.com/api/v1/unlock" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'password=your-password' \
  -o result.pdf

نقاط وصول إدارة المفاتيح

مخصّصة لمسؤول النشر، ويُصادَق عليها برمز المسؤول (لا بمفتاح API). يستخدمها قسم «المفاتيح والاستخدام» في هذه الصفحة.

  • GET/api/v1/keys— عرض المفاتيح (دون الأسرار)
  • POST/api/v1/keys— إنشاء مفتاح (جسم JSON يحتوي على اسم)؛ يُعاد السر مرة واحدة
  • DELETE/api/v1/keys/{id}— إلغاء مفتاح
  • POST/api/v1/keys/{id}/rotate— تجديد مفتاح؛ يُعاد السر الجديد مرة واحدة
  • GET/api/v1/usage?days=30— عدّادات الاستخدام حسب اليوم والمفتاح والعملية

الأخطاء والحدود

تستخدم الأخطاء رموز HTTP القياسية وجسم JSON يحتوي على رمز ثابت قابل للقراءة آليًا. الرسائل غير مترجمة: عالج الرمز في تطبيقك.

صيغة الأخطاء
{
  "error": {
    "code": "authorization-required"
  }
}
الحالةالمعنىرموز الأخطاء
200نجاح
400معامل ناقص أو غير صالحinvalid-options, empty-selection
401مفتاح ناقص أو غير صالح أو ملغى (أو رمز المسؤول)authorization-required
404عملية أو مفتاح غير معروفinvalid-options
413الطلب أو الملف كبير جدًاrequest-too-large, file-too-large
415الملف ليس PDFunsupported-type
422لا يمكن معالجة ملف PDF (تالف، مشفّر، كلمة مرور خاطئة، بلا نص…)corrupt, encrypted, wrong-password, no-text, invalid-range
429تم بلوغ الحد بالساعة: انتظر عدد الثواني المذكور في Retry-Afterrate-limited
503الواجهة البرمجية أو إدارة المفاتيح غير مفعّلة في هذا النشرserver-unavailable

الحدود

  • الحد الافتراضي: 120 طلبًا في الساعة لكل مفتاح (قابل للضبط من النشر).
  • تتضمن كل استجابة X-RateLimit-Limit وX-RateLimit-Remaining وX-RateLimit-Reset (بالثواني).
  • حتى 100 م.ب لكل ملف PDF، و200 م.ب لكل طلب، و60 ملفًا لكل طلب.
  • تقرأ عمليات النص حتى 500 صفحة لكل مستند؛ وتقتصر عمليات البحث على 200 حرفًا و100 نتيجة.
  • ترفض عمليات التحليل المستندات الممسوحة ضوئيًا التي لا تحتوي على طبقة نص (الخطأ no-text): شغّل التعرّف الضوئي أولًا، مثلًا بأداة OCR في PapyDocs.

وحدة الاختبار

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

يبدأ بـ papy_. لا يُحفظ.

المفاتيح والاستخدام

لمسؤول هذا النشر. أدخل رمز المسؤول المضبوط على الخادم (تُحدَّد بصمته في PAPY_ADMIN_TOKEN_HASH). يبقى الرمز في ذاكرة هذه الصفحة فقط.

لا يُحفظ. يُرسل إلى هذا الموقع فقط.

حماية البيانات

  • تُعالَج الملفات المرسلة إلى الواجهة في الذاكرة طوال مدة الطلب ولا تُحفظ.
  • لا يكتب PapyDocs في سجلاته محتوى المستندات ولا أسماء الملفات ولا المعاملات ولا المفاتيح.
  • إحصاءات الاستخدام عدّادات إجمالية يُحتفظ بها 90 يومًا.
  • استخدم HTTPS فقط. تشغّل الواجهة محرّكات PapyDocs على هذا الخادم ولا ترسل مستنداتك إلى أي مزوّد للذكاء الاصطناعي.