Codex 401 Unauthorized: الأسباب والإصلاحات
اعتبارًا من 2026-10-07، عندما تعيد Codex CLI أو إضافة IDE الرمز 401 Unauthorized، تنحصر الوثائق الرسمية في ثلاثة مواضع للتحقق: طريقة تسجيل الدخول النشطة لديك (codex login status)، وموضع تخزين بيانات الاعتماد مؤقتًا (~/.codex/auth.json أو مخزن بيانات الاعتماد في نظام التشغيل)، وبالنسبة إلى مزوّد مخصص، كيفية تفاعل model_provider وenv_key وrequires_openai_auth في config.toml. وتتمثل الإصلاحات في تشغيل codex login مجددًا، أو التبديل إلى مفتاح API عبر printenv OPENAI_API_KEY | codex login --with-api-key، أو وضع المفتاح حيث يقرأه المزوّد فعليًا. تتبع هذه الصفحة صياغة وثائق OpenAI Codex وسجل التغييرات، وتعرض إعداد QCode.
آخر تحديث 2026-11-14
مفتاح واحد لـ Claude وGPT وأبرز النماذج الصينية، والفوترة حسب token، ويعمل خلال دقائق.
- الفوترة حسب token — الأسعار المباشرة على /models
- الدفع بالبطاقة (Visa / Mastercard) أو Apple Pay أو Google Pay أو العملات الرقمية
- خدمة ذاتية: شحن الرصيد والتفعيل فورًا
أربعة أمور يجب تحديدها أولًا
طرق تسجيل الدخول الرسمية
يستخدم تسجيل الدخول باستخدام ChatGPT اشتراكك؛ أما تسجيل الدخول باستخدام مفتاح API فهو قائم على الاستخدام، وتقول الوثائق إن تسجيل الدخول بمفتاح API يستخدم أسعار API القياسية بدلًا من الرصيد المضمّن في خطة ChatGPT. تدعم CLI وإضافة IDE وتطبيق سطح المكتب كليهما.
بيانات الاعتماد المخزّنة مؤقتًا
تُخزّن تفاصيل تسجيل الدخول مؤقتًا في ~/.codex/auth.json أو مخزن بيانات الاعتماد في نظام التشغيل، وتستخدمها CLI وإضافة IDE بشكل مشترك؛ وإذا سجّلت الخروج من أحدهما فعليك تسجيل الدخول مجددًا عند تشغيل الآخر في المرة التالية.
من أين يحصل المزوّد المخصص على مفتاحه
يحدد env_key اسم متغيّر البيئة الذي يقرأ Codex المفتاح منه؛ ووفقًا للوثائق، عندما تكون requires_openai_auth = true، يتجاهل Codex قيمة env_key ويستخدم مصادقة OpenAI.
كيف تقرأ وثائق QCode هذين الرمزين
في وثائق QCode، يعني 401 وجود مشكلة في المفتاح، ويعني 404 بادئة مسار خاطئة؛ ويعيد base_url في Codex الرمز 404 عندما يحتوي على مقطع واحد زائد أو مقطع واحد ناقص.
ماذا يعني 401 وما الذي يجب التحقق منه أولًا
اعتبارًا من 2026-10-07، يعني 401 Unauthorized الصادر من Codex أن الخادم لم يقبل بيانات الاعتماد الواردة في الطلب، أو أن الطلب لم يحمل أيًا منها. تسرد الوثائق الرسمية طريقتَي تسجيل دخول: تسجيل الدخول باستخدام ChatGPT (وصول عبر الاشتراك) وتسجيل الدخول باستخدام مفتاح API (وصول قائم على الاستخدام)؛ وتدعم تطبيق سطح المكتب وCodex CLI وإضافة IDE كليهما، بينما تتطلب Codex cloud استخدام ChatGPT. عند عدم توفر جلسة صالحة، يكون codex login مع تدفق المتصفح الخاص به المسار الافتراضي، ويعرض codex login status الطريقة النشطة. مع مزوّد مخصص، يهم config.toml أيضًا: القيمة الافتراضية لـ model_provider هي openai؛ والمزوّد الذي لديه requires_openai_auth = true يستخدم مصادقة OpenAI ويتجاهل env_key؛ والمزوّد الذي لديه env_key فقط يقرأ المفتاح من ذلك المتغيّر؛ وعند عدم تعيين أي منهما، تقول الوثائق إن Codex يفترض أن المزوّد لا يحتاج إلى مصادقة.
التغييرات الأخيرة وتقارير المستخدمين
يتضمن سجل التغييرات الرسمي عدة إدخالات مرتبطة بتسجيل الدخول (انظر الخط الزمني أدناه)؛ ومع الإصدار 0.160.0 في 2026-10-01، وُضّحت الوثائق بشأن كيفية استخدام بيانات اعتماد المزوّد خلفية التخزين المهيأة وكيف يحدد env_key متغير بيئة مفتاح API. وبشكل منفصل، فُتحت مشكلة بعنوان «unexpected status 401 Unauthorized issue» على GitHub في openai/codex في 2026-09-25، حيث يذكر المستخدمون رؤية «Incorrect API key provided» حتى في وضع تسجيل الدخول عبر ChatGPT (بلاغات مستخدمين؛ ولم توثّق OpenAI سببًا). تتعامل هذه الصفحة مع هذه المشكلات فقط كدليل على أن كثيرين يواجهون الخطأ؛ وتتبع الخطوات الوثائق الرسمية.
ثلاثة إدخالات لتسجيل الدخول في سجل التغييرات الرسمي
Codex CLI 0.156.0: يمكن لتسجيل الدخول أن يستعيد عمله عبر وسطاء النظام، ويحدّث الإدخال نفسه بيانات اعتماد MCP عندما يعيد اكتشاف OAuth خطأ 503.
Codex CLI 0.159.0: يفتح تسجيل الدخول المحلي عبر ChatGPT المتصفح بشكل موثوق، وتضيف مرحلة الإعداد الأولي اختصارًا لنسخ رابط تسجيل الدخول.
Codex CLI 0.160.0: توضّح الوثائق كيف تستخدم بيانات اعتماد المزوّد خلفية التخزين المهيأة، وكيف يحدد env_key متغير بيئة مفتاح API.
المؤكّد مقابل غير المتحقَّق منه
مؤكد (حرفيًا في الوثائق الرسمية)
يمكن التحقق من كل ما يلي كلمة بكلمة في الوثائق الرسمية: طريقتي تسجيل الدخول وأين تعمل كل منهما؛ ما تفعله الأوامر codex login و printenv OPENAI_API_KEY | codex login --with-api-key و codex login --device-auth و codex login status و codex logout؛ تفاصيل تسجيل الدخول المخزّنة مؤقتًا في ~/.codex/auth.json أو مخزن بيانات الاعتماد في نظام التشغيل (تشير تهيئة العيّنة الرسمية إلى file، أي auth.json، بوصفه الافتراضي لـ cli_auth_credentials_store) ويشاركها CLI وإضافة IDE، اللذان يتشاركان أيضًا طبقات التهيئة نفسها؛ جلسات ChatGPT التي تحدّث tokens تلقائيًا قبل انتهاء صلاحيتها؛ ضبط model_provider افتراضيًا على openai؛ تجاهل env_key عندما requires_openai_auth = true؛ تجاهل model_provider و model_providers و openai_base_url، مع تحذير عند بدء التشغيل، في .codex/config.toml المحلي بالمشروع؛ توقف --profile عن قراءة جداول [profiles.name] من config.toml منذ 0.134.0؛ كون responses هو wire_api الوحيد المدعوم؛ وعدم السماح بـ [model_providers.openai]، مع استخدام openai_base_url بدلًا منه.
غير متحقق منه أو غير موثّق
أمران تعذّر على هذه الصفحة التحقق منهما، فلا تخطط بناءً عليهما: ① لماذا يرى بعض المستخدمين 401 حتى مع تسجيل الدخول عبر ChatGPT، إذ لا تتضمن مشكلة GitHub سوى تخمينات المستخدمين ولا تقول الوثائق شيئًا؛ ② لم تعثر هذه الصفحة على جدول رسمي لكل نص خطأ 401 في Codex، لذا فباستثناء ما يُنسب فيه نص إلى الوثائق، فإن نصوص الأخطاء المقتبسة هنا تأتي من تقارير المستخدمين.
زوجان من الإعدادات يخلط بينهما المستخدمون
تسجيل الدخول عبر ChatGPT مقابل مفتاح API
يستخدم تسجيل الدخول عبر ChatGPT اشتراكك وتدفقًا في المتصفح (codex login)؛ وعلى جهاز بعيد أو بلا واجهة رسومية استخدم codex login --device-auth. يُحتسب تسجيل الدخول بمفتاح API وفق أسعار API القياسية: في CLI، نفّذ printenv OPENAI_API_KEY | codex login --with-api-key؛ وفي إضافة IDE، اختر Use API Key على شاشة عدم تسجيل الدخول. وتصف الوثائق مفاتيح API بأنها الخيار الافتراضي الموصى به للأتمتة، ويوفّر CODEX_API_KEY مفتاحًا لعملية Codex غير تفاعلية. للتبديل، نفّذ codex logout أولًا لمسح بيانات الاعتماد الحالية.
env_key مقابل requires_openai_auth
هذان هما خيارا المصادقة لمزوّد مخصص. يجعل env_key = "NAME" Codex يقرأ المفتاح من ذلك المتغير البيئي؛ وأنت تختار الاسم، ويجب أن يطابق المتغير الذي تصدّره فعليًا. ويجعل requires_openai_auth = true المزوّد يستخدم مصادقة OpenAI (ChatGPT أو مفتاح API)، وتقول الوثائق إن Codex يتجاهل env_key عندئذٍ. وعند عدم ضبط أي منهما، يفترض Codex أنه لا حاجة إلى مصادقة. يوجد أيضًا experimental_bearer_token لـ token مباشر، وتصنفه الوثائق على أنه غير مستحسن لصالح env_key.
عالجها بهذا الترتيب
① نفّذ codex login status لمعرفة ما إذا كنت على ChatGPT أو على مفتاح API (يخرج بالرمز 0 عند تسجيل الدخول). ② لخدمة OpenAI نفسها: نفّذ codex logout، ثم شغّل codex login (ChatGPT في المتصفح)، أو printenv OPENAI_API_KEY | codex login --with-api-key (التبديل إلى مفتاح API)، أو codex login --device-auth (للأجهزة البعيدة أو بلا واجهة)؛ يشترك امتداد IDE في ذاكرة تسجيل الدخول المؤقتة الخاصة بـ CLI، لذا يسري عليه الإصلاح. ③ لمزوّد مخصص: ضع model_provider وجدول [model_providers.name] في ~/.codex/config.toml، لأن تلك المفاتيح تُتجاهل في .codex/config.toml المحلي للمشروع؛ مع --profile، ضع الإعدادات في ~/.codex/name.config.toml. ④ لـ QCode، تعرض الوثائق ملف config.toml هذا: model_provider = "qcode", model = "gpt-6.1-sol", model_reasoning_effort = "high"، إضافة إلى جدول [model_providers.qcode] بالحقول name = "qcode", base_url = "https://api.qcode.cc/openai", wire_api = "responses", requires_openai_auth = true (اسم المزوّد متروك لك؛ ومثال الوثائق يستخدم qcode). في ~/.codex/auth.json اكتب {"OPENAI_API_KEY": "cr_xxxxxxxxxx"} بمفتاح cr_ الخاص بك، واضبط صلاحيات الملف على 600. لتمرير المفتاح عبر متغير بيئة بدلًا من ذلك، استبدل requires_openai_auth = true في الجدول بـ env_key = "QCODE_API_KEY" (اسم المتغير متروك لك أيضًا) وصدّر QCODE_API_KEY. استخدم أحد الخيارين لا كليهما: تقول الوثائق الرسمية إن Codex يتجاهل env_key عندما يكون requires_openai_auth = true، لذا عند ضبط كليهما لا يكون لمتغير البيئة أي تأثير. ⑤ اختبار ذاتي: أرسل طلبًا إلى https://api.qcode.cc/openai/v1/models مع Authorization: Bearer ومفتاحك؛ استلام قائمة JSON يعني أن العنوان والمفتاح سليمين.
على QCode
على QCode، يعمل Codex مع نماذج GPT فقط؛ لا تُقدَّم Claude وعائلات DeepSeek وGLM وKimi وQwen عبر بروتوكول OpenAI Responses الذي يستخدمه Codex. في config.toml، عيّن base_url إلى https://api.qcode.cc/openai مع wire_api = "responses"؛ المفتاح هو مفتاح QCode الخاص بك الذي يبدأ بـ cr_ من لوحة التحكم، ويُكتب في OPENAI_API_KEY داخل ~/.codex/auth.json كما توضح الوثائق. تورد الوثائق أيضًا صيغة باستخدام متغير بيئة: استبدل requires_openai_auth = true بـ env_key = "QCODE_API_KEY" وصدّر ذلك المتغير. استخدم أحد الخيارين لا كليهما: تقول الوثائق الرسمية إن Codex يتجاهل env_key عندما يكون requires_openai_auth = true، لذا عند ضبط كليهما لا يكون لمتغير البيئة أي تأثير. النموذج الافتراضي في الوثائق هو gpt-6.1-sol؛ يمكنك التبديل إلى gpt-6-sol أو gpt-5.6-terra. عند ظهور 401، تحقق مما تورده الوثائق: أن المفتاح يبدأ بـ cr_، وأن المفتاح في auth.json كامل بلا مسافات أو فواصل أسطر إضافية، وأن حالة المفتاح والحصة المتبقية سليمة في لوحة التحكم؛ المفتاح الخاطئ يعيد Invalid API key. base_url بمقطع واحد زائد أو ناقص يعيد 404، وليس 401. الفوترة حسب token؛ راجع /models لمعرفة سعر كل نموذج.
الأسئلة الشائعة
يقول Codex 401 Unauthorized: ما أول ما أتحقق منه؟
نفّذ codex login status أولًا. وفق الوثائق الرسمية، يطبع وضع المصادقة النشط ويخرج بالرمز 0 عند تسجيل الدخول. بعد أن تعرف ما إذا كنت على ChatGPT أو على مفتاح API، تحقق مما إذا كان Codex يتواصل مع OpenAI أم مع مزوّد مخصص: مع OpenAI، سجّل الدخول مجددًا أو بدّل المفاتيح؛ ومع مزوّد مخصص، تحقق من المصادقة التي يستخدمها المزوّد المحدد بواسطة model_provider (env_key أو requires_openai_auth) وما إذا كان المفتاح في الموضع الذي يقرأ منه ذلك المزوّد.
كيف أبدّل بين تسجيل الدخول عبر ChatGPT ومفتاح API؟
نفّذ codex logout لمسح بيانات الاعتماد الحالية، ثم سجّل الدخول بالطريقة الأخرى. وفق الوثائق: مع ChatGPT، نفّذ codex login وأكمل في المتصفح؛ ومع مفتاح API، مرّره عبر الأنبوب باستخدام printenv OPENAI_API_KEY | codex login --with-api-key؛ وفي امتداد IDE، اختر Sign in with ChatGPT أو Use API Key في الشاشة التي تظهر عندما لا تكون مسجّل الدخول. يشترك CLI والامتداد في تسجيل الدخول المخزّن مؤقتًا نفسه. إذا كان المسؤول قد عيّن forced_login_method، فسيسجّل Codex خروجك ويخرج عندما لا تتطابق بيانات اعتمادك.
كان يعمل لفترة ثم يعيد الآن 401. هل انتهت صلاحية token؟
إذا كنت تستخدم تسجيل الدخول عبر ChatGPT، فتعامل معه أولًا باعتباره جلسة قديمة: نفّذ codex logout، ثم codex login. تقول الوثائق إن جلسات ChatGPT تحدّث tokens تلقائيًا أثناء الاستخدام قبل انتهاء صلاحيتها، لذا لا تحتاج الجلسات النشطة عادةً إلى تسجيل دخول جديد في المتصفح. على GitHub، يذكر المستخدمون ظهور «Provided authentication token is expired. Please try signing in again.» أو «Your access token could not be refreshed because your refresh token was revoked. Please log out and sign in again.» بعد أن تصبح جلسة تسجيل الدخول قديمة (كلاهما تقارير مستخدمين). على جهاز بعيد أو بلا واجهة رسومية، سجّل الدخول باستخدام codex login --device-auth.
مزوّدي المخصص يضبط env_key وقد صدّرت المفتاح. لماذا لا يزال الخطأ 401؟
تحقق أولًا مما إذا كان المزوّد نفسه يضبط requires_openai_auth = true: تقول الوثائق إن Codex حينها يتجاهل env_key ويستخدم مصادقة OpenAI (ChatGPT أو مفتاح API). وإن لم يكن كذلك، فتأكد من أن قيمة env_key تطابق اسم المتغير الذي صدّرته تمامًا؛ تقول الوثائق إن Codex يقرأ المتغير المحدد في ذلك الإعداد، لذا فالاسم نفسه غير ثابت. على GitHub، يذكر المستخدمون ظهور «401 Unauthorized: Missing bearer or basic authentication in header» عند عدم تكوين أي بيانات اعتماد (تقرير مستخدم).
عدّلت config.toml، لكن يبدو أن Codex لا يزال يستخدم OpenAI؟
تحقق من أن إعدادات المزوّد موضوعة حيث يقرأها Codex. تصف الوثائق ثلاث مصائد: تُتجاهل model_provider وmodel_providers وopenai_base_url في .codex/config.toml المحلي بالمشروع مع تحذير عند بدء التشغيل؛ ومنذ Codex 0.134.0، لم يعد --profile يقرأ [profiles.name] من config.toml، لذا استخدم ~/.codex/name.config.toml؛ ولا يمكن إعادة استخدام المعرّفات المدمجة openai وollama وlmstudio في مزوّد مخصص، لذا لتغيير عنوان OpenAI فقط، استخدم openai_base_url. إذا لم يُضبط model_provider، فالقيمة الافتراضية هي openai.
كيف أشخّص خطأ 401 مع QCode؟
اتبع وثائق QCode: تأكد من أن المفتاح يبدأ بـ cr_، وأن المفتاح في ~/.codex/auth.json كامل بلا مسافات أو أسطر إضافية، وأن حالة المفتاح والحصة المتبقية تبدو صحيحة في لوحة التحكم؛ وتذكر الوثائق أيضًا أن الاشتراك المنتهي سبب من أسباب 401. إذا كنت تستخدم صيغة متغيرات البيئة الواردة في الوثائق، فتأكد من أن المزوّد يضبط env_key = "QCODE_API_KEY"، ولا يضبط requires_openai_auth = true، وأن المتغير مُصدَّر: مع requires_openai_auth = true، تقول الوثائق الرسمية إن Codex يتجاهل env_key. قد تتجاوز متغيرات البيئة المتبقية إعداداتك الحالية، لذا نفّذ env | grep -i openai وأزل ما لم تعد تستخدمه. ثم اختبر ذاتيًا باستخدام Authorization: Bearer ومفتاحك مقابل https://api.qcode.cc/openai/v1/models: ظهور قائمة JSON يعني أن العنوان والمفتاح سليمان. تفسّر الوثائق 401 بأنه مشكلة في المفتاح و404 بأنه بادئة مسار خاطئة؛ ويجب أن يكون base_url في Codex هو https://api.qcode.cc/openai.
المصادر
جانب OpenAI: صفحات وثائق Codex الرسمية Authentication وConfig basics وAdvanced Configuration وConfiguration Reference وEnvironment variables وcommand line options وIDE extension settings (تُقدَّم الوثائق نفسها على developers.openai.com/codex وlearn.chatgpt.com)، إضافة إلى سجل تغييرات Codex وملاحظات إصدار GitHub openai/codex للإصدارات 0.156.0 و0.159.0 و0.160.0، وجميعها جُلبت في 2026-10-07. جانب QCode: صفحات وثائق QCode الخاصة بدرس Codex (محدّثة 2026-09-30)، ونقاط النهاية وصيغ API، ورموز الأخطاء، واستكشاف الأخطاء وإعداد Cursor، جُلبت في اليوم نفسه. الخلفية: مشكلة GitHub openai/codex رقم 48237 وعدة مشكلات أخرى متعلقة بـ 401، مقتبسة فقط كتقارير مستخدمين.
مفتاح cr_ واحد لكل من Codex وClaude Code
يصل Codex إلى gpt-6-sol وgpt-6.1-sol وغيرهما من نماذج GPT الأخرى عبر https://api.qcode.cc/openai، وتُحتسب التكلفة لكل token؛ راجع /models لمعرفة سعر كل نموذج.
قراءات ذات صلة
نفد رصيد API في ChatGPT Pro: ما العمل الآن (2026-11)
تحصل Pro وBusiness على رصيد API يصل إلى $500 شهريًا، ولا يُرحّل الرصيد، ويظهر HTTP 429 عند الصفر؛ أضف رصيدًا مدفوعًا عبر الطريقة الرسمية أو تابع باستخدام مفتاح QCode.
شرح حظر حسابات Codex وChatGPT Pro
لماذا تُعلّق حسابات Codex وChatGPT Pro وما العمل.
Codex «Selected model is at capacity»: ليس بسبب الحصة ولا بسبب 429
كيف تميّز خطأ السعة عن غيره وما العمل بشأنه.
دليل الدفع بالعملات المشفرة
تسع عملات، و56 شبكة، وبدون رسوم منصة لرصيد API للبرمجة بالذكاء الاصطناعي.
تم التحقق من الخطوات والاقتباسات في هذه الصفحة في 2026-10-07 بمقارنتها مع وثائق OpenAI Codex وسجل التغييرات ووثائق QCode؛ اعتمد الصفحات الرسمية حيث تختلف، وقد تحدث تغييرات دون إشعار. سلاسل الأخطاء والأوصاف الواردة من مشكلات GitHub هي تقارير مستخدمين وليست نتائج رسمية. توافر النماذج هو ما تعرضه /models.