Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions endpoints.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* [nebius.billing.v1alpha1.OneTimeExportService](nebius/billing/v1alpha1/one_time_export_service.proto)
* [nebius.common.v1.OperationService](nebius/common/v1/operation_service.proto)
* api.calculator.billing-data-plane.api.nebius.cloud:443
* [nebius.billing.v1.CalculatorService](nebius/billing/v1/calculator_service.proto)
* [nebius.billing.v1alpha1.CalculatorService](nebius/billing/v1alpha1/calculator_service.proto)
* apps.msp.api.nebius.cloud:443
* [nebius.ai.v1.EndpointService](nebius/ai/v1/endpoint_service.proto)
Expand Down
16 changes: 16 additions & 0 deletions nebius/audit/v2/audit_event_export_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,15 @@ message StartRequest {

// Specification for the new export.
AuditEventExportSpec spec = 2;

// Region to retrieve audit logs (e.g. eu-north2, us-central1, eu-west1)
// See https://docs.nebius.com/overview/regions
// Default: eu-north1
//
// During a transition period (until 13-08-2026), events are written to
// both eu-north1 and their origin region.
// After that, events are only stored in their origin region, and this field becomes required.
string region = 3;
}

message CancelRequest {
Expand All @@ -57,6 +66,13 @@ message ListRequest {

// Token for pagination, allowing the retrieval of the next set of results.
string page_token = 3;

// Region to retrieve audit exports (e.g. eu-north2, us-central1, eu-west1)
// See https://docs.nebius.com/overview/regions
// Default: eu-north1
//
// After a transition period (13-08-2026) this field becomes required.
string region = 4;
}

message ListAuditEventExportResponse {
Expand Down
9 changes: 9 additions & 0 deletions nebius/audit/v2/audit_event_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ message ListAuditEventRequest {

// Type of audit event to filter by.
EventType event_type = 7;

// Region to retrieve audit logs (e.g. eu-north2, us-central1, eu-west1)
// See https://docs.nebius.com/overview/regions
// Default: eu-north1
//
// During a transition period (until 13-08-2026), events are written to
// both eu-north1 and their origin region.
// After that, events are only stored in their origin region, and this field becomes required.
string region = 8;
}

enum EventType {
Expand Down
206 changes: 206 additions & 0 deletions nebius/billing/v1/calculator.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
syntax = "proto3";

package nebius.billing.v1;

import "google/protobuf/any.proto";
import "nebius/common/v1/metadata.proto";

option go_package = "github.com/nebius/gosdk/proto/nebius/billing/v1";
option java_multiple_files = true;
option java_outer_classname = "CalculatorProto";
option java_package = "ai.nebius.pub.billing.v1";

// Resource specification for cost estimation.
// Contains the specifications for creating and updating different types of resources.
message ResourceSpec {
// Resource specification for cost estimation. Payload must include billing routing annotations. Must contain
// either a create-request or an update-request message for the target resource type. Examples:
// type.googleapis.com/nebius.compute.v1.CreateInstanceRequest, type.googleapis.com/nebius.compute.v1.UpdateInstanceRequest and so on
google.protobuf.Any spec = 1;
}

// General total cost with a single fixed amount.
// Used for resources with predictable, non-variable pricing.
message GeneralTotalCost {
// Cost breakdown including all SKUs and their individual costs.
CostBreakdown total = 1;
}

// Range-based total cost with minimum and maximum bounds.
// Used for resources with variable pricing based on usage or scaling.
message RangeTotalCost {
// Minimum possible cost for the resource group.
// Represents the cost when resources are at their minimum configuration.
CostBreakdown min = 1;

// Maximum possible cost for the resource group.
// Represents the cost when resources are at their maximum configuration.
CostBreakdown max = 2;
}

// Cost information for a single resource.
// Contains metadata about the resource and its cost.
message ResourceCost {
// Resource metadata.
common.v1.ResourceMetadata metadata = 1;

// Optional field to override the resource metadata.
common.v1.ResourceMetadata override_metadata = 2;

// Unit of the SKU measurement within a resource, e.g. "hour", "day", "month", etc.
AggregationUnit aggregation_unit = 4;

oneof cost_type {
// General cost for single-unit resources.
// Used for resources like compute instances or disks where the unit count is not variable.
GeneralResourceCost general = 20;

// Fixed instance cost for resources with instances.
// Used for resources that have a fixed number of instances.
FixedInstanceResourceCost fixed_instance = 21;

// Autoscale cost for resources with variable instance count.
// Used for resources that can automatically scale up or down.
AutoscaleResourceCost autoscale = 22;
}
}

// General resource cost for single-unit resources.
// Used for resources like compute instances or disks where the unit count is not variable.
message GeneralResourceCost {
// Cost breakdown for the resource including all SKU costs and total cost.
CostBreakdown total = 1;
}

// Fixed instance resource cost.
// Used for resources that have a fixed number of instances.
message FixedInstanceResourceCost {
// Total cost for all instances combined.
CostBreakdown total = 1;

// Cost per individual instance.
// Multiply by instance_count to get total cost.
CostBreakdown per_instance = 2;

// Number of instances in the configuration.
int32 instance_count = 3;
}

// Autoscale resource cost.
// Used for resources that can automatically scale.
message AutoscaleResourceCost {
// Minimum possible cost when scaled to minimum instances.
CostBreakdown min_cost = 1;

// Maximum possible cost when scaled to maximum instances.
CostBreakdown max_cost = 2;

// Cost per individual instance.
// Used to calculate costs at any scaling level between min and max.
CostBreakdown per_instance = 3;

// Minimum number of instances in the auto-scaling group.
int32 min_instances = 4;

// Maximum number of instances in the auto-scaling group.
int32 max_instances = 5;
}

// Detailed cost breakdown showing individual SKU costs and totals.
message CostBreakdown {
// Individual costs for each SKU (Stock Keeping Unit) component.
// Each SKU represents a different billable component (e.g., CPU, memory, RAM, etc.).
repeated SkuCost sku_costs = 1;

// Total cost as a decimal string.
// Represents the sum of all SKU costs with full precision.
// Example: "42.123456789" for precise billing calculations.
string cost = 2;

// Total cost rounded up to 2 decimal places.
// Example: "42.13"
string cost_rounded = 3;
}

// Cost information for a specific SKU (Stock Keeping Unit).
// Represents a single billable component within a resource.
message SkuCost {
// Unique identifier for the SKU.
string sku_id = 1;

// Quantity of the SKU being used as a decimal string.
// Example: "2.123"
string quantity = 20;

// Quantity rounded up to 2 decimal places.
// Example: "2.13"
string quantity_rounded = 21;

// Cost for this SKU as a decimal string.
// Calculated as quantity * unit_price with full precision.
// Example: "15.6789012345" for precise billing calculations.
string cost = 30;

// Cost for this SKU rounded up to 2 decimal places.
// Example: "15.68"
string cost_rounded = 31;
}

// Total cost for a single resource unit.
message TotalCost {
// Aggregation unit.
AggregationUnit aggregation_unit = 1;

oneof cost_type {
// General total cost for single-unit resources.
// Used for resources like compute instances or disks where the unit count is not variable.
GeneralResourceCost general = 20;

// Range-based total cost with minimum and maximum bounds.
// Used for resources with variable pricing based on usage or scaling.
RangeTotalCost range = 21;
}
}

// Filters only time-based aggregation units, e.g. hour, day, month, etc.
// If response contains other aggregation units like request, token, etc., it will always be presented in response.
message FilterAggregationUnit {
// List of time aggregation unit values to filter by.
// Only costs for these time units will be included in the response, but it doesn't filter not time-based units.
enum FilterAggregationUnitValue {
FILTER_AGGREGATION_UNIT_UNSPECIFIED = 0;

FILTER_AGGREGATION_UNIT_MINUTE = 1;

FILTER_AGGREGATION_UNIT_HOUR = 2;

FILTER_AGGREGATION_UNIT_DAY = 3;

FILTER_AGGREGATION_UNIT_WEEK = 4;

FILTER_AGGREGATION_UNIT_MONTH = 5;
}

// List of time aggregation unit values to filter by.
// Only costs for these time units will be included in the response, but it doesn't filter not time-based units.
repeated FilterAggregationUnitValue filter_aggregation_unit_values = 1;
}

message AggregationUnit {
// Aggregation unit type
// If unit type is one of minute, hour, day, week, month, then it's time-based
// Otherwise it's usage-based
enum UnitType {
UNIT_TYPE_UNSPECIFIED = 0;

UNIT_TYPE_TIME_BASED = 1;

UNIT_TYPE_USAGE_BASED = 2;
}

// Resource unit value.
string unit = 1;

// Resource unit type.
UnitType unit_type = 2;
}
48 changes: 48 additions & 0 deletions nebius/billing/v1/calculator_service.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
syntax = "proto3";

package nebius.billing.v1;

import "buf/validate/validate.proto";
import "nebius/annotations.proto";
import "nebius/billing/v1/calculator.proto";
import "nebius/billing/v1/offer_type.proto";

option go_package = "github.com/nebius/gosdk/proto/nebius/billing/v1";
option java_multiple_files = true;
option java_outer_classname = "CalculatorServiceProto";
option java_package = "ai.nebius.pub.billing.v1";

// Calculator service for estimating resource costs.
service CalculatorService {
option (api_service_name) = "api.calculator.billing-data-plane";

// Estimates prices for multiple resources.
// Returns aggregated hourly and monthly cost estimates for all specified resources.
rpc EstimateBatch(EstimateBatchRequest) returns (EstimateBatchResponse);
}

message EstimateBatchRequest {
// List of resource specifications for cost estimation.
// Each resource will be priced individually and then aggregated into total costs.
repeated ResourceSpec resource_specs = 1 [(buf.validate.field).required = true];

// Type of offers to be applied to the cost estimate.
repeated OfferType offer_types = 10;

// Currency for the cost estimate (e.g., "usd", "ils"). Defaults to "usd".
string currency = 11;

// Filters only time-based resource units, e.g. hour, day, month, etc.
// If response contains other resource units like request, token, etc., it will always be presented in response.
FilterAggregationUnit filter_aggregation_unit = 20;
}

message EstimateBatchResponse {
repeated ResourceCost resource_costs = 1;

// Total cost for all resource units.
repeated TotalCost total_costs = 10;

// Currency used for the estimate.
string currency = 20;
}
16 changes: 16 additions & 0 deletions nebius/billing/v1/offer_type.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
syntax = "proto3";

package nebius.billing.v1;

option go_package = "github.com/nebius/gosdk/proto/nebius/billing/v1";
option java_multiple_files = true;
option java_outer_classname = "OfferTypeProto";
option java_package = "ai.nebius.pub.billing.v1";

// OfferType is a enum that specifies the type of offer.
enum OfferType {
OFFER_TYPE_UNSPECIFIED = 0;

// Contract price is a special price for SKU.
OFFER_TYPE_CONTRACT_PRICE = 1;
}
6 changes: 6 additions & 0 deletions nebius/compute/v1/disk.proto
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,12 @@ message DiskStatus {

// Indicates resources that prevent the disk from being attached as read-write.
LockState lock_state = 11;

// Indicates whether the disk is deleted along with an instance.
// Set only for disks declared in the instance spec.
// If set, the value is the instance ID that manages this disk's lifecycle (the disk is deleted when that instance is deleted).
// To change this value, update the instance specification (see AttachedDiskSpec.type).
string managed_by = 12;
}

message DiskEncryption {
Expand Down
12 changes: 12 additions & 0 deletions nebius/mk8s/v1/node_group.proto
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,18 @@ message NodeTemplate {
// local_disks enables the provisioning of fast local drives.
// This type of storage is strictly ephemeral: on node restart, all data is erased, similar to RAM.
LocalDisksSpec local_disks = 19;

// The maximum number of Pods per node for your cluster. If omitted, MK8S assigns the default value of 110. When you
// configure the maximum number of Pods per node for the cluster, MK8S uses this value to allocate a CIDR range for every node
// in group. The node CIDR prefix is calculated as `32 - ceil(log2(2 * max_pods))`, i.e. the smallest IPv4 subnet whose total address
// count is at least `2 * max_pods`. Not all IPs are usable for workload Pods because some of them are consumed by system Pods.
int64 max_pods = 20 [(buf.validate.field) = {
int64: {
lte: 256
gte: 8
}
ignore: IGNORE_IF_ZERO_VALUE
}];
}

message NodeMetadataTemplate {
Expand Down