Ensure you’re getting the correct type of token. If you’re using the Client Credentials flow this will generate an App token, which does not represent a user and so can not have scopes on it and can not use endpoints that require scopes (there are some exceptions but they are not important here).
If you’re doing this server-side, you’ll likely want to use the Authorization Code flow, or if you’re doing this client-side the Implicit flow. Make sure to also request the channel:edit:commercial scope as that’s required to start a commercial.
You can verify this is the correct token by using the Validate Token endpoint. If it is a User token you’ll see the user id and the scopes among other things. If you’ve generated an App token the validate endpoint will not return any user id and so will not work for what you’re trying to do.
If you use implicit you’ll get a #access_token=asdasdasd
if you use Authorization Code flow you’ll get a ?code=asdasd and you exchange the ?code for an access and refresh token
For your use case you generally would not use OIDC
You would generally use oAuth Authorization Code Grant Flow to get a refresh token so you don’t need to get a new token periodicially.