Service Classes for A2P SMS: Turning Urgency into Operational Policies
Define A2P service classes based on the consequences of delayed, duplicated, or lost messages. A practical framework for documenting priorities, expiry, retries, monitoring, and escalation without confusing internal policies with route guarantees.

Why message type alone is not enough to set operational priority
A2P describes messages sent from an application or software to a person. The category indicates the source of the traffic, not how important it is for a particular message to arrive now, later, or not at all. The name of the use case does not, by itself, resolve that decision.
An OTP may enable a time-sensitive action, but its impact depends on the flow it protects, how long the code remains valid, and what alternatives are available. A transactional alert may be critical in one context and merely informational in another. Likewise, a legitimate promotional communication is not urgent simply because it belongs to a particular category.
Classify messages by their operational consequences: what happens if a message is delayed, duplicated, not delivered, or shown to the wrong person. Classification should follow the purpose and design of the service, not an automatically applied traffic label.
- Document the objective each messaging flow is intended to achieve.
- Assess delay, duplication, loss, and data exposure separately.
- Do not use OTP, transactional, or marketing as substitutes for an impact assessment.

Define classes by the consequences of delay, duplication, loss, and exposure
A service class is an internal policy that groups messages with comparable operational needs. It is not a universal property of SMS or a guarantee of network treatment. Its value is making explicit decisions that might otherwise be scattered across applications, teams, and providers.
To design one, first describe the specific harm caused by each type of failure. A delay may make an instruction no longer valid; a duplicate may confuse the recipient or repeat an action; loss may block a task; and exposure of message content may reveal information that should not remain accessible. Assess each impact using criteria approved by the responsible teams. Do not assign scores that appear to be measured data when they are not.
Then define what behavior is acceptable. For example, a team may decide that a message is no longer useful after a specified period, or that sending it again requires a prior check. The expiry period, retry logic, and privacy measures should reflect the business process and applicable obligations; there is no single value that works for every message.
- Specify the expected outcome and the cost of arriving late.
- Define when a message is considered obsolete and what should happen then.
- Consider duplicates, sensitive content, incorrect recipients, and alternatives to SMS.
- Have product, operations, engineering, and security validate the relevant impacts.

Create a decision matrix with verifiable criteria and accountable owners
A matrix helps turn the assessment into a policy that can be reviewed. It can include the class, the flows it covers, the consequences of each failure mode, functional expiry, retry rules, observability level, and the person responsible for approving changes. Separate verified data from assumptions and note how each decision will be checked.
Use manageable categories rather than creating a class for every template or customer. An initial structure might distinguish time-sensitive messages, important messages without an immediate expiry, and deferrable messages. The names are an internal convention; what matters is that each class has clear entry criteria and defined handling.
The matrix should also specify exceptions and controls. If a flow combines messages with different levels of impact, avoid assigning the highest class to all traffic for convenience. Identify who can authorize exceptions, for how long, and what evidence will be retained for review.
- Suggested fields: class, flow, impact of delay, impact of duplication, impact of loss, and content sensitivity.
- Add expiry, retries, observability, escalation thresholds, and an owner.
- Record assumptions, exceptions, approval date, and next review.
- Assign a person or team to own each decision, not just the technical configuration.
Translate each class into expiry, retry, priority, and escalation policies
Expiry should express how long it makes sense to try to deliver a message, given its purpose. Distinguish the message’s functional expiry from any technical parameter an API, protocol, or route may offer. Before relying on a parameter, confirm its availability, meaning, limits, and behavior using the relevant documentation and with the appropriate counterpart.
Retries need explicit rules: what event triggers them, how many attempts are allowed, how long to wait between attempts, and when to stop. Keep in mind that a technical acknowledgment does not always demonstrate that the person received the content on their handset. Indiscriminate retries can create duplicates or deliver a message when it is no longer useful; the business system should account for these cases.
Priority can order work within your own platform, if that platform implements such a function. Do not describe it as network priority or preferential route treatment unless documentation or a contract confirms this. Escalation, in turn, should specify observable conditions, owners, internal response times, and permitted actions—without promising that escalation will resolve delivery.
- Define which status or event triggers a retry and what stops it.
- Avoid repeating expired messages; record the reason for cancellation.
- Check how duplicates are detected and handled in the application.
- Separate internal queue priority from any confirmed route capability.
- Specify who investigates an anomaly and what evidence they should review.
Separate internal priority from the route’s actual capabilities, treatment, and quality
Assigning a high class in the originating system does not oblige a network, aggregator, or route to process the message preferentially. Nor does it, by itself, change coverage, capacity, availability, latency, or delivery outcomes. These properties must be assessed for the specific route and destination using available information and verifiable conditions.
Before associating a class with a route, confirm what has been documented: destinations served, connectivity, technical limits, error handling, receipt generation, and support mechanisms. If information is unavailable, record that uncertainty rather than turning it into a guarantee. HTTP or SMPP compatibility, for example, describes a form of connectivity, not a promise of delivery.
The BulkSMSMarket platform describes route discovery and management features, HTTP and SMPP connectivity, access to providers, and HLR lookups. Operational availability, authentication, balances, billing, and live routing are not presented as current public services. Therefore, do not assume that production prioritization or routing capabilities are available here.
- Validate capabilities by destination and route, not based on a class name.
- Distinguish a documented feature from a commercial or internal expectation.
- Consult the quality, connectivity, and purchasing pages to evaluate criteria before choosing a route.
- Do not interpret an HLR lookup as proof of consent, identity, ownership, or guaranteed delivery.
Design metrics and reviews without conflating acceptance, DLRs, and receipt
Measure each stage separately. A request accepted by a platform, a message forwarded to the next system, and a delivery receipt (DLR) are distinct events. A DLR reported by the route is evidence of the status reported by that route, not independent verification that the person saw the message or that its content was displayed correctly on their handset.
Define metrics that answer specific questions: How long does each stage take? What proportion of messages reaches a reported status? What percentage expires? How many retries are performed? How many duplicates does the application observe? Specify the denominator, time window, destination, route, event source, and how unknown statuses are handled. Without consistent definitions, comparisons can be misleading.
Review results alongside data quality. Differences between routes or destinations may be due to different conditions, incomplete records, or different interpretations of statuses. Do not turn historical metrics into future guarantees. A regular review should allow policies to be adjusted while also making clear who approved the change and what evidence informed it.
- Separate acceptance, submission, reported DLR, expiry, failure, and verified receipt—if an independent mechanism for the latter exists.
- Document the source, coverage, and limitations of each indicator.
- Analyze duplicates and retries alongside delivery statuses.
- Use comparable windows and segments, and explicitly flag missing or uncertain data.
Practical application: OTPs, transactional alerts, and deferrable communications
For an OTP, start with the process it protects and the validity period defined by the application. Decide what happens if the code arrives late, if more than one is requested, or if the first message is still in transit. The application may need to invalidate earlier codes or limit the usefulness of an expired code; these decisions belong in the flow design and should be reviewed with security and product owners. Do not assume that prioritizing the SMS guarantees it will arrive sooner.
For a transactional alert, identify whether it communicates a change that requires immediate action or simply reports an event. In the first case, determine how long the alert remains useful and what to do if sending fails or it expires. In the second, a less urgent policy may be reasonable. The transactional label alone does not determine the class.
For a non-urgent communication, such as a consented promotional message that complies with applicable rules, the policy may allow more delay or cancellation once a defined window expires. Check applicable preferences and permissions, control campaign expiry, and do not send messages that are no longer useful. An operational class does not replace consent or regulatory compliance.
- OTP: tie expiry and retries to the validity of the protected process.
- Transactional alert: determine whether the recipient needs to act and within what timeframe.
- Deferrable communication: set a useful window, cancellation conditions, and consent controls.
- In all three cases, document duplicates, ambiguous statuses, and operational alternatives.
Checklist for approving and maintaining a policy
A class is ready for review when it describes the flow’s purpose, the consequences of failures, and rules the system can actually apply. Approval does not end the work: the policy must be maintained when the process, security requirements, route, or way statuses are observed changes.
Use this checklist before putting a class into production or changing how it is handled. If an answer depends on an unconfirmed external capability, make it a validation question, not an assumption.
- Is the business outcome described, and is someone accountable for the flow?
- Have delay, duplication, loss, and content exposure been assessed?
- Does functional expiry match the period during which the message is useful?
- Do retries have triggers, limits, intervals, and a stop condition?
- Are the risks of duplicates and obsolete messages controlled?
- Is priority limited to verified internal capabilities?
- Are route capabilities and restrictions documented for the relevant destinations?
- Do metrics distinguish acceptance, reported DLR, and handset receipt without treating them as equivalent?
Frequently asked questions
Does a high service class make an SMS arrive sooner?
Not necessarily. Internal priority only orders work if the system implements it, and it does not demonstrate that a route or network will give the message preferential treatment. Confirm specific capabilities and do not promise delivery outcomes.
Should every OTP belong to the most urgent class?
Not by definition. Assess code validity, the impact of delay, flow alternatives, duplication risks, and security measures. The OTP category does not replace that analysis.
Does a DLR confirm that the person received the SMS on their phone?
A DLR indicates the status reported by the system that generates it. On its own, it is not independent verification of receipt on the handset or that the person saw the message.
How should retries be set?
Define the event that triggers them, the limit and interval between attempts, the stop condition, and how duplicates are handled. Align the rules with the message’s validity and verify which statuses and parameters each integration offers.
Does the service class determine route priority?
No. It is an internal operational policy unless a route-prioritization capability is documented and confirmed. It should not be inferred from an HTTP or SMPP connection or from the label assigned to the message.
Sources consulted
- NIST Digital Identity Guidelines (SP 800-63-4)National Institute of Standards and Technology (NIST)
- OWASP Authentication Cheat SheetOWASP
- 3GPP specifications by series3GPP
- ITU-T Recommendation E.164International Telecommunication Union (ITU-T)
- GSMA networks resourcesGSMA
- IFT study on A2P short messaging servicesInstituto Federal de Telecomunicaciones (IFT), México