Skip to main content
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.