4 min read

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:

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

StatusDescription
200OK
400Invalid request or exceeds 100 IDs
403Permission denied
429Rate limit exceeded
500Internal 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": {}
        }
      }
    }
  }
}

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"
  }
}