Skip to main content

Migration from Google Apigee

This guide covers migration from Google Apigee (X or hybrid) to STOA Platform, with a focus on European data sovereignty and multi-cloud flexibility.

What You Have​

Typical Apigee stack:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ CURRENT STATE β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Apigee (X or Hybrid) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ API β”‚ β”‚ Policies β”‚ β”‚ Analyticsβ”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Proxies β”‚ β”‚ & Flows β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Apigee Management Plane β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ Developerβ”‚ β”‚ API β”‚ β”‚ Monetize β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Portal β”‚ β”‚ Products β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ Common migration drivers: β”‚
β”‚ β€’ European data sovereignty (GDPR, DORA, NIS2) β”‚
β”‚ β€’ Multi-cloud strategy (avoid single-cloud dependency) β”‚
β”‚ β€’ Self-hosted control over gateway infrastructure β”‚
β”‚ β€’ AI-native MCP support for agent workflows β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

What STOA Provides​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ WITH STOA β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ STOA Control Plane (self-hosted) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ Portal β”‚ β”‚ Console β”‚ β”‚ Grafana β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Catalog β”‚ β”‚ Admin β”‚ β”‚ Metrics β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ orchestrates β”‚
β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ STOA Gateway (Rust, EU-hosted) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ MCP β”‚ β”‚ REST β”‚ β”‚ mTLS β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Protocol β”‚ β”‚ Proxy β”‚ β”‚ + OIDC β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ Benefits: β”‚
β”‚ β€’ Full control over infrastructure and data residency β”‚
β”‚ β€’ Native MCP support for AI agents β”‚
β”‚ β€’ Open-source (Apache 2.0) β€” no vendor lock-in β”‚
β”‚ β€’ Kubernetes-native deployment β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Configuration Mapping​

Apigee concepts map to STOA as follows:

Apigee ConceptSTOA EquivalentNotes
API ProxyAPI Definition + RoutesOpenAPI-based
Target EndpointBackend URLUpstream configuration
ProxyEndpointAPI RoutePath + method matching
API ProductAPI GroupBundling for subscription
Developer AppConsumer SubscriptionAccess management
EnvironmentTenant / NamespaceK8s-level isolation
OrganizationPlatform InstanceMulti-tenant scope
Key Value MapConfigMap / VaultEnvironment-specific config
Custom ReportGrafana DashboardPrometheus-powered

Policy Translation​

Apigee PolicySTOA Equivalent
VerifyAPIKeyAPI Key validation (Keycloak)
OAuthV2OIDC/OAuth 2.0 (Keycloak)
SpikeArrestRate limiting (per-consumer)
QuotaQuota management (per-subscription)
AssignMessageResponse transformation
RaiseFaultError policy
XMLToJSON / JSONToXMLMedia type transformation
ServiceCalloutUpstream proxy chain
JavaScriptCustom policy (Lua or WASM planned)
StatisticsCollectorPrometheus metrics (native)
MessageLoggingOpenSearch / structured logs

Migration Path​

Phase 1: API Inventory & Export (1-2 weeks)​

Goal: Catalog all Apigee proxies and export configurations.

  1. Export API Proxies

    # List all proxies in an organization
    curl -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/apis" \
    | jq '.proxies[].name'

    # Export each proxy bundle
    for proxy in $(curl -s -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/apis" \
    | jq -r '.proxies[].name'); do
    curl -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/apis/$proxy/revisions/latest?format=bundle" \
    -o "${proxy}.zip"
    done
  2. Export API Products & Apps

    # Products
    curl -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/apiproducts" \
    -o apigee-products.json

    # Developer apps
    curl -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/apps" \
    -o apigee-apps.json
  3. Import to STOA

    stoa api import --file proxies/ --format apigee

Phase 2: Identity Federation (1 week)​

Goal: Federate Apigee developer identities to Keycloak.

# keycloak-apigee-federation.yaml
kind: IdentityProviderConfig
metadata:
name: apigee-developer-federation
spec:
provider: oidc
config:
# If using Google Identity
issuerUri: https://accounts.google.com
clientId: stoa-federation
scopes: openid,email,profile

# Bulk import Apigee developers
developerImport:
source: apigee-developers.json
mapping:
email: email
firstName: firstName
lastName: lastName

Phase 3: Parallel Running (2-3 weeks)​

Goal: Run STOA alongside Apigee with gradual traffic migration.

For Apigee hybrid deployments, both can coexist in the same Kubernetes cluster:

  1. Shadow mode β€” STOA receives mirrored traffic (read-only)
  2. Canary β€” 5% of traffic through STOA
  3. Gradual β€” Increase to 25%, 50%, 75%, 100%
  4. Cutover β€” Full production traffic

Phase 4: Decommission (1 week)​

  1. Confirm 100% traffic through STOA for 48+ hours
  2. Remove Apigee proxy deployments
  3. Archive Apigee configuration in Git (for reference)
  4. Update DNS if applicable

Why Migrate from Apigee?​

Data Sovereignty​

STOA deploys entirely within your infrastructure β€” EU-hosted Kubernetes clusters ensure full data residency control. No API traffic or metadata leaves your chosen jurisdiction.

Multi-Cloud Flexibility​

STOA runs on any Kubernetes distribution (EKS, GKE, AKS, K3s, bare metal). Avoid dependency on a single cloud provider's API management stack.

AI-Native Gateway​

STOA provides native MCP (Model Context Protocol) support, enabling AI agents to discover and call your APIs automatically β€” a capability not available in traditional API management platforms.

Open Source​

Apache 2.0 licensed. Full source code access, no license fees, no per-call pricing. Fork, customize, or self-host freely.


Migration Complexity​

Estimated complexity: Medium Estimated timeline: 4-6 weeks (depends on API count and custom policies)

Complexity Factors​

FactorLowMediumHigh
Number of proxies< 2020-100> 100
Custom JavaScript policiesNone1-5> 5
Shared flowsNone1-3> 3
MonetizationNot usedβ€”Active
Apigee HybridNot usedβ€”Active (easier)

Rollback Procedure​

At any phase, revert to Apigee routing:

# Revert traffic split
kubectl annotate ingress api-canary \
nginx.ingress.kubernetes.io/canary-weight="0" --overwrite

# Or revert DNS to Apigee endpoints
# (keep Apigee proxies deployed until fully validated)

Success Criteria​

MetricTarget
API imports100% registered in STOA
Identity federationSSO working for all developers
ObservabilityGrafana dashboards showing equivalent data
Traffic migration100% through STOA
LatencyWithin 5ms of Apigee baseline

Next Steps​


Feature comparisons are based on publicly available documentation as of 2026-02. Product capabilities change frequently. We encourage readers to verify current features directly with each vendor. All trademarks belong to their respective owners. See trademarks.


Need migration assistance? Contact us for professional services.