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