Skip to content
Back to skills

Yandex Direct

ASecurity

[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, AdsSe...

  • 121 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 3, 2026
ai-agentspythongosqlnodenodejstestingapiperformance

Works with

  • cursor
  • terminal
  • cli
  • api

Security analysis

A100/100

Pro scans all 12 files and shows the line behind each finding

Scanned September 3, 2026

npx -y skills add VKirill/claude-lane-stack --skill yandex-direct --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Yandex Direct?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Yandex Direct
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vkirill-yandex-direct/badge)](https://www.skillsdirectory.com/skills/vkirill-yandex-direct)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: yandex-direct
description: "[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, Reports TSV, units, sandbox, песочница, Client-Login, agency, агентский кабинет, auto bidding, автостратегии, WB_MAXIMUM_CLICKS, PAY_FOR_CONVERSION, поисковые/РСЯ, micro-currency. SKIP: web analytics (→yandex-metrica); SERP scraping (→xmlstock); Wordstat (→mutagen); Google Ads (→google-ads); myTarget/VK Ads (→vk-ads)."
stacks:
  - yandex-direct
  - ru-ads
  - python
  - nodejs
tags:
  - ads
  - ppc
  - ru
  - yandex
  - direct
  - json-rpc
  - oauth
source: vechkasov-global-skills
risk: high-stakes
---

<!-- versions:start -->

## Version Requirements

**Primary pins:**
- Yandex Direct API: `v5 (stable, JSON over HTTPS; api.direct.yandex.com/json/v5/{service})`
- Sandbox: `api-sandbox.direct.yandex.com/json/v5/{service}`
- Python: `3.14.x`
- Node.js: `24.x (Active LTS)`

> Verify against current Yandex Direct release notes before production use.

<!-- versions:end -->

## Usage

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.

## Use this skill when

- Programmatic campaign management in Yandex.Direct: create, update, suspend, archive via `CampaignsService`
- Bulk bid updates and strategy switching via `BidsService` / `KeywordBidsService`
- Loading keywords with negatives and operators via `KeywordsService`; tracking `Status` / `State` transitions (DRAFT/MODERATION/ACCEPTED/REJECTED)
- Creating and moderating ads (`AdsService`): TextAd, DynamicTextAd, MobileAppAd, ImageAd, CpcVideoAd, SmartAdBuilderAd
- Pulling statistics through the **Reports API** (TSV) with `processingMode` (online/offline/auto), 201/202 polling honoring `Retry-After`
- Working from an agency account: passing `Client-Login` per client, spending agency units via `Use-Operator-Units: true`
- Testing integration in the **sandbox** at `api-sandbox.direct.yandex.com` without burning real budgets
- Building your own client / connector (Python httpx, Node.js fetch) with units accounting, retry on 5xx/transient codes, manual idempotency
- Integrating into CRM/dashboard: pull account structure, adjust CPC from conversion signals, sync negative keywords

## Do not use this skill when

- Web traffic analytics and goals from the site → `yandex-metrica` (cascade marker)
- SERP scraping, position tracking, snippet parsing → `xmlstock` (cascade marker)
- Wordstat frequency and keyword competition → `mutagen` (cascade marker)
- Google Ads / Google Ads API (different platform, different auction model) → `google-ads` cascade
- myTarget / VK Ads / VKontakte advertising → `vk-ads` / `mytarget` cascade
- Static on-site ad blocks, direct sales without auction
- Plain stats viewing through UI — Direct API is only needed for automation and scale

## Purpose

Yandex.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:

1. **Every write call spends real budget.** `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.
2. **Units economy.** Each method costs units from a per-account daily limit. Overrun → `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.
3. **`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.
4. **Partial errors in batch operations.** `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.
5. **Reports API has its own lifecycle.** `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.
6. **Sandbox ≠ production data.** Sandbox campaigns are not shown to real users; stats are synthetic. Sandbox is still the right place to validate request structure and error handling without spending money.
7. **No built-in idempotency.** Repeating `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`.
8. **Token revocation.** OAuth tokens can be revoked by the user — every request then fails with `error_code 1002` / `506`. Refresh logic and an "auth degraded" sentinel are required.
9. **10 000 IDs per selection.** `SelectionCriteria.Ids` accepts up to 10 000; more → `error 17`. Chunk client-side.
10. **`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`.

## Capabilities

### OAuth 2.0 and Client-Login for agencies

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](references/setup.md)

### JSON envelope and required headers

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](references/envelope-and-headers.md)

### Campaign and ad-group lifecycle — states, archive, suspend/resume

`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](references/campaigns-and-adgroups.md)

### Ads and keywords — moderation and states

`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](references/ads-and-keywords.md)

### Bids — manual, auto-strategies, search vs network split

`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](references/bids.md)

### Reports API — TSV lifecycle with polling

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](references/stats-tsv.md)

### Error codes — billing semantics, retry, partial errors

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](references/errors.md)

### Units economy — what costs what

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](references/limits-and-units.md)

### Sandbox vs production

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](references/setup.md)

### End-to-end workflow (bootstrap → ETL)

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](references/workflow.md)

### Cookbook — 28 ready-to-use recipes

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](references/cookbook.md)

## Quick reference

### Services

| 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 |

### HTTP headers

| 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 |

### Response headers

| 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 |

### Result codes (key subset)

| 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 |

### Reports HTTP codes

| 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 |

## Common mistakes

- **Missing `Client-Login` in agency context** — the call mutates the agency account or returns `error 54`. Fix: middleware enforcement + assert on `Units-Used-Login`.
- **Not reading the `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`.
- **Treating HTTP 200 as full batch success** — `AddResults` / `UpdateResults` carry per-item errors. Fix: always iterate and log `Errors[]` per item, retry only failed ones.
- **Polling reports faster than `Retry-After`** — IP / account throttling. Fix: respect `Retry-After`, +10% jitter, max 5 parallel reports.
- **Changing the body between report polls** — every change is a new job, fresh units burned. Fix: dump and reuse the exact same payload.
- **`delete` instead of `archive`** on campaigns with stats — data is lost. Fix: archive-first policy; `delete` only for drafts.
- **Mixing sandbox and production endpoints** — the same OAuth token works on both, so it's easy to misconfigure `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.
- **>10 000 IDs in `SelectionCriteria.Ids`** → `error 17`. Fix: chunk to 10 000.
- **Assuming `suspend` halts impressions instantly** — propagation can take minutes. Fix: combine with bid floor for critical stops.
- **Production token in sandbox calls** — works, but logs get muddled. Fix: explicit env flag on `DIRECT_HOST`.
- **Ignoring `error 506` (token revoked)** — all subsequent calls fail. Fix: catch + refresh + "auth degraded" sentinel.

## Red flags — STOP and verify

- "A campaign changed but I did not start anything" → agency token without `Client-Login` operated on the agency's own account. Check `Units-Used-Login` in logs.
- "Money is burning unexpectedly" → `MaxCpc` sent in wrong units (rubles vs. micro × 1M). Suspend the campaign immediately and re-read the last `Bids.set` payload.
- "Reports polling looped forever" → likely `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.
- Mass `error 1002` / `506` → user revoked the token. Stop the loop before hitting rate limits.

## Behavioral traits

- **Sandbox first.** Any new integration or large change passes through `api-sandbox.direct.yandex.com` before flipping to production.
- **Read-only first.** Always `get`, inspect shape, then `add`/`update`/`delete`. Never write blindly.
- **Manual idempotency.** Business key (Name + parent id, or hash) checked before `add`. Returned `Id` stored with a unique index.
- **Logs `RequestId` and `Units` per call.** Support cannot help without `RequestId`.
- **Money in micro-units.** All read/write of money fields multiplies/divides by 1 000 000 at one explicit boundary.
- **Partial errors are normal.** Loop over result arrays, split success/failed, retry only failed.
- **Reports off the main thread.** Polling in a background worker respecting `Retry-After`.

## Important constraints

### Money-side double-spend trap

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:

- create a duplicate campaign (`add` retry);
- apply a bid change twice (`Bids.set` retry on an already-set value if relative semantics are used);
- re-submit moderation that already succeeded.

Resolution before retry:

1. Look up the business key in `direct_idempotency`. If `direct_id` is present, the previous call succeeded — skip.
2. Otherwise call `get` filtered by that business key. If the object exists in Direct, store the `Id` and skip.
3. Only when neither side has a record → safe to retry `add`.

For `update` / `set`, use **absolute values** (e.g. `SearchBid: 5_000_000`, never "+10%"). Absolute payloads are idempotent under repeated retries.

### Operational constraints

- **Production writes only after a sandbox dry-run** and explicit confirmation of magnitudes. Any `add` of dozens of campaigns or `Bids.set` over thousands of keywords first runs on 1–2 elements.
- **Never log tokens or logins.** Redact `Authorization` and `Client-Login` in every sink. Store in .env / secret manager.
- **Maximum 5 parallel reports** per account. Otherwise reports are blocked and the account hits rate limits.
- **Honor `Retry-After`.** Ignoring it → 429 / IP block.
- **`delete` requires explicit confirmation.** For campaigns / groups with statistics, `archive` is the default.
- **On `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.
- **Sandbox data expires after 1 month of inactivity.** Do not use it as a persistent test fixture.
- **OAuth scope `direct:api`** must be requested at app issuance. Without it every request fails 52 / 506.

## Related skills

- `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 advertising
- `httpx`, `nodejs` — HTTP plumbing
- `postgresql`, `redis` — persistence (idempotency keys, reports archive, dedup)
- `bullmq` — queue for Reports polling and retry

## API reference

| 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` |

Files in this skill

  • SKILL.md23 KB
  • references/ads-and-keywords.md5.4 KB
  • references/bids.md5.3 KB
  • references/campaigns-and-adgroups.md9.5 KB
  • references/cookbook.md19.7 KB
  • references/envelope-and-headers.md4.5 KB
  • references/errors.md7.1 KB
  • references/integration.md16.9 KB
  • references/limits-and-units.md5 KB
  • references/setup.md5.1 KB
  • references/stats-tsv.md6.2 KB
  • references/workflow.md13.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…