开发者后台管理API
1 获取Api Key
登录后台,点击公司名称,进入“我的账号”,“API Key”,获取API Key和秘钥。
名称 | 用途 |
---|---|
API Key(bear) | 标识用户身份 |
密钥(secret) | 生成请求签名 |
2 API接入
所有请求都采用post方式,POST请求数据默认格式为:multipart/form-data;请求域名为:https://openapi.tradplusad.com
2.1 请求公参
参数 | 说明 | 传递方式 | 样例 |
---|---|---|---|
bear | API key | HTTP Header | 157E4A5D-3877-1236-DE06-457FT3F70C4 |
sign | 签名 | GET | 5DE008C88087D8556D276A9E5B8E37E6 |
timestamp | 时间戳,当前时间的秒数 | GET | 1629525680 |
nonce | 16位长度随机字符,数字与字母组合 | GET | 5c672d4e9628d0a7 |
2.2 生成签名
获取bear和secret,参考 1 获取Api Key
具体规则如下:
- 拼接secret, timestamp, nonce和请求路径
- md5加密并且转换为大写
$sign = strtoupper(md5($secret+$timestamp+$nonce+$path));
2.3 调用示例
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创建"' \
--form 'adseat_list[0][ad_type]="5"' \
--form 'adseat_list[0][adseat_uuid]=""'
2.4 返回参数
返回json格式
2.4.1 成功
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"adseat_uuid": "8629EE09A4E3C6B60AEC48FA7D6CA4D4",
"seat_name": "test创建",
"error_message": ""
}
]
}
}
2.4.2 失败
{
"code": 403,
"status": -1,
"error_message":"sign error"
}
3 报表
3.1 提交三方广告平台报表数据
请求路径: /api/report/submit
请求参数:
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
report_data_list | Array | Y | 最多10个超过会被丢弃 | |
report_data_list.day | String | Y | 日期,仅支持到天Y-m-d格式 | 示例:2021-02-01 |
report_data_list.iso | String | Y | 国家二位码(短码) | 示例:GE 见:8.1 |
report_data_list.adsource_id | Int | Y | tradplus广告平台ID | 见:8.2 |
report_data_list.placement_id | String | Y | 三方广告平台广告位ID | Mintegral需要用 "_" 拼接AD Unit ID Unity_Ads需要拼接Game ID Applovin需要拼接SDK Key Kidoz需要拼接应用的包名package_name ReklamUp需要拼接应用的包名package_name 示例:placementID_adUnitID |
report_data_list.currency | String | N | 币种单位CNY或USD,不传默认CNY | |
report_data_list.bidding_request | Int | N | 竞价请求 | 默认 0 |
report_data_list.bidding_response | Int | N | 竞价响应 | 默认 0 |
report_data_list.request | Int | N | 请求 | 默认 0 |
report_data_list.fill | Int | N | 填充 | 默认 0 |
report_data_list.impression | Int | N | 展示 | 默认 0 |
report_data_list.click | Int | N | 点击 | 默认 0 |
report_data_list.income | Float | N | 收入 | 默认 0 |
返回字段:
字段 | 类型 | 必传 | 说明 |
---|---|---|---|
error | Array | Y | 错误信息列表 |
error.message | String | N | 错误信息 |
error.report_data | Array | N | 错误信息详情(同请求数据) |
返回样例:
{
"code": 200,
"status": 0,
"data": {
"error": [
{
"message": "国家二位码(短码) 缺失或者错误",
"report_data": {
"day": "2022-01-18",
"iso": "USA",
"adsource_id": "16",
"placement_id": "abc123",
"currency": "CNY",
"income": "50",
"fill": "800"
}
},
{
"message": "广告网络ID 缺失或者错误",
"report_data": {
"day": "2022-01-19",
"iso": "CN",
"adsource_id": "475",
"placement_id": "22",
"currency": "CNY",
"income": "20",
"fill": "600",
"impression": "100"
}
}
]
}
}
4 应用管理
4.1 获取应用分类
请求路径: /api/app/allcategory
请求参数:无
返回字段:
字段 | 类型 | 必传 | 说明 |
---|---|---|---|
first_category | Array | Y | 一级分类 |
first_category.id | String | Y | 分类id |
first_category.name_cn | String | Y | 中文名 |
first_category.name_en | String | Y | 英文名 |
sub_category | Array | Y | 二级分类 |
sub_category.id | String | Y | 二级分类id |
sub_category.pid | String | Y | 对应的一级分类id |
sub_category.name_cn | String | Y | 中文名 |
sub_category.name_en | String | Y | 英文名 |
返回样例:
{
"code": 200,
"status": 0,
"data": {
"first_category": [
{
"id": "1",
"name_cn": "游戏",
"name_en": "Game"
},
{
"id": "2",
"name_cn": "应用",
"name_en": "App"
}
],
"sub_category": [
{
"id": "101",
"name_cn": "动作",
"name_en": "Action",
"pid": "1"
},
{
"id": "102",
"name_cn": "冒险",
"name_en": "Adventure",
"pid": "1"
}
...
]
}
}
4.2 获取应用
请求路径: /api/app/apps
请求参数:
如果传了app_uuids则忽略page,只有在app_uuids不传的情况下才返回has_more和total
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
app_uuids | Stirng | N | 应用ID | 每次最多接受100个 |
page | Int | N | 页数 默认1 | 每页100条 |
返回字段:
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
total | Int | N | 总数 | |
has_more | Int | N | 是否还有更多 | |
app_list | Array | Y | 应用信息 | |
app_list.app_uuid | String | Y | 开发者应用ID | |
app_list.app_name | String | Y | 应用名称 | |
app_list.category_id | Int | Y | 二级分类 | |
app_list.app_url | String | Y | 应用商店链接 | |
app_list.package_name | String | Y | 应用包名 | |
app_list.os | Int | Y | 应用平台 | 1:安卓 2:iOS |
app_list.is_release | Int | Y | 是否上架 | 1:未上架 2:已上架 |
请求示例
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}'
返回样例:
{
"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 创建和编辑应用
请求路径: /api/app/store
请求参数:
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
app_list | Array | Y | app信息 | 每次最多10个,超过会被丢弃 |
app_list.app_uuid | String | N | 开发者应用ID | 编辑必传 |
app_list.app_name | String | N | 应用名称 | 编辑必传 |
app_list.os | Int | N | 应用平台 1:安卓 2:iOS | 创建后不可编辑 |
app_list.package_name | String | N | 应用包名 | 创建必传 |
app_list.app_url | String | N | 应用商店链接 | 注意:仅ios适用。 如果传了表示应用已经上架,会自动使用上架的app信息。 所以此时app_name,package_name可以不传, 如果传了则会覆盖。 |
app_list.category_id | Int | N | 分类参考 3.1 获取应用分类 | 创建必传 |
app_list.direction | Int | N | 屏幕方向 | 1-竖屏 2-横屏 0-自适应 |
返回字段:
字段 | 类型 | 必传 | 说明 |
---|---|---|---|
list | Array | Y | 应用信息 |
list.app_uuid | Stirng | N | 开发者应用ID |
list.app_name | Stirng | N | 应用名称 |
list.error_message | Stirng | N | 错误信息,空字符表示成功 |
请求示例
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}]}'
返回样例:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"app_uuid": "",
"app_name": "a1",
"error_message": "应用名称已存在"
},
{
"app_uuid": "A741926221D7FEFBCB179D08B4477713",
"app_name": "test1",
"error_message": ""
}
]
}
}
5 广告位管理
5.1 获取广告位
请求路径: /api/seat/seats
请求参数:
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
app_uuid | Stirng | N | 单个应用ID,可以获取某个应用下的所有广告位 | app_uuid和adseat_uuid 互斥 都传只取app_uuid |
adseat_uuids | String | N | 广告位ID,多个逗号分割, 最多返回100 | |
page | String | N | 页数 默认1 | 每页100条 |
返回字段:
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
has_more | Int | N | ||
total | Int | N | ||
adseat_list | Array | Y | ||
adseat_list.app_uuid | String | Y | 开发者应用ID | |
adseat_list.seat_name | String | Y | 广告位名称 | |
adseat_list.adseat_uuid | String | Y | 广告位ID | |
adseat_list.cache_num | Int | Y | 并行请求数 | |
adseat_list.ad_type | Int | Y | 广告类型: 1 原生 2 插屏 3 开屏 4 横幅 5 激励视频 | |
adseat_list.use_frequency | Int | Y | 是否设置展示频次上线:1 是 0 否 | |
adseat_list.frequency_limit | Int | Y | 展示数上限 | |
adseat_list.frequency_unit_count | Int | Y | 单位间隔 | |
adseat_list.frequency_unit | Int | Y | 次数单位:1 分钟 2 小时 3 天 | eg: 每5(frequency_unit_count) 分钟 (frequency_unit) 展示10次(frequency_limit) |
adseat_list.ad_type_template | Int | N | 原生模版类型 标准原生: 1 原生横幅: 2 Draw信息流: 3 原生开屏: 4 | 原生 类型返回 |
adseat_list.refresh_time | Int | N | 刷新时间 | 原生横幅,横幅返回 |
adseat_list.skip_time | Int | N | n 秒后显示跳过按钮 | 开屏,原生开屏类型返回 |
adseat_list.countdown_time | Int | N | 倒计时总时长 | 开屏,原生开屏类型返回 |
adseat_list.is_skip | Int | N | 是否可跳过 | 开屏,原生开屏字类型返回 |
adseat_list.monetary_name | String | N | 奖励项目 | 激励视频类型返回 |
adseat_list.monetary | Int | N | 奖励数量 | 激励视频类型返回 |
请求示例
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}'
返回样例:
{
"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 创建和编辑广告位
请求路径: /api/seat/store
请求参数:
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
adseat_list | Array | Y | 最多10个超过会被丢弃 | |
adseat_list.app_uuid | String | Y | 开发者应用ID | 开发者应用ID ,创建后不可编辑。 |
adseat_list.seat_name | String | Y | 广告位名称 创建必传 | |
adseat_list.adseat_uuid | String | N | 广告位ID 编辑必传 | |
adseat_list.cache_num | Int | N | 广告并行请求数, 默认2 | 创建必传 开屏范围:1 |
adseat_list.ad_type | Int | Y | 广告类型: 1 原生 2 插屏 3 开屏 4 横幅 5 激励视频 | 广告类型,创建必传,创建后不可编辑。 |
adseat_list.use_frequency | Int | N | 是否设置展示频次上线:默认否 | 1 是 0 否 |
adseat_list.frequency_limit | Int | N | 展示数上限 n 次展示,默认 1 | |
adseat_list.frequency_unit_count | Int | N | 单位间隔, 默认 1 | |
adseat_list.frequency_unit | Int | N | 次数单位, 分钟:1 小时: 2 天:3 默认 1 | |
adseat_list.ad_type_template | Int | N | 1 标准原生 2 原生横幅 3 Draw信息流 4 原生拼接开屏 | 创建原生类型必传,创建后不可编辑。 |
adseat_list.refresh_time | Int | N | 自动刷新,范围:15~150秒 | 仅对横幅与原生横幅生效 可以不传,表示不刷新 |
adseat_list.skip_time | Int | N | n 秒后显示跳过按钮 范围:0~10 秒 默认为2 | 创建开屏与原生开屏必传,仅对开屏与原生开屏生效 |
adseat_list.countdown_time | Int | N | 倒计时总时长 范围:3~10秒, 默认 5 | 创建开屏与原生开屏必传 仅对开屏与原生开屏生效 倒计时总时长必须大于skip_time |
adseat_list.is_skip | Int | N | 是否可跳过,1是 0否, 默认是 | 创建开屏与原生开屏必传,仅对开屏与原生开屏生效 |
adseat_list.monetary_name | String | N | 奖励项目 | 仅对激励视频生效 |
adseat_list.monetary | Int | N | 奖励数量 | 仅对激励视频生效 |
返回字段:
字段 | 类型 | 必传 | 说明 | 备注 |
---|---|---|---|---|
list | Array | Y | ||
list.adseat_uuid | String | Y | ||
list.seat_name | String | Y | ||
list.error_message | String | Y | 错误信息,空字符表示成功 |
请求示例
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":""}]}'
返回样例:
{
"code": 200,
"status": 0,
"data": {
"list": [
{
"adseat_uuid": "9D0A151A3B9169369CB75873FD86713E",
"seat_name": "test原生横幅",
"error_message": ""
},
{
"adseat_uuid": "",
"seat_name": "",
"error_message": "应用id必填"
}
]
}
}