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]",
      "advertisement_id": 8,
      "role": "ADMIN"
    }
  },
  "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; one per 60s per email
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_typestringYes*Ad type (BANNER/NATIVE/VIDEO/POPUP/REWARDED/RESPONSIVE, etc.). Can be derived from campaign_option_id
campaign_option_idintNoAd-format option ID; can replace ad_type
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
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.

The same field is accepted on an ad group (/api/advertiser/adgroups), where it overrides the campaign's value for ads in that group. The override is all-or-nothing: an ad group with any bid_adjustments of its own ignores the campaign's entirely; one with null inherits the campaign's. The advertiser console only writes the campaign-level value.

bash
curl -X POST https://api.adbnk.co/api/advertiser/campaigns \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Sale",
    "ad_type": "BANNER",
    "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
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/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/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.