Skip to content

Advertiser API ​

The advertiser endpoints are prefixed with /api/advertiser. Except for login / register / password reset, all require the advertiser JWT in the request header: Authorization: Bearer <token>.

For the response envelope, pagination, and error-code conventions, see Overview & Authentication.

Authentication ​

Login ​

POST /api/advertiser/auth/login

ParamTypeRequiredDescription
usernamestringYesUsername; login by registered email is also supported
passwordstringYesLogin password
bash
curl -X POST https://api.adbnk.co/api/advertiser/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"demo","password":"secret123"}'
json
{
  "code": 0,
  "message": "Login successful",
  "data": {
    "token": "eyJ0eXAiOiJKV1Qi....",
    "token_type": "Bearer",
    "expires_in": 86400,
    "user": {
      "id": 12,
      "username": "demo",
      "nickname": "Demo",
      "email": "[email protected]"
    }
  },
  "timestamp": 1752200000
}

Register ​

POST /api/advertiser/auth/register

Uses progressive KYC; the minimum required fields are just email + password. A successful registration returns a usable token directly.

ParamTypeRequiredDescription
emailstringYesValid email, globally unique
passwordstringYesPassword, at least 8 characters
usernamestringNoAuto-derived if omitted (3-30 alphanumeric/underscore)
mobilestringNoMobile number
company_namestringNoCompany name
contact_namestringNoContact person
industrystringNoIndustry name

Other auth endpoints ​

MethodPathDescription
POST/auth/forgot-passwordSend reset email, param email; too-frequent requests return 429
POST/auth/reset-passwordParams token, new_password, confirm_password
POST/auth/logoutLog out (frontend just discards the token)
GET/auth/profileGet the current advertiser's info
POST/auth/passwordChange password, params old_password, new_password, confirm_password

Campaigns ​

List ​

GET /api/advertiser/campaigns

ParamTypeRequiredDescription
page / page_sizeintNoPagination
keywordstringNoFuzzy search by name
statusstringNoStatus filter
pricing_modelstringNoPricing model filter
start_date / end_datedateNoCreation time range

Create ​

POST /api/advertiser/campaigns

Precondition

Creating a campaign enters the review flow and requires account profile completeness at basic, otherwise it returns 412.

ParamTypeRequiredDescription
namestringYesCampaign name
ad_typestringNoLeave it out for smart placement (recommended): your creatives decide where the campaign serves. Only set it to pin a campaign to one format (BANNER/NATIVE/VIDEO/POPUP/REWARDED/RESPONSIVE, etc.)
price / bidnumberYesBid; bid falls back to price, cannot be negative
pricing_modelstringNoPricing model, default CPC; options CPM/CPA/CPV/CPS
typestringNoCampaign type, default PERFORMANCE
objectivestringNoObjective, default TRAFFIC
daily_budgetnumberNoDaily budget, cannot be negative
total_budgetnumberNoTotal budget, cannot be negative
start_date / end_datedateNoServing start/end; empty means unlimited
landing_urlstringNoLanding page URL (https://)
tracker_idintNoConversion tracker ID; required for CPA/CPS billing
rotation_modestringNoRotation mode, default EVEN
target_countriesarrayNoTarget countries/regions
target_devicesarrayNoTarget devices
target_osarrayNoTarget OS
target_browsersarrayNoTarget browsers
target_hours / weekdaysarrayNoDaypart / weekday targeting
bid_adjustmentsobjectNoPer-dimension bid adjustments; see below

bid_adjustments ​

bid_adjustments raises or lowers the base bid by a percentage per dimension. Only three dimensions are accepted — device, geo, os — each a map of value to percentage:

json
{
  "device": { "MOBILE": 20, "PC": -10 },
  "geo":    { "US": 15, "JP": -20 },
  "os":     { "ANDROID": -5 }
}

Keys are upper-cased on save. Percentages are clamped to [-90, 500]; 0 and unparseable entries are dropped, and an object that ends up empty is stored as null. The engine sums every dimension that matches the request and applies the total to the base bid — see Targeting & Bidding for the calculation and its edge cases.

bash
curl -X POST https://api.adbnk.co/api/advertiser/campaigns \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Sale",
    "pricing_model": "CPC",
    "bid": 0.35,
    "daily_budget": 200,
    "landing_url": "https://shop.example.com"
  }'

Other campaign operations ​

MethodPathDescription
GET/campaigns/{id}Details
PUT/campaigns/{id}Update
DELETE/campaigns/{id}Delete the campaign and the ads under it (creatives stay in the media library)
POST/campaigns/{id}/toggleEnable/pause
POST/campaigns/{id}/copyCopy
POST/campaigns/{id}/submit-auditSubmit for review
POST/campaigns/batch-submit-auditBatch submit for review
GET/campaigns/{id}/statsCampaign stats

Ads and ad groups ​

Ad groups /api/advertiser/adgroups and ads /api/advertiser/ads both provide standard CRUD (index / show / store / update / destroy) plus toggle, stats, submit-audit, and similar operations, structured the same as campaigns.

Creatives and media ​

Creative list ​

GET /api/advertiser/creatives

ParamTypeRequiredDescription
keywordstringNoName search
typestringNoCreative type
statusstringNoStatus
audit_statusstringNoReview status

Create creative ​

POST /api/advertiser/creatives

ParamTypeRequiredDescription
namestringYesCreative name
creative_typestringNoCreative subtype, default image (must be in the allowed set)
typestringNoDisplay type, default IMAGE
size_id / width / heightintNoSize
image_media_idintNoMain image asset ID (recommended, from the media library)
image_media_id_2intNoSecond image asset ID
video_media_idintNoVideo asset ID
icon_media_idintNoIcon asset ID
html_codestringNoHTML ad code
vast_xml / vast_urlstringNoVAST video ad
click_urlstringNoClick URL

Media referenced by media_id

When advertisers create/update creatives, the *_url fields don't accept external URLs; images/videos can only be referenced via the media library's *_media_id, from which the server resolves a usable URL.

Media library endpoints: GET /media, POST /media/upload, POST /media/ai-image, POST /media/ai-video, POST /media/ai-copy.

Upload helpers: POST /creatives/upload (image), POST /creatives/upload-video (video).

Reporting ​

All reports default to the last 7 days.

MethodPathDescription
GET/statistics/exploreFlexible report: choose metrics, dimensions, filters and comparison (what the console's Statistics page uses)
GET/statistics/explore/metaThe metrics and dimensions available to your account
GET/statistics/saved-reportsSaved report configurations (POST to create, PUT / DELETE on /{id} to change or remove)
GET/statistics/reportSummary report
GET/statistics/campaignsBy campaign
GET/statistics/regionGeo report
GET/statistics/hourlyHourly report
GET/statistics/deviceDevice report
GET/statistics/exportExport

GET /api/advertiser/statistics/explore params:

ParamTypeRequiredDescription
start_date / end_datedateNoDate range, default the last 7 days
dimensionsstringNoComma-separated row dimensions, at most four; default date. Valid values come from /statistics/explore/meta
columnsstringNoComma-separated metrics to return; default is the standard set
filters / excludeobjectNoInclude / exclude specific dimension values, e.g. {"country":["US"]}
comparestringNoprevious / year / custom (with compare_start_date / compare_end_date); default none
sort / orderstringNoSort metric or dimension, and asc / desc
exportstringNocsv or xlsx to download the current view as a file

GET /api/advertiser/statistics/report params:

ParamTypeRequiredDescription
start_datedateNoStart date, default 7 days ago
end_datedateNoEnd date, default today
group_bystringNoGroup dimension, default date
campaign_idintNoSpecific campaign
bash
curl "https://api.adbnk.co/api/advertiser/statistics/region?start_date=2026-07-01&end_date=2026-07-10" \
  -H "Authorization: Bearer <token>"

Balance and top-up ​

MethodPathDescription
GET/deposits/balanceQuery account balance
GET/depositsTop-up order list
POST/depositsInitiate a top-up
GET/deposits/transactionsFund transactions
GET/deposits/{id}Top-up order details
POST/deposits/{id}/cancelCancel order

Initiate a top-up ​

POST /api/advertiser/deposits

ParamTypeRequiredDescription
amountnumberYesTop-up amount, greater than 0 and not below the minimum
payment_methodstringYesPayment method: BANK/USDT/ALIPAY/WECHAT/OFFLINE

Precondition

Top-up requires account profile completeness at basic, otherwise it returns 412.

bash
curl -X POST https://api.adbnk.co/api/advertiser/deposits \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"amount": 500, "payment_method": "USDT"}'

Conversion trackers ​

For creating / managing conversion trackers, see Events & Conversion Reporting and the Conversion Tracking guide. Related endpoints live at /api/advertiser/trackers.

TIP

For more advertiser features (optimization rules, responsive ads, referral, notification binding, etc.), refer to the advertiser console.

Documentation released under the MIT License.