Minds Team

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://..."
            }
          ]
        }
      ]
    }
  ]
}

حقول الاستجابة

الحقلالنوعالوصف
idstringالمعرّف الفريد للـ panel
namestringاسم الـ panel
flowModestringدائماً "panel" لتدفقات الـ panel
createdAtstringطابع زمني للإنشاء بصيغة ISO 8601
updatedAtstringطابع زمني لآخر تحديث بصيغة ISO 8601
messageCountnumberإجمالي عدد الرسائل (الأسئلة والردود)
groupsarrayمجموعات العقول المرتبطة بهذا الـ panel
groups[].sparkCountnumberعدد العقول في المجموعة

مثال على الطلب

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"]
}

المعاملات

المعاملالنوعمطلوبالوصف
namestringنعماسم الـ panel
groupIdsarrayلامصفوفة من معرّفات مجموعات العقول لإرفاقها بالـ 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"
    }
  ]
}

المعاملات

المعاملالنوعمطلوبالوصف
questionstringنعمالسؤال الذي سيُطرح على جميع العقول في الـ panel
groupIdsarrayلاتحديد السؤال لمجموعات بعينها (الافتراضي: جميع المجموعات)
attachmentsarrayلامرفقات ملفات (PDFs، صور، مستندات) لتوفير السياق. راجع مرفقات الملفات أدناه.
linksarrayلاروابط لجلبها وتحليلها (يستخدم Firecrawl للمواقع التي تعتمد على JavaScript). كل رابط يحتوي على label (نص الرابط) وid اختياري.
keywordsarrayلاكلمات مفتاحية مع روابط مصدرها للسياق. كل عنصر يحتوي على label (الكلمة المفتاحية) وurl (رابط المصدر) وid اختياري.
modelstringلاتجاوز نموذج الذكاء الاصطناعي المستخدم لردود المشاركين. يجب إرساله مع provider. راجع تجاوز النموذج أدناه.
providerstringلامزوّد الذكاء الاصطناعي لتجاوز النموذج: openai أو anthropic أو google. يجب إرساله مع model.
disableDiversityCheckbooleanلاعند تعيينه 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"}

يشير إلى اكتمال التدفق.

هيكل بيانات الإخراج

الحقلالنوعالوصف
titlestringالسؤال الأصلي
typestringنوع الاستجابة: "scale" أو "categorical" أو "qualitative"
classificationobjectتفاصيل التصنيف (النوع، نطاق المقياس، أو الخيارات)
groupsarrayالردود المجمّعة حسب مجموعة Spark
groups[].groupstringاسم المجموعة
groups[].valuestringالقيمة السائدة للمجموعة (المتوسط للمقياس، الأكثر شيوعاً للفئوي، الموضوع السائد للنوعي)
groups[].alignmentScorenumber?متوسط reliabilityScore لكل إجابة في المجموعة (0-100). راجع تسجيل Alignment. يُحذف عندما لا يمكن تسجيل أي إجابة في المجموعة.
groups[].answersarrayردود العقول الفردية
groups[].answers[].valuestringالقيمة المستخرجة: رقم للمقياس، خيار للفئوي، موضوع للنوعي
groups[].answers[].personastringاسم Spark
groups[].answers[].disciplinestringتخصص Spark أو دوره
groups[].answers[].messagestringنص الرد الكامل (التبرير للمقياس والفئوي، الإجابة الكاملة للنوعي)
groups[].answers[].imageUrlstringرابط صورة ملف Spark
groups[].answers[].reliabilityScorenumber?درجة موثوقية العقل الفردي (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 من المطابقة):

النطاقالمدى
High67-100
Medium34-66
Low0-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"
}

المعاملات

المعاملالنوعمطلوبالوصف
formatstringلاصيغة التصدير. حالياً يُدعم "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..."
  }
}

هيكل التقرير

يتضمن التقرير المُولَّد:

  1. الملخص التنفيذي - نظرة عامة من 2-3 فقرات على النتائج الرئيسية
  2. المنهجية - المجموعات والمشاركون والهيكل
  3. النتائج حسب السؤال - مقارنة عبر المجموعات مع رؤى واقتباسات رئيسية
  4. التحليل عبر المجموعات - الأنماط والاتجاهات عبر المجموعات
  5. الاستنتاجات والتوصيات - رؤى قابلة للتنفيذ

مثال على الطلب

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

معاملات الاستعلام

المعاملالنوعمطلوبالوصف
jobIdstringلامعرّف مهمة محدد. إذا حُذف، تُعاد أحدث مهمة تصدير

الاستجابة

{
  "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

معاملات الاستعلام

المعاملالنوعمطلوبالوصف
jobIdstringنعممعرّف مهمة التصدير (من استجابة export-status)

الاستجابة

يُعيد ملف PDF مع الترويسات المناسبة:

  • Content-Type: application/pdf
  • Content-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

ملخص رموز الخطأ

الرمزالوصف
400Bad Request - حقول مطلوبة مفقودة أو بيانات غير صالحة
401Unauthorized - مفتاح API غير صالح أو مفقود
403Forbidden - غير مصرّح لك بالوصول إلى هذا الـ panel
404Not Found - الـ panel غير موجود
500Internal Server Error - خطأ على جانب الخادم

الخطوات التالية