---
title: "Create"
method: POST
path: "/web/reports"
tags: ["web: отчёты"]
---

# Create

`POST /web/reports`

## Request

- Base URL: `https://tgmarket.io` (the document declares no server; this is the origin it was published from)
- URL: `https://tgmarket.io/web/reports`
- Auth: none declared

Бесплатный черновик: генерация в фоне → ready (замаскирован до оплаты) или failed.

## Request body

- DraftIn
  - `type` string, required
  - `profile` Profile, required
    - `niche` string
    - `audience` string
    - `goals` string[]
    - `keywords` string[]
    - `competitors` string[]
    - `cities` string[]
    - `brands` string[]
    - `region_words` string[]
    - `own_channel` string, nullable
    - `posts` string[]
    - `post_costs` object
    - `post_terms` object
    - `budget_usd` integer, nullable
    - `wishes` string
    - `geo_strict` boolean
    - `placement_topics` string[]
    - `placement_category_ids` integer[]
    - `topic_keywords` string[]
    - `topic_category_ids` integer[]
    - `kpi_usd` number, nullable
    - `conversion_pct` number, nullable
    - `query` ChannelQuery
      - `q` string, nullable: text: title, username, description, posts
      - `q_any` string[]: any of these words or phrases (OR), e.g. synonyms in several languages; combined with q by AND
      - `category_ids` integer[]
      - `exclude_category_ids` integer[]: exclude categories (e.g. 18+)
      - `channel_ids` integer[]: specific channels (collection export)
      - `languages` string[]
      - `countries` string[]: channel geo: ISO 3166-1 alpha-2 country codes, e.g. IN, US, DE
      - `regions` string[]: channel geo: regions as "<country>:<region>", e.g. "US:Texas" (codes from GET /v1/geo). A region narrows only its own country: countries=[IN, US] + regions=[US:Texas] → all of India and Texas
      - `exclude_countries` string[]: exclude channels of these countries (ISO 3166-1 alpha-2)
      - `exclude_languages` string[]: exclude channels in these languages (ISO 639-1)
      - `kind` 'all' | 'channel' | 'group'
      - `subscribers_min` integer, nullable
      - `subscribers_max` integer, nullable
      - `avg_views_min` number, nullable
      - `reach_24h_min` number, nullable
      - `er_min` number, nullable
      - `err_24h_min` number, nullable
      - `growth_7d_min` integer, nullable
      - `growth_30d_min` integer, nullable
      - `growth_pct_30d_min` number, nullable
      - `posts_30d_min` integer, nullable
      - `chat_mau_min` integer, nullable: active commenters in the discussion chat, 30d
      - `daily_reach_min` integer, nullable: estimated daily reach: 24h views of a day's posts, summed
      - `reach_48h_min` integer, nullable: average views of a post at 48 hours, 30 days
      - `premium_share_min` number, nullable: Telegram Premium share among discussion authors, %, estimate (≥ 50 authors)
      - `female_share_min` number, nullable: female share among discussion authors with a recognised first name, %, estimate
      - `female_share_max` number, nullable
      - `last_post_after` string, date, nullable
      - `created_after` string, date, nullable
      - `created_before` string, date, nullable
      - `has_ads_contact` boolean, nullable
      - `ad_share_max` number, nullable
      - `fraud_max` number, nullable
      - `verified_only` boolean
      - `exclude_scam` boolean
      - `rkn_listed` boolean, nullable: RKN registry of personal pages (Russia): only listed / only not listed
      - `exclude_ru_restricted` boolean: exclude Russian foreign agents, undesirable organizations and extremist materials lists
      - `stars_paid` boolean: audience pays: Telegram Stars reactions in the last 30 days
      - `no_negative` boolean: negative emoji (👎🤬🤡💩🖕😡🤮) under 10% of reactions, 30 days; channels without enough reactions are excluded
      - `ad_accepted` boolean: audience accepts ads: ad posts get ≥ 70% of a regular post's reactions per view and ≥ 80% of its views, 90 days
      - `sort` 'relevance' | 'subscribers' | 'growth_7d' | 'growth_30d' | 'growth_pct_30d' | 'reach_24h' | 'avg_views' | 'er' | 'citation_index' | 'created_at' | 'last_post_at' | 'chat_mau' | 'daily_reach' | 'reach_48h' | 'premium_share'
      - `order` 'desc' | 'asc'
  - `brief_text` string
  - `lang` string
  - `terms_version` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-20** `15aba68e1fef`: 5 info
  - added the new optional request property `profile/conversion_pct`
  - added the new optional request property `profile/kpi_usd`
  - added the new optional request property `profile/post_terms`
  - added the new optional request property `profile/topic_category_ids`
  - …1 more

[Operation history](https://skmtc.dev/tgmarket/apis/tg-market-api/changes/web/reports/post.md)

---

[API](https://skmtc.dev/tgmarket/apis/tg-market-api.md) · [All operations](https://skmtc.dev/tgmarket/apis/tg-market-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tgmarket/apis/tg-market-api/revisions/15aba68e1fef?raw)
