Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
AVITO_ADS_API_BASENoAPI root override (replaces the environment prefix too).https://api.avito.ru/ads/
AVITO_ADS_CLIENT_IDYesOAuth2 client id (Client Key) of your Avito application.
AVITO_ADS_ACCOUNT_IDYesAd account id, a positive integer. Injected into every path.
AVITO_ADS_TIMEOUT_MSNoPer-request timeout, ms (covers reading the body).30000
AVITO_ADS_ENVIRONMENTNoproduction or sandbox.production
AVITO_ADS_MAX_RETRIESNoRetries on 429; on 5xx/network for reads only.4
AVITO_ADS_CLIENT_SECRETYesOAuth2 client secret. Treat as a password.
AVITO_ADS_TOKEN_LEEWAY_SECONDSNoRefresh the access token this long before it expires.60

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_accountA

Returns the legal details of the ad account this server is bound to: inn, kpp, ogrn, shortName, longName, legalAddress, actualAddress and the contact / manager blocks. Takes no arguments — the account is fixed by AVITO_ADS_ACCOUNT_ID and cannot be chosen per call. Carries no money figures (use get_balance) and no campaign data. Like every tool here, the result also reports apiPointBalance: the API points left this week (the quota refills Mondays 00:00 UTC).

get_balanceA

Returns the current balance of the configured ad account in rubles: balance (real money) and bonusBalance (bonus rubles, spendable on ads only). Takes no arguments. It is a snapshot of right now, not a history — for money spent over a period use the statistics tools. Does not top the account up.

create_sandbox_accountA

SANDBOX ONLY: creates a test advertiser account and returns its accountID. This server refuses the call unless AVITO_ADS_ENVIRONMENT=sandbox, and the refusal costs no API point. contact must be a non-empty object, e.g. {"name":"Ivan Ivanov","email":"ivan@example.com","phone":"+79001234567"} — an empty one is rejected before any request goes out. Calling twice creates two accounts. It cannot edit or delete an account, and the server keeps working against AVITO_ADS_ACCOUNT_ID: the new id is not adopted, put it in the config to use it.

list_child_accountsA

Lists the child (sub-)accounts of the configured agency account. Each entry is {account:{id,shortName}, contract}. Balances are NOT included — use list_child_accounts_with_balances for those. Returns every child in one call: no paging, no filter, no search. apiPointBalance in every result of this server is the API points left for the current week (the quota refills Mondays 00:00 UTC); pace the calls by it.

list_child_accounts_with_balancesA

Same list as list_child_accounts, plus each child's balance: {balance, bonusBalance} in rubles and bonus rubles. Use it to see which child is out of money before transfer_funds / transfer_bonus, and to verify a transfer landed. Shows the children's balances only — the parent's own balance comes from get_balance.

create_child_accountA

Creates a non-payer child account under the configured agency account and returns {accountID, clientKey, clientSecret} — the new account's own API credentials, handed out only here, so store them immediately. Non-payer means the child cannot top up its own balance: fund it with transfer_funds from the parent. Cannot create a payer account, cannot rename or delete one, and cannot re-read the secret later. Calling it twice creates two accounts.

transfer_fundsA

Moves REAL MONEY out of the configured account into another account (normally one of its children): amount rubles, minimum 1. Not reversible through this API — there is no undo, no cancel and no transfer log; the only way back is a second transfer in the other direction, which needs the destination account to be able to send funds. A success returns an empty data object: treat any non-error response as done and never repeat the call. After a network or server error the outcome is unknown — check list_child_accounts_with_balances before retrying, or the money moves twice.

transfer_bonusA

Moves bonus rubles (the bonusBalance — promotional funds that buy ads but cannot be withdrawn as cash) out of the configured account into another account: amount bonus rubles, minimum 1. Same rules as transfer_funds: not reversible through this API, an empty data object means it went through, and after a network or server error check list_child_accounts_with_balances instead of repeating the call. It moves bonuses only — real money goes through transfer_funds.

create_advertiserA

Registers an advertiser (an ORD counterparty) under the account and returns {id} plus apiPointBalance (weekly API points left). The id is what campaigns and contracts reference. Legal details must match the state register: inn (10 digits for ul, 12 for ip), ogrn, and both addresses; kpp applies to companies (ul) only. legalRole marks the ORD role — rd (advertiser), ra (agency), rr (distributor). There is no edit or delete endpoint: a wrong advertiser can only be superseded by creating another one, so check list_advertisers for an existing record first.

list_advertisersA

Returns one page of advertisers registered under the account: {total, items, page, limit, hasNextPage} plus apiPointBalance (weekly API points left). Each item carries id, shortName, longName, inn, ogrn, kpp, legalAddress, actualAddress, legalType (ul|ip) and legalRole (rd|ra|rr). Narrow the page with filter.ids / filter.inns / filter.roles; there is no free-text search, so match on names yourself. limit is 1..100 (default 20); page is 1-based.

create_contractA

Registers an ORD contract between the account and an advertiser and returns {id} plus apiPointBalance (weekly API points left). Which fields are mandatory depends on type: service needs subject, isReportingRequired, date and number (cid is rejected); intermediary needs all of those plus object and isFundsAllocationToPrincipal (cid is rejected); external needs cid only (parentId is rejected). Pass the contractor's legal details in intermediary — required unless parentId is set; with parentId the record is an additional agreement to that contract and must omit intermediary. There is no edit or delete endpoint, so a wrong contract stays on the account forever.

list_contractsA

Returns one page of contracts registered under the account: {total, items, page, limit, hasNextPage} plus apiPointBalance (weekly API points left). Each item carries id, type, number, date, subject, object (the contract action), cid, description (the counterparty type), parentId (set on additional agreements) and the client/contractor legal details. Narrow the page with filter.ids / filter.numbers / filter.clients (advertiser ids) / filter.contractors. limit is 1..100 (default 20); page is 1-based.

list_campaignsA

Lists the account's ad campaigns, one page at a time. Returns {total, items, page, limit, hasNextPage} plus apiPointBalance — the weekly API points left, which refill Mondays 00:00 UTC. Each campaign carries id, name, status, budget (rubles), paymentModel (CPM/CPC), campaignType, startDate/endDate, advertiserId, contractId, managerID and timestamps. All filter fields are AND-ed and each list keeps only the values it names. This API cannot create, edit, pause, resume, archive or delete a campaign and cannot touch its targeting — the only writes available anywhere are change_group_budget and change_group_price on an ad group.

list_groupsA

Lists the account's ad groups, one page at a time. Returns {total, items, page, limit, hasNextPage} plus apiPointBalance (weekly API points left). The group is the level that holds the money: each item carries id, name, campaignID, status, budget and price (the bid) in rubles, paymentModel, campaignType, advertiserID, haveCreative and timestamps. Use change_group_budget / change_group_price to change those two numbers — they are the only writable fields in the whole ad object tree. Groups cannot be created, renamed, paused, resumed or deleted here, and their targeting is not exposed.

list_creativesA

Lists the account's creatives — the ads themselves — one page at a time. Returns {total, items, page, limit, hasNextPage} plus apiPointBalance (weekly API points left). Each creative carries id, name, title, description, buttonText, link, status, groupID, campaignID, advertiserID, paymentModel, campaignType and legalInfo (the ad-registry/ERID data). Read-only: creatives cannot be uploaded, edited, sent to moderation, paused or deleted through this API — only ad-group budget and bid are writable.

change_group_budgetA

Sets one ad group's budget to the given amount in rubles (at least 1). The value replaces the current budget rather than adding to it, so repeating the call is safe. Only groups on manual bid management accept it; the API rejects the rest. Returns the API's acknowledgement plus apiPointBalance. It cannot change the campaign budget, the bid (use change_group_price), or the group's status — this API cannot pause, resume or delete a group at all. Read the current budget with list_groups first.

change_group_priceA

Sets one ad group's bid (the API calls it price) to the given amount in rubles (at least 1). The unit follows the group's paymentModel: rubles per 1000 impressions for CPM, rubles per click for CPC. The value replaces the current bid rather than adding to it, so repeating the call is safe. Only groups on manual bid management accept it. Returns the API's acknowledgement plus apiPointBalance. It cannot change the budget (use change_group_budget) or the group's status — this API cannot pause, resume or delete a group at all. Read the current bid from the price field of list_groups.

campaign_statsA

Statistics for ONE campaign over a date range, with its per-group and per-creative breakdowns: {campaign, groups[], creatives[]}. Every entity carries data[] (one row per day, stamped with timestamp) and totalData (the period aggregate). Metrics per row: views (impressions), clicks, ctr, spend, spendBonus, cpm, cpc, plus videoViews25/50/75/100, q25/q50/q75 and vtr for video campaigns; money is in rubles, rates pass through unchanged. The period is inclusive, YYYY-MM-DD, and must span at most 100 days. Cannot aggregate across campaigns and has no sub-day granularity; get campaignId from list_campaigns. Costs weekly API points; the reply's apiPointBalance is what is left until the quota refills Monday 00:00 UTC, so prefer one wide period over many narrow calls.

group_statsA

Per-group statistics for the groups you name in one campaign: a flat array with one entry per ad group ({id, name, paymentModel, campaignType, data[] per day, totalData for the period}). Same metrics as campaign_stats — views (impressions), clicks, ctr, spend, spendBonus, cpm, cpc, video quartiles, vtr — with money in rubles. groupIds is required: this tool narrows, it does not enumerate. The period is inclusive, YYYY-MM-DD, and must span at most 100 days. Returns no campaign-level totals; for every group of a campaign call campaign_stats, which carries the same breakdown. Costs weekly API points; the reply's apiPointBalance is what is left until the quota refills Monday 00:00 UTC, so prefer one wide period over many narrow calls.

creative_statsA

Per-creative statistics for the creatives you name in one campaign: a flat array with one entry per creative ({id, name, groupId, paymentModel, campaignType, data[] per day, totalData for the period}). Same metrics as campaign_stats — views (impressions), clicks, ctr, spend, spendBonus, cpm, cpc, video quartiles, vtr — with money in rubles. creativeIds is required: this tool narrows, it does not enumerate. The period is inclusive, YYYY-MM-DD, and must span at most 100 days. Returns no campaign-level totals; for every creative of a campaign call campaign_stats, which carries the same breakdown. Costs weekly API points; the reply's apiPointBalance is what is left until the quota refills Monday 00:00 UTC, so prefer one wide period over many narrow calls.

list_usersA

Lists the users with access to the ad account — one {id, role, hasLoggedIn} per user, where role is admin or viewer and hasLoggedIn says whether the invited person has ever signed in. Use the ids with set_user_role and delete_user. Scoped to the configured account: it cannot list the users of a child account. Returns apiPointBalance alongside the data (weekly points left).

add_userA

Grants an existing Avito user access to the ad account with the given role. userId is that person's numeric Avito user id — this tool cannot invite by email or phone, and cannot create an Avito account. If the user already has access, change their role with set_user_role instead. Returns the API's confirmation plus apiPointBalance.

set_user_roleA

Changes the role of a user who already has access to the ad account. Applying the role a user already holds is a no-op. It does not grant access (use add_user) and does not revoke it (use delete_user). Returns the API's confirmation plus apiPointBalance.

delete_userA

Revokes a user's access to the ad account. Destructive: the only way back is add_user with an explicit role. It does not delete the person's Avito account, their campaigns or their spend history. Returns the API's confirmation plus apiPointBalance.

raw_requestA

Escape hatch to call any Avito Ads API path directly, for endpoints without a dedicated tool — e.g. GET "v1/account/{accountID}/balance" or POST "v1/account/{accountID}/campaigns". Paths are relative to the API base and account-scoped; the literal {accountID} placeholder is replaced with the configured account id, a path naming a different account is refused, and so is one that escapes the API base. body is sent as JSON. It can reach every write endpoint — funds-transfer, bonus-transfer, delete-user and the create-* endpoints — with none of the client-side validation the dedicated tools apply, and nothing here is reversible; prefer transfer_funds / delete_user / create_* when they exist. confirmWrite=true is your explicit acknowledgement that the path may write, so check the path before setting it — POST is also used for harmless list and statistics reads, which need the flag too. GET runs freely. Returns the raw response plus apiPointBalance (weekly points left).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/A1-x-Tech/mcp-avito-ads'

If you have feedback or need assistance with the MCP directory API, please join our Discord server