开发者后台管理API
Revision history
| Release time | Revision Notes |
|---|---|
| 2026-05-07 | Supports automatic creation of Pangle advertising sources, covering various advertising type conversion and adaptation scenarios. |
| 2026-04-14 | Interface function update: Add optional parameters for querying advertising source information, create and edit intermediary groups, and support the update operation of the default group. |
| 2026-04-09 | Supports automatic creation of Meta and AdMob advertising sources, covering various advertising type conversion and adaptation scenarios. |
| 2026-03-25 | Support A/B testing full process management capabilities |
1 Obtain API Key
Log in to the backend, click on the company name, enter "My Account", "API Key", and obtain the API Key and secret key.
| Name | Purpose |
|---|---|
| API Key(bear) | Identifies the user |
| secret | Generates the request signature |
2 API Integration
All requests are in post mode. The default format of POST request data is: multipart/form-data; the request domain name is: https://openapi.tradplusad.com
2.1 Common Request Parameters
| Parameter | Description | Transmission Method | Example |
|---|---|---|---|
| bear | API key | HTTP Header | 157E4A5D-3877-1236-DE06-457FT3F70C4 |
| sign | sign | GET | 5DE008C88087D8556D276A9E5B8E37E6 |
| timestamp | Timestamp, seconds of current time | GET | 1629525680 |
| nonce | 16-bit random characters, a combination of numbers and letters | GET | 5c672d4e9628d0a7 |
2.2 Generate signature
To obtain bear and secret, refer to 1 Obtaining API Key
The specific rules are as follows:
- Splice secret, timestamp, nonce and request path
- md5 encryption and conversion to uppercase
$sign = strtoupper(md5($secret+$timestamp+$nonce+$path));
2.3 Call example
curl --location --request POST 'https://openapi.tradplusad.com/api/seat/store?sign=5DE008C88087D8556D276A9E5B8E37E6×tamp=1629525680&nonce=5c672d4e9628d0a7' \
--header 'bear: 157E4A5D-3877-1236-DE06-457FT3F70C4' \
--form 'adseat_list[0][app_uuid]="BA04D9C5A5E736CCDA8003BC5D936BE5"' \
--form 'adseat_list[0][seat_name]="test created"' \
--form 'adseat_list[0][ad_type]="5"' \
--form 'adseat_list[0][adseat_uuid]=""'
2.4 Return parameters
Returns JSON format
2.4.1 Success
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"adseat_uuid": "8629EE09A4E3C6B60AEC48FA7D6CA4D4",
"seat_name": "test created",
"error_message": ""
}
]
}
}
2.4.2 Failure
{
"code": 403,
"status": -1,
"error_message":"sign error"
}
3 Report
3.1 Submit third-party advertising platform report data
Request path: /api/report/submit
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| report_data_list | Array | Y | A maximum of 10 items will be discarded. | |
| report_data_list.day | String | Y | Date, only supports Y-m-d format | Example: 2021-02-01 |
| report_data_list.iso | String | Y | Two-letter country code (ISO) | Example: GE See: 8.1 |
| report_data_list.adsource_id | Int | Y | tradplus advertising platform ID | See: 8.2 |
| report_data_list.placement_id | String | Y | Third-party advertising platform advertising space ID | Mintegral needs to use "_" to splice AD Unit ID Unity_Ads needs to splice Game ID Applovin needs to splice SDK Key Kidoz needs to splice the application's package name package_name ReklamUp needs to splice the application's package name package_name Example: placementID_adUnitID |
| report_data_list.currency | String | N | Currency unit: CNY or USD, default CNY if not passed | |
| report_data_list.bidding_request | Int | N | bid request | Default 0 |
| report_data_list.bidding_response | Int | N | bid response | Default 0 |
| report_data_list.request | Int | N | request | Default 0 |
| report_data_list.fill | Int | N | fill | Default 0 |
| report_data_list.impression | Int | N | impressions | Default 0 |
| report_data_list.click | Int | N | Click | Default 0 |
| report_data_list.income | Float | N | income | Default 0 |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| error | Array | Y | Error message list |
| error.message | String | N | error message |
| error.report_data | Array | N | Error message details (same as request data) |
Return example:
{
"code": 200,
"status": 0,
"data": {
"error": [
{
"message": "Two-letter country code (ISO) is missing or wrong",
"report_data": {
"day": "2022-01-18",
"iso": "USA",
"adsource_id": "16",
"placement_id": "abc123",
"currency": "CNY",
"income": "50",
"fill": "800"
}
},
{
"message": "Advertising network ID is missing or wrong",
"report_data": {
"day": "2022-01-19",
"iso": "CN",
"adsource_id": "475",
"placement_id": "22",
"currency": "CNY",
"income": "20",
"fill": "600",
"impression": "100"
}
}
]
}
}
4 Application Management
4.1 Get application classification
Request path: /api/app/allcategory
Request Parameters: None
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| first_category | Array | Y | First level classification |
| first_category.id | String | Y | Category id |
| first_category.name_cn | String | Y | Chinese name |
| first_category.name_en | String | Y | English name |
| sub_category | Array | Y | Secondary classification |
| sub_category.id | String | Y | Secondary classification id |
| sub_category.pid | String | Y | The corresponding first-level classification id |
| sub_category.name_cn | String | Y | Chinese name |
| sub_category.name_en | String | Y | English name |
Return example:
{
"code": 200,
"status": 0,
"data": {
"first_category": [
{
"id": "1",
"name_cn": "Game",
"name_en": "Game"
},
{
"id": "2",
"name_cn": "Application",
"name_en": "App"
}
],
"sub_category": [
{
"id": "101",
"name_cn": "action",
"name_en": "Action",
"pid": "1"
},
{
"id": "102",
"name_cn": "Adventure",
"name_en": "Adventure",
"pid": "1"
}
...
]
}
}
4.2 Get the application
Request path: /api/app/apps
Request Parameters:
If app_uuids are passed, page will be ignored. Has_more and total will only be returned if app_uuids are not passed
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| app_uuids | Stirng | N | Application ID | Maximum of 100 accepted at a time |
| page | Int | N | Number of pages Default 1 | 100 items per page |
Return fields:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| total | Int | N | total | |
| has_more | Int | N | is there more | |
| app_list | Array | Y | Application information | |
| app_list.app_uuid | String | Y | Developer application ID | |
| app_list.app_name | String | Y | Application name | |
| app_list.category_id | Int | Y | Secondary classification | |
| app_list.app_url | String | Y | App store link | |
| app_list.package_name | String | Y | Application package name | |
| app_list.os | Int | Y | Application platform | 1:Android 2:iOS |
| app_list.is_release | Int | Y | Is it on the shelves? | 1: Not on the shelves 2: Already on the shelves |
Request Example
curl --location --request POST 'https://openapi.tradplusad.com/api/app/apps?sign=5DE008C88087D8556D276A9E5B8E37E6×tamp=1629525680&nonce=5c672d4e9628d0a7' \
--header 'bear: 157E4A5D-3877-1236-DE06-457FT3F70C4' \
--header 'Content-Type: application/json' \
--data '{"app_uuids":"348FA2C4CFA91471D09DC529EAB1459E","page":1}'
Return to sample:
{
"code": 200,
"status": 0,
"data": {
"has_more": 0,
"total": 25,
"app_list": [
{
"app_uuid": "A741926221D7FEFBCB179D08B4477713",
"app_name": "test1",
"os": 1,
"is_release": 2,
"package_name": "com.test1",
"app_url": "http://www.test1.com",
"category_id": 102
},
{
"app_uuid": "4F1E43B002376A505FFFB03F04C170E5",
"app_name": "test2",
"os": 1,
"is_release": 2,
"package_name": "com.test.4iphone",
"app_url": "http://www.test2.com",
"category_id": 111
},
...
]
}
}
4.3 Create and edit applications
Request path: /api/app/store
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| app_list | Array | Y | app information | Maximum of 10 at a time, any more will be discarded |
| app_list.app_uuid | String | N | Developer application ID | Editor must pass |
| app_list.app_name | String | N | Application name | Editor must pass |
| app_list.os | Int | N | Application platform 1: Android 2: iOS | Cannot be edited after creation |
| app_list.package_name | String | N | Application package name | Create must pass |
| app_list.app_url | String | N | App store link | Note: only available for ios. If it is passed, it means that the application has been put on the shelves, and the listed app information will be automatically used. So app_name and package_name do not need to be passed at this time. If passed, they will be overwritten. |
| app_list.category_id | Int | N | Classification reference 3.1 Get application classification | Create must pass |
| app_list.direction | Int | N | screen orientation | 1-vertical screen 2-horizontal screen 0-adaptive |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| list | Array | Y | Application information |
| list.app_uuid | Stirng | N | Developer application ID |
| list.app_name | Stirng | N | Application name |
| list.error_message | Stirng | N | Error message, empty character indicates success |
Request Example
curl --location --request POST 'https://openapi.tradplusad.com/api/app/store?sign=5DE008C88087D8556D276A9E5B8E37E6×tamp=1629525680&nonce=5c672d4e9628d0a7' \
--header 'bear: 157E4A5D-3877-1236-DE06-457FT3F70C4' \
--header 'Content-Type: application/json' \
--data '{"app_list":[{"app_uuid":"","app_name":"API\u5e94\u7528","os":1,"package_name":"api","app_url":"","category_id":101,"direction":1}]}'
Return to sample:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"app_uuid": "",
"app_name": "a1",
"error_message": "Application name already exists"
},
{
"app_uuid": "A741926221D7FEFBCB179D08B4477713",
"app_name": "test1",
"error_message": ""
}
]
}
}
5 Advertising space management
5.1 Obtain advertising space
Request path: /api/seat/seats
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| app_uuid | Stirng | N | A single application ID can obtain all advertising slots under an application | app_uuid and adseat_uuid are mutually exclusive. Pass only app_uuid. |
| adseat_uuids | String | N | Advertising slot ID, multiple commas separated, return up to 100 | |
| page | String | N | Number of pages Default 1 | 100 items per page |
Return fields:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| has_more | Int | N | ||
| total | Int | N | ||
| adseat_list | Array | Y | ||
| adseat_list.app_uuid | String | Y | Developer application ID | |
| adseat_list.seat_name | String | Y | Advertising slot name | |
| adseat_list.adseat_uuid | String | Y | Advertising slot ID | |
| adseat_list.cache_num | Int | Y | Number of parallel requests | |
| adseat_list.ad_type | Int | Y | Ad types: 1 Native 2 Interstitial 3 Splash 4 Banner 5 Rewarded video | |
| adseat_list.use_frequency | Int | Y | Whether to set the display frequency online: 1 Yes 0 No | |
| adseat_list.frequency_limit | Int | Y | Impression limit | |
| adseat_list.frequency_unit_count | Int | Y | unit interval | |
| adseat_list.frequency_unit | Int | Y | Times unit: 1 minute 2 hours 3 days | eg: Every 5(frequency_unit_count) minutes (frequency_unit) Display 10 times (frequency_limit) |
| adseat_list.ad_type_template | Int | N | Native template type Standard Native: 1 Native Banner: 2 Draw information flow: 3 Native splash: 4 | Native type return |
| adseat_list.refresh_time | Int | N | Refresh time | native Banner, Banner return |
| adseat_list.skip_time | Int | N | Show skip button after n seconds | Splash, the native splash type returns |
| adseat_list.countdown_time | Int | N | Total countdown time | Splash, the native splash type returns |
| adseat_list.is_skip | Int | N | Whether it can be skipped | Splash, return the native splash character type |
| adseat_list.monetary_name | String | N | Bonus items | Incentive video type returns |
| adseat_list.monetary | Int | N | Number of rewards | Incentive video type returns |
Request Example
curl --location --request POST 'https://openapi.tradplusad.com/api/seat/seats?sign=5DE008C88087D8556D276A9E5B8E37E6×tamp=1629525680&nonce=5c672d4e9628d0a7' \
--header 'bear: 157E4A5D-3877-1236-DE06-457FT3F70C4' \
--header 'Content-Type: application/json' \
--data '{"app_uuid":"348FA2C4CFA91471D09DC529EAB1459E", "adseat_uuids":"","page":1}'
Return to sample:
{
"code": 200,
"status": 0,
"data": {
"has_more": 0,
"total": 58,
"adseat_list": [
{
"app_uuid": "A741926221D7FEFBCB179D08B4477713",
"seat_name": "cp1",
"adseat_uuid": "E1FF0FF0BFF1EBDB61C0FED50E66229D",
"ad_type": 2,
"cache_num": 2,
"use_frequency": 0,
"frequency_limit": 0,
"frequency_unit_count": 0,
"frequency_unit": 0
},
{
"app_uuid": "1BCEFCAD3011A276134CC6225E724064",
"seat_name": "bzys",
"adseat_uuid": "D202406D331F32A5BBD1231065BAD7A0",
"ad_type": 1,
"cache_num": 2,
"use_frequency": 0,
"frequency_limit": 0,
"frequency_unit_count": 0,
"frequency_unit": 0,
"ad_type_template": 1
},
...
]
}
}
5.2 Create and edit advertising slots
Request path: /api/seat/store
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| adseat_list | Array | Y | A maximum of 10 items will be discarded. | |
| adseat_list.app_uuid | String | Y | Developer application ID | Developer application ID, which cannot be edited after creation. |
| adseat_list.seat_name | String | Y | Advertising slot name must be passed when creating | |
| adseat_list.adseat_uuid | String | N | Advertising slot ID must be passed by editors | |
| adseat_list.cache_num | Int | N | Number of advertising parallel requests, default 2 | Create a must-pass splash range: 1 |
| adseat_list.ad_type | Int | Y | Ad types: 1 Native 2 Interstitial 3 Splash 4 Banner 5 Rewarded video | Ad type must be passed when created and cannot be edited after creation. |
| adseat_list.use_frequency | Int | N | Whether to set the display frequency online: Default: No | 1 yes 0 no |
| adseat_list.frequency_limit | Int | N | The maximum number of impressions is n impressions, default 1 | |
| adseat_list.frequency_unit_count | Int | N | Unit interval, default 1 | |
| adseat_list.frequency_unit | Int | N | Unit of times, minutes: 1 hour: 2 days: 3 Default 1 | |
| adseat_list.ad_type_template | Int | N | 1 Standard Native 2 Native Banner 3 Draw information flow 4 Native splicing splash | It must be passed when creating a native type and cannot be edited after creation. |
| adseat_list.refresh_time | Int | N | Automatic refresh, range: 15~150 seconds | Only effective for Banners and native Banners You can not pass it, which means it will not be refreshed. |
| adseat_list.skip_time | Int | N | Display skip button after n seconds Range: 0~10 seconds Default is 2 | It must be passed when creating a splash and a native splash. It only takes effect for the splash and native opening screens. |
| adseat_list.countdown_time | Int | N | Total countdown time Range: 3~10 seconds, default 5 | Required when creating splash and native opening screen Only effective for opening screen and native opening screen The total countdown time must be greater than skip_time |
| adseat_list.is_skip | Int | N | Whether it can be skipped, 1 yes 0 no, the default is yes | It must be passed when creating a splash and a native splash. It only takes effect for the splash and native opening screens. |
| adseat_list.monetary_name | String | N | Bonus items | Only works for rewarded videos |
| adseat_list.monetary | Int | N | Number of rewards | Only works for rewarded videos |
Return fields:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| list | Array | Y | ||
| list.adseat_uuid | String | Y | ||
| list.seat_name | String | Y | ||
| list.error_message | String | Y | Error message, empty character indicates success |
Request Example
curl --location --request POST 'https://openapi.tradplusad.com/api/seat/store?sign=5DE008C88087D8556D276A9E5B8E37E6×tamp=1629525680&nonce=5c672d4e9628d0a7' \
--header 'bear: 157E4A5D-3877-1236-DE06-457FT3F70C4' \
--header 'Content-Type: application/json' \
--data '{"adseat_list":[{"app_uuid":"BA04D9C5A5E736CCDA8003BC5D936BE5","seat_name":"API\u521b\u5efa","ad_type":"5","adseat_uuid":""}]}'
Return to sample:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"adseat_uuid": "9D0A151A3B9169369CB75873FD86713E",
"seat_name": "test native Banner",
"error_message": ""
},
{
"adseat_uuid": "",
"seat_name": "",
"error_message": "Application ID required"
}
]
}
}
6 Mediation group management
6.1 Query the list of intermediary groups
Request path: /api/intermediary/group_list
Request Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
| currency | String | Y | Currency unit, USD or CNY |
| adseat_uuid | String | Y | Advertising slot uuid |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| abtest_name | String | Y | AB test group name |
| bucket_id | String | Y | AB group id |
| group_id | String | Y | Mediation group id |
| group_name | String | Y | Mediation group name |
| bidding_adsource_cache_num | String | Y | Bidding advertising source reservation number |
| bidding_floor_price | String | Y | Bidding base price |
| cache_num | String | Y | Number of parallel requests |
| is_preset | String | Y | Whether to preset the mediation group 1-Yes 0-No |
| is_cold_scene | String | Y | Whether to cold start 1-yes 0-no |
| country | String | Y | country region |
| city | String | Y | City |
| rule_json | String | Y | Traffic grouping rules |
| segment_tag | String | Y | Custom user properties |
| status | String | Y | Status 1-on 2-off |
| preset_country | String | Y | Preset intermediary group countries |
Request Example
curl --location 'https://openapi.tradplusad.com/api/intermediary/group_list' \
--header 'bear: EEB82554-BD76-1474-EB7E-3785B5107872' \
--header 'Content-Type: application/json' \
--data '{"currency": "USD","adseat_uuid": "15974C36532C36C820D5B9AAEC21EB12"}'
Return to sample:
{
"code": 200,
"status": 0,
"data": [
{
"group_id": "56646",
"group_name": "custom",
"bucket_id": "8094",
"bidding_adsource_cache_num": "2",
"bidding_floor_price": "0",
"cache_num": "2",
"is_preset": "0",
"is_cold_scene": "0",
"country": "",
"city": "",
"rule_json": "{}",
"segment_tag": "",
"status": "1",
"preset_country": "",
"abtest_name": "Control group"
},
{
"group_id": "0",
"group_name": "All countries",
"bucket_id": "8094",
"bidding_adsource_cache_num": "2",
"bidding_floor_price": "0",
"cache_num": "2",
"is_preset": "0",
"is_cold_scene": "0",
"country": "",
"city": "",
"rule_json": "{}",
"segment_tag": "",
"status": "1",
"preset_country": "",
"abtest_name": "Control group"
},
{
"group_id": "56647",
"group_name": "custom",
"bucket_id": "8095",
"bidding_adsource_cache_num": "2",
"bidding_floor_price": "0",
"cache_num": "2",
"is_preset": "0",
"is_cold_scene": "0",
"country": "",
"city": "",
"rule_json": "{}",
"segment_tag": "",
"status": "1",
"preset_country": "",
"abtest_name": "Experimental group 1"
},
{
"group_id": "0",
"group_name": "All countries",
"bucket_id": "8095",
"bidding_adsource_cache_num": "2",
"bidding_floor_price": "0",
"cache_num": "2",
"is_preset": "0",
"is_cold_scene": "0",
"country": "",
"city": "",
"rule_json": "{}",
"segment_tag": "",
"status": "1",
"preset_country": "",
"abtest_name": "Experimental group 1"
}
]
}
6.2 Create and edit mediation groups
Request path: /api/intermediary/store
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| currency | String | Y | Currency unit, USD or CNY | |
| group_list | Array | Y | Mediation group list | A maximum of 10 items will be discarded. |
| group_list.group_id | int | N | Mediation group ID | Required for editing. If 0 is passed in, the default group will be updated. |
| group_list.group_name | String | Y | Mediation group name | |
| group_list.adseat_uuid | String | Y | Advertising slot ID | |
| group_list.bucket_id | Int | Y | AB group id | Editing is not supported |
| group_list.is_preset | Int | Y | Preset mediation group | 1-Yes 0-No, editing is not supported |
| group_list.is_cold_scene | Int | Y | cold start | 1 Yes 0 No, only splash is supported, editing is not supported |
| group_list.bidding_floor_price | float | N | Bidding base price | |
| group_list.cache_num | Int | Y | Number of parallel requests | The upper limit is 20 |
| group_list.bidding_adsource_cache_num | Int | Y | Bidding advertising source reservation number | -1 means no limit, the upper limit of the limit is 20 |
| group_list.country | Int | N | Country/Region | National ISO code, multiple selections separated by English commas, refer to 8.1 |
| group_list.city | Int | N | Province and city | Province and city ID, multiple selections separated by commas, refer to 8.2 |
| group_list.segment_tag | Int | N | Developer-defined Segment Tag | Multiple Segment Tags separated by English commas |
| group_list.preset_country | String | N | Preset intermediary group countries | National ISO code, multiple selections separated by English commas |
| group_list.placement_ids | String | N | Advertising source ID | Multiple selections separated by commas |
| group_list.rule_json | String | N | Traffic grouping rules | json format refer to Appendix 3 |
Return fields:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| list | Array | Y | ||
| list.group_id | String | Y | ||
| list.group_name | String | Y | ||
| list.error_message | String | Y | Error message, empty character indicates success |
Request Example
curl --location 'https://openapi.tradplusad.com/api/intermediary/store' \
--header 'bear: EEB82554-BD76-1474-EB7E-3785B5107872' \
--header 'Content-Type: application/json' \
--data '{"currency": "USD","group_list": [{"group_id":56657,"group_name":"custom","adseat_uuid":"8C321665C992CDDBE6F5892409A67612","bucket_id":0,"is_pres et":0,"is_cold_scene":0,"bidding_floor_price":1,"cache_num":0,"country":"US,JP","city":"","bidding_adsource_ca che_num":-1,"segment_tag":"","rule_json":"{\"rules\":[{\"name\":\"app_ver\",\"type\":\"version\",\"op\":\"in\ ",\"data\":[\"1\",\"2\"]}],\"timezoneOffset\":\"0\"}","placement_ids":"653046","preset_country":"AM,DE,SG"}]}'
Return to sample:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"group_id": "",
"group_name": "",
"error_message": ""
}
]
}
}
6.3 Query the advertising source list of the mediation group
Request path: /api/intermediary/group_placements
Request Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
| currency | String | Y | Currency unit, USD or CNY |
| adseat_uuid | String | Y | Advertising slot uuid |
| bucket_id | Int | N | AB group id |
| group_id | Int | N | Mediation group id |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| adseat_uuid | String | Y | |
| bucket_id | String | Y | AB group id |
| group_id | String | Y | Mediation group id |
| placement_list | Array | Y | Mediation group ad source list |
| placement_list.bucket_id | Obj | Y | AB group id |
| placement_list.bucket_id.group_id | Obj | Y | Mediation group id |
| placement_list.bucket_id.group_id.header_bidding_list | Array | N | HeaderBidding area |
| placement_list.bucket_id.group_id.auto_optimization_list | Array | N | Sort regions by price |
| placement_list.bucket_id.group_id.manual_sorting_list | Array | N | Manual programming area |
| placement_list.bucket_id.group_id.low_priority_list | Array | N | low priority area |
| placement_list.bucket_id.group_id.closed_list | Array | N | Source closed in mediation group |
| Corresponding list content: | |||
| id | String | Y | Mediation group ad source id |
| status | String | Y | Mediation group ad source status 1 on 0 off |
| adsource_id | String | Y | ad network id |
| group_id | String | Y | Mediation group id |
| group_name | String | Y | Mediation group name |
| bucket_id | String | Y | AB group id array |
| bucket_name | String | Y | AB group name |
| is_header_bidding | String | Y | Whether to enable Header Bidding 1 Yes 0 No |
| is_auto_price | String | Y | Whether to turn on automatic price 1 on 2 off |
| ecpm_forcast | String | Y | forecastecpm |
| rate | String | Y | sort price |
| bid_floor | String | Y | bid bottom price |
| fequency_capping_day | String | Y | Frequency configuration, display limit (daily) |
| frequency_capping_hour | String | Y | Frequency configuration, display limit (hourly) |
| fequency_capping_min | String | Y | Frequency configuration, display limit (per minute) |
| sdk_request_timeout | String | Y | SDK request ad timeout duration |
| request_interval_status | String | Y | Request interval control, 1 on, 2 off |
| request_no_fill_num | String | Y | Request interval control, no filling times in a row |
| request_interval | String | Y | Request interval control, request interval, unit seconds |
| auto_optimization | String | Y | Sorting area 1 Sort by price 2 Sort manually 3 Low priority |
Return example:
{
"code": 200,
"status": 0,
"data": {
"adseat_uuid": "08056F3650B0B65B79714A1482FE5EEE",
"group_id": "",
"bucket_id": "",
"placement_list": {
"0": {
"0": {
"auto_optimization_list": {
"0": {
"id": "157751",
"status": "1",
"adsource_id": "16",
"group_id": "0",
"group_name": "Default group",
"bucket_id": "0",
"bucket_name": "",
"is_header_bidding": "0",
"is_auto_price": "1",
"ecpm_forcast": "",
"rate": "3",
"fequency_capping_day": "",
"frequency_capping_hour": "",
"fequency_capping_min": "",
"sdk_request_timeout": "10",
"request_interval_status": "",
"request_no_fill_num": "",
"request_interval": "",
"auto_optimization": "1"
}
}
},
"2396": {
"auto_optimization_list": {
"0": {
"id": "157801",
"status": "1",
"adsource_id": "16",
"group_id": "2396",
"group_name": "cn group",
"bucket_id": "0",
"bucket_name": "",
"is_header_bidding": "0",
"is_auto_price": "1",
"ecpm_forcast": "",
"rate": "3",
"fequency_capping_day": "2",
"frequency_capping_hour": "1",
"fequency_capping_min": "3",
"sdk_request_timeout": "10",
"request_interval_status": "1",
"request_no_fill_num": "3",
"request_interval": "180",
"auto_optimization": "1"
}
}
}
}
}
}
}
6.4 Batch modify the properties of advertising sources in the mediation group (need to enable new AB test permission)
Request path: /api/intermediary/update_group_placement
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| currency | String | Y | Currency unit CNY or USD | |
| placement_list | Array | Y | Mediation group ad source array | Up to 10 at a time |
| placement_list.id | Int | Y | Mediation group ad source id | |
| placement_list.sdk_request_timeout | Int | N | SDK request ad timeout duration | |
| placement_list.fequency_capping_day | Int | N | Frequency configuration, display limit (daily) | |
| placement_list.frequency_capping_hour | Int | N | Frequency configuration, display limit (hourly) | |
| placement_list.fequency_capping_min | Int | N | Frequency configuration, display limit (per minute) | |
| placement_list.request_interval_status | Int | N | Request interval control 1 on 2 off | |
| placement_list.request_no_fill_num | Int | N | Request interval control Number of consecutive no fillings | |
| placement_list.request_interval | Int | N | Request interval control. Find the interval in seconds. | |
| placement_list.is_auto_price | Int | N | Whether to turn on automatic price 1 on 2 off | |
| placement_list.rate | Int | N | Sorting price optional range 0.01 - 10000 |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| data | Array | Y | |
| data.placement_id | Int | Y | Mediation group ad source id |
| data.error_message | String | Y | error message |
Return example:
{
"code": 200,
"status": 0,
"data": [
{
"placement_id": 157651,
"error_message": ""
},
{
"placement_id": 157652,
"error_message": ""
},
{
"placement_id": 122,
"error_message": "Ad source error"
}
]
}
6.5 Turn on or off the mediation group ad source
Request path: /api/intermediary/on_off_placement
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| status | Int | Y | Status 1 enabled 0 disabled | |
| placement_id_list | Array | Y | Mediation group advertising source id array | Up to 10 at a time |
| placement_id_list.id | Int | Y | Mediation group ad source id |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| data | Array | Y | |
| data.placement_id | Int | Y | Mediation group ad source id |
| data.error_message | String | Y | error message |
Return example:
{
"code": 200,
"status": 0,
"data": [
{
"placement_id": 157651,
"error_message": ""
},
{
"placement_id": 157652,
"error_message": ""
},
{
"placement_id": 122,
"error_message": "Ad source error"
}
]
}
7 Advertising source management
7.1 Query advertising network authorization information
Request path: /api/PlacementApiToken/api_tokens
Request Parameters: None
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| data | Array | Y | |
| data.api_token_id | Int | Y | Network authorization id |
| data.account_name | String | Y | Account name |
| data.adsource_id | Int | Y | ad network id |
| data.is_open | Int | Y | Whether to activate 1 Yes 0 No |
Return example:
{
"code": 200,
"status": 0,
"data": [
{
"id": 1466,
"account_name": "Default account",
"adsource_id": 17,
"is_open": 0
},
{
"id": 2796,
"account_name": "Default account",
"adsource_id": 43,
"is_open": 0
}
]
}
7.2 Query advertising source information
Request path: /api/placement/placements
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| currency | String | Y | Currency unit CNY or USD | |
| placement_ids | String | N | Advertising source id | Comma separated, up to 100 |
| adsource_ids | String | N | ad network id | Comma separated |
| app_uuids | String | N | application id | Comma separated, up to 100 |
| adseat_uuids | String | N | Advertising slot id | Comma separated, up to 100 |
| fields | String | N | Fields that need to be returned | Default all |
| page | Int | N | Number of pages Default 1 | 100 items per page |
| is_on | Int | N | Filter ad source enabled status: Default 1 | 0 returns only closed; 1 returns only enabled; -1 returns enabled + closed (all); when not passed or empty, the behavior is consistent with history, and the default is only enabled |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| has_more | Int | Y | Is there more 1 Yes 0 No |
| placements | Array | Y | |
| placements.placement_id | String | Advertising source id | |
| placements.name | String | Ad source name | |
| placements.adsource_id | String | ad network id | |
| placements.is_header_bidding | String | Whether to enable Header Bidding | |
| placements.placement_config | Json | Advertising space parameter configuration | demo:{"appId":"5175107","placementId":"946159096","adsource_type": "1"} |
| placements.api_token_id | String | Authorization id | |
| placements.account_name | String | Authorized account name | |
| placements.app_uuid | String | Application ID | |
| placements.app_name | String | Application name | |
| placements.os | String | Application system 1 Android 2 ios | |
| placements.adseat_uuid | String | Advertising slot uuid | |
| placements.seat_name | String | Advertising slot name | |
| placements.ad_type | String | Advertising slot type | |
| placements.intermediary_group | Array | Mediation group advertising source information reference 6.1 |
Return example:
{
"code": 200,
"status": 0,
"data": {
"placements": [
{
"placement_id": "23399",
"name": "Pangle(cn)_int_1",
"adsource_id": "17",
"is_header_bidding": "0",
"placement_config": {
"appId": "5175107",
"placementId": "946159096",
"adsource_type": "1",
"app_download_setup": "0",
"popconfirm": "0",
"is_template_rendering": "1"
},
"api_token_id": "1466",
"account_name": "Default account",
"app_uuid": "6B5AE472641DB544632AE2E84F952658",
"app_name": "Stickman Brawl",
"os": "1",
"adseat_uuid": "6ECF7327CD62D9BAC9965FC57CC27249",
"seat_name": "Interstitial Advertisement",
"ad_type": "2",
"currency": "USD",
"intermediary_gorup": [
{
"id": "33489",
"status": "1",
"group_id": "0",
"group_name": "Default group",
"bucket_id": "0",
"bucket_name": "",
"is_auto_price": "1",
"ecpm_forcast": "",
"rate": "0",
"fequency_capping_day": "",
"frequency_capping_hour": "",
"fequency_capping_min": "",
"sdk_request_timeout": "60",
"auto_optimization": "1",
"sort": "0"
}
]
}
],
"has_more": 0
}
}
7.3 Create and edit advertising source information (need to enable new AB test permission)
Supports creation and editing of ad sources: Reference Appendix 2
Request path: /api/placement/store
Request Parameters:
1 Create ad source
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| currency | String | Y | Currency unit CNY or USD | |
| placement_list | Array | Y | Ad source configuration | Up to 10 at a time |
| placement_list.name | String | Y | Ad source name | Duplication is not allowed in the same ad slot |
| placement_list.api_token_id | Int | Y | Network authorization id | Reference 7.1 |
| placement_list.adsource_id | Int | Y | ad network id | Reference 8.2 |
| placement_list.adseat_uuid | String | Y | Advertising slot uuid | Advertising sources supported by ad slot types, please refer to Appendix 2 |
| placement_list.is_header_bidding | Int | N | Whether to enable Header Bidding | 1 Yes, 0 No Refer to Appendix 1 |
| placement_list.is_auto_price | Int | N | Whether to turn on automatic price | 1 is on, 2 is off, non-Header Bidding is required. |
| placement_list.rate | Float | N | sort price | Associated currency, required for non-Header Bidding, and must be greater than 0.01 and less than 10000 |
| placement_list.placement_config | Json | Y | Advertising source parameter configuration | Reference Appendix 2 |
| placement_list.is_native | Int | N | Advertising support type | 1 Native 0 Normal; only for Banner ad slots, splash ad slots, and interstitial ad slots (Banner ad slots add Banner ads is_native=0; support adding native Banner ads is_native=1; the same applies to splash/interstitial. For parameter configuration of different advertising sources, please refer to Appendix 2) |
| placement_list.is_bottom | Int | N | Covert advertising | 1 Yes 0 No; this field is invalid when Header Bidding is turned on |
| placement_list.is_auto_create | Int | N | Whether to automatically create | 1-Yes 0-No, currently only supports Meta and Admob |
| placement_list.auto_app_id | string | N | Automatically create the required App ID | Only for Meta and Admob platforms |
2 Edit ad source
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| currency | String | Y | Currency unit CNY or USD | |
| placement_list | Array | Y | Ad source configuration | |
| placement_list.placement_id | String | Y | Advertising source id | |
| placement_list.name | String | N | Ad source name | |
| placement_list.api_token_id | Int | N | Network authorization id | Reference 7.1 |
| placement_list.is_auto_price | Int | N | Whether to turn on automatic price | Non-Header Bidding can be modified, 1 is on, 2 is off |
| placement_list.rate | Int | Float | sort price | Associated currency, non-Header Bidding can be modified |
| placement_list.placement_config | Json | Y | Advertising source parameter configuration | Only style configuration can be modified |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| data | Array | Y | |
| data.placement_id | Int | Y | Advertising source id |
| data.name | String | Y | Ad source name |
| data.placement_config | String | Y | Incoming ad source parameter configuration |
| data.error_message | String | Y | Error message, no indication of success |
Request Example
curl --location --request POST 'https://openapi.tradplusad.com/api/placement/store?sign=5DE008C88087D8556D276A9E5B8E37E6×tamp=1629525680&nonce=5c672d4e9628d0a7' \
--header 'bear: 157E4A5D-3877-1236-DE06-457FT3F70C4' \
--header 'Content-Type: application/json' \
--data '{"currency":"USD","placement_list":[{"name":"API-1\u521b\u5efa\u5e7f\u544a\u6e90","api_token_id":1640,"adsource_id":16,"adseat_uuid":"42D65EDFC13A93B5B25F70FC57280A97","is_header_bidding":0,"is_auto_price":1,"rate":0.03,"placement_config":"{\"placementId\":\"9499192321\",\"appId\":\"53102791\",\"is_template_rendering\":2,\"video_mute\":1,\"auto_play_video\":1,\"video_max_time\":5}","is_bottom":1,"is_native":1}]}'
Return example:
{
"code": 200,
"status": 0,
"data": [
{
"placement_id": 0,
"name": "test_yky1",
"placement_config": "{ "appId": "zzz", "placementId": "23","video_mute":1 }",
"error_message": "Duplicate ad source name"
},
{
"placement_id": 859455,
"name": "test_yky2",
"placement_config": "{ "appId": "zzz", "placementId": "23","video_mute":1 }",
"error_message": ""
},
]
}
8 A/B Test Management
8.1 A/B test list
Request path: /api/abtest/list
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| abtest_id | Int | N | A/B test ID | After incoming, filter according to the specified A/B test |
| adseat_uuid | String | N | Advertising slot UUID | Filter by ad slot after passing in |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| data | Array | Y | A/B test list |
| data[].abtest_id | Int | Y | A/B test ID |
| data[].name | String | Y | A/B test name |
| data[].app_uuid | String | Y | Application UUID |
| data[].adseat_uuid | String | Y | Advertising slot UUID |
| data[].share_adseat_uuid | String | Y | Shared ad slot UUID |
| data[].status | Int | Y | A/B test status 0-To be started manually 1-To be started at specified time 2-In progress 3-Ended |
| data[].group_id | String/Int | Y | Group ID |
| data[].ab_type | Int | Y | A/B test type (1 advertising position A/B test, 2 intermediary group A/B test) |
| data[].start_time | Int | Y | start time (timestamp) |
| data[].end_time | Int | Y | end time (timestamp) |
| data[].is_system | Int | Y | Is it smart hosting? |
| data[].reverse | Int | Y | Whether the user reverses the offload (0/1) |
| data[].auto_hand | Int | Y | Whether to take effect manually (0/1) |
| data[].available_time | Int | Y | Plan effective time (timestamp) |
| data[].available_time_zone | String | Y | Effective time zone |
| data[].description | String | Y | Remark |
| data[].is_bind_share_adseat | Int | Y | Whether to bind shared advertising slots (0/1) |
| data[].buckets | Array | Y | grouped list |
| data[].buckets[].id | Int | Y | Group ID |
| data[].buckets[].name | String | Y | Group name |
| data[].buckets[].percent | String/Int | Y | Diversion ratio |
| data[].buckets[].weight | Int | Y | weight |
| data[].buckets[].ab_status | Int | Y | Group status 1-Open 2-Pause 3-End |
| data[].buckets[].is_win | Int | Y | Whether to win the group (0/1) 1-winning group |
| data[].buckets[].bucket_group_id | Int | Y | group number |
| data[].buckets[].is_share_bucket | String | Y | Whether the group uses shared advertising slots (0/1) 1 means use |
Request Example
curl--location'http://openapi.tradplusad.com/api/abtest/list?sign=A33B4508815081F9D41D96E96F7B297E×tamp=1666261328&nonce=5c672d4e9628d0a7'
--header'bear: EEB82554-BD76-1474-EB7E-3785B5107872'
--header'Content-Type: application/json'
--data'{"adseat_uuid":"E6379DA920E44F5DC13A06FCBE09E212"}'
Return to sample
{
"code": 200,
"status": 0,
"data": [
{
"name": "ABTest_Modify_20260312",
"status": "2",
"group_id": "0",
"ab_type": "1",
"start_time": "1773395668",
"end_time": "0",
"is_system": "0",
"reverse": "0",
"auto_hand": "1",
"available_time": "0",
"available_time_zone": "8",
"description": "modify by openapi11",
"is_bind_share_adseat": "1",
"abtest_id": "3203",
"app_uuid": "8EFC6E4C26E961B3C68C274CE4862511",
"adseat_uuid": "E6379DA920E44F5DC13A06FCBE09E212",
"share_adseat_uuid": "797A392C56327B804E3547DD76E29812",
"buckets": [
{
"id": "8417",
"name": "Group C-Add-Update",
"percent": "1",
"weight": "1",
"ab_status": "2",
"is_win": "0",
"bucket_group_id": "3",
"is_share_bucket": "0"
},
{
"id": "8416",
"name": "Group B-Update",
"percent": "45",
"weight": "45",
"ab_status": "1",
"is_win": "0",
"bucket_group_id": "2",
"is_share_bucket": "0"
},
{
"id": "8415",
"name": "Group A-Update",
"percent": "55",
"weight": "55",
"ab_status": "1",
"is_win": "0",
"bucket_group_id": "1",
"is_share_bucket": "1"
}
]
}
]
}
8.2 Creating A/B tests
Request path: /api/abtest/store
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| name | String | Y | A/B test name | Maximum 30 characters |
| ab_type | Int | Y | A/B testing types | 1 A/B test for advertising space, 2 A/B test for intermediary group |
| app_uuid | String | Y | Application ID | |
| adseat_uuid | String | Y | Advertising slot ID | Must match app_uuid |
| group_id | String/Int | N | Group ID | Required when ab_type=2 is passed; 0 indicates all country groups; if not passed, the default is empty |
| auto_hand | Int | Y | Whether to take effect manually | 1 turns on manually, 0 turns on automatically according to time |
| available_time | String | N | Effective time | Required when auto_hand=0, recommended format: Y-m-d H:i:s |
| available_time_zone | String | N | time zone | Required when auto_hand=0, optional: -8, 0, 8 |
| buckets | Array | Y | A/B group configuration | At least 2 groups |
| buckets[].name | String | Y | Group name | Group name cannot be repeated |
| buckets[].percent | float | Y | Diversion ratio | Pass value 0~100 according to business rules; Note: The sum of all groups ranges from 99~100 (tolerance 1) |
| buckets[].weight | Int | Y | weight | 0~100 |
| buckets[].ab_status | Int | Y | Group status | Fixed passing 1 when creating (enabled) |
| buckets[].copy_group_config | Int | N | Whether to copy the current configuration | 1 copies the current configuration (recommended); other values do not copy the current configuration (the first group will be forced to 1) |
| buckets[].is_share_bucket | Int | N | Whether the group uses shared ad slots | It takes effect when is_bind_share_adseat=1, 1 is used |
| description | String | N | Remark | Maximum 100 characters |
| is_bind_share_adseat | Int | N | Whether to bind shared advertising slots | 0 no, 1 yes |
| share_adseat_uuid | String | N | Shared ad slot ID | Required when is_bind_share_adseat=1 |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| abtest_id | Int | Y | A/B test ID |
| name | String | Y | A/B test name |
Request Example
curl--location'http://openapi.tradplusad.com/api/abtest/store?sign=A33B4508815081F9D41D96E96F7B297E×tamp=1666261328&nonce=5c672d4e9628d0a7'
--header'bear: EEB82554-BD76-1474-EB7E-3785B5107872'
--header'Content-Type: application/json'
--data'{"name":"ABTest_API","ab_type":1,"app_uuid":"8EFC6E4C26E961B3C68C274CE4862511","adseat_u uid":"E6379DA920E44F5DC13A06FCBE09E212","group_id":0,"auto_hand":0,"available_time":"2026-03-12 20:00:00","available_time_zone":"8","description":"openapi create abtest","is_bind_share_adseat":0,"share_adseat_uuid":"","buckets":[{"name":"Group A","percent":50,"weight":50,"ab_status":1,"copy_gro up_config":1,"is_share_bucket":0},{"name":"Group B","percent":50,"weight":50,"ab_status":1,"copy_group_config":1,"is_share_bucket":0}] }'
Return to sample
success:
{
"code": 200,
"status": 0,
"data": {
"abtest_id": 12345,
"name": "AB test_insert screen"
}
}
fail:
{
"code": 10002,
"status": 1,
"message": "Parameter error"
}
8.3 Editing A/B tests
Request path: /api/abtest/modify
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| abtest_id | Int | Y | A/B test ID | |
| name | String | Y | A/B test name | Maximum 30 characters |
| reverse | Int | N | Whether the user reverses the traffic | 0 No, 1 Yes; only supports A/B test ongoing settings |
| description | String | N | Remark | Maximum 100 characters |
| buckets | Array | Y | A/B group configuration | At least 2 groups |
| buckets[].id | Int | N | Group record ID | It must be passed when editing an existing group (obtained from the list interface); it will not be passed when adding a new group. |
| buckets[].bucket_group_id | Int | N | group number | It must be passed when editing an existing group (obtained from the list interface); it is not passed or 0 is passed when adding a new group. |
| buckets[].name | String | Y | Group name | Cannot be empty |
| buckets[].percent | float | Y | Diversion ratio | Pass value 0~100 according to business rules; Note: The sum of all groups ranges from 99~100 (tolerance 1) |
| buckets[].weight | Int | Y | weight | 0~100 |
| buckets[].ab_status | Int | Y | Group status | 1 starts, 2 pauses |
| buckets[].is_share_bucket | Int | N | Whether the group uses shared ad slots | It takes effect when is_bind_share_adseat=1, 1 means use; only supports modification when A/B testing is not enabled. |
| buckets[].copy_group_config | Int | N | Whether to copy the current configuration | Use when adding a new group: 1 copies the current configuration (recommended), other values do not copy the current configuration |
Request Example
curl--location'http://openapi.tradplusad.com/api/abtest/modify?sign=A33B4508815081F9D41D96E96F7B297E×tamp=1666261328&nonce=5c672d4e9628d0a7'
--header'bear: EEB82554-BD76-1474-EB7E-3785B5107872'
--header'Content-Type: application/json'
--data'{"abtest_id":3203,"name":"ABTest_Modify_20260312","reverse":1,"description":"modify by openapi11","buckets":[{"id":8415,"bucket_group_id":1,"name":"Group A-Update","percent":55,"weight":55,"ab_status":1,"is_share_bucket":1},{"id":8416,"bucket_group_id":2,"name": "Group B-Update","percent":45,"weight":45,"ab_status":1,"is_share_bucket":0},{"name":"Group C-New","percent":1,"weight":1,"ab_status":1,"copy_group_config":1,"is_share_bucket":0}]}'
Return to sample
success:
{
"code": 200,
"status": 0,
"data": {
"abtest_id": 12345,
"name": "ABTest_Modify"
}
}
fail:
{
"code": 10002,
"status": 1,
"message": "Parameter error"
}
8.4 Turn on A/B testing
Request path: /api/abtest/start
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| abtest_id | Int | Y | A/B test ID | Only A/B tests with "To be manually enabled" status enabled are supported. |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| abtest_id | Int | Y | A/B test ID |
| status | Int | Y | A/B test status (0-to be started manually, 1-to be started at a specified time, 2-in progress, 3-ended) |
Request Example
curl--location'http://openapi.tradplusad.com/api/abtest/start?sign=A33B4508815081F9D41D96E96F7B297E×tamp=1666261328&nonce=5c672d4e9628d0a7'
--header'bear: EEB82554-BD76-1474-EB7E-3785B5107872'
--header'Content-Type: application/json'
--data'{"abtest_id":3203}'
Return to sample
success:
{
"code": 200,
"status": 0,
"data": {
"abtest_id": 3208,
"status": 2
}
}
fail:
{
"code": 1001,
"status": 1,
"message": "Parameter error"
}
8.5 Turn off A/B testing
Request path: /api/abtest/close
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| abtest_id | Int | Y | A/B test ID | |
| bucket_id | Int | N | Winning group ID | Required when closing the "Active" AB test (used to specify the winning group) |
| type | Int | N | closure type | 1 normal shutdown, 2 smart hosting shutdown |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| abtest_id | Int | Y | A/B test ID |
| status | Int | Y | A/B test status (0-to be started manually, 1-to be started at a specified time, 2-in progress, 3-ended) |
Request Example
curl--location'http://openapi.tradplusad.com/api/abtest/close?sign=A33B4508815081F9D41D96E96F7B297E×tamp=1666261328&nonce=5c672d4e9628d0a7'
--header'bear: EEB82554-BD76-1474-EB7E-3785B5107872'
--header'Content-Type: application/json'
--data'{"abtest_id":3203,"bucket_id":8431,"type":1}'
Return to sample
success:
{
"code": 200,
"status": 0,
"data": {
"abtest_id": 3208,
"status": 3
}
}
fail:
{
"code": 1001,
"status": 1,
"message": "Parameter error"
}
9 Query general information
9.1 Query country information
Request path: /api/info/region
Request Parameters: None
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| list | Array | Y | |
| list.name | String | Y | Chinese name |
| list.name_en | String | Y | English name |
| list.iso | String | Y | Two-letter country code (ISO) |
Return example:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"name": "Belgium",
"name_en": "Belgium",
"iso": "BE"
},
{
"name": "Libya",
"name_en": "Libya",
"iso": "LY"
},
...
]
}
}
9.2 Query city information
Request path: /api/info/city
Request Parameters: None
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| list | Array | Y | |
| list.id | String | Y | id |
| list.pid | String | Y | superior id |
| list.name | String | Y | City |
Return example:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"id": "1",
"pid": "0",
"name": "Beijing"
},
{
"id": "2",
"pid": "0",
"name": "Tianjin City"
},
...
]
}
}
9.3 Advertising network query
Request path: /api/info/adsource_list
Request Parameters: None
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| list | Array | Y | |
| list.name | String | Y | Advertising platform name |
| list.adsource_id | Int | Y | tradplus advertising platform id |
Return example:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"name": "Meta",
"adsource_id": 1
},
{
"name": "Admob",
"adsource_id": 2
},
...
]
}
}
10 Advertising scene
10.1 Query advertising scenes
Request path: /api/AdScene/scenes
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| app_uuid | String | N | application uuid | |
| adseat_uuid | String | N | Advertising slot ID | |
| page | Int | N | Number of pages Default 1 | 100 items per page |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| has_more | Int | Y | Is there more 1 Yes 0 No |
| total | Int | Y | total quantity |
| adscene_list | Array | Y | |
| adscene_list.ad_scene_id | String | Y | Scene primary key ID |
| adscene_list.ad_scenes_name | String | scene name | |
| adscene_list.app_uuid | String | Application ID | |
| adscene_list.adseat_uuid | String | Advertising slot ID | |
| adscene_list.uuid | String | Scene uuid | sdk use |
| adscene_list.is_custom_uid | String | Whether to use custom scenes 1 Yes 0 No | |
| adscene_list.status | String | Status 1 enabled 2 disabled | |
| adscene_list.remark | String | Remark |
Return example:
{
"code": 200,
"status": 0,
"data": {
"has_more": 0,
"total": 1,
"adscene_list": [
{
"ad_scene_id": "260",
"ad_scenes_name": "tab",
"app_uuid": "38C0EB39AC0C015903E5CA6CA069AFF7",
"adseat_uuid": "2A7E2D218A488665581A608D7AC9AA6F",
"uuid": "76BE82DBAE98A3",
"is_custom_uid": "0",
"status": "1",
"remark": ""
}
]
}
}
10.2 Create and edit advertising scenes
Request path: /api/AdScene/store
Request Parameters:
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| adscene_list | Array | Y | Advertising scene information | |
| adscene_list.adseat_uuid | String | Y | Advertising slot ID | |
| adscene_list.ad_scene_id | Int | N | Advertising scene primary key id | The editor must pass it on. Corresponds to 9.1 ad_scene_id |
| adscene_list.ad_scene_name | String | Y | scene name | |
| adscene_list.status | Int | N | Create a must pass. Status 1 enabled 2 disabled | |
| adscene_list.remark | String | N | Remark | |
| adscene_list.is_custom_uid | Int | N | Create a must pass. Whether to use custom scenes 1 Yes 0 No | |
| adscene_list.custom_uid | String | N | Custom scene uid | Required when choosing to use a custom scenario and cannot be repeated |
Return fields:
| Field | Type | Required | Description |
|---|---|---|---|
| list | Array | Y | |
| list.adseat_uuid | String | N | Application ID |
| list.ad_scene_name | String | N | scene name |
| list.ad_scene_id | Int | N | scene primary key id |
| list.error_message | String | N | Error message, empty character indicates success |
Return example:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"adseat_uuid": "2A7E2D218A488665581A608D7AC9AA6F",
"ad_scene_name": "Reward interface",
"ad_scene_id": 125,
"error_message": ""
},
{
"adseat_uuid": "2A7E2D218A488665581A608D7AC9AA6F",
"ad_scene_name": "Level",
"ad_scene_id": 220,
"error_message": ""
}
]
}
}
Appendix 1 Header Bidding
| Advertising slot type | Advertising source |
|---|---|
| splash | Tencent Advertising Vungle Mintegral Inmob Columbus Bigo Yandex Pangle |
| motivational video | Sigmob (requires permission to be enabled) Tencent Advertising Meta Vungle Mintegral Inmobi YSO Columbus Bigo Yandex Pangle Pangolin |
| table plaque | Sigmob (requires permission to be enabled) Tencent Advertising Meta Vungle Mintegral Inmobi YSO Columbus Bigo Yandex Pangle Pangolin |
| Banner | Tencent Advertising Meta Vungle Mintegral Inmobi YSO Columbus Bigo Yandex Pangle Pangolin |
| Standard Native | Tencent Advertising Meta Vungle Mintegral Inmobi Columbus Bigo Yandex Pangle Pangolin |
| native Banner | Tencent Advertising Meta Vungle Mintegral Inmobi Columbus Bigo Yandex Pangle Pangolin |
| Draw information flow | Tencent Advertising |
| Native splash | Tencent Advertising Vungle Mintegral Inmobi Columbus Bigo Yandex Pangle Pangolin |
Appendix 2 Comparison table of configuration of advertising network corresponding advertising slot types
| ad network id | Ad network name | Advertising space parameter configuration | Ad type | Advertising style parameter configuration | Remark |
|---|---|---|---|---|---|
| 1 | Meta | placementId (Placement ID) | motivational video | adsource_type Advertising slot type 1-rewarded video 2-rewarded interstitial | |
| table plaque | - none | When creating the Reels Ads type, pass 1 to is_native | |||
| splash | is_template_rendering template type 2: self-rendering | ||||
| Banner | ad_size ad source size/height | size: | |||
| Standard Native | is_template_rendering template type 1: template rendering 2: self-rendering | high: | |||
| native Banner | is_template_rendering template type 1: template rendering 2: self-rendering | ||||
| 2 | AdMob | placementId (ad unit ID) | motivational video | adsource_type ad slot type 1-rewarded video ad 2-interstitial rewarded ad | When placement_ad_type=2 [insert screen rewarded], there is no adsource_type style |
| table plaque | - none | ||||
| Banner | ad_size ad source size | 1: 320 x 50 | |||
| splash | placement_ad_type advertising type 0-Normal splash 2-Insert splash | ||||
| Standard Native | ad_size material ratio | 1: not specified | |||
| native Banner | - none | ||||
| 5 | Unity Ads | appId (application ID) placementId (advertising slot ID) | motivational video | - | |
| table plaque | - | ||||
| splash | Not supported | ||||
| Standard Native | Not supported | ||||
| Banner | ad_size ad source size | ad_size: | |||
| 7 | Vungle | appId (App ID) placementId (ad placement reference ID) | motivational video | video_mute video mute 1 yes 2 no | IOS application has no direction style; |
| table plaque | video_mute video mute 1 yes 2 no | When is_native=0 [normal interstitial], Android applications have a direction style, but IOS applications do not have this style; | |||
| Banner | is_template_rendering ad slot type 0-Banner ad 1-medium rectangular Banner ad | ad_size: | |||
| splash | video_mute video mute 1 yes 2 no | When is_native=0 [normal opening], placement_ad_type=0 Android applications only have direction style and the value is only 1, 2, and IOS applications have no style; | |||
| Standard Native | is_template_rendering Ad Type 1-Medium Rectangle Banner 2-Standard Native 3-Inline | When is_template_rendering=3, ad_size style | |||
| 15 | Chartboost | appSign (App Signature) appId (App ID) placementId (Location) | motivational video | - none | |
| table plaque | - none | ||||
| Banner | ad_size ad source size | ad_size: | |||
| splash | Not supported | ||||
| Standard Native | Not supported | ||||
| 16 | Tencent Advertising | appId (Media ID) placementId (Unit ID) | motivational video | video_mute video mute 1 yes 2 no | |
| table plaque | full_screen_video Is it full screen? 1 Yes 2 No | No time limit: video_max_time -1 | |||
| Banner | is_template_rendering template type 1 Youlianghui rendering | ||||
| splash | zoom_out splash V+ 1 yes 2 no | ||||
| Standard Native | is_template_rendering 1 Youlianghui rendering 2 Developer’s self-rendering 4 Pre-roll video advertisement (Youlianghui rendering) 5 Pre-roll video advertisement (self-rendering) | ||||
| native Banner | is_template_rendering 2 Developer self-rendering 5 Pre-roll video advertisement (self-rendering) | ||||
| Draw information flow | - none | ||||
| Native splash | is_template_rendering 2 Developer self-rendering 3 Youlianghui rendering
video_mute video mute 1 yes 2 no | ||||
| 17 | pangolin | appId (App ID) placementId (Slot ID) | motivational video | app_download_setup ad slot type, pop-up box to confirm before downloading 0 default 1 specified (Android only) | When app_download_setup is 0, popconfirm is invalid (the same below) |
| table plaque | adsource_type ad slot type, 1 full screen video 2 interstitial ad 3 new interstitial ad | Notice: 1) When adsource_type is 1, there is no ad_size_ratio, video_orientation 2) When adsource_type is 2, is_template_rendering always passes 1, and there is no video_orientation 3) When adsource_type is 3, there is no ad_size_ratio, is_template_rendering | |||
| Banner | app_download_setup ad slot type, pop-up box to confirm before downloading 0 default 1 specified (Android only) popconfirm Second pop-up window to confirm 1 yes 2 no (Android only) ad_size 1,2,3,4,5,6,7,8 | 1: 600 x 300 | |||
| splash | is_template_rendering Template type 1 Template rendering (personalized template) 2 Self-rendering | ||||
| Standard Native | is_template_rendering Template type 1 Template rendering (personalized template) 2 Self-rendering 3 Pre-roll video advertisement | ||||
| Draw information flow | - | ||||
| Native splash | is_template_rendering Template type 1 Template rendering (personalized template) 2 Self-rendering | ||||
| 18 | Mintegral | AppKey (App Key) appId (App ID) placementId (Location) unitId (AD Unit ID) | motivational video | video_mute video mute 1 yes 2 no | |
| table plaque | video_mute video mute 1 yes 2 no | When creating a native interstitial, the adsource_type style is required | |||
| Banner | is_template_rendering template type 2 self-rendering | ad_size: | |||
| splash | is_skipable Whether it can be skipped 1 Yes 2 No [Normal opening] | When is_native=0 [normal opening], there are only is_skipable, direction, countdown_time, and placement_ad_type styles. If it is the bidding source, that is, when is_header_bidding=1, the ad_size style needs to be passed; when is_native=1 [native opening], there are only placement_ad_type, is_template_rendering, video_mute, and auto_play_video styles. When is_native=0 When placement_ad_type=2 [insert screen and splash], there are only placement_ad_type and video_mute styles | |||
| Standard Native | is_template_rendering template type 1 automatic rendering 2 custom rendering | When is_template_rendering=2, there is only video_mute style | |||
| 19 | Pangle | appId (App ID) placementId (Slot ID) | motivational video | is_template_rendering template type 1-template rendering | When placement_ad_type=0 [Normal rewarded], applicable fields: is_template_rendering, orientation; is_template_rendering value: 1-template rendering; orientation value: 1-vertical screen, 2-horizontal screen; |
| table plaque | accept_material_type creative type 1-image only 2-video only 3-image+video | When is_native=0 [normal interstitial], applicable fields: accept_material_type, orientation; inapplicable fields: adsource_type, ad_categories; | |||
| Banner | is_template_rendering template type 2-self-rendering | ad_size value: 1-640 x 100, 2-600 x 500; | |||
| splash | placement_ad_type advertising type 0-Normal splash 2-Insert splash | When is_native=0 [normal splash], applicable fields: placement_ad_type, orientation; placement_ad_type value: 0-normal splash, 2-insert splash; inapplicable fields: ad_categories; | |||
| Standard Native | Banner_mrec Advertising slot type 1-standard native 4-Banner/MREC | When Banner_mrec=1 [standard native], applicable fields: is_template_rendering, ad_categories; inapplicable fields: slide_Banner; | |||
| 20 | quick worker | appId (application ID) appName (application name) placementId (advertising slot ID) | motivational video | direction screen direction 1 portrait 2 landscape 3 adaptive | |
| table plaque | adsource_type ad slot type, 1 full-screen video 2 interstitial ads | Only when adsource_type is 1 full screen video directionScreen direction optional | |||
| splash | - | ||||
| Standard Native | is_template_rendering template type 1 template rendering 2 self-rendering | ||||
| native Banner | is_template_rendering template type 2 self-rendering | ||||
| Draw information flow | - | ||||
| Native splash | is_template_rendering template type 1 template rendering 2 self-rendering | ||||
| 21 | Sigmob | appId (application ID) AppKey (App Key) placementId (ad unit ID) | motivational video | ||
| table plaque | - | ||||
| splash | - | ||||
| Standard Native | - | ||||
| native Banner | - | ||||
| Native splash | - | ||||
| 23 | Inmobi | placementId (advertising slot ID) | motivational video | placement_ad_type rewarded type 0-normal rewarded 2-interstitial rewarded | |
| table plaque | adsource_type ad style 1-full screen interstitial 2-half screen interstitial | When is_native=1 [native screen], there is only adsource_type style | |||
| splash | placement_ad_type splash type 1-native splash 2-insert splash | ||||
| Standard Native | Banner_mrec Advertising slot type 1-standard native 4-MREC(300x250) | ||||
| Banner | ad_size ad source size | ad_size: 1: 320x50 2: 300x250 When is_native=1 [native Banner], there is no ad_size style | |||
| 24 | Fyber | appId (application ID) placementId (advertising slot ID) | motivational video | - | |
| table plaque | video_mute video mute 1 yes 2 no | ||||
| splash | video_mute video mute 1 yes 2 no | ||||
| Standard Native | Not supported | ||||
| Banner | - | ||||
| 40 | TradPlus Adx | placementId (advertising slot ID) | motivational video | video_mute video mute 1-yes 2-no | When adsource_type=1, there is no skip_time style |
| table plaque | video_mute video mute 1-yes 2-no | When adsource_type=2, there is no video_mute style | |||
| splash | - | ||||
| Interruption | - | ||||
| Standard Native | template_render_type template type | 1-left picture and right text 2-left text and right picture 3-top picture and bottom 4-top and bottom picture 5-three pictures | |||
| Banner | ad_size ad source size | ad_size: 1: Banner(320x50) 2: Large Banner (320x90) 3: Medium distance Banner (300x250) 4: Home page Banner (728x90) 100: Custom When ad_size=100, width and height styles need to be passed | |||
| 43 | Baidu Alliance | appId (APP ID) placementId (Ad Place ID) | motivational video | - | |
| table plaque | adsource_type ad slot type, 1 full screen video 3 new template interstitial | ||||
| Banner | is_native=0 not supported | ||||
| splash | - | ||||
| Standard Native | is_template_rendering Template type Template type 1 Smart optimization 2 Self-rendering | ||||
| native Banner | is_template_rendering template type template type 2 self-rendering | ||||
| Native splash | is_template_rendering Template type Template type 1 Smart optimization 2 Self-rendering | ||||
| 44 | You can win | appId (application ID) placementId (advertising slot ID) | motivational video | video_mute video mute 1 yes 2 no | |
| table plaque | - | ||||
| splash | - | ||||
| Standard Native | is_template_rendering template type 2 self-rendering | ||||
| Native splash | is_template_rendering template type 2 self-rendering | ||||
| 50 | Yandex | placementId (Ad Unit ID) | motivational video | placement_ad_type rewarded type 0-normal rewarded 2-interstitial rewarded | |
| table plaque | adsource_type ad style 1-full screen video 2-half screen interstitial | When is_native=0 [normal interstitial], there is no style | |||
| splash | placement_ad_type splash type 0-normal splash 1-native splash 2-insert splash | ||||
| Standard Native | is_template_rendering template type 1-template rendering 2-self-rendering | ||||
| Banner | ad_size ad source size | ad_size: | |||
| 57 | Bigo | appId (application ID) placementId (advertising slot ID) | motivational video | placement_ad_type 0-normal rewarded 2-interstitial rewarded | When creating [Interstitial Incentive], there is only placement_ad_type=2 style |
| table plaque | adsource_type ad slot type 1-full screen video 2-half screen interstitial | When is_native=0 [normal interstitial], there is no style | |||
| splash | adsource_type ad slot type 1-half screen ad 2-full screen ad | When is_native=0 [normal opening], there is only adsource_type style | |||
| Standard Native | - | ||||
| Banner | ad_size ad source size | ad_size: | |||
| 76 | Columbus | appKey (App Key) appSecret (App Secret) placementId (Placement ID) | motivational video | placement_ad_type rewarded type 0 ordinary rewarded 2 interstitial rewarded | IOS applications do not support creation |
| table plaque | adsource_type ad style 1 full screen interstitial 2 half screen interstitial | When is_native=0[normal interstitial], there is no adsource_type style | |||
| Banner | ad_size ad source size | ad_size: | |||
| splash | placement_ad_type 1 Native splash 2 Insert splash | When is_native=1[native splash], placement_ad_type=1 | |||
| Standard Native | - none | ||||
| 77 | Yso | placementId (advertising slot ID) | motivational video | - | |
| table plaque | - | ||||
| splash | - | ||||
| Standard Native | - | ||||
| Banner | - |
Appendix 3 Traffic Grouping Rule Data Format
| Field | Type | Required | Description | Remarks |
|---|---|---|---|---|
| rules | Array[Object] | Y | Traffic grouping rule information list | |
| rules.name | string | Y | name | Network connection type device_contype Application version app_ver Device type device_type Device manufacturer device_mak week week time period time age user_age gender user_gender SDK version sdk_ver system version device_osv mobile phone running memory (RAM) device_ram CPU architecture device_cpu Level in the game user_level In-app payment amount user_iap_amount In-app payment currency user_iap_currency Number of in-app payments user_iap_count Channel channel Sub-channel sub_channel Customized user ID user_id Device ID device_idfa IDFA authorization device_idfa_auth Segment Tag segment_tag Application installation time app_instimespan Custom user attribute user_custom |
| rules.type | string | Y | type | int,float,version,complex |
| rules.op | string | Y | Operator | in, notIn, greater than, less than, greater than or equal to, less than or equal to, =, range |
| rules.data | string | Y | content | Network connection type WiFi(2),5G(7),4G(6),3G(5),2G(4) Device type 1-Phone,2-Pad Device manufacturer Apple,Acer,Advan,Amazon,Asus,Blackshark,Coolpad,GIONEE,Google,Hisense,Honor,HTC,Huawei,Infinix,Lanix,LeEco,Lenovo,LGE,Meitu,Meizu,MetroPC S,Motorola,Nokia,Nubia,OnePlus,OPPO,Qcom,Realme,Redmi,Samsung,Sharp,Smartfren,Smartisan,Sony,TCL,Tecno,Verizon,Vivo,Xiaomi,ZTE,360 Week 1-7 (dynamically generated in the code, corresponding to Monday to Sunday) Gender male, female In-app payment currency USD, CNY, EUR IDFA authorization 1 authorized, 2 unauthorized |
| timezoneOffset | string | Y | time zone | Use a special time zone selection component to automatically obtain the current time zone offset |