Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.
POST /ads-management/v1/campaigns:batchGetStatus — openapi
Batch get campaign status
Returns the status (lifecycle state) and deliveryStatus (whether the campaign is currently serving), along with deliveryStatusReasons, for up to 100 campaigns in a single call. This is the recommended way to poll the review and serving state of many campaigns at once. Provide the campaign IDs in campaignIds; any ID that is not found or is not owned by the caller is returned in the failures array with reason NOT_FOUND.
Endpoint
Method: POST
Path: /ads-management/v1/campaigns:batchGetStatus
Servers:
https://apis.roblox.com
Request Body
List of campaign IDs (max 100)
{
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.BatchGetStatusRequest"
}
}
},
"description": "List of campaign IDs (max 100)",
"required": true
} Responses
| Status | Description |
|---|---|
| 200 | OK |
| 400 | Invalid request or exceeds 100 IDs |
| 403 | Permission denied |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
{
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.BatchGetStatusResponse"
}
}
}
},
"400": {
"description": "Invalid request or exceeds 100 IDs",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
},
"403": {
"description": "Permission denied",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
},
"429": {
"description": "Rate limit exceeded",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
},
"500": {
"description": "Internal server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
}
} Authentication
{
"security": [
{
"roblox-legacy-cookie": []
},
{
"roblox-api-key": []
},
{
"roblox-oauth2": [
"ad.campaign:read"
]
}
],
"securitySchemes": {
"roblox-api-key": {
"type": "apiKey",
"description": "A configurable key that allows granular access to Roblox resources. See https://create.roblox.com/docs/cloud/auth/api-keys for more information.",
"name": "x-api-key",
"in": "header"
},
"roblox-legacy-cookie": {
"type": "apiKey",
"description": "A browser cookie that represents the identity of a Roblox user. DO NOT SHARE THIS. Sharing this will allow someone to log in as you and to steal your Robux and items. We do not recommend using cookies to call endpoints. When possible, use API keys with the x-api-key header or OAuth 2.0 instead for authentication.",
"in": "cookie",
"name": ".ROBLOSECURITY"
},
"roblox-oauth2": {
"type": "oauth2",
"description": "Build or authorize apps to access Roblox resources. See https://create.roblox.com/docs/cloud/auth/oauth2-overview for more information.",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://apis.roblox.com/oauth/v1/authorize",
"tokenUrl": "https://apis.roblox.com/oauth/v1/token",
"refreshUrl": "https://apis.roblox.com/oauth/v1/token",
"scopes": {}
}
}
}
}
} Related Schemas
Complete Operation Definition
{
"description": "Returns the status (lifecycle state) and deliveryStatus (whether the campaign is currently serving), along with deliveryStatusReasons, for up to 100 campaigns in a single call. This is the recommended way to poll the review and serving state of many campaigns at once. Provide the campaign IDs in campaignIds; any ID that is not found or is not owned by the caller is returned in the failures array with reason NOT_FOUND.",
"tags": [
"Advertising"
],
"summary": "Batch get campaign status",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.BatchGetStatusRequest"
}
}
},
"description": "List of campaign IDs (max 100)",
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.BatchGetStatusResponse"
}
}
}
},
"400": {
"description": "Invalid request or exceeds 100 IDs",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
},
"403": {
"description": "Permission denied",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
},
"429": {
"description": "Rate limit exceeded",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
},
"500": {
"description": "Internal server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/internal_public_v1.ErrorEnvelope"
}
}
}
}
},
"x-roblox-stability": "EXPERIMENTAL",
"x-roblox-rate-limits": {
"perApiKeyOwner": {
"period": "MINUTE",
"maxInPeriod": 1000
},
"perOauth2Authorization": {
"period": "MINUTE",
"maxInPeriod": 1000
}
},
"x-roblox-scopes": [
{
"name": "ad.campaign:read",
"targetResourceSpecifier": ""
}
],
"x-roblox-engine-usability": {
"apiKeyWithHttpService": false
},
"security": [
{
"roblox-legacy-cookie": []
},
{
"roblox-api-key": []
},
{
"roblox-oauth2": [
"ad.campaign:read"
]
}
],
"externalDocs": {
"url": "https://create.roblox.com/docs/cloud/reference/features/advertising#post_ads_management_v1_campaigns_batchGetStatus"
}
}