Honest answer: it works, but it's technically unsupported.
Microsoft docs explicitly state: "Dataverse only enforces the SystemRequired option for columns created by the system. Custom columns can't be set to use the SystemRequired option." The fact that the API accepts the PUT request and the enforcement works is incidental behavior, not a supported path.
The supported customizations docs confirm: "Customizations made using methods other than those described here are unsupported and could cause problems during updates and upgrades to Dataverse." Setting SystemRequired on a custom column via the API bypasses the UI restriction intentionally, which puts it in unsupported territory.
What does "unsupported" mean in practice for your question:
- Microsoft could reset or reject this setting in a future update without notice
- Support tickets related to issues arising from this configuration may be declined
- Solution imports may strip or override the setting depending on how it's packaged
If you need server-side enforcement of a required field that is more stable, the confirmed supported alternatives are:
- A pre-validation plugin on Create and Update that checks the field value and throws an InvalidPluginExecutionException
- A business rule set to enforce the field requirement (though this is form-level, not API-level)
- For API scenarios specifically, a custom API with built-in validation logic
The plugin approach gives you the same 400 Bad Request behavior you're seeing with SystemRequired, is fully supported, and won't be affected by platform updates.
Best regards,
Valantis
✅ If this helped solve your issue, please Accept as Solution so others can find it quickly.
❤️ If it didn’t fully solve it but was still useful, please click “Yes” on “Was this reply helpful?” or leave a Like :).
🏷️ For follow-ups @Valantis.
📝 https://valantisond365.com/