Vendor Credentials End Points (Azure)

Summary

These end points are used to manage Azure integration within Cloudability which supports creation, updation, and deletion of Azure credentials.

End Point Particulars

Public Enrollment Account (EA)

end point : /v3/vendors/azure/accounts for RESTful CRUD interactions

end point : /v3/vendors/azure/accounts/[account_id]?viewId=0

end point : /v3/vendors/azure/accounts/[account_id]/setup-scripts

end point : /v3/vendors/azure/accounts/[account_id]/verification

end point : /v3/vendors/azure/accounts/[account_id] /archive

Public Microsoft Customer Agreement (MCA)

end point : /v3/vendors/azure/accounts for RESTful CRUD interactions

end point : /v3/vendors/azure/accounts/[account_id]?viewId=0

end point : /v3/vendors/azure/accounts/[account_id]/setup-scripts

end point : /v3/vendors/azure/accounts/[account_id]/verification

end point : /v3/vendors/azure/accounts/[account_id] /archive

The Credential Object

vendorAccountName (string) - Azure vendor Account Name

vendorAccountId (string) - Azure vendor Account ID of customers

vendorKey (string) - states the vendor type (Azure).

verification : contains state of the account

state (string) - it specifies whether the account is in verified/unverified/error state

authorization : contains the below details:

type (string) - the provider type (azure_enrollment/azure_mca/azure_subscription)

enrollmentId (string) - the enrollement account Id(only present in Azure Enrollment Accounts)

tenantId (string) - unique identifier assigned to each Azure Active Directory (AAD) instance

subscriptionGuid (string) - is a unique identifier assigned to each Azure subscription

resourceGroupName (string) - is a unique name assigned to a logical container for Azure resources

storageAccountName (string) - is the unique name assigned to an Azure Storage account

containerName (string) - refers to the unique name assigned to a container within an Azure Storage account

directoryName (string) - refers to a folder or directory within a storage account

exportNameCost (string) - cost export file name

exportNameAmortized (string) - amortized export file name

tenancyId (string) - refers to the tenantId which is a globally unique identifier assigned to each Azure Active Directory (AAD)

turboExecutionEnabled(boolean) - default to false - only required for Cloudability premium

createdAt (string) - the timestamp at which the account is credentialized

additionalData(object) -

accountAlias(string) – Alias name for a billing account for MSP

AzureTenantId(string)–– tenant id of the uncredentialled account for MSP

consumerOrgId (string) - if the account belongs to msp_consumer, this is the orgId of MSP_CONSUMER (optional, needs to be provided only if it belongs to MSP).

Public EA/MCA API

List Accounts

curl 'https://api.cloudability.com/v3/vendors/azure/accounts?viewId=0' \\ 
 -u ‘[auth_token]:’ 
{ 
"result": [ 
{ 
"id": "11112222", 
"vendorAccountName": "11112222", 
"vendorAccountId": "11112222", 
"vendorKey": "azure", 
"verification": { 
"state": "verified", 
"lastVerificationAttemptedAt": "2025-12-16T12:32:32Z" 
}, 
"authorization": { 
"type": "azure_enrollment", 
"permissions": ["Cost Export Report", "Amortized Export Report"], 
"enrollmentId": "11112222", 
"tenantId": "11a1a111-1111-1111-1111-11aa11111aff", 
"subscriptionGuid": "ecf11fd1-dc11-11b1-1af1-db11a1a1becf", 
"resourceGroupName": "costexport", 
"storageAccountName": "cloudabilityactualcost", 
"containerName": "apptiocostmgmtcontainer", 
"directoryName": "apptiocostmgmtdirectory", 
"exportNameCost": "cloudabilityactualcost", 
"exportNameAmortized": "cloudabilityamortizedcost", 
"tenancyId": "11a1a111-1111-1111-1111-11aa11111aff" 
}, 
"meta": {}, 
"additionalData": {}, 
"createdAt": "2021-03-09T16:05:37Z", 
"consumerOrgId": "", 
"byodVendor": "ABSENT" 
}, 

Create Azure EA credential

curl –location --request POST 'https://api.cloudability.com/v3/vendors/azure/accounts' \ 
--header 'Content-Type: application/json' \ 
--data '{ 
"vendorAccountId": "11111111", 
"type": "azure_enrollment", 
"tenantId": "11f1a111-1111-1111-1111-11cf11111bff", 
"consumerOrgId": "", 
"costReportSpec": { 
"subscriptionGuid": "ecf11fd1-dc11-11b1-1af1-db11a1a1becf", 
"resourceGroupName": "test", 
"storageAccountName": "test-acc", 
"containerName": "test-cont", 
"directoryName": "test-dir", 
"exportNameCost": "test-cost", 
"exportNameAmortized": "test-amortized" 
}'
{
"result": { 
"id": "11111111", 
"vendorAccountName": "11111111", 
"vendorAccountId": "11111111", 
"vendorKey": "azure", 
"verification": { 
"state": "unverified" 
}, 
"authorization": { 
"type": "azure_enrollment", 
"enrollmentId": "11111111", 
"tenantId": "11f1a111-1111-1111-1111-11cf11111bff", 
"subscriptionGuid": "ecf11fd1-dc11-11b1-1af1-db11a1a1becf", 
"resourceGroupName": "test", 
"storageAccountName": "test-acc", 
"containerName": "test-cont", 
"directoryName": "test-dir", 
"exportNameCost": "test-cost", 
"exportNameAmortized": "test-amortized", 
"tenancyId": "11f1a111-1111-1111-1111-11cf11111bff" 
}, 
"meta": {}, 
"createdAt": "2023-12-28T11:02:42Z", 
"consumerOrgId": "" 
} 
} 

Create Azure MCA credential
curl –location --request POST 'https://api.cloudability.com/v3/vendors/azure/accounts' \ 
--header 'Content-Type: application/json' \ 
--data ' { 
"vendorAccountId": "1111a1a1-1111-1a11-aa11-a111a111111a:1111aa11-a1aa-1aa1-1111-1111a11a1aa1_2024-05-08", 
"type": "azure_mca", 
"tenantId": "11111111-11a1-11aa-1111-111a111a1a11", 
"consumerOrgId": "", 
"costReportSpec": { 
"subscriptionGuid": "22111111-11a1-11aa-1111-111a111a1a22", 
"resourceGroupName": "test_resource", 
"storageAccountName": "test_account", 
"containerName": "test_container", 
"directoryName": "test_dir", 
"exportNameCost": "test_cost", 
"exportNameAmortized": "test_amort" 
} 
}' 
{ 
"result": { 
"id": "1111a1a1-1111-1a11-aa11-a111a111111a:1111aa11-a1aa-1aa1-1111-1111a11a1aa1_2024-05-08", 
"vendorAccountName": "1111a1a1-1111-1a11-aa11-a111a111111a:1111aa11-a1aa-1aa1-1111-1111a11a1aa1_2024-05-08", 
"vendorAccountId": "1111a1a1-1111-1a11-aa11-a111a111111a:1111aa11-a1aa-1aa1-1111-1111a11a1aa1_2024-05-08", 
"vendorKey": "azure", 
"verification": { 
"state": "unverified" 
}, 
"authorization": { 
"type": "azure_mca", 
"tenantId": "11111111-11a1-11aa-1111-111a111a1a11", 
"subscriptionGuid": "22111111-11a1-11aa-1111-111a111a1a22", 
"resourceGroupName": "test_resource", 
"storageAccountName": "test_account", 
"containerName": "test_container", 
"directoryName": "test_dir", 
"exportNameCost": "test_cost", 
"exportNameAmortized": "test_amort", 
"tenancyId": "11111111-11a1-11aa-1111-111a111a1a11" 
}, 
"additionalData": {}, 
"createdAt": "2025-12-17T08:25:45Z", 
"consumerOrgId": "", 
"byodVendor": "ABSENT" 
} 
}

Create Azure MPA credential
curl –location --request POST 'https://api.cloudability.com/v3/vendors/azure/accounts' \ 
--header 'Content-Type: application/json' \ 
--data '{ 
"vendorAccountId": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"type": "azure_mpa", 
"tenantId": "11111111-11a1-11aa-1111-111a111a1a11", 
"consumerOrgId": "111111", 
"costReportSpec": { 
"subscriptionGuid": "11111111-11a1-11aa-1111-111a111a1a22", 
"resourceGroupName": "tes_resource", 
"storageAccountName": "test_storage", 
"containerName": "test_container", 
"directoryName": "test_dir", 
"exportNameCost": "test_cost", 
"exportNameAmortized": "test_amortized" 
} 
}'
{ 
"result": { 
"id": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"vendorAccountName": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"vendorAccountId": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"vendorKey": "azure", 
"verification": { 
"state": "unverified" 
}, 
"authorization": { 
"type": "azure_mpa", 
"tenantId": "11111111-11a1-11aa-1111-111a111a1a11", 
"subscriptionGuid": "11111111-11a1-11aa-1111-111a111a1a22", 
"resourceGroupName": "tes_resource", 
"storageAccountName": "test_storage", 
"containerName": "test_container", 
"directoryName": "test_dir", 
"exportNameCost": "test_cost", 
"exportNameAmortized": "test_amortized", 
"tenancyId": "11111111-11a1-11aa-1111-111a111a1a11" 
}, 
"additionalData": {}, 
"createdAt": "2025-12-17T08:32:10Z", 
"consumerOrgId": "113924", 
"byodVendor": "ABSENT" 
} 
}

Create Credential for Subscription Account
curl --location --request PUT 'https://api.cloudability.com/v3/vendors/azure/accounts/<master-account-id>/auth-locations?viewId=0' \ 
--header 'Content-Type: application/json' \ 
--data ' { 
"vendorAccountIds": [ 
"11aaaa1a-11a1-1111-11a1-111a1a1aa111", 
"22aaaa2a-22a2-2222-22a2-222a2a2aa222", 
"33aaaa3a-33a3-3333-33a3-333a3a3aa333" 
], 
"turboExecutionEnabled": false 
}' 
{ 
"result": [ 
{ 
"vendorAccountId": "11aaaa1a-11a1-1111-11a1-111a1a1aa111", 
"tenantId": "11a1a111-1111-1111-1111-42aa11114aaa", 
"authUrl": "https://login.microsoftonline.com/11a1a111-1111-1111-1111-42aa11114aaa/oauth2/authorize?client_id=5bb55bbb-5555-55b5-55bb-55b5bb5bbb5b&response_type=code&response_mode=query&redirect_uri=https%3A%2F%2Fapi.cloudability.com%2Fcallback%2Factive-directory-auth%2Fconfig%2F&resource=https%3A%2F%2Fmanagement.azure.com%2F&state=8888888c-8cc8-88c8-cccc-ccc88ccc888a" 
}, 
{ 
"vendorAccountId": "22aaaa2a-22a2-2222-22a2-222a2a2aa222", 
"tenantId": "22a2a222-1111-1111-1111-42aa11114aaa", 
"authUrl": "https://login.microsoftonline.com/22a2a222-1111-1111-1111-42aa11114aaa/oauth2/authorize?client_id=6bb66bbb-6666-66b6-66bb-66b6bb6bbb6b&response_type=code&response_mode=query&redirect_uri=https%3A%2F%2Fapi.cloudability.com%2Fcallback%2Factive-directory-auth%2Fconfig%2F&resource=https%3A%2F%2Fmanagement.azure.com%2F&state=9999999c-9cc9-99c9-cccc-ccc99ccc999a" 
}, 
{ 
"vendorAccountId": "33aaaa3a-33a3-3333-33a3-333a3a3aa333", 
"tenantId": "33a3a333-3333-1111-1111-42aa11114aaa", 
"authUrl": "https://login.microsoftonline.com/33a3a333-3333-1111-1111-42aa11114aaa/oauth2/authorize?client_id=7bb77bbb-7777-77b7-77bb-77b7bb7bbb7b&response_type=code&response_mode=query&redirect_uri=https%3A%2F%2Fapi.cloudability.com%2Fcallback%2Factive-directory-auth%2Fconfig%2F&resource=https%3A%2F%2Fmanagement.azure.com%2F&state=4c-4cc4-4c4-cccc-ccc4ccc4a" 
} 
] 
}

Update the Azure EA credential with the given ID
curl --location --request PUT 'https://api.cloudability.com/v3/vendors/azure/accounts/11111111' \ 
--header 'Content-Type: application/json' \ 
--data '{ 
"vendorAccountId": "11111111", 
"type": "azure_enrollment", 
"tenantId": "11f1a111-1111-1111-1111-11cf11111bff", 
"consumerOrgId": "", 
"costReportSpec": { 
"subscriptionGuid": "ecf11fd1-dc11-11b1-1af1-db11a1a1becf", 
"resourceGroupName": "costexportName", 
"storageAccountName": "cloudabilityactualcost", 
"containerName": "apptiocostmgmtcontainer", 
"directoryName": "apptiocostmgmtdirectory", 
"exportNameCost": "NA", 
"exportNameAmortized": "NA" 
}'

{ 
"result": { 
"id": "11111111", 
"vendorAccountName": "11111111", 
"vendorAccountId": "11111111", 
"vendorKey": "azure", 
"verification": { 
"state": "unverified" 
}, 
"authorization": { 
"type": "azure_enrollment", 
"enrollmentId": "11111111", 
"tenantId": "11f1a111-1111-1111-1111-11cf11111bff", 
"subscriptionGuid": "ecf11fd1-dc11-11b1-1af1-db11a1a1becf", 
"resourceGroupName": "costexportName", 
"storageAccountName": "cloudabilityactualcost", 
"containerName": "apptiocostmgmtcontainer", 
"directoryName": "apptiocostmgmtdirectory", 
"exportNameCost": "NA", 
"exportNameAmortized": "NA", 
"tenancyId": "11f1a111-1111-1111-1111-11cf11111bff" 
}, 
"meta": {}, 
"createdAt": "2021-03-09T16:05:37Z", 
"consumerOrgId": "" 
} 
}

Update the Azure MCA credential with the given ID
curl --location --request PUT 'https://api.cloudability.com/v3/vendors/azure/accounts/1111a1a1-1111-4d11-aa11-a111a111111a:1111aa11-b1aa-1aa1-2222-3333f44e2aa1_2019-05-01?viewId=0' \ 
--header 'Content-Type: application/json' \ 
--data '{ 
"vendorAccountId": "1111a1a1-1111-4d11-aa11-a111a111111a:1111aa11-b1aa-1aa1-2222-3333f44e2aa1_2019-05-01", 
"type": "azure_mca", 
"tenantId": "a2a22aaa-22aa-222a-aa22-2a2aa2aaa2a2", 
"consumerOrgId": "", 
"costReportSpec": { 
"subscriptionGuid": "a2a22aaa-22aa-222a-aa22-2a2aa2aaa2a2", 
"resourceGroupName": "test", 
"storageAccountName": "test", 
"containerName": "test", 
"directoryName": "test", 
"exportNameCost": "test", 
"exportNameAmortized": "test1" 
} 
}'
{ 
"result": { 
"id": "1111a1a1-1111-4d11-aa11-a111a111111a:1111aa11-b1aa-1aa1-2222-3333f44e2aa1_2019-05-01", 
"vendorAccountName": "1111a1a1-1111-4d11-aa11-a111a111111a:1111aa11-b1aa-1aa1-2222-3333f44e2aa1_2019-05-01", 
"vendorAccountId": "1111a1a1-1111-4d11-aa11-a111a111111a:1111aa11-b1aa-1aa1-2222-3333f44e2aa1_2019-05-01", 
"vendorKey": "azure", 
"verification": { 
"state": "unverified" 
}, 
"authorization": { 
"type": "azure_mca", 
"tenantId": "a2a22aaa-22aa-222a-aa22-2a2aa2aaa2a2", 
"subscriptionGuid": "a2a22aaa-22aa-222a-aa22-2a2aa2aaa2a2", 
"resourceGroupName": "test", 
"storageAccountName": "test", 
"containerName": "test", 
"directoryName": "test", 
"exportNameCost": "test", 
"exportNameAmortized": "test1", 
"tenancyId": "a2a22aaa-22aa-222a-aa22-2a2aa2aaa2a2" 
}, 
"additionalData": {}, 
"createdAt": "2025-02-27T10:51:38Z", 
"consumerOrgId": "", 
"byodVendor": "ABSENT" 
} 
}

Update the Azure MPA credential with the given ID
curl --location --request PUT 'https://api.cloudability.com/v3/vendors/azure/accounts/a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30?viewId=0' \ 
--header 'Content-Type: application/json' \ 
--data '{ 
"vendorAccountId": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"type": "azure_mpa", 
"tenantId": "11111111-11a1-11aa-1111-111a111a1a11", 
"consumerOrgId": "111111", 
"costReportSpec": { 
"subscriptionGuid": "11111111-11a1-11aa-1111-111a111a1a22", 
"resourceGroupName": "tes_resource", 
"storageAccountName": "test_storage", 
"containerName": "test_container", 
"directoryName": "test_dir", 
"exportNameCost": "test_cost", 
"exportNameAmortized": "test_amortized" 
} 
}' 

{ 
"result": { 
"id": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"vendorAccountName": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"vendorAccountId": "a1a11111-111a-1111-11a1-a1111a1a1111:aa1111aa-aaa1-1aa1-111a-a1aa1a111a1a_2024-09-30", 
"vendorKey": "azure", 
"verification": { 
"state": "unverified" 
}, 
"authorization": { 
"type": "azure_mpa", 
"tenantId": "11111111-11a1-11aa-1111-111a111a1a11", 
"subscriptionGuid": "11111111-11a1-11aa-1111-111a111a1a22", 
"resourceGroupName": "tes_resource", 
"storageAccountName": "test_storage", 
"containerName": "test_container", 
"directoryName": "test_dir", 
"exportNameCost": "test_cost", 
"exportNameAmortized": "test_amortized", 
"tenancyId": "11111111-11a1-11aa-1111-111a111a1a11" 
}, 
"additionalData": {}, 
"createdAt": "2025-12-17T08:32:10Z", 
"consumerOrgId": "113924", 
"byodVendor": "ABSENT" 
} 
} 

Get Azure powershell script for an Account
curl 'https://api.cloudability.com/v3/vendors/azure/accounts/<account-id>/setup-scripts?viewId=0' \\ 
 -u ‘[auth_token]:’ 
{ 
"result": { 
"scripts": "script content........" 
} 
}

Verify Credentials for an Account
curl -X POST 'https://api.cloudability.com/v3/vendors/azure/accounts/<account-id>/verification?viewId=0' \\ 
 -u ‘[auth_token]:’

{ 
"result": { 
"id": "11111111", 
"vendorAccountName": "11111111", 
"vendorAccountId": "11111111", 
"vendorKey": "azure", 
"verification": { 
"state": "error", 
"message": "Azure EA account cannot be verified because of below reasons:\n1. AZURE_ENROLLMENT_READER(billing:EnrollmentReader) role has not been assigned to Cloudability's Service Principal\n2. Azure EA API access key is Absent/Invalid/Expired\n3. All the Blob Storage related parameters are not provided/Invalid\nOne of the above mentioned reasons should be addressed.", 
"lastVerificationAttemptedAt": "2025-12-17T09:48:07Z" 
}, 
"authorization": { 
"type": "azure_enrollment", 
"enrollmentId": "11111111", 
"tenantId": "11a1a111-1111-1111-1111-11aa11111a11", 
"subscriptionGuid": "aaa111aa1-aa11-11a1-1aa1-aa11a1a1aaaa", 
"resourceGroupName": "costexport", 
"storageAccountName": "test", 
"containerName": "test", 
"directoryName": "test", 
"exportNameCost": "test", 
"exportNameAmortized": "test", 
"tenancyId": "11a1a111-1111-1111-1111-11aa11111a11" 
}, 
"additionalData": {}, 
"createdAt": "2024-01-31T12:20:03Z", 
"consumerOrgId": "" 
} 
}

Archive Azure Credential with a given ID
curl -X POST 'https://api-s.cloudability.com/v3/vendors/azure/accounts/<account-id>/archive?viewId=0' \\ 
 -u ‘[auth_token]:’

{ 
"result": { 
"id": "11111111", 
"vendorAccountName": "11111111", 
"vendorAccountId": "11111111", 
"vendorKey": "azure", 
"verification": { 
"state": "archived" 
}, 
"meta": {}, 
"consumerOrgId": "" 
} 
}

Deletes the credential with the given ID
curl -X DELETE 'https://api.cloudability.com/v3/vendors/azure/accounts/[account-id]?viewId=0' \\ 
 -u ‘[auth_token]:’ 
{ 
"result": { 
"message": "Successfully deleted", 
"vendorKey": "azure", 
"vendorAccountId": "11111111" 
} 
}