واجهة برمجة النماذج
إنشاء واسترجاع وتحديث وحذف ونشر وتكرار النماذج.
تتيح لك واجهة برمجة النماذج إدارة نماذج NueForm برمجياً. يمكنك عرض وإنشاء واسترجاع وتحديث وحذف ونشر وإلغاء نشر وتكرار النماذج.
تستخدم جميع هياكل الطلب والاستجابة أسماء حقول بتنسيق snake_case.
عرض النماذج
/api/v1/formsيُرجع قائمة مُقسّمة لصفحات من النماذج التي يملك المستخدم المُصادَق عليه حق الوصول إليها، بما في ذلك النماذج الشخصية والنماذج من الفرق التي ينتمي إليها المستخدم.
معاملات الاستعلام
pageintegerرقم الصفحة (افتراضي: 1)
per_pageintegerالنتائج لكل صفحة (افتراضي: 50)
searchstringتصفية النماذج حسب العنوان (مطابقة جزئية غير حساسة لحالة الأحرف)
team_idstringإرجاع النماذج التابعة لهذا الفريق فقط
publishedbooleanالتصفية حسب حالة النشر (true أو false)
الاستجابة
{
"forms": [
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"description": "Quarterly satisfaction survey for Q1 2026",
"slug": "a1b2c3d4e5f6",
"published": true,
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-02-20T14:22:00.000Z",
"theme_color": "#6366f1",
"background_color": "#0a0a0a",
"response_count": 142,
"team": {
"id": "665b2c3d4e5f6a7b8c9d0e1f",
"name": "Marketing"
}
}
],
"total": 24,
"page": 1,
"per_page": 50
}
أمثلة على الكود
curl -X GET "https://api.nueform.io/api/v1/forms?page=1&per_page=10&published=true" \
-H "Authorization: Bearer YOUR_API_KEY"
إنشاء نموذج
/api/v1/formsيُنشئ نموذجاً جديداً. يمكنك اختيارياً تضمين مصفوفة من الأسئلة لإنشائها مع النموذج.
هيكل الطلب
titlestringعنوان النموذج (لا يمكن أن يكون فارغاً)
descriptionstringوصف النموذج
team_idstringتعيين النموذج لفريق (يتطلب صلاحية create_forms)
publishedbooleanعيّنه إلى true لنشر النموذج مباشرةً بعد إنشائه. يُجري النشر عمليات التحقق نفسها التي يُجريها نشر نموذج. إذا فشلت إحدى عمليات التحقق، يُنشأ النموذج رغم ذلك كمسودة: تكون الاستجابة 201 مع published: false وكائن publish_error (reason، message، question_ids، upgrade_required). لا تُنشئ النموذج مرة أخرى — أصلح المشكلة ثم استدعِ نشر نموذج. الافتراضي: false (مسودة)
theme_colorstringلون القالب الرئيسي (hex، افتراضي: #6366f1)
background_colorstringلون الخلفية (hex، افتراضي: #0a0a0a)
text_colorstringلون نص السؤال (hex)
answer_text_colorstringلون نص الإجابة (hex)
placeholder_colorstringلون النص التوضيحي (hex)
button_colorstringلون خلفية الزر (hex)
button_text_colorstringلون نص الزر (hex)
title_colorstringلون نص العنوان (hex)
description_colorstringلون نص الوصف (hex)
option_text_colorstringلون نص خيارات الاختيار (hex)
indicator_bg_colorstringلون خلفية مؤشر الخطوة (hex)
indicator_text_colorstringلون نص مؤشر الخطوة (hex)
font_familystringعائلة خط السؤال
font_family_answerstringعائلة خط الإجابة
font_family_buttonstringعائلة خط الزر
font_family_descriptionstringعائلة خط الوصف
font_family_optionstringعائلة خط خيارات الاختيار
font_family_indicatorstringعائلة خط مؤشر الخطوة
question_font_sizestringحجم خط السؤال (مثل: "24px")
custom_cssstringCSS مخصص يُحقن في عارض النموذج
show_progress_barbooleanعرض شريط التقدم (افتراضي: true)
branding_logo_urlstringرابط شعار العلامة التجارية
branding_footer_textstringنص التذييل المخصص
hide_brandingbooleanإخفاء علامة NueForm التجارية (افتراضي: false)
auto_translatebooleanNueLingo — ترجمة النموذج المنشور عند الطلب إلى أي لغة مدعومة للمستجيبين (Pro+؛ يُحفظ كـ false في الخطط الأخرى). يتطلب لغة افتراضية؛ يسري عند النشر.
top_logo_urlstringرابط الشعار المعروض في أعلى النموذج
top_logo_sizestringحجم الشعار العلوي (مثل: "120px")
top_logo_alignmentstringمحاذاة الشعار العلوي ("left" أو "center" أو "right")
top_logo_cssstringCSS مخصص للشعار العلوي
watermark_cssstringCSS مخصص للعلامة المائية
welcome_titlestringعنوان شاشة الترحيب
welcome_descriptionstringوصف شاشة الترحيب
welcome_button_textstringنص زر شاشة الترحيب (افتراضي: "Start")
thank_you_titlestringعنوان شاشة الشكر (افتراضي: "Thank you!")
thank_you_descriptionstringوصف شاشة الشكر
modestringوضع النموذج: "standard" أو "knowledge_quiz" أو "lead_qualification" أو "match_quiz" (افتراضي: "standard")
quiz_settingsobjectإعدادات الاختبار (لأوضاع الاختبار)
variablesobjectمتغيرات على مستوى النموذج للمنطق
start_logic_jumpsarrayقواعد القفز المنطقي المُطبَّقة عند بدء النموذج
webhook_urlstringرابط لاستقبال POST عند الإرسال (يتطلب خطة Pro)
limit_one_responsebooleanتقييد استجابة واحدة لكل زائر (افتراضي: false)
incremental_submissionbooleanحفظ الإجابات تدريجياً أثناء تقدم المستجيب (افتراضي: false)
questionsarrayمصفوفة كائنات الأسئلة لإنشائها (انظر أدناه)
مثال على الطلب
{
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"theme_color": "#2563eb",
"background_color": "#ffffff",
"show_progress_bar": true,
"welcome_title": "We value your feedback",
"welcome_description": "This survey takes about 3 minutes.",
"welcome_button_text": "Let's go",
"thank_you_title": "Thank you!",
"thank_you_description": "Your feedback helps us build a better product.",
"questions": [
{
"type": "short_text",
"title": "What is your name?",
"required": true
},
{
"type": "multiple_choice",
"title": "How did you hear about us?",
"required": true,
"properties": {
"choices": [
{ "label": "Search engine" },
{ "label": "Social media" },
{ "label": "Friend or colleague" },
{ "label": "Other" }
],
"allow_multiple": false
}
},
{
"type": "rating",
"title": "How would you rate your overall experience?",
"required": true,
"properties": {
"steps": 5,
"shape": "star"
}
}
]
}
الاستجابة
يُرجع كائن النموذج المُنشأ مع جميع الأسئلة:
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"slug": "a1b2c3d4e5f6",
"published": false,
"created_at": "2026-02-28T12:00:00.000Z",
"updated_at": "2026-02-28T12:00:00.000Z",
"theme_color": "#2563eb",
"background_color": "#ffffff",
"show_progress_bar": true,
"welcome_title": "We value your feedback",
"welcome_description": "This survey takes about 3 minutes.",
"welcome_button_text": "Let's go",
"thank_you_title": "Thank you!",
"thank_you_description": "Your feedback helps us build a better product.",
"questions": [
{
"id": "66a1b2c3d4e5f6a7b8c9d001",
"type": "short_text",
"title": "What is your name?",
"description": null,
"required": true,
"order": 0,
"properties": {},
"logic_jumps": [],
"validations": {}
},
{
"id": "66a1b2c3d4e5f6a7b8c9d002",
"type": "multiple_choice",
"title": "How did you hear about us?",
"description": null,
"required": true,
"order": 1,
"properties": {
"choices": [
{ "label": "Search engine" },
{ "label": "Social media" },
{ "label": "Friend or colleague" },
{ "label": "Other" }
],
"allow_multiple": false
},
"logic_jumps": [],
"validations": {}
},
{
"id": "66a1b2c3d4e5f6a7b8c9d003",
"type": "rating",
"title": "How would you rate your overall experience?",
"description": null,
"required": true,
"order": 2,
"properties": {
"steps": 5,
"shape": "star"
},
"logic_jumps": [],
"validations": {}
}
]
}
أمثلة على الكود
curl -X POST "https://api.nueform.io/api/v1/forms" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"questions": [
{
"type": "short_text",
"title": "What is your name?",
"required": true
}
]
}'
الحصول على نموذج
/api/v1/forms/:idيسترجع نموذجاً واحداً بواسطة المعرّف، بما في ذلك جميع الأسئلة مُرتَّبة حسب موقعها.
معاملات المسار
idstringمعرّف النموذج
الاستجابة
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"slug": "a1b2c3d4e5f6",
"published": true,
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-02-20T14:22:00.000Z",
"theme_color": "#2563eb",
"background_color": "#ffffff",
"text_color": null,
"answer_text_color": null,
"placeholder_color": null,
"button_color": null,
"button_text_color": null,
"font_family": null,
"question_font_size": null,
"custom_css": null,
"show_progress_bar": true,
"incremental_submission": false,
"limit_one_response": false,
"welcome_title": "We value your feedback",
"welcome_description": "This survey takes about 3 minutes.",
"welcome_button_text": "Let's go",
"thank_you_title": "Thank you!",
"thank_you_description": "Your feedback helps us build a better product.",
"branding_logo_url": null,
"branding_footer_text": null,
"hide_branding": false,
"auto_translate": false,
"mode": "standard",
"webhook_url": null,
"has_unpublished_changes": false,
"published_version_id": "66c3d4e5f6a7b8c9d0e1f2a3",
"response_count": 142,
"questions": [
{
"id": "66a1b2c3d4e5f6a7b8c9d001",
"type": "short_text",
"title": "What is your name?",
"description": null,
"required": true,
"order": 0,
"properties": {},
"logic_jumps": [],
"validations": {}
}
]
}
أمثلة على الكود
curl -X GET "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e" \
-H "Authorization: Bearer YOUR_API_KEY"
تحديث نموذج
/api/v1/forms/:idيُحدّث حقول النموذج ويُزامن أسئلته. عند تضمين مصفوفة questions، سيقوم NueForm بما يلي:
- تحديث الأسئلة الموجودة (المُطابَقة بواسطة
id) - إنشاء أسئلة جديدة (بدون
idأوidغير معروف) - حذف الأسئلة الموجودة في النموذج ولكن غير موجودة في المصفوفة
إذا كان النموذج منشوراً حالياً، يتم تعيين علامة has_unpublished_changes تلقائياً إلى true: تُحفظ تغييراتك كمسودة، ويستمر المستجيبون في رؤية النسخة المنشورة حتى تنشر مرة أخرى.
يغيّر published حالة النموذج بدلاً من حفظه كحقل:
- في نموذج مسودة، يؤدي
published: trueإلى نشره بعد حفظ تغييراتك، مع عمليات التحقق نفسها التي يُجريها نشر نموذج. إذا فشلت إحدى عمليات التحقق، تُحفظ تغييراتك رغم ذلك وتُرجع الواجهة409 Conflictمعform_idوsaved_as_draft: true. - في نموذج منشور بالفعل، لا يغيّر
published: trueشيئاً — استدعِ نشر نموذج لنشر تغييراتك. - يؤدي
published: falseإلى إلغاء نشر نموذج منشور، تماماً مثل إلغاء نشر نموذج.
في نماذج الفريق، لا يستطيع تغيير published إلا مسؤولو الفريق ومالكوه.
معاملات المسار
idstringمعرّف النموذج
هيكل الطلب
يقبل جميع الحقول من إنشاء نموذج باستثناء team_id. قم بتضمين الحقول التي تريد تغييرها فقط.
مثال على الطلب
{
"title": "Updated Survey Title",
"description": "Revised description for Q2",
"theme_color": "#10b981",
"questions": [
{
"id": "66a1b2c3d4e5f6a7b8c9d001",
"type": "short_text",
"title": "What is your full name?",
"required": true
},
{
"type": "long_text",
"title": "Any additional comments?",
"required": false
}
]
}
الاستجابة
يُرجع كائن النموذج المُحدَّث مع جميع الأسئلة (نفس مخطط الحصول على نموذج).
أمثلة على الكود
curl -X PUT "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated Survey Title",
"theme_color": "#10b981"
}'
حذف نموذج
/api/v1/forms/:idيحذف نموذجاً نهائياً مع جميع البيانات المرتبطة به، بما في ذلك الأسئلة والاستجابات والإصدارات وإدخالات سجل التغييرات. يتم تنظيف الملفات المرفوعة المرتبطة بشكل غير متزامن.
هذا الإجراء لا يمكن التراجع عنه. سيتم حذف جميع الاستجابات المُجمَّعة لهذا النموذج نهائياً.
معاملات المسار
idstringمعرّف النموذج
معاملات الاستعلام
delete_signed_contractsbooleanيجب أن تكون true لحذف نموذج يحتوي على عقود موقّعة مكتملة. تُحذف هذه العقود نهائيًا مع النموذج، بما في ذلك ملفات PDF الموقّعة ومسارات التدقيق. بدونها لا يُحذف النموذج: تردّ الواجهة البرمجية بالرمز 409 مع reason: form_has_signed_contracts وsigned_contracts (عددها).
الاستجابة
{
"success": true
}
أمثلة على الكود
curl -X DELETE "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e" \
-H "Authorization: Bearer YOUR_API_KEY"
نشر نموذج
/api/v1/forms/:id/publishينشر نموذجاً عن طريق إنشاء لقطة مُرقَّمة للنموذج الحالي وأسئلته — وهي العملية نفسها التي يستخدمها زر النشر في أداة إنشاء النماذج. كل عملية نشر تزيد رقم الإصدار، ويصبح النموذج متاحاً للعامة عبر رابطه القابل للمشاركة.
قبل نشر أي شيء، يتحقق NueForm من أن:
- نماذج الفريق لا ينشرها إلا مسؤولو الفريق ومالكوه، والنماذج الشخصية لا ينشرها إلا مالكها (ويتلقى أي شخص آخر
403 Forbidden، أو404 Not Foundإذا لم يكن عضوًا في فريق النموذج)؛ - ميزات Pro (أسئلة الحجز، وعقود التوقيع الإلكتروني، وعُقد البيانات، وwebhooks النماذج، والمدفوعات إلى حسابك الخاص على Stripe) مشمولة في خطة مالك النموذج (خطة مالك الفريق في نماذج الفريق)؛
- أسئلة الحجز وخطوات البريد الإلكتروني وأسئلة Fuse والمركّبات مُعدّة بالكامل.
إذا فشلت أي عملية تحقق، لا يُنشر النموذج وتُرجع الواجهة 409 Conflict مع رمز reason وquestion_ids المطلوب إصلاحها (راجع معالجة الأخطاء). تتضمن الاستجابات الناجحة published_version ومصفوفة warnings بالتنبيهات التي لا تمنع النشر.
معاملات المسار
idstringمعرّف النموذج
الاستجابة
يُرجع النموذج المنشور مع published_version (رقم الإصدار الجديد) وwarnings (تنبيهات لا تمنع النشر، وغالباً ما تكون فارغة):
{
"data": {
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"slug": "a1b2c3d4e5f6",
"published": true,
"has_unpublished_changes": false,
"published_version_id": "66c3d4e5f6a7b8c9d0e1f2a3",
"published_version": 3,
"warnings": [
{
"code": "booking_attendee_ask",
"question_id": "66a1b2c3d4e5f6a7b8c9d004",
"question_title": "Book a demo",
"message": "Booking question \"Book a demo\" has no attendee email mapping, so respondents will be asked for their email when they book."
}
],
"questions": [ ... ]
}
}
حظر النشر (409)
لا يُنشر أي شيء. يوضّح reason عملية التحقق التي فشلت، وتسرد question_ids الأسئلة المطلوب إصلاحها؛ وتكون upgrade_required مساوية لـ true عندما تحتاج خطة مالك النموذج إلى ترقية:
{
"error": {
"code": "CONFLICT",
"message": "E-signature contracts need a Pro plan to go live. Upgrade to publish this form, or remove the contract question.",
"status": 409,
"reason": "contract_requires_pro",
"question_ids": ["66a1b2c3d4e5f6a7b8c9d001"],
"upgrade_required": true
}
}
أمثلة على الكود
curl -X POST "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e/publish" \
-H "Authorization: Bearer YOUR_API_KEY"
إلغاء نشر نموذج
/api/v1/forms/:id/publishيُلغي نشر نموذج، مما يجعله غير متاح عبر رابطه العام. يتم الاحتفاظ بلقطة الإصدار المنشور بحيث يمكنك إعادة النشر لاحقاً. لا يستطيع إلغاء نشر نماذج الفريق إلا مسؤولو الفريق ومالكوه، ولا يستطيع إلغاء نشر النماذج الشخصية إلا مالكها؛ ويتلقى أي شخص آخر 403 Forbidden، أو 404 Not Found إذا لم يكن عضوًا في فريق النموذج.
معاملات المسار
idstringمعرّف النموذج
الاستجابة
يُرجع كائن النموذج المُحدَّث مع تعيين published إلى false.
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"published": false,
"questions": [ ... ]
}
أمثلة على الكود
curl -X DELETE "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e/publish" \
-H "Authorization: Bearer YOUR_API_KEY"
تكرار نموذج
/api/v1/forms/:id/duplicateيُنشئ نسخة من نموذج موجود، بما في ذلك جميع الأسئلة. يتم إعادة تعيين مراجع القفز المنطقي تلقائياً إلى معرّفات الأسئلة الجديدة. يتم إنشاء النموذج المُكرَّر دائماً في حالة غير منشورة.
معاملات المسار
idstringمعرّف النموذج المراد تكراره
هيكل الطلب
titlestringعنوان النموذج الجديد (افتراضي: "العنوان الأصلي (نسخة)")
team_idstringتعيين النسخة المُكرَّرة لفريق مختلف
مثال على الطلب
{
"title": "Customer Feedback Survey v2",
"team_id": "665b2c3d4e5f6a7b8c9d0e1f"
}
الاستجابة
يُرجع كائن النموذج المُنشأ حديثاً (نفس مخطط الحصول على نموذج) مع تعيين published إلى false.
أمثلة على الكود
curl -X POST "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e/duplicate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Customer Feedback Survey v2" }'
استجابات الأخطاء
تُرجع جميع نقاط النهاية استجابات أخطاء قياسية.
رموز الأخطاء
400Bad Requestخطأ في التحقق أو حقل مطلوب مفقود
401Unauthorizedمفتاح API مفقود أو غير صالح
403Forbiddenصلاحيات غير كافية لنماذج الفريق
404Not Foundالنموذج غير موجود
409Conflictحظر النشر: فشلت إحدى عمليات التحقق من النشر (راجع نشر نموذج)
500Server Errorخطأ داخلي في الخادم
مثال على خطأ
{
"error": "Title is required"
}