PHP Clip Generation/OAUTH Missing

I have been trying for hours to generate a clip programmatically but I do not understand the way twitch wants the request formatted. I am not used to CURL but I’m pretty sure I am sending the headers correctly.
All I get is “{“error”:“Unauthorized”,“status”:401,“message”:“Missing User OAUTH Token”}”

I have broadcaster_id in the URL because it doesn’t seem to read it anywhere else so I tried doing the token in the URL too but none of the GET names I’ve tried work. I can’t find any examples online of people using POST with PHP on anything that requires an oauth.

Any help would be great i am at the end of my rope here

$token = get_token();

$postRequest = array(
    'token'=>$token
);


$postRequest= json_encode($postRequest);

$cURLConnection = curl_init('https://api.twitch.tv/helix/clips?broadcaster_id=44322889&access_token='.$token.'&token='.$token);
curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURLConnection, CURLOPT_POSTFIELDS, $postRequest);
curl_setopt($cURLConnection, CURLOPT_HTTPHEADER, array(
    'client-id: sdf',
    'Content-Type: application/json',
    'Authorization: Bearer sdgf'
));
echo curl_exec($cURLConnection);

curl_close($cURLConnection);

The access token and client ID need to be specified as a header

Not a query string parameter

An example:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Client-ID: ' . CLIENT_ID,
    'Authorization: Bearer ' . $keys->access_token
));

you shouldn’t do BOTH like you have

Additionally, the error suggests you generated the wrong type of token

You need a response_type: code with the required scope attached

but made a response_type: client_credentials

Thanks for the reply! Do I not have it sending as a header? I took out the actual token but this line is supposed to send as a header is it not?

curl_setopt($cURLConnection, CURLOPT_HTTPHEADER, array(
‘client-id: sdf’,
‘Content-Type: application/json’,
‘Authorization: Bearer sdgf’
));

See from here onwards I added whilst you were replying

Yeah I saw that I’ll take a look real quick thank you

Yeah I’ve not had coffee yet and read your title but not your code.

So your code looks correct (but you should removed the &access_token='.$token.'&token='.$token from the URL)

You’ve just got the wrong token type.

You generated a server to server token, which doesn’t represent a user.
So you need an oAuth flow (mini website) to obtain a user token with the clips:edit scope applied. So the API call can create a clip owned by the authenticating user.

Yeah I just had the redundancy in there in a desperate attempt to get it to see the token.
Thank you so much for your help. I thought since this is going to be a server->server thing I would need the other token. A user token didn’t make sense to me but it is working now so thank you so much for your time

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.