Skip to content

Publisher API

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

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

Authentication

Login

POST /api/publisher/auth/login

ParamTypeRequiredDescription
usernamestringYesUsername or registered email
passwordstringYesLogin password
bash
curl -X POST https://api.adbnk.co/api/publisher/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"pub_demo","password":"secret123"}'

The response structure matches advertiser login, returning token / token_type / expires_in / user.

Other auth endpoints

MethodPathDescription
POST/auth/registerRegister
POST/auth/forgot-passwordSend reset email, param email
POST/auth/reset-passwordParams token, new_password, confirm_password
POST/auth/logoutLog out
GET/auth/profileCurrent publisher info
POST/auth/passwordChange password (old_password/new_password/confirm_password)

Sites

List

GET /api/publisher/sites

ParamTypeRequiredDescription
page / page_sizeintNoPagination
keywordstringNoName/domain search
statusstringNoStatus
audit_statusstringNoReview status
start_date / end_datedateNoCreation time range

Create a site

POST /api/publisher/sites

ParamTypeRequiredDescription
namestringYesSite name
media_typestringNoMedia type: WEB (default) / APP / MINI_PROGRAM
domainstringYes*Required for WEB; must be a valid, unclaimed domain
app_packagestringYes*Required for APP/mini-program; package name unique
urlstringNoSite URL; auto-set to https://<domain> when WEB and omitted
descriptionstringNoSite description
industry_idintNoIndustry ID
icpstringNoICP filing number
bash
curl -X POST https://api.adbnk.co/api/publisher/sites \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"name":"My Blog","media_type":"WEB","domain":"blog.example.com"}'

A new site defaults to audit_status=PENDING and must be approved before zones can be created.

Other site operations

MethodPathDescription
GET/sites/{id}Details
PUT/sites/{id}Update
DELETE/sites/{id}Delete
POST/sites/{id}/toggleEnable/pause
GET/sites/{id}/statsSite stats
GET/sites/{id}/verify-codeGet ownership verification code
POST/sites/{id}/verifyVerify site ownership, param method

Zones

List

GET /api/publisher/zones

ParamTypeRequiredDescription
site_idintNoFilter by site
typestringNoAd-type filter
statusstringNoStatus
audit_statusstringNoReview status
keywordstringNoName search

Create a zone

POST /api/publisher/zones

ParamTypeRequiredDescription
namestringYesZone name
site_idintYesParent site; must belong to the current publisher and be approved
ad_type / typestringYesAd type, e.g. BANNER (default) / NATIVE / VIDEO / POPUP / REWARDED, etc.
ad_format_idintNoAd-format ID
zone_type_idintNoZone-type ID
size_idintNoSize ID
widthintNoWidth, default 300
heightintNoHeight, default 250
positionstringNoPosition, default CONTENT
devicestringNoDevice, default ALL
pricing_typesstringNoBilling types, default CPC,CPM
floor_price_cpcnumberNoCPC floor, default 0
floor_price_cpmnumberNoCPM floor, default 0

On success the system auto-generates a unique zone_key (of the form zone_ab12cd34), used for ad requests.

Other zone operations

MethodPathDescription
GET/zones/{id}Details
PUT/zones/{id}Update (site_id immutable)
DELETE/zones/{id}Delete
POST/zones/{id}/toggleEnable/pause
GET/zones/{id}/codeGet embed code
GET/zones/{id}/previewPreview
POST/zones/{id}/submit-auditSubmit for review
GET/zones/{id}/statsZone stats

Once you have the zone_key, you can make ad requests — see Ad Request API.

Revenue reporting

MethodPathDescription
GET/statistics/reportSummary report
GET/statistics/sitesBy site
GET/statistics/zonesBy zone
GET/statistics/regionGeo report
GET/statistics/hourlyHourly report
GET/statistics/deviceDevice report
GET/statistics/exportExport

GET /api/publisher/statistics/report params:

ParamTypeRequiredDescription
start_datedateNoStart date, default 7 days ago
end_datedateNoEnd date, default today
group_bystringNoGroup dimension, default date
site_idintNoSpecific site

Withdrawals

MethodPathDescription
GET/withdrawals/balanceQuery withdrawable balance
GET/withdrawalsWithdrawal record list
POST/withdrawalsInitiate a withdrawal
GET/withdrawals/transactionsFund transactions
GET/withdrawals/payment-methodsAvailable payout channels
GET/withdrawals/bank-cardsBank card list
POST/withdrawals/bank-cardsAdd bank card
DELETE/withdrawals/bank-cards/{id}Delete bank card
GET/withdrawals/{id}Withdrawal details
POST/withdrawals/{id}/cancelCancel withdrawal

Initiate a withdrawal

POST /api/publisher/withdrawals

ParamTypeRequiredDescription
amountnumberYesWithdrawal amount, greater than 0 and not below the channel minimum
payment_method / channelstringYesPayout channel: BANK/USDT/PAYPAL/PAXUM
account_infostringNoReceiving account info (channel-specific)
bank_infoobjectNoAccount details for the bank channel

KYC hard gate

Withdrawals require the account to complete KYC (kyc_status = approved) with profile completeness at verified, otherwise it returns 412, and the response data contains hint fields such as requires_kyc, kyc_status, and kyc_url.

bash
curl -X POST https://api.adbnk.co/api/publisher/withdrawals \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"amount": 300, "payment_method": "USDT", "account_info": "TRC20:TXxxxx"}'

Fees and taxes are computed per platform and channel config; the final arrival amount = withdrawal amount − fee − tax. For settlement and payout rules, see the Settlement & Payouts guide.

TIP

For more publisher features (blacklist, notification binding, referral, etc.), refer to the publisher console.

Documentation released under the MIT License.