# Management Open API
# Overview
This document describes the Open API endpoints for inventory management. All API endpoints require authentication via Bearer token in the Authorization header.
# Authentication
All API requests must include a valid authorization token in the request header:
Authorization: Bearer <your_auth_token>
# App Management
# Create App
Creates a new app.
Endpoint: POST /openapi/inventory/v1/app/create
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | App name |
| deviceType | int | Yes | Device type (see Device Types) |
| osType | int | Yes | Operating system type (see OS Types) |
| trafficType | int | Yes | Traffic type (see Traffic Types) |
| pkgName | string | Conditional | Package name (required when trafficType = 0 for App) |
| domainName | string | Conditional | Domain name (required when trafficType = 1 for Web) |
| url | string | Yes | App store URL or website URL |
| appAdsTxtLink | string | Yes | App-ads.txt URL |
| category | string | Yes | App category |
| coppaCompliant | boolean | No | COPPA compliance flag (default: false) |
Example Request:
{
"name": "My App",
"deviceType": 1,
"osType": 2,
"trafficType": 0,
"pkgName": "com.example.myapp",
"url": "https://play.google.com/store/apps/details?id=com.example.myapp",
"appAdsTxtLink": "https://example.com/app-ads.txt",
"category": "Games",
"coppaCompliant": false
}
Response:
{
"publisherId": "pub213660626112",
"appId": "app14463798688768",
"displayId": "app14463798688768",
"name": "My App",
"deviceType": 1,
"osType": 2,
"trafficType": 0,
"pkgName": "com.example.myapp",
"domainName": "",
"url": "https://play.google.com/store/apps/details?id=com.example.myapp",
"appAdsTxtLink": "https://example.com/app-ads.txt",
"category": "Games",
"coppaCompliant": false,
"status": 2,
"createTime": "2026-01-13T08:54:15Z",
"updateTime": "2026-01-13T08:54:15Z"
}
# Update App
Updates an existing app.
Endpoint: POST /openapi/inventory/v1/app/update
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| appId | string | Yes | App ID to update |
| status | int | No | Status (see Status Values) |
| name | string | No | App name |
| deviceType | int | No | Device type |
| osType | int | No | Operating system type |
| trafficType | int | No | Traffic type |
| pkgName | string | No | Package name |
| domainName | string | No | Domain name |
| url | string | No | App store URL or website URL |
| appAdsTxtLink | string | No | App-ads.txt URL |
| category | string | No | App category |
| coppaCompliant | boolean | No | COPPA compliance flag |
Example Request:
{
"appId": "app_67890",
"name": "My Updated App",
"status": 1
}
Response:
Same structure as Create App response.
# List Apps
Retrieves a list of apps.
Endpoint: POST /openapi/inventory/v1/app/list
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| deviceType | int | No | Filter by device type |
| osType | int | No | Filter by OS type |
| trafficType | int | No | Filter by traffic type |
| category | string | No | Filter by category |
| status | int[] | No | Filter by status list |
Example Request:
{
"deviceType": 1,
"osType": 2,
"status": [0, 1]
}
Response:
{
"list": [
{
"publisherId": "pub213660626112",
"appId": "app14463798688768",
"displayId": "app14463798688768",
"name": "My Updated App",
"deviceType": 1,
"osType": 2,
"trafficType": 0,
"pkgName": "com.example.myapp",
"domainName": "",
"url": "https://play.google.com/store/apps/details?id=com.example.myapp",
"appAdsTxtLink": "https://example.com/app-ads.txt",
"category": "Games",
"coppaCompliant": false,
"status": 1,
"createTime": "2026-01-13T08:54:15Z",
"updateTime": "2026-01-13T08:55:08Z"
}
],
"totalCount": 1
}
# Placement Management
# Create Placement
Creates a new ad placement.
Endpoint: POST /openapi/inventory/v1/placement/create
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| appId | string | Yes | App ID to create placement for |
| name | string | Yes | Placement name |
| floorPrice | number | No | Floor price in USD (e.g., 0.5 = $0.50) |
| countryFloorPrice | array | No | Country-specific floor prices (see below) |
| sdkAdFormat | int | Yes | SDK ad format (see SDK Ad Formats) |
| sdkAdTypes | int[] | No | SDK ad types |
| sdkAdSize | int | No | SDK ad size |
| sdkAutoRefresh | boolean | No | Enable auto refresh |
| sdkAutoRefreshInterval | int | No | Auto refresh interval in seconds |
| rewardedName | string | No | Reward name (for rewarded ads, max 50 characters) |
| rewardedQuantity | int | No | Reward quantity (1-1000) |
| rewardedDeliverySetting | int | No | Reward delivery setting (0=No callback, 1=Server callback) |
| callbackUrl | string | No | Server-to-server callback URL (required when rewardedDeliverySetting=1) |
| securityKey | string | No | Security key for callback verification |
Country Floor Price Object:
| Field | Type | Description |
|---|---|---|
| countryCodes | string | Comma-separated country codes (e.g., "US,CA") or "*" for all |
| floorPrice | number | Floor price in USD |
Example Request:
{
"appId": "app14463798688768",
"name": "Banner Bottom",
"floorPrice": 0.5,
"countryFloorPrice": [
{"countryCodes": "US,CA", "floorPrice": 0.8},
{"countryCodes": "CN", "floorPrice": 0.3}
],
"sdkAdFormat": 2,
"sdkAdSize": 1,
"sdkAutoRefresh": true,
"sdkAutoRefreshInterval": 30
}
Response:
{
"sid": "s14463823852672",
"appId": "app14463798688768",
"name": "Banner Bottom",
"status": 2,
"floorPrice": 0.5,
"countryFloorPrice": [
{
"countryCodes": "US,CA",
"floorPrice": 0.8
},
{
"countryCodes": "CN",
"floorPrice": 0.3
}
],
"sdkAdFormat": 2,
"sdkAdTypes": [],
"sdkAdSize": 1,
"sdkAutoRefreshInterval": 30,
"sdkAutoRefresh": true,
"orientation": 0,
"rewardedName": "",
"rewardedQuantity": 0,
"rewardedDeliverySetting": 0,
"callbackUrl": "",
"securityKey": "",
"createTime": "2026-01-13T09:00:48Z",
"updateTime": "2026-01-13T09:00:48Z"
}
# Update Placement
Updates an existing placement.
Endpoint: POST /openapi/inventory/v1/placement/update
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| sid | string | Yes | Placement ID to update |
| status | int | No | Status (see Status Values) |
| name | string | No | Placement name |
| floorPrice | number | No | Floor price in USD |
| countryFloorPrice | array | No | Country-specific floor prices |
| sdkAdFormat | int | No | SDK ad format |
| sdkAdTypes | int[] | No | SDK ad types |
| sdkAdSize | int | No | SDK ad size |
| sdkAutoRefresh | boolean | No | Enable auto refresh |
| sdkAutoRefreshInterval | int | No | Auto refresh interval |
| orientation | int | No | Ad orientation |
| rewardedName | string | No | Reward name (max 50 characters) |
| rewardedQuantity | int | No | Reward quantity (1-1000) |
| rewardedDeliverySetting | int | No | Reward delivery setting (0=No callback, 1=Server callback) |
| callbackUrl | string | No | Callback URL (required when rewardedDeliverySetting=1) |
| securityKey | string | No | Security key |
Example Request:
{
"sid": "s14463823852672",
"name": "Banner Top",
"floorPrice": 0.6,
"status": 1
}
Response:
Same structure as Create Placement response.
# List Placements
Retrieves a list of placements.
Endpoint: POST /openapi/inventory/v1/placement/list
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
| appId | string | No | Filter by app ID |
| appType | int | No | Filter by app type |
| sdkAdFormat | int | No | Filter by SDK ad format |
| category | string | No | Filter by category |
| status | int | No | Filter by status |
Example Request:
{
"appId": "app_67890",
"status": 1
}
Response:
{
"list": [
{
"sid": "s14463823852672",
"appId": "app14463798688768",
"name": "Banner Top",
"status": 1,
"floorPrice": 0.6,
"countryFloorPrice": [
{
"countryCodes": "US,CA",
"floorPrice": 0.8
},
{
"countryCodes": "CN",
"floorPrice": 0.3
}
],
"sdkAdFormat": 2,
"sdkAdTypes": [],
"sdkAdSize": 1,
"sdkAutoRefreshInterval": 30,
"sdkAutoRefresh": true,
"orientation": 0,
"rewardedName": "",
"rewardedQuantity": 0,
"rewardedDeliverySetting": 0,
"callbackUrl": "",
"securityKey": "",
"createTime": "2026-01-13T09:00:48Z",
"updateTime": "2026-01-13T09:01:45Z"
}
],
"totalCount": 1
}
# Enumerations
# Device Types
| Value | Description |
|---|---|
| 0 | Unknown |
| 1 | Phone |
| 2 | Tablet |
| 3 | Desktop |
| 4 | Connected Device |
| 5 | Set Top Box |
| 6 | Others |
# OS Types
| Value | Description |
|---|---|
| 0 | Unknown |
| 1 | iOS |
| 2 | Android |
| 3 | Roku |
| 4 | Windows |
| 5 | Tizen |
| 6 | Other |
| 7 | Fire |
| 8 | Web |
| 9 | Linux |
| 10 | Mac |
| 11 | Feature Phone |
# Traffic Types
| Value | Description |
|---|---|
| 0 | App |
| 1 | Web |
# Status Values
| Value | Description |
|---|---|
| 0 | Inactive |
| 1 | Active |
# SDK Ad Formats
| Value | Description |
|---|---|
| 1 | App Open |
| 2 | Banner |
| 3 | Interstitial |
| 4 | MREC |
| 5 | Native |
| 6 | Rewarded |
| 7 | Rewarded Interstitial |
# SDK Ad Sizes
| Value | Description |
|---|---|
| 1 | 320*50 |
| 2 | 300*250 |
# Error Handling
All API responses follow a consistent format:
Success Response:
{
"code": 0,
"msg": "ok",
"data": { ... }
}
Error Response:
{
"code": <error_code>,
"msg": "<error_message>"
}
# Common Error Codes
| Code | Description |
|---|---|
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Invalid or missing token |
| 403 | Forbidden - Insufficient scope |
| 500 | Internal Server Error |
# Rate Limiting
API requests are subject to rate limiting. If you exceed the rate limit, you will receive a 429 Too Many Requests response. Please implement appropriate retry logic with exponential backoff.