Annual Ads

Үҫтереүсе документацияһы

Annual Ads платформаһында тура эшләгеҙ — реклама биреүселәр булдырығыҙ, рекламаларҙы баҫтырығыҙ, түләүҙәрҙе эшкә йүнәлтегеҙ һәм рейтингты күҙәтегеҙ, барыһын да API аша.

Тулы бағалар таблицаһын ҡарағыҙ

Һин 70%-ты һаҡлайһың Connect-режимындағы реклама биреүселәре рекламалары өсөн түләгән аҡсаның — автоматик рәүештә һеҙҙең әмиянығыҙға күсерелә. Түбәндә нисек эшләйен ҡарағыҙ.

Төп URL

https://api.adhub365.com
OpenAPI 3

Аутентификация

Һәр һорау Authorization башлығындағы серле асҡыс ярҙамында Bearer схемаһын ҡулланып аутентификациялана.

POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/json

Сэндбокс һәм етештереү

Sandbox һәм production асҡыстары тулыһынса бер-береһенән айырылған — sandbox асҡысы production асҡысы тарафынан булдырылған мәғлүмәтте бер ҡасан да уҡый һәм яҙа алмай, һәм киреһенсә.

Күҙәткестәр

Һәр асҡыс бирелгән хоҡуҡ даирәләре менән сикләнгән — асҡыс уны булдырған партнер иҫәбенән күберәк хоҡуҡҡа эйә булмай.

API-ключтары йыллыҡ реклама командаһы тарафынан раҫланған партнер иҫәптәренә бирелә.

Партнёр иҫәбен булдырығыҙ

Реклама килемен бүлешеү

Әгәр һеҙҙең API-ключтарығыҙ үҙ ҡулланыусыларығыҙ өсөн рекламодатель иҫәптәрен булдыра (Connect режимы — юғарыраҡ Authentication-ға ҡарағыҙ), һеҙ шул рекламодательҙарҙың рекламалары өсөн түләгән аҡсаһының өлөшөн алаһығыҙ. Түбәндәге бүленеш шул уҡ endpoint-тан тура уҡыла, бер ҡасан да ҡаты кодланмаған һәм был биттең аҫтағы рефераль комиссияһынан бөтөнләй айырым.

GET https://api.adhub365.com/v1/partner-program
{
  "partner_share_percentage": 0.7,
  "platform_share_percentage": 0.3
}

70%

Һиңә бара

Төҙөлгән түләү кассағыҙға автоматик рәүештә түләнә — аҡса сығарыу өсөн мөрәжәғәт итергә кәрәкмәй.

30%

Йыллыҡ иғландарға күсә

Рекламаларығыҙҙың эшләүен тәьмин иткән модерация, хостинг һәм рейтинг инфраструктураһын үҙ эсенә ала.

Ул нисек эшләй

  1. Connect-режимындағы рекламодательҙарығыҙҙың береһе һеҙҙең интеграция аша реклама өсөн түләй.
  2. Реклама тикшерелә һәм раҫлана — автоматик рәүештә йәки беҙҙең модерация командаһы тарафынан.
  3. Һеҙҙең өлөшөгеҙ автомат рәүештә һеҙҙең әмиянығыҙға түләү өсөн чиратҡа ҡуйылған, был аҫтағы реферал программаһы кеүек үк механизм.
Реклама фактик рәүештә раҫланғандан алда пост бер ҡасан да булдырылмай — әгәр модерация уны кире ҡағарға ҡарар итһә, был түләү буйынса бер ниндәй ҙә бурыс тыумай. Ә инде актив булған рекламаға өҫтәмә аҡса һалыу ошондай хәүеф тыуҙырмай һәм шунда уҡ бүлештерелә.

Түләү шарттары

  • Һеҙҙең партнер иҫәбендә крипто түләү әмияны көйләнгән.
  • Һеҙҙең яҡтан KYC талап ителмәй — партнёр иҫәбегеҙ булдырылғанда уҡ тикшерелгән.

Мисал: йыйылған өлөштәрҙе уҡыу

GET https://api.adhub365.com/v1/partner/ad-revenue/earnings
Authorization: Bearer sk_sandbox_...
{
  "shares": [
    {
      "id": "share_1a2b...",
      "payment_id": "pay_9f2a...",
      "ad_id": "ad_7c31...",
      "partner_amount_usd": 140.0,
      "platform_amount_usd": 60.0,
      "status": "paid",
      "payable_after": "2026-08-03T00:00:00Z",
      "paid_at": "2026-08-05T10:12:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 140.0
}

Тәғәйен нөктәләр

Иҫәптәр

POST/v1/partner/advertisers

Ҡулланыусыларығыҙҙың береһе исеменән реклама биреүсе иҫәбен булдырығыҙ (Connect режимы).

advertisers:write
GET/v1/partner/advertisers/{id}

Был партнер тарафынан булдырылған реклама биреүсе иҫәбен эҙләгеҙ.

advertisers:read

Рекламалар

POST/v1/partner/ads

Реклама булдырығыҙ. Ул проект режимында башлана. Ихтыяри advertiser_type, promotion_type, link_type һәм promoted_brand ҡырҙары филиал, рефераль, автор йәки шәхси рекламаны тасуирлай — аҫтағы иҫкәрмәгә ҡарағыҙ.

ads:write
GET/v1/partner/ads/{id}

Иғланды эҙлә

ads:read
PATCH/v1/partner/ads/{id}

Редакцион контентты яңыртыу — исеме, тасуирламаһы, һылтанмаһы, реклама биреүсе төрө, промоция төрө, һылтанма төрө һәм рекламаланған бренд. Категория, география һәм рейтинг двигателе уҡыған башҡа мәғлүмәттәр бында бер ҡасан да үҙгәртелмәй.

ads:write
POST/v1/partner/ads/{id}/image

Иғлан рәсемен тура йөкләгеҙ (JPEG/PNG/WebP, максимум 5 МБ). Беренсе түләүҙән алда мотлаҡ — түбәндәге түләүҙәр төркөмөнә ҡарағыҙ.

ads:write
POST/v1/partner/ads/{id}/image-url

Рекламаның рәсемен файл йөкләү урынына URL-адрес буйынса билдәләгеҙ — сервер уны үҙе йөкләп, хостингта урынлаштыра. Шул уҡ талап: тәүге түләү алдынан кәрәк.

ads:write
GET/v1/partner/ads/{id}/rank

Реклама өсөн ағымдағы ранг, категория һәм географик даирә.

ads:read
GET/v1/partner/ads/{id}/stats

Реклама өсөн барлыҡ ҡарауҙар һәм баҫыуҙар — үткән/ҡалған көндәр GET /{id} аша алынған activated_at һәм expires_at ҡырҙарҙан, ә rank GET /{id}/rank аша алына.

ads:read

Түләүҙәр

POST/v1/partner/payments

Башланғыс һатып алыу йәки иҫәпкә тулыландырыу өсөн крипто түләүҙе башлағыҙ. Башланғыс түләү 422 хатаһы менән уңышһыҙ тамамлана, әгәр рекламада инде рәсем булмаһа — юғарылағы uploadAdImage/setAdImageUrl-ға ҡарағыҙ.

payments:write
GET/v1/partner/payments/{id}

Түләү статусын тикшерегеҙ.

payments:read

Йүнәлтеүҙәр

POST/v1/partner/referrals

Реферал һылтанмаһын булдырығыҙ.

referrals:write
GET/v1/partner/referrals/{code}/earnings

Статус буйынса бүленгән йыйылмалы реферал килемдәре.

referrals:read

Реклама килемен бүлешеү

GET/v1/partner/ad-revenue/earnings

Һеҙҙең Connect режимында булдырған рекламодательҙар рекламаларына түләгән аҡсаның 70% өлөшө, статус буйынса бүленгән.

ad-revenue:read

Кереү журналы

GET/v1/partner/access-log

Был асҡыс өсөн шылтыратыуҙарҙың тулы тарихы — ысул, юл, IP, ваҡыт тамғаһы.

Унда

Асыҡ ахыр нөктәләре

GET/v1/rankings?category={id}&geo={scope}

Категория һәм географик даирә өсөн тик уҡыуға ғына ранглау.

Ғәмәли
GET/v1/tiers

7 көйләнгән баға кимәлдәре (сик, асылған өҫтөнлөктәр)

Ғәмәли
GET/v1/referral-program

Реферал каскады һәм Лидерҙар пулы өсөн хәҙерге ваҡытта актив булған комиссия проценттары.

Ғәмәли
GET/v1/partner-program

Һеҙ менән Annual Ads араһындағы хәҙерге реклама килеме бүлешеүе (Connect режимы).

Ғәмәли
GET/v1/search?q={query}

Табиғи тел буйынса эҙләү — «Кениялағы мебель реклама биреүселәр» кеүек һорауҙы тап килгән категорияға һәм географик даирәгә йүнәлтә, аннары шул рейтингты уның төгәл, реаль тәртибендә кире ҡайтара.

Ғәмәли

Партнёр һәм рефераль реклама

advertiser_type, promotion_type, link_type һәм promoted_brand — POST һәм PATCH /v1/partner/ads өсөн ихтыяри баҫмалар; Annual Ads үҙҙәрен рекламалаған бизнес менән генә сикләнмәй. link_type affiliate_link йәки referral_invitation_link булғанда, йәки promotion_type affiliate_offer йәки referral_opportunity булғанда affiliate_terms_accepted true булырға тейеш, юҡ икән һорау 422 статусы менән кире ҡағыла. title 35 символға тиклем, description 80 символға тиклем сикләнгән — был сикләүҙәр сервер яғында ғына түгел, идара панелинең интерфейсында ла бойомға ашырыла.

ЯИ ҡоралдары

Һәр реклама биреүсе иҫәбенә төҙөлгән AI ҡоралдарының комплекты бирелә — реклама контенты һәм визуаль генератор, әңгәмәле ярҙамсы, бюджет буйынса кәңәшсе һәм тышҡы SEO аудиторы — улар өсөн йыллыҡ берҙәй хаҡҡа өҫтәп AI кредиттары түләнә.

Улар рекламодательҙең шәхси дашбордҡа инеү (сеансҡа инеү токены) аша эшләй, партнер API-ключы аша түгел — өсөнсө яҡ интеграцияһы уларҙы рекламодатель исеменән саҡыра алмай.
POST/v1/advertisers/{id}/ai/assistant

Ask Annual Ads — йөзөп торған әңгәмәле ярҙамсы, тик мәғлүмәт өсөн генә, аккаунт мәғлүмәттәренә тик уҡыу хоҡуғы менән.

Ғәмәли
POST/v1/advertisers/{id}/ai/creative-studio

Ҡыҫҡа бизнес тасуирламаһынан реклама исемен, тасуирламаһын һәм төп һүҙҙәрҙе төҙөп сығарығыҙ.

2 кредит(тар)
POST/v1/advertisers/{id}/ai/creative-studio/image

Шул уҡ бизнес тасуирламаһынан иғланға беркетергә әҙер визуаль исемлек (PNG) төҙөү.

8 кредит(тар)
POST/v1/advertisers/{id}/ai/budget-advisor

Был — реаль статистик фараз (генератив фараз түгел) — билдәле бер рангты 30/90/365 көндә һаҡлап ҡалыу ихтималлығы.

1 кредит(тар)
POST/v1/advertisers/{id}/ai/seo-audit

Рекламодательҙең үҙенең тышҡы веб-сайтын анализла һәм конкрет SEO яҡшыртыуҙар тәҡдим ит.

2 кредит(тар)

Мисал — реклама контентын булдырыу

Шул уҡ категория һәм бизнес тасуирламаһы аҫтағы рәсем генераторына ла көс бирә.

POST https://api.adhub365.com/v1/advertisers/{advertiser_id}/ai/creative-studio
Authorization: Bearer <session access token>
Content-Type: application/json

{
  "category_name": "Furniture",
  "business_description": "We sell handmade oak dining tables"
}
{
  "title": "Handmade Oak Dining Tables — Built to Last",
  "description": "Solid oak dining tables crafted by hand, built to last a lifetime.",
  "keywords": ["oak furniture", "dining table", "handmade"],
  "credits_remaining": 8
}

Шул уҡ реклама өсөн тап килгән визуаль булдырығыҙ:

POST https://api.adhub365.com/v1/advertisers/{advertiser_id}/ai/creative-studio/image
Authorization: Bearer <session access token>
Content-Type: application/json

{
  "category_name": "Furniture",
  "business_description": "We sell handmade oak dining tables"
}
{
  "visual_url": "https://cdn.uploadscenter.com/file_01m1...",
  "credits_remaining": 4
}

Виджет

Әҙер реклама блогун үҙ сайтығыҙға төшөрөгөҙ — төҙөү этабы юҡ, iframe кәрәкмәй. Скрипт изоляцияланған Shadow DOM эсендә турадан-туры биткә рендерлана, шуның өсөн уның стильдәре һис ҡасан да һеҙҙең сайтҡа үтеп инмәй, ә һеҙҙең сайттың стильдәре лә унда күсеп китмәй.

Уны битегеҙгә өҫтәгеҙ

<div
  class="annualads-widget"
  data-category="YOUR_CATEGORY_ID"
  data-geo="global"
  data-count="4"
  data-columns="2"
></div>
<script async src="https://adhub365.com/widget.js"></script>

Стандарт буйынса был категорияның тулы асыҡ рейтингын күрһәтә — платформадағы һәр рекламодатель, һеҙ килтергәндәре генә түгел. Connect режимы аша булдырған рекламодательҙарҙың (һеҙҙең өлөшөгөҙҙө барлыҡҡа килтергәндәрҙең) иғландарын ғына күрһәтеү өсөн data-partner параметрын партнер идентификаторығыҙ менән өҫтәгеҙ (уны үҙегеҙҙең дашбордтың Үҫтереүселәр битендә табығыҙ):

<div
  class="annualads-widget"
  data-category="YOUR_CATEGORY_ID"
  data-geo="global"
  data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>

Әгәр һеҙҙең реклама биреүселәрегеҙ бер нисә категорияны үҙ эсенә алһа, data-category-ҙы бөтөнләй ҡулланмағыҙ — data-partner-ҙы ғына ҡулланғанда виджет бөтә категориялар буйынса һеҙҙең бөтә рекламаларҙы бер сетка эсендә күрһәтә, категория һайын айырым виджет блогы ҡуйырға кәрәкмәй:

<div
  class="annualads-widget"
  data-geo="global"
  data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>

Контенттағы берәмегең янында футер стилендәге икенсе берәмек ҡуйып, уларҙың һәр береһендә төрлө реклама күрһәтергә теләйһеңме? data-layout="compact" (бер генә реклама, бәләкәй «пилл» форматына ҡыҫҡартыла ала) һәм data-offset параметрын тәүге виджетыңда инде күрһәтелгән рекламалар һанын иҫәпкә алып ҡуйған икенсе виджет блогын өҫтә:

<!-- in your content -->
<div
  class="annualads-widget"
  data-category="YOUR_CATEGORY_ID"
  data-geo="global"
  data-count="4"
  data-columns="2"
></div>

<!-- in your footer, showing different ads via data-offset -->
<div
  class="annualads-widget"
  data-category="YOUR_CATEGORY_ID"
  data-geo="global"
  data-layout="compact"
  data-offset="4"
></div>
<script async src="https://adhub365.com/widget.js"></script>

Үҙенсәлектәр

data-categoryКүрһәтеү өсөн категория идентификаторы. Таләп ителә — әгәр data-partner билдәләнгән булмаһа; әгәр ул билдәләнгән булһа, уны күрһәтмәү партнерҙың бөтә категориялар буйынса рекламаларын күрһәтә.
data-geoГеография даирәһе: урындағы, төбәк йәки глобаль. Стандарт буйынса глобаль.
data-countКүрһәтеләсәк иғландар һаны. Стандарт буйынса 4.
data-columnsСетка бағаналарының һаны. Стандарт буйынса 2.
data-layoutсетка, исемлек йәки компакт. Стандарт буйынса сетка ҡулланыла. Компакт бер генә реклама күрһәтә (data-count иҫәпкә алынмай) һәм уны бәләкәй «таблетка»ға ҡыҫҡартып, кире ҡайтарыу өсөн төймә менән — футер стилендәге берәмек, скрипт уны бер ҡасан да фиксацияланған урынға ҡуймай; контейнер div-ығыҙҙы үҙегеҙҙең битегеҙҙә теләгәнсә урынлаштырып, стильләй алаһығыҙ.
data-offsetИң юғары рейтинглы иғландарҙы үтеп етеү һаны. Стандарт буйынса 0. Шул уҡ биттәге икенсе виджетҡа (мәҫәлән, аҫҡы өлөштәге ҡыҫҡа виджет һәм юғарыраҡ урынлашҡан сеткалы виджет) бер үк иғланды ике тапҡыр ҡабатлау урынына икенсе иғландар күрһәтергә мөмкинлек бирә — икенсе виджет инде күрһәткән иғландар һаны тураһында мәғлүмәт ебәрегеҙ.
data-partnerҺеҙҙең партнер идентификаторығыҙ (уны үҙегеҙҙең дашбордтың Developers битендә табығыҙ). Теләһәгеҙ — уны ҡуймаһағыҙ, виджет был категория буйынса тулы асыҡ рейтингты, платформадағы һәр рекламодательҙы күрһәтә. Ә уны ҡуйһағыҙ, виджет Connect режимы аша килтергән рекламодательҙарҙың ғына — һеҙҙең өлөшөгөҙҙө барлыҡҡа килтергән — рекламаларын күрһәтә.

Керемде бүлешеү

Партнерҙың рефераль комиссияһының уларға нисек барып етә — процент өлөшө, түләү механизмы һәм алдан ҡуйылған шарттар.

GET https://api.adhub365.com/v1/referral-program
{
  "levels": [
    {
      "level": 1,
      "percentage": 0.1
    }
  ],
  "leaders_pool_percentage_of_gmv": 0.05,
  "founding_advertiser_pool_percentage_of_gmv": 0.05,
  "payout_verification_window_hours": 48,
  "min_payout_usd": 1
}

Билдәләнгән һан түгел

Комиссия проценты беҙҙең яҡта көйләнә һәм үҙгәрергә мөмкин — ҡиммәтте ҡаты кодлау урынына уны һәр ваҡыт был эндпойнттан тура уҡып алығыҙ.

Тулыһынса автоматлаштырылған

Аҡса сығарыу өсөн аҙаҡҡы нөктә юҡ. График буйынса эшкәртелгән тапшырыҡ түләнергә тейешле килемде иҫәпләй, уны һәр рекламодатель буйынса пакеттарға бүлә һәм аҫта күрһәтелгән бөтә шарттар үтәлгәс автоматик рәүештә түләй.

Түләү шарттары

  • Рекламодательҙең түләнергә тейешле дөйөм килеме минималь түләү суммаһына етә.
  • Уларҙың иҫәбендә крипто түләү әмияны көйләнгән.
  • Уларҙың KYC статусы раҫланған.

Мисал: йыйылған килемде уҡыу

GET https://api.adhub365.com/v1/partner/referrals/{code}/earnings
Authorization: Bearer sk_sandbox_...
{
  "code": "ann-2f8c",
  "earnings": [
    {
      "id": "earn_1a2b...",
      "payment_id": "pay_9f2a...",
      "amount_usd": 30.0,
      "status": "paid",
      "payable_after": "2026-08-01T00:00:00Z",
      "paid_at": "2026-08-03T14:22:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 30.0
}

Баһалар кимәлдәре (тура эфирҙа)

Был эндпойнттан тура уҡығыҙ — был ҡиммәттәрҙе бер ҡасан да статик рәүештә кодҡа индермәгеҙ, сөнки улар беҙҙең яҡтан үҙгәрергә мөмкин. Бушлай сумма ҡыртымы урынына үҙ ҡулланыусыларығыҙ өсөн баҫҡыс һайлаусы төҙөгөҙ: күрһәтелгән һәр хаҡ түләү булдырғанда ебәреләсәк төгәл сумма булып тора, ә бында күрһәтелгән асылған өҫтөнлөктәр ҡулланыусыларға был хаҡ өсөн нимә алыуҙарын төгәл аңлата, шуның менән улар һан фаразлау урынына үҙҙәренә аңлайышлы хаҡты һайлай.

ҠатБаһаАса
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Баҫып була торған һылтанма
Gold$500.00

Animation unlocked

Баҫып була торған һылтанмаАнимация
Platinum$1,000.00

Enhanced exposure

Баҫып була торған һылтанмаАнимация
Diamond$2,500.00

Premium placement

Баҫып була торған һылтанмаАнимация
Elite$5,000.00

Top-tier visibility

Баҫып була торған һылтанмаАнимация
Legendary$10,000.00

Maximum visibility & branding

Баҫып була торған һылтанмаАнимация

Рейтинг сиктәре

Һәр минутҡа һәм һәр асҡыс буйынса мөрәжәғәттәр сикләнгән. Һәр аутентификацияланған яуап X-RateLimit-Limit, X-RateLimit-Remaining һәм X-RateLimit-Reset башлыҡтарын үҙ эсенә ала; лимиттан артыҡ мөрәжәғәт иткәндә Retry-After башлығы менән 429 Too Many Requests хатаһы ҡайтарыла.

IP рөхсәт ителгән исемлек

Һәр партнер өсөн ихтыяри. Яҙма өҫтәмәгәнсе, һеҙҙең ключтар теләсә ниндәй IP-адрес­тан мөрәжәғәт ҡабул итә — тәүге яҙма шул партнерҙың бөтә ключтарын тик рөхсәт ителгән исемлеккә генә үҙгәртә.

Вебхуктар

Һәр вебхук бер тапҡыр бирелгән сер исеме ҡулланып HMAC-SHA256 менән имзалана — йөкмәткегә ышанырҙан алда имзаны тикшерегеҙ. Ваҡиғалар тик шул рекламодательгә ҡараған партнерға ғына ебәрелә.

payment.succeededТүләү раҫланды.
payment.refundedАҡса кире ҡайтарыла.
ad.activatedИғлан автоматик рәүештә йәки администратор тикшергәндән һуң активлаша.
invoice.issuedСчёт-фактура сығарыла.
referral.payout.completedРеферал комиссияһы түләүле статуска етә.
referral.payout.failedПровайдерҙа рефераль түләү пакеты уңышһыҙлыҡҡа осрай — килемдәр түләнергә ҡайта һәм яңынан эшкәртелә.
rank.changedРекламаның ранги үҙгәрә — шул иҫәптән башҡа рекламодательҙең түләүе арҡаһында ла.
ad.expiring_soonИғлан тамамланырға 30, 7 йәки 1 көн ҡалғас.
partner_ad_revenue.payout.completedРеклама килемен бүлешеү түләү статусына етә.
partner_ad_revenue.payout.failedПровайдерҙа реклама килемен бүлешеү түләү пакеты уңышһыҙлыҡҡа осрай — өлөштәр түләнергә тейеш исемлеккә кире ҡайтарыла һәм яңынан эшләнә.

Программа тәьминәтен үҫтереү комплекттары

Ошо уҡ API-спецификациянан төҙөлгән рәсми JavaScript/TypeScript һәм Python SDK-тары планлаштырылған, әммә әле баҫылып сығарылмаған — шуға тиклем HTTP API-ға тура мөрәжәғәт итегеҙ.

Тиз башлау

Әлегә SDK юҡ — улар HTTP API-ға тура мөрәжәғәт итә һәм бөгөн теләсә ниндәй телдә эшләй.

cURL

curl -X POST https://api.adhub365.com/v1/partner/ads \
  -H "Authorization: Bearer sk_sandbox_..." \
  -H "Content-Type: application/json" \
  -d '{"advertiser_id":"adv_9f2a...","category_id":"cat_furniture","geo_scope":"local","title":"..."}'

JavaScript

await fetch("https://api.adhub365.com/v1/partner/ads", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk_sandbox_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    advertiser_id: "adv_9f2a...",
    category_id: "cat_furniture",
    geo_scope: "local",
    title: "...",
  }),
});

Python

import requests

requests.post(
    "https://api.adhub365.com/v1/partner/ads",
    headers={"Authorization": "Bearer sk_sandbox_..."},
    json={
        "advertiser_id": "adv_9f2a...",
        "category_id": "cat_furniture",
        "geo_scope": "local",
        "title": "...",
    },
)