php - Why am I getting a generic internal_server_error message with this CURL PUT?

Using Canvas API to update comment and feedback with the following PHP:

$token_url = 'https://' . $lti_base_url . '.instructure.com/api/v1/courses/' . $course_id . '/assignments/' . $assign_id . '/submissions/' . $user_id;
// var_dump($token_url);
$header = array("Authorization: Bearer {$token}");

$post = [
  'comment'=>$msg_body,
    'submission'=>$grade,
];

$curl = curl_init($token_url);

curl_setopt($curl,CURLOPT_CUSTOMREQUEST,"PUT");
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

curl_setopt($curl, CURLOPT_HTTPHEADER,$header);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl,CURLOPT_POSTFIELDS,$post);

$lti_msgresponse = curl_exec($curl);
curl_close($curl);

I get back variations on:

{"errors":[{"message":"An error occurred.","error_code":"internal_server_error"}],"error_report_id":2255}

Other, very similar scripts work just fine (although none are "PUT" requests). What am I missing? These generic error messages are really frustrating.

If the syntax is correct maybe it's a permissions issue with the API itself?

Answer

Solution:

Read the documentation!

The fields are: comment[text_comment] submission[posted_grade]

I left out the bracketed portion...

So should be:

$post = [
  'comment[text_comment]'=>$msg_body,
    'submission[posted_grade]'=>$grade,
];

Would help if the error codes actually meant something.

Source