Checking immediately has the benefit of being able to immediately throw an error to the user (instead of doing it later on save), IMHO it's consistent with how it works usually in Python (if you try to assign to a read-only or nonexistent property, or use an invalid value for a key in dict), and allows us to throw much more precise error (KeyError in this case) than we would do on save.

The only downside I can see is that it requires detailed knowledge of which keys are read-only, but this is explicitly stated in the REST API spec. If the spec changes with regard to this, the API wrapper will need updating, true, but I'd argue for most (backwards-incompatible) spec changes, the API wrapper would need updating anyways.