Skip to main content
Some destinations need parameters that are not part of an ordinary send — most visibly Indian DLT, which requires a registered entity id and a template id on every message. custom_tlvs carries them.

Four rules, and each has bitten someone

The checked-in swagger file types this as an array. It is wrong — the parser wants an object, and generating a client from that spec produces a payload that is refused on the first call.
1401 is decimal 1401, which is tag 0x0579 — not the 0x1401 almost everybody means.This is the dangerous one, because it parses. Nothing is refused: the gateway sends tag 0x0579, the carrier ignores a parameter it does not recognise, and the message is delivered without the value it was supposed to carry. There is no error anywhere.Write 0x1401 when you mean hex. Decimal tags are legal and some vendors do publish them that way, which is precisely why the gateway cannot guess for you.
tmid_0x1401 is tag 0x1401. The name in front is decoration the gateway keeps for its own logs, and it may itself contain underscores — source_network_id_5120 is tag 5120 decimal.A name on its own is not enough. The gateway matches on the number.
:Int8 appended to a key pins the wire encoding. The widths are octets, following the SMPP convention:Read as bits, Int8 would look like a one-byte field and the resulting refusal is baffling. A DLT template id around 1.4 × 10¹⁸ fits nowhere smaller than eight bytes.

The field name keeps its underscore

Every other field on this API treats _ and - as the same character. custom_tlvs does not — custom-tlvs is 400 Unknown argument.

Where else a tag can come from

You are not the only source, and yours does not always win:
1

Your custom_tlvs

Only extracted if the listener declares the tag — undeclared tags are discarded, not passed through.
2

Your credential's defaults

Set by your provider, filling tags you did not send. This is where a DLT entity id usually belongs, since it is a property of you rather than of any one message.
3

The whitelist stamp

On an approved template. In replace mode this overwrites what you sent — and that overwrite is the approval.
4

The vendor's defaults

Filling anything still unset at send time.
If a tag you send never arrives, the likeliest cause is that the listener does not declare it. Ask your provider whether it is in registered.tlvs.submit — an undeclared tag is dropped silently at ingress, before anything else in this list runs.

TLV declarations

The full grammar and the five declaration levels.

Send one message

Every field on the endpoint.