Using the Rules module, as suggested in the prior answer, is indeed a way to answer this question. Especially now that there is the 7.x-5.x release of the Quiz module, which enables all sorts of Rules logic to be implemented for quizes. However, if you have many quizes, you'd also end up with many roles if you'd use the approach suggested in the prior answer.
Therefor, I suggest you rather use a combination of the Rules module with the Flag module. Here is a summary of how to do so:
- Use the Flag module to create a flag for tracking Passed Quizes.
- Use the Rules module to implement this logic: if the quiz node (to which this quiz result relates) is not yet flagged (by the flag that was created for it), and the quiz result is that it is at least equal to the pass rate of that quiz, then it is the very first time this user passed the quiz. At which time the quiz node gets flagged. From then on use a Rules Condition to check if the quiz node was flagged or not by the current user. And based on that Rules Condition, you decide to yes or no perform some Rules Action(s), e.g to grant points (but only 1 time).
For more details, refer to my answer to "How to check if user has passed the quiz already before granting user points?", which also includes an export of the configuration of the flag and the rule to get this to work.
PS: I'm assuming this question is about D7.