Skip to main content
Every refusal looks the same, whatever refused it:
  • code is the contract: stable, safe to branch on.
  • message is for people. It may be improved; don’t parse it.
  • field names the part of the request at fault, when there is one.
Every answer, refused or not, carries an X-Request-Id header. Quote it to support@fireflo.au and we can find the request. You can send your own X-Request-Id and it is used instead.

Codes

Some sending endpoints add codes of their own — for example no_channel when a message has nowhere to go. Each API reference page lists the codes it can return.
A provider’s own words are passed on when they help (“the template isn’t approved”). When a provider couldn’t be reached at all, you get a plain sentence instead — retry shortly.