عرض أحداث التقويم
events:readالأحداث التي تصل إليها، سواء نظّمتها أو دُعيت إليها. ترجع القادمة فقط افتراضياً، وتتقدّم نافذة from/to الصريحة على include_past. تُحسب الحدود وحدّ «القادم» بتوقيت الشركة.
بارامترات الاستعلام
fromstringالحد الأدنى لوقت البدء بصيغة ISO 8601. والنافذة الصريحة تتقدم على include_past.
tostringالحد الأعلى لوقت البدء بصيغة ISO 8601.
include_pastbooleanعند غياب نافذة from/to، تُضمَّن الأحداث الماضية.
الافتراضي: false
limitintegerحجم الصفحة. الافتراضي 50، والحد الأقصى 100، وما زاد عنه يُقصَر عليه.
الافتراضي: 50
offsetintegerعدد السجلات التي تُتخطّى. الافتراضي 0.
الافتراضي: 0
مثال الطلب
curl "https://app.fareeqy.com/api/v1/events" \
-H "Authorization: Bearer $FAREEQY_API_KEY"مثال الاستجابة
{
"data": [
{
"id": 77,
"name": "اجتماع مراجعة التصاميم",
"description": "نراجع نسخة الهيدر ونقرر الاتجاه النهائي.",
"starts_at": "2026-08-05T13:00:00.000+03:00",
"ends_at": "2026-08-05T14:00:00.000+03:00",
"all_day": false,
"meeting_url": "https://meet.google.com/abc-defg-hij",
"organizer": "سارة العتيبي",
"organizer_email": "sara@example.com",
"attendees": [
{
"name": "عبدالله المطيري",
"email": "abdullah@example.com"
}
]
}
],
"meta": {
"total": 4,
"limit": 50,
"offset": 0,
"count": 4
}
}حالات الرفض:401403404422429اعرض أمثلة الرفضأخفِ أمثلة الرفض
defaultMissing or invalid API key.
{
"error": {
"code": "unauthorized",
"message": "Invalid or missing API key."
}
}forbiddenTwo different refusals share this status, and a client must tell them apart by error.code. forbidden means the key's scope or allowlist does not permit this operation, or Pundit denied the action. plan_upgrade_required means the company's plan carries no API access at all, so no key on it can ever succeed and there is nothing to retry.
{
"error": {
"code": "forbidden",
"message": "This API key is not permitted to perform this operation."
}
}{
"error": {
"code": "plan_upgrade_required",
"message": "خطة «الاحترافي» لا تشمل الوصول إلى API. رقِّ إلى «المتطور» أو «الانتاجي» لتفعيله. — The الاحترافي plan does not include API access. Upgrade to «المتطور» or «الانتاجي» to enable it."
}
}defaultResource not found or not accessible — also returned for EVERY endpoint when the company's rest_api feature flag is disabled (the surface is hidden). Lookups drill through the URL hierarchy, so another company's record is a 404 and never a leak. A path that matches no route at all answers 404 with the distinct code unknown_endpoint and echoes the path back, so a mistyped or half-built URL is told apart from a record that is missing or out of reach.
{
"error": {
"code": "not_found",
"message": "Resource not found, or you do not have access to it."
}
}defaultA caller-fixable bad request (validation error, bad date, bad enum).
{
"error": {
"code": "unprocessable_entity",
"message": "Title can't be blank"
}
}rate_limit_exceededEither the company's daily API allowance is spent (rate_limit_exceeded), or the per-key / per-IP burst throttle of 300 requests per minute fired. Both come back after a wait, so Retry-After is honest here. The two bodies are not the same shape. The daily-quota refusal uses the standard error envelope. The burst throttle is served by Rack::Attack ahead of the application, so its body is a flat {"error": "<string>"} with no code. A client that reads error.code has to tolerate error being a plain string.
{
"error": {
"code": "rate_limit_exceeded",
"message": "استهلكت رصيد اليوم من طلبات API في خطة «المتطور» (1000 طلب يوميًا). يتجدد الرصيد عند منتصف الليل بتوقيت Asia/Riyadh. — Daily API quota exhausted: the المتطور plan allows 1000 calls per day. It resets at midnight Asia/Riyadh."
}
}{
"error": "Rate limit exceeded. Please try again later."
}