Troubleshooting: Türkiye SMS with a URL arrives stripped or empty
A recipient on a+90 number reports receiving nothing — or an empty
message — while your send still reports submitted. Until 1 April 2026
that combination looked like a carrier-side anomaly; since Türkiye’s BTK
Decision 2025/DK-YED/412 took effect it is a predictable, policy-driven
strip: A2P SMS bodies that carry a URL, sent from a sender not registered
domestically in Türkiye, have the entire payload stripped at delivery
by the TR carrier. The send succeeds, the carrier accepts the traffic, and
the handset gets nothing.
This page matches the two markers Orbit surfaces for that gate — the
tr_url_strip_warning advisory stamped on current message metadata, and
the historical 422 MESSAGING_TR_URL_STRIP_VIOLATION reject older
integrations may still reference — and ends each triage in one of the two
workarounds you own as a tenant: move the link-bearing content onto MMS,
or register a domestic TR sender.
What the failure looks like
- You send an SMS to a
+90destination whose body contains a URL — anhttp(s)://…link, awww.domain, or even a barebrand.com. POST /api/v1/messages/smsaccepts the request and the status webhooks reportsubmitted.- The TR recipient’s handset receives an empty or missing message — the carrier stripped the payload in flight because the sender is not registered domestically in Türkiye.
Identify which marker you are seeing
Current integrations get a non-blocking advisory: the send proceeds, and the response stamps the advisory on the message metadata so your application can react to it:+90), the body contains something that looks like a URL, and the
sender’s registered country is not TR. Read it on the send response (or
the message’s later GET) — do not wait for the recipient complaint.
Older integrations may instead reference the historical 422 reject
MESSAGING_TR_URL_STRIP_VIOLATION, which refused the send outright. That
fail-closed posture was replaced by the advisory above — if an older
handler still hard-fails on this code, treat it as the same diagnosis and
migrate the check to the metadata advisory.
Workaround A — move link-bearing content to MMS
The BTK rule targets SMS payloads. MMS bodies carry links differently, so moving the URL-bearing content onto the MMS channel clears the gate:- Send the message as MMS (with or without an attachment) instead of SMS
for
+90destinations that must carry a link. - Keep plain-text SMS for
+90traffic without links — no domestic sender registration needed as long as the body carries no URL-like string (http(s)://…,www.…, or a barebrand.com-style token).
Workaround B — register a domestic TR sender
Register a sender domestically in Türkiye and the same SMS body delivers intact — the advisory stops stamping because the sender’s registered country is TR:- Register the sender ID for Turkish destinations — the sender-identity flow on Register the sender ID covers the registration path.
- Once the sender’s registered country resolves to TR,
+90traffic from it clears the BTK check and URL-bearing SMS delivers intact.
What not to do
- Do not keep burning SMS spend into stripped payloads. A
submittedstatus on TR traffic whose body carries a URL is a spend sink, not traffic — the recipient never sees it. Treat an unexpectedtr_url_strip_warningas a reason to stop and reroute, not to retry. - Do not assume carrier-side delivery when the status is
submitted.submittedmeans the carrier accepted the message — it says nothing about handset delivery, and on this gate the strip happens after acceptance. Watch the metadata advisory on every+90send. - Do not try to “disguise” the URL. The detection is deliberately
permissive —
www.prefixes and barebrand.comtokens count as URLs. Obfuscating the body buys a false positive the other way: the strip is still carrier-side, and the recipient still gets nothing. - Do not treat the older 422 reject as a current gate. The current
send never hard-fails on this rule — it proceeds and stamps the
advisory. Fix detection by reading metadata, not by catching
MESSAGING_TR_URL_STRIP_VIOLATION.
Escalation bundle
Open a support ticket only when the advisory fires on a setup you believe is registered domestically, or the strip persists after both workarounds. Include:- The message id of a stripped send and its full metadata.
- The destination number (E.164) and the sender ID sent.
- The sender’s registered country as it shows under Settings → Channels → SMS (or on the sender-registration record).
- Your organization ID (Settings → Organization, or
organizationIdfromGET /api/v1/me).
See also
- Error code reference — the full
MESSAGING_TR_URL_STRIP_VIOLATIONrow. - SMS channel guide — the SMS send surface and status webhook shape.
- FAQ: Türkiye destination flagged with
MESSAGING_TR_URL_STRIP_VIOLATION— the short-form answer this page expands. - Register the sender ID — the sender-registration flow workaround B depends on.