Your model is almost fine, albeit misspecified because if you deal with binary outcome, so you should define an adequate family, e.g. family = binomial().
For fix vs random, this is a complex topic but briefly, it depends on what you want:
Declaring an effect as random is recognizing that its levels are just a sample among a larger population of levels. So here treating hazard_type as random would imply that the 5 hazard types are a random sample of many hazard type. Since you use a simple glmer call, it would also imply that the effect of each hazard type on the logit (under a binomial case, so logistic regression) is normally distributed in the population of hazard types (this is key and a main point of random models: you save parameters at the cost of making assumption about the distribution of the effects). Another thing is that this model will estimate the variance of the effects of such hazard type but you won't directly have direct estimates of the effect of each type. You can infer them as posteriori (it is called BLUPs) but I would not recommend that in your case. Since a random effect estimates a variance, one may also wonder if a sample of 5 types is sufficient to estimate the variance between type (I think it is borderline).
So the question is are those the 5 types there are, if so model them as fixed, or are those 5 types out of many other types of hazard. If so, stick to random but perhaps try to sample some more hazard type...
For participants, it is a no brainer: random makes sense.
I hope this help.