Most people have 2 ways of answering this, and have used both. Swallow it and say "it's fine." Or say all of it, right now. Both cost something. The first one keeps the hurt. The second one starts a fight about how you said it.
There is a third way, and it is a skill, not a personality. Say what happened and how it felt, in 1 or 2 lines, and leave out the part about who he is.
Free to try. We never store your chats.
"How do I say I'm hurt" gets you a fill-in-the-blank line. I feel ___ when you ___. It is not wrong. It is written for anyone, so it sounds like anyone, and some people hear a line like that as a speech and go stiff before they get to the middle.
You are not saying this to anyone. You are saying it to 1 person who has his own way of taking hard things. How he took it last time is worth more than the template.
It feels like the grown-up choice. It is really the first option, used up. Look at how it goes:
He is not being careless there. He asked, and you told him twice. He believed you. That is the part that later turns into resentment: you said it was fine, and then you were hurt that he took you at your word.
So if you said "it's fine" and it wasn't, bringing it back up is not starting something. After twice, it is a repair.
Go back to the last time you told him something bothered you. Then look at what he did.
If he gets defensive whenever you bring something up, that line is the thing to change. The feeling can stay exactly the same.
Change the first 6 words. A hurt that starts with who he is starts a fight. A hurt that starts with what happened starts a conversation.
Same hurt. Only 1 of them gives him something to answer besides a defense.
1 thing, not the list. If you have been holding this in for weeks, all of it wants to come out in the same message. Pick the 1 that still stings most. The rest can come up in the conversation this one opens.
Know what you want back. If you do not want an apology, you just want him to understand, then do not end with "so?" or "are you going to say anything?" That turns it into a demand, and he will answer the demand.
Something like: hey, i said it was fine and it wasn't. when you forgot friday it really stung. i'm not trying to fight, i just didn't want to keep pretending
That does 3 things. It owns the "it's fine" so he is not confused about why this is coming up now. It names 1 thing that happened, not who he is. And it tells him what you want, which is to be heard, so he does not have to guess and get defensive while guessing.
If he says sorry, let it land before you add the next thing. If he pushes back, you do not have to win it over text. can we talk about it tonight is a full answer.
If you are still in the middle of the fight, or it is 1am and your hands are shaking, the message you send will be all of it at once. The hurt will keep until morning. A message the next day is not late.
If the hurt is big, over text is for asking for the talk, not for having it. And if he has asked for space, blocked you, or told you to stop contacting him, do not push contact to be understood. Sending nothing today is a normal result.
You paste the conversation and it reads it against him rather than against a template — how he has taken hard things before, where he turned last time, and whether tonight is a good time to raise it.
Then it writes the reply back in 4 tones, and tells you if the better move today is to wait instead of sending anything.
Try it on your conversation