{"id":501155,"date":"2026-10-31T18:38:41","date_gmt":"2026-10-31T15:38:41","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=501155"},"modified":"2026-10-31T18:38:41","modified_gmt":"2026-10-31T15:38:41","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=501155","title":{"rendered":"\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0430 API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 429: \u043a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0432\u043e\u0442\u0443 \u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/12\/bb\/ae\/12bbae804125d783ca474cd6f3d8d005.png\" width=\"1672\" height=\"941\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/12\/bb\/ae\/12bbae804125d783ca474cd6f3d8d005.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/12\/bb\/ae\/12bbae804125d783ca474cd6f3d8d005.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0430 API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 429: \u043a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0432\u043e\u0442\u0443 \u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/p>\n<p>\u0423 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a: \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0438\u043b <code>429<\/code>, \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441. \u041d\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0430\u0437\u0443\u043c\u043d\u043e. \u041d\u043e \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c API-\u043a\u0440\u0435\u0434\u0438\u0442\u044b \u0438\u043b\u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0432\u0438\u0434\u0438\u0442 \u0434\u043e\u043b\u0433\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0445\u043e\u0442\u044f \u043d\u0438 \u043e\u0434\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u043a\u0443\u043d\u0434\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0443\u0437\u043a\u0430\u044f: \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c\u0443 HTTP-\u043e\u0442\u0432\u0435\u0442\u0443 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0441 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0431\u0438\u043b\u043b\u0438\u043d\u0433 \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u043a\u0443 \u0434\u043e \u0432\u044b\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u044b? \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a OpenAI API, \u0430 \u043d\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0448\u043b\u044e\u0437 \u0441 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c SDK. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 <strong>31 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2026 \u0433\u043e\u0434\u0430<\/strong>. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435; \u043a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043c\u043e\u0434\u0435\u043b\u044f\u043c. \u042d\u0442\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0435 \u0438 \u043d\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0442\u0435\u0441\u0442.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435<\/h3>\n<p>\u041d\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0441 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043e \u0438 \u043a \u043a\u0430\u043a\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441. \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 ChatGPT \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 API-\u0431\u0438\u043b\u043b\u0438\u043d\u0433\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0432\u0435\u0441\u0442\u0438 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0444\u043b\u0430\u0436\u043a\u0443 \u00ab\u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043e\u00bb.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u00ab\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 API\u00bb \u0443\u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0447\u043d\u043e. \u0412 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c API-\u043a\u0440\u0435\u0434\u0438\u0442\u044b \u043f\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430\u043c Pro \u0438 Business. \u041b\u044c\u0433\u043e\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 API-\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439; \u043a\u0440\u0435\u0434\u0438\u0442\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0439, \u0438\u043c\u0435\u044e\u0442 \u0441\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u044e\u0442 rate limits. \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0443\u0447\u0435\u0431\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e: \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f <code>personal<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u043a\u0440\u0435\u0434\u0438\u0442\u044b, \u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0437 <code>work<\/code>. \u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0430 <code>personal<\/code> \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u0435\u043a\u0442. \u041f\u0435\u0440\u0435\u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u043d\u0430\u0443\u0433\u0430\u0434 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e: \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u043a\u0440\u0435\u0442 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442, \u043a\u0443\u0434\u0430 \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412 API \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u043e \u0438\u0445 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u043b\u0435\u043f\u0443\u044e \u043a\u043e \u0432\u0441\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c. \u0414\u043b\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0432\u0430\u0436\u0435\u043d \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0430 \u043d\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<h3>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430<\/h3>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u00abAPI error 429\u00bb \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u0435\u0434\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430. \u0414\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0441 \u0447\u0430\u0441\u043e\u0432\u044b\u043c \u043f\u043e\u044f\u0441\u043e\u043c, HTTP-\u0441\u0442\u0430\u0442\u0443\u0441, <code>error.code<\/code>, <code>error.type<\/code>, \u043c\u043e\u0434\u0435\u043b\u044c, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 <code>x-request-id<\/code>, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 <code>Retry-After<\/code> \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 <code>x-ratelimit-*<\/code>. \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>\u042f \u0431\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u043e\u043b\u0435\u0439, \u0430 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0446\u0435\u043b\u0438\u043a\u043e\u043c HTTP-\u043e\u0431\u044a\u0435\u043a\u0442. \u0412 \u043d\u0451\u043c \u043b\u0435\u0433\u043a\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>Authorization<\/code>, cookie \u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442. \u0414\u0430\u0436\u0435 \u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432 \u043e\u0431\u0449\u0438\u0439 \u043b\u043e\u0433 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432; \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430. \u0423 \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u0438\u043b\u043b\u0438\u043d\u0433\u0430 \u043e\u0431\u0449\u0438\u0439 <code>error.type<\/code> \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f <code>insufficient_quota<\/code>, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <code>error.code<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u0441\u043b\u043e\u0432\u043e\u043c <code>quota<\/code> \u0442\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0432\u0442\u043e\u0440<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>429<\/code> \u0438 <code>credit_balance_exhausted<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u0430\u043b\u0430\u043d\u0441 \u043d\u0443\u0436\u043d\u043e\u0439 API-\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>429<\/code> \u0438 <code>project_spend_limit_exceeded<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0416\u0451\u0441\u0442\u043a\u0438\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>429<\/code> \u0438 <code>organization_spend_limit_exceeded<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0416\u0451\u0441\u0442\u043a\u0438\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>429<\/code> \u0438 <code>organization_usage_limit_exceeded<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0439 OpenAI \u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>429<\/code> \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u043b\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043a\u043d\u043e \u043b\u0438\u043c\u0438\u0442\u0430, \u043c\u043e\u0434\u0435\u043b\u044c, \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0441 \u043f\u0430\u0443\u0437\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>429<\/code> \u0438 <code>slow_down<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043d\u0438\u0437\u0438\u0442\u044c \u0442\u0435\u043c\u043f \u0438 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u0443<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0438\u043b\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0435 \u0442\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u043e\u0434\u044b \u0438 \u0438\u0445 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0430 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u043b\u044e\u0431\u043e\u043c <code>429<\/code>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/79\/aa\/4f\/79aa4fbe8ac2982b0000e91a74c8cb08.png\" width=\"1560\" height=\"1240\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/79\/aa\/4f\/79aa4fbe8ac2982b0000e91a74c8cb08.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/79\/aa\/4f\/79aa4fbe8ac2982b0000e91a74c8cb08.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0423 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b<\/h3>\n<p>\u0421\u043b\u043e\u0432\u043e \u00ab\u043b\u0438\u043c\u0438\u0442\u00bb \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0442\u043e\u0436\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. Spend alert \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 \u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u0445, \u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 API-\u0442\u0440\u0430\u0444\u0438\u043a. Hard spend limit \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u041f\u0440\u0438\u0447\u0451\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e: \u0443\u0447\u0442\u0451\u043d\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043b\u044f \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430: \u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442, \u043d\u0443\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043a\u043e\u0434\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0437. \u0423 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043a\u043b\u044e\u0447\u0438, \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430.<\/p>\n<p>\u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043b\u0438\u043c\u0438\u0442\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u0430. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0438 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044b.<\/p>\n<h3>\u041a\u043e\u0433\u0434\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442<\/h3>\n<p>\u0414\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043b\u0438\u043c\u0438\u0442\u0430 \u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0447\u0430\u0441\u0442\u044c \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0435\u043b\u044f\u0442 \u043e\u0431\u0449\u0438\u0439 \u043b\u0438\u043c\u0438\u0442. \u041a\u043e\u0434 <code>slow_down<\/code> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0440\u0435\u0437\u043a\u043e\u0435 \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u044f RPM \u0438 TPM.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 <code>Retry-After<\/code> \u0437\u0430\u0434\u0430\u0451\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0443\u0437\u0443. \u0411\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0434\u043e\u0431\u0430\u0432\u043a\u043e\u0439, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0438 \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0414\u043b\u0438\u043d\u043d\u0443\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0443\u044e \u043f\u0430\u0443\u0437\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0434\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u044f\u0442\u0438 \u0441\u0435\u043a\u0443\u043d\u0434: \u0435\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0434\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u0435\u0451 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c.<\/p>\n<p>\u0423 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0443\u0447\u0435\u0431\u043d\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u043d\u0438\u0436\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0434\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438, \u0430 \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u042d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u043c. \u0412\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043e\u0431\u044f\u0437\u0430\u043d \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0438 SDK. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f Python-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e; <code>max_retries=0<\/code> \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c. \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0446\u0438\u043a\u043b \u043f\u043e\u0432\u0435\u0440\u0445 SDK \u0431\u0435\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u0443\u0447\u0451\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0434\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0435\u043c \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0447\u0438\u0441\u043b\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0432\u0435\u0440\u044f\u0442\u044c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 API<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u043b\u0430\u043d\u0441. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 JSON-\u0442\u0435\u043b\u043e \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043b\u0430\u043d. \u041e\u043d\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043d\u0435 \u0441\u043f\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432. <code>rate_limit_exceeded<\/code> \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API; \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0443 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0431\u043e\u0440. \u0414\u043b\u044f <code>503<\/code> \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 <code>server_is_overloaded<\/code>.<\/p>\n<p>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0430\u0439\u043b <code>retry_plan.py<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Python. \u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 Python<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">\"\"\"Synthetic, offline retry-policy example. No HTTP calls or credentials.\"\"\"import mathimport randomBILLING_CODES = {    \"credit_balance_exhausted\",    \"project_spend_limit_exceeded\",    \"organization_spend_limit_exceeded\",    \"organization_usage_limit_exceeded\",}def plan(status, body, headers, retry_index=0, remaining_s=20.0,         attempt_timeout_s=3.0, rng=None):    \"\"\"Return (action, delay_s); retry_index counts retries already used.\"\"\"    if retry_index &lt; 0 or remaining_s &lt; 0 or attempt_timeout_s &lt;= 0:        raise ValueError(\"Invalid retry budget\")    if not math.isfinite(remaining_s + attempt_timeout_s):        raise ValueError(\"Budget must be finite\")    error = body.get(\"error\") if isinstance(body, dict) else None    if not isinstance(error, dict):        return \"inspect\", None    code, kind = error.get(\"code\"), error.get(\"type\")    if not isinstance(code, (str, type(None))):        return \"inspect\", None    if status == 429 and (        code in BILLING_CODES or kind == \"insufficient_quota\"    ):        return \"fix_billing_or_limit\", None    transient = (        status == 429 and code in {\"rate_limit_exceeded\", \"slow_down\"}    ) or (status == 503 and code == \"server_is_overloaded\")    if not transient:        return \"inspect\", None    if retry_index &gt;= 2:        return \"retry_budget_exhausted\", None    normalized = {str(k).lower(): v for k, v in headers.items()}    raw = normalized.get(\"retry-after\")    if raw is None:        delay = 2.0 ** retry_index    else:        try:            delay = float(raw)        except (TypeError, ValueError, OverflowError):            return \"inspect_retry_after\", None        if not math.isfinite(delay) or delay &lt; 0:            return \"inspect_retry_after\", None    rng = rng if rng is not None else random    delay += rng.uniform(0.0, 0.25)    if delay + attempt_timeout_s &gt; remaining_s:        return \"defer\", None    return \"retry_after\", delaydef demo():    fixtures = [        (\"traffic\", 429, \"slow_down\", \"rate_limit_error\", \"2\"),        (\"credits\", 429, \"credit_balance_exhausted\",         \"insufficient_quota\", \"2\"),        (\"long_wait\", 429, \"slow_down\", \"rate_limit_error\", \"120\"),        (\"unknown\", 429, \"new_code\", \"new_type\", \"2\"),    ]    for name, status, code, kind, hint in fixtures:        body = {\"error\": {\"code\": code, \"type\": kind}}        action, delay = plan(status, body, {\"Retry-After\": hint},                             rng=random.Random(0))        print(name, action, \"-\" if delay is None else f\"{delay:.3f}\")if __name__ == \"__main__\":    demo()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c <code>retry_index<\/code> \u2014 \u0447\u0438\u0441\u043b\u043e \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432, \u0430 <code>remaining_s<\/code> \u2014 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043d\u043e\u0432\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0435 <code>defer<\/code> \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438: \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e \u0440\u0435\u0448\u0430\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0435\u0451 \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0442\u043a\u0430\u0437\u0435.<\/p>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0447\u0438\u0441\u043b\u043e\u043c \u0441\u0435\u043a\u0443\u043d\u0434. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u0442\u0430 \u043b\u0438\u0431\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432; \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0430\u0434\u0438\u043c \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u044b\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u0430. \u0423 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 HTTP-\u0441\u0442\u0430\u0442\u0443\u0441 <code>429<\/code> \u0438 <code>Retry-After: 2<\/code>, \u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u0434\u044b. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u043e\u0441\u0438\u0442 \u0436\u0434\u0430\u0442\u044c 120 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u043c\u0441\u044f \u0431\u044e\u0434\u0436\u0435\u0442\u0435 20 \u0441\u0435\u043a\u0443\u043d\u0434. \u0412 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u043c \u043a\u043e\u0434 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d. \u0421 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0437\u0430\u043f\u0443\u0441\u043a <code>python retry_plan.py<\/code> \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:<\/p>\n<pre><code>traffic retry_after 2.211credits fix_billing_or_limit -long_wait defer -unknown inspect -<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0432\u0442\u043e\u0440\u043e\u0439. \u0414\u0430\u0436\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 <code>Retry-After<\/code> \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u043d\u044b\u0445 \u043a\u0440\u0435\u0434\u0438\u0442\u0430\u0445. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u0442 120 \u0441\u0435\u043a\u0443\u043d\u0434 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u043c. \u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 <strong>18 \u0442\u0435\u0441\u0442\u043e\u0432<\/strong> \u043f\u0440\u043e\u0448\u0451\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043e\u0434\u0430 \u0431\u0438\u043b\u043b\u0438\u043d\u0433\u0430, \u043e\u0431\u0449\u0438\u0439 \u0442\u0438\u043f <code>insufficient_quota<\/code>, \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0438 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u044b\u0435 \u0442\u0435\u043b\u0430, \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u043f\u0440\u0435\u0434\u0435\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0431\u044e\u0434\u0436\u0435\u0442. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430: <code>python -m unittest -v test_retry_plan.py<\/code>. \u041f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c API \u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<h3>\u0427\u0442\u043e \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u043e \u0434\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0443\u0434\u043e\u0431\u0435\u043d \u043a\u0430\u043a \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043d\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u043b\u043e\u0439 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0437\u0430 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438. \u041f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u0439 deadline, \u043e\u0442\u043c\u0435\u043d\u0430, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c\u0430 \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u043f\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043b\u0438\u043c\u0438\u0442, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043f\u0430\u0443\u0437\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u0442\u0430\u0439\u043c-\u0430\u0443\u0442\u044b \u0438 \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u043f\u043e\u0442\u043e\u043a. \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 HTTP-\u043e\u0442\u043a\u0430\u0437\u0443 \u0434\u043e \u0432\u044b\u0434\u0430\u0447\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u041e\u043d \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u043e\u0441\u043b\u0435 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. \u0414\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u044f\u043c\u043e \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442 HTTP-\u043e\u0448\u0438\u0431\u043a\u0443 \u0434\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043f\u0440\u0435\u0436\u043d\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u0415\u0441\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u044e\u0447, \u043c\u043e\u0434\u0435\u043b\u044c, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c: \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u0438\u043b\u043b\u0438\u043d\u0433 \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u043b\u0438\u0431\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430. \u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u043e\u0442\u043a\u0430\u0437\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0440\u044f\u0434\u043e\u043c \u0441 <code>retry_plan.py<\/code> \u043a\u0430\u043a <code>test_retry_plan.py<\/code>. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>python -m unittest -v test_retry_plan.py<\/code>.<\/p>\n<pre><code class=\"python\">import randomimport unittestfrom retry_plan import BILLING_CODES, plandef body(code=\"slow_down\", kind=\"rate_limit_error\"):    return {\"error\": {\"code\": code, \"type\": kind}}class RetryPolicyTests(unittest.TestCase):    def call(self, payload=None, headers=None, **kw):        return plan(429, body() if payload is None else payload,                    {} if headers is None else headers,                    rng=random.Random(0), **kw)    def test_billing_codes_override_retry_header(self):        for code in BILLING_CODES:            with self.subTest(code=code):                self.assertEqual(self.call(body(code), {\"Retry-After\": \"2\"}),                                 (\"fix_billing_or_limit\", None))    def test_broad_quota_type(self):        self.assertEqual(self.call(body(None, \"insufficient_quota\"))[0],                         \"fix_billing_or_limit\")    def test_quota_type_wins_in_conflicting_fixture(self):        self.assertEqual(self.call(body(\"slow_down\", \"insufficient_quota\"))[0],                         \"fix_billing_or_limit\")    def test_numeric_hint_is_minimum(self):        action, delay = self.call(headers={\"Retry-After\": \"2\"})        self.assertEqual(action, \"retry_after\")        self.assertGreaterEqual(delay, 2)        self.assertLessEqual(delay, 2.25)    def test_header_names_case_insensitive(self):        self.assertEqual(self.call(headers={\"Retry-After\": \"2\"}),                         self.call(headers={\"RETRY-AFTER\": \"2\"}))    def test_fallback_increases(self):        self.assertAlmostEqual(self.call(retry_index=1)[1] -                               self.call(retry_index=0)[1], 1.0)    def test_retry_count_is_finite(self):        self.assertEqual(self.call(retry_index=2),                         (\"retry_budget_exhausted\", None))    def test_server_delay_never_truncated(self):        self.assertEqual(self.call(headers={\"Retry-After\": \"120\"}),                         (\"defer\", None))    def test_timeout_reserved(self):        self.assertEqual(self.call(headers={\"Retry-After\": \"18\"}),                         (\"defer\", None))    def test_unknown_code_not_blindly_retried(self):        self.assertEqual(self.call(body(\"unknown\")), (\"inspect\", None))    def test_missing_code_not_blindly_retried(self):        self.assertEqual(self.call(body(None)), (\"inspect\", None))    def test_legacy_rate_code(self):        self.assertEqual(self.call(body(\"rate_limit_exceeded\"))[0],                         \"retry_after\")    def test_other_status_not_matched(self):        self.assertEqual(plan(401, body(), {}), (\"inspect\", None))    def test_overload_code_only_for_503(self):        payload = body(\"server_is_overloaded\", \"service_unavailable_error\")        self.assertEqual(plan(503, payload, {}, rng=random.Random(0))[0],                         \"retry_after\")        self.assertEqual(self.call(payload), (\"inspect\", None))    def test_malformed_body(self):        for payload in [[], \"HTML\", {}, {\"error\": []}, {\"error\": None}]:            with self.subTest(payload=payload):                self.assertEqual(self.call(payload), (\"inspect\", None))    def test_malformed_code(self):        self.assertEqual(self.call(body([])), (\"inspect\", None))    def test_unsupported_or_invalid_hint(self):        for hint in [\"NaN\", \"inf\", \"-1\", \"later\", {},                     \"Sat, 31 Oct 2026 13:00:00 GMT\"]:            with self.subTest(hint=hint):                self.assertEqual(self.call(headers={\"Retry-After\": hint}),                                 (\"inspect_retry_after\", None))    def test_invalid_budget(self):        for kw in [{\"remaining_s\": -1}, {\"attempt_timeout_s\": 0},                   {\"retry_index\": -1}, {\"remaining_s\": float(\"inf\")},                   {\"remaining_s\": float(\"nan\")}]:            with self.subTest(kw=kw):                with self.assertRaises(ValueError):                    self.call(**kw)if __name__ == \"__main__\":    unittest.main(verbosity=2)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/error-codes\">\u041a\u043e\u0434\u044b \u043e\u0448\u0438\u0431\u043e\u043a API<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/spend-limits\">\u041b\u0438\u043c\u0438\u0442\u044b \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developers.openai.com\/api\/docs\/guides\/chatgpt-api-credits\">API-\u043a\u0440\u0435\u0434\u0438\u0442\u044b \u043f\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u043b\u0430\u0442\u0430 \u0437\u0430\u0440\u0443\u0431\u0435\u0436\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c \u0432 <a href=\"https:\/\/raketapay.ru\/?utm_source=habr&amp;utm_medium=content&amp;utm_campaign=articles_b2b&amp;utm_content=habr_20261031_api_429_diag\">RaketaPay<\/a>. \u041e\u043f\u043b\u0430\u0442\u0430 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043d\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0443.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1102084\/\">https:\/\/habr.com\/ru\/articles\/1102084\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0430 API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 429: \u043a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0432\u043e\u0442\u0443 \u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\u0423 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a: \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0438\u043b 429, \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441. \u041d\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0430\u0437\u0443\u043c\u043d\u043e. \u041d\u043e \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c API-\u043a\u0440\u0435\u0434\u0438\u0442\u044b \u0438\u043b\u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0432\u0438\u0434\u0438\u0442 \u0434\u043e\u043b\u0433\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0445\u043e\u0442\u044f \u043d\u0438 \u043e\u0434\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u043a\u0443\u043d\u0434\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443.\u0417\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0443\u0437\u043a\u0430\u044f: \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c\u0443 HTTP-\u043e\u0442\u0432\u0435\u0442\u0443 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0441 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0431\u0438\u043b\u043b\u0438\u043d\u0433 \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u043a\u0443 \u0434\u043e \u0432\u044b\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u044b? \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438.\u041d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a OpenAI API, \u0430 \u043d\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0448\u043b\u044e\u0437 \u0441 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c SDK. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 31 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2026 \u0433\u043e\u0434\u0430. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435; \u043a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043c\u043e\u0434\u0435\u043b\u044f\u043c. \u042d\u0442\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0435 \u0438 \u043d\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0442\u0435\u0441\u0442.\u041f\u043e\u0447\u0435\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435\u041d\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0441 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043e \u0438 \u043a \u043a\u0430\u043a\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441. \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 ChatGPT \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 API-\u0431\u0438\u043b\u043b\u0438\u043d\u0433\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0432\u0435\u0441\u0442\u0438 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0444\u043b\u0430\u0436\u043a\u0443 \u00ab\u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043e\u00bb.\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u00ab\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 API\u00bb \u0443\u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0447\u043d\u043e. \u0412 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c API-\u043a\u0440\u0435\u0434\u0438\u0442\u044b \u043f\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430\u043c Pro \u0438 Business. \u041b\u044c\u0433\u043e\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 API-\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439; \u043a\u0440\u0435\u0434\u0438\u0442\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0439, \u0438\u043c\u0435\u044e\u0442 \u0441\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u044e\u0442 rate limits. \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0443\u0447\u0435\u0431\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e: \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f personal \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u043a\u0440\u0435\u0434\u0438\u0442\u044b, \u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0437 work. \u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0430 personal \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u0435\u043a\u0442. \u041f\u0435\u0440\u0435\u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u043d\u0430\u0443\u0433\u0430\u0434 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e: \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u043a\u0440\u0435\u0442 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442, \u043a\u0443\u0434\u0430 \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435.\u0412 API \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u043e \u0438\u0445 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u043b\u0435\u043f\u0443\u044e \u043a\u043e \u0432\u0441\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c. \u0414\u043b\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0432\u0430\u0436\u0435\u043d \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0430 \u043d\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0417\u0430\u043f\u0438\u0441\u044c \u00abAPI error 429\u00bb \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u0435\u0434\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430. \u0414\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0441 \u0447\u0430\u0441\u043e\u0432\u044b\u043c \u043f\u043e\u044f\u0441\u043e\u043c, HTTP-\u0441\u0442\u0430\u0442\u0443\u0441, error.code, error.type, \u043c\u043e\u0434\u0435\u043b\u044c, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 x-request-id, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 Retry-After \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 x-ratelimit-*. \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.\u042f \u0431\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u043e\u043b\u0435\u0439, \u0430 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0446\u0435\u043b\u0438\u043a\u043e\u043c HTTP-\u043e\u0431\u044a\u0435\u043a\u0442. \u0412 \u043d\u0451\u043c \u043b\u0435\u0433\u043a\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Authorization, cookie \u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442. \u0414\u0430\u0436\u0435 \u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432 \u043e\u0431\u0449\u0438\u0439 \u043b\u043e\u0433 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432; \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.\u0414\u0430\u043b\u044c\u0448\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430. \u0423 \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u0438\u043b\u043b\u0438\u043d\u0433\u0430 \u043e\u0431\u0449\u0438\u0439 error.type \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f insufficient_quota, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 error.code. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u0441\u043b\u043e\u0432\u043e\u043c quota \u0442\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e\u0427\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0432\u0442\u043e\u0440429 \u0438 credit_balance_exhausted\u0411\u0430\u043b\u0430\u043d\u0441 \u043d\u0443\u0436\u043d\u043e\u0439 API-\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c429 \u0438 project_spend_limit_exceeded\u0416\u0451\u0441\u0442\u043a\u0438\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c429 \u0438 organization_spend_limit_exceeded\u0416\u0451\u0441\u0442\u043a\u0438\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c429 \u0438 organization_usage_limit_exceeded\u0420\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0439 OpenAI \u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c429 \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u043b\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432\u041e\u043a\u043d\u043e \u043b\u0438\u043c\u0438\u0442\u0430, \u043c\u043e\u0434\u0435\u043b\u044c, \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443\u0412\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0441 \u043f\u0430\u0443\u0437\u043e\u0439429 \u0438 slow_down\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430\u0421\u043d\u0438\u0437\u0438\u0442\u044c \u0442\u0435\u043c\u043f \u0438 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u0443\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0438\u043b\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0435 \u0442\u0435\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0438\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430\u041d\u0435 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443\u041a\u043e\u0434\u044b \u0438 \u0438\u0445 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0430 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u043b\u044e\u0431\u043e\u043c 429.\u0423 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b\u0421\u043b\u043e\u0432\u043e \u00ab\u043b\u0438\u043c\u0438\u0442\u00bb \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0442\u043e\u0436\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. Spend alert \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 \u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u0445, \u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 API-\u0442\u0440\u0430\u0444\u0438\u043a. Hard spend limit \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u041f\u0440\u0438\u0447\u0451\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e: \u0443\u0447\u0442\u0451\u043d\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.\u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043b\u044f \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430: \u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442, \u043d\u0443\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043a\u043e\u0434\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0437. \u0423 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043a\u043b\u044e\u0447\u0438, \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430.\u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043b\u0438\u043c\u0438\u0442\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u0430. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0438 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044b.\u041a\u043e\u0433\u0434\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442\u0414\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043b\u0438\u043c\u0438\u0442\u0430 \u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0447\u0430\u0441\u0442\u044c \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0435\u043b\u044f\u0442 \u043e\u0431\u0449\u0438\u0439 \u043b\u0438\u043c\u0438\u0442. \u041a\u043e\u0434 slow_down \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0440\u0435\u0437\u043a\u043e\u0435 \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u044f RPM \u0438 TPM.\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 Retry-After \u0437\u0430\u0434\u0430\u0451\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0443\u0437\u0443. \u0411\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0434\u043e\u0431\u0430\u0432\u043a\u043e\u0439, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0438 \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0414\u043b\u0438\u043d\u043d\u0443\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0443\u044e \u043f\u0430\u0443\u0437\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0434\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u044f\u0442\u0438 \u0441\u0435\u043a\u0443\u043d\u0434: \u0435\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0434\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u0435\u0451 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c.\u0423 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0443\u0447\u0435\u0431\u043d\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u043d\u0438\u0436\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0434\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438, \u0430 \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u042d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u043c. \u0412\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043e\u0431\u044f\u0437\u0430\u043d \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430.\u041d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0438 SDK. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f Python-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e; max_retries=0 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c. \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0446\u0438\u043a\u043b \u043f\u043e\u0432\u0435\u0440\u0445 SDK \u0431\u0435\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u0443\u0447\u0451\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0434\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0435\u043c \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0447\u0438\u0441\u043b\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0432\u0435\u0440\u044f\u0442\u044c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 API\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u043b\u0430\u043d\u0441. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 JSON-\u0442\u0435\u043b\u043e \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043b\u0430\u043d. \u041e\u043d\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043d\u0435 \u0441\u043f\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435.\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432. rate_limit_exceeded \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API; \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0443 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0431\u043e\u0440. \u0414\u043b\u044f 503 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 server_is_overloaded.\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0430\u0439\u043b retry_plan.py \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Python. \u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:\u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 Python&#187;&#187;&#187;Synthetic, offline retry-policy example. No HTTP calls or credentials.&#187;&#187;&#187;import mathimport randomBILLING_CODES = {    &#171;credit_balance_exhausted&#187;,    &#171;project_spend_limit_exceeded&#187;,    &#171;organization_spend_limit_exceeded&#187;,    &#171;organization_usage_limit_exceeded&#187;,}def plan(status, body, headers, retry_index=0, remaining_s=20.0,         attempt_timeout_s=3.0, rng=None):    &#171;&#187;&#187;Return (action, delay_s); retry_index counts retries already used.&#187;&#187;&#187;    if retry_index &lt; 0 or remaining_s &lt; 0 or attempt_timeout_s &lt;= 0:        raise ValueError(&#171;Invalid retry budget&#187;)    if not math.isfinite(remaining_s + attempt_timeout_s):        raise ValueError(&#171;Budget must be finite&#187;)    error = body.get(&#171;error&#187;) if isinstance(body, dict) else None    if not isinstance(error, dict):        return &#171;inspect&#187;, None    code, kind = error.get(&#171;code&#187;), error.get(&#171;type&#187;)    if not isinstance(code, (str, type(None))):        return &#171;inspect&#187;, None    if status == 429 and (        code in BILLING_CODES or kind == &#171;insufficient_quota&#187;    ):        return &#171;fix_billing_or_limit&#187;, None    transient = (        status == 429 and code in {&#171;rate_limit_exceeded&#187;, &#171;slow_down&#187;}    ) or (status == 503 and code == &#171;server_is_overloaded&#187;)    if not transient:        return &#171;inspect&#187;, None    if retry_index &gt;= 2:        return &#171;retry_budget_exhausted&#187;, None    normalized = {str(k).lower(): v for k, v in headers.items()}    raw = normalized.get(&#171;retry-after&#187;)    if raw is None:        delay = 2.0 ** retry_index    else:        try:            delay = float(raw)        except (TypeError, ValueError, OverflowError):            return &#171;inspect_retry_after&#187;, None        if not math.isfinite(delay) or delay &lt; 0:            return &#171;inspect_retry_after&#187;, None    rng = rng if rng is not None else random    delay += rng.uniform(0.0, 0.25)    if delay + attempt_timeout_s &gt; remaining_s:        return &#171;defer&#187;, None    return &#171;retry_after&#187;, delaydef demo():    fixtures = [        (&#171;traffic&#187;, 429, &#171;slow_down&#187;, &#171;rate_limit_error&#187;, &#171;2&#187;),        (&#171;credits&#187;, 429, &#171;credit_balance_exhausted&#187;,         &#171;insufficient_quota&#187;, &#171;2&#187;),        (&#171;long_wait&#187;, 429, &#171;slow_down&#187;, &#171;rate_limit_error&#187;, &#171;120&#187;),        (&#171;unknown&#187;, 429, &#171;new_code&#187;, &#171;new_type&#187;, &#171;2&#187;),    ]    for name, status, code, kind, hint in fixtures:        body = {&#171;error&#187;: {&#171;code&#187;: code, &#171;type&#187;: kind}}        action, delay = plan(status, body, {&#171;Retry-After&#187;: hint},                             rng=random.Random(0))        print(name, action, &#171;-&#187; if delay is None else f&#187;{delay:.3f}&#187;)if __name__ == &#171;__main__&#187;:    demo()\u0417\u0434\u0435\u0441\u044c retry_index \u2014 \u0447\u0438\u0441\u043b\u043e \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432, \u0430 remaining_s \u2014 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043d\u043e\u0432\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0435 defer \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438: \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e \u0440\u0435\u0448\u0430\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0435\u0451 \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0442\u043a\u0430\u0437\u0435.\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-501155","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=501155"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501155\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=501155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=501155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=501155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}