Azure Retail Prices API Guide
The Azure Retail Prices API is unauthenticated — no Azure account or subscription needed.
Endpoint
https://prices.azure.com/api/retail/pricesPreview version (includes savings plan rates):
https://prices.azure.com/api/retail/prices?api-version=2023-01-01-previewQuerying VM Prices
No Azure CLI command exists for the Retail Prices API. Since the API is unauthenticated, use
curl(bash) orInvoke-RestMethod(PowerShell) directly. Theaz restcommand also works but adds no auth benefit.
Basic VM price lookup
GET https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines' and armRegionName eq 'eastus' and armSkuName eq 'Standard_D4s_v5' and priceType eq 'Consumption'curl -s "https://prices.azure.com/api/retail/prices?\$filter=serviceName%20eq%20'Virtual%20Machines'%20and%20armRegionName%20eq%20'eastus'%20and%20armSkuName%20eq%20'Standard_D4s_v5'%20and%20priceType%20eq%20'Consumption'"$filter = "serviceName eq 'Virtual Machines' and armRegionName eq 'eastus' and armSkuName eq 'Standard_D4s_v5' and priceType eq 'Consumption'"
$response = Invoke-RestMethod "https://prices.azure.com/api/retail/prices?`$filter=$filter"
$response.Items | Select-Object armSkuName, retailPrice, unitOfMeasure, meterNameFilter by family (all D-series in a region)
GET https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines' and armRegionName eq 'eastus' and contains(armSkuName, 'Standard_D') and priceType eq 'Consumption'curl -s "https://prices.azure.com/api/retail/prices?\$filter=serviceName%20eq%20'Virtual%20Machines'%20and%20armRegionName%20eq%20'eastus'%20and%20contains(armSkuName,%20'Standard_D')%20and%20priceType%20eq%20'Consumption'"$filter = "serviceName eq 'Virtual Machines' and armRegionName eq 'eastus' and contains(armSkuName, 'Standard_D') and priceType eq 'Consumption'"
$response = Invoke-RestMethod "https://prices.azure.com/api/retail/prices?`$filter=$filter"
$response.Items | Select-Object armSkuName, retailPrice, meterNameReservation pricing
GET https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines' and armSkuName eq 'Standard_D4s_v5' and priceType eq 'Reservation'curl -s "https://prices.azure.com/api/retail/prices?\$filter=serviceName%20eq%20'Virtual%20Machines'%20and%20armSkuName%20eq%20'Standard_D4s_v5'%20and%20priceType%20eq%20'Reservation'"$filter = "serviceName eq 'Virtual Machines' and armSkuName eq 'Standard_D4s_v5' and priceType eq 'Reservation'"
$response = Invoke-RestMethod "https://prices.azure.com/api/retail/prices?`$filter=$filter"
$response.Items | Select-Object armSkuName, retailPrice, reservationTerm, meterNameNon-USD currency
Append currencyCode parameter:
GET https://prices.azure.com/api/retail/prices?currencyCode='EUR'&$filter=serviceName eq 'Virtual Machines' and armSkuName eq 'Standard_D4s_v5'curl -s "https://prices.azure.com/api/retail/prices?currencyCode='EUR'&\$filter=serviceName%20eq%20'Virtual%20Machines'%20and%20armSkuName%20eq%20'Standard_D4s_v5'"$filter = "serviceName eq 'Virtual Machines' and armSkuName eq 'Standard_D4s_v5'"
$response = Invoke-RestMethod "https://prices.azure.com/api/retail/prices?currencyCode='EUR'&`$filter=$filter"
$response.Items | Select-Object armSkuName, retailPrice, currencyCode, meterNameAvailable Filters
| Filter | Example Value | Notes |
|---|---|---|
serviceName | 'Virtual Machines' | Case-sensitive in preview API |
armRegionName | 'eastus', 'westeurope' | ARM region name |
armSkuName | 'Standard_D4s_v5' | Full ARM SKU name |
priceType | 'Consumption', 'Reservation' | Pay-as-you-go vs reserved |
serviceFamily | 'Compute' | Broad category |
productName | 'Virtual Machines Dv5 Series' | Product line |
meterName | 'D4s v5', 'D4s v5 Spot' | Includes Spot and Low Priority |
Warning: Filter values are case-sensitive in API version
2023-01-01-previewand later.
Response Fields
| Field | Description |
|---|---|
armSkuName | ARM SKU name (e.g., Standard_D4s_v5) |
retailPrice | Microsoft retail price (USD unless overridden) |
unitOfMeasure | Usually 1 Hour for VMs |
armRegionName | Region code |
meterName | Human-readable meter (includes "Spot" / "Low Priority" variants) |
productName | Product line with OS (e.g., "Virtual Machines Dv5 Series Windows") |
type | Consumption, Reservation, or DevTestConsumption |
reservationTerm | 1 Year or 3 Years (reservation only) |
savingsPlan | Array with term and unitPrice (preview API only) |
isPrimaryMeterRegion | Filter to true to avoid duplicate regional meters |
Pagination
API returns max 1,000 records per request. Follow NextPageLink in the response to get more:
{ "NextPageLink": "https://prices.azure.com:443/api/retail/prices?$filter=...&$skip=1000" }Tips for Recommendations
- Filter Linux vs Windows:
productNamecontains the OS — e.g.,'Virtual Machines Dv5 Series'(Linux) vs'Virtual Machines Dv5 Series Windows' - Use
isPrimaryMeterRegion eq trueto deduplicate - Compare Consumption + Reservation + Savings Plan for full cost picture
- Monthly estimate:
retailPrice × 730(hours/month) - Spot pricing: Filter
meterNamecontaining'Spot'for discounted interruptible VMs