I sent 1000 messages and was billed for 1240. Why?
I sent 1000 messages and was billed for 1240. Why?
Segments. You are billed per segment, not per message, and 240 of yours were longer than one.A message over 160 GSM-7 characters splits at 153 per segment. If anything in the text forces UCS-2 —
a curly apostrophe is the usual culprit — the limits drop to 70 and 67, so a 150-character message
becomes three segments.
/secure/rate returns submit_sm_count for any body, free, before you send it.I sent 1000 and was billed for 960. Is that a mistake?
I sent 1000 and was billed for 960. Is that a mistake?
No — refusals cost nothing. Unapproved sender IDs, unmatched templates, missing mandatory TLVs and
insufficient credit all leave you charged nothing, or refunded if the charge was already taken.The count you sent and the count you were billed for are legitimately different numbers. Refusals
are the gap, and your provider can list them.
Why am I being refused when I have money on the account?
Why am I being refused when I have money on the account?
Almost always a refill in flight. Credit is reserved in blocks and refills are asynchronous, so a
message arriving mid-reservation is refused with money still there. Retrying succeeds.The block size does not strand credit — a reservation falls back to the single message that asked
if that is all the balance covers, so you spend every unit you hold.A refusal that persists on a funded account is a different problem; raise it.
Do I get refunded for a failed message?
Do I get refunded for a failed message?
It depends where it failed:
The last row is the one worth internalising: a handset that was switched off for a day costs you the
message, because your provider paid to try.
A customer says they never got a message I was billed for
A customer says they never got a message I was billed for
Look at the final state on the record.
DELIVRD means the carrier reported delivery — beyond that is
a query for the carrier, and operator_msg_id is the handle you quote when raising it.If the state is UNKNOWN or the message settled as EXPIRED with no receipt ever arriving, ask your
provider whether receipts are requested at all on that route. If every message on a route settles
as EXPIRED, nothing is reporting outcomes and the delivery rate is meaningless rather than zero.Why is a partly-delivered long message billed in full?
Why is a partly-delivered long message billed in full?
Because every segment was submitted and paid for. Resolution reports the worst segment’s outcome,
so the message reads FAILED — but the segments that did go were still carried.Billing follows what was sent, and delivery reporting follows what the recipient could read. They are
answering different questions.
Can a retry double-charge me?
Can a retry double-charge me?
Only if you retry something that actually succeeded. There is no idempotency key on
/secure/send, so a retry after a timeout sends a second message and charges for it.Retry only on 429 and 500. A 500 is explicitly safe — the charge is reversed before you get it —
but a timeout is not, because the message may have been accepted and you simply never saw the
response. Keep your own de-duplication key for anything user-visible.Does a quote cost anything?
Does a quote cost anything?
No.
/secure/rate sends nothing, charges nothing, and counts against no rate limit. It is the only
genuinely free pre-flight check on the API.Why does the same message cost different amounts to different countries?
Why does the same message cost different amounts to different countries?
Pricing is per destination — country and often network. That is why
to is required on a quote: a
price without a destination would be a guess.product can change it again, if your provider has allowed your login more than one.How far back does my history go?
How far back does my history go?
Your provider’s retention policy decides that, and records are purged on a schedule. If you need
history beyond it, export on a schedule of your own rather than assuming it will be there.