Guides

Best 5 AWS Bedrock Alternatives for LLM Routing in 2026

Five AWS Bedrock alternatives for the LLM routing layer, scored on model catalog, cross-cloud reach, IAM complexity, eval and optimizer loops, and what each replacement actually fixes if Bedrock is your gateway.

·
17 min read
ai-gateway 2026 llm-routing alternatives
Editorial cover image for Best 5 AWS Bedrock Alternatives for LLM Routing in 2026
Table of Contents

AWS Bedrock is a great place to run Anthropic, Meta, Mistral, Cohere, and Amazon’s own models inside a VPC. It isn’t a great place to do LLM routing. Both jobs involve an HTTP endpoint, a model name, and an API key, but they pull in opposite directions when you scale. Bedrock optimizes for “stay inside AWS, sign every request with SigV4, account for every token in CloudWatch.” A routing layer optimizes for “pick the cheapest competent model right now, fall over to a different provider in another cloud when one breaks, and feed the trace back into prompt and policy updates next week.”

Teams that started by treating Bedrock as the gateway hit the same five walls in 2026: AWS lock-in past SigV4 and the bedrock-runtime SDKs; latency overhead when the calling service isn’t in the same AWS region; IAM complexity once cross-account access enters the picture; no inline eval-and-optimizer loop; and a catalog narrower than the routing-first products. This guide ranks five gateways worth putting in front of Bedrock and walks through the migration that actually works: keep Bedrock for AWS-resident workloads, add a routing layer in front for everything else.


TL;DR: pick by exit reason

Why you are leaving Bedrock as the routing layerPickWhy
You want trace data to feed back into routing and promptsFuture AGI Agent Command CenterBedrock becomes one provider behind a self-improving loop
You want a hosted gateway with virtual keys and a prompt registryPortkeyMature surface for keys, prompts, and guardrails across providers
You want a self-hosted, source-available proxyLiteLLMMIT-licensed proxy that runs entirely inside your VPC
You want the widest model catalog with one credentialOpenRouterSingle API key across 200+ models, including non-AWS providers
You need raw throughput at high concurrencyMaxim BifrostGo-based gateway tuned for low-latency, high-RPS routing

Why people stop using Bedrock as the routing layer in 2026

Five exit drivers show up repeatedly in r/aws and r/LLMDevs threads, AWS re:Invent recap posts, and 2026 cloud-cost reviews.

1. AWS lock-in past the SDK boundary

Bedrock is reached through bedrock-runtime SDKs that expect SigV4-signed requests, AWS credentials in the standard chain, and model IDs in the provider.model-name shape. Application code that calls bedrock.invoke_model or bedrock.converse ends up with three AWS dependencies in the hot path: SDK, credential chain, model-ID format. Swapping providers later means a code change at every call site rather than a config flip. Teams that need to add a non-AWS provider find out at that moment that Bedrock isn’t a routing layer, it’s an AWS-resident inference layer dressed as one.

2. Latency overhead from the calling service’s AWS region

Bedrock endpoints are regional. If your application runs in us-east-1 and the closest Anthropic Bedrock endpoint with capacity is us-west-2, every request pays cross-region latency plus decode time. CRIS profiles help spread load, but each hop rides AWS’s backbone with SigV4 on both ends. Teams running outside AWS pay the egress on top. A routing layer that supports both Bedrock and direct Anthropic/OpenAI/Google calls picks the lowest-latency path at request time.

3. IAM complexity at scale

Bedrock leans on IAM for everything: invocation permissions, per-model allowlists, KMS access, S3 access for batch, Guardrails attachments. The pattern that breaks: a platform team wants to issue per-developer or per-service credentials with usage caps and cost attribution, and discovers IAM has no native “virtual key that fans out to one underlying credential” concept. Bedrock’s solution is more IAM. SCPs, condition keys on bedrock:InvokeModel, custom permission boundaries. A routing layer with first-class virtual keys handles it in fifteen minutes.

4. No inline self-improving optimizer or eval layer

Bedrock returns a response; it doesn’t score it. Bedrock model-evaluation jobs exist as a batch product but the gateway doesn’t capture-eval-optimize in the request path. To drive prompt rewrites or routing-policy updates from trace data, you build the pipeline yourself: CloudWatch Logs to Kinesis Firehose to S3 to an evaluator job to a manual prompt update.

5. Model catalog narrower than the routing-first products

Bedrock’s catalog as of May 2026 covers Anthropic, Meta, Mistral, Cohere, AI21, Stability, and Amazon Nova/Titan. It doesn’t carry OpenAI, Google Gemini, xAI Grok, DeepSeek, Qwen, or most fine-tuned open-weight checkpoints unless you host them yourself on SageMaker or EC2. Portkey, OpenRouter, and LiteLLM carry the OpenAI and Google catalogs plus the long tail. For a routing layer whose job is “pick the right model regardless of who hosts it,” Bedrock’s catalog is a hard ceiling.


What to look for in a Bedrock-routing replacement

Score replacements on the seven axes that map to surfaces Bedrock-as-gateway leaves out.

AxisWhat it measures
1. Model catalog breadthAnthropic, OpenAI, Google, Meta, Mistral, plus the long tail through one endpoint
2. Cross-cloud reachCan the gateway call non-AWS providers and self-hosted endpoints without SigV4?
3. Virtual-key and chargebackPer-identity keys that fan out to provider credentials with usage caps?
4. Cost-aware routingDoes the gateway pick a cheaper-but-competent model when one will do?
5. Eval + optimizer loopDoes the gateway use trace data to improve routing and prompts?
6. Self-host or BYOC postureCan the gateway run inside your VPC, including on AWS, with your KMS keys?
7. Bedrock-as-one-provider supportFirst-class Bedrock support, including CRIS and Guardrails?

1. Future AGI Agent Command Center: Best for closing the loop in front of Bedrock

Verdict: Future AGI is the only gateway in this list that captures the trace, scores it, clusters failures, runs the optimizer, and pushes the updated route or prompt back into the gateway on the next request. Bedrock becomes one provider behind it (Anthropic-on-Bedrock and Anthropic-direct sit side by side in the same routing policy) and FAGI handles virtual keys, chargeback, evals, and the optimization loop. The other four products are observation or routing layers. FAGI is an observation layer wired to an optimizer.

What it fixes versus Bedrock-as-gateway:

  • Bedrock plus the rest of the catalog, one credential. Agent Command Center talks to Bedrock via the AWS provider integration (SigV4 inside the gateway, CRIS supported, Guardrails passed through) and to Anthropic-direct, OpenAI, Google, xAI, Mistral, DeepSeek, Qwen, and self-hosted vLLM via native APIs. One OpenAI-compatible endpoint; the routing policy picks the cheapest, lowest-latency path per request.
  • The self-improving loop. Every trace flows into ai-evaluation (Apache 2.0) for task-completion, faithfulness, and tool-use scoring; agent-opt (Apache 2.0) rewrites prompts via ProTeGi, Bayesian, or GEPA; the gateway applies the new prompt and route on the next request. Bedrock model-evaluation runs on a cron. FAGI runs in the request loop.
  • Virtual keys and chargeback without IAM gymnastics. Per-developer, per-service, per-repo keys fan out to one provider credential. Cost slicing lives natively by session, user, repo, and route.
  • OSS instrumentation plus BYOC on AWS. traceAI, ai-evaluation, and agent-opt are Apache 2.0 on GitHub. Agent Command Center is BYOC on AWS, control plane in your AWS account with your KMS keys, VPC, IAM, CloudWatch sink. AWS Marketplace procurement is available. The Protect guardrails layer adds median 67 ms text-mode latency per arXiv 2510.13351 (109 ms image), competitive with Bedrock Guardrails.

Migration from Bedrock-as-gateway: Keep Bedrock for AWS-resident workloads. Application code changes the base URL to FAGI’s OpenAI-compatible endpoint and replaces bedrock.invoke_model with chat-completions against a route. The routing policy decides whether each request hits Bedrock or a non-AWS provider. Bedrock Guardrails attach at the provider level; FAGI Protect attaches at the gateway level, both can run together. Timeline: five to ten engineering days including a shadow-traffic period.

Where it falls short:

  • agent-opt is opt-in, start with traceAI + ai-evaluation in week one and turn the optimizer on once eval baselines stabilize. The loop compounds value over weeks rather than at day one.

  • Bedrock’s batch-inference product isn’t a one-to-one match. FAGI’s batch surface ships as part of the eval product, so very-high-volume offline workloads sometimes still call Bedrock directly.

Pricing: Free tier with 100K traces per month. Scale tier from $99/month with linear per-trace scaling above 5M (no add-on multipliers). Enterprise with SOC 2 Type II, BYOC on AWS, and AWS Marketplace procurement.

Score: 7 of 7 axes.


2. Portkey: Best for hosted virtual keys and a prompt registry across providers

Verdict: Portkey is the right pick if your reason for leaving Bedrock-as-gateway is the absence of first-class virtual keys, a prompt registry, and a hosted dashboard. Mature surface, broad provider support, Bedrock as a first-class provider. Note: Portkey was acquired by Palo Alto Networks on April 30, 2026; the SMB SKU is the variable to watch over the next 12 to 18 months.

What it fixes versus Bedrock-as-gateway:

  • First-class virtual keys. Every developer or service holds a Portkey-issued key that fans out to one provider key. Per-identity attribution without IAM service-control policies.
  • Prompt registry with version history. Prompt Studio stores prompts as versioned objects, renders server-side, and exposes a version-diff UI, the same surface for Bedrock and non-AWS providers.
  • Bedrock as a first-class provider. SigV4 inside the gateway, CRIS supported, Bedrock Guardrails passed through. Every model is one OpenAI-compatible call.
  • Hosted dashboard. Cost, latency, error rate, per-key throughput in one place. Comparable to FAGI on observation, weaker on the optimizer.

Migration from Bedrock-as-gateway: Application code changes the base URL to Portkey’s /v1/proxy plus a virtual-key header. Bedrock credentials configured once in Portkey’s vault; CRIS and Guardrails attach in the Bedrock-provider settings. Timeline: three to five engineering days; another sprint to migrate prompts into Prompt Studio.

Where it falls short:

  • No inline optimizer. Traces inform humans, not the gateway.
  • The Palo Alto acquisition creates SMB-SKU uncertainty over a 12 to 18 month window.
  • Prompt Studio’s template dialect is Portkey-specific, adding migration cost again if you eventually leave.

Pricing: Free tier. Scale tier from $99/month, with per-request marginal cost compounding above 5M req/month. Enterprise custom.

Score: 6 of 7 axes (missing: native optimizer loop).


3. LiteLLM: Best for self-hosted exit from Bedrock-as-gateway

Verdict: LiteLLM is the pick when “this proxy runs entirely on our infrastructure, with source we can audit” beats hosted polish. MIT-licensed, Python-native, the most popular self-hosted AI proxy on GitHub. Bedrock is a first-class provider in the routing config; OpenAI, Anthropic, Google, xAI, and self-hosted vLLM sit alongside it.

What it fixes versus Bedrock-as-gateway:

  • Self-host posture. Entire proxy in your VPC, including on AWS, behind your VPC endpoints. No telemetry leaves unless you configure an OpenTelemetry sink.
  • Cost curve. Open source means no per-request licensing. Enterprise tier (from ~$250/month) adds SSO, audit, and SLA without per-request escalation.
  • Bedrock as a first-class provider. SigV4 inside the proxy, CRIS supported, Guardrails passed through. The routing config (config.yaml) names a route and lists model candidates from Bedrock and elsewhere.
  • Virtual-key parity. team_id and user_id model gives per-identity keys with usage caps. Less polished than Portkey’s UI; same primitives.

Migration from Bedrock-as-gateway: Stand up the proxy in your AWS account. Add Bedrock credentials to config.yaml or use the EC2 instance profile. Application code changes the base URL and replaces per-model SDK calls with chat-completions. Timeline: five to seven engineering days; an additional sprint to pair LiteLLM with Langfuse or Future AGI for prompts and traces.

Where it falls short:

  • No optimizer. Traces inform humans, not the gateway.
  • The bundled UI is the weakest in this list; polish lives in the Enterprise tier.
  • No first-party prompt registry; pair with a separate tool.

Pricing: Open source under MIT. Enterprise from ~$250/month for small teams.

Score: 5 of 7 axes (missing: native prompt registry, optimization loop).


4. OpenRouter: Best for the widest model catalog behind one credential

Verdict: OpenRouter is the pick when the reason you stopped using Bedrock-as-gateway is the catalog ceiling. One API key gives access to 200+ models, every Anthropic, OpenAI, Google, Meta, Mistral, xAI, DeepSeek, and Qwen variant plus the long tail of community-fine-tuned checkpoints. Bedrock sits behind it as one backend among many.

What it fixes versus Bedrock-as-gateway:

  • Catalog breadth. Every major closed-weight and open-weight model behind one credential. Bedrock’s catalog is a subset; OpenRouter’s is the superset.
  • Cross-cloud reach. Models hosted on AWS, Azure, GCP, Cloudflare, Together, Fireworks, Groq, and self-hosted providers all behind one OpenAI-compatible endpoint.
  • Cost-aware routing. Per-model pricing is published in near-real time. The auto routing mode picks the cheapest model that meets requested capabilities (context length, tool support, vision).
  • No infra to run. Hosted endpoint, one credential, no SigV4, no IAM.

Migration from Bedrock-as-gateway: Application code changes the base URL to https://openrouter.ai/api/v1 and replaces per-model SDK calls with chat-completions calls. Bedrock model IDs (anthropic.claude-3-5-sonnet-20241022-v2:0) get an OpenRouter equivalent (anthropic/claude-3.5-sonnet). Timeline: three to four engineering days.

Where it falls short:

  • No optimizer, no eval, no first-party prompt registry.
  • Consumer-facing surface; enterprise features (SSO, audit, per-team chargeback) are thinner than Portkey or FAGI.
  • The “Bedrock as one provider” abstraction hides which underlying endpoint you actually hit, complicating AWS cost attribution if Bedrock spend has to land in a specific account.

Pricing: Pay-per-token at provider list price plus a small OpenRouter margin. No subscription floor.

Score: 4 of 7 axes (missing: enterprise-depth virtual-key chargeback, eval, optimizer).


5. Maxim Bifrost: Best for raw throughput at high concurrency

Verdict: Bifrost is the pick when the workload is high-concurrency and the gateway’s own latency budget matters. Written in Go, designed for low-latency routing, benchmarks above Python-based proxies on RPS per node. Bedrock sits behind it as one provider among several.

What it fixes versus Bedrock-as-gateway:

  • Throughput per node. The Go runtime plus connection pooling gives Bifrost higher RPS than Python-based proxies on the same hardware. Maxim’s published benchmarks claim sub-millisecond overhead at p50; independent reproduction is ongoing.
  • Self-host posture. Runs as a Go binary, container, helm chart, or static binary on a VM. Inside your AWS account, in your VPC, with your KMS keys.
  • Tight integration with Maxim’s eval stack. If your team evaluates agents with Maxim, gateway and eval pipeline share data models, the closest in-list analog to the FAGI loop, with the caveat that Bifrost’s optimizer integration is less mature than agent-opt.

Migration from Bedrock-as-gateway: Stand up the binary in your AWS account. Configure Bedrock credentials. Application code changes the base URL and replaces per-model SDK calls with chat-completions. Timeline: five to eight engineering days plus prompt-registry replacement if applicable.

Where it falls short:

  • No inline optimizer; eval integration is to a separate Maxim product rather than in-loop.
  • Younger ecosystem than Portkey, LiteLLM, or Bedrock itself; Terraform providers and off-the-shelf dashboards are thinner.
  • The throughput pitch is the headline; teams that picked Bedrock for AWS-resident inference won’t feel the upside unless concurrency is the bottleneck.

Pricing: Bifrost is open source. Maxim’s hosted gateway pricing is custom, anchored to the eval product’s usage.

Score: 4 of 7 axes (missing: optimizer in-loop, native prompt registry, mature ecosystem).


Capability matrix

AxisFuture AGIPortkeyLiteLLMOpenRouterMaxim Bifrost
Model catalog breadthBedrock + non-AWS via native APIsBedrock + ~30 providersBedrock + ~30 providers200+ models, every cloudBedrock + major providers
Cross-cloud reachNativeNativeNativeNativeNative
Virtual keys + chargebackNative, by session/user/repoNative, hostedTeam + user keysLighter, hostedLean key model
Cost-aware routingYes, policy + optimizerYes, policyYes, policyYes, auto modeYes, policy
Eval + optimizer loopYes (ai-evaluation + agent-opt)NoNoNoTied to Maxim eval
Self-host / BYOCBYOC on AWS, OSS instrumentationHostedMIT, full VPCHosted onlyOSS Go binary
Bedrock as providerFirst-class, CRIS + GuardrailsFirst-class, CRIS + GuardrailsFirst-class, CRIS + GuardrailsBehind the curtainFirst-class

Migration notes: keep Bedrock, add the gateway in front

The migration that actually works isn’t a rip-and-replace. Bedrock stays for AWS-resident workloads, SigV4 audit trails, and Marketplace billing alignment. The routing layer sits in front of application code and decides per request whether to call Bedrock or a non-AWS provider.

Inventory the surfaces Bedrock is doing for you

Most teams find five: model invocation, Bedrock Guardrails, Knowledge Bases, Agents, and batch inference. Model invocation moves first. Bedrock becomes a provider in the gateway, SigV4 stays inside, application code switches from bedrock-runtime to OpenAI-compatible chat-completions. Guardrails stay attached at the provider level for AWS-resident calls; the gateway’s own guardrails handle non-AWS calls, both can run together. Knowledge Bases stay where they’re; expose them as a tool. Bedrock Agents are a runtime, and most teams adopting a routing layer move agent orchestration into application code. Batch inference stays on Bedrock for very-high-volume offline workloads.

Configure Bedrock as one provider behind the gateway

All five products treat Bedrock as a first-class provider. Drop AWS credentials into the gateway’s provider config, name the model IDs to expose, optionally pin a CRIS profile, attach Guardrails policy IDs. Every call is POST /v1/chat/completions against a route name; the gateway resolves the route to a model and provider.

Move application code to OpenAI-compatible calls

bedrock.invoke_model and bedrock.converse calls turn into chat-completions calls against a route. The route’s policy lives in the gateway, so swapping models later doesn’t require a code change at every call site. A typical service has fifteen to forty call sites; a focused day gets through them.

Shadow-traffic the gateway for one to two weeks

Run the gateway in parallel with the existing Bedrock-direct path. Fire both, compare cost, latency, and output, surface diffs. Guardrails behavior should match before flipping production traffic, a denied-topic block that fires on Bedrock-direct but not on the gateway path is the kind of regression that lands in support tickets a week later. After two clean weeks, flip services one at a time using your existing feature-flag mechanism.

Wire trace data into the optimizer (FAGI only)

Pick the rubrics that matter (task completion, faithfulness, tool-call correctness, refusal rate), let agent-opt propose prompt rewrites on a cadence, review diffs before promotion. After two or three cycles, the routing policy and the prompt set both reflect what the trace data showed, the surface Bedrock-as-gateway doesn’t have.


Decision framework: Choose X if

Choose Future AGI if your reason for leaving Bedrock-as-gateway is more than catalog or IAM complexity, you also want trace data to drive prompt rewrites and routing-policy updates so the cost curve bends down over time. BYOC on AWS, OSS instrumentation, AWS Marketplace procurement.

Choose Portkey if you want a hosted gateway with mature virtual keys, a prompt registry, and a polished dashboard, and you’re comfortable monitoring the Palo Alto Networks acquisition over the next 12 to 18 months.

Choose LiteLLM if the requirement is “this gateway runs on our hardware, with source we can audit” and you have engineering budget to pair it with a separate prompt store and trace sink.

Choose OpenRouter if your reason for leaving is the model-catalog ceiling and you don’t need deep enterprise chargeback. Pure breadth wins.

Choose Maxim Bifrost if the workload is high-concurrency and the proxy’s own latency budget shows up in your SLOs.


What we did not include

Three products show up in adjacent 2026 listicles that we left out: Cloudflare AI Gateway (strong primitives if your application already runs on Workers, but the virtual-key and prompt-registry surfaces are thinner); Kong AI Gateway (the right pick if your platform team already runs Kong, but AI-specific surfaces are plugin-driven and the Bedrock-as-one-provider migration story is less worked-out); TrueFoundry (capable MLOps gateway, but Bedrock-specific migration tooling and CRIS handling weren’t published as of May 2026).



Sources

  • AWS Bedrock product page and pricing, aws.amazon.com/bedrock
  • AWS Bedrock cross-region inference (CRIS) profiles, docs.aws.amazon.com/bedrock
  • AWS Bedrock Guardrails documentation, docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html
  • AWS Bedrock model-evaluation jobs, docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation.html
  • Reddit /r/aws and /r/LLMDevs migration discussions, Q1-Q2 2026
  • Portkey product page and Bedrock integration docs, portkey.ai
  • Palo Alto Networks press release on Portkey acquisition, April 30, 2026, paloaltonetworks.com/company/press
  • LiteLLM GitHub repository and Bedrock provider docs, github.com/BerriAI/litellm
  • OpenRouter product page and model catalog, openrouter.ai
  • Maxim Bifrost product page and benchmarks, getmaxim.ai/bifrost
  • Future AGI Agent Command Center, futureagi.com/platform/monitor/command-center
  • Future AGI traceAI, github.com/future-agi/traceAI (Apache 2.0)
  • Future AGI ai-evaluation, github.com/future-agi/ai-evaluation (Apache 2.0)
  • Future AGI agent-opt, github.com/future-agi/agent-opt (Apache 2.0)
  • Future AGI Protect latency benchmark, arxiv.org/abs/2510.13351 (67 ms text, 109 ms image)
  • Future AGI on AWS Marketplace, aws.amazon.com/marketplace

Frequently asked questions

Why is AWS Bedrock not a good routing layer?
Bedrock is excellent at running Anthropic, Meta, Mistral, Cohere, and Amazon's own models inside AWS. As a routing layer it pulls toward the opposite of what routing needs: SigV4-signed SDKs married to model-ID formats, a catalog without OpenAI/Google/xAI, no first-class virtual-key concept, and no inline eval-and-optimizer loop. A routing layer in front of Bedrock keeps the strengths and adds the rest.
Can I keep using Bedrock while putting a gateway in front of it?
Yes. All five products treat Bedrock as a first-class provider. Keep Bedrock for AWS-resident workloads, add the gateway in front of application code, let the gateway decide per request whether to call Bedrock or a non-AWS provider. SigV4 stays inside the gateway; application code only sees an OpenAI-compatible endpoint.
What is the closest like-for-like alternative for 'all my models in one place'?
For the broadest catalog with one credential, OpenRouter. For a hosted gateway with virtual keys and a prompt registry, Portkey. For a self-improving loop, Future AGI Agent Command Center. For self-hosted source-available, LiteLLM.
Will I lose Bedrock Guardrails if I add a gateway in front?
No. Bedrock Guardrails attach at the provider level inside the gateway — every call routed to a Bedrock model still gets the enforcement. For non-AWS providers, the gateway's own guardrails handle policy. Most teams run both.
Does the gateway pattern break my AWS cost attribution?
Only if you let it. Bedrock spend continues to land in the AWS account that owns the credentials configured in the gateway, including AWS Marketplace billing alignment. For FAGI, AWS Marketplace procurement lets the gateway spend land against your existing AWS commit too.
Is there a self-improving loop equivalent in Bedrock itself?
Bedrock offers batch model-evaluation jobs and a workflow runtime (Bedrock Agents), but the gateway does not capture-eval-optimize in the request path. To approximate the loop in pure-AWS, teams wire CloudWatch Logs to Firehose to S3 to a model-evaluation job and update prompts manually. Future AGI runs the same loop in production traffic with `ai-evaluation` and `agent-opt`.
Related Articles
View all
Best 5 Pydantic AI Alternatives in 2026
Guides

Five Pydantic AI alternatives scored on multi-agent depth, language reach, observability without Logfire, optimizer presence, and what each replacement actually fixes for teams who outgrew the type-system-first framework.

V
Vrinda Damani ·
15 min
Best 5 Eyer AI Alternatives in 2026
Guides

Five Eyer AI alternatives scored on multi-language SDK coverage, self-host posture, gateway and optimizer reach, and what each replacement actually fixes for teams outgrowing AI-monitoring-only tooling.

NVJK Kartik
NVJK Kartik ·
16 min
Best 5 AI Gateways for Embedding API Routing in 2026
Guides

Five AI gateways for embedding API routing in 2026 scored on provider breadth, dimension consistency, batch-API support, input-hash cache, model-migration tooling, per-tenant attribution, and online p95 latency.

V
Vrinda Damani ·
19 min
Stay updated on AI observability

Get weekly insights on building reliable AI systems. No spam.