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
| Param | Type | Required | Description |
|---|---|---|---|
username | string | Yes | Username or registered email |
password | string | Yes | Login password |
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
| Method | Path | Description |
|---|---|---|
POST | /auth/register | Register |
POST | /auth/forgot-password | Send reset email, param email |
POST | /auth/reset-password | Params token, new_password, confirm_password |
POST | /auth/logout | Log out |
GET | /auth/profile | Current publisher info |
POST | /auth/password | Change password (old_password/new_password/confirm_password) |
Sites
List
GET /api/publisher/sites
| Param | Type | Required | Description |
|---|---|---|---|
page / page_size | int | No | Pagination |
keyword | string | No | Name/domain search |
status | string | No | Status |
audit_status | string | No | Review status |
start_date / end_date | date | No | Creation time range |
Create a site
POST /api/publisher/sites
| Param | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Site name |
media_type | string | No | Media type: WEB (default) / APP / MINI_PROGRAM |
domain | string | Yes* | Required for WEB; must be a valid, unclaimed domain |
app_package | string | Yes* | Required for APP/mini-program; package name unique |
url | string | No | Site URL; auto-set to https://<domain> when WEB and omitted |
description | string | No | Site description |
industry_id | int | No | Industry ID |
icp | string | No | ICP filing number |
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
| Method | Path | Description |
|---|---|---|
GET | /sites/{id} | Details |
PUT | /sites/{id} | Update |
DELETE | /sites/{id} | Delete |
POST | /sites/{id}/toggle | Enable/pause |
GET | /sites/{id}/stats | Site stats |
GET | /sites/{id}/verify-code | Get ownership verification code |
POST | /sites/{id}/verify | Verify site ownership, param method |
Zones
List
GET /api/publisher/zones
| Param | Type | Required | Description |
|---|---|---|---|
site_id | int | No | Filter by site |
type | string | No | Ad-type filter |
status | string | No | Status |
audit_status | string | No | Review status |
keyword | string | No | Name search |
Create a zone
POST /api/publisher/zones
| Param | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Zone name |
site_id | int | Yes | Parent site; must belong to the current publisher and be approved |
ad_type / type | string | Yes | Ad type, e.g. BANNER (default) / NATIVE / VIDEO / POPUP / REWARDED, etc. |
ad_format_id | int | No | Ad-format ID |
zone_type_id | int | No | Zone-type ID |
size_id | int | No | Size ID |
width | int | No | Width, default 300 |
height | int | No | Height, default 250 |
position | string | No | Position, default CONTENT |
device | string | No | Device, default ALL |
pricing_types | string | No | Billing types, default CPC,CPM |
floor_price_cpc | number | No | CPC floor, default 0 |
floor_price_cpm | number | No | CPM 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
| Method | Path | Description |
|---|---|---|
GET | /zones/{id} | Details |
PUT | /zones/{id} | Update (site_id immutable) |
DELETE | /zones/{id} | Delete |
POST | /zones/{id}/toggle | Enable/pause |
GET | /zones/{id}/code | Get embed code |
GET | /zones/{id}/preview | Preview |
POST | /zones/{id}/submit-audit | Submit for review |
GET | /zones/{id}/stats | Zone stats |
Once you have the zone_key, you can make ad requests — see Ad Request API.
Revenue reporting
| Method | Path | Description |
|---|---|---|
GET | /statistics/report | Summary report |
GET | /statistics/sites | By site |
GET | /statistics/zones | By zone |
GET | /statistics/region | Geo report |
GET | /statistics/hourly | Hourly report |
GET | /statistics/device | Device report |
GET | /statistics/export | Export |
GET /api/publisher/statistics/report params:
| Param | Type | Required | Description |
|---|---|---|---|
start_date | date | No | Start date, default 7 days ago |
end_date | date | No | End date, default today |
group_by | string | No | Group dimension, default date |
site_id | int | No | Specific site |
Withdrawals
| Method | Path | Description |
|---|---|---|
GET | /withdrawals/balance | Query withdrawable balance |
GET | /withdrawals | Withdrawal record list |
POST | /withdrawals | Initiate a withdrawal |
GET | /withdrawals/transactions | Fund transactions |
GET | /withdrawals/payment-methods | Available payout channels |
GET | /withdrawals/bank-cards | Bank card list |
POST | /withdrawals/bank-cards | Add bank card |
DELETE | /withdrawals/bank-cards/{id} | Delete bank card |
GET | /withdrawals/{id} | Withdrawal details |
POST | /withdrawals/{id}/cancel | Cancel withdrawal |
Initiate a withdrawal
POST /api/publisher/withdrawals
| Param | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Withdrawal amount, greater than 0 and not below the channel minimum |
payment_method / channel | string | Yes | Payout channel: BANK/USDT/PAYPAL/PAXUM |
account_info | string | No | Receiving account info (channel-specific) |
bank_info | object | No | Account 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.
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.