YouTube White-label Setup
YouTube setup is mostly a Google Cloud task. This guide strips it down to the pieces UniPost needs so you can get one branded OAuth flow working without wandering around Google Cloud menus.
At a glance
| Question | Answer |
|---|---|
| Create the app in | Google Cloud Console |
| UniPost credential card | YouTube |
| Client fields to copy | Client ID + Client Secret |
| Best for | Products connecting customer-owned YouTube channels while keeping the Google consent experience under your brand. |
| App review / approval | Scope verification may be needed depending on your rollout shape. Even before formal verification, start by proving the OAuth wiring with one real channel owner. |
Before you start
- A Google Cloud project owned by the company, not by an individual engineer.
- The YouTube channel owner account you will use for the first smoke test.
- A consent-screen brand name and support email you are comfortable shipping.
- A plan for how your team will handle Google verification if the project grows beyond internal use.
Callback URLs to whitelist
Copy these exactly into the platform developer console. Redirect mismatches are the fastest way to burn time during setup.
https://api.unipost.dev/v1/connect/callback/youtubeScreenshot walkthrough
Generate Google app creds
This first pass gets you to a working `Client ID` and `Client Secret` so you can save them in UniPost.
Google app verification
After the credentials are saved in UniPost, this is the next Google-side flow to capture if you want your app name and logo to show properly and remove the unverified warning for broader rollout.
What to paste into UniPost
| Google Cloud field | UniPost field | Notes |
|---|---|---|
| OAuth Client ID | Client ID | Paste from the Google OAuth client you intend to run in production. |
| OAuth Client Secret | Client Secret | Keep in your secrets system; UniPost stores it encrypted. |
| Authorized redirect URI | Callback URL below | Must match exactly or Google rejects the callback. |
Save the credentials first, then start a fresh connection attempt. Troubleshooting an OAuth flow against stale credentials usually creates false leads.
Connect a YouTube account through your app
After your YouTube credentials are saved, prove the customer-facing flow your own app will use: create an API key, choose the branded profile, create a Connect session, send the returned OAuth URL to your end user, then confirm UniPost recorded the managed YouTube account.
id for the profile that should own your hosted Connect branding.profile_id in hand, update the logo, display name, and primary color. This is the fastest way to confirm your hosted Connect surface is reading your own branding instead of UniPost defaults.platform set to youtube, the branded profile_id, and your stable external_user_id. UniPost returns a hosted OAuth URL. Redirect your app user to that URL, or open it inside the connection flow in your own product, so they can authorize their YouTube channel under your white-label Google app.external_user_id. Verify it through the accounts API; the same user should also appear in the dashboard's Developer App Users view.API_KEY, profile_id, external_user_id, and the connected YouTube account_id. From here, run a small end-to-end publish test so you know the white-label connection is usable, not just visible.Common blockers
| Blocker | What to do about it |
|---|---|
| No channel on the test account | A Google login can succeed even when the account has no YouTube channel. Use a real channel owner for the first test. |
| Wrong Cloud project | Creating the client in the wrong Google Cloud project is a common source of later operational pain. Pick the production owner early. |
| Verification lag | Do not wait for full verification to begin technical testing, but do budget time for it before broad public rollout. |
Definition of done
- Google consent shows your app branding.
- The callback returns to UniPost successfully.
- A channel-owning account is connected in the workspace.
- Your team has recorded the exact Google Cloud project and OAuth client that worked.