Inventory
List EC2 instances#
GET /api/organizations/{organization_id}/inventory/ec2
Your EC2 on-demand instances.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. One of 33 values, like us-east-1. |
state | query | string, repeatable | Only the records in these states. One of pending, running, shutting-down, stopped, stopping, terminated. |
lifecycle | query | string, repeatable | Only the instances with these lifecycles. One of capacity-block, reserved, scheduled, spot, standard. |
outdated | query | boolean | Only previous-generation resources (true), or only current ones (false). |
Response
summary(object): Totals for the matching records.total(integer): How many records match.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
instances(array of objects): The matching instances.id(string): Unique EC2 instance identifier.type(string): EC2 instance type.region(string): AWS region where the instance is located. One of 33 values, likeus-east-1.platform(string): Operating system platform.launch_time(string): When the instance last started (ISO 8601); AWS resets it at each stop and start, so it is not the creation date.lifecycle(string): Instance lifecycle type. One ofcapacity-block,reserved,scheduled,spot,standard.monitoring(string): CloudWatch detailed monitoring status. One ofdisabled,disabling,enabled,pending.outdated(boolean): Whether the instance type belongs to a previous-generation family superseded by newer generations.managed_by(string): Management method. One ofautoscaling,ecs,eks,elasticbeanstalk,standalone.state(string): Current state of the instance. One ofpending,running,shutting-down,stopped,stopping,terminated.price(number): Cost of a full month (730 hours) at the on-demand list price, or the latest spot price for a spot instance. It ignores the state and the hours it ran, so a stopped instance still shows a full month.ri_coverage_percentage(number): How much of its usage Reserved Instances covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.sp_coverage_percentage(number): How much of its usage Savings Plans covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.tags(map of strings): Key-value pairs assigned to the instance.account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/ec2 \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 3,
"accounts": 1,
"regions": 2
},
"instances": [
{
"id": "i-acc1-001",
"type": "m5.large",
"region": "us-east-1",
"platform": "Linux/UNIX",
"launch_time": "2026-11-02T13:01:58.000Z",
"lifecycle": "standard",
"monitoring": "disabled",
"outdated": false,
"managed_by": "standalone",
"state": "running",
"price": 0.096,
"ri_coverage_percentage": 80,
"sp_coverage_percentage": 10,
"tags": {
"env": "prod",
"team": "platform"
},
"account_id": "123456789012"
},
{
"id": "i-acc1-002",
"type": "c5.large",
"region": "us-east-1",
"platform": "Linux/UNIX",
"launch_time": "2026-10-10T13:01:58.000Z",
"lifecycle": "spot",
"monitoring": "disabled",
"outdated": false,
"managed_by": "standalone",
"state": "running",
"price": 0.085,
"ri_coverage_percentage": 0,
"sp_coverage_percentage": 0,
"tags": {
"env": "prod"
},
"account_id": "123456789012"
}
]
}List RDS instances#
GET /api/organizations/{organization_id}/inventory/rds
Your RDS on-demand instances.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. One of 33 values, like us-east-1. |
Response
summary(object): Totals for the matching records.total(integer): How many records match.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
instances(array of objects): The matching instances.id(string): Unique RDS database instance identifier.type(string): RDS instance type.region(string): AWS region where the instance is located. One of 33 values, likeus-east-1.platform(string): Database engine type.platform_version(string): Database engine version.multi_az(boolean): Whether Multi-AZ deployment is enabled.aurora_io(boolean): Whether Aurora I/O-Optimized is enabled.launch_time(string): When the instance was created (ISO 8601).outdated(boolean): Whether the instance type is outdated.performance_insights_enabled(boolean): Whether Performance Insights is enabled.encrypted(boolean): Whether the database is encrypted.price(number): Price for a full month (730 hours) at the on-demand list rate; ignores the hours actually run.ri_coverage_percentage(number): How much of its usage Reserved Instances covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.sp_coverage_percentage(number): How much of its usage Savings Plans covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.tags(map of strings): Key-value pairs assigned to the instance.support_status(string): Version support: standard, extended (AWS charges for Extended Support, ESS), or unsupported (retired). One ofstandard,extended,unsupported.account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/rds \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 1,
"accounts": 1,
"regions": 1
},
"instances": [
{
"id": "orders-db",
"type": "db.r6g.large",
"region": "us-east-1",
"platform": "postgres",
"platform_version": "16.4",
"multi_az": false,
"aurora_io": false,
"launch_time": "2025-01-01T00:00:00.000Z",
"outdated": false,
"performance_insights_enabled": false,
"encrypted": false,
"price": 182.5,
"ri_coverage_percentage": 0,
"sp_coverage_percentage": 0,
"tags": {},
"support_status": "standard",
"account_id": "123456789012"
}
]
}List ElastiCache clusters#
GET /api/organizations/{organization_id}/inventory/elasticache
Your ElastiCache clusters.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. One of 33 values, like us-east-1. |
state | query | string, repeatable | Only the records in these states. |
Response
summary(object): Totals for the matching records.total(integer): How many records match.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
clusters(array of objects): The matching clusters.id(string): Unique ElastiCache cluster identifier.region(string): AWS region where the cluster is located. One of 33 values, likeus-east-1.type(string): Cache node instance type.platform(string): Cache engine type.nodes_count(number): Number of cache nodes in the cluster.launch_time(string): When the cluster was created (ISO 8601).transit_encryption_enabled(boolean): Whether transit encryption is enabled.at_rest_encryption_enabled(boolean): Whether at-rest encryption is enabled.state(string): Current state of the cluster.outdated(boolean): Whether the instance type is outdated.price(number): Price for a full month (730 hours) at the on-demand list rate, for all nodes; ignores the hours actually run.ri_coverage_percentage(number): How much of its usage Reserved Instances covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.sp_coverage_percentage(number): How much of its usage Savings Plans covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.tags(map of strings): Key-value pairs assigned to the cluster.account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/elasticache \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 1,
"accounts": 1,
"regions": 1
},
"clusters": [
{
"id": "sessions-001",
"region": "us-east-1",
"type": "cache.r6g.large",
"platform": "redis",
"nodes_count": 1,
"launch_time": "2025-01-01T00:00:00.000Z",
"transit_encryption_enabled": true,
"at_rest_encryption_enabled": true,
"state": "available",
"outdated": false,
"price": 149.65,
"ri_coverage_percentage": 0,
"sp_coverage_percentage": 0,
"tags": {},
"account_id": "123456789012"
}
]
}List OpenSearch domains#
GET /api/organizations/{organization_id}/inventory/opensearch
Your OpenSearch domains.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. One of 33 values, like us-east-1. |
Response
summary(object): Totals for the matching records.total(integer): How many records match.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
clusters(array of objects): The matching clusters.id(string): Unique cluster identifier in format account_id/domain_name.region(string): AWS region where the cluster is located. One of 33 values, likeus-east-1.data_nodes_type(string): Instance type for data nodes.data_nodes_count(number): Number of data nodes in the cluster.master_nodes_type(string): Instance type for dedicated master nodes.master_nodes_count(number): Number of dedicated master nodes.warm_nodes_type(string): Instance type for warm storage nodes, or "N/A" if not used.warm_nodes_count(number): Number of warm storage nodes in the cluster.platform(string): Search engine platform (e.g., Elasticsearch, OpenSearch).platform_version(string): Search engine version (e.g., 2.13).at_rest_encryption_enabled(boolean): Whether at-rest encryption is enabled.node_to_node_encryption_enabled(boolean): Whether node-to-node encryption is enabled.multi_az(boolean): Whether Multi-AZ deployment is enabled.price(number): Price for a full month (730 hours) at the on-demand list rate, for all data, master and warm nodes; ignores the hours actually run.ri_coverage_percentage(number): How much of its usage Reserved Instances covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.sp_coverage_percentage(number): How much of its usage Savings Plans covered so far this month, from 0 to 100. AWS reports coverage about 2 days late, so 0 can also mean it has not reported yet.tags(map of strings): Key-value pairs assigned to the domain.support_status(string): Version support: standard, extended (AWS charges for Extended Support, ESS), or unsupported (retired). One ofstandard,extended,unsupported.account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/opensearch \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 1,
"accounts": 1,
"regions": 1
},
"clusters": [
{
"id": "123456789012/acc1-domain",
"region": "us-east-1",
"data_nodes_type": "r6g.large.search",
"data_nodes_count": 2,
"master_nodes_type": "N/A",
"master_nodes_count": 0,
"warm_nodes_type": "N/A",
"warm_nodes_count": 0,
"platform": "OpenSearch",
"platform_version": "2.13",
"at_rest_encryption_enabled": true,
"node_to_node_encryption_enabled": true,
"multi_az": false,
"price": 100,
"ri_coverage_percentage": 0,
"sp_coverage_percentage": 0,
"tags": {},
"support_status": "standard",
"account_id": "123456789012"
}
]
}List OpenSearch nodes#
GET /api/organizations/{organization_id}/inventory/opensearch/nodes
The nodes of your OpenSearch domains, each with its cluster_id.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. |
state | query | string, repeatable | Only the records in these states. |
role | query | string, repeatable | Only the nodes with these roles. |
cluster | query | string, repeatable | Only the records of these clusters, by cluster ID. |
Response
summary(object): Totals for the matching records.total(integer): How many records match.clusters(integer): How many clusters they span.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
nodes(array of objects): The matching nodes.id(string): Node identifier.role(string): Node role: data, master, or ultrawarm.availability_zone(string): Availability zone that holds the node.type(string): Instance type of the node, for example r6g.large.search.status(string): Node status: active, standby, or notavailable.storage_type(string): Storage backing: instance or ebs.storage_volume_type(string): EBS volume type, empty for instance storage.storage_size(string): Storage size attached to the node.price(number): Estimated monthly cost of this node.cluster_id(string): The ID of the cluster it belongs to.account_id(string): The 12-digit ID of the AWS account it belongs to.region(string): The region of the cluster it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/opensearch/nodes \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 2,
"clusters": 1,
"accounts": 1,
"regions": 1
},
"nodes": [
{
"id": "acc1-domain/node-1",
"role": "data",
"availability_zone": "us-east-1a",
"type": "r6g.large.search",
"status": "active",
"storage_type": "ebs",
"storage_volume_type": "gp3",
"storage_size": "100",
"price": 50,
"cluster_id": "123456789012/acc1-domain",
"account_id": "123456789012",
"region": "us-east-1"
},
{
"id": "acc1-domain/node-2",
"role": "data",
"availability_zone": "us-east-1b",
"type": "r6g.large.search",
"status": "active",
"storage_type": "ebs",
"storage_volume_type": "gp3",
"storage_size": "100",
"price": 50,
"cluster_id": "123456789012/acc1-domain",
"account_id": "123456789012",
"region": "us-east-1"
}
]
}List EKS clusters#
GET /api/organizations/{organization_id}/inventory/eks
Your EKS clusters.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. One of 33 values, like us-east-1. |
state | query | string, repeatable | Only the records in these states. |
Response
summary(object): Totals for the matching records.total(integer): How many records match.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
clusters(array of objects): The matching clusters.id(string): Cluster name.arn(string): AWS Amazon Resource Name (ARN) for the cluster.region(string): AWS region where the cluster is located. One of 33 values, likeus-east-1.version(string): Kubernetes version running on the cluster.platform_version(string): EKS platform version.status(string): Current status of the cluster.endpoint(string): Kubernetes API server endpoint.price(number): Estimated monthly control plane cost.created_at(string): When the cluster was created (ISO 8601).tags(map of strings): Key-value pairs assigned to the cluster.support_status(string): Version support: standard, extended (AWS charges for Extended Support, ESS), or unsupported (retired). One ofstandard,extended,unsupported.node_groups(array of objects)id(string): Node group name.arn(string): AWS Amazon Resource Name (ARN) for the node group.region(string): AWS region where the node group is located. One of 33 values, likeus-east-1.version(string): Kubernetes version running on the node group.status(string): Current status of the node group.capacity_type(string): Capacity type (ON_DEMAND, SPOT, CAPACITY_BLOCK).ami_type(string): AMI type used by the node group.instance_types(array of strings): EC2 instance types configured for the node group.disk_size(number): Disk size in GiB for worker nodes.scaling_min(number): Minimum number of nodes.scaling_max(number): Maximum number of nodes.scaling_desired(number): Desired number of nodes.labels(map of strings): Kubernetes labels assigned to nodes.auto_scaling_group_names(array of strings): Auto Scaling groups EKS built for this node group.outdated(boolean): True when at least one type in instance_types is previous-generation; the other types can be current.price(number): Estimated monthly cost.created_at(string): When the node group was created (ISO 8601).tags(map of strings): Key-value pairs assigned to the node group.
account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/eks \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 1,
"accounts": 1,
"regions": 1
},
"clusters": [
{
"id": "production",
"arn": "arn:aws:eks:us-east-1:123456789012:cluster/production",
"region": "us-east-1",
"version": "1.31",
"platform_version": "eks.5",
"status": "ACTIVE",
"endpoint": "https://production",
"price": 1,
"created_at": "2025-01-01T00:00:00.000Z",
"tags": {},
"support_status": "standard",
"node_groups": [
{
"id": "general",
"arn": "arn:aws:eks:us-east-1:123456789012:nodegroup/c/general/uuid",
"region": "us-east-1",
"version": "1.28",
"status": "ACTIVE",
"capacity_type": "ON_DEMAND",
"ami_type": "AL2023_x86_64_STANDARD",
"instance_types": [
"m6g.xlarge"
],
"disk_size": 20,
"scaling_min": 1,
"scaling_max": 3,
"scaling_desired": 2,
"labels": {},
"auto_scaling_group_names": [
"eks-general"
],
"outdated": false,
"price": 245.28,
"created_at": "2026-08-11T13:01:59.000Z",
"tags": {}
}
],
"account_id": "123456789012"
}
]
}List EKS node groups#
GET /api/organizations/{organization_id}/inventory/eks/nodegroups
The node groups of your EKS clusters, each with its cluster_id.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. One of 33 values, like us-east-1. |
state | query | string, repeatable | Only the records in these states. |
capacity | query | string, repeatable | Only the node groups with these capacity types. |
cluster | query | string, repeatable | Only the records of these clusters, by cluster ID. |
outdated | query | boolean | Only previous-generation resources (true), or only current ones (false). |
Response
summary(object): Totals for the matching records.total(integer): How many records match.clusters(integer): How many clusters they span.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
node_groups(array of objects): The matching node groups.id(string): Node group name.arn(string): AWS Amazon Resource Name (ARN) for the node group.region(string): The region of the cluster it belongs to.version(string): Kubernetes version running on the node group.status(string): Current status of the node group.capacity_type(string): Capacity type (ON_DEMAND, SPOT, CAPACITY_BLOCK).ami_type(string): AMI type used by the node group.instance_types(array of strings): EC2 instance types configured for the node group.disk_size(number): Disk size in GiB for worker nodes.scaling_min(number): Minimum number of nodes.scaling_max(number): Maximum number of nodes.scaling_desired(number): Desired number of nodes.labels(map of strings): Kubernetes labels assigned to nodes.auto_scaling_group_names(array of strings): Auto Scaling groups EKS built for this node group.outdated(boolean): True when at least one type in instance_types is previous-generation; the other types can be current.price(number): Estimated monthly cost.created_at(string): When the node group was created (ISO 8601).tags(map of strings): Key-value pairs assigned to the node group.cluster_id(string): The ID of the cluster it belongs to.account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/eks/nodegroups \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 1,
"clusters": 1,
"accounts": 1,
"regions": 1
},
"node_groups": [
{
"id": "general",
"arn": "arn:aws:eks:us-east-1:123456789012:nodegroup/c/general/uuid",
"region": "us-east-1",
"version": "1.28",
"status": "ACTIVE",
"capacity_type": "ON_DEMAND",
"ami_type": "AL2023_x86_64_STANDARD",
"instance_types": [
"m6g.xlarge"
],
"disk_size": 20,
"scaling_min": 1,
"scaling_max": 3,
"scaling_desired": 2,
"labels": {},
"auto_scaling_group_names": [
"eks-general"
],
"outdated": false,
"price": 245.28,
"created_at": "2026-08-11T13:01:59.000Z",
"tags": {},
"cluster_id": "production",
"account_id": "123456789012"
}
]
}List EBS volumes#
GET /api/organizations/{organization_id}/inventory/ebs
Your EBS volumes.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. One of 98 values, like af-south-1. |
state | query | string, repeatable | Only the records in these states. One of available, creating, deleted, deleting, error, in-use. |
Response
summary(object): Totals for the matching records.total(integer): How many records match.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
volumes(array of objects): The matching volumes.id(string): Unique EBS volume identifier.type(string): Volume type. One ofgp2,gp3,io1,io2,sc1,st1,standard.region(string): AWS region where the volume is located. One of 98 values, likeaf-south-1.size(number): Volume size in gigabytes (GB).encrypted(boolean): Whether the volume is encrypted.state(string): Current state of the volume. One ofavailable,creating,deleted,deleting,error,in-use.launch_time(string): When the volume was created (ISO 8601).iops(number): Provisioned IOPS (Input/Output Operations Per Second).throughput(number): Throughput performance in MB/s.outdated(boolean): Whether the volume type is outdated and upgradable.price(number): Monthly cost of the volume.tags(map of strings): Key-value pairs assigned to the volume.account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/ebs \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 1,
"accounts": 1,
"regions": 1
},
"volumes": [
{
"id": "vol-0a1b2c3d4e5f67890",
"type": "gp3",
"region": "us-east-1",
"size": 200,
"encrypted": false,
"state": "in-use",
"launch_time": "2025-01-01T00:00:00.000Z",
"iops": 3000,
"throughput": 125,
"outdated": false,
"price": 16,
"tags": {},
"account_id": "123456789012"
}
]
}List S3 buckets#
GET /api/organizations/{organization_id}/inventory/s3
Your S3 buckets.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string, repeatable | Only the records in these AWS accounts, by 12-digit account ID. |
region | query | string, repeatable | Only the records in these regions. |
Response
summary(object): Totals for the matching records.total(integer): How many records match.accounts(integer): How many accounts they span.regions(integer): How many regions they span.
buckets(array of objects): The matching buckets.name(string): Globally unique bucket name.region(string): AWS region the bucket resides in.creation_date(string): When the bucket was created.versioning_enabled(boolean): Whether object versioning is enabled.encryption(string or null): Default server-side encryption algorithm, or null when unencrypted.tags(map of strings): Bucket tags.lifecycle_rules(array of objects)id(string or null): Rule identifier.status(string): 'Enabled' or 'Disabled'.prefix(string or null): Object key prefix the rule applies to.current_version_expiration_days(number or null): Days after which the current object version expires.current_version_expiration_date(string or null): Date on which the current object version expires.previous_versions_expiration_days(number or null): Days after which superseded (noncurrent) versions are permanently deleted.transitions(array of objects)storage_class(string or null): Destination storage class.days(number or null): Days after object creation before transitioning.date(string or null): Absolute date on which to transition.
previous_versions_transitions(array of objects)storage_class(string or null): Destination storage class.days(number or null): Days after object creation before transitioning.date(string or null): Absolute date on which to transition.
account_id(string): The 12-digit ID of the AWS account it belongs to.
Errors: 401, 403, 404, 422, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/s3 \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"summary": {
"total": 1,
"accounts": 1,
"regions": 1
},
"buckets": [
{
"name": "acme-app-assets",
"region": "us-east-1",
"creation_date": "2024-01-01T00:00:00.000Z",
"versioning_enabled": true,
"encryption": "AES256",
"tags": {},
"lifecycle_rules": [],
"account_id": "123456789012"
}
]
}Get CPU utilization#
GET /api/organizations/{organization_id}/inventory/metrics/cpu_utilization
One resource's average CPU utilization for each hour, from the start of the month two months ago.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
account | query | string | The resource's AWS account ID. Required. |
region | query | string | The resource's region. Required. |
namespace | query | string | The CloudWatch namespace of the resource. Required. One of AWS/EC2, AWS/RDS, AWS/ElastiCache. |
resource | query | string | The resource's id, as its inventory endpoint returns it. Required. |
Response
datapoints(array of objects): The matching datapoints.timestamp(string (date-time)): The start of the hour.value(number): The average CPU utilization in that hour, from 0 to 100.
Errors: 401, 403, 404, 422, 429. See errors.
curl -G https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/inventory/metrics/cpu_utilization \
-H "Authorization: Bearer $MILKSTRAW_API_KEY" \
-d account=123456789012 \
-d region=us-east-1 \
-d namespace=AWS/EC2 \
-d resource=i-0a1b2c3d4e5f67890{
"datapoints": [
{
"timestamp": "2026-11-09T10:00:00Z",
"value": 21.5
},
{
"timestamp": "2026-11-09T11:00:00Z",
"value": 34
}
]
}