## TL;DR

Pass your OAuth client id as the client_id parameter on the failing request. The parameter is simply absent: the value was never loaded, was read from the wrong config key, or was dropped when the URL was built. Supply it and the request proceeds.

```
google oauth Error 400 invalid_request: Missing required parameter client_id
```

## Steps

1. Log the full authorization URL (or token request body) your client actually sends. Expected: you can see client_id is missing or empty.

2. Trace where the client id should come from: config file, environment, or secret store. Check the exact key name the code reads. Expected: you found the source and the key it reads.

3. Fix the lookup: correct the key name, load the config in the right environment, or pass the value through where it was dropped. Expected: the code now holds a real client id at request time.

4. Confirm the value matches the client id shown in the Google Cloud console for the OAuth client. Expected: console value and sent value are identical.

5. Retry the OAuth flow. Expected: the missing-parameter error is gone; if Google now complains the id is invalid, the value is wrong, not missing.

## Use this when

- Google returns exactly "Missing required parameter: client_id".
- A generated client reads the client id from a config key that does not exist in the deployed environment.
- The OAuth URL is hand-built and the parameter was forgotten.

## Not for this skill when

- Google says the client id is invalid - the parameter is present but the value is wrong.
- The failure is about redirect_uri or scope - different parameters, different fixes.
- The provider is not Google; parameter requirements differ elsewhere.

## Variant phrasings

- Google OAuth missing client_id parameter
- Google invalid_request client_id required
- Google OAuth 400 missing required parameter

## Why it happens

Generated OAuth code usually reads the client id from a placeholder config ("YOUR_CLIENT_ID") or an env key the deploy never sets. The request builder then emits an empty or absent parameter. Google validates required parameters before anything else, so this fails fast with a clear message that agents still misread as a credential problem.

## Edge cases

- Token-exchange calls need the client id too, not just the authorize redirect; check both.
- Some libraries send client_id in the body vs the query; Google accepts both, but an empty string in either still fails.
- Multiple Google Cloud projects: the id must come from the project where the OAuth consent screen and redirect URIs are configured.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_bX9y5DWHHzjj3ebLC1J8AA
