What Causes 550 5.1.3 Errors and Why They Kill Email Deliverability

You send a campaign to 50,000 contacts. Only 49,999 are delivered. One 550 5.1.3 error—rejected recipient address—shows up in your logs. You think it's a fluke. But it isn’t. That one error can trigger inbox filtering. It can poison your sender reputation. It can even get your domain flagged by major providers like Gmail, Outlook, and Apple.

These errors aren’t random. They’re signals. A 550 5.1.3 means the recipient’s mail server says, “This address doesn’t exist.” But if you’re sending at scale, that single failure usually points to a list full of stale or malformed addresses. Without a robust email deliverability platform with dynamic fallback routing for 550 5.1.3 errors, your sends go nowhere—and your domain trust erodes silently.

Key takeaways

  • 550 5.1.3 errors indicate a hard bounce from a non-existent recipient, which harms sender reputation even at scale.
  • Unfiltered 550 5.1.3 errors in bulk sends trigger filtering and increase the risk of domain reputation damage.
  • An email deliverability platform with dynamic fallback routing prevents single-point failures by redirecting undeliverable messages to alternative delivery paths.

Why Static List Cleaning Isn’t Enough to Solve 550 5.1.3 Errors

You can clean a list until it’s spotless, but that doesn’t stop 550 5.1.3 errors when a formerly valid address gets deleted, reassigned, or blocked by a mail server that’s changed its policy. Static verification only checks the address at a single moment in time—it can’t see what happens later, when delivery fails not because the address was wrong, but because the recipient’s system changed. That’s why a clean list still gets rejected daily.

What Static Verifications Miss

Most list cleaning tools check for syntax, domain existence, and basic MX records. They flag obvious fakes or typos, but they don’t detect when a user has been removed from a corporate email system—especially if that system reuses old addresses after deletion. A 550 5.1.3 error often means the mailbox is gone or permanently blocked, but the address itself still exists and passes basic checks.

And even if the address is valid, your sender reputation or IP can trigger temporary rejections. Mail servers like Gmail and Outlook apply dynamic policies based on volume, engagement, and authentication. Your perfectly clean list might fail in real time due to something outside the email address—like inbound throttling or a recent spike in bounce rate from a shared IP.

Why Real-Time Delivery Risk Matters

Let’s be clear: an email address being “valid” today doesn’t mean it will be accepted tomorrow. The moment the mail server changes its rules—say, due to a policy update or a sudden increase in spam—your delivery can fail, even with a flawless list. Static tools can’t predict or adapt to these shifts.

It’s not just about bad data. It’s about fragile systems that assume correctness is static. The moment your outbound system hits a hard bounce from a formerly valid address, the impact compounds—wasting sends, damaging sender reputation, and lowering inbox placement. You’re not just losing one delivery; you’re risking your entire domain's trustworthiness.

You can’t rely on a one-time check to protect your deliverability. What you need is a system that validates in real time, adapts to dynamic server responses, and routes failures intelligently. That’s where dynamic fallback routing becomes essential—not as a fix for bad data, but as a shield against the unpredictability of real email infrastructure.

Learn how our inbox placement testing identifies real-time delivery risks before your messages are sent.

How Dynamic Fallback Routing Prevents 550 5.1.3 Errors in Production

When an email bounces with a 550 5.1.3 error—meaning the recipient address is undeliverable—the system shouldn’t just fail silently. Dynamic fallback routing intercepts that failure, reroutes the message to a working alternative address, and avoids logging it as a hard bounce. This preserves sender reputation, maintains delivery volume, and keeps mail streams flowing even when individual addresses are invalid or blocked.

What Happens When a 550 5.1.3 Error Occurs

That specific SMTP error code signals a permanent rejection at the receiving server, often because the address doesn’t exist, is blocked, or is on a denylist. If you keep sending to the same address, each attempt gets logged as a hard bounce, which hurts your sender reputation over time. That’s where fallback routing comes in: instead of accepting failure, it redirects the message to a known valid address—like a verified alternate contact or a fallback domain—when the original fails.

Why Fallback Routing Isn’t Just a Workaround

Let’s be clear: this isn’t about sending to a wrong address. It’s about treating invalid recipient data as a delivery risk, not a dead end. If your list has 1% outdated emails, and you don’t handle those bounces smartly, your reputation can degrade—especially with ISPs like Gmail and Outlook that monitor long-term bounce rates. Dynamic routing reduces the number of logged bounces by actively avoiding them.

For example, if a user’s primary email is invalid but their team’s shared inbox or a known contact at the same domain is active, the system can route the message there if the policy allows. This requires accurate list validation first—identifying true invalids, catch-alls, and role accounts. That’s where real-time verification helps. Use our API to catch invalid addresses before they even hit your SMTP server.

While the technique isn’t foolproof—some domains block fallback attempts entirely—it’s a key layer in a robust deliverability strategy. The real benefit isn’t just avoiding 550 5.1.3 errors, but preventing small issues from escalating into delivery rate drops. As RFC 5321 notes, proper handling of SMTP errors includes understanding their context—not just logging them.

Ultimately, dynamic fallback routing isn’t a substitute for clean data. It’s a safety net. Pair it with accurate validation, proper authentication (SPF, DKIM, DMARC), and sender reputation monitoring—and you reduce the risk of delivery breakdowns at scale.

The Mechanics of Fallback Routing: A Technical Walkthrough

When an email fails at the SMTP level with a 550 5.1.3 error—indicating a permanent address rejection—the system logs the failure, checks a pre-defined fallback map, and attempts to route the message to an alternate valid address at that domain, such as a team mailbox or role account. This only happens after two failed attempts and is limited to messages where delivery urgency is low.

How Fallback Routing Works in Practice

  1. SMTP-level failure detected. When the email delivery agent receives a 550 5.1.3 response (typically “User unknown”), it marks the address as unreachable and logs the error for tracking.
  2. Two failed attempts required. The system waits for a second consecutive failure before applying fallback rules. This avoids unnecessary routing for transient issues like temporary DNS glitches.
  3. Lookup against fallback map. The failed email is cross-referenced with a pre-populated map of known aliases, team inboxes, or role accounts (e.g., [email protected], [email protected]) associated with the domain.
  4. Valid alternative found? If a known, active alternative exists, the system replaces the original address and retries delivery using that one. This is not a guess—it’s based on verified patterns and historical data.
  5. Only for non-critical messages. This routing happens only on low-priority or non-urgent campaigns. High-priority messages are not rerouted to avoid violating message intent or compliance rules.

What This Means for Your Deliverability

Without fallback routing, a single typo or outdated contact can drop your deliverability rate. With it, even stale addresses can be resolved—automatically. This isn't magic; it’s based on real patterns in how organizations structure email, which you can see in industry reports on email hygiene.

How Fallback Routing Works in PracticeThe 5 steps described in “How Fallback Routing Works in Practice”, in order.1SMTP-level failure detected. When the email delivery agent receives a550 5.1.3 response (typically “User unknown”), it marks the address asunreachable and logs the error for tracking.2Two failed attempts required. The system waits for a second consecutivefailure before applying fallback rules. This avoids unnecessary routingfor transient issues like temporary DNS glitches.3Lookup against fallback map. The failed email is cross-referenced with apre-populated map of known aliases, team inboxes, or role accounts(e.g., [email protected], [email protected]) associated with the domain.4Valid alternative found? If a known, active alternative exists, thesystem replaces the original address and retries delivery using thatone. This is not a guess—it’s based on verified patterns and historicaldata.5Only for non-critical messages. This routing happens only onlow-priority or non-urgent campaigns. High-priority messages are notrerouted to avoid violating message intent or compliance rules.
The 5 steps described in “How Fallback Routing Works in Practice”, in order.

For example, RFC 5321 (the SMTP specification) defines how servers should handle permanent failures like 550 5.1.3, but doesn’t cover recovery mechanisms—so that part falls to the sending system. Tools like IETF's RFC 5321 define the rules, but smart routing is your solution.

Sometimes, a role address is the only valid endpoint. If you’re sending newsletters to [email protected] and it fails, but [email protected] is active, routing there keeps your message reaching the right team.

But this only works if the underlying address list is clean. That’s why you should always verify before sending. Use a tool like bulk email list cleaning to eliminate invalid, role, and disposable addresses before they cause failures.

Why You Need Real-Time Verification to Power Dynamic Fallback

Dynamic fallback routing for 550 5.1.3 errors only works when your system can distinguish between valid addresses, catch-all domains, and role accounts in real time. Without accurate, up-to-the-second data, fallback rules rely on guesswork, increasing bounces and risking sender reputation. You can’t route around undeliverable addresses if you don’t know they’re undeliverable.

The Problem with Delayed or Incomplete Verification

Many platforms rely on static checks or outdated databases. A catch-all domain may appear valid on paper, but routing to it wastes a sending attempt and can trigger spam filters. Role accounts like info@ or support@ often don’t receive mail in practice, even if they’re technically valid. If your fallback system doesn’t distinguish these, you’re routing messages blindly—increasing the odds of rejection.

Consider SMTP error 550 5.1.3: "User unknown." This is a clear signal the recipient doesn’t exist. But if you’ve routed around it based on an outdated or inaccurate list, you’ve not corrected the core issue. Real-time verification prevents this by validating each address before routing decisions are made.

How Real-Time API and Bulk Verification Enable Accurate Fallbacks

Email List Validation uses a real-time API and bulk verification to return detailed verdicts: valid, invalid, catch-all, or risky. Each address is checked via live SMTP connections, MX lookups, and pattern analysis. This means you know not just *if* an address exists, but whether it’s likely to receive mail.

The system checks for common pitfalls like role accounts (e.g., admin@, sales@) and disposable domains. It also flags catch-all domains—those that accept all incoming mail, often a red flag for spam risk. This data is essential. Fallback routing should only redirect to addresses that are likely to work, not into black holes.

With 98.9% accuracy, Email List Validation’s results are grounded in current, live validation. This means your fallback logic isn’t based on assumptions. It’s based on signals from actual mail servers. The result: lower bounce rates, higher inbox placement, and preserved sender reputation.

For teams using automated workflows, integrating the real-time verification API ensures every outbound email is validated before it’s sent. For growing lists, bulk list cleaning identifies risky or invalid entries upfront. Either way, you’re not gambling on delivery—your system acts on proven data.

As outlined in RFC 5321 and confirmed by deliverability reports from tools like MxToolbox, sender reputation is built on consistent, reliable delivery. Misrouting one email to a catch-all domain may seem small—but cumulatively, it adds up. Real-time insight isn’t just a feature; it’s the foundation of a resilient delivery system.

Verdict Types and Their Role in Fallback Decision-Making

You need to know what each verification verdict means when building dynamic fallback routing. Valid addresses go straight to the inbox. Catch-alls let you test alternate formats. Risky ones should be deprioritized. Invalid and disposable addresses should be excluded from delivery paths. This isn't guesswork—it’s operational logic rooted in mail server behavior and industry standards.

How Each Verdict Informs Routing Decisions

Let’s break down how each email validation verdict influences delivery strategy. The goal is to avoid 550 5.1.3 errors—permanent rejection due to invalid or non-existent addresses—by routing only what has a realistic chance of delivery.

Verdict Type What It Means Routing Recommendation Why It Matters
Valid The address exists and accepts mail. Full deliverability confirmed. Use as primary recipient. No fallback needed. These are your core contacts. Routing these first maximizes inbox placement.
Catch-all The domain accepts all emails, even if the user doesn’t exist. Try alternate formats (e.g., [email protected], [email protected]). Permits recovery via address variation, reducing 550 5.1.3 errors caused by typos or outdated names. Note: catch-alls can be abused—they often lead to low engagement or spam complaints.
Risky High chance of being a role account (e.g., sales@, info@) or temporarily inactive. Flag for low-priority delivery, delay, or use in testing only. Role addresses often lack engagement, trigger spam filters, or bounce due to automated cleanup. Sending to them without filtering wastes sender reputation.
Invalid The address is permanently unreachable—no such recipient exists. Do not route. Remove from the list. Routing invalid addresses causes immediate 550 5.1.3 errors and harms sender reputation. This is a hard stop.
Disposable Temporary email addresses like mailinator.com or temp-mail.org. Exclude from production routing unless testing or outreach specifically requires them. These are used for signups and often discarded. Delivering to them wastes resources and can be flagged by email providers as suspicious.

These verdicts aren’t just labels—they’re operational inputs. A real-time verification system that applies these rules at scale is essential. You can’t rely on email providers to catch the wrong routing path after the fact.

For instance, a catch-all domain might accept *any* address, but if you send to an address that doesn’t exist—like [email protected]—some servers will still return a 550 5.1.3 error if the user account isn’t provisioned. Dynamic fallback routing needs to know the difference between a "catch-all" and a "false positive" to avoid wasting delivery attempts.

Understanding these types helps you set up smarter fallback logic. If you're building a platform that handles large email volumes, tools like real-time email verification APIs can return these verdicts instantly and scale across millions of entries. The same data powers deliverability testing and bulk list cleaning, where you don’t want to send to 5.1.3 invalid entries in bulk.

For more context on how email systems handle address validation, refer to RFC 5321, the foundational standard for SMTP. It defines how mail servers accept or reject addresses during transaction time.

Integrating Fallback Routing with Your Email Platform

You can set up dynamic fallback routing for 550 5.1.3 errors by validating your list, pushing deliverability scores and routing rules back to platforms like SendGrid, Mailchimp, HubSpot, or Klaviyo, then using real-time API calls to adjust delivery paths during campaigns. The in-app AI assistant helps generate rules based on historical delivery behavior and domain trends, turning reactive fixes into proactive strategy.

Build Your Fallback Workflow Step by Step

  1. Validate your list at scale using the Email List Validation bulk tool. Upload your list and get feedback on which emails are valid, invalid, catch-all, or risky. This step prevents sending to addresses that trigger 550 5.1.3 errors at the start. Clean your list before hitting any outbound platform.
  2. Connect the verified list to your email platform via API. Email List Validation integrates with SendGrid, Mailchimp, HubSpot, and Klaviyo directly. Once connected, the system sends back deliverability scores and routing rules — not just “valid” or “invalid,” but actionable intelligence on which domains are likely to bounce or be flagged.
  3. Use the in-app AI assistant to generate fallback routing logic. Based on your past campaign data and domain patterns (e.g., “.edu” mailboxes are slower, some SaaS domains default to catch-all), the AI suggests paths such as “retry via alternate SMTP relay” or “route through third-party provider” for known high-failure segments.
  4. Automate delivery adjustments during campaigns using the real-time verification API. As campaigns run, call the API mid-flight to revalidate failing addresses. If an email fails with a 550 5.1.3 error (which signals a permanent delivery failure), the platform can trigger a fallback route immediately—without interrupting the sequence. This avoids wasting sends and preserves sender reputation. Integrate API checks into your sending workflow to keep routing decisions current.
  5. Monitor performance and refine rules over time. Track how fallback paths affect inbox placement and engagement. The system learns from your behavior, helping refine routing accuracy. You’re no longer guessing which domains to avoid — you’re adapting in real time.

Why This Matters for Deliverability

550 5.1.3 errors are not just bounces—they’re hard failures that signal bad addresses or poor sender reputation. Ignoring them or retrying unnecessarily can hurt domain reputation and trigger blocklisting. The RFC 5321 standard defines this error as a permanent failure, so routing around it is not a workaround—it’s a necessity. Automating fallbacks ensures you never send to dead addresses while preserving deliverability scores and list health.

Testing Deliverability Before Deployment with Inbox Placement

You can catch 550 5.1.3 errors and other deliverability roadblocks before they hit your audience by simulating real inbox delivery across Gmail, Outlook, Yahoo, and other major providers. Email List Validation’s inbox-placement test checks whether your messages land in the inbox—or get filtered to spam—using actual sending routes. It surfaces risky domains, spam scores, and blocklist exposure so you fix issues before sending to real users.

How to Test Delivery Before You Send

  • Run an inbox-placement test using Email List Validation’s inbox-placement tool before launching your campaign.
  • It sends test messages through multiple delivery paths, including fallback routing, to see if they bypass common filtering logic.
  • Results show inbox placement rates per provider, spam score trends, and risk indicators like known blocklists or suspicious sending patterns.
  • Check if 550 5.1.3 errors are triggered by misconfigured DNS, outdated routing, or reputation issues—common causes your fallback setup may not handle.
  • Use the output to adjust SPF, DKIM, or routing rules before the real send, reducing delivery failures by up to 70% in practice.
  • For high-volume senders, this step is as essential as checking code before deployment—prevents costly rollbacks and reputation damage.

What You Learn That Static Verification Can’t Tell You

Standard email verification checks syntax and basic reach. Inbox placement testing reveals what happens after the SMTP handshake: whether your message clears spam filters, how fast providers process it, and if fallback routes actually deliver to inboxes or get trapped in quarantine.

For example, a valid email with a clean syntax might still land in spam if your sender reputation is weak or if your IP is flagged by one of the Spamhaus blocklists. Inbox placement testing detects that risk early.

It also validates your fallback routing logic: if your primary path fails, does the backup actually reach the inbox—or does it just bounce or get flagged? Testing shows the real-world behavior of each path.

Think of it as sending a dry run through the real delivery pipeline. You’re not guessing. You’re observing.

Every message that passes the inbox placement test has a higher chance of reaching the user’s primary folder. For campaigns where timing or perception matters, this step is non-negotiable.

How to Combine Real-Time Validation and Dynamic Fallback in Your Workflow

You can resolve 550 5.1.3 errors (user unknown) and reduce bounce rates by combining bulk validation to tag problematic emails, real-time API checks on new signups, and dynamic fallback routing based on status—like redirecting risky addresses to a catch-all support inbox. Test these paths in real inboxes and refine your logic over time.

Bulk Validation: Tag Addresses by Risk

  1. Run your entire email list through bulk verification to classify every address by status: valid, invalid, catch-all, or risky. This is the foundation of intelligent fallback routing.
  2. Use tools like bulk email list cleaning to detect invalid syntax, non-existent domains, and disposable email addresses before sending.
  3. Mark catch-all domains (where any address is accepted) and suspect addresses (like those with high typo frequency or low engagement metrics) for fallback handling.
  4. Understand that catch-alls may not be bad—but they can’t be used to verify real users. Routing to a shared mailbox (e.g., support@) is often safer than sending to a random alias.

Real-Time Validation + Dynamic Fallback Logic

  1. Integrate the real-time verification API to check new signups or on-demand addresses immediately before adding them to a send. This prevents risky invites from entering your workflow.
  2. Use the real-time email verification API to flag addresses as risky during onboarding or checkout—especially in high-volume forms.
  3. Define routing rules: if an address is flagged as "risky" and the domain is catch-all, route the message to a designated fallback inbox (e.g., [email protected] or [email protected]).
  4. Ensure fallbacks are monitored. If a catch-all gets spam complaints or high bounce rates, revisit your routing logic—this can damage sender reputation.
  5. Test fallback paths with inbox placement testing. Send sample messages through your defined routes and check delivery status in actual inboxes, not just bounce logs.
  6. Use inbox placement tests to validate whether fallback emails actually land in inboxes, not spam folders, across real user accounts.
  7. Review delivery logs and feedback loops. If fallback emails consistently fail (e.g., 550 5.1.3 occurs even for catch-alls), reevaluate whether the fallback address is misconfigured or throttled.
  8. Update routing rules using data: remove domains that never get deliverable fallbacks, or adjust thresholds for what counts as "risky."
550 5.1.3 errors are not just a problem of syntax—they often stem from poor domain configuration, overused catch-alls, or broken mail routing. Fixing them requires more than rewrites; it requires proactive, layered validation and intelligent fallback paths.

SMTP error codes like 550 5.1.3 are common in bulk sends. They signal that the destination server doesn’t recognize the recipient, even if the domain is valid. This happens when the user doesn’t exist, the mailbox is full, or the server blocks unverified users.

According to RFC 5321, 550 5.1.3 specifically means the user is not locally recognized. This error can result from incorrect DNS records, greylisting, or role-based mailboxes (e.g., admin@). A dynamic system that handles these cases with fallbacks reduces list decay and improves sender reputation.

Why Static Fallback Strategies Fail Where Dynamic Ones Succeed

You’re using a 550 5.1.3 error as a trigger to reroute emails to a fallback address like admin@ or info@. But those endpoints don’t adapt when someone leaves, the account is deleted, or the email gets restructured. Static fallbacks are fixed in place—like rerouting traffic to a closed highway. Dynamic routing, on the other hand, uses real-time data to find working alternatives, keeping your message flowing even when the primary contact is gone. It’s not about guesswork. It’s about precision in movement.

Static routing assumes the world doesn’t change

Most static fallback strategies rely on rules like “if bounce, send to admin@.” That’s fine until the admin leaves, the role account becomes inactive, or the mail server rejects it due to spam filters or rate limits. A 550 5.1.3 error from Gmail, for example, often means the mailbox is gone—sending more mail to the same admin address won’t help. It just increases the bounce rate and harms your sender reputation. The fix isn’t more rules. It’s smarter routing.

Dynamic fallbacks adapt to reality

With dynamic fallback routing, you’re not guessing where the email can go. You’re using up-to-date data—real-time validation, inbox placement testing, and verified alternate addresses—to find a working contact. If the primary recipient is unavailable, the system tests and identifies active alternatives based on actual delivery proof. This reduces reliance on role accounts, which are often catch-alls or unmonitored. You’re not just rerouting. You’re re-engaging.

RFC 5322 and industry reports from Return Path consistently show that email deliverability decays rapidly when sender reputation drops due to repeated failed deliveries. Static fallbacks contribute to that decay. Dynamic fallbacks, by contrast, preserve sender reputation by ensuring messages reach real, active inboxes. It’s not a minor improvement. It’s foundational to campaign longevity.

For teams managing large lists, this adaptability isn’t a luxury. It’s how you keep campaigns alive over time. The same email that bounces today might deliver tomorrow to a different role account or a secondary contact. The real challenge isn’t detecting the 550 error. It’s what you do next. You can verify your list ahead of time using tools that detect valid addresses, catch-alls, and role accounts. Bulk email list cleaning removes dead or risky addresses before they trigger failures. Or you can integrate real-time verification directly into your workflow: verify emails as they’re added with a low-latency API. These practices are the first line of defense against delivery breakdowns. Dynamic fallbacks are the recovery system. Together, they keep your inbox placement stable.

Conclusion: Build a Resilient Email Delivery Pipeline

550 5.1.3 errors aren't just bounce messages—they're clear indicators of misalignment between your sending infrastructure and recipient mail systems. Ignoring them means accepting preventable failures in inbox placement.

Static list hygiene and one-size-fits-all routing can't adapt to real-time changes in infrastructure, domain policies, or sender reputation. Without dynamic fallback routing, even clean lists fail when delivery paths break.

A resilient email delivery pipeline requires real-time verification, continuous inbox placement testing, and the ability to reroute deliveries based on live feedback. Email List Validation delivers all three: clean your list, test deliverability, and enable smart fallback routing to maintain consistent, reliable delivery at scale.

Keep reading

Ready to put this into practice? Email List Validation verifies emails with 98.9% accuracy — start with 100 free verifications.

Frequently asked questions

What does 550 5.1.3 SMTP error mean?

It means the recipient’s mailbox doesn’t exist. The sending server rejected the email due to an invalid or unassigned address.

Can dynamic fallback routing fix all 550 5.1.3 errors?

No. It only works when valid alternative addresses exist. It can't create missing recipients but can avoid sending to dead addresses.

How accurate is Email List Validation’s real-time API?

It delivers 98.9% accuracy in detecting valid, invalid, and catch-all addresses in real time.

Do fallback routing rules work with Mailchimp and HubSpot?

Yes. Email List Validation integrates directly with Mailchimp, HubSpot, Klaviyo, and SendGrid to enable fallback logic during sends.

What’s the difference between catch-all and invalid email status?

Catch-all domains accept any email address. Invalid addresses are permanently unreachable, even if the domain is catch-all.

Why do I still get 550 5.1.3 errors after cleaning my list?

Because some addresses were valid at signup but later deleted. Real-time verification and fallback routing catch these post-signup failures.

Does fallback routing increase spam risk?

No—when properly configured, fallback routing avoids sending to disposable or invalid addresses, reducing spam signals.

Can I test fallback routing before using it in production?

Yes. Use Email List Validation’s inbox-placement testing to simulate delivery across major inboxes and validate fallback paths.

How does sender reputation survive fallback routing?

By preventing repeated deliveries to invalid addresses, fallback routing reduces bounce rates and maintains a clean sender reputation.

Can I use the in-app AI assistant to build fallback rules?

Yes. The AI assistant analyzes past delivery patterns and suggests fallback rules based on domain behavior and recipient trends.

Do purchased verification credits expire?

No. Credits purchased for Email List Validation never expire, giving consistent access to verification and delivery testing.

What’s the best way to start testing email deliverability?

Begin with 100 free verifications to test your list, then use inbox-placement testing to simulate real-world delivery.