Blog Google
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
[RU: интеграция Яндекс.Директ API v5 — кампании, ставки, отчёты, автостратегии, песочница] Yandex.Direct API v5 — JSON over HTTPS, OAuth Bearer + Client-Login for agencies…
$ npx skills add VKirill/claude-lane-stack --skill yandex-direct -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install VKirill/claude-lane-stack yandex-direct --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/VKirill/claude-lane-stack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/lane-stack/skills/yandex/yandex-direct .claude/skills/yandex-direct && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "yandex-direct" agent skill from https://github.com/VKirill/claude-lane-stack/tree/main/plugins/lane-stack/skills/yandex/yandex-direct into .claude/skills/yandex-direct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yandex-direct", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/VKirill/claude-lane-stack/tree/main/plugins/lane-stack/skills/yandex/yandex-directType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add VKirill/claude-lane-stack --skill yandex-direct -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install VKirill/claude-lane-stack yandex-direct --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VKirill/claude-lane-stack.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/lane-stack/skills/yandex/yandex-direct .agents/skills/yandex-direct && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "yandex-direct" agent skill from https://github.com/VKirill/claude-lane-stack/tree/main/plugins/lane-stack/skills/yandex/yandex-direct into .agents/skills/yandex-direct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yandex-direct", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add VKirill/claude-lane-stack --skill yandex-direct -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install VKirill/claude-lane-stack yandex-direct --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VKirill/claude-lane-stack.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/lane-stack/skills/yandex/yandex-direct .cursor/skills/yandex-direct && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "yandex-direct" agent skill from https://github.com/VKirill/claude-lane-stack/tree/main/plugins/lane-stack/skills/yandex/yandex-direct into .cursor/skills/yandex-direct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yandex-direct", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/VKirill/claude-lane-stack.git --path plugins/lane-stack/skills/yandex/yandex-direct--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add VKirill/claude-lane-stack --skill yandex-direct -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install VKirill/claude-lane-stack yandex-direct --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VKirill/claude-lane-stack.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/lane-stack/skills/yandex/yandex-direct .gemini/skills/yandex-direct && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "yandex-direct" agent skill from https://github.com/VKirill/claude-lane-stack/tree/main/plugins/lane-stack/skills/yandex/yandex-direct into .gemini/skills/yandex-direct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yandex-direct", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install VKirill/claude-lane-stack yandex-directInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add VKirill/claude-lane-stack --skill yandex-direct -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/VKirill/claude-lane-stack.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/lane-stack/skills/yandex/yandex-direct .github/skills/yandex-direct && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "yandex-direct" agent skill from https://github.com/VKirill/claude-lane-stack/tree/main/plugins/lane-stack/skills/yandex/yandex-direct into .github/skills/yandex-direct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yandex-direct", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add VKirill/claude-lane-stack --skill yandex-direct -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install VKirill/claude-lane-stack yandex-direct --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VKirill/claude-lane-stack.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/lane-stack/skills/yandex/yandex-direct .opencode/skills/yandex-direct && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "yandex-direct" agent skill from https://github.com/VKirill/claude-lane-stack/tree/main/plugins/lane-stack/skills/yandex/yandex-direct into .opencode/skills/yandex-direct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yandex-direct", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
yandex-direct[RU: интеграция Яндекс.Директ API v5 — кампании, ставки, отчёты, автостратегии, песочница] Yandex.Direct API v5 — JSON over HTTPS, OAuth Bearer + Client-Login for agencies…
Yandex Direct is an agent skill from VKirill/claude-lane-stack. [RU: интеграция Яндекс.Директ API v5 — кампании, ставки, отчёты, автостратегии, песочница] Yandex.Direct API v5 — JSON over HTTPS, OAuth Bearer + Client-Login for agencies, Campaigns/AdGroups/Ads/Keywords/Bids/KeywordBids/BidModifiers/Reports services, units-based daily quota, sandbox at api-sandbox.direct.yandex.com, TSV reports with processingMode online/offline/auto and 201/202 polling via Retry-After. Use when: yandex direct, яндекс директ, direct api v5, JSON-RPC, CampaignsService, AdsService, BidsService…
Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including reference files (for example `references/ads-and-keywords.md`, `references/bids.md` and `references/campaigns-and-adgroups.md`).
It sits in Marketing & SEO, covering Paid advertising, CSV and tabular files and Web scraping. It works with Google Ads. The repository describes itself as: Multi-agent AI coding factory for one person — Claude Code PM + Codex/Qwen/Grok/Kimi/AGY writers, durable conveyor, auto-merge to main. The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 45fa19e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
yandex.comapi.direct.yandex.comoauth.yandex.ruapi-sandbox.direct.yandex.comyandex.ruFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Yandex Direct loads about 5.8k tokens when it runs, and up to ~31k if it reads all its reference files. Until then it costs about 213 tokens; SKILL.md has 2,541 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
d `Client-Login` in every sink. Store in .env / secret manager.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from VKirill/claude-lane-stack at commit 45fa19e, republished under its MIT licence (© VKirill). 2,541 words, ~5,804 tokens.
.claude/skills/yandex-direct/SKILL.md (or your agent's skills folder). This skill also uses 11 other files; get the full folder from GitHub.<!-- versions:start -->
Primary pins:
v5 (stable, JSON over HTTPS; api.direct.yandex.com/json/v5/{service})api-sandbox.direct.yandex.com/json/v5/{service}3.14.x24.x (Active LTS)Verify against current Yandex Direct release notes before production use.
<!-- versions:end -->
Loaded automatically when its description matches the active task. Read the section you need, then follow the link to the relevant reference file for full detail.
CampaignsServiceBidsService / KeywordBidsServiceKeywordsService; tracking Status / State transitions (DRAFT/MODERATION/ACCEPTED/REJECTED)AdsService): TextAd, DynamicTextAd, MobileAppAd, ImageAd, CpcVideoAd, SmartAdBuilderAdprocessingMode (online/offline/auto), 201/202 polling honoring Retry-AfterClient-Login per client, spending agency units via Use-Operator-Units: trueapi-sandbox.direct.yandex.com without burning real budgetsyandex-metrica (cascade marker)xmlstock (cascade marker)mutagen (cascade marker)google-ads cascadevk-ads / mytarget cascadeYandex.Direct API v5 is the official programmatic interface to Yandex's paid search and display platform. It manages campaigns (Search / Network / Master of Campaigns / Unified Performance / Dynamic / Smart banners / Mobile app / CPC Video / CPM Banner), ad groups, ads of all types, keywords and targetings, bids (manual and auto-strategies), reports (TSV), dictionaries, budget forecasts, and XML import/export.
This skill is high-stakes because:
AdsService.add and BidsService.set start serving and consume client money. A misplaced zero in MaxCpc = hundreds of thousands of rubles burned in an hour. Every write requires a sandbox dry-run plus explicit confirmation of magnitudes.error 153 (UnitsLimitExceeded) and the batch ends up in an inconsistent state. Estimate cost before each batch; parse Units: consumed/remaining/daily-limit from every response.Client-Login is mandatory for agencies. Forget it and the call runs against the agency's own account instead of the client's → auth error or, worse, silent change to the wrong account. Enforce in middleware and assert on Units-Used-Login in responses.AddResults / UpdateResults may contain a mix of Id and Errors per item. A 200 OK does not mean the batch fully succeeded — iterate per element.processingMode=offline returns HTTP 201 (queued) or 202 (forming); polling must respect Retry-After. Ignoring it → 429 / IP or account throttling. Maximum 5 parallel reports.add with the same body creates a duplicate. Maintain client-side dedup by business key (name + parent id) or a unique external index on returned Id.error_code 1002 / 506. Refresh logic and an "auth degraded" sentinel are required.SelectionCriteria.Ids accepts up to 10 000; more → error 17. Chunk client-side.suspend ≠ archive. Suspend pauses (reversible); archive is terminal and locks editing. Confusing them = losing the ability to mutate the object.This skill owns Direct-domain knowledge: endpoints, headers, units economy, Reports lifecycle, agency access modeling, error semantics, sandbox testing. HTTP plumbing lives in httpx / nodejs; storage in postgresql.
Yandex Direct requires a Yandex ID OAuth token per user (advertiser or agency). Tokens are issued via the standard OAuth flow on oauth.yandex.ru or a manual debug token from the app page. For agencies: one token per agency + the Client-Login: <client-login> header selects the target account. Use-Operator-Units: true charges the agency's units rather than the client's. Without Client-Login, an agency token operates only on the agency account itself.
Full reference: references/setup.md
Body is JSON: {"method": "<action>", "params": {...}}. Endpoint: POST https://api.direct.yandex.com/json/v5/<service> (or the sandbox host). Required headers: Authorization: Bearer <token>, Client-Login (agencies), Content-Type: application/json; charset=utf-8. Optional: Accept-Language: ru|en (message language), Use-Operator-Units: true, Accept-Encoding: gzip. Response headers: RequestId (for support), Units: <consumed>/<remaining>/<daily-limit>, Units-Used-Login (which account paid). Accept-Encoding: gzip is critical for large get responses and TSV reports.
Full reference: references/envelope-and-headers.md
CampaignsService exposes get, add, update, delete, suspend, resume, archive, unarchive. Status (DRAFT, MODERATION, ACCEPTED, REJECTED) is moderation state; State (CONVERTED, ARCHIVED, SUSPENDED, ENDED, OFF, ON) is operational state. Types: TEXT_CAMPAIGN, UNIFIED_CAMPAIGN, DYNAMIC_TEXT_CAMPAIGN, MOBILE_APP_CAMPAIGN, CPM_BANNER_CAMPAIGN, SMART_CAMPAIGN, CPM_VIDEO_CAMPAIGN. AdGroupsService: get/add/update/delete with RegionIds, NegativeKeywords, TrackingParams. Prefer archive over delete for objects with stats.
Full reference: references/campaigns-and-adgroups.md
AdsService: get, add, update, delete, archive, unarchive, moderate, resume, suspend. Ad types live under exactly one of TextAd, MobileAppAd, DynamicTextAd, ImageAd, CpcVideoAdBuilderAd, SmartAdBuilderAd, CpmBannerAdBuilderAd. After add an ad is Status=DRAFT — moderate pushes it to MODERATION → ACCEPTED / REJECTED / PREACCEPTED. KeywordsService: get/add/update/delete/resume/suspend. Negative keywords apply at Campaign (NegativeKeywords), AdGroup, and Keyword level. Operators: !, +, [], "", -, (a|b).
Full reference: references/ads-and-keywords.md
BidsService: set, get, setAuto. KeywordBidsService is the current entry point for per-keyword bids. Auto-strategies: WB_MAXIMUM_CLICKS, WB_MAXIMUM_CONVERSION_RATE, AVERAGE_CPC, AVERAGE_CPA, WEEKLY_CLICK_PACKAGE, AVERAGE_ROI, PAY_FOR_CONVERSION, HIGHEST_POSITION, SERVING_OFF. Manual bids: SearchBid (search), NetworkBid (Network / RSYA), ContextCoverage (% of network reach). BidModifiersService adjusts by audience, geo, demographics, devices, time. All money fields are in micro-currency (divide by 1 000 000 for rubles).
Full reference: references/bids.md
Dedicated endpoint: POST /json/v5/reports. Body: {"params": {"SelectionCriteria": {...}, "FieldNames": [...], "ReportName": "...", "ReportType": "CAMPAIGN_PERFORMANCE_REPORT|AD_PERFORMANCE_REPORT|...", "DateRangeType": "LAST_WEEK|CUSTOM_DATE|...", "Format": "TSV", "IncludeVAT": "YES|NO"}}. The processingMode header chooses online (sync up to 5 minutes), offline (queued, HTTP 201/202 + Retry-After), or auto. Set returnMoneyInMicros: false for rubles; skipReportHeader / skipColumnHeader / skipReportSummary: true for clean parsing. Polling: on 201/202, sleep Retry-After, repeat the identical POST until 200/error. Maximum 5 parallel reports.
Full reference: references/stats-tsv.md
Common codes: 1 (InternalError), 2 (InvalidArgument), 8 (Forbidden), 9 (NotAllowedYet), 12 (ServiceTemporarilyUnavailable → retry), 17 (BadRequest), 52 (NoRights), 53 (AuthenticationError), 54 (InvalidLogin), 56 (NotFound), 58 (LimitReached), 152 (PreconditionFailed), 153 (UnitsLimitExceeded), 506 (TokenRevoked), 1000–1003 (auth-domain), 5000–9999 (service-specific). Partial errors in batches: HTTP 200 but result.AddResults[i].Errors[] per item. Warnings[] are non-blocking but must be logged.
Full reference: references/errors.md
Each method consumes units from a per-account daily limit. New apps start around 3 000–5 000 units/day; the limit grows with sustained usage. get is cheap (~1–40 units); add / update / delete is more expensive (~10–30 per call plus per-element cost). Reports enqueue costs ~10–20 units; polling and final download are free. Sandbox units are a separate wallet. Read the Units header after every response; throttle writes when remaining / daily_limit < 0.2.
Full reference: references/limits-and-units.md
Sandbox host: api-sandbox.direct.yandex.com. Same OAuth token (Yandex ID is unified) but a separated, isolated tier. No UI — API only. Data is deleted after 1 month of inactivity. Reports in sandbox: one campaign per report; stats are synthetic. Use it for: request/response shape validation, error-path drills, polling behavior. Production-only checks: real moderation, real spend, bid adjustments against live audiences.
Full reference: references/setup.md
Bootstrap OAuth → sandbox smoke → JSON envelope → Campaigns lifecycle → AdGroups / Ads / Keywords flow → Bids (manual / auto) → Reports submit + poll + persist → idempotent daily ETL.
Full reference: references/workflow.md
Auth, campaigns, ad groups, ads, keywords, bids, reports polling lifecycle, wordstat via Direct, agency clients, error handling, and migration from v0.4 (wordstat_keywords replacement).
Full reference: references/cookbook.md
| Service | Endpoint suffix | Common methods |
|---|---|---|
agencyclients | /json/v5/agencyclients | get, add, update |
campaigns | /json/v5/campaigns | get, add, update, delete, suspend, resume, archive, unarchive |
adgroups | /json/v5/adgroups | get, add, update, delete |
ads | /json/v5/ads | get, add, update, delete, archive, unarchive, moderate, resume, suspend |
keywords | /json/v5/keywords | get, add, update, delete, resume, suspend |
bids | /json/v5/bids | set, setAuto, get |
bidmodifiers | /json/v5/bidmodifiers | set, get, delete |
keywordbids | /json/v5/keywordbids | get, set, setAuto |
audiencetargets | /json/v5/audiencetargets | get, add, delete, resume, suspend |
retargetinglists | /json/v5/retargetinglists | get, add, update, delete |
sitelinks | /json/v5/sitelinks | get, add, delete |
vcards | /json/v5/vcards | get, add, delete |
dictionaries | /json/v5/dictionaries | get (regions, currencies, metrics) |
changes | /json/v5/changes | check, checkDictionaries, checkCampaigns |
reports | /json/v5/reports | TSV reports with processingMode |
clients | /json/v5/clients | get, update |
dynamictextadtargets | /json/v5/dynamictextadtargets | get, add, delete, suspend, resume |
feeds | /json/v5/feeds | get, add, update, delete |
negativekeywordsharedsets | /json/v5/negativekeywordsharedsets | get, add, update, delete |
| Header | Required | Purpose |
|---|---|---|
Authorization: Bearer <token> | always | Yandex ID OAuth token |
Client-Login: <login> | agencies | Target client account |
Accept-Language: ru|en | optional | Language of messages and errors |
Use-Operator-Units: true | optional, agency only | Charge agency units, not client |
Content-Type: application/json; charset=utf-8 | POST | Required for JSON body |
Accept-Encoding: gzip | optional | Compression — critical for large reads |
| Header | Meaning |
|---|---|
RequestId | Unique request id, log for support |
Units | <consumed>/<remaining>/<daily-limit> |
Units-Used-Login | Account whose balance was charged |
Retry-After | (Reports) seconds before next poll on 201/202 |
| Code | Name | Retry? | Action |
|---|---|---|---|
| 1 | InternalError | maybe (1–2x) | Backoff; if persistent, share RequestId with support |
| 2 | InvalidArgument | no | Inspect request body |
| 8 | Forbidden | no | Wrong rights, check OAuth scope and role |
| 9 | NotAllowedYet | maybe | Resource not ready; retry later |
| 12 | ServiceTemporarilyUnavailable | yes | Exponential backoff |
| 17 | BadRequest | no | Check >10 000 IDs / field format |
| 52 | NoRights | no | Insufficient OAuth scope |
| 53 | AuthenticationError | no | Token broken / expired |
| 54 | InvalidLogin | no | Client-Login invalid |
| 56 | NotFound | no | Object does not exist |
| 58 | LimitReached | no (until reset) | Account-level limit |
| 152 | PreconditionFailed | no | Object state forbids the action |
| 153 | UnitsLimitExceeded | no (until reset) | Suspend writes until daily reset |
| 506 | TokenRevoked | no | Refresh OAuth |
| 1000–1003 | Auth domain | no | Re-issue token |
| HTTP | Meaning | Action |
|---|---|---|
| 200 OK | TSV body ready | Parse, persist |
| 201 Created | Queued | Wait Retry-After, repeat identical POST |
| 202 Accepted | Forming | Same as 201 |
| 400 Bad Request | Param error | Inspect JSON error, do not retry |
| 500 Internal | Server error | Backoff |
| 502/503/504 | Transient | Backoff |
Client-Login in agency context — the call mutates the agency account or returns error 54. Fix: middleware enforcement + assert on Units-Used-Login.Units header — a 1 000-item update batch burns the daily limit and the second half fails with 153. Fix: parse Units every response; pause writes when remaining / daily_limit < 0.2.AddResults / UpdateResults carry per-item errors. Fix: always iterate and log Errors[] per item, retry only failed ones.Retry-After — IP / account throttling. Fix: respect Retry-After, +10% jitter, max 5 parallel reports.delete instead of archive on campaigns with stats — data is lost. Fix: archive-first policy; delete only for drafts.BASE_URL. Fix: separate configs, explicit env prefix in logs.MaxCpc in rubles instead of micro-currency — 100 becomes 100 micro-rubles (no impressions) or 100_000_000 becomes 100 rubles × 1M (instant burn). Fix: convert at the boundary, never in business logic.SelectionCriteria.Ids → error 17. Fix: chunk to 10 000.suspend halts impressions instantly — propagation can take minutes. Fix: combine with bid floor for critical stops.DIRECT_HOST.error 506 (token revoked) — all subsequent calls fail. Fix: catch + refresh + "auth degraded" sentinel.Client-Login operated on the agency's own account. Check Units-Used-Login in logs.MaxCpc sent in wrong units (rubles vs. micro × 1M). Suspend the campaign immediately and re-read the last Bids.set payload.processingMode: online with a 5-minute server-side cutoff. Switch to offline.error 153 mid-batch" → units exhausted. Do not retry the rest of the batch; save the cursor and resume after 00:00 UTC reset.Bids.get returns shifting values between runs → someone is editing in the UI in parallel. Add audit log and a write lock on the app side.error 1002 / 506 → user revoked the token. Stop the loop before hitting rate limits.api-sandbox.direct.yandex.com before flipping to production.get, inspect shape, then add/update/delete. Never write blindly.add. Returned Id stored with a unique index.RequestId and Units per call. Support cannot help without RequestId.Retry-After.Direct controls real ad spend; idempotency by ClientID is non-negotiable. When a write call fails on network or timeout, do not blindly resend add / update. The first request may have reached Direct and changed state already; a blind retry will:
add retry);Bids.set retry on an already-set value if relative semantics are used);Resolution before retry:
direct_idempotency. If direct_id is present, the previous call succeeded — skip.get filtered by that business key. If the object exists in Direct, store the Id and skip.add.For update / set, use absolute values (e.g. SearchBid: 5_000_000, never "+10%"). Absolute payloads are idempotent under repeated retries.
add of dozens of campaigns or Bids.set over thousands of keywords first runs on 1–2 elements.Authorization and Client-Login in every sink. Store in .env / secret manager.Retry-After. Ignoring it → 429 / IP block.delete requires explicit confirmation. For campaigns / groups with statistics, archive is the default.error 153 (units exhausted), suspend writes until daily reset (00:00 UTC).Use-Operator-Units: true only from agency accounts. From an advertiser account → rights error.direct:api must be requested at app issuance. Without it every request fails 52 / 506.yandex-metrica — web analytics, goals, ecommerce reports (conversion source for bid optimization)xmlstock — SERP / position parsing (knowing where the site sits in results)mutagen — Wordstat frequency and competition (keyword sourcing)google-ads cascade — Google Ads API (cross-platform context)vk-ads / mytarget cascade — VKontakte targeted advertisinghttpx, nodejs — HTTP plumbingpostgresql, redis — persistence (idempotency keys, reports archive, dedup)bullmq — queue for Reports polling and retry| Resource | URL |
|---|---|
| Production endpoint | https://api.direct.yandex.com/json/v5/{service} |
| Sandbox endpoint | https://api-sandbox.direct.yandex.com/json/v5/{service} |
| Reports endpoint | https://api.direct.yandex.com/json/v5/reports |
| OAuth authorize | https://oauth.yandex.ru/authorize |
| OAuth token | https://oauth.yandex.ru/token |
| Official docs (EN) | https://yandex.com/dev/direct/doc/en/ |
| Official docs (RU) | https://yandex.ru/dev/direct/doc/ru/ |
| Result codes (EN) | https://yandex.com/dev/direct/doc/en/concepts/result-codes |
| Sandbox docs | https://yandex.com/dev/direct/doc/en/concepts/sandbox |
| Reports spec | https://yandex.com/dev/direct/doc/en/reports/spec |
| Units / limits | https://yandex.com/dev/direct/doc/en/concepts/limits |
© VKirill, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 11 other files (references) in plugins/lane-stack/skills/yandex/yandex-direct of VKirill/claude-lane-stack.
Open the folder on GitHubat commit 45fa19e
Yandex Direct next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Yandex Direct this skillVKirill/claude-lane-stack | 122 | — | ~5.8k | Automated safety check: Notes | MIT | |
| Blog GoogleAgriciDaniel/claude-blog | 2.3k | 1 repos | ~3.3k | Automated safety check: Notes | MIT | |
| Youtube Channel Operatorswyxio/skills | 176 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Google Ad Scrapergooseworks-ai/goose-skills | 1.2k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Apify Ads Intelligenceapify/awesome-skills | 266 | — | ~4.2k | Automated safety check: Notes | Apache-2.0 | |
| AdsCesarjoquin/Marketing-Skills | 202 | 1 repos | ~3.5k | Automated safety check: Pass | MIT |
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
swyxio/skills
Design, build, review, or extend a production YouTube channel operator that combines complete typed YouTube Data, Analytics, Reporting, and Live API access with guided Slack or chatbot workflows…
gooseworks-ai/goose-skills
Scrape competitor ads from Google Ads by domain. An agent skill from gooseworks-ai/goose-skills.
apify/awesome-skills
Research, spy on, and analyze ads across Meta (Facebook & Instagram), Google (Ads Transparency Center + paid search results), TikTok (Ads Library + Creative Center), LinkedIn Ad Library, and X…
Cesarjoquin/Marketing-Skills
When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms.
coreyhaines31/marketingskills
When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms.
VKirill/claude-lane-stack
Lane-stack design + brand intelligence (vendored ui-ux-pro-max).
VKirill/claude-lane-stack
Owner-facing architect for a new app or service. An agent skill from VKirill/claude-lane-stack.
VKirill/claude-lane-stack
Live browser QA + Playwright-compatible replay. An agent skill from VKirill/claude-lane-stack.
VKirill/claude-lane-stack
Карта файлов копирайта в .agents/copy/: шаблоны, статусы, цепочка audience→headlines→ux.
VKirill/claude-lane-stack
Dispatch copy-lead helpers: Tavily, Codex luna/terra, grok/X, OpenCode DeepSeek, Cursor Grok 4.6 medium-fast.
VKirill/claude-lane-stack
Keep living docs/ honest after code changes. An agent skill from VKirill/claude-lane-stack.
Works with
Categories
[RU: интеграция Яндекс.Директ API v5 — кампании, ставки, отчёты, автостратегии, песочница] Yandex.Direct API v5 — JSON over HTTPS, OAuth Bearer + Client-Login for agencies…. Yandex Direct is an agent skill from VKirill/claude-lane-stack.com, TSV reports with processingMode online/offline/auto and 201/202 polling via Retry-After.
Yandex Direct fits situations like: : yandex direct; campaignsService; Агентский кабинет; WBMAXIMUMCLICKS.
Run `npx skills add VKirill/claude-lane-stack --skill yandex-direct -a claude-code`. Or copy the skill folder (plugins/lane-stack/skills/yandex/yandex-direct in VKirill/claude-lane-stack) into .claude/skills/yandex-direct in your project. Claude Code loads it when a task matches its description.
Run `npx skills add VKirill/claude-lane-stack --skill yandex-direct -a codex`. Or copy the skill folder (plugins/lane-stack/skills/yandex/yandex-direct in VKirill/claude-lane-stack) into .agents/skills/yandex-direct in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add VKirill/claude-lane-stack --skill yandex-direct -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/yandex-direct, .gemini/skills/yandex-direct, .github/skills/yandex-direct and .opencode/skills/yandex-direct in your project.
SKILL.md names no scripts, command-line tools or credentials: Yandex Direct is instructions for the agent only. Our summary lists: Python 3; Node.js.
SKILL.md names 5 domains. In commands or code: yandex.com, api.direct.yandex.com, oauth.yandex.ru, api-sandbox.direct.yandex.com and yandex.ru; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Yandex Direct is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.8k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 25k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Yandex Direct: Blog Google (AgriciDaniel/claude-blog, 2.3k stars), Youtube Channel Operator (swyxio/skills, 176 stars), Google Ad Scraper (gooseworks-ai/goose-skills, 1.2k stars) and Apify Ads Intelligence (apify/awesome-skills, 266 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
VKirill (a GitHub user) maintains it in VKirill/claude-lane-stack, which has 122 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 9, 2026.
Source: VKirill/claude-lane-stack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.