> ## Documentation Index
> Fetch the complete documentation index at: https://docs.logbrew.co/llms.txt
> Use this file to discover all available pages before exploring further.

# معاملات الاستعلام في الـ API وترقيم الصفحات بالمؤشر

> صفِّ بيانات القياس عن بُعد في LogBrew حسب المشروع والخدمة والإصدار والبيئة والخطورة والتتبّع وحالة المشكلة والأولوية والمسؤول والوقت. تابع النتائج بالمؤشر.

يقبل كل مسار قراءة مفاتيح استعلام خاصة به. ويرفض المسار الوارد في
[مصفوفة عوامل التصفية](#filter-matrix) أي مفتاح غير معروف أو قيمة من نوع خاطئ،
فيُرجع `422` و`validation_failed`، ما لم تذكر المصفوفة غير ذلك. الأسماء البديلة
المختصرة مثل `project` و`trace` و`user` ليست مفاتيح استعلام. لا تنقل عامل تصفية
من مسار إلى آخر.

## إنشاء طلب مع عوامل التصفية

ضع سلسلة الاستعلام بعد المسار. استخدم `--data-urlencode` حتى تبقى الأحرف المحجوزة
آمنة. يقرأ هذا الطلب السجلات الحرجة لمشروع واحد خلال آخر 24 ساعة:

```bash theme={null}
curl --get "https://api.logbrew.co/api/logs" \
  --header "Authorization: Bearer $LOGBREW_ACCOUNT_BEARER" \
  --data-urlencode "project_id=<project-uuid>" \
  --data-urlencode "severity=critical" \
  --data-urlencode "since=24h"
```

أضف عوامل التصفية بهذا الترتيب:

1. اختر المشروع باستخدام `project_id` أو `project_ids`.
2. أضف نطاقًا زمنيًا باستخدام `since`، ويمكنك إضافة `until`.
3. أضف عوامل تصفية الخدمة أو الإصدار أو البيئة أو الحالة أو العوامل الخاصة
   بالإشارة.
4. اضبط `limit` للحصول على صفحة أصغر.
5. لا تضف حقول المؤشر إلا بعد أن تُرجعها استجابة بالمؤشر.

يطابق كل صف مُرجَع كل عوامل التصفية في الطلب. وإذا حذفت عامل تصفية، يُطبَّق
الإعداد الافتراضي للمسار. مثلًا، يستخدم `GET /api/logs` القيمة `status=active`
عندما تحذف `status`.

## <span id="filter-matrix">مصفوفة عوامل التصفية</span>

يجب أن تكون المفاتيح الواردة في عمود «مطلوب» موجودة في الطلب. وكل المفاتيح الأخرى
اختيارية.

| المسار | مطلوب | مفاتيح الاستعلام الاختيارية |
| - | - | - |
| `GET /api/logs` | لا يوجد | `project_id` أو `project_ids`، `severity`، `level` (اسم بديل للتوافق)، `status`، `search`، `trace_id`، `service_name`، `release`، `environment`، `since`، `until`، `attribute_filters`، `pagination`، `cursor_time`، `cursor_id`، `limit` |
| `GET /api/logs/attributes` | `since` | `project_id` أو `project_ids`، `type`، `search`، `severity`، `level`، `service_name`، `release`، `environment`، `until`، `cursor_count`، `cursor_path`، `cursor_type`، `limit` |
| `GET /api/telemetry/issues` | لا يوجد | `project_id` أو `project_ids`، `status`، `severity`، `priority`، `assignee`، `service_name`، `release`، `environment`، `since`، `until`، `pagination`، `cursor_time`، `cursor_id`، `limit`، `response_version` |
| `GET /api/telemetry/issues/{issue_id}` | لا يوجد | `response_version`. يتجاهل هذا المسار المفاتيح الأخرى. |
| `GET /api/telemetry/issues/{issue_id}/events` | لا يوجد | `pagination`، `cursor_time`، `cursor_id`، `limit` |
| `GET /api/telemetry/issues/assignees` | `project_id` | `response_version` |
| `GET /api/telemetry/actions` | لا يوجد | `project_id` أو `project_ids`، `name`، `distinct_id`، `service_name`، `release`، `environment`، `since`، `until`، `pagination`، `cursor_time`، `cursor_id`، `limit` |
| `GET /api/telemetry/metrics` | لا يوجد | `project_id` أو `project_ids`، `name`، `service_name`، `release`، `environment`، `since`، `until`، `pagination`، `cursor_time`، `cursor_id`، `limit` |
| `GET /api/telemetry/metrics/series` | `project_id`، `name`، `since` | `until`، `interval`، `group_by`، `service_name`، `release`، `environment`، `series_limit` |
| `GET /api/telemetry/releases` | لا يوجد | `project_id` أو `project_ids`، `service_name`، `release`، `environment`، `since`، `until`، `pagination`، `cursor_time`، `cursor_project_id`، `cursor_release`، `cursor_environment`، `cursor_service_name`، `limit` |
| `GET /api/telemetry/traces` | لا يوجد | `project_id` أو `project_ids`، `service_name`، `release`، `environment`، `status`، `since`، `until`، `min_duration_ms`، `pagination`، `cursor_time`، `cursor_trace_id`، `limit` |
| `GET /api/telemetry/traces/{trace_id}` و`.../summary` | لا يوجد | `project_id`، `release`، `environment` |
| `GET /api/telemetry/summary/volume` | `project_id`، `since` | `until`، `interval`، `service_name`، `release`، `environment`، `response_version` |
| `GET /api/telemetry/deployments` | `project_id` | `release`، `environment`، `service_name`، `status`، `since`، `until`، `pagination`، `cursor_time`، `cursor_id`، `limit` |
| `GET /api/telemetry/deployments/{deployment_id}` | `project_id` | لا يوجد |
| `GET /api/telemetry/traces/{trace_id}/investigation` | لا يوجد | `project_id`، `release`، `environment`، `response_version` |
| `GET /api/telemetry/traces/{trace_id}/spans/{span_id}/investigation` | `project_id`، `release`، `environment` | لا يوجد |
| `GET /api/telemetry/issues/{issue_id}/investigation` | لا يوجد | `response_version`، و`selection` أو `occurrence_id` |
| `GET /api/telemetry/issues/{issue_id}/correction-verification` | `baseline_occurrence_id`، `candidate_deployment_id` | لا يوجد |
| `GET /api/telemetry/releases/investigation` | `project_id`، `release`، `environment`، `service_name` | `response_version` |
| `GET /api/telemetry/metrics/investigation` | `project_id`، `name`، `since` | `until`، `interval`، `group_by`، `service_name`، `release`، `environment`، `series_limit`، `response_version` |
| `GET /api/telemetry/analytics/overview` | `project_id`، `since` | `until`، `interval`، `top_limit`، `service_name`، `release`، `environment`، `response_version` |
| `GET /api/telemetry/analytics/properties` | `project_id`، `since` | `until`، `limit`، `service_name`، `release`، `environment`، `response_version` |

في التحقيق في المشكلات، تكون قيمة `selection` إحدى القيم `first` أو `latest` أو
`recommended`. أرسل `selection` أو `occurrence_id`، لا كليهما. ويحتاج كلاهما إلى
`response_version` من 2 إلى 13. مع الإصدار 2 أو أحدث ودون أداة اختيار، يستخدم
LogBrew القيمة `recommended`. احصل على `occurrence_id` من
`GET /api/telemetry/issues/{issue_id}/events`.

تقبل مسارات التحليلات من نوع `POST` نص JSON. راجع
[تحليلات المنتج](/ar/concepts/product-analytics).

## عوامل التصفية المشتركة والخاصة بالإشارة

تضيّق `service_name` و`release` و`environment` نطاق كل قائمة لبيانات القياس عن
بُعد. استخدم القيم نفسها تمامًا التي يرسلها الـ SDK لديك.

بعض عوامل التصفية خاصة بإشارة واحدة:

* تقبل السجلات `search` و`trace_id` و`severity` و`attribute_filters`.
* تقبل السجلات `status`: `active` (الافتراضي) أو `ignored` أو `all`. يختار
  `ignored` السجلات التي تخفيها قاعدة سجلات من العرض النشط.
* تقبل المشكلات `status` الخاصة بالمشكلة: `unresolved` أو `resolved` أو
  `archived`. و`ignored` اسم أقدم لـ `archived` ويختار المشكلات نفسها.
* تقبل المشكلات `severity`: `info` أو `warning` أو `error` أو `critical`.
* تقبل المشكلات `priority`: `high` أو `medium` أو `low`.
* تقبل المشكلات `assignee`: `me` للمشكلات المُسندة إلى الحساب الذي سجّل الدخول،
  أو `none` للمشكلات التي ليس لها مسؤول، أو `my_teams` للمشكلات المُسندة إلى فرقك، أو معرّف مستخدم، أو `team:<team_id>`.
* تقبل الإجراءات والمقاييس `name`.
* تقبل الإجراءات `distinct_id`.
* تقبل التتبّعات `status` الخاصة بالتتبّع و`min_duration_ms`.
* تقبل عمليات النشر `status`: `succeeded` أو `failed`.

يقارن عاملا التصفية `severity` للسجلات والمشكلات الخطورة الفعلية. إذا غيّرت قاعدة
الخطورة، يستخدم عامل التصفية قيمة القاعدة. راجع
[قيم الخطورة](/ar/reference/telemetry-response-shapes#severity-values).

## النطاق الزمني

يقبل `since` عددًا صحيحًا موجبًا من الساعات أو الأيام، مثل `24h` أو `7d`، أو طابعًا
زمنيًا بصيغة RFC3339. والمدة المختصرة نسبية إلى وقت كل طلب.

لا يقبل `until` إلا طابعًا زمنيًا بصيغة RFC3339. وهو وقت نهاية غير شامل: الصف
الذي يقع عند `until` تمامًا ليس ضمن النتيجة. أما `since` فشامل. مثلًا، يختار
`since=2026-10-01T00:00:00Z` و`until=2026-10-02T00:00:00Z` يومًا واحدًا كاملًا.
يقارن LogBrew الأوقات بدقة المللي ثانية.

يجب أن يكون `until` بعد `since`. إذا لم يكن كذلك، أو إذا لم يكن `until` طابعًا
زمنيًا بصيغة RFC3339، يفشل الطلب مع `422` و`validation_failed`.

للقراءة عبر عدة صفحات، اختر وقت بدء واحدًا بصيغة RFC3339 وأبقِه في كل صفحة. وأبقِ
قيمة `until` نفسها في كل صفحة أيضًا.

يقرأ هذا الطلب سجلات الأخطاء ليوم واحد:

```bash theme={null}
curl --get "https://api.logbrew.co/api/logs" \
  --header "Authorization: Bearer $LOGBREW_ACCOUNT_BEARER" \
  --data-urlencode "project_id=<project-uuid>" \
  --data-urlencode "severity=error" \
  --data-urlencode "since=2026-10-01T00:00:00Z" \
  --data-urlencode "until=2026-10-02T00:00:00Z"
```

<Note>
  تستخدم قائمة عمليات النشر قواعد زمنية مختلفة. لا يقبل `since` و`until` فيها
  إلا طوابع زمنية بصيغة RFC3339، وكلاهما شامل. ويقارنان وقت انتهاء عملية النشر.
</Note>

## إصدار استجابة المشكلات

تقبل قائمة المشكلات وتفاصيل المشكلة `response_version=1` أو `response_version=2`، `response_version=3`
أو `response_version=4`. الإصدار 1 هو الافتراضي. وتفشل أي قيمة أخرى مع `422`
و`validation_failed`.

* يعرض الإصدار 1 الحالة المؤرشفة بالاسم `ignored`. ولا يعرض الأولوية.
* يعرض الإصدار 2 الحالة المؤرشفة بالاسم `archived`. ويضيف `priority`
  و`priority_source`.
* يحتوي الإصدار 3 على كل حقول الإصدار 2. ويضيف `assignee`.
* يحتوي الإصدار 4 على كل حقول الإصدار 3. ويحمل `assignee` الحقل `type`: `user` أو `team`.

يقبل كل إصدار `status=archived` و`priority` و`assignee`. راجع
[استجابة المشكلة](/ar/reference/telemetry-response-shapes#issue-response).

## عامل تصفية الخطورة

استخدم `severity=info|warning|error|critical` مع `GET /api/logs`. والمفتاح الأقدم
`level` اسم بديل للتوافق. يقبل المفتاحان القيم المعيارية والأسماء البديلة `trace`
و`debug` و`warn` و`fatal`. يحوّل LogBrew الاسم البديل إلى قيمته المعيارية قبل
المقارنة.

إذا أرسل الطلب `severity` و`level` معًا، يوحّد LogBrew قيمتيهما أولًا. وتُرفض
القيم المتعارضة مع:

```text theme={null}
log severity and level filters conflict; use one value
```

## <span id="trace-filters">عوامل تصفية التتبّعات</span>

في اكتشاف التتبّعات، تكون قيمة `status` إما `error` أو `ok`. احذفها لتضمين الاثنين.
يجب أن تكون قيمة `min_duration_ms` صفرًا أو أكثر. وهي تنطبق على اكتشاف التتبّعات
فقط.

يعثر هذا الطلب على تتبّعات الأخطاء التي استغرقت 500 مللي ثانية على الأقل:

```bash theme={null}
curl --get "https://api.logbrew.co/api/telemetry/traces" \
  --header "Authorization: Bearer $LOGBREW_ACCOUNT_BEARER" \
  --data-urlencode "project_id=<project-uuid>" \
  --data-urlencode "status=error" \
  --data-urlencode "min_duration_ms=500" \
  --data-urlencode "since=7d"
```

في تفاصيل التتبّع وملخصه، رمّز `trace_id` بترميز النسبة المئوية (percent-encoding)
بوصفه جزءًا من المسار. لا ترسله كمفتاح استعلام.

## <span id="project-scope">نطاق المشروع</span>

استخدم `project_id=<project-uuid>` لقراءة مشروع واحد. في المسارات التي تذكر
`project_ids` في المصفوفة، استخدم `project_ids=<uuid>,<uuid>` لمجموعة محددة من 2
إلى 50 مشروعًا. وفي هذه المسارات، احذف المفتاحين كليهما لقراءة كل مشروع يستطيع
الحساب قراءته. أما المسار الذي يتطلب `project_id` فلا يقبل إلا مشروعًا واحدًا.

```text theme={null}
project_id=00000000-0000-4000-8000-000000000001
project_ids=00000000-0000-4000-8000-000000000001,00000000-0000-4000-8000-000000000002
```

يرفض LogBrew هذه الاختيارات مع `422` و`validation_failed`:

* طلب يحتوي على `project_id` و`project_ids` معًا.
* قيمة `project_ids` تضم أقل من معرّفين أو أكثر من 50 معرّفًا.
* معرّف مكرر أو معرّف ليس UUID.

إذا كان أحد المعرّفات في `project_ids` لمشروع لا يستطيع الحساب قراءته، يفشل الطلب
مع `404` و`not_found`. لا تحذف هذا المعرّف وتتابع. اطلب من المستخدم اختيار
مجموعة جديدة.

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

## السلاسل المقسّمة إلى فواصل زمنية

يُرجع `GET /api/telemetry/metrics/series` مقياسًا واحدًا مقسّمًا إلى فواصل زمنية.
ويُرجع `GET /api/telemetry/summary/volume` أعداد الإشارات مقسّمة إلى فواصل زمنية.
يستخدم المساران هذه القواعد:

* `since` مطلوب. و`until` اختياري، وقيمته الافتراضية وقت الطلب.
* لا يتجاوز النطاق من `since` إلى `until` مدة 31 يومًا.
* تكون قيمة `interval` إحدى القيم `auto` أو `1m` أو `5m` أو `15m` أو `1h` أو
  `6h` أو `1d`. القيمة الافتراضية `auto`. ويفشل الفاصل الذي ينتج أكثر من 500
  فاصل زمني.
* `service_name` و`release` و`environment` عوامل تصفية مطابقة تامة.

في سلاسل المقاييس، `name` هو الاسم الدقيق للمقياس من
`GET /api/telemetry/metrics`. وتكون قيمة `group_by` إحدى القيم `none` أو
`service_name` أو `release` أو `environment`. وتكون قيمة `series_limit` من 1 إلى
20\.

في حجم الإشارات، يجب ألا يكون `until` في المستقبل، ولا تقبل `response_version`
إلا القيمة `1`.

## تصفية سمات السجلات

استخدم `GET /api/logs/attributes` للعثور على مسارات السمات وأنواعها التي يمكنك
البحث فيها. ثم أرسل `attribute_filters` إلى `GET /api/logs`. يحتاج الطلبان كلاهما
إلى `since`.

### قراءة فهرس السمات

يعثر هذا الطلب على المسارات الرقمية التي تحتوي على `status` في مشروع واحد:

```bash theme={null}
curl --get "https://api.logbrew.co/api/logs/attributes" \
  --header "Authorization: Bearer $LOGBREW_ACCOUNT_BEARER" \
  --data-urlencode "project_id=<project-uuid>" \
  --data-urlencode "since=2026-06-01T00:00:00Z" \
  --data-urlencode "type=number" \
  --data-urlencode "search=status" \
  --data-urlencode "limit=2"
```

الاستجابة كائن، وليست مصفوفة مجرّدة. يحتوي هذا المثال المصطنع على سمتين وعلى
صفحة أخرى:

```json theme={null}
{
  "attributes": [
    { "path": "/http/status_code", "type": "number", "observed_count": 50, "last_seen_at": "2026-06-01T12:00:03.789Z" },
    { "path": "/response/status", "type": "number", "observed_count": 42, "last_seen_at": "2026-06-01T12:00:02.456Z" }
  ],
  "coverage": {
    "total_logs": 60,
    "fully_indexed_logs": 50,
    "partially_indexed_logs": 2,
    "unindexed_logs": 8
  },
  "next_cursor": { "observed_count": 42, "path": "/response/status", "type": "number" }
}
```

تكون قيمة `type` إحدى القيم `string` أو `number` أو `boolean`. و`observed_count`
هو عدد السجلات في النطاق التي تحمل هذا المسار وهذا النوع. و`last_seen_at` هو وقت
أحدثها. قد يحمل السجل الواحد مسارات كثيرة. لا تجمع الأعداد للحصول على عدد
السجلات.

يخبرك `coverage` بالسجلات التي يستطيع عامل تصفية السمات البحث فيها:

| الحقل | المعنى |
| - | - |
| `total_logs` | السجلات التي تطابق عوامل تصفية الفهرس للمشروع والوقت والخطورة والخدمة والإصدار والبيئة. |
| `fully_indexed_logs` | السجلات التي يمكن البحث في كل قيم سماتها المدعومة. |
| `partially_indexed_logs` | السجلات التي استُبعدت بعض قيمها من الفهرس. قد لا يعثر عامل التصفية على قيمة مستبعدة. |
| `unindexed_logs` | السجلات التي لا تستطيع عوامل تصفية السمات ذات الأنواع البحث فيها. |

مجموع المجموعات الثلاث يساوي `total_logs`. ولا تغيّر `type` و`search` والمؤشر في
الفهرس التغطية. والقائمة `attributes` الفارغة لا تعني أن `total_logs` تساوي صفرًا.

لا يحتوي الفهرس على المفتاح `status`. ويقارن عامل تصفية الخطورة فيه الخطورة
الملتقَطة، لا الخطورة الفعلية.

`search` جزء من المسار طوله من 1 إلى 128 بايت دون أحرف تحكم. ويحدد `limit` عدد
السمات في الصفحة.

### متابعة الفهرس

لا يستخدم الفهرس `pagination=cursor`. كرّر كل عامل تصفية، وانسخ الحقول الثلاثة
كلها من `next_cursor`:

| الحقل المُرجَع | مفتاح الطلب التالي |
| - | - |
| `next_cursor.observed_count` | `cursor_count` |
| `next_cursor.path` | `cursor_path` |
| `next_cursor.type` | `cursor_type` |

توقف عندما تكون قيمة `next_cursor` هي `null`.

### تطبيق عامل تصفية ذي نوع

انسخ المسار والنوع من الفهرس. تستخدم المسارات صيغة JSON Pointer، لا المفاتيح
المفصولة بالنقاط. أبقِ أي تهريب `~0` أو `~1` في المسار دون تغيير.

يقرأ هذا الطلب السجلات التي تكون حالة الاستجابة الرقمية فيها 500 أو أكثر:

```bash theme={null}
curl --get "https://api.logbrew.co/api/logs" \
  --header "Authorization: Bearer $LOGBREW_ACCOUNT_BEARER" \
  --data-urlencode "project_id=<project-uuid>" \
  --data-urlencode "since=2026-06-01T00:00:00Z" \
  --data-urlencode 'attribute_filters=[{"path":"/response/status","type":"number","operator":"gte","value":500}]'
```

`attribute_filters` مصفوفة JSON تضم من 1 إلى 4 عوامل تصفية. يجب أن يطابق السجل
كل عامل تصفية. لكل عامل تصفية `path` و`type` و`operator` و`value`. ويجب أن يطابق
نوع JSON لـ `value` قيمة `type`: فالرقم `500` ليس السلسلة `"500"`.

| `type` | قيم `operator` |
| - | - |
| `string` | `eq`, `ne`, `contains`, `starts_with` |
| `number` | `eq`, `ne`, `gt`, `gte`, `lt`, `lte` |
| `boolean` | `eq`, `ne` |

لا يطابق `ne` إلا السجلات التي تحمل المسار. والسجل الذي لا يحمل المسار لا يطابق
`ne`. في النوع `string`، يكون `case_sensitive` اختياريًا وقيمته الافتراضية
`false`. ويرفض LogBrew `"case_sensitive": true` مع `number` و`boolean`.

تنطبق هذه الحدود:

* لا تتجاوز مصفوفة JSON مقدار 4,096 بايت.
* لا تتجاوز القيمة النصية 1,024 بايت.
* يحتاج `contains` و`starts_with` إلى سلسلة غير فارغة.
* يجب أن يكون الرقم محدودًا وأن يقع بين -9,007,199,254,740,992
  و9,007,199,254,740,992.

السجل الذي لا يستطيع الفهرس البحث فيه لا يطابق أي عامل تصفية. لكنه قد يظهر في
طلب لا يحتوي على `attribute_filters`. لمعرفة استجابة السجل، راجع
[استجابة السجل](/ar/reference/telemetry-response-shapes#log-response).

### تصحيح أخطاء السمات

يُرجع كل خطأ أدناه `422` مع `validation_failed`:

| `error` | الإصلاح |
| - | - |
| `log attribute queries require since` | أضف `since` إلى طلب الفهرس، أو إلى طلب السجلات الذي يحتوي على `attribute_filters`. |
| `invalid log attribute filters` | أرسل مصفوفة JSON تضم من 1 إلى 4 عوامل تصفية، لكل منها مسار ونوع وعامل مقارنة وقيمة من الفهرس. |
| `invalid log attribute cursor` | أرسل `cursor_count` و`cursor_path` و`cursor_type` معًا من `next_cursor`. |
| `invalid log attribute search` | أرسل جزءًا غير فارغ من المسار طوله 128 بايت أو أقل. |

صحّح الطلب قبل أن تعيد المحاولة. لا تحذف عامل تصفية، لأن ذلك يغيّر النتيجة.

## <span id="cursor-pagination">ترقيم الصفحات بالمؤشر</span>

وضع المؤشر اختياري. ودونه تُرجع مسارات القوائم مصفوفة مجرّدة. أرسل
`pagination=cursor` دون حقول المؤشر للصفحة الأولى. ولكل صفحة تالية، كرّر كل عامل
تصفية وأرسل مجموعة حقول المؤشر كاملة:

| المسار | حقول المؤشر للمتابعة |
| - | - |
| السجلات، والمشكلات، ومرات حدوث المشكلات، والإجراءات، والمقاييس، وعمليات النشر | `cursor_time` و`cursor_id` |
| الإصدارات | `cursor_time` و`cursor_project_id` و`cursor_release` و`cursor_environment` و`cursor_service_name` |
| اكتشاف التتبّعات | `cursor_time` و`cursor_trace_id` |

انقل حقول `next_cursor` المُرجَعة إلى الطلب التالي:

* يذهب `next_cursor.time` إلى `cursor_time`.
* يذهب `next_cursor.id` إلى `cursor_id`.
* في التتبّعات، يذهب `next_cursor.trace_id` إلى `cursor_trace_id`.
* في الإصدارات، أضف `cursor_` قبل اسم كل حقل مُرجَع، فمثلًا يذهب
  `next_cursor.release` إلى `cursor_release`.

توقف عندما تكون قيمة `next_cursor` هي `null`. لا تحسب المؤشر من الصف الأخير. ولا
يغيّر مؤشر الإصدارات المشاريع المحددة. أبقِ `project_id` أو `project_ids` الأصلي.

```bash theme={null}
curl --get "https://api.logbrew.co/api/logs" \
  --header "Authorization: Bearer $LOGBREW_ACCOUNT_BEARER" \
  --data-urlencode "project_id=<project-uuid>" \
  --data-urlencode "severity=error" \
  --data-urlencode "since=2026-06-01T00:00:00Z" \
  --data-urlencode "pagination=cursor" \
  --data-urlencode "limit=50"
```

يحدد `limit` حجم الصفحة. وقد تحتوي الصفحة على صفوف أقل. لا تقبل هذه المسارات
`page` أو `page_number`.

| المسار | قيمة `limit` الافتراضية | الحد الأقصى لـ `limit` |
| - | -: | -: |
| السجلات، وسمات السجلات، والمشكلات، والإجراءات، والمقاييس، والإصدارات، واكتشاف التتبّعات | 100 | 500 |
| مرات حدوث المشكلات | 25 | 100 |
| عمليات النشر | 50 | 100 |

في أغلب المسارات، يحوّل LogBrew قيمة `limit` التي تتجاوز الحد الأقصى إلى الحد
الأقصى. أما قائمة عمليات النشر فترفض قيمة `limit` خارج النطاق من 1 إلى 100 مع
`422`. وتُرجع قائمة عمليات النشر دائمًا كائن صفحة يحتوي على `next_cursor`، حتى دون
`pagination=cursor`.

يرفض LogBrew هذه الطلبات مع `422` و`validation_failed`:

* قيمة `pagination` غير `cursor`.
* حقول المؤشر دون `pagination=cursor`.
* مجموعة حقول مؤشر غير مكتملة.
* قيمة `cursor_time` ليست طابعًا زمنيًا بصيغة RFC3339.

يحدد المؤشر موضعًا، ولا يجمّد البيانات. ابدأ صفحة أولى جديدة عندما تحتاج إلى عرض
محدَّث.

يستخدم الـ CLI الحقول نفسها:

```bash theme={null}
logbrew read logs --severity error --pagination cursor --limit 50 --json
logbrew read logs --severity error --pagination cursor --limit 50 \
  --cursor-time <time> --cursor-id <id> --json
```

## تشخيص النتيجة الفارغة

القائمة الفارغة تعني أنه لم يطابق أي صف كل عوامل التصفية. ولا تقول شيئًا عن
الإشارات الأخرى. افحص الطلب بهذا الترتيب:

1. تأكد من معرّف المشروع.
2. أزِل عوامل التصفية الاختيارية واحدًا تلو الآخر.
3. وسّع `since` إذا كان الحدث المتوقع أقدم. وأزِل `until` أو أخّره إذا كان الحدث
   المتوقع أحدث.
4. قارن `service_name` و`release` و`environment` بالقيم التي يرسلها الـ SDK لديك.
5. في السجلات، أضف `status=all` إذا كان من الممكن أن تخفي قاعدة سجلات السجل
   المتوقع.
6. تأكد من أن المسار يقبل كل عامل تصفية.

## الاستعادة من استعلام مرفوض

يُرجع الاستعلام المرفوض غلاف الخطأ القياسي. ويُرجع المفتاح غير المعروف أو القيمة
من نوع خاطئ `422`:

```json theme={null}
{
  "error": "invalid query parameters",
  "code": "validation_failed",
  "next": "check query parameter names and value types, then retry",
  "next_action": {
    "code": "fix_request",
    "target": "request"
  }
}
```

الإصلاحات الشائعة:

* استبدل الاسم البديل المختصر بالمفتاح الوارد في [مصفوفة عوامل التصفية](#filter-matrix).
* أرسل كل حقول مؤشر المتابعة التي يحتاجها المسار.
* أزِل حقول المؤشر من طلب الصفحة الأولى.
* استخدم أداة اختيار واحدة فقط للمشروع.
* استبدل قيمة الخطورة أو حالة التتبّع غير المدعومة بقيمة معيارية.

لمعرفة رموز الأخطاء والاستعادة، راجع [أخطاء API](/ar/reference/api-errors).
ولمعرفة نصوص الاستجابات، راجع
[تنسيقات الاستجابة](/ar/reference/telemetry-response-shapes).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.