https://www.braze.com/docs/user_guide/data/activation/custom_data/custom_attributes/array_of_objects/#limitations
Updating or removing items in an array requires identifying the item by key and value, so consider including a unique identifier for each item in the array. The uniqueness is scoped only to the array and is useful if you want to update and remove specific objects from your array. This is not enforced by Braze.
For update (there is also an example on the page for add):
https://www.braze.com/docs/user_guide/data/activation/custom_data/custom_attributes/array_of_objects/?tab=update#api-example
{ "attributes": [ { "external_id": "user_id", "_merge_objects": true, "pets": { "$update": [ { "$identifier_key": "id", "$identifier_value": 4, "$new_object": { "breed": "goldfish" } }, { "$identifier_key": "id", "$identifier_value": 5, "$new_object": { "name": "Annette" } } ] } } ] }