{"openapi":"3.1.0","info":{"title":"ADAM vendor ingest API","version":"1.0.0","description":"Push your product feed to ADAM. A new position reaches a review queue once; after it is linked, PATCH /v1/offers moves its price and stock with no review. The same offers contract also runs in reverse: see the offerFeedPull webhook, where ADAM fetches the identical payload from a URL you host, once a day."},"servers":[{"url":"https://ingest.adam.ua","description":"ingest service"}],"externalDocs":{"url":"https://adam.ua/docs/api","description":"Field-by-field guide"},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"The key issued in Settings → Integrations. Shown once at creation."}},"schemas":{"ProductItem":{"type":"object","required":["name","brand","category","unit","price","stock"],"additionalProperties":false,"properties":{"name":{"type":"string","maxLength":300,"description":"Тауардың сіздің жүйеңіздегі атауы. Қиылады, бос болмайды."},"brand":{"type":"string","maxLength":120,"description":"Санат ішінде матчер арқылы анықталады."},"category":{"type":"string","maxLength":120,"description":"Адами түрде. Төмендегі тізім бойынша анықталады."},"unit":{"type":"string","maxLength":40,"description":"Адами түрде: «шт», «шт.», «кг», «т», «канистр» — барлығы анықталады."},"price":{"type":"number","exclusiveMinimum":0,"description":"0-ден жоғары. Сан, жол емес; ондық бөлгіш — «.»."},"stock":{"type":"number","minimum":0,"description":"0 немесе одан көп. Нөл «қоймада жоқ» дегенді білдіреді, «белгісіз» емес."},"sku":{"type":"string","maxLength":100,"description":"Сіздің артикулыңыз. Схема бойынша міндетті емес, бірақ онсыз кейінгі PATCH-қа сүйенер нәрсе жоқ."},"warehouse":{"type":"string","maxLength":200,"description":"Сіздің қоймаларыңызбен салыстырылады — алдымен нақты атауы немесе қаласы, содан кейін осы мәнді қамтитын жалғыз қойма. Сәйкестік болмаса немесе мән мүлде берілмесе, жол әдепкі қоймаңызға түседі: жалғыз қоймаңыз немесе негізгі деп белгілегеніңіз. Екі үміткер — біз болжамайтын жалғыз жағдай: қойма қойылмайды, `warehouse_ambiguous` қайтарылады."},"moq":{"type":"number","exclusiveMinimum":0,"description":"0-ден жоғары. Әдепкі мәні 1."},"description":{"type":"string","maxLength":500,"description":"Еркін мәтін. Жол каталогқа жаңа тауар сұрауына айналғанда қолданылады."},"updated_at":{"type":"string","format":"date-time","description":"Позиция сіздің жүйеңізде соңғы рет қашан өзгерді. PATCH үшін тәртіп ережесін береді."}}},"OfferItem":{"type":"object","required":["sku"],"additionalProperties":false,"minProperties":2,"description":"sku plus at least one of price, stock, moq, discontinued. sku alone changes nothing and is rejected as no_change_requested.","properties":{"sku":{"type":"string","maxLength":100,"description":"Сіздің артикулыңыз, POST /v1/products-қа жіберілгенмен бірдей. Позицияны атаудың жалғыз жолы."},"price":{"type":"number","exclusiveMinimum":0,"description":"0-ден жоғары. Жібермесеңіз — баға өзгермейді."},"stock":{"type":"number","minimum":0,"description":"0 немесе одан көп. Нөл «қоймада жоқ» деп қояды және ұсынысты каталогта қалдырады."},"moq":{"type":"number","exclusiveMinimum":0,"description":"0-ден жоғары. Ең аз тапсырыс көлемі; өлшем бірлігі мұнда өзгермейді."},"discontinued":{"type":"boolean","description":"true ұсынысты сатудан алады, false қайтарады. Алу әрқашан өтеді; қайтару қабылданбауы мүмкін."},"updated_at":{"type":"string","format":"date-time","description":"Позиция сіздің жүйеңізде соңғы рет қашан өзгерді. Жіберсеңіз — кешіккен қайталау жаңа бағаны басып жаза алмайды; жібермесеңіз — соңғы келген сұраныс жеңеді. Сол уақыт және сол мәндер — no-op; сол уақыт басқа мәндермен — equal_timestamp_conflict."}}},"Rejection":{"type":"object","required":["index","reason"],"properties":{"index":{"type":"integer","minimum":0,"description":"Your own position in items."},"sku":{"type":["string","null"]},"reason":{"type":"string","enum":["required_field_missing","field_too_long","price_invalid","stock_invalid","moq_invalid","sku_duplicate_in_payload","updated_at_invalid","category_unresolved","unit_unresolved","wrong_endpoint","no_change_requested","discontinued_invalid","sku_unknown","sku_pending_catalog","sku_ambiguous","offer_missing","stale_update","equal_timestamp_conflict","relist_blocked","price_tiered"]},"field":{"type":"string"},"detail":{"type":"string"}}}}},"security":[{"apiKey":[]}],"paths":{"/v1/whoami":{"get":{"summary":"Confirm a key works","responses":{"200":{"description":"The key is live","content":{"application/json":{"schema":{"type":"object","properties":{"request_id":{"type":"string","format":"uuid"},"vendor_slug":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"server_time":{"type":"string","format":"date-time"}}}}}},"401":{"description":"No key, or a revoked one"}}}},"/v1/products":{"post":{"summary":"Send a product feed","description":"At most 5000 items per request, 30 requests per 10 minutes. The response carries the first 20 rejections plus rejected_total; fetch the rest from /v1/requests/{id}/rejections, which pages the first 1000 we store.","parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean"},"description":"Validate and report without writing anything."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":255},"description":"Required unless dry_run=true. A repeat returns the stored result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["items"],"additionalProperties":false,"properties":{"items":{"type":"array","minItems":1,"maxItems":5000,"items":{"$ref":"#/components/schemas/ProductItem"}}}},"example":{"items":[{"sku":"KRB-46","name":"Карбамід 46% гранульований","brand":"Sumykhimprom","category":"Добрива","unit":"кг","price":12.5,"stock":1000,"warehouse":"Київський склад","moq":100,"updated_at":"2026-08-24T14:02:31Z"}]}}}},"responses":{"200":{"description":"Same shape, for dry_run=true — nothing was written"},"202":{"description":"Accepted for processing","content":{"application/json":{"schema":{"type":"object","properties":{"request_id":{"type":"string","format":"uuid"},"job_id":{"type":["string","null"],"format":"uuid"},"accepted":{"type":"integer","minimum":0},"rejected":{"type":"array","items":{"$ref":"#/components/schemas/Rejection"}},"rejected_total":{"type":"integer","minimum":0}}},"example":{"request_id":"8f14e45f-ceea-467a-9c4c-1b0f0e5c9e2a","job_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","accepted":1198,"rejected":[{"index":42,"sku":"XYZ-1","reason":"category_unresolved","detail":"«Хімія» matches no category"},{"index":87,"sku":"KRB-99","reason":"required_field_missing","field":"brand"}],"rejected_total":2}}}},"400":{"description":"See the request-level reason codes"},"401":{"description":"No key, or a revoked one"},"403":{"description":"The key lacks products:write, or the vendor is inactive"},"409":{"description":"review_backlog — unreviewed rows are at the limit, or idempotency_key_reused"},"413":{"description":"The body exceeds 16777216 bytes"},"429":{"description":"rate_limited — carries Retry-After"}}}},"/v1/offers":{"patch":{"summary":"Update price and stock on positions already linked","description":"At most 5000 items per request, 30 requests per 60 seconds. No review queue: an item whose sku resolves to exactly one of your offers is applied immediately. not_published counts rows applied to offers a farmer cannot see — a draft stays a draft.","parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean"},"description":"Judge every item and report, without writing anything."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":255},"description":"Required unless dry_run=true. A repeat returns the stored result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["items"],"additionalProperties":false,"properties":{"items":{"type":"array","minItems":1,"maxItems":5000,"items":{"$ref":"#/components/schemas/OfferItem"}}}},"example":{"items":[{"sku":"KRB-46","price":12.9,"stock":840,"updated_at":"2026-08-25T09:00:00Z"},{"sku":"KAS-32","stock":0},{"sku":"OLD-01","discontinued":true}]}}}},"responses":{"200":{"description":"Same shape, for dry_run=true — nothing was written"},"202":{"description":"Applied","content":{"application/json":{"schema":{"type":"object","properties":{"request_id":{"type":"string","format":"uuid"},"applied":{"type":"integer","minimum":0},"unchanged":{"type":"integer","minimum":0,"description":"Items whose offer already held the values sent. Nothing was written and nothing is wrong — a retried identical batch reports these instead of rejections."},"not_published":{"type":"integer","minimum":0,"description":"Of the applied rows, how many sit on an offer a farmer cannot see."},"rejected":{"type":"array","items":{"$ref":"#/components/schemas/Rejection"}},"rejected_total":{"type":"integer","minimum":0}}},"example":{"request_id":"1c9d4b7e-3f60-4a21-8de5-7a2b6c0f9e11","applied":1198,"unchanged":613,"not_published":42,"rejected":[{"index":17,"sku":"ZIR-20","reason":"sku_ambiguous","detail":"7 of your offers carry this code: Зірочка Z-20, Зірочка Z-22, …"},{"index":63,"sku":"KRB-46","reason":"stale_update","detail":"last applied 2026-08-25T09:00:00+00"}],"rejected_total":2}}}},"400":{"description":"See the request-level reason codes"},"401":{"description":"No key, or a revoked one"},"403":{"description":"The key lacks offers:write, or the vendor is inactive"},"409":{"description":"idempotency_key_reused — this Idempotency-Key was used for a different body"},"413":{"description":"The body exceeds 16777216 bytes"},"429":{"description":"rate_limited — carries Retry-After. Dry runs are metered too, against their own count"}}}},"/v1/requests/{request_id}/rejections":{"get":{"summary":"Page through one request's rejections","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"One page, ordered by your own item index","content":{"application/json":{"schema":{"type":"object","properties":{"request_id":{"type":"string","format":"uuid"},"rejected_total":{"type":"integer","minimum":0},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1},"rejected":{"type":"array","items":{"$ref":"#/components/schemas/Rejection"}}}}}}},"401":{"description":"No key, or a revoked one"},"404":{"description":"No such request for this vendor"}}}}},"webhooks":{"offerFeedPull":{"get":{"summary":"ADAM fetches your offer feed once a day","description":"You host this; ADAM calls it. The response body is byte-for-byte the PATCH /v1/offers request body, and every offers reason code applies unchanged. Configure the URL, the hour, the time zone and the optional token in Settings → Integrations. This transport cannot create products: an article ADAM does not know is rejected sku_unknown, and new positions still go through POST /v1/products.","externalDocs":{"url":"https://adam.ua/docs/api","description":"Requirements in prose"},"parameters":[{"name":"Authorization","in":"header","required":false,"description":"Sent only when you store a token. Exactly `Bearer <token>`; the token is held encrypted and never reaches a log or a process argument.","schema":{"type":"string","pattern":"^Bearer .+$"}}],"responses":{"200":{"description":"The only status ADAM treats as a feed. 204, 206 and every 3xx are recorded as feed_http_error with the status you returned.","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","minItems":1,"maxItems":5000,"items":{"$ref":"#/components/schemas/OfferItem"}}}},"example":{"items":[{"sku":"KRB-46","price":12.9,"stock":840,"updated_at":"2026-08-25T09:00:00Z"},{"sku":"KAS-32","stock":0},{"sku":"OLD-01","discontinued":true}]}}}}},"x-adam-url-requirements":{"scheme":"https","port":443,"portNote":"443 or no port at all. ADAM pins the resolved address with `curl --resolve host:443:<address>`, and that pin covers the pair (host, port) — a URL on another port falls through to ordinary DNS at fetch time and defeats the pin, so it is refused when you save it.","host":"registrable hostname","hostNote":"No IP literals, and no hexadecimal, octal or integer form of one — a client reads those as an address and never resolves them.","tls":"certificate must be valid for that hostname","tlsNote":"The subject is verified, not only the chain and the expiry. A certificate issued for another name is refused.","redirects":0,"redirectsNote":"A 3xx is reported as feed_http_error. Serve the file at the URL you gave.","encoding":"UTF-8","encodingNote":"A body that is not valid UTF-8 is bad_encoding. Windows-1251 is the common mistake in exports from Ukrainian and Russian accounting systems.","maxBytes":16777216,"maxBytesNote":"Above this the fetch stops and the run is too_large.","timeoutSeconds":20,"timeoutNote":"Resolving the hostname has its own six-second budget before this one.","cacheNote":"Do not cache the feed for hours behind a CDN. ADAM fetches once a day, so a long Cache-Control max-age means it reads yesterday's file and your prices look stuck."},"x-adam-address-rule":"The address your hostname resolved to is recorded when you save. Every later fetch resolves again and connects only to an address your own DNS publishes for that hostname at that moment, preferring the recorded one when it is still among them. Moving hosting needs no action from you once DNS is updated. If every published address is private, loopback, carrier-NAT, link-local or reserved, the run stops with host_not_routable; if it publishes none, pin_unresolvable.","x-adam-schedule":"Once a day, at an hour from 00 to 23 in a time zone you choose, so 03:00 means 03:00 where your system runs and the summer-time switch is handled for you. Pick the hour by which the export is already written."}}},"x-adam-units":[{"unit":"piece","accepts":["шт","штука","штук","штуки","од","одиниця","pcs","pc","piece","unit"]},{"unit":"kg","accepts":["кг","кілограм","килограмм","кілограмів","kg"]},{"unit":"ton","accepts":["т","t","тонна","тонн","тонни","ton","tonne"]},{"unit":"liter","accepts":["л","l","літр","литр","літрів","liter","litre"]},{"unit":"bag","accepts":["мішок","мешок","мішків","bag"]},{"unit":"pack","accepts":["уп","пак","пачка","упаковка","паковання","pack"]},{"unit":"canister","accepts":["каністра","канистра","кан","canister"]},{"unit":"bottle","accepts":["пляшка","бутылка","флакон","bottle"]},{"unit":"set","accepts":["набір","набор","set"]},{"unit":"hectare","accepts":["га","гектар","гектарів","ha","hectare"]}],"x-adam-reason-codes":[{"code":"invalid_envelope","scope":"request","endpoints":["products","offers","feed"],"meaning":"Сұраныс денесі — items массиві бар объект емес."},{"code":"unknown_field","scope":"request","endpoints":["products","offers","feed"],"meaning":"Біз оқымайтын өріс. Үнсіз тастамай, қатені қайтарамыз — қоймағаныңызды қойдым деп ойламауыңыз үшін."},{"code":"idempotency_key_reused","scope":"request","endpoints":["products","offers","feed"],"meaning":"Бұл Idempotency-Key басқа денелі сұраныс үшін қолданылған. Жаңа кілт алыңыз — сақталған нәтиже осы сұранысқа емес, алдыңғысына тиесілі."},{"code":"no_items","scope":"request","endpoints":["products","offers","feed"],"meaning":"items бос."},{"code":"too_many_items","scope":"request","endpoints":["products","offers","feed"],"meaning":"Позициялар сұраныс шегінен көп. Кішірек бөліктермен жіберіңіз."},{"code":"required_field_missing","scope":"row","endpoints":["products","offers","feed"],"meaning":"`field` көрсетіледі — жоқ немесе бос міндетті өріс. PATCH /v1/offers-та бұл әрқашан sku."},{"code":"field_too_long","scope":"row","endpoints":["products","offers","feed"],"meaning":"`field` көрсетіледі. Әр өрістің шегі жоғарыдағы кестеде."},{"code":"price_invalid","scope":"row","endpoints":["products","offers","feed"],"meaning":"Сан емес немесе 0-ден жоғары емес."},{"code":"stock_invalid","scope":"row","endpoints":["products","offers","feed"],"meaning":"Сан емес немесе теріс. Нөл жарамды."},{"code":"moq_invalid","scope":"row","endpoints":["products","offers","feed"],"meaning":"Сан емес немесе 0-ден жоғары емес."},{"code":"sku_duplicate_in_payload","scope":"row","endpoints":["products","offers","feed"],"meaning":"Дәл осы артикул осы сұраныста бұрын кездеседі. Бірінші кездесуі жеңеді."},{"code":"updated_at_invalid","scope":"row","endpoints":["products","offers","feed"],"meaning":"RFC 3339 емес, мысалы 2026-08-24T14:02:31Z."},{"code":"review_backlog","scope":"request","endpoints":["products"],"meaning":"Тексерілмеген жолдарыңыз шекке жетті. Жаңасын жібермей тұрып тексеруді бітіріңіз."},{"code":"category_unresolved","scope":"row","endpoints":["products"],"meaning":"Мән slug-пен де, бүркеншік атпен де сәйкес келмейді."},{"code":"unit_unresolved","scope":"row","endpoints":["products"],"meaning":"Мән ешбір өлшем бірлігімен сәйкес келмейді."},{"code":"wrong_endpoint","scope":"row","endpoints":["products"],"meaning":"Сіз мұнда `discontinued` жібердіңіз. Сатудан алу және қайтару — PATCH /v1/offers."},{"code":"no_change_requested","scope":"row","endpoints":["offers","feed"],"meaning":"Тек sku, өзгертілетін өріссіз. Жалғыз timestamp — өзгеріс емес: price, stock, moq немесе discontinued жіберіңіз."},{"code":"discontinued_invalid","scope":"row","endpoints":["offers","feed"],"meaning":"Бар, бірақ логикалық емес. `\"yes\"` — true емес."},{"code":"sku_unknown","scope":"row","endpoints":["offers","feed"],"meaning":"Бұл код үшін белсенді байланыс жоқ. Позицияны POST /v1/products арқылы бір рет жіберіңіз — расталғаннан кейін PATCH әрқашан жұмыс істейді."},{"code":"sku_pending_catalog","scope":"row","endpoints":["offers","feed"],"meaning":"Бұл кодты сіз бұрын жібергенсіз, позиция біздің каталог тобын күтіп тұр. Қайта жібермеңіз — тауар жасалған бойда PATCH осы кодпен жұмыс істей бастайды."},{"code":"sku_ambiguous","scope":"row","endpoints":["offers","feed"],"meaning":"Бұл кодты сіздің бірнеше ұсынысыңыз алып жүр, сондықтан қай бағаны өзгертетіні белгісіз. `detail` тауарларды атайды. Оларға өз жүйеңізде әртүрлі код беріңіз."},{"code":"offer_missing","scope":"row","endpoints":["offers","feed"],"meaning":"Байланыс бар, бірақ оның ұсынысы жоғалған. Позицияны POST /v1/products арқылы қайта жіберіңіз."},{"code":"stale_update","scope":"row","endpoints":["offers","feed"],"meaning":"Сіздің updated_at соңғы қолданылғаннан ескі, сондықтан ештеңе өзгермеді. `detail` бізде сақталған уақытты береді."},{"code":"equal_timestamp_conflict","scope":"row","endpoints":["offers","feed"],"meaning":"Сіздің updated_at қолданылғанмен бірдей, бірақ мәндер өзге — қайсысы ағымдағы екенін анықтай алмаймыз және болжамай, қабылдамаймыз. updated_at-ты жылжытыңыз. Мәндер бірдей болса, позиция `unchanged`-ке кетеді және қате болмайды."},{"code":"relist_blocked","scope":"row","endpoints":["offers","feed"],"meaning":"`discontinued: false` жариялау тексерісімен қабылданбады. Сатудан алу әрқашан өтеді; қайтару толық ұсынысты және жариялау құқығын талап етеді. `detail` себебін береді."},{"code":"price_tiered","scope":"row","endpoints":["offers","feed"],"meaning":"Бұл ұсыныста көлемге қарай баға сатылары бар, оларды бір тұрақты баға алмастырмайды. Сатыларды кабинетте алып тастаңыз — әрі қарай позицияны API басқарады."},{"code":"bad_url","scope":"request","endpoints":["feed"],"meaning":"Сақталған URL енді жарамсыз. Оны қайта енгізіңіз."},{"code":"bad_pin","scope":"request","endpoints":["feed"],"meaning":"Сақталған мекенжайды оқу мүмкін болмады. Оны қайта тексеріп, ауыстыру үшін сақтаңыз."},{"code":"pin_unresolvable","scope":"request","endpoints":["feed"],"meaning":"Домен атауыңыз қазір мүлдем шешілмейді. DNS баптауларыңызды тексеріп, содан кейін мекенжайды қайта тексеріңіз."},{"code":"host_not_routable","scope":"request","endpoints":["feed"],"meaning":"Домен атауыңыз шешіледі, бірақ ол қазір жариялайтын барлық мекенжайлар — біз қосылмайтындар: жеке, loopback, carrier-NAT, link-local немесе резервтелген. Домен атауын жария мекенжайға бағыттаңыз."},{"code":"bad_auth","scope":"request","endpoints":["feed"],"meaning":"Сақталған токенді пайдалану мүмкін болмады. Оны қайта енгізіп, сақтаңыз."},{"code":"too_large","scope":"request","endpoints":["feed"],"meaning":"Жауап біз қабылдайтыннан үлкен. Оны бөліңіз немесе қажет емес өрістерді алып тастаңыз."},{"code":"timeout","scope":"request","endpoints":["feed"],"meaning":"Серверіңіз белгіленген уақытта жауап бермеді."},{"code":"fetch_failed","scope":"request","endpoints":["feed"],"meaning":"Серверіңізге қосылу мүмкін болмады."},{"code":"feed_http_error","scope":"request","endpoints":["feed"],"meaning":"Серверіңіз HTTP қатесімен жауап берді. 401 немесе 403 коды оның біздің токенді қабылдамағанын білдіреді."},{"code":"bad_encoding","scope":"request","endpoints":["feed"],"meaning":"Жауап жарамды UTF-8 емес. Файлды UTF-8 кодтауында беріңіз."},{"code":"malformed_json","scope":"request","endpoints":["feed"],"meaning":"Жауап жарамды JSON емес."},{"code":"payload_too_large","scope":"request","endpoints":["feed"],"meaning":"Баға файлыңыздың бір партиясы біз қолдана алатыннан тым үлкен болды. Қажет емес өрістерді алып тастаңыз немесе файлды бөліңіз."},{"code":"feed_not_found","scope":"request","endpoints":["feed"],"meaning":"Іске қосылу жүріп тұрған кезде параметрлер жоғалып кетті. Оларды қайта сақтаңыз; егер бұл қайталанса, қолдау көрсету қызметіне хабарласыңыз."},{"code":"lease_expired","scope":"request","endpoints":["feed"],"meaning":"Біз іске қосылуды бастап, аяқталмай тұрып үзуге мәжбүр болдық. Баға файлыңызда бәрі дұрыс — келесі жоспарланған іске қосылу қайта әрекеттенеді."},{"code":"lease_lost","scope":"request","endpoints":["feed"],"meaning":"Дәл осы тапсырманы қатарлас басқа іске қосылу алып кетті, сондықтан біз өзгерістерді кері қайтардық және ештеңе қолданылмады. Баға файлыңызда бәрі дұрыс — келесі жоспарланған іске қосылу қайта әрекеттенеді."},{"code":"internal_error","scope":"request","endpoints":["feed"],"meaning":"Деректерді қолдану кезінде біздің жағымызда бірдеңе бұзылды. Баға файлыңызда бәрі дұрыс — келесі жоспарланған іске қосылу қайта әрекеттенеді."},{"code":"lock_timeout","scope":"request","endpoints":["feed"],"meaning":"Деректерді қолдану кезінде біздің жағымызда бірдеңе бұзылды. Баға файлыңызда бәрі дұрыс — келесі жоспарланған іске қосылу қайта әрекеттенеді."},{"code":"statement_timeout","scope":"request","endpoints":["feed"],"meaning":"Деректерді қолдану кезінде біздің жағымызда бірдеңе бұзылды. Баға файлыңызда бәрі дұрыс — келесі жоспарланған іске қосылу қайта әрекеттенеді."}]}