Ошибки
Ошибка приходит обычным для OpenAI API телом: объект error с полем message. Ниже — отказы, которые вы реально встретите, и что делать с каждым.
| Код | Сообщение | Что произошло | Что делать |
|---|---|---|---|
401 | Invalid token | ключ неизвестен, отключён или удалён — или ключу нечего тратить: исчерпан его потолок либо кончились деньги на счёте компании | проверьте, что подставлен целиком; в кабинете — состояние ключа, его потолок и остаток счёта |
403 | token quota is not enough … | остаток ключа есть, но этот запрос в него не помещается | поднимите потолок ключа или пополните счёт; более короткий запрос может пройти |
403 | This token has no access to model … | у ключа ограничен список моделей | вызовите разрешённую модель или снимите ограничение в кабинете |
503 | No available channel for model … | такой модели у нас нет | сверьтесь со списком моделей — вероятна опечатка в имени |
429 | — | слишком много запросов | повторите с задержкой и увеличивайте её при повторных отказах |
Отключённый, удалённый и исчерпанный ключ отвечают тем же 401, что и неизвестный: шлюз отсекает ключ с нулевым остатком ещё на проверке ключа. По ответу API нельзя отличить «ключ отозвали» от «ключу нечего тратить» и от «такого ключа не существует» — иначе чужие ключи можно было бы перебирать. Что именно случилось с вашим ключом, видно в кабинете.
Что повторять, а что нет
Повторять имеет смысл 429 и 5xx — это временные состояния. 401 и 403 повторять бесполезно: пока вы не измените ключ или его настройки, ответ не изменится.
Формат ошибок мы планируем сделать своим — со стабильными кодами, по которым удобно ветвиться, и с явным правилом повтора. Пока этого нет, не завязывайтесь на текст сообщения: он приходит от шлюза и может измениться. Ветвитесь по HTTP-коду.
Если запрос завершился ошибкой, деньги списались?
Нет. В детализацию попадают только завершённые запросы. Отказ до обращения к модели расхода не создаёт.