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/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
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.