Panels API
أنشئ وأدِر لوحات AI لاستطلاع مجموعات من العقول مع تجميع منظّم للردود.
تتيح لك Panels استطلاع مجموعات من عقول الذكاء الاصطناعي بأسئلة محددة، وتلقّي ردود مجمّعة ومنظّمة. هذا مفيد لمحاكاة أبحاث السوق، وجمع التغذية الراجعة القائمة على الشخصيات، وتحليل وجهات النظر المتعددة.
Base URL: https://getminds.ai/api/v1 أو https://api.getminds.ai/v1
المفاهيم الأساسية
| المفهوم | الوصف |
|---|---|
| Panel | حاوية لاستطلاع مجموعات عقول متعددة بأسئلة |
| Mind Group | مجموعة من العقول تستجيب معاً (مثل: "مستخدمو الجيل Z"، "كبار المطورين") |
| Question | سؤال يُرسَل إلى جميع العقول في مجموعات اللوحة |
| Aggregated Response | ردود مصنّفة ومجمّعة بواسطة الذكاء الاصطناعي مع قيم مقياسية أو فئوية |
عرض قائمة Panels
استرجع جميع الـ panels المرتبطة بالمستخدم المصادَق عليه.
Endpoint: GET /api/v1/panels
Headers:
Authorization: Bearer minds_your_api_key
الاستجابة
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Consumer Research Panel",
"flowMode": "panel",
"createdAt": "2025-12-10T12:00:00.000Z",
"updatedAt": "2025-12-10T14:30:00.000Z",
"messageCount": 8,
"groups": [
{
"id": "group-123",
"name": "Gen Z Consumers",
"sparkCount": 5,
"sparks": [
{
"id": "spark-1",
"name": "Emma",
"discipline": "College Student",
"profileImageUrl": "https://..."
}
]
}
]
}
]
}
حقول الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
id | string | المعرّف الفريد للـ panel |
name | string | اسم الـ panel |
flowMode | string | دائماً "panel" لتدفقات الـ panel |
createdAt | string | طابع زمني للإنشاء بصيغة ISO 8601 |
updatedAt | string | طابع زمني لآخر تحديث بصيغة ISO 8601 |
messageCount | number | إجمالي عدد الرسائل (الأسئلة والردود) |
groups | array | مجموعات العقول المرتبطة بهذا الـ panel |
groups[].sparkCount | number | عدد العقول في المجموعة |
مثال على الطلب
curl -X GET "https://getminds.ai/api/v1/panels" \
-H "Authorization: Bearer minds_your_api_key"
إنشاء Panel
أنشئ panel جديداً مع إمكانية إرفاق مجموعات عقول به.
Endpoint: POST /api/v1/panels
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
جسم الطلب
{
"name": "Product Feedback Panel",
"groupIds": ["group-123", "group-456"]
}
المعاملات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
name | string | نعم | اسم الـ panel |
groupIds | array | لا | مصفوفة من معرّفات مجموعات العقول لإرفاقها بالـ panel |
الاستجابة
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Product Feedback Panel",
"flowMode": "panel",
"createdAt": "2025-12-10T12:00:00.000Z",
"groups": [
{
"id": "group-123",
"name": "Early Adopters",
"sparks": [
{
"id": "spark-1",
"name": "Alex",
"discipline": "Tech Enthusiast",
"profileImageUrl": "https://..."
}
]
}
]
}
}
مثال على الطلب
curl -X POST "https://getminds.ai/api/v1/panels" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Market Research Panel",
"groupIds": ["group-123", "group-456"]
}'
ردود الخطأ
400 Bad Request - الاسم مفقود أو معرّفات المجموعات غير صالحة
{
"statusCode": 400,
"message": "name is required"
}
{
"statusCode": 404,
"message": "Groups not found: 1f2e3d4c-..."
}
الحصول على تفاصيل Panel
استرجع panel محدداً مع جميع مجموعاته وسجل رسائله.
Endpoint: GET /api/v1/panels/{panelId}
Headers:
Authorization: Bearer minds_your_api_key
الاستجابة
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Consumer Research Panel",
"flowMode": "panel",
"createdAt": "2025-12-10T12:00:00.000Z",
"updatedAt": "2025-12-10T14:30:00.000Z",
"groups": [
{
"id": "group-123",
"name": "Gen Z Consumers",
"sparks": [
{
"id": "spark-1",
"name": "Emma",
"discipline": "College Student",
"profileImageUrl": "https://..."
}
]
}
],
"messages": [
{
"id": "msg-1",
"role": "user",
"content": "How important is sustainability when choosing products?",
"metadata": {
"groupIds": ["group-123"]
},
"createdAt": "2025-12-10T14:00:00.000Z"
},
{
"id": "msg-2",
"role": "assistant",
"content": "How important is sustainability when choosing products?",
"metadata": {
"outputData": {
"title": "How important is sustainability when choosing products?",
"type": "scale",
"groups": [
{
"group": "Gen Z Consumers",
"value": "Very Important",
"answers": [
{
"value": "9/10",
"persona": "Emma",
"discipline": "College Student",
"message": "Sustainability is a top priority for me..."
}
]
}
]
},
"outputType": "bar"
},
"createdAt": "2025-12-10T14:00:30.000Z"
}
]
}
}
مثال على الطلب
curl -X GET "https://getminds.ai/api/v1/panels/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer minds_your_api_key"
ردود الخطأ
403 Forbidden - غير مصرّح لك بالوصول إلى هذا الـ panel
404 Not Found - الـ panel غير موجود
طرح سؤال على Panel
أرسل سؤالاً إلى جميع العقول في الـ panel وتلقَّ ردوداً متدفقة مع نتائج مجمّعة.
Endpoint: POST /api/v1/panels/{panelId}/ask
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
جسم الطلب
سؤال أساسي:
{
"question": "What features would make you switch to a competitor product?",
"groupIds": ["group-123"]
}
مع مرفقات:
{
"question": "Please review this product design and provide feedback",
"attachments": [
{
"url": "https://example.com/design.pdf",
"name": "Product Design v2",
"type": "application/pdf"
},
{
"path": "uploads/mockup.png",
"name": "UI Mockup"
}
],
"links": [
{
"label": "https://competitor.com/product",
"id": "link-1"
}
],
"keywords": [
{
"label": "sustainable packaging",
"url": "https://example.com/article",
"id": "keyword-1"
}
]
}
المعاملات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
question | string | نعم | السؤال الذي سيُطرح على جميع العقول في الـ panel |
groupIds | array | لا | تحديد السؤال لمجموعات بعينها (الافتراضي: جميع المجموعات) |
attachments | array | لا | مرفقات ملفات (PDFs، صور، مستندات) لتوفير السياق. راجع مرفقات الملفات أدناه. |
links | array | لا | روابط لجلبها وتحليلها (يستخدم Firecrawl للمواقع التي تعتمد على JavaScript). كل رابط يحتوي على label (نص الرابط) وid اختياري. |
keywords | array | لا | كلمات مفتاحية مع روابط مصدرها للسياق. كل عنصر يحتوي على label (الكلمة المفتاحية) وurl (رابط المصدر) وid اختياري. |
model | string | لا | تجاوز نموذج الذكاء الاصطناعي المستخدم لردود المشاركين. يجب إرساله مع provider. راجع تجاوز النموذج أدناه. |
provider | string | لا | مزوّد الذكاء الاصطناعي لتجاوز النموذج: openai أو anthropic أو google. يجب إرساله مع model. |
disableDiversityCheck | boolean | لا | عند تعيينه true، يتخطى حلقة إعادة التوليد المفروضة للتنوع (تشابه bigram الذاتي، تجانس القيم، ملء الحاويات الفارغة). مخصص لتشغيلات الاختزال والمعيار حيث تكون طبقة التنسيق هي المتغير قيد الاختبار. الافتراضي: false. |
الاستجابة (Server-Sent Events)
يُعيد الـ endpoint تدفقاً من Server-Sent Events (SSE). كل حدث عبارة عن كائن JSON يحتوي على حقل type.
تصنيف السؤال
قبل المعالجة، يصنّف النظام تلقائياً سؤالك إلى أحد ثلاثة أنواع:
| النوع | الوصف | أمثلة على الأسئلة |
|---|---|---|
scale | تقييمات رقمية (1-5، 1-10، إلخ) | "قيّم هذا من 1-5"، "أعطِ درجة من 0-10" |
categorical | خيارات محددة (نعم/لا، أ/ب/ج) | "هل توافق؟"، "أيهما تفضّل: أ، ب، أم ج؟" |
qualitative | آراء مفتوحة | "ما رأيك؟"، "ما مخاوفك؟" |
بالنسبة للأسئلة النوعية، تُجمَّع الردود تلقائياً في موضوعات (مثل: "مخاوف الخصوصية"، "عوائق التكلفة"). يحتوي حقل value لكل رد على الموضوع المخصص له.
أنواع الأحداث
1. حدث البداية
{"type": "start", "total": 10}
يشير إلى بدء المعالجة مع إجمالي عدد العقول.
2. حدث التصنيف
{
"type": "classification",
"classification": {
"type": "scale",
"scaleRange": [1, 5]
}
}
يشير إلى كيفية تصنيف السؤال. بالنسبة لأسئلة المقياس، يتضمن النطاق المكتشف. بالنسبة للأسئلة الفئوية، يتضمن الخيارات المكتشفة.
3. حدث الإجابة
{
"type": "answer",
"sparkId": "spark-1",
"sparkName": "Emma",
"discipline": "College Student",
"profileImageUrl": "https://...",
"groupId": "group-123",
"groupName": "Gen Z Consumers",
"answer": "4\n\nI think this is a solid product but could improve..."
}
يُرسَل لكل رد فردي من عقل. بالنسبة لأسئلة المقياس والفئوية، تبدأ الإجابة بالتقييم أو الاختيار يليه التبرير.
4. حدث التجميع
{"type": "aggregating"}
يشير إلى أن الذكاء الاصطناعي يجمّع جميع الردود الآن. بالنسبة للأسئلة النوعية، يتضمن هذا تجميع الموضوعات.
5. حدث النتيجة
{
"type": "result",
"outputData": {
"title": "What features would make you switch to a competitor product?",
"type": "categorical",
"classification": {
"type": "categorical",
"options": ["Yes", "No", "Maybe"]
},
"groups": [
{
"group": "Gen Z Consumers",
"value": "Better Price",
"alignmentScore": 82,
"answers": [
{
"value": "Price",
"persona": "Emma",
"discipline": "College Student",
"message": "I would switch if a competitor offered better pricing...",
"imageUrl": "https://...",
"reliabilityScore": 84
}
]
}
]
},
"outputType": "bar"
}
يحتوي على النتائج المجمّعة مع الردود المصنّفة. يُحسَب alignmentScore وreliabilityScore لكل إجابة قبل إعادة النتيجة على endpoints الإصدار v1 (راجع تسجيل Alignment).
6. حدث الانتهاء
{"type": "done"}
يشير إلى اكتمال التدفق.
هيكل بيانات الإخراج
| الحقل | النوع | الوصف |
|---|---|---|
title | string | السؤال الأصلي |
type | string | نوع الاستجابة: "scale" أو "categorical" أو "qualitative" |
classification | object | تفاصيل التصنيف (النوع، نطاق المقياس، أو الخيارات) |
groups | array | الردود المجمّعة حسب مجموعة Spark |
groups[].group | string | اسم المجموعة |
groups[].value | string | القيمة السائدة للمجموعة (المتوسط للمقياس، الأكثر شيوعاً للفئوي، الموضوع السائد للنوعي) |
groups[].alignmentScore | number? | متوسط reliabilityScore لكل إجابة في المجموعة (0-100). راجع تسجيل Alignment. يُحذف عندما لا يمكن تسجيل أي إجابة في المجموعة. |
groups[].answers | array | ردود العقول الفردية |
groups[].answers[].value | string | القيمة المستخرجة: رقم للمقياس، خيار للفئوي، موضوع للنوعي |
groups[].answers[].persona | string | اسم Spark |
groups[].answers[].discipline | string | تخصص Spark أو دوره |
groups[].answers[].message | string | نص الرد الكامل (التبرير للمقياس والفئوي، الإجابة الكاملة للنوعي) |
groups[].answers[].imageUrl | string | رابط صورة ملف Spark |
groups[].answers[].reliabilityScore | number? | درجة موثوقية العقل الفردي (0-100): مدى توافق إجابة هذا العقل مع تعريف شخصيته الخاصة. راجع تسجيل Alignment. يُحذف عند تخطي المقيّم (systemPrompt قصير، رسالة فارغة) أو فشله. |
شرح أنواع الاستجابات
ردود المقياس:
value: التقييم الرقمي (مثل: "4")message: تبرير موجز للتقييمgroups[].value: متوسط التقييم عبر المجموعة
الردود الفئوية:
value: الخيار المحدد (مثل: "نعم"، "الخيار أ")message: تبرير موجز للاختيارgroups[].value: الخيار الأكثر شيوعاً في المجموعة
الردود النوعية:
value: الموضوع أو المحور المخصص (مثل: "مخاوف الخصوصية"، "عوائق التكلفة")message: نص الرد الكاملgroups[].value: الموضوع السائد في المجموعة- تُجمَّع الموضوعات تلقائياً من جميع الردود (يُحدَّد 3-6 موضوعات)
تسجيل Alignment
تتضمن كل إجابة panel درجتين في استجابة API الإصدار v1:
groups[].answers[].reliabilityScore(0-100، عدد صحيح، اختياري): درجة لكل عقل تقيس مدى توافق إجابته معsystemPromptالخاص به. تُحسَب بإعادة تقييم الرد بنفس المقيّم المستخدم في محادثات Spark الفردية، لذا تكون قيمة panel في الإصدار v1 قابلة للمقارنة مباشرة مع قيمreliabilityScoreللعقل الفردي.groups[].alignmentScore(0-100، عدد صحيح، اختياري): متوسطreliabilityScoreلكل إجابة في تلك المجموعة. تعرضه الواجهة كمؤشر Alignment للمجموعة (High / Medium / Low).
نطاقات التصنيف المستخدمة في الواجهة (غير موجودة في الحمولة، مدرجة هنا حتى يتمكن مستهلكو API من المطابقة):
| النطاق | المدى |
|---|---|
| High | 67-100 |
| Medium | 34-66 |
| Low | 0-33 |
متى تُحذف الحقول: يتخطى المقيّم الإجابات التي يكون فيها systemPrompt للعقل أقل من 20 حرفاً، أو تكون رسالة الإجابة فارغة، أو عند فشل استدعاء المقيّم نفسه. إذا تخطى جميع الإجابات في مجموعة ما، يُحذف alignmentScore تلك المجموعة أيضاً.
التوقيت: في endpoints الإصدار v1، يعمل التسجيل بشكل متزامن قبل إعادة الاستجابة، لذا تكون الدرجات موجودة في نفس الحمولة مع بقية outputData. يضيف هذا بضع ثوانٍ من التأخير فوق وقت توليد الـ panel. المستهلكون الذين يحتاجون نتيجة panel أسرع بدون Alignment يمكنهم التقييم على دفعات في مرحلة لاحقة بدلاً من الاعتماد على الدرجة المضمّنة.
الحالة: هذا حل مؤقت بديل لمقياس توافق المجموعة المستقبلي (القرب من نتائج الأبحاث التجريبية). ستُحفظ أسماء الحقول عند إطلاق ذلك المقياس، لكن دلالات alignmentScore قد تتغير.
مرفقات الملفات
يمكنك إرفاق ملفات وروابط وكلمات مفتاحية لتوفير السياق لأسئلة الـ panel. ستتلقى Minds المحتوى المعالَج قبل الإجابة.
أنواع المرفقات
1. مرفقات الملفات (attachments)
ارفع مستندات وملفات PDF وصوراً وجداول بيانات للتحليل:
{
"question": "What improvements would you suggest for this product spec?",
"attachments": [
{
"url": "https://example.com/product-spec.pdf",
"name": "Product Specification v2.1",
"type": "application/pdf"
},
{
"path": "uploads/user-research.docx",
"name": "User Research Findings"
}
]
}
الصيغ المدعومة:
- المستندات: PDF، DOCX، TXT، MD
- الصور: PNG، JPG، WEBP (مع OCR)
- جداول البيانات: CSV، XLSX
مصادر الملفات:
url: رابط خارجي (يُنزَّل ويُعالَج)path: مسار تخزين Supabase (يُوقَّع تلقائياً ويُعالَج)
2. مرفقات الروابط (links)
جلب صفحات الويب وتحليلها (يستخدم Firecrawl للمواقع التي تعتمد على JavaScript مع لقطات الشاشة):
{
"question": "Compare our pricing to these competitors",
"links": [
{ "label": "https://competitor-a.com/pricing", "id": "link-1" },
{ "label": "https://competitor-b.com/pricing", "id": "link-2" }
]
}
المميزات:
- تصيير JavaScript (Firecrawl)
- التقاط لقطات الشاشة للسياق البصري
- استخراج Markdown
- اقتطاع تلقائي للمحتوى (3000 حرف لكل رابط عند تعدد الروابط، 15000 لرابط واحد)
3. سياق الكلمات المفتاحية (keywords)
وفّر كلمات مفتاحية مع روابط مصادرها لسياق إضافي:
{
"question": "How can we improve sustainability?",
"keywords": [
{
"label": "circular economy",
"url": "https://en.wikipedia.org/wiki/Circular_economy",
"id": "kw-1"
},
{
"label": "carbon neutral packaging",
"url": "https://example.com/carbon-neutral-guide",
"id": "kw-2"
}
]
}
مثال كامل مع المرفقات
curl -X POST "https://getminds.ai/api/v1/panels/panel-id/ask" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"question": "Based on this product design and competitor analysis, what features should we prioritize?",
"groupIds": ["product-managers", "designers"],
"attachments": [
{
"url": "https://example.com/product-design-v3.pdf",
"name": "Product Design v3",
"type": "application/pdf"
}
],
"links": [
{ "label": "https://competitor.com/features" }
],
"keywords": [
{
"label": "user experience best practices",
"url": "https://uxdesign.com/best-practices"
}
]
}'
المعالجة:
- تُحلَّل الملفات بالتوازي (PDFs: استخراج النص، الصور: OCR/رؤية)
- تُجلَب الروابط عبر Firecrawl (تصيير JavaScript مع لقطات الشاشة)
- يُحقَن المحتوى في سياق السؤال لجميع العقول
- تُعالَج المرفقات الفاشلة بشكل سلس مع رسائل احتياطية
نصائح:
- أرفق الملفات ذات الصلة فقط (كل ملف يضيف وقت معالجة)
- استخدم الروابط للمحتوى الديناميكي على الويب
- استخدم الكلمات المفتاحية لسياق إضافي من الويب
- مهلة معالجة الملفات: 30 ثانية لكل ملف
- مهلة جلب الروابط: 15 ثانية لكل رابط
مثال على الطلب
curl -X POST "https://getminds.ai/api/v1/panels/550e8400-e29b-41d4-a716-446655440000/ask" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"question": "On a scale of 1-10, how likely are you to recommend this product?"
}'
مثال: JavaScript EventSource
const eventSource = new EventSource(
'https://getminds.ai/api/v1/panels/{panelId}/ask',
{
headers: {
'Authorization': 'Bearer minds_your_api_key',
'Content-Type': 'application/json'
}
}
);
// Note: For POST requests with SSE, use fetch with ReadableStream
const response = await fetch('https://getminds.ai/api/v1/panels/{panelId}/ask', {
method: 'POST',
headers: {
'Authorization': 'Bearer minds_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
question: 'How satisfied are you with the current pricing?'
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const event = JSON.parse(line.slice(6));
console.log('Event:', event.type, event);
}
}
}
ردود الخطأ
400 Bad Request - السؤال مفقود أو لا توجد مجموعات مرتبطة
{
"statusCode": 400,
"message": "question is required"
}
{
"statusCode": 400,
"message": "No groups attached to this panel"
}
{
"statusCode": 400,
"message": "No minds in panel groups"
}
403 Forbidden - غير مصرّح لك بالوصول إلى هذا الـ panel
404 Not Found - الـ panel غير موجود
تجاوز النموذج
افتراضياً، تستخدم ردود الـ panel مزوّد الفريق المفضّل إذا كان مضبوطاً ومؤهلاً، وإلا تستخدم الافتراضي الخاص بالمنتج. يمكنك تجاوز النموذج والمزوّد لكل طلب على حدة لإجراء تجارب عبر عائلات النماذج المختلفة:
curl -X POST "https://getminds.ai/api/v1/panels/{panelId}/ask" \
-H "Authorization: Bearer minds_…_key" \
-H "Content-Type: application/json" \
-d '{
"question": "Rate this 1-5",
"model": "gpt-4o",
"provider": "openai"
}'
المزوّدون المدعومون: openai وanthropic وgoogle. في طلبات panel، يجب إرسال model وprovider معاً. إذا أُرسل أحدهما فقط، يعيد الـ API خطأ 400 Bad Request. يتقدّم التجاوز لكل طلب على تفضيل مزوّد الفريق.
تعطيل فحص التنوع
يُشغّل منسّق الـ panel حلقة إعادة توليد مفروضة للتنوع بعد التوليد (فحص تشابه bigram الذاتي، كشف تجانس القيم، ملء الحاويات الفارغة) قبل التجميع. هذه هي الطبقة L4 من وصفة الـ panel.
لدراسات الاختزال وتشغيلات المعيار حيث تريد عزل مساهمة هذه الطبقة، مرّر disableDiversityCheck: true:
curl -X POST "https://getminds.ai/api/v1/panels/{panelId}/ask" \
-H "Authorization: Bearer minds_…_key" \
-H "Content-Type: application/json" \
-d '{
"question": "What features matter most to you?",
"disableDiversityCheck": true
}'
عند تفعيل هذا الخيار، تُعاد ردود المشاركين كما وُلِّدت أول مرة تماماً، دون تشغيل أي إعادة توليد في مرحلة ثانية، حتى لو تداخلت الردود بشكل كبير. لا تزال طبقات التصنيف (L3) وRAG لكل Spark (L2) والتجميع (L5) تعمل بشكل طبيعي. توفير التكلفة: ما بين 5-25% أقل من استدعاءات LLM لكل سؤال panel، بحسب عدد الـ sparks التي كان فحص التنوع سيُعيد توليدها.
متى تستخدمه: مقارنات المنهجية، واختبارات A/B لطبقات التنسيق، وإعادة إنتاج السلوك الأساسي. يجب إبقاء هذا الخيار معطلاً في panels الإنتاج (الافتراضي).
تصدير نتائج Panel
أنشئ تقريراً منظّماً لجميع نتائج الـ panel بصيغة Markdown.
Endpoint: POST /api/v1/panels/{panelId}/export
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
جسم الطلب
{
"format": "md"
}
المعاملات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
format | string | لا | صيغة التصدير. حالياً يُدعم "md" (Markdown) فقط. الافتراضي: "md" |
الاستجابة
{
"data": {
"format": "md",
"content": "# Panel Report: Consumer Research Panel\n\n## Executive Summary\n\nThis panel survey gathered insights from 15 participants across 3 consumer groups...\n\n## Methodology\n\n- 3 groups, 15 participants\n- 5 questions asked\n\n## Results by Question\n\n### Q1: How important is sustainability when choosing products?\n\n**Type:** scale\n\n#### Gen Z Consumers (dominant: Very Important)\n\n..."
}
}
هيكل التقرير
يتضمن التقرير المُولَّد:
- الملخص التنفيذي - نظرة عامة من 2-3 فقرات على النتائج الرئيسية
- المنهجية - المجموعات والمشاركون والهيكل
- النتائج حسب السؤال - مقارنة عبر المجموعات مع رؤى واقتباسات رئيسية
- التحليل عبر المجموعات - الأنماط والاتجاهات عبر المجموعات
- الاستنتاجات والتوصيات - رؤى قابلة للتنفيذ
مثال على الطلب
curl -X POST "https://getminds.ai/api/v1/panels/550e8400-e29b-41d4-a716-446655440000/export" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"format": "md"
}'
ردود الخطأ
403 Forbidden - غير مصرّح لك بالوصول إلى هذا الـ panel
404 Not Found - الـ panel غير موجود
التحقق من حالة التصدير
تحقق من حالة مهمة تصدير الـ panel. إذا لم يُقدَّم jobId، تُعاد حالة أحدث عملية تصدير.
Endpoint: GET /api/v1/panels/{panelId}/export-status
Headers:
Authorization: Bearer minds_your_api_key
معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
jobId | string | لا | معرّف مهمة محدد. إذا حُذف، تُعاد أحدث مهمة تصدير |
الاستجابة
{
"data": {
"status": "completed",
"downloadUrl": "/api/v1/panels/{panelId}/export-download?jobId=job-123"
}
}
قيم الحالة
| الحالة | الوصف |
|---|---|
queued | مهمة التصدير في انتظار المعالجة |
processing | جارٍ توليد التصدير (يتضمن حقل progress، 0-100) |
completed | التصدير جاهز للتنزيل (يتضمن حقل downloadUrl) |
failed | فشل التصدير (يتضمن حقل error مع السبب) |
مثال على الطلب
curl -X GET "https://getminds.ai/api/v1/panels/{panelId}/export-status?jobId=job-123" \
-H "Authorization: Bearer minds_your_api_key"
ردود الخطأ
403 Forbidden - غير مصرّح لك بالوصول إلى هذا الـ panel
404 Not Found - الـ panel أو المهمة غير موجودة
تنزيل التصدير
نزّل تقرير الـ panel المُصدَّر كملف PDF.
Endpoint: GET /api/v1/panels/{panelId}/export-download
Headers:
Authorization: Bearer minds_your_api_key
معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
jobId | string | نعم | معرّف مهمة التصدير (من استجابة export-status) |
الاستجابة
يُعيد ملف PDF مع الترويسات المناسبة:
Content-Type: application/pdfContent-Disposition: attachment; filename="Panel-Report.pdf"
مثال على الطلب
curl -X GET "https://getminds.ai/api/v1/panels/{panelId}/export-download?jobId=job-123" \
-H "Authorization: Bearer minds_your_api_key" \
-o panel-report.pdf
ردود الخطأ
400 Bad Request - معامل jobId مفقود أو المهمة لم تكتمل بعد
403 Forbidden - غير مصرّح لك بالوصول إلى هذا الـ panel
404 Not Found - الـ panel أو المهمة غير موجودة
مثال على سير العمل الكامل
إليك سير عمل كامل لإنشاء panel واستخدامه:
# 1. أنشئ مجموعات Spark أولاً (باستخدام Sparks API)
# افترض أنك أنشأت مجموعات بالمعرّفات: group-genz, group-millennials
# 2. أنشئ panel مع تلك المجموعات
curl -X POST "https://getminds.ai/api/v1/panels" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Product Pricing Research",
"groupIds": ["group-genz", "group-millennials"]
}'
# الاستجابة: { "data": { "id": "panel-123", ... } }
# 3. اطرح أسئلة على الـ panel
curl -X POST "https://getminds.ai/api/v1/panels/panel-123/ask" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"question": "What price point would you consider fair for this product?"
}'
# 4. اطرح سؤالاً آخر
curl -X POST "https://getminds.ai/api/v1/panels/panel-123/ask" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"question": "How does this compare to competitor pricing?"
}'
# 5. صدّر النتائج كتقرير
curl -X POST "https://getminds.ai/api/v1/panels/panel-123/export" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{"format": "md"}'
# 6. تحقق من حالة التصدير (استمر في الاستطلاع حتى الاكتمال)
curl -X GET "https://getminds.ai/api/v1/panels/panel-123/export-status" \
-H "Authorization: Bearer minds_your_api_key"
# الاستجابة: { "data": { "status": "completed", "downloadUrl": "/api/v1/panels/panel-123/export-download?jobId=..." } }
# 7. نزّل ملف PDF
curl -X GET "https://getminds.ai/api/v1/panels/panel-123/export-download?jobId=job-123" \
-H "Authorization: Bearer minds_your_api_key" \
-o panel-report.pdf
ملخص رموز الخطأ
| الرمز | الوصف |
|---|---|
| 400 | Bad Request - حقول مطلوبة مفقودة أو بيانات غير صالحة |
| 401 | Unauthorized - مفتاح API غير صالح أو مفقود |
| 403 | Forbidden - غير مصرّح لك بالوصول إلى هذا الـ panel |
| 404 | Not Found - الـ panel غير موجود |
| 500 | Internal Server Error - خطأ على جانب الخادم |
الخطوات التالية
- أنشئ عقولاً لملء مجموعات الـ panel
- تعرّف على المصادقة
- راجع الأخطاء والحدود