Reservation Portfolio End Point

Summary

The RI Portfolio end point can be used to retrieve a detailed list of all Reserved Instances (RIs) as well as understand how well utilized these reservations were over a particular period of time.

Learn more about the Reservation Portfolio.

Included examples in this document will focus on compute reservations an commitments but the patterns for other supported AWS services (i.e. RDS, Redshift and ElastiCache) are consistent with EC2 examples.

End Point Particulars

The end points are read-only for retrieving a list of Reservation Objects

AWS EC2 RI end point : /reservations/aws/savings/ec2

AWS Savings Plan end point : /reservations/aws/portfolio/savingsPlan

**Azure compute RI end point **: /reservations/azure/portfolio/compute

GCP compute CUD end point : /reservations/gcp/portfolio/ce

AWS RDS RI end point : /reservations/aws/savings/rds

AWS Redshift RI end point : /reservations/aws/savings/redshift

AWS ElastiCache end point : /reservations/aws/savings/elasticache

AWS RI Arguments

Argument

Required?

Description

Type

start

yes

Beginning of time window to look for RI usage, e.g. "2018-01-01"

string

end

yes

End of time window to look for RI usage e.g. "2018-01-01"

string

basis

no

Defaults to 'cash' though you may pass 'adjusted' to see savings net of any custom pricing rules

string

viewId

no

Defaults to 0. Only account-group based views are supported

integer

The AWS Reservation Object

availabilityZone (string): If applicable

count (integer): Number of reserved instances in the RI

duration (integer): duration of the RI in seconds

end (string): The timestamp when the RI ends e.g., '2018-07-06T18:00:00Z'

instanceType (string): e.g., 'r3.large'

multiAz (string): Single-AZ or Multi-AZ (RDS only)

netSavings (number): Total savings, reflecting the difference between what you paid for an RI and how much the hours you actually consumed would have cost if purchased On-Demand

offeringClass (string): 'standard' or 'convertible

offeringType (string): 'NoUpfront', 'PartialUpfront' or 'AllUpfront'

operatingSystem (string): Software and associated licensing info. e.g., "Linux" or "Windows with SQL Server Standard

overallUtilization (number): The percent of purchased hours that were applied to a running instance

region (string): e.g., 'us-east-1',

reservationIdentifier (string): The vendor supplied unique id for your reservation

scope (string): 'Region' or 'Availability Zone'

start (string): The timestamp when the RI begins e.g., '2018-07-06T18:00:00Z'

state (string): 'retired' or 'active'

tenancy (string): 'default' or 'dedicated'

term (integer): duration of the RI in years

units (integer): number of ISF-Normalized hours in the RI

unrealizedSavings (number): Any additional savings you could have achieved assuming complete RI utilization

vendorAccountId (string): 12 digit string corresponding to your AWS account ID

Example AWS Reservation Object

{
  "result": [
    {
      "availabilityZone": "",
      "count": 1,
      "duration": 10368000,
      "end": "2018-11-03T16:17:39Z",
      "instanceType": "t2.large",
      "multiAz": "(not set)",
      "netSavings": 25.416000000000015,
      "offeringClass": "standard",
      "offeringType": "NoUpfront",
      "operatingSystem": "Linux",
      "overallUtilization": 1,
      "region": "us-east-1",
      "reservationIdentifier": "0202a336-1712-1712-1712-0202a336",
      "scope": "Region",
      "start": "2018-07-06T18:00:00Z",
      "state": "active",
      "tenancy": "default",
      "term": 1,
      "units": 4,
      "unrealizedSavings": 0,
      "vendorAccountId": "0123456789"
    }
  ]
}

Example AWS Reservation Portfolio Requests

List Subscriptions

The following will list any EC2 reservations that were active between March 1 and March 15, 2018 and with no view restrictions.

curl "https://api.cloudability.com/v3/reservations/aws/savings/ec2?basis=cash&start=2018-08-01&end=2018-08-15&viewId=0" \\
     -u ‘[auth_token]:’

AWS Savings Plan Arguments

Argument

Required

Description

Type

filter

No

Attributes Measure(field) and value that savings plans in response must have. E.g. ‘InstanceFamily’ ‘r5’

string

limit

No

Part of pagination range request for maximum count per page.

integer

offset

No

Part of pagination range request designating the first asset to be returned in the response.

integer

sortOrder

No

Measure(field) and direction (ascending/descending) order of assets in response.

string

viewId

No

Cloudability ViewID to be respected in response.

integer

The AWS Savings Plan Object

vendorAccountId (string): 12 digit string corresponding to your AWS account ID

savingsPlanId (string): the vendor assigned identifier for the Savings Plan

savingsPlanArn (string): The vendor assigned Savings Plan unique global identifier

duration (integer): duration of the savings plan in seconds

start (integer): The Epoch millisecond formatted time stamp of the Savings Plan becoming active

end (integer): The Epoch millisecond formatted time stamp of when the Savings Plan will terminate

term (integer): Savings Plan Term length in years

type (string): Savings Plan type (EC2 or Compute)

state (string): Current state of the Savings plan (e.g. Active)

region (string): EC2 Savings Plan region designation (not applicable for Compute plans)

ec2InstanceFamil (string): EC2 Savings Plan applicable instance family designation (not applicable for Compute plans)

offeringType (string): Payment method/model designation (e.g. No Upfront)

hourlyCommitment (integer): Hourly Savings Plan monetary commitment

totalCommitment (integer): Total monetary commitment over the life of the savings plan

currencyCode (string): Monetary units for Savings Plan hourly and total commitment

upfront (integer): Initial payment made at inception of Savings Plan

frequency (string): Applicable pricing interval units

amount (integer): Applicable pricing per frequency unit specified

Example AWS Savings Plan Object

{
  "result": [
    {
      "vendorAccountId": "############",
      "accountName": "AWS Consolidated Master",
      "savingsPlanId": "xx###x##x-xxxx-#xxx-xx##-x####x###xxx",
      "savingsPlanArn": "arn:aws:savingsplans::############:savingsplan/xx###x##x-xxxx-#xxx-xx##-x####x###xxx",
      "description": "1 year No Upfront r5 EC2 Instance Savings Plan in us-east-1",
      "start": 1573079358000,
      "end": 1604615357000,
      "duration": 31536000,
      "term": 1,
      "type": "EC2Instance",
      "state": "active",
      "region": "us-east-1",
      "ec2InstanceFamily": "r5",
      "offeringType": "No Upfront",
      "hourlyCommitment": 1,
      "totalCommitment": 8760,
      "pricing": {
        "offeringId": "c#####xx#-xxx#-##xx-x##x-#xx####xx#x#",
        "currencyCode": "USD",
        "upfront": 0,
        "recurring": {
          "frequency": "Hourly",
          "amount": 1
        }
      },
      "tags": []
    },
    {
      "vendorAccountId": "############",
      "accountName": "AWS Consolidated Master",
      "savingsPlanId": "xx###x##x-xxxx-#xxx-xx##-x####x###xxx",
      "savingsPlanArn": "arn:aws:savingsplans::############:savingsplan/xx###x##x-xxxx-#xxx-xx##-x####x###xxx",
      "description": "1 year No Upfront Compute Savings Plan",
      "start": 1573145364000,
      "end": 1604681363000,
      "duration": 31536000,
      "term": 1,
      "type": "Compute",
      "state": "active",
      "region": "(not set)",
      "ec2InstanceFamily": "(not set)",
      "offeringType": "No Upfront",
      "hourlyCommitment": 1,
      "totalCommitment": 8760,
      "pricing": {
        "offeringId": "c#####xx#-xxx#-##xx-x##x-#xx####xx#x#",
        "currencyCode": "USD",
        "upfront": 0,
        "recurring": {
          "frequency": "Hourly",
          "amount": 1
        }
      },
      "tags": []
    }
  ],
  "meta": {
    "aggregate": {
      "quantity": 2,
      "hourlyCommitment": 2
    },
    "pagination": {
      "totalCount": 2
    }
  }
}

Example Savings Plan Inventory Request

List Savings Plans

The following will list the first 50 active or expired r5 EC2 Savings Plans in us-east-1 sorted by expiration date from those expiring soonest to those expiring farthest in the future.

curl "https://api.cloudability.com/v3/reservations/aws/portfolio/savingsPlan?filter&limit=50&offset=0&product=savingsPlan&sortOrder=%2Bend&viewId=0" \\
     -u ‘[auth_token]:’

The Google Cloud Platform(GCP) Commitment Endpoint

The following api endpoint will provide a list of commitments.

The following curl will work with GET/ POST requests: GET with query parameters and POST with request body.

curl 'https://api.cloudability.com/v3/reservations/gcp/portfolio/commitment' 
	 -H 'accept: application/json, text/plain, /' 
	 -H 'accept-language: en-US,en;q=0.9' 
	 -H 'authorization: Bearer [auth_token]' 
	 -H 'content-type: application/json' 
	 --data-raw '{"start":"2025-02-28","end":"2025-03-30","basis":"adjusted","filter":"commitment_category==spend","viewId":0,"limit":10,"offset":0,"sortOrder":"-billingAccountIdentifier","service":"scud-groups","services":"compute_engine"}'
		

The following table lists the valid payload options:

Payload Options

Valid Format

Details

start

Date in the format “YYYY-MM-DD"

 

end

Date in the format “YYYY-MM-DD"

 

basis

adjusted, cost

 

filter

 

Look how filters get formed in the developer toolbar.

sortOrder

A valid field e.g. billingAccountIdentifier for ALL, netsavings for other CUDs.

 
services

Comma separated string with values from

  • compute_engine

  • cloud_sql

Current supported services include “compute_engine” and “cloud_sql”.

For SCUDs, RCUDs or ALL commitments to be returned via the above endpoint, use the following in filters along with dates.

Commitments

Filter Values

Details

Flex CUDs Commitments

"commitment_category==spend"

When commitment category as spend is provided, the above endpoint should return Flex CUDs commitments only.

RCUDs Commitments

"commitment_category==resource"

When commitment category as resource is provided, the above endpoint should return Resource CUDs commitments only.
All Commitments No filter added When no commitment category is provided as filter, Flex CUDs and RCUDs are returned as response by merging the results of RCUD and SCUD commitments

Cloud SQL CUDs

"commitment_category==spend"

"commitment_category==spend" with services in payload should be “cloud_sql”

The Google Cloud Platform(GCP) Commitment Endpoint Object

commitmentGroupId (string): The commitment group id for the group commitment belongs to.

billingAccountIdentifier (string): Billing Account Identifier in which commitment belong to.

term (integer): CUD term length in years.

region (string): Text description of the CUD's assigned region e.g. 'us-central'.

status (string): Current CUD status.

hourlyCommitmentAmount (string): Hourly commitment amount.

hourlyCommitmentCost (string): Hourly commitment cost that is being paid.

totalCommitmentAmount (string): Hourly commitment cost that is being paid.

totalCommitmentCost (string): Total commitment cost to be paid.

commitmentCostRemaining (string): Commitment remaining cost.

remainingCost (string): Remaining cost of the CUD to be paid.

commitmentDiscountRate (string): Commitment discount rate percentage / 100.

creation (string): The creation date of the CUD was requested

start (string): The start date of when the CUD began applying to usage

end (string): The CUD expiration date

expirationDate (string): The CUD expiration date

offer (string): CUD offer details if available.

description (string): Description of the CUD.

name (string): User assigned CUD name

accountIdentifier(string): User assigned account ID

memory (integer): MB of memory allocated (at 1024MB/GB)

vcpus (integer): vCPUs allocated to the CUD

duration (integer): Duration of the RI in seconds

statusMessage (string): Long form status description and explanation

type (string): Flex-CUD or CUD type of the CUD

commitmentGroupDetails (object): Commitment group details object {}

service: Service name CUD belongs to

reservationId/ commitmentId (string): Unique identifier of the CUD.

commitmentCategory (string): Commitment category, Spend or Resource.

Example GCP Commitment Endpoint Object

This is example response for ALL Commitments with 1 Flex CUD (SCUD) and 1 RCUD.

"result": [
  {
    "commitmentGroupId": "01E091-D83A6B-1F55DD:spend:COMPUTE_ENGINE:all-regions",
    "billingAccountIdentifier": "01E091-D83A6B-1F55DD",
    "term": 1,
    "region": "n/a",
    "quantity": 0,
    "status": "Active",
    "hourlyCommitmentAmount": 0.12,
    "hourlyCommitmentCost": 0.086397,
    "totalCommitmentAmount": 89.28,
    "totalCommitmentCost": 64.279011,
    "commitmentCostRemaining": 275.78,
    "commitmentDiscountRate": 0.280029,
    "creation": "2024-01-04",
    "start": "2024-01-04",
    "end": "2025-01-04",
    "expirationDate": "2025-01-04",
    "offer": "services/compute.googleapis.com/standardOffers/ffe0f6a3-2f98-437e-8d49-fc443a05d3c2",
    "description": "billingAccounts/01E091-D83A6B-1F55DD/orders/2b455b7d-d3d2-4696-a9bd-6d046776edcf",
    "name": "James Smith requested Flex CUD",
    "accountIdentifier": "01E091-D83A6B-1F55DD",
    "memory": 0,
    "vcpus": 0,
    "duration": 0,
    "commitmentGroupDetails": {
    "reservationId": "01E091-D83A6B-1F55DD:spend:COMPUTE_ENGINE:all-regions",
    "commitmentCategory": "Spend",
    "region": "all-regions",
    "quantity": 3,
    "status": "Active",
    "nextExpirationDate": "2025-01-04",
    "netSavings": -13.279300,
    "realizedSavingsRate": -0.0991584521,
    "commitmentListDiscountRate": 0.290029,
    "hourlyCommitmentAmount": 0.180000,
    "totalCommitmentAmount": 133.920000,
    "hourlyCommitmentCost": 0.127795,
    "totalCommitmentCost": 95.079368,
    "scudGroupUtilization": 0.610836,
    "remainingCost": 503.310000,
    "accountIdentifier": "01E091-D83A6B-1F55DD",
    "unrealizedSavings": -13.279300,
    "nextExpiration": 0,
    "vcpus": 0,
    "memory": 0,
    "predefinedOnDemandPrice": 0.0,
    "customOnDemandPrice": 0.0,
    "commit1YrPrice": 0.0,
    "commit3YrPrice": 0.0,
    "orgId": 112844,
    "service": "COMPUTE_ENGINE",
    "billingAccountIdentifier": "01E091-D83A6B-1F55DD",
    "scuds": []
    },
     "orgId": 112844,
     "service": "COMPUTE_ENGINE",
     "reservationId": "2b455b7d-d3d2-4696-a9bd-6d046776edcf",
     "commitmentCategory": "Spend"
    },
	{
	 "commitmentGroupId": "staging-rightsizing:us-central1:GENERAL_PURPOSE_E2",
	 "billingAccountIdentifier": "staging-rightsizing",
	 "term": 1,
	 "region": "us-central1",
	 "quantity": 0,
	 "status": "ACTIVE",
	 "hourlyCommitmentAmount": 0.0,
	 "hourlyCommitmentCost": 0.0,
	 "totalCommitmentAmount": 0.0,
	 "totalCommitmentCost": 0.0,
	 "commitmentCostRemaining": 0.0,
	 "commitmentDiscountRate": 0.0,
	 "creation": "2024-06-18",
	 "start": "2024-06-19",
	 "end": "2025-06-19",
	 "expirationDate": "2025-06-19",
	 "offer": "0.0",
	 "description": "",
	 "name": "sean-e2-commitment",
	 "accountIdentifier": "staging-rightsizing",
	 "commitmentType": "GENERAL_PURPOSE_E2",
	 "memory": 2048,
	 "vcpus": 2,
	 "selfLink": "https://www.googleapis.com/compute/beta/projects/staging-rightsizing/regions/us-central1/commitments/sean-e2-commitment",
	 "statusMessage": "The commitment is active, and so will apply to current resource usage.",
	 "duration": 0,
	 "orgId": 112844,
	 "service": "COMPUTE_ENGINE",
	 "reservationId": "4034804980905703051",
	 "commitmentCategory": "Resource"
	},
	],
	"aggregate": {
	"quantity": 13,
	"unrealizedSavings": 0,
	"hourlyCommitment": 0.127795,
       "totalCommitment": 95.079368,
	"netSavings": 171.847206,
	"overallUtilization": 0.610836,
	"effectiveSavingsRate": 0.000000,
	"coverage": 0.007172,
	"remainingCommitmentCost": 503.310000,
	"rcudCoverageAmount": 964.089371,
	"scudCoverageAmount": 133.920001,
	"commitmentCoverageAmount": 1098.009372,
	"commitmentEligibleCoverageCost": 4456.955846,
	"relevantSpendCommitmentCoverageCost": 5554.965218,
	"rcudExclusiveEligibleCoverageCost": 6866.890625,
	"relevantAllCommitmentCoverageCost": 12421.855843,
	"costsUncoverableByCommitments": 4539.347407,
	"totalServiceODCost": 16961.203250,
	"sudCredit": -2038.881740
	},
	"pagination": {
	"totalCount": 2
	}

The commitment-groups endpoint has SCUDs[] or CUDs[] according to commitment category whereas commitment endpoint has commitmentGroupDetails against each commitment. But commitmentGroupDetails does not re-populate scuds[] or cuds[] again for commitment endpoint.

The Google Cloud Platform(GCP) Commitment Groups Endpoint

The following api endpoint will provide a list of commitment groups and associated commitments in it.

The following curl will work with GET/ POST requests: GET with query parameters and POST with request body.

curl 'https://api.cloudability.com/v3/reservations/gcp/portfolio/commitment-groups' 
	 -H 'accept: application/json, text/plain, /' 
	 -H 'accept-language: en-US,en;q=0.9' 
	 -H 'authorization: Bearer [auth_token]' 
	 -H 'content-type: application/json' 
	 --data-raw '{"start":"2025-02-28","end":"2025-03-30","basis":"adjusted","filter":"commitment_category==spend","viewId":0,"limit":10,"offset":0,"sortOrder":"-netSavings","service":"scud-groups","services":"compute_engine"}'

The following table lists the valid payload options:

Payload Options

Valid Format

Details

start

Date in the format “YYYY-MM-DD"

 

end

Date in the format “YYYY-MM-DD"

 

basis

adjusted, cost

 

filter

 

Look how filters get formed in the developer toolbar.

sortOrder

A valid field e.g. billingAccountIdentifier for ALL, netsavings for other CUDs.

 
services

Comma separated string with values from

  • compute_engine

  • cloud_sql

Current supported services include “compute_engine” and “cloud_sql”.

For SCUDs, RCUDs or ALL commitments to be returned via the above endpoint, use the following in filters along with dates.

Commitments

Filter Values

Details

Flex CUDs Commitments

"commitment_category==spend"

When commitment category as spend is provided, the above endpoint should return Flex CUDs commitments only.

RCUDs Commitments

"commitment_category==resource"

When commitment category as resource is provided, the above endpoint should return Resource CUDs commitments only.
All Commitments No filter added When no commitment category is provided as filter, Flex CUDs and RCUDs are returned as response by merging the results of RCUD and SCUD commitments

Cloud SQL CUDs

"commitment_category==spend"

"commitment_category==spend" with services in payload should be “cloud_sql”

The Google Cloud Platform(GCP) Commitment Groups Endpoint Object

commitmentGroupId (string): The commitment group id for the group commitment belongs to.

billingAccountIdentifier (string): Billing Account Identifier in which commitment belong to.

term (integer): CUD term length in years.

region (string): Text description of the CUD's assigned region e.g. 'us-central'.

status (string): Current CUD status.

hourlyCommitmentAmount (string): Hourly commitment amount.

hourlyCommitmentCost (string): Hourly commitment cost that is being paid.

totalCommitmentAmount (string): Hourly commitment cost that is being paid.

totalCommitmentCost (string): Total commitment cost to be paid.

commitmentCostRemaining (string): Commitment remaining cost.

remainingCost (string): Remaining cost of the CUD to be paid.

commitmentDiscountRate (string): Commitment discount rate percentage / 100.

creation (string): The creation date of the CUD was requested

start (string): The start date of when the CUD began applying to usage

end (string): The CUD expiration date

expirationDate (string): The CUD expiration date

offer (string): CUD offer details if available.

description (string): Description of the CUD.

name (string): User assigned CUD name

accountIdentifier(string): User assigned account ID

memory (integer): MB of memory allocated (at 1024MB/GB)

vcpus (integer): vCPUs allocated to the CUD

duration (integer): Duration of the RI in seconds

statusMessage (string): Long form status description and explanation

type (string): Flex-CUD or CUD type of the CUD

commitmentGroupDetails (object): Commitment group details object {}

service: Service name CUD belongs to

reservationId/ commitmentId (string): Unique identifier of the CUD.

commitmentCategory (string): Commitment category, Spend or Resource.

Example Google Cloud Platform(GCP) Commitment Groups Endpoint Object

This is an example response for Commitment Groups for Flex CUDs.

{
  {
   "result": [
	{
	 "reservationId": "01E091-D83A6B-1F55DD:spend:COMPUTE_ENGINE:all-regions",
	 "commitmentGroupId": "01E091-D83A6B-1F55DD:spend:COMPUTE_ENGINE:all-regions",
	 "commitmentCategory": "Spend",
	 "region": "all-regions",
	 "quantity": 3,
	 "status": "Active",
	 "nextExpirationDate": "2025-01-04",
	 "netSavings": 0.000000,
	 "commitmentListDiscountRate": 0.290000,
	 "hourlyCommitmentAmount": 0.180000,
	 "hourlyCommitmentCost": 0.127800,
	 "totalCommitmentAmount": 133.920000,
	 "totalCommitmentCost": 95.083200,
	 "totalLifeTimeCommitmentCost": 1214.136000,
	 "totalLifeTimeCommitmentAmount": 1752.000000,
	 "scudGroupUtilization": 0.000000,
	 "remainingCost": 261.010000,
	 "accountIdentifier": "n/a",
	 "unrealizedSavings": 0.000000,
	 "nextExpiration": 0,
	 "vcpus": 0,
	 "memory": 0,
	 "predefinedOnDemandPrice": 0.0,
	 "customOnDemandPrice": 0.0,
	 "commit1YrPrice": 0.0,
	 "commit3YrPrice": 0.0,
	 "scudsMinStartDate": "2024-01-04",
	 "orgId": 108194,
	 "service": "COMPUTE_ENGINE",
	 "billingAccountIdentifier": "01E091-D83A6B-1F55DD",
	 "scuds": [
	{
	 "commitmentGroupId": "01E091-D83A6B-1F55DD:spend:COMPUTE_ENGINE:all-regions",
	 "billingAccountIdentifier": "01E091-D83A6B-1F55DD",
	 "term": 1,
	 "region": "n/a",
	 "status": "Active",
	 "hourlyCommitmentAmount": 0.12,
	 "hourlyCommitmentCost": 0.0864,
	 "totalCommitmentAmount": 89.28,
	 "totalCommitmentCost": 64.2816,
	 "totalLifeTimeCommitmentCost": 756.864000,
	 "totalLifeTimeCommitmentAmount": 1051.200000,
	 "commitmentCostRemaining": 111.97,
	 "remainingCost": 111.97,
	 "commitmentDiscountRate": 0.28,
	 "creation": "2024-01-04",
	 "start": "2024-01-04",
	 "end": "2025-01-04",
	 "expirationDate": "2025-01-04",
	 "offer": "services/compute.googleapis.com/standardOffers/ffe0f6a3-2f98-437e-8d49-fc443a05d3c2",
	 "description": "billingAccounts/01E091-D83A6B-1F55DD/orders/2b455b7d-d3d2-4696-a9bd-6d046776edcf",
	 "name": "James Smith requested Flex CUD",
	 "accountIdentifier": "n/a",
	 "memory": 0,
	 "vcpus": 0,
	 "duration": 0,
	 "type": "Compute Flex-CUD",
	 "orgId": 108194,
	 "service": "COMPUTE_ENGINE",
	 "reservationId": "2b455b7d-d3d2-4696-a9bd-6d046776edcf",
	 "commitmentCategory": "Spend"
	},
	{
	 "commitmentGroupId": "01E091-D83A6B-1F55DD:spend:COMPUTE_ENGINE:all-regions",
	 "billingAccountIdentifier": "01E091-D83A6B-1F55DD",
	 "term": 1,
	 "region": "n/a",
	 "status": "Active",
	 "hourlyCommitmentAmount": 0.05,
	 "hourlyCommitmentCost": 0.036,
	 "totalCommitmentAmount": 37.2,
	 "totalCommitmentCost": 26.784,
	 "totalLifeTimeCommitmentCost": 315.360000,
	 "totalLifeTimeCommitmentAmount": 438.000000,
	 "commitmentCostRemaining": 46.66,
	 "remainingCost": 46.66,
	 "commitmentDiscountRate": 0.28,
	 "creation": "2024-01-04",
	 "start": "2024-01-04",
	 "end": "2025-01-04",
	 "expirationDate": "2025-01-04",
	 "offer": "services/compute.googleapis.com/standardOffers/ffe0f6a3-2f98-437e-8d49-fc443a05d3c2",
	 "description": "billingAccounts/01E091-D83A6B-1F55DD/orders/e3e36abf-36c6-4ebf-adb1-295e570f09da",
	 "name": "James Smith requested Flex CUD",
	 "accountIdentifier": "n/a",
	 "memory": 0,
	 "vcpus": 0,
	 "duration": 0,
	 "type": "Compute Flex-CUD",
	 "orgId": 108194,
	 "service": "COMPUTE_ENGINE",
	 "reservationId": "e3e36abf-36c6-4ebf-adb1-295e570f09da",
	 "commitmentCategory": "Spend"
	},
	{
	 "commitmentGroupId": "01E091-D83A6B-1F55DD:spend:COMPUTE_ENGINE:all-regions",
	 "billingAccountIdentifier": "01E091-D83A6B-1F55DD",
	 "term": 3,
	 "region": "n/a",
	 "status": "Active",
	 "hourlyCommitmentAmount": 0.01,
	 "hourlyCommitmentCost": 0.0054,
	 "totalCommitmentAmount": 7.44,
	 "totalCommitmentCost": 4.0176,
	 "totalLifeTimeCommitmentCost": 141.912000,
	 "totalLifeTimeCommitmentAmount": 262.800000,
	 "commitmentCostRemaining": 102.38,
	 "remainingCost": 102.38,
	 "commitmentDiscountRate": 0.46,
	 "creation": "2024-01-10",
	 "start": "2024-01-10",
	 "end": "2027-01-10",
	 "expirationDate": "2027-01-10",
	 "offer": "services/compute.googleapis.com/standardOffers/062a285d-8989-4ce7-8f9a-bed8d183236f",
	 "description": "billingAccounts/01E091-D83A6B-1F55DD/orders/fda5efd3-ca2e-4c79-9dfd-2d16f1746bbe",
	 "name": "Blake Corum 3 year commitment",
	 "accountIdentifier": "n/a",
	 "memory": 0,
	 "vcpus": 0,
	 "duration": 0,
	 "type": "Compute Flex-CUD",
	 "orgId": 108194,
	 "service": "COMPUTE_ENGINE",
	 "reservationId": "fda5efd3-ca2e-4c79-9dfd-2d16f1746bbe",
	 "commitmentCategory": "Spend"
      }
      ]
      }
      ],
	 "aggregate": {
        "quantity": 3,
	 "unrealizedSavings": 0.000000,
	 "netSavings": 0.000000,
	 "overallUtilization": 0.000000,
	 "effectiveSavingsRate": 0.000000,
	 "coverage": 0.000000,
	 "remainingCommitmentCost": 261.010000,
	 "totalRemainingCost": 261.010000,
	 "rcudCoverageAmount": 0.000000,
	 "scudCoverageAmount": 0.000000,
	 "spendCoveredResourceEligibleCost": 98.234687,
	 "resourceCoveredSpendEligibleCost": 166.385452,
	 "totalCoveredAmount": 0.000000,
	 "spendTotalCoveredAmount": 166.385452,
	 "resourceTotalCoveredAmount": 98.234687,
	 "spendCommitmentEligibleCoverageCost": 1199.875958,
	 "resourceCommitmentEligibleCoverageCost": 2769.947700,
	 "relevantResourceCommitmentCoverageCost": 2868.182387,
	 "relevantSpendCommitmentCoverageCost": 1366.261410,
	 "rcudExclusiveEligibleCoverageCost": 1573.353773,
	 "scudExclusiveEligibleCoverageCost": 3.282031,
	 "relevantAllCommitmentCoverageCost": 2773.229731,
	 "costsUncoverableByCommitments": 1185.002169,
	 "totalServiceODCost": 3958.231900,
	 "sudCredit": -634.953422,
	 "commitmentEligibleCoverageCost": 2773.229731,
	 "nonExclusiveEligibleCost": 1196.593927
	}
	 "pagination": {
	 "totalCount": 1
	}
       }

The commitment-groups endpoint has SCUDs[] or CUDs[] according to commitment category whereas commitment endpoint has commitmentGroupDetails against each commitment. But commitmentGroupDetails does not re-populate scuds[] or cuds[] again for commitment endpoint.

The Azure Reserved Instance Object

vendorAccountId (string): Vendor assigned unique alphanumeric subscription identifier

reservationId (string): Vendor assigned unique alphanumeric reservation identifier

AccountName (string): User assigned subscription name

size (string): On demand instance family covered by the reservation(e.g.'DS1_v2')

tier (string): On demand instance tier covered by the reservation (e.g.'Standard')

term (integer): Reservation term length in years

quantity (integer): Number of instances covered by the reservation

region (string): Text description of the reservation's assigned region e.g. 'westus2'

state (string): Current reservation status

start (number): The Epoch millisecond formatted time stamp of when the CUD began applying to usage

end (number): The Epoch millisecond formatted CUD expiration time stamp

currencyCode (string): The currency reporting type for the reservation

upfront (integer): The up front reservation purchase price in the applicable currency

Example Azure Reservation Object

{
  "result": [
    {
      "vendorAccountId": "2####252-2##4-4##e-9##7-b95#########",
      "reservationId": "45####04-3X#2-4##7-b##6-35c##XX###X#",
      "accountName": "AZU Staging US",
      "size": "DS1_v2",
      "tier": "Standard",
      "term": 1,
      "quantity": 3,
      "region": "westus2",
      "state": "Cancelled",
      "start": 1560211200000,
      "end": 1560729600000,
      "pricing": {
        "currencyCode": "USD",
        "upfront": 810
      }
    },
    {
      "vendorAccountId": "c####d37-eecc-##d6-###b-######da36a6",
      "reservationId": "XX6d##d7-b034-4XX8-a8a0-3bcc###a####",
      "accountName": "Azure Prod",
      "size": "B1s",
      "tier": "Standard",
      "term": 1,
      "quantity": 1,
      "region": "westus2",
      "state": "Succeeded",
      "start": 1557446400000,
      "end": 1588896000000,
      "pricing": {
        "currencyCode": "USD",
        "upfront": 53
      }
    },
    {
      "vendorAccountId": "26e#####-2##4-434e-####-b95f#####fd#",
      "reservationId": "3d####f7-0X##-40b0-b###-82bd######a#",
      "accountName": "AZU Staging US",
      "size": "DS1_v2",
      "tier": "Standard",
      "term": 1,
      "quantity": 2,
      "region": "westus2",
      "state": "Succeeded",
      "start": 1560729600000,
      "end": 1591747200000,
      "pricing": {
        "currencyCode": "USD",
        "upfront": 540
      }
    },
  "meta": {
    "aggregate": {
      "quantity": 6
    },
    "pagination": {
      "totalCount": 3
    }
  }
}

Example Azure Reservation Portfolio Request

The following will generate a list of Azure Reserved Instances

curl "https://api.cloudability.com/v3/reservations/azure/portfolio/compute" \\
     -u ‘[auth_token]:’