I think You got this all mixed up.
Logic is this,
- testcase have their own ID's
- test-run have their own ID's, and they can have one or 100 testcases (consists of case ID's)
So You first have to create testcases manually. Eg. You would have 10 of them.
Second step is to create TestRun, (from gurock documentation),
POST index.php?/api/v2/add_run/:project_id
(:project_id=can be found under project name, so API can know to which project You are creating Testrun)
and this is its payload:
{
"suite_id": 1, //suite ID, usually is Master num. 1
"name": "This is a new test run",
"include_all": false,
"case_ids": [1, 2, 3, 4, 7, 8] //testcase ID's
}
You can try (test) this in Postman. Put POST enter Your testrail endpoint something like thishttps://testrail.net/index.php?/api/v2/add_run/1234
and ind body and payload from above (json)
And when You do this You should now have testrun with 10 testcases in it.
Screenshot (Postman)

And when You catch logic how this works, all is about in reference for each object.
Testcase reference is ID=C1, TestRun=TR1, Project ID = IM1, and You just assign object to object. Testrun consist of testcases, which You assign in "case_ids": [1, 2, 3, 4, 7, 8] //testcase ID's
etc.
Hope this help at least a bit,