500 Server Error When Adding a Field to a Project
This article examines an error that might occur when you add a custom field to a project using YouTrack REST API. You might get this error when you reference a field prototype instead of a project custom field in a POST request.
Error Message
Request Details
Here are the details about a sample request that might result in this error.
Attribute | Value |
---|---|
Request method | POST |
Endpoint | /api/admin/projects/projectID/customFields |
Request body |
{
"name": "Last message related emails",
"id": "46-21",
"$type": "CustomField"
}
|
HTTP response code | 500 |
Troubleshooting
Here are some possible causes and suggestions on how to overcome the error and add a field to the project.
Cause
The ID of the custom field that you're using in the body of the POST request is incorrect. It references the prototype of a custom field instead of the project custom field.
In your request, you are adding a prototype of a custom field to a project. Projects, however, don't contain direct references to the base entity. Instead, they contain references to instance of a CustomField
entity, which is ProjectCustomField
.
Solution
The first step to a valid POST request is to figure out which entity type this resource expects. In the case of the /api/admin/projects/projectID/customFields
resource, the expected entity type is ProjectCustomField. You must pass an object of the corresponding type in the request body.
Each project custom field contains the settings of its custom field prototype (an object of the CustomField
type). These settings are stored in the field
attribute of the ProjectCustomField
entity.
When you received the error, you tried passing an object of the CustomField
type in the request body. Let's reuse this object in an attribute of a ProjectCustomField
entity.
The final request body would look like this:
Note that you still need to pass the correct $type
of each object. The type of the main object is ProjectCustomField
, and the type of the custom field prototype inside it is CustomField
.