{
  "version": "parent-1.0.0",
  "aiLinkVersion": "1.0.0",
  "siteOrigin": "https://cloudpricingcalculators.com",
  "grammar": "/q/<provider>/<services>/<specs>[/<provider>/<services>/<specs>...]",
  "template": "https://cloudpricingcalculators.com/q/<provider>/<services>/<specs>[/<provider>/<services>/<specs>]{0,2}[?n=<name>]",
  "limits": {
    "maxServices": 3,
    "maxPairsPerSpec": 12,
    "maxPathChars": 800,
    "maxSlugChars": 24,
    "maxKeyChars": 20,
    "maxValueChars": 32,
    "maxNameChars": 60,
    "maxRequestChars": 1000,
    "maxBlocks": 3
  },
  "rules": [
    "Each provider (azure, aws, gcp) appears at most once; one block per provider.",
    "One block lands one quote per service; two or three blocks land a comparison group.",
    "The service limit applies to the whole link, across all blocks.",
    "If any part does not parse, nothing is priced."
  ],
  "providers": {
    "azure": {
      "services": [
        {
          "slug": "vm",
          "name": "Azure Virtual Machines",
          "aliases": [
            "vms",
            "virtualmachines"
          ]
        },
        {
          "slug": "sql",
          "name": "Azure SQL Database",
          "aliases": [
            "sqldb",
            "azuresql"
          ]
        },
        {
          "slug": "sqlmi",
          "name": "Azure SQL Managed Instance",
          "aliases": []
        },
        {
          "slug": "postgres",
          "name": "Azure Database for PostgreSQL",
          "aliases": [
            "postgresql"
          ]
        },
        {
          "slug": "mysql",
          "name": "Azure Database for MySQL",
          "aliases": []
        },
        {
          "slug": "cosmos",
          "name": "Azure Cosmos DB",
          "aliases": [
            "cosmosdb"
          ]
        },
        {
          "slug": "storage",
          "name": "Azure Blob Storage",
          "aliases": [
            "blob",
            "blobstorage"
          ]
        },
        {
          "slug": "files",
          "name": "Azure Files",
          "aliases": []
        },
        {
          "slug": "disk",
          "name": "Azure Managed Disks",
          "aliases": [
            "disks"
          ]
        },
        {
          "slug": "appservice",
          "name": "Azure App Service",
          "aliases": [
            "webapp",
            "appservices"
          ]
        },
        {
          "slug": "functions",
          "name": "Azure Functions",
          "aliases": [
            "func"
          ]
        },
        {
          "slug": "aks",
          "name": "Azure Kubernetes Service",
          "aliases": [
            "kubernetes"
          ]
        },
        {
          "slug": "containerapps",
          "name": "Azure Container Apps",
          "aliases": []
        },
        {
          "slug": "aci",
          "name": "Azure Container Instances",
          "aliases": []
        },
        {
          "slug": "redis",
          "name": "Azure Cache for Redis",
          "aliases": []
        },
        {
          "slug": "vnet",
          "name": "Azure Virtual Network",
          "aliases": []
        },
        {
          "slug": "loadbalancer",
          "name": "Azure Load Balancer",
          "aliases": [
            "lb"
          ]
        },
        {
          "slug": "appgateway",
          "name": "Azure Application Gateway",
          "aliases": [
            "appgw"
          ]
        },
        {
          "slug": "frontdoor",
          "name": "Azure Front Door",
          "aliases": []
        },
        {
          "slug": "cdn",
          "name": "Azure CDN",
          "aliases": []
        },
        {
          "slug": "firewall",
          "name": "Azure Firewall",
          "aliases": []
        },
        {
          "slug": "vpngateway",
          "name": "Azure VPN Gateway",
          "aliases": [
            "vpn"
          ]
        },
        {
          "slug": "bastion",
          "name": "Azure Bastion",
          "aliases": []
        },
        {
          "slug": "keyvault",
          "name": "Azure Key Vault",
          "aliases": []
        },
        {
          "slug": "monitor",
          "name": "Azure Monitor",
          "aliases": [
            "loganalytics"
          ]
        },
        {
          "slug": "backup",
          "name": "Azure Backup",
          "aliases": []
        },
        {
          "slug": "openai",
          "name": "Azure OpenAI Service",
          "aliases": []
        },
        {
          "slug": "synapse",
          "name": "Azure Synapse Analytics",
          "aliases": []
        },
        {
          "slug": "databricks",
          "name": "Azure Databricks",
          "aliases": []
        },
        {
          "slug": "datafactory",
          "name": "Azure Data Factory",
          "aliases": [
            "adf"
          ]
        },
        {
          "slug": "servicebus",
          "name": "Azure Service Bus",
          "aliases": []
        },
        {
          "slug": "eventhubs",
          "name": "Azure Event Hubs",
          "aliases": [
            "eventhub"
          ]
        },
        {
          "slug": "apim",
          "name": "Azure API Management",
          "aliases": []
        },
        {
          "slug": "avd",
          "name": "Azure Virtual Desktop",
          "aliases": []
        },
        {
          "slug": "search",
          "name": "Azure AI Search",
          "aliases": [
            "aisearch"
          ]
        },
        {
          "slug": "staticwebapp",
          "name": "Azure Static Web Apps",
          "aliases": [
            "swa"
          ]
        },
        {
          "slug": "signalr",
          "name": "Azure SignalR Service",
          "aliases": []
        },
        {
          "slug": "logicapps",
          "name": "Azure Logic Apps",
          "aliases": []
        },
        {
          "slug": "iothub",
          "name": "Azure IoT Hub",
          "aliases": []
        }
      ],
      "specKeys": [
        {
          "key": "qty",
          "order": 10,
          "meaning": "count of instances",
          "example": "2",
          "renders": "quantity 2"
        },
        {
          "key": "size",
          "order": 20,
          "meaning": "instance or VM size",
          "example": "d4sv3",
          "renders": "size D4s v3"
        },
        {
          "key": "vcores",
          "order": 30,
          "meaning": "vCPU or vCore count",
          "example": "4",
          "renders": "4 vCores"
        },
        {
          "key": "ram",
          "order": 40,
          "meaning": "memory in GB",
          "example": "16",
          "renders": "16 GB RAM"
        },
        {
          "key": "nodes",
          "order": 50,
          "meaning": "cluster nodes",
          "example": "3",
          "renders": "3 nodes"
        },
        {
          "key": "os",
          "order": 60,
          "meaning": "operating system",
          "example": "linux",
          "renders": "operating system Linux"
        },
        {
          "key": "region",
          "order": 70,
          "meaning": "region code, no spaces",
          "example": "eastus",
          "renders": "region East US"
        },
        {
          "key": "tier",
          "order": 80,
          "meaning": "service tier",
          "example": "generalpurpose",
          "renders": "tier General Purpose"
        },
        {
          "key": "storage",
          "order": 90,
          "meaning": "storage in GB",
          "example": "250",
          "renders": "250 GB storage"
        },
        {
          "key": "gb",
          "order": 91,
          "meaning": "storage in GB",
          "example": "500",
          "renders": "500 GB storage"
        },
        {
          "key": "tb",
          "order": 92,
          "meaning": "storage in TB",
          "example": "2",
          "renders": "2 TB storage"
        },
        {
          "key": "redundancy",
          "order": 100,
          "meaning": "storage redundancy",
          "example": "lrs",
          "renders": "LRS redundancy"
        },
        {
          "key": "hours",
          "order": 110,
          "meaning": "hours per month",
          "example": "730",
          "renders": "730 hours per month"
        },
        {
          "key": "users",
          "order": 120,
          "meaning": "expected users",
          "example": "500",
          "renders": "500 users"
        },
        {
          "key": "requests",
          "order": 130,
          "meaning": "requests per month",
          "example": "10000000",
          "renders": "10,000,000 requests per month"
        },
        {
          "key": "egress",
          "order": 140,
          "meaning": "outbound GB per month",
          "example": "500",
          "renders": "500 GB outbound data per month"
        },
        {
          "key": "iops",
          "order": 150,
          "meaning": "provisioned IOPS",
          "example": "5000",
          "renders": "iops 5000"
        },
        {
          "key": "throughput",
          "order": 160,
          "meaning": "throughput hint",
          "example": "250",
          "renders": "throughput 250"
        },
        {
          "key": "replicas",
          "order": 170,
          "meaning": "replica count",
          "example": "2",
          "renders": "replicas 2"
        },
        {
          "key": "env",
          "order": 180,
          "meaning": "environment hint",
          "example": "prod",
          "renders": "env prod"
        },
        {
          "key": "commit",
          "order": 999,
          "meaning": "commitment",
          "example": "payg",
          "renders": "pay-as-you-go"
        }
      ]
    },
    "aws": {
      "services": [
        {
          "slug": "ec2",
          "name": "Amazon EC2",
          "aliases": []
        },
        {
          "slug": "rds",
          "name": "Amazon RDS",
          "aliases": []
        },
        {
          "slug": "aurora",
          "name": "Amazon Aurora",
          "aliases": []
        },
        {
          "slug": "dynamodb",
          "name": "Amazon DynamoDB",
          "aliases": [
            "dynamo"
          ]
        },
        {
          "slug": "s3",
          "name": "Amazon S3",
          "aliases": []
        },
        {
          "slug": "ebs",
          "name": "Amazon EBS",
          "aliases": []
        },
        {
          "slug": "efs",
          "name": "Amazon EFS",
          "aliases": []
        },
        {
          "slug": "lambda",
          "name": "AWS Lambda",
          "aliases": []
        },
        {
          "slug": "ecs",
          "name": "Amazon ECS",
          "aliases": []
        },
        {
          "slug": "eks",
          "name": "Amazon EKS",
          "aliases": [
            "kubernetes"
          ]
        },
        {
          "slug": "fargate",
          "name": "AWS Fargate",
          "aliases": []
        },
        {
          "slug": "elasticache",
          "name": "Amazon ElastiCache",
          "aliases": [
            "redis"
          ]
        },
        {
          "slug": "redshift",
          "name": "Amazon Redshift",
          "aliases": []
        },
        {
          "slug": "cloudfront",
          "name": "Amazon CloudFront",
          "aliases": [
            "cdn"
          ]
        },
        {
          "slug": "elb",
          "name": "Elastic Load Balancing",
          "aliases": [
            "loadbalancer",
            "alb"
          ]
        },
        {
          "slug": "vpc",
          "name": "Amazon VPC",
          "aliases": []
        },
        {
          "slug": "route53",
          "name": "Amazon Route 53",
          "aliases": [
            "dns"
          ]
        },
        {
          "slug": "apigateway",
          "name": "Amazon API Gateway",
          "aliases": [
            "apigw"
          ]
        },
        {
          "slug": "sqs",
          "name": "Amazon SQS",
          "aliases": []
        },
        {
          "slug": "sns",
          "name": "Amazon SNS",
          "aliases": []
        },
        {
          "slug": "cloudwatch",
          "name": "Amazon CloudWatch",
          "aliases": []
        },
        {
          "slug": "lightsail",
          "name": "Amazon Lightsail",
          "aliases": []
        },
        {
          "slug": "opensearch",
          "name": "Amazon OpenSearch Service",
          "aliases": []
        },
        {
          "slug": "beanstalk",
          "name": "AWS Elastic Beanstalk",
          "aliases": [
            "elasticbeanstalk"
          ]
        }
      ],
      "specKeys": [
        {
          "key": "qty",
          "order": 10,
          "meaning": "count of instances",
          "example": "2",
          "renders": "quantity 2"
        },
        {
          "key": "size",
          "order": 20,
          "meaning": "instance or VM size",
          "example": "m5large",
          "renders": "size m5.large"
        },
        {
          "key": "vcores",
          "order": 30,
          "meaning": "vCPU or vCore count",
          "example": "4",
          "renders": "4 vCores"
        },
        {
          "key": "ram",
          "order": 40,
          "meaning": "memory in GB",
          "example": "16",
          "renders": "16 GB RAM"
        },
        {
          "key": "nodes",
          "order": 50,
          "meaning": "cluster nodes",
          "example": "3",
          "renders": "3 nodes"
        },
        {
          "key": "os",
          "order": 60,
          "meaning": "operating system",
          "example": "linux",
          "renders": "operating system Linux"
        },
        {
          "key": "region",
          "order": 70,
          "meaning": "region code, no spaces",
          "example": "useast1",
          "renders": "region us-east-1"
        },
        {
          "key": "tier",
          "order": 80,
          "meaning": "service tier",
          "example": "generalpurpose",
          "renders": "tier General Purpose"
        },
        {
          "key": "storage",
          "order": 90,
          "meaning": "storage in GB",
          "example": "250",
          "renders": "250 GB storage"
        },
        {
          "key": "gb",
          "order": 91,
          "meaning": "storage in GB",
          "example": "500",
          "renders": "500 GB storage"
        },
        {
          "key": "tb",
          "order": 92,
          "meaning": "storage in TB",
          "example": "2",
          "renders": "2 TB storage"
        },
        {
          "key": "redundancy",
          "order": 100,
          "meaning": "storage redundancy",
          "example": "lrs",
          "renders": "LRS redundancy"
        },
        {
          "key": "hours",
          "order": 110,
          "meaning": "hours per month",
          "example": "730",
          "renders": "730 hours per month"
        },
        {
          "key": "users",
          "order": 120,
          "meaning": "expected users",
          "example": "500",
          "renders": "500 users"
        },
        {
          "key": "requests",
          "order": 130,
          "meaning": "requests per month",
          "example": "10000000",
          "renders": "10,000,000 requests per month"
        },
        {
          "key": "egress",
          "order": 140,
          "meaning": "outbound GB per month",
          "example": "500",
          "renders": "500 GB outbound data per month"
        },
        {
          "key": "iops",
          "order": 150,
          "meaning": "provisioned IOPS",
          "example": "5000",
          "renders": "iops 5000"
        },
        {
          "key": "throughput",
          "order": 160,
          "meaning": "throughput hint",
          "example": "250",
          "renders": "throughput 250"
        },
        {
          "key": "replicas",
          "order": 170,
          "meaning": "replica count",
          "example": "2",
          "renders": "replicas 2"
        },
        {
          "key": "env",
          "order": 180,
          "meaning": "environment hint",
          "example": "prod",
          "renders": "env prod"
        },
        {
          "key": "commit",
          "order": 999,
          "meaning": "commitment",
          "example": "payg",
          "renders": "pay-as-you-go"
        }
      ]
    },
    "gcp": {
      "services": [
        {
          "slug": "gce",
          "name": "Compute Engine",
          "aliases": [
            "computeengine"
          ]
        },
        {
          "slug": "gcs",
          "name": "Cloud Storage",
          "aliases": [
            "cloudstorage"
          ]
        },
        {
          "slug": "cloudsql",
          "name": "Cloud SQL",
          "aliases": []
        },
        {
          "slug": "bigquery",
          "name": "BigQuery",
          "aliases": []
        },
        {
          "slug": "cloudrun",
          "name": "Cloud Run",
          "aliases": []
        },
        {
          "slug": "cloudfunctions",
          "name": "Cloud Functions",
          "aliases": [
            "functions"
          ]
        },
        {
          "slug": "gke",
          "name": "Google Kubernetes Engine",
          "aliases": [
            "kubernetes"
          ]
        },
        {
          "slug": "cloudcdn",
          "name": "Cloud CDN",
          "aliases": [
            "cdn"
          ]
        },
        {
          "slug": "loadbalancer",
          "name": "Cloud Load Balancing",
          "aliases": [
            "lb"
          ]
        },
        {
          "slug": "spanner",
          "name": "Cloud Spanner",
          "aliases": [
            "cloudspanner"
          ]
        },
        {
          "slug": "firestore",
          "name": "Firestore",
          "aliases": []
        },
        {
          "slug": "bigtable",
          "name": "Bigtable",
          "aliases": []
        },
        {
          "slug": "memorystore",
          "name": "Memorystore",
          "aliases": [
            "redis"
          ]
        },
        {
          "slug": "pubsub",
          "name": "Pub/Sub",
          "aliases": []
        },
        {
          "slug": "vertexai",
          "name": "Vertex AI",
          "aliases": [
            "vertex"
          ]
        },
        {
          "slug": "persistentdisk",
          "name": "Persistent Disk",
          "aliases": [
            "pd"
          ]
        },
        {
          "slug": "filestore",
          "name": "Filestore",
          "aliases": []
        },
        {
          "slug": "clouddns",
          "name": "Cloud DNS",
          "aliases": [
            "dns"
          ]
        },
        {
          "slug": "artifactregistry",
          "name": "Artifact Registry",
          "aliases": []
        },
        {
          "slug": "cloudlogging",
          "name": "Cloud Logging",
          "aliases": [
            "logging"
          ]
        }
      ],
      "specKeys": [
        {
          "key": "qty",
          "order": 10,
          "meaning": "count of instances",
          "example": "2",
          "renders": "quantity 2"
        },
        {
          "key": "size",
          "order": 20,
          "meaning": "instance or VM size",
          "example": "n2standard4",
          "renders": "size n2-standard-4"
        },
        {
          "key": "vcores",
          "order": 30,
          "meaning": "vCPU or vCore count",
          "example": "4",
          "renders": "4 vCores"
        },
        {
          "key": "ram",
          "order": 40,
          "meaning": "memory in GB",
          "example": "16",
          "renders": "16 GB RAM"
        },
        {
          "key": "nodes",
          "order": 50,
          "meaning": "cluster nodes",
          "example": "3",
          "renders": "3 nodes"
        },
        {
          "key": "os",
          "order": 60,
          "meaning": "operating system",
          "example": "linux",
          "renders": "operating system Linux"
        },
        {
          "key": "region",
          "order": 70,
          "meaning": "region code, no spaces",
          "example": "uscentral1",
          "renders": "region us-central1"
        },
        {
          "key": "tier",
          "order": 80,
          "meaning": "service tier",
          "example": "generalpurpose",
          "renders": "tier General Purpose"
        },
        {
          "key": "storage",
          "order": 90,
          "meaning": "storage in GB",
          "example": "250",
          "renders": "250 GB storage"
        },
        {
          "key": "gb",
          "order": 91,
          "meaning": "storage in GB",
          "example": "500",
          "renders": "500 GB storage"
        },
        {
          "key": "tb",
          "order": 92,
          "meaning": "storage in TB",
          "example": "2",
          "renders": "2 TB storage"
        },
        {
          "key": "redundancy",
          "order": 100,
          "meaning": "storage redundancy",
          "example": "lrs",
          "renders": "LRS redundancy"
        },
        {
          "key": "hours",
          "order": 110,
          "meaning": "hours per month",
          "example": "730",
          "renders": "730 hours per month"
        },
        {
          "key": "users",
          "order": 120,
          "meaning": "expected users",
          "example": "500",
          "renders": "500 users"
        },
        {
          "key": "requests",
          "order": 130,
          "meaning": "requests per month",
          "example": "10000000",
          "renders": "10,000,000 requests per month"
        },
        {
          "key": "egress",
          "order": 140,
          "meaning": "outbound GB per month",
          "example": "500",
          "renders": "500 GB outbound data per month"
        },
        {
          "key": "iops",
          "order": 150,
          "meaning": "provisioned IOPS",
          "example": "5000",
          "renders": "iops 5000"
        },
        {
          "key": "throughput",
          "order": 160,
          "meaning": "throughput hint",
          "example": "250",
          "renders": "throughput 250"
        },
        {
          "key": "replicas",
          "order": 170,
          "meaning": "replica count",
          "example": "2",
          "renders": "replicas 2"
        },
        {
          "key": "env",
          "order": 180,
          "meaning": "environment hint",
          "example": "prod",
          "renders": "env prod"
        },
        {
          "key": "commit",
          "order": 999,
          "meaning": "commitment",
          "example": "payg",
          "renders": "pay-as-you-go"
        }
      ]
    }
  },
  "examples": [
    {
      "url": "https://cloudpricingcalculators.com/q/aws/ec2-rds/size=m5large_qty=2_region=useast1-engine=postgres_storage=100?n=Web%20app",
      "note": "two AWS services on one link"
    },
    {
      "url": "https://cloudpricingcalculators.com/q/azure/vm/size=d4sv5_os=linux/aws/ec2/size=m6ixlarge_os=linux/gcp/gce/size=n2standard4_os=linux?n=VM%20comparison",
      "note": "a three-cloud comparison group, one service per cloud"
    },
    {
      "url": "https://cloudpricingcalculators.com/q/azure/vm/size=d4sv5_qty=2_os=windows_region=eastus?n=Windows%20servers",
      "note": "two Windows VMs on Azure in East US, with a name"
    }
  ]
}
