A flat tidak is grammatically fine and socially cold. Indonesian softens refusals almost always, and it does it with words that all look positive.
Declining an offer
Tidak usah ‘no need’ is the standard, and it is not rude.
Mau kopi? → Tidak usah, terima kasih.
‘Want coffee?’ → ‘No thanks.’
In speech this is nggak usah.
Thank you means no
Say terima kasih on its own in response to an offer and it will be understood as a polite refusal, not an acceptance. This catches English speakers out constantly, because “thank you” in English leans towards yes.
To accept, say ya, mau or boleh ‘sure’.
Hearing a no that never arrives
This is the harder half. Direct refusal is avoided, so a no often arrives dressed as something else.
Belum ‘not yet’ can mean not ever.
Nanti ‘later’ can mean no.
Mungkin ‘maybe’ very often means no.
Iya, iya said quickly and without follow-up can mean no.
None of this is dishonesty. It is a culture where a bald refusal costs the other person face, so the refusal is made soft enough to be declined gracefully in return.
How to read it
Watch for enthusiasm rather than words. A real yes comes with a time, a detail, a follow-up question. A soft no is agreeable and vague.
If you need a definite answer, make it easy to say no: Kalau tidak bisa, tidak apa-apa ‘If you can’t, it’s fine’. Giving someone permission to refuse is the fastest way to get a straight answer.
And the reverse
Indonesians will read your directness the same way. A flat tidak from you lands harder than you intend. Tidak usah, terima kasih costs two extra words and changes the temperature of the whole exchange.