---
title: "Poll a Google Ads video upload"
method: POST
path: "/api/apps/{app_id}/google-ads/assets/upload-video/poll"
---

# Poll a Google Ads video upload

`POST /api/apps/{app_id}/google-ads/assets/upload-video/poll`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/google-ads/assets/upload-video/poll`
- Auth: HTTP bearer

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Checks whether YouTube has assigned an ID to a video you uploaded with [Upload a Google Ads video](/api-reference/upload-a-google-ads-video).

Send the `upload_rn` that upload returned. Each call reads the upload's state from Google once and returns straight away, with `video_id` empty while YouTube is still processing. Poll every few seconds until it is filled in. Nothing is uploaded again, and polling does not count against the upload limit.

A video YouTube rejected, or one that failed to upload, returns a 400, so upload a different file then. An `upload_rn` that is not shaped like one, or that belongs to a different Google Ads account, is also rejected with a 400. One that is correctly shaped but names no upload keeps returning an empty `video_id`, so stop polling after a few minutes.

This is limited to 30 requests a minute per app. Some workspaces have a different limit. It is refused with a 409 while the workspace is on a Google Ads billing hold.

<Note>This endpoint accepts a personal API key from anyone who can edit the app. A read-only key is refused with a 403, and so are workspace API keys.</Note>

## Path parameters

- `app_id` string, required: ID of the app whose Google Ads creative you want to generate or read.

## Request body

- GoogleAdsVideoUploadPollRequest: The reference returned by an upload that was still processing.
  - `upload_rn` string, required: The `upload_rn` that [Upload a Google Ads video](/api-reference/upload-a-google-ads-video) returned for this app.

## Response `200`

The upload, with `video_id` filled in once YouTube has assigned it.

- GoogleAdsVideoUpload: A video uploaded to YouTube for Google Ads.
  - `video_id` string, required: The YouTube video ID. Pass it as a video on a campaign, exactly as you would the ID from a YouTube link. Empty while YouTube is still processing the upload, in which case poll with `upload_rn`.
  - `upload_rn` string, required: Google's reference for the upload. Keep it until `video_id` is filled in, and pass it to [Poll a Google Ads video upload](/api-reference/poll-a-google-ads-video-upload).

## Other responses

- `400`: `upload_rn` is not a valid upload reference for this app's Google Ads account, or YouTube rejected the video or failed to process it.
- `401`: Missing or invalid credentials.
- `403`: You can't edit this app, the app does not exist, or you used a read-only or workspace API key. A missing app and an app you cannot reach are deliberately the same answer.
- `404`: The app has no connected Google Ads account.
- `409`: The workspace is on a Google Ads billing hold.
- `422`: Validation Error
- `429`: The app has used up its 30 polls for the current minute, or Google Ads is rate limiting the account. Retry later.

## Changes

> 58 revisions in range; 1 not diffed.

- **2026-10-12** `5e139db2e643`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-10-09** `fc604cdcc3a2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/apps/:app_id/google-ads/assets/upload-video/poll/post.md)

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adexad/apis/base44-app-management-api/revisions/fa29e915c226?raw)
