[{"data":1,"prerenderedAt":2640},["ShallowReactive",2],{"navigation_docs_ru":3,"-ru-errors-error-handling":180,"-ru-errors-error-handling-surround":2635},[4,36,57,87,107,127,143,154,163],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Начало работы","i-lucide-rocket","/ru/getting-started","ru/1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Введение","/ru/getting-started/introduction","ru/1.getting-started/1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Регистрация агентства","/ru/getting-started/agency-setup","ru/1.getting-started/2.agency-setup","i-lucide-building-2",{"title":21,"path":22,"stem":23,"icon":24},"Аутентификация","/ru/getting-started/authentication","ru/1.getting-started/3.authentication","i-lucide-key",{"title":26,"path":27,"stem":28,"icon":29},"Быстрый старт","/ru/getting-started/quick-start","ru/1.getting-started/4.quick-start","i-lucide-zap",{"title":31,"path":32,"stem":33,"icon":34},"Коллекция Postman","/ru/getting-started/postman","ru/1.getting-started/5.postman","i-lucide-download",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Концепции","i-lucide-lightbulb","/ru/concepts","ru/2.concepts",[42,47,52],{"title":43,"path":44,"stem":45,"icon":46},"External ID","/ru/concepts/external-ids","ru/2.concepts/1.external-ids","i-lucide-link",{"title":48,"path":49,"stem":50,"icon":51},"Upsert паттерн","/ru/concepts/upsert-pattern","ru/2.concepts/2.upsert-pattern","i-lucide-refresh-cw",{"title":53,"path":54,"stem":55,"icon":56},"Асинхронные задачи","/ru/concepts/async-jobs","ru/2.concepts/3.async-jobs","i-lucide-clock",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":35},"Объявления","i-lucide-home","/ru/listings","ru/3.listings",[63,68,73,78,83],{"title":64,"path":65,"stem":66,"icon":67},"Обзор объявлений","/ru/listings/overview","ru/3.listings/1.overview","i-lucide-layout-list",{"title":69,"path":70,"stem":71,"icon":72},"Создание и обновление","/ru/listings/create-update","ru/3.listings/2.create-update","i-lucide-plus",{"title":74,"path":75,"stem":76,"icon":77},"Получение объявлений","/ru/listings/retrieve","ru/3.listings/3.retrieve","i-lucide-search",{"title":79,"path":80,"stem":81,"icon":82},"Bulk операции","/ru/listings/bulk","ru/3.listings/4.bulk","i-lucide-layers",{"title":84,"path":85,"stem":86,"icon":46},"Привязка external ID","/ru/listings/external-id-linking","ru/3.listings/5.external-id-linking",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":35},"Пользователи","i-lucide-users","/ru/users","ru/4.users",[93,98,103],{"title":94,"path":95,"stem":96,"icon":97},"Обзор пользователей","/ru/users/overview","ru/4.users/1.overview","i-lucide-user",{"title":99,"path":100,"stem":101,"icon":102},"Обновление профиля","/ru/users/update","ru/4.users/2.update","i-lucide-user-pen",{"title":104,"path":105,"stem":106,"icon":77},"Получение пользователей","/ru/users/retrieve","ru/4.users/3.retrieve",{"title":108,"icon":109,"path":110,"stem":111,"children":112,"page":35},"Медиафайлы","i-lucide-image","/ru/media","ru/5.media",[113,117,122],{"title":114,"path":115,"stem":116,"icon":109},"Обзор медиафайлов","/ru/media/overview","ru/5.media/1.overview",{"title":118,"path":119,"stem":120,"icon":121},"Загрузка файлов","/ru/media/upload","ru/5.media/2.upload","i-lucide-upload",{"title":123,"path":124,"stem":125,"icon":126},"Управление файлами","/ru/media/manage","ru/5.media/3.manage","i-lucide-folder",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":35},"Справочники","i-lucide-book-open","/ru/reference","ru/6.reference",[133,138],{"title":134,"path":135,"stem":136,"icon":137},"Схема полей","/ru/reference/schema","ru/6.reference/1.schema","i-lucide-file-json",{"title":139,"path":140,"stem":141,"icon":142},"Валюты и курсы","/ru/reference/currencies","ru/6.reference/2.currencies","i-lucide-wallet",{"title":144,"icon":145,"path":146,"stem":147,"children":148,"page":35},"Ошибки","i-lucide-alert-triangle","/ru/errors","ru/7.errors",[149],{"title":150,"path":151,"stem":152,"icon":153},"Обработка ошибок","/ru/errors/error-handling","ru/7.errors/1.error-handling","i-lucide-shield-alert",{"title":155,"path":156,"stem":157,"children":158,"icon":162},"Changelog","/ru/changelog","ru/8.changelog/1.index",[159],{"title":160,"path":156,"stem":157,"icon":161},"История изменений","i-lucide-scroll-text","i-lucide-history",{"title":164,"path":165,"stem":166,"children":167,"page":35},"Guides","/ru/guides","ru/9.guides",[168,172,176],{"title":169,"path":170,"stem":171,"icon":129},"Руководства по интеграции","/ru/guides/overview","ru/9.guides/1.overview",{"title":173,"path":174,"stem":175,"icon":121},"Первичная синхронизация","/ru/guides/first-sync","ru/9.guides/2.first-sync",{"title":177,"path":178,"stem":179,"icon":51},"Непрерывная синхронизация","/ru/guides/continuous-sync","ru/9.guides/3.continuous-sync",{"id":181,"title":150,"body":182,"description":2628,"extension":2629,"links":2630,"meta":2631,"navigation":2632,"path":151,"seo":2633,"stem":152,"__hash__":2634},"docs_ru/ru/7.errors/1.error-handling.md",{"type":183,"value":184,"toc":2604},"minimark",[185,189,194,285,291,376,380,519,523,528,539,543,554,558,561,591,595,603,646,650,653,697,703,988,992,996,1047,1051,1054,1624,1627,1631,1635,1726,1730,1816,1820,1885,1889,1961,1963,1967,2562,2566,2600],[186,187,188],"p",{},"API использует стандартные HTTP-коды для сигнализации об ошибках. Все ошибки возвращают JSON с описанием проблемы.",[190,191,193],"h2",{"id":192},"формат-ошибки","Формат ошибки",[195,196,201],"pre",{"className":197,"code":198,"language":199,"meta":200,"style":200},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 400,\n  \"message\": \"Описание ошибки\",\n  \"error\": \"Bad Request\"\n}\n","json","",[202,203,204,213,236,259,279],"code",{"__ignoreMap":200},[205,206,209],"span",{"class":207,"line":208},"line",1,[205,210,212],{"class":211},"sMK4o","{\n",[205,214,216,219,223,226,229,233],{"class":207,"line":215},2,[205,217,218],{"class":211},"  \"",[205,220,222],{"class":221},"spNyl","statusCode",[205,224,225],{"class":211},"\"",[205,227,228],{"class":211},":",[205,230,232],{"class":231},"sbssI"," 400",[205,234,235],{"class":211},",\n",[205,237,239,241,244,246,248,251,255,257],{"class":207,"line":238},3,[205,240,218],{"class":211},[205,242,243],{"class":221},"message",[205,245,225],{"class":211},[205,247,228],{"class":211},[205,249,250],{"class":211}," \"",[205,252,254],{"class":253},"sfazB","Описание ошибки",[205,256,225],{"class":211},[205,258,235],{"class":211},[205,260,262,264,267,269,271,273,276],{"class":207,"line":261},4,[205,263,218],{"class":211},[205,265,266],{"class":221},"error",[205,268,225],{"class":211},[205,270,228],{"class":211},[205,272,250],{"class":211},[205,274,275],{"class":253},"Bad Request",[205,277,278],{"class":211},"\"\n",[205,280,282],{"class":207,"line":281},5,[205,283,284],{"class":211},"}\n",[186,286,287,288,290],{},"Для ошибок валидации ",[202,289,243],{}," может быть массивом:",[195,292,294],{"className":197,"code":293,"language":199,"meta":200,"style":200},"{\n  \"statusCode\": 400,\n  \"message\": [\n    \"announcementDescription must be at least 40 characters\",\n    \"propertyType must be one of: residential, commercial, parking\"\n  ],\n  \"error\": \"Bad Request\"\n}\n",[202,295,296,300,314,327,339,348,354,371],{"__ignoreMap":200},[205,297,298],{"class":207,"line":208},[205,299,212],{"class":211},[205,301,302,304,306,308,310,312],{"class":207,"line":215},[205,303,218],{"class":211},[205,305,222],{"class":221},[205,307,225],{"class":211},[205,309,228],{"class":211},[205,311,232],{"class":231},[205,313,235],{"class":211},[205,315,316,318,320,322,324],{"class":207,"line":238},[205,317,218],{"class":211},[205,319,243],{"class":221},[205,321,225],{"class":211},[205,323,228],{"class":211},[205,325,326],{"class":211}," [\n",[205,328,329,332,335,337],{"class":207,"line":261},[205,330,331],{"class":211},"    \"",[205,333,334],{"class":253},"announcementDescription must be at least 40 characters",[205,336,225],{"class":211},[205,338,235],{"class":211},[205,340,341,343,346],{"class":207,"line":281},[205,342,331],{"class":211},[205,344,345],{"class":253},"propertyType must be one of: residential, commercial, parking",[205,347,278],{"class":211},[205,349,351],{"class":207,"line":350},6,[205,352,353],{"class":211},"  ],\n",[205,355,357,359,361,363,365,367,369],{"class":207,"line":356},7,[205,358,218],{"class":211},[205,360,266],{"class":221},[205,362,225],{"class":211},[205,364,228],{"class":211},[205,366,250],{"class":211},[205,368,275],{"class":253},[205,370,278],{"class":211},[205,372,374],{"class":207,"line":373},8,[205,375,284],{"class":211},[190,377,379],{"id":378},"http-статусы","HTTP-статусы",[381,382,383,402],"table",{},[384,385,386],"thead",{},[387,388,389,393,396,399],"tr",{},[390,391,392],"th",{},"Код",[390,394,395],{},"Тип",[390,397,398],{},"Описание",[390,400,401],{},"Повторять запрос?",[403,404,405,419,433,447,461,478,491,505],"tbody",{},[387,406,407,411,413,416],{},[408,409,410],"td",{},"400",[408,412,275],{},[408,414,415],{},"Неверные параметры запроса",[408,417,418],{},"Нет — исправьте данные",[387,420,421,424,427,430],{},[408,422,423],{},"401",[408,425,426],{},"Unauthorized",[408,428,429],{},"Проблема с API ключом",[408,431,432],{},"Нет — проверьте ключ",[387,434,435,438,441,444],{},[408,436,437],{},"403",[408,439,440],{},"Forbidden",[408,442,443],{},"Нет доступа к ресурсу",[408,445,446],{},"Нет — проверьте права",[387,448,449,452,455,458],{},[408,450,451],{},"404",[408,453,454],{},"Not Found",[408,456,457],{},"Ресурс не найден",[408,459,460],{},"Нет — проверьте ID",[387,462,463,466,469,472],{},[408,464,465],{},"415",[408,467,468],{},"Unsupported Media Type",[408,470,471],{},"Неверный Content-Type",[408,473,474,475],{},"Нет — используйте ",[202,476,477],{},"application/json",[387,479,480,483,486,489],{},[408,481,482],{},"422",[408,484,485],{},"Unprocessable Entity",[408,487,488],{},"Все bulk-операции завершились ошибкой",[408,490,418],{},[387,492,493,496,499,502],{},[408,494,495],{},"429",[408,497,498],{},"Too Many Requests",[408,500,501],{},"Превышен лимит запросов",[408,503,504],{},"Да — после паузы",[387,506,507,510,513,516],{},[408,508,509],{},"500",[408,511,512],{},"Server Error",[408,514,515],{},"Внутренняя ошибка",[408,517,518],{},"Да — с exponential backoff",[190,520,522],{"id":521},"требования-к-запросам","Требования к запросам",[524,525,527],"h3",{"id":526},"content-type","Content-Type",[186,529,530,531,534,535,538],{},"Все запросы с телом (POST, PUT, PATCH) должны содержать заголовок ",[202,532,533],{},"Content-Type: application/json",". Запросы с другими типами содержимого получают ответ ",[202,536,537],{},"415 Unsupported Media Type",".",[524,540,542],{"id":541},"ограничение-размера-тела","Ограничение размера тела",[186,544,545,546,550,551,538],{},"Размер тела запроса ограничен ",[547,548,549],"strong",{},"512 КБ",". Запросы, превышающие этот лимит, получают ответ ",[202,552,553],{},"413 Payload Too Large",[190,555,557],{"id":556},"rate-limiting","Rate Limiting",[186,559,560],{},"API ограничивает количество запросов для защиты от перегрузки. Каждый ответ содержит заголовки с информацией о лимитах.",[381,562,563,573],{},[384,564,565],{},[387,566,567,570],{},[390,568,569],{},"Тип endpoint",[390,571,572],{},"Лимит",[403,574,575,583],{},[387,576,577,580],{},[408,578,579],{},"Глобальный (все endpoints)",[408,581,582],{},"300 запросов / минута",[387,584,585,588],{},[408,586,587],{},"Bulk endpoints",[408,589,590],{},"30 запросов / минута",[524,592,594],{"id":593},"заголовки-лимитов","Заголовки лимитов",[195,596,601],{"className":597,"code":599,"language":600},[598],"language-text","X-RateLimit-Limit: 300\nX-RateLimit-Remaining: 295\nX-RateLimit-Reset: 1705330800\n","text",[202,602,599],{"__ignoreMap":200},[381,604,605,614],{},[384,606,607],{},[387,608,609,612],{},[390,610,611],{},"Заголовок",[390,613,398],{},[403,615,616,626,636],{},[387,617,618,623],{},[408,619,620],{},[202,621,622],{},"X-RateLimit-Limit",[408,624,625],{},"Максимум запросов за период",[387,627,628,633],{},[408,629,630],{},[202,631,632],{},"X-RateLimit-Remaining",[408,634,635],{},"Сколько запросов осталось",[387,637,638,643],{},[408,639,640],{},[202,641,642],{},"X-RateLimit-Reset",[408,644,645],{},"Когда сбросится лимит (Unix timestamp)",[524,647,649],{"id":648},"что-делать-при-429","Что делать при 429",[186,651,652],{},"При превышении лимита API вернёт:",[195,654,656],{"className":197,"code":655,"language":199,"meta":200,"style":200},"{\n  \"statusCode\": 429,\n  \"message\": \"Too Many Requests\"\n}\n",[202,657,658,662,677,693],{"__ignoreMap":200},[205,659,660],{"class":207,"line":208},[205,661,212],{"class":211},[205,663,664,666,668,670,672,675],{"class":207,"line":215},[205,665,218],{"class":211},[205,667,222],{"class":221},[205,669,225],{"class":211},[205,671,228],{"class":211},[205,673,674],{"class":231}," 429",[205,676,235],{"class":211},[205,678,679,681,683,685,687,689,691],{"class":207,"line":238},[205,680,218],{"class":211},[205,682,243],{"class":221},[205,684,225],{"class":211},[205,686,228],{"class":211},[205,688,250],{"class":211},[205,690,498],{"class":253},[205,692,278],{"class":211},[205,694,695],{"class":207,"line":261},[205,696,284],{"class":211},[186,698,699,700,702],{},"Дождитесь времени из ",[202,701,642],{}," и повторите запрос:",[195,704,709],{"className":705,"code":706,"filename":707,"language":708,"meta":200,"style":200},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","async function fetchWithRateLimit(url, options) {\n  const response = await fetch(url, options);\n\n  if (response.status === 429) {\n    const resetTime = response.headers.get('X-RateLimit-Reset');\n    const waitMs = (parseInt(resetTime) * 1000) - Date.now();\n    await new Promise(r => setTimeout(r, Math.max(waitMs, 1000)));\n    return fetch(url, options); // Повторить\n  }\n\n  return response;\n}\n","Node.js","js",[202,710,711,742,775,781,807,842,887,938,962,968,973,983],{"__ignoreMap":200},[205,712,713,716,719,723,726,730,733,736,739],{"class":207,"line":208},[205,714,715],{"class":221},"async",[205,717,718],{"class":221}," function",[205,720,722],{"class":721},"s2Zo4"," fetchWithRateLimit",[205,724,725],{"class":211},"(",[205,727,729],{"class":728},"sHdIc","url",[205,731,732],{"class":211},",",[205,734,735],{"class":728}," options",[205,737,738],{"class":211},")",[205,740,741],{"class":211}," {\n",[205,743,744,747,751,754,758,761,764,766,768,770,772],{"class":207,"line":215},[205,745,746],{"class":221},"  const",[205,748,750],{"class":749},"sTEyZ"," response",[205,752,753],{"class":211}," =",[205,755,757],{"class":756},"s7zQu"," await",[205,759,760],{"class":721}," fetch",[205,762,725],{"class":763},"swJcz",[205,765,729],{"class":749},[205,767,732],{"class":211},[205,769,735],{"class":749},[205,771,738],{"class":763},[205,773,774],{"class":211},";\n",[205,776,777],{"class":207,"line":238},[205,778,780],{"emptyLinePlaceholder":779},true,"\n",[205,782,783,786,789,792,794,797,800,802,805],{"class":207,"line":261},[205,784,785],{"class":756},"  if",[205,787,788],{"class":763}," (",[205,790,791],{"class":749},"response",[205,793,538],{"class":211},[205,795,796],{"class":749},"status",[205,798,799],{"class":211}," ===",[205,801,674],{"class":231},[205,803,804],{"class":763},") ",[205,806,212],{"class":211},[205,808,809,812,815,817,819,821,824,826,829,831,834,836,838,840],{"class":207,"line":281},[205,810,811],{"class":221},"    const",[205,813,814],{"class":749}," resetTime",[205,816,753],{"class":211},[205,818,750],{"class":749},[205,820,538],{"class":211},[205,822,823],{"class":749},"headers",[205,825,538],{"class":211},[205,827,828],{"class":721},"get",[205,830,725],{"class":763},[205,832,833],{"class":211},"'",[205,835,642],{"class":253},[205,837,833],{"class":211},[205,839,738],{"class":763},[205,841,774],{"class":211},[205,843,844,846,849,851,853,856,858,861,863,866,869,871,874,877,879,882,885],{"class":207,"line":350},[205,845,811],{"class":221},[205,847,848],{"class":749}," waitMs",[205,850,753],{"class":211},[205,852,788],{"class":763},[205,854,855],{"class":721},"parseInt",[205,857,725],{"class":763},[205,859,860],{"class":749},"resetTime",[205,862,804],{"class":763},[205,864,865],{"class":211},"*",[205,867,868],{"class":231}," 1000",[205,870,804],{"class":763},[205,872,873],{"class":211},"-",[205,875,876],{"class":749}," Date",[205,878,538],{"class":211},[205,880,881],{"class":721},"now",[205,883,884],{"class":763},"()",[205,886,774],{"class":211},[205,888,889,892,895,899,901,904,907,910,912,914,916,919,921,924,926,929,931,933,936],{"class":207,"line":356},[205,890,891],{"class":756},"    await",[205,893,894],{"class":211}," new",[205,896,898],{"class":897},"sBMFI"," Promise",[205,900,725],{"class":763},[205,902,903],{"class":728},"r",[205,905,906],{"class":221}," =>",[205,908,909],{"class":721}," setTimeout",[205,911,725],{"class":763},[205,913,903],{"class":749},[205,915,732],{"class":211},[205,917,918],{"class":749}," Math",[205,920,538],{"class":211},[205,922,923],{"class":721},"max",[205,925,725],{"class":763},[205,927,928],{"class":749},"waitMs",[205,930,732],{"class":211},[205,932,868],{"class":231},[205,934,935],{"class":763},")))",[205,937,774],{"class":211},[205,939,940,943,945,947,949,951,953,955,958],{"class":207,"line":373},[205,941,942],{"class":756},"    return",[205,944,760],{"class":721},[205,946,725],{"class":763},[205,948,729],{"class":749},[205,950,732],{"class":211},[205,952,735],{"class":749},[205,954,738],{"class":763},[205,956,957],{"class":211},";",[205,959,961],{"class":960},"sHwdD"," // Повторить\n",[205,963,965],{"class":207,"line":964},9,[205,966,967],{"class":211},"  }\n",[205,969,971],{"class":207,"line":970},10,[205,972,780],{"emptyLinePlaceholder":779},[205,974,976,979,981],{"class":207,"line":975},11,[205,977,978],{"class":756},"  return",[205,980,750],{"class":749},[205,982,774],{"class":211},[205,984,986],{"class":207,"line":985},12,[205,987,284],{"class":211},[190,989,991],{"id":990},"retry-стратегия","Retry-стратегия",[524,993,995],{"id":994},"когда-повторять-запросы","Когда повторять запросы",[381,997,998,1008],{},[384,999,1000],{},[387,1001,1002,1005],{},[390,1003,1004],{},"Ситуация",[390,1006,1007],{},"Действие",[403,1009,1010,1018,1028,1036],{},[387,1011,1012,1015],{},[408,1013,1014],{},"5xx ошибки",[408,1016,1017],{},"Повторить с exponential backoff",[387,1019,1020,1023],{},[408,1021,1022],{},"429 ошибки",[408,1024,1025,1026],{},"Подождать до ",[202,1027,642],{},[387,1029,1030,1033],{},[408,1031,1032],{},"Сетевые ошибки",[408,1034,1035],{},"Повторить с backoff",[387,1037,1038,1041],{},[408,1039,1040],{},"4xx ошибки",[408,1042,1043,1046],{},[547,1044,1045],{},"Не повторять"," — исправить запрос",[524,1048,1050],{"id":1049},"exponential-backoff","Exponential backoff",[186,1052,1053],{},"При серверных ошибках увеличивайте паузу между попытками:",[1055,1056,1057,1514],"code-group",{},[195,1058,1060],{"className":705,"code":1059,"filename":707,"language":708,"meta":200,"style":200},"async function fetchWithRetry(url, options, maxRetries = 3) {\n  for (let attempt = 0; attempt \u003C maxRetries; attempt++) {\n    try {\n      const response = await fetch(url, options);\n\n      // Серверная ошибка — повторить\n      if (response.status >= 500) {\n        throw new Error(`Server error: ${response.status}`);\n      }\n\n      return response;\n    } catch (error) {\n      if (attempt === maxRetries - 1) throw error;\n\n      // Exponential backoff: 1s, 2s, 4s\n      const delay = 1000 * Math.pow(2, attempt);\n      await new Promise(r => setTimeout(r, delay));\n    }\n  }\n}\n\n// Использование\nconst response = await fetchWithRetry(\n  'https://crm.rentix.md/api/v1/listings',\n  {\n    method: 'PUT',\n    headers: { 'Authorization': 'ApiKey YOUR_API_KEY' },\n    body: JSON.stringify(data)\n  }\n);\n",[202,1061,1062,1093,1131,1138,1163,1167,1172,1195,1229,1234,1238,1247,1263,1293,1298,1304,1339,1370,1376,1381,1386,1391,1397,1416,1429,1435,1453,1483,1502,1507],{"__ignoreMap":200},[205,1063,1064,1066,1068,1071,1073,1075,1077,1079,1081,1084,1086,1089,1091],{"class":207,"line":208},[205,1065,715],{"class":221},[205,1067,718],{"class":221},[205,1069,1070],{"class":721}," fetchWithRetry",[205,1072,725],{"class":211},[205,1074,729],{"class":728},[205,1076,732],{"class":211},[205,1078,735],{"class":728},[205,1080,732],{"class":211},[205,1082,1083],{"class":728}," maxRetries",[205,1085,753],{"class":211},[205,1087,1088],{"class":231}," 3",[205,1090,738],{"class":211},[205,1092,741],{"class":211},[205,1094,1095,1098,1100,1103,1106,1108,1111,1113,1115,1118,1120,1122,1124,1127,1129],{"class":207,"line":215},[205,1096,1097],{"class":756},"  for",[205,1099,788],{"class":763},[205,1101,1102],{"class":221},"let",[205,1104,1105],{"class":749}," attempt",[205,1107,753],{"class":211},[205,1109,1110],{"class":231}," 0",[205,1112,957],{"class":211},[205,1114,1105],{"class":749},[205,1116,1117],{"class":211}," \u003C",[205,1119,1083],{"class":749},[205,1121,957],{"class":211},[205,1123,1105],{"class":749},[205,1125,1126],{"class":211},"++",[205,1128,804],{"class":763},[205,1130,212],{"class":211},[205,1132,1133,1136],{"class":207,"line":238},[205,1134,1135],{"class":756},"    try",[205,1137,741],{"class":211},[205,1139,1140,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161],{"class":207,"line":261},[205,1141,1142],{"class":221},"      const",[205,1144,750],{"class":749},[205,1146,753],{"class":211},[205,1148,757],{"class":756},[205,1150,760],{"class":721},[205,1152,725],{"class":763},[205,1154,729],{"class":749},[205,1156,732],{"class":211},[205,1158,735],{"class":749},[205,1160,738],{"class":763},[205,1162,774],{"class":211},[205,1164,1165],{"class":207,"line":281},[205,1166,780],{"emptyLinePlaceholder":779},[205,1168,1169],{"class":207,"line":350},[205,1170,1171],{"class":960},"      // Серверная ошибка — повторить\n",[205,1173,1174,1177,1179,1181,1183,1185,1188,1191,1193],{"class":207,"line":356},[205,1175,1176],{"class":756},"      if",[205,1178,788],{"class":763},[205,1180,791],{"class":749},[205,1182,538],{"class":211},[205,1184,796],{"class":749},[205,1186,1187],{"class":211}," >=",[205,1189,1190],{"class":231}," 500",[205,1192,804],{"class":763},[205,1194,212],{"class":211},[205,1196,1197,1200,1202,1205,1207,1210,1213,1216,1218,1220,1222,1225,1227],{"class":207,"line":373},[205,1198,1199],{"class":756},"        throw",[205,1201,894],{"class":211},[205,1203,1204],{"class":721}," Error",[205,1206,725],{"class":763},[205,1208,1209],{"class":211},"`",[205,1211,1212],{"class":253},"Server error: ",[205,1214,1215],{"class":211},"${",[205,1217,791],{"class":749},[205,1219,538],{"class":211},[205,1221,796],{"class":749},[205,1223,1224],{"class":211},"}`",[205,1226,738],{"class":763},[205,1228,774],{"class":211},[205,1230,1231],{"class":207,"line":964},[205,1232,1233],{"class":211},"      }\n",[205,1235,1236],{"class":207,"line":970},[205,1237,780],{"emptyLinePlaceholder":779},[205,1239,1240,1243,1245],{"class":207,"line":975},[205,1241,1242],{"class":756},"      return",[205,1244,750],{"class":749},[205,1246,774],{"class":211},[205,1248,1249,1252,1255,1257,1259,1261],{"class":207,"line":985},[205,1250,1251],{"class":211},"    }",[205,1253,1254],{"class":756}," catch",[205,1256,788],{"class":763},[205,1258,266],{"class":749},[205,1260,804],{"class":763},[205,1262,212],{"class":211},[205,1264,1266,1268,1270,1273,1275,1277,1280,1283,1285,1288,1291],{"class":207,"line":1265},13,[205,1267,1176],{"class":756},[205,1269,788],{"class":763},[205,1271,1272],{"class":749},"attempt",[205,1274,799],{"class":211},[205,1276,1083],{"class":749},[205,1278,1279],{"class":211}," -",[205,1281,1282],{"class":231}," 1",[205,1284,804],{"class":763},[205,1286,1287],{"class":756},"throw",[205,1289,1290],{"class":749}," error",[205,1292,774],{"class":211},[205,1294,1296],{"class":207,"line":1295},14,[205,1297,780],{"emptyLinePlaceholder":779},[205,1299,1301],{"class":207,"line":1300},15,[205,1302,1303],{"class":960},"      // Exponential backoff: 1s, 2s, 4s\n",[205,1305,1307,1309,1312,1314,1316,1319,1321,1323,1326,1328,1331,1333,1335,1337],{"class":207,"line":1306},16,[205,1308,1142],{"class":221},[205,1310,1311],{"class":749}," delay",[205,1313,753],{"class":211},[205,1315,868],{"class":231},[205,1317,1318],{"class":211}," *",[205,1320,918],{"class":749},[205,1322,538],{"class":211},[205,1324,1325],{"class":721},"pow",[205,1327,725],{"class":763},[205,1329,1330],{"class":231},"2",[205,1332,732],{"class":211},[205,1334,1105],{"class":749},[205,1336,738],{"class":763},[205,1338,774],{"class":211},[205,1340,1342,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1368],{"class":207,"line":1341},17,[205,1343,1344],{"class":756},"      await",[205,1346,894],{"class":211},[205,1348,898],{"class":897},[205,1350,725],{"class":763},[205,1352,903],{"class":728},[205,1354,906],{"class":221},[205,1356,909],{"class":721},[205,1358,725],{"class":763},[205,1360,903],{"class":749},[205,1362,732],{"class":211},[205,1364,1311],{"class":749},[205,1366,1367],{"class":763},"))",[205,1369,774],{"class":211},[205,1371,1373],{"class":207,"line":1372},18,[205,1374,1375],{"class":211},"    }\n",[205,1377,1379],{"class":207,"line":1378},19,[205,1380,967],{"class":211},[205,1382,1384],{"class":207,"line":1383},20,[205,1385,284],{"class":211},[205,1387,1389],{"class":207,"line":1388},21,[205,1390,780],{"emptyLinePlaceholder":779},[205,1392,1394],{"class":207,"line":1393},22,[205,1395,1396],{"class":960},"// Использование\n",[205,1398,1400,1403,1406,1409,1411,1413],{"class":207,"line":1399},23,[205,1401,1402],{"class":221},"const",[205,1404,1405],{"class":749}," response ",[205,1407,1408],{"class":211},"=",[205,1410,757],{"class":756},[205,1412,1070],{"class":721},[205,1414,1415],{"class":749},"(\n",[205,1417,1419,1422,1425,1427],{"class":207,"line":1418},24,[205,1420,1421],{"class":211},"  '",[205,1423,1424],{"class":253},"https://crm.rentix.md/api/v1/listings",[205,1426,833],{"class":211},[205,1428,235],{"class":211},[205,1430,1432],{"class":207,"line":1431},25,[205,1433,1434],{"class":211},"  {\n",[205,1436,1438,1441,1443,1446,1449,1451],{"class":207,"line":1437},26,[205,1439,1440],{"class":763},"    method",[205,1442,228],{"class":211},[205,1444,1445],{"class":211}," '",[205,1447,1448],{"class":253},"PUT",[205,1450,833],{"class":211},[205,1452,235],{"class":211},[205,1454,1456,1459,1461,1464,1466,1469,1471,1473,1475,1478,1480],{"class":207,"line":1455},27,[205,1457,1458],{"class":763},"    headers",[205,1460,228],{"class":211},[205,1462,1463],{"class":211}," {",[205,1465,1445],{"class":211},[205,1467,1468],{"class":763},"Authorization",[205,1470,833],{"class":211},[205,1472,228],{"class":211},[205,1474,1445],{"class":211},[205,1476,1477],{"class":253},"ApiKey YOUR_API_KEY",[205,1479,833],{"class":211},[205,1481,1482],{"class":211}," },\n",[205,1484,1486,1489,1491,1494,1496,1499],{"class":207,"line":1485},28,[205,1487,1488],{"class":763},"    body",[205,1490,228],{"class":211},[205,1492,1493],{"class":749}," JSON",[205,1495,538],{"class":211},[205,1497,1498],{"class":721},"stringify",[205,1500,1501],{"class":749},"(data)\n",[205,1503,1505],{"class":207,"line":1504},29,[205,1506,967],{"class":211},[205,1508,1510,1512],{"class":207,"line":1509},30,[205,1511,738],{"class":749},[205,1513,774],{"class":211},[195,1515,1519],{"className":1516,"code":1517,"filename":1518,"language":1518,"meta":200,"style":200},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function fetchWithRetry($url, $options, $maxRetries = 3) {\n    for ($attempt = 0; $attempt \u003C $maxRetries; $attempt++) {\n        $ch = curl_init($url);\n        curl_setopt_array($ch, $options);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n\n        $response = curl_exec($ch);\n        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n        curl_close($ch);\n\n        if ($httpCode \u003C 500) {\n            return ['code' => $httpCode, 'body' => $response];\n        }\n\n        if ($attempt \u003C $maxRetries - 1) {\n            // Exponential backoff: 1s, 2s, 4s\n            sleep(pow(2, $attempt));\n        }\n    }\n\n    throw new Exception(\"Max retries exceeded\");\n}\n","php",[202,1520,1521,1526,1531,1536,1541,1546,1550,1555,1560,1565,1569,1574,1579,1584,1588,1593,1598,1603,1607,1611,1615,1620],{"__ignoreMap":200},[205,1522,1523],{"class":207,"line":208},[205,1524,1525],{},"function fetchWithRetry($url, $options, $maxRetries = 3) {\n",[205,1527,1528],{"class":207,"line":215},[205,1529,1530],{},"    for ($attempt = 0; $attempt \u003C $maxRetries; $attempt++) {\n",[205,1532,1533],{"class":207,"line":238},[205,1534,1535],{},"        $ch = curl_init($url);\n",[205,1537,1538],{"class":207,"line":261},[205,1539,1540],{},"        curl_setopt_array($ch, $options);\n",[205,1542,1543],{"class":207,"line":281},[205,1544,1545],{},"        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n",[205,1547,1548],{"class":207,"line":350},[205,1549,780],{"emptyLinePlaceholder":779},[205,1551,1552],{"class":207,"line":356},[205,1553,1554],{},"        $response = curl_exec($ch);\n",[205,1556,1557],{"class":207,"line":373},[205,1558,1559],{},"        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n",[205,1561,1562],{"class":207,"line":964},[205,1563,1564],{},"        curl_close($ch);\n",[205,1566,1567],{"class":207,"line":970},[205,1568,780],{"emptyLinePlaceholder":779},[205,1570,1571],{"class":207,"line":975},[205,1572,1573],{},"        if ($httpCode \u003C 500) {\n",[205,1575,1576],{"class":207,"line":985},[205,1577,1578],{},"            return ['code' => $httpCode, 'body' => $response];\n",[205,1580,1581],{"class":207,"line":1265},[205,1582,1583],{},"        }\n",[205,1585,1586],{"class":207,"line":1295},[205,1587,780],{"emptyLinePlaceholder":779},[205,1589,1590],{"class":207,"line":1300},[205,1591,1592],{},"        if ($attempt \u003C $maxRetries - 1) {\n",[205,1594,1595],{"class":207,"line":1306},[205,1596,1597],{},"            // Exponential backoff: 1s, 2s, 4s\n",[205,1599,1600],{"class":207,"line":1341},[205,1601,1602],{},"            sleep(pow(2, $attempt));\n",[205,1604,1605],{"class":207,"line":1372},[205,1606,1583],{},[205,1608,1609],{"class":207,"line":1378},[205,1610,1375],{},[205,1612,1613],{"class":207,"line":1383},[205,1614,780],{"emptyLinePlaceholder":779},[205,1616,1617],{"class":207,"line":1388},[205,1618,1619],{},"    throw new Exception(\"Max retries exceeded\");\n",[205,1621,1622],{"class":207,"line":1393},[205,1623,284],{},[1625,1626],"hr",{},[190,1628,1630],{"id":1629},"типичные-ошибки","Типичные ошибки",[524,1632,1634],{"id":1633},"аутентификация-400-401-403","Аутентификация (400, 401, 403)",[381,1636,1637,1650],{},[384,1638,1639],{},[387,1640,1641,1644,1647],{},[390,1642,1643],{},"Ошибка",[390,1645,1646],{},"Причина",[390,1648,1649],{},"Решение",[403,1651,1652,1671,1687,1700,1713],{},[387,1653,1654,1659,1668],{},[408,1655,1656],{},[202,1657,1658],{},"Multiple authentication methods provided",[408,1660,1661,1662,1664,1665],{},"Переданы оба заголовка ",[202,1663,1468],{}," и ",[202,1666,1667],{},"X-API-Key",[408,1669,1670],{},"Используйте только один заголовок аутентификации",[387,1672,1673,1678,1681],{},[408,1674,1675],{},[202,1676,1677],{},"API key is required",[408,1679,1680],{},"API ключ не предоставлен",[408,1682,1683,1684],{},"Добавьте заголовок ",[202,1685,1686],{},"Authorization: ApiKey YOUR_KEY",[387,1688,1689,1694,1697],{},[408,1690,1691],{},[202,1692,1693],{},"Invalid API key",[408,1695,1696],{},"API ключ неверен или отозван",[408,1698,1699],{},"Проверьте значение ключа",[387,1701,1702,1707,1710],{},[408,1703,1704],{},[202,1705,1706],{},"Agency is suspended",[408,1708,1709],{},"Аккаунт агентства приостановлен",[408,1711,1712],{},"Свяжитесь с поддержкой",[387,1714,1715,1720,1723],{},[408,1716,1717],{},[202,1718,1719],{},"CRM is not enabled for this agency",[408,1721,1722],{},"CRM доступ не подключен",[408,1724,1725],{},"Свяжитесь с поддержкой для подключения CRM",[524,1727,1729],{"id":1728},"объявления-400","Объявления (400)",[381,1731,1732,1742],{},[384,1733,1734],{},[387,1735,1736,1738,1740],{},[390,1737,1643],{},[390,1739,1646],{},[390,1741,1649],{},[403,1743,1744,1757,1777,1790,1803],{},[387,1745,1746,1751,1754],{},[408,1747,1748],{},[202,1749,1750],{},"Cannot provide both id and externalId",[408,1752,1753],{},"Передали оба идентификатора",[408,1755,1756],{},"Используйте один из них",[387,1758,1759,1764,1767],{},[408,1760,1761],{},[202,1762,1763],{},"Must provide id or externalId",[408,1765,1766],{},"Не передали идентификатор для обновления",[408,1768,1769,1770,1773,1774],{},"Добавьте ",[202,1771,1772],{},"id"," или ",[202,1775,1776],{},"externalId",[387,1778,1779,1784,1787],{},[408,1780,1781],{},[202,1782,1783],{},"External ID already linked",[408,1785,1786],{},"External ID занят другим объявлением",[408,1788,1789],{},"Используйте уникальный ID",[387,1791,1792,1797,1800],{},[408,1793,1794],{},[202,1795,1796],{},"Minimum 3 photos required",[408,1798,1799],{},"Для публикации нужны фото",[408,1801,1802],{},"Загрузите минимум 3 фото",[387,1804,1805,1810,1813],{},[408,1806,1807],{},[202,1808,1809],{},"Description too short",[408,1811,1812],{},"Описание меньше 40 символов",[408,1814,1815],{},"Добавьте больше текста",[524,1817,1819],{"id":1818},"медиафайлы-400","Медиафайлы (400)",[381,1821,1822,1832],{},[384,1823,1824],{},[387,1825,1826,1828,1830],{},[390,1827,1643],{},[390,1829,1646],{},[390,1831,1649],{},[403,1833,1834,1846,1859,1872],{},[387,1835,1836,1841,1844],{},[408,1837,1838],{},[202,1839,1840],{},"Duplicate external ID",[408,1842,1843],{},"External ID уже используется",[408,1845,1789],{},[387,1847,1848,1853,1856],{},[408,1849,1850],{},[202,1851,1852],{},"File not found",[408,1854,1855],{},"Файл не существует",[408,1857,1858],{},"Проверьте fileId или externalFileId",[387,1860,1861,1866,1869],{},[408,1862,1863],{},[202,1864,1865],{},"Invalid file type",[408,1867,1868],{},"Неподдерживаемый формат",[408,1870,1871],{},"Используйте JPEG, PNG, WebP или HEIC",[387,1873,1874,1879,1882],{},[408,1875,1876],{},[202,1877,1878],{},"Upload URL expired",[408,1880,1881],{},"Signed URL истёк (30 минут)",[408,1883,1884],{},"Запросите новый URL",[524,1886,1888],{"id":1887},"валидация-полей","Валидация полей",[381,1890,1891,1899],{},[384,1892,1893],{},[387,1894,1895,1897],{},[390,1896,392],{},[390,1898,398],{},[403,1900,1901,1911,1921,1931,1941,1951],{},[387,1902,1903,1908],{},[408,1904,1905],{},[202,1906,1907],{},"STRING_TOO_SHORT",[408,1909,1910],{},"Строка короче минимума",[387,1912,1913,1918],{},[408,1914,1915],{},[202,1916,1917],{},"STRING_TOO_LONG",[408,1919,1920],{},"Строка длиннее максимума",[387,1922,1923,1928],{},[408,1924,1925],{},[202,1926,1927],{},"NUMBER_TOO_SMALL",[408,1929,1930],{},"Число меньше минимума",[387,1932,1933,1938],{},[408,1934,1935],{},[202,1936,1937],{},"NUMBER_TOO_LARGE",[408,1939,1940],{},"Число больше максимума",[387,1942,1943,1948],{},[408,1944,1945],{},[202,1946,1947],{},"INVALID_ENUM_VALUE",[408,1949,1950],{},"Значение не из списка допустимых",[387,1952,1953,1958],{},[408,1954,1955],{},[202,1956,1957],{},"REQUIRED_FIELD",[408,1959,1960],{},"Обязательное поле не заполнено",[1625,1962],{},[190,1964,1966],{"id":1965},"пример-обработка-всех-случаев","Пример: обработка всех случаев",[195,1968,1970],{"className":705,"code":1969,"filename":707,"language":708,"meta":200,"style":200},"async function apiRequest(endpoint, data) {\n  const url = `https://crm.rentix.md/api/v1${endpoint}`;\n  const options = {\n    method: 'PUT',\n    headers: {\n      'Authorization': 'ApiKey YOUR_API_KEY',\n      'Content-Type': 'application/json'\n    },\n    body: JSON.stringify(data)\n  };\n\n  for (let attempt = 0; attempt \u003C 3; attempt++) {\n    const response = await fetch(url, options);\n\n    // Успех\n    if (response.ok) {\n      return response.json();\n    }\n\n    // Rate limit — ждём и повторяем\n    if (response.status === 429) {\n      const resetTime = response.headers.get('X-RateLimit-Reset');\n      const waitMs = (parseInt(resetTime) * 1000) - Date.now();\n      await new Promise(r => setTimeout(r, Math.max(waitMs, 1000)));\n      continue;\n    }\n\n    // Серверная ошибка — повторяем с backoff\n    if (response.status >= 500) {\n      await new Promise(r => setTimeout(r, 1000 * Math.pow(2, attempt)));\n      continue;\n    }\n\n    // Клиентская ошибка — не повторяем\n    const error = await response.json();\n    throw new Error(`API Error: ${JSON.stringify(error.message)}`);\n  }\n\n  throw new Error('Max retries exceeded');\n}\n",[202,1971,1972,1995,2018,2028,2042,2050,2069,2086,2091,2111,2116,2120,2152,2176,2180,2185,2203,2217,2221,2225,2230,2250,2280,2316,2356,2363,2367,2371,2376,2396,2440,2447,2452,2457,2463,2484,2524,2529,2534,2557],{"__ignoreMap":200},[205,1973,1974,1976,1978,1981,1983,1986,1988,1991,1993],{"class":207,"line":208},[205,1975,715],{"class":221},[205,1977,718],{"class":221},[205,1979,1980],{"class":721}," apiRequest",[205,1982,725],{"class":211},[205,1984,1985],{"class":728},"endpoint",[205,1987,732],{"class":211},[205,1989,1990],{"class":728}," data",[205,1992,738],{"class":211},[205,1994,741],{"class":211},[205,1996,1997,1999,2002,2004,2007,2010,2012,2014,2016],{"class":207,"line":215},[205,1998,746],{"class":221},[205,2000,2001],{"class":749}," url",[205,2003,753],{"class":211},[205,2005,2006],{"class":211}," `",[205,2008,2009],{"class":253},"https://crm.rentix.md/api/v1",[205,2011,1215],{"class":211},[205,2013,1985],{"class":749},[205,2015,1224],{"class":211},[205,2017,774],{"class":211},[205,2019,2020,2022,2024,2026],{"class":207,"line":238},[205,2021,746],{"class":221},[205,2023,735],{"class":749},[205,2025,753],{"class":211},[205,2027,741],{"class":211},[205,2029,2030,2032,2034,2036,2038,2040],{"class":207,"line":261},[205,2031,1440],{"class":763},[205,2033,228],{"class":211},[205,2035,1445],{"class":211},[205,2037,1448],{"class":253},[205,2039,833],{"class":211},[205,2041,235],{"class":211},[205,2043,2044,2046,2048],{"class":207,"line":281},[205,2045,1458],{"class":763},[205,2047,228],{"class":211},[205,2049,741],{"class":211},[205,2051,2052,2055,2057,2059,2061,2063,2065,2067],{"class":207,"line":350},[205,2053,2054],{"class":211},"      '",[205,2056,1468],{"class":763},[205,2058,833],{"class":211},[205,2060,228],{"class":211},[205,2062,1445],{"class":211},[205,2064,1477],{"class":253},[205,2066,833],{"class":211},[205,2068,235],{"class":211},[205,2070,2071,2073,2075,2077,2079,2081,2083],{"class":207,"line":356},[205,2072,2054],{"class":211},[205,2074,527],{"class":763},[205,2076,833],{"class":211},[205,2078,228],{"class":211},[205,2080,1445],{"class":211},[205,2082,477],{"class":253},[205,2084,2085],{"class":211},"'\n",[205,2087,2088],{"class":207,"line":373},[205,2089,2090],{"class":211},"    },\n",[205,2092,2093,2095,2097,2099,2101,2103,2105,2108],{"class":207,"line":964},[205,2094,1488],{"class":763},[205,2096,228],{"class":211},[205,2098,1493],{"class":749},[205,2100,538],{"class":211},[205,2102,1498],{"class":721},[205,2104,725],{"class":763},[205,2106,2107],{"class":749},"data",[205,2109,2110],{"class":763},")\n",[205,2112,2113],{"class":207,"line":970},[205,2114,2115],{"class":211},"  };\n",[205,2117,2118],{"class":207,"line":975},[205,2119,780],{"emptyLinePlaceholder":779},[205,2121,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150],{"class":207,"line":985},[205,2123,1097],{"class":756},[205,2125,788],{"class":763},[205,2127,1102],{"class":221},[205,2129,1105],{"class":749},[205,2131,753],{"class":211},[205,2133,1110],{"class":231},[205,2135,957],{"class":211},[205,2137,1105],{"class":749},[205,2139,1117],{"class":211},[205,2141,1088],{"class":231},[205,2143,957],{"class":211},[205,2145,1105],{"class":749},[205,2147,1126],{"class":211},[205,2149,804],{"class":763},[205,2151,212],{"class":211},[205,2153,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174],{"class":207,"line":1265},[205,2155,811],{"class":221},[205,2157,750],{"class":749},[205,2159,753],{"class":211},[205,2161,757],{"class":756},[205,2163,760],{"class":721},[205,2165,725],{"class":763},[205,2167,729],{"class":749},[205,2169,732],{"class":211},[205,2171,735],{"class":749},[205,2173,738],{"class":763},[205,2175,774],{"class":211},[205,2177,2178],{"class":207,"line":1295},[205,2179,780],{"emptyLinePlaceholder":779},[205,2181,2182],{"class":207,"line":1300},[205,2183,2184],{"class":960},"    // Успех\n",[205,2186,2187,2190,2192,2194,2196,2199,2201],{"class":207,"line":1306},[205,2188,2189],{"class":756},"    if",[205,2191,788],{"class":763},[205,2193,791],{"class":749},[205,2195,538],{"class":211},[205,2197,2198],{"class":749},"ok",[205,2200,804],{"class":763},[205,2202,212],{"class":211},[205,2204,2205,2207,2209,2211,2213,2215],{"class":207,"line":1341},[205,2206,1242],{"class":756},[205,2208,750],{"class":749},[205,2210,538],{"class":211},[205,2212,199],{"class":721},[205,2214,884],{"class":763},[205,2216,774],{"class":211},[205,2218,2219],{"class":207,"line":1372},[205,2220,1375],{"class":211},[205,2222,2223],{"class":207,"line":1378},[205,2224,780],{"emptyLinePlaceholder":779},[205,2226,2227],{"class":207,"line":1383},[205,2228,2229],{"class":960},"    // Rate limit — ждём и повторяем\n",[205,2231,2232,2234,2236,2238,2240,2242,2244,2246,2248],{"class":207,"line":1388},[205,2233,2189],{"class":756},[205,2235,788],{"class":763},[205,2237,791],{"class":749},[205,2239,538],{"class":211},[205,2241,796],{"class":749},[205,2243,799],{"class":211},[205,2245,674],{"class":231},[205,2247,804],{"class":763},[205,2249,212],{"class":211},[205,2251,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278],{"class":207,"line":1393},[205,2253,1142],{"class":221},[205,2255,814],{"class":749},[205,2257,753],{"class":211},[205,2259,750],{"class":749},[205,2261,538],{"class":211},[205,2263,823],{"class":749},[205,2265,538],{"class":211},[205,2267,828],{"class":721},[205,2269,725],{"class":763},[205,2271,833],{"class":211},[205,2273,642],{"class":253},[205,2275,833],{"class":211},[205,2277,738],{"class":763},[205,2279,774],{"class":211},[205,2281,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314],{"class":207,"line":1399},[205,2283,1142],{"class":221},[205,2285,848],{"class":749},[205,2287,753],{"class":211},[205,2289,788],{"class":763},[205,2291,855],{"class":721},[205,2293,725],{"class":763},[205,2295,860],{"class":749},[205,2297,804],{"class":763},[205,2299,865],{"class":211},[205,2301,868],{"class":231},[205,2303,804],{"class":763},[205,2305,873],{"class":211},[205,2307,876],{"class":749},[205,2309,538],{"class":211},[205,2311,881],{"class":721},[205,2313,884],{"class":763},[205,2315,774],{"class":211},[205,2317,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354],{"class":207,"line":1418},[205,2319,1344],{"class":756},[205,2321,894],{"class":211},[205,2323,898],{"class":897},[205,2325,725],{"class":763},[205,2327,903],{"class":728},[205,2329,906],{"class":221},[205,2331,909],{"class":721},[205,2333,725],{"class":763},[205,2335,903],{"class":749},[205,2337,732],{"class":211},[205,2339,918],{"class":749},[205,2341,538],{"class":211},[205,2343,923],{"class":721},[205,2345,725],{"class":763},[205,2347,928],{"class":749},[205,2349,732],{"class":211},[205,2351,868],{"class":231},[205,2353,935],{"class":763},[205,2355,774],{"class":211},[205,2357,2358,2361],{"class":207,"line":1431},[205,2359,2360],{"class":756},"      continue",[205,2362,774],{"class":211},[205,2364,2365],{"class":207,"line":1437},[205,2366,1375],{"class":211},[205,2368,2369],{"class":207,"line":1455},[205,2370,780],{"emptyLinePlaceholder":779},[205,2372,2373],{"class":207,"line":1485},[205,2374,2375],{"class":960},"    // Серверная ошибка — повторяем с backoff\n",[205,2377,2378,2380,2382,2384,2386,2388,2390,2392,2394],{"class":207,"line":1504},[205,2379,2189],{"class":756},[205,2381,788],{"class":763},[205,2383,791],{"class":749},[205,2385,538],{"class":211},[205,2387,796],{"class":749},[205,2389,1187],{"class":211},[205,2391,1190],{"class":231},[205,2393,804],{"class":763},[205,2395,212],{"class":211},[205,2397,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438],{"class":207,"line":1509},[205,2399,1344],{"class":756},[205,2401,894],{"class":211},[205,2403,898],{"class":897},[205,2405,725],{"class":763},[205,2407,903],{"class":728},[205,2409,906],{"class":221},[205,2411,909],{"class":721},[205,2413,725],{"class":763},[205,2415,903],{"class":749},[205,2417,732],{"class":211},[205,2419,868],{"class":231},[205,2421,1318],{"class":211},[205,2423,918],{"class":749},[205,2425,538],{"class":211},[205,2427,1325],{"class":721},[205,2429,725],{"class":763},[205,2431,1330],{"class":231},[205,2433,732],{"class":211},[205,2435,1105],{"class":749},[205,2437,935],{"class":763},[205,2439,774],{"class":211},[205,2441,2443,2445],{"class":207,"line":2442},31,[205,2444,2360],{"class":756},[205,2446,774],{"class":211},[205,2448,2450],{"class":207,"line":2449},32,[205,2451,1375],{"class":211},[205,2453,2455],{"class":207,"line":2454},33,[205,2456,780],{"emptyLinePlaceholder":779},[205,2458,2460],{"class":207,"line":2459},34,[205,2461,2462],{"class":960},"    // Клиентская ошибка — не повторяем\n",[205,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482],{"class":207,"line":2465},35,[205,2467,811],{"class":221},[205,2469,1290],{"class":749},[205,2471,753],{"class":211},[205,2473,757],{"class":756},[205,2475,750],{"class":749},[205,2477,538],{"class":211},[205,2479,199],{"class":721},[205,2481,884],{"class":763},[205,2483,774],{"class":211},[205,2485,2487,2490,2492,2494,2496,2498,2501,2503,2506,2508,2510,2513,2515,2518,2520,2522],{"class":207,"line":2486},36,[205,2488,2489],{"class":756},"    throw",[205,2491,894],{"class":211},[205,2493,1204],{"class":721},[205,2495,725],{"class":763},[205,2497,1209],{"class":211},[205,2499,2500],{"class":253},"API Error: ",[205,2502,1215],{"class":211},[205,2504,2505],{"class":749},"JSON",[205,2507,538],{"class":211},[205,2509,1498],{"class":721},[205,2511,2512],{"class":749},"(error",[205,2514,538],{"class":211},[205,2516,2517],{"class":749},"message)",[205,2519,1224],{"class":211},[205,2521,738],{"class":763},[205,2523,774],{"class":211},[205,2525,2527],{"class":207,"line":2526},37,[205,2528,967],{"class":211},[205,2530,2532],{"class":207,"line":2531},38,[205,2533,780],{"emptyLinePlaceholder":779},[205,2535,2537,2540,2542,2544,2546,2548,2551,2553,2555],{"class":207,"line":2536},39,[205,2538,2539],{"class":756},"  throw",[205,2541,894],{"class":211},[205,2543,1204],{"class":721},[205,2545,725],{"class":763},[205,2547,833],{"class":211},[205,2549,2550],{"class":253},"Max retries exceeded",[205,2552,833],{"class":211},[205,2554,738],{"class":763},[205,2556,774],{"class":211},[205,2558,2560],{"class":207,"line":2559},40,[205,2561,284],{"class":211},[190,2563,2565],{"id":2564},"рекомендации","Рекомендации",[2567,2568,2569,2582,2588,2594],"ol",{},[2570,2571,2572,2575,2576,2578,2579,2581],"li",{},[547,2573,2574],{},"Логируйте ошибки"," — сохраняйте ",[202,2577,222],{},", ",[202,2580,243],{}," и timestamp для диагностики",[2570,2583,2584,2587],{},[547,2585,2586],{},"Не игнорируйте 4xx"," — это ошибки в ваших данных, исправьте их",[2570,2589,2590,2593],{},[547,2591,2592],{},"Уважайте rate limits"," — при 429 всегда ждите указанное время",[2570,2595,2596,2599],{},[547,2597,2598],{},"Используйте exponential backoff"," — при 5xx не долбите сервер сразу",[2601,2602,2603],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":200,"searchDepth":215,"depth":215,"links":2605},[2606,2607,2608,2612,2616,2620,2626,2627],{"id":192,"depth":215,"text":193},{"id":378,"depth":215,"text":379},{"id":521,"depth":215,"text":522,"children":2609},[2610,2611],{"id":526,"depth":238,"text":527},{"id":541,"depth":238,"text":542},{"id":556,"depth":215,"text":557,"children":2613},[2614,2615],{"id":593,"depth":238,"text":594},{"id":648,"depth":238,"text":649},{"id":990,"depth":215,"text":991,"children":2617},[2618,2619],{"id":994,"depth":238,"text":995},{"id":1049,"depth":238,"text":1050},{"id":1629,"depth":215,"text":1630,"children":2621},[2622,2623,2624,2625],{"id":1633,"depth":238,"text":1634},{"id":1728,"depth":238,"text":1729},{"id":1818,"depth":238,"text":1819},{"id":1887,"depth":238,"text":1888},{"id":1965,"depth":215,"text":1966},{"id":2564,"depth":215,"text":2565},"HTTP-статусы, rate limiting, retry-стратегии и типичные ошибки","md",null,{},{"icon":153},{"title":150,"description":2628},"D62gImAWi_J4LwrBwHINGeP8ZqBTNAcvsc4TOSwubCA",[2636,2638],{"title":139,"path":140,"stem":141,"description":2637,"icon":142,"children":-1},"Актуальные курсы валют для расчёта цен",{"title":160,"path":156,"stem":157,"description":2639,"icon":161,"children":-1},"Changelog CRM API",1773784451475]