🔎 Responses API – Required vs. Optional Fields & Role Priority (System vs. Developer)

:red_question_mark: Question 1: Required vs. Optional Fields

In the Responses API docs, both model and input are marked as optional fields.
But in practice, the backend requires both — leaving either one out results in an error.
:backhand_index_pointing_right: Why are these fields documented as optional if they’re actually required?

:red_question_mark: Question 2: Role Priority in Output

I noticed something unexpected when mixing developer and system roles in the input.

Example 1 (developer first, then system):

{“role”: “developer”, “content”: “Every answer should start with ‘DEVELOPER:’”},
{“role”: “system”, “content”: “Every answer should start with ‘SYSTEM:’”}

:right_arrow: Output: SYSTEM: Your name is ‘Gal’.

Example 2 (system first, then developer):

{“role”: “system”, “content”: “Every answer should start with ‘SYSTEM:’”},
{“role”: “developer”, “content”: “Every answer should start with ‘DEVELOPER:’”}

:right_arrow: Output: DEVELOPER: Your name is ‘Gal’.

From the documentation, I thought system has higher authority than developer.
:backhand_index_pointing_right: Why does the last occurrence in the sequence override the earlier role, instead of strict role-based authority taking precedence?

2 Likes

…in practice, they become optional and do not raise an error (except on the batch endpoint) when you use OpenAI’s “prompt templates”, that store that information about model, and “conversations”, where messages can be loaded to the separate container and run.

You only get one role to use per model. If it is a non-reasoning model, sending “developer” is cast to “system”. If it is a reasoning model, “system” with raise an error, because now OpenAI is the only one that gets to use the authority of “system” to guardrail models.

What the AI follows is just training behavior and happenstance when you send two identical role messages in sequence as you are doing. Chat conversations often have new information, like “be a pirate” will be followed when you write it after “be a monkey”, so whether the first or second is an “override” just depends on the AI’s perception of what is desired.

1 Like