I just had a quick look and it seems to work for me, I created a file called tool.json which contains:
{
"tool_configuration": {
"settings": {
"public_jwk": {},
"title": "Test",
"description": "Test",
"target_link_uri": "http://example.com",
"oidc_initiation_url": "http://example.com",
"public_jwk_url": "http://example.com/jwk",
"scopes": [],
"extensions": [
{
"platform": "canvas.instructure.com",
"settings": {
"placements": [
{
"placement": "account_navigation",
"message_type": "LtiResourceLinkRequest"
},
{
"placement": "link_selection",
"message_type": "LtiResourceLinkRequest"
}
]
},
"privacy_level": "anonymous"
}
],
"custom_fields": {}
}
},
"developer_key": {
"name": "Test Tool",
"redirect_uris": "http://example.com",
"scopes": []
}
}
then if I run this command (ccurl is a wrapper around curl that adds a 'Authorization: Bearer 12345.....' header to requests):
❯ ccurl -s -H 'Content-Type: application/json;charset=UTF-8' --data @tool.json https://oxeval.instructure.com/api/lti/accounts/1/developer_keys/tool_configuration | jq .
{
"tool_configuration": {
"id": 155,
"developer_key_id": 185,
"settings": {
"public_jwk": {},
"title": "Test",
"description": "Test",
"target_link_uri": "http://example.com",
"oidc_initiation_url": "http://example.com",
"public_jwk_url": "http://example.com/jwk",
"scopes": [],
"extensions": [
{
"platform": "canvas.instructure.com",
"settings": {
"placements": [
{
"placement": "account_navigation",
"message_type": "LtiResourceLinkRequest"
},
{
"placement": "link_selection",
"message_type": "LtiResourceLinkRequest"
}
]
},
"privacy_level": "anonymous"
}
],
"custom_fields": {}
},
"created_at": "2022-11-05T03:58:50-04:00",
"updated_at": "2022-11-05T03:58:50-04:00",
"disabled_placements": null,
"privacy_level": null
},
"developer_key": {
"email": null,
"user_name": null,
"created_at": "2022-11-05T03:58:49-04:00",
"user_id": null,
"name": "Test Tool",
"icon_url": null,
"workflow_state": "active",
"notes": null,
"scopes": [],
"require_scopes": true,
"test_cluster_only": false,
"client_credentials_audience": null,
"api_key": "msnbrNcg6MEWBFw5YcBmsEH7zLf3SPqPdDQSXkMvw3nFp1zttbNdmZkelzTANLie",
"redirect_uri": null,
"redirect_uris": "http://example.com",
"access_token_count": 0,
"last_used_at": null,
"vendor_code": null,
"public_jwk": {},
"public_jwk_url": "http://example.com/jwk",
"allow_includes": false,
"developer_key_account_binding": {
"id": 193670000000000200,
"account_id": 193670000000000000,
"developer_key_id": 193670000000000200,
"workflow_state": "off",
"account_owns_binding": true
},
"account_name": "Oxford Evaluation",
"visible": true,
"is_lti_key": true,
"id": 193670000000000200
}
}
This key then appears in the developer key list for that instance when looking through the web (I've since deleted this key). Maybe the problem you're seeing is permissions related?