{ "openapi": "3.0.1", "info": { "title": "CostGraph Pricing API", "description": "Provides API level access to the Costgraph Services.", "termsOfService": "https://costgraph.baselinehq.cloud/terms-of-use", "contact": { "name": "Customer Support", "url": "https://costgraph.baselinehq.cloud/support", "email": "contact@baselinehq.cloud" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "1.0" }, "servers": [ { "url": "https://pricing.baselinehq.cloud/" } ], "paths": { "/marketplace/providers/compute": { "get": { "summary": "Get your custom pricing entries", "description": "Get your custom pricing entries", "responses": { "200": { "description": "Pricing response for custom pricing", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.MarketplaceProvidersResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] }, "post": { "summary": "Register a custom provider", "description": "Register a custom provider", "requestBody": { "description": "Custom pricing request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.CustomPriceRequest" } } }, "required": true }, "responses": { "200": { "description": "Pricing response for a custom provider", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.CustomPricingResponse" } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Provider and organization do not match", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" }, "delete": { "summary": "Delete a custom provider instance", "description": "Delete a custom provider instance", "parameters": [ { "name": "id", "in": "query", "description": "Instance ID", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pricing response for a custom provider", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.CustomPricingResponse" } } } }, "400": { "description": "Invalid id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Provider and organization do not match", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Instance not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/marketplace/providers/disks": { "get": { "summary": "Get your custom disk pricing entries", "description": "Get your custom disk pricing entries", "responses": { "200": { "description": "Pricing response for custom disk pricing", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.MarketplaceDiskProvidersResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] }, "post": { "summary": "Register a custom disk provider", "description": "Register a custom disk provider", "requestBody": { "description": "Custom disk pricing request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.CustomDiskPriceRequest" } } }, "required": true }, "responses": { "200": { "description": "Pricing response for a custom disk provider", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.CustomDiskPricingResponse" } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Provider and organization do not match", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" }, "delete": { "summary": "Delete a custom disk provider entry", "description": "Delete a custom disk provider entry", "parameters": [ { "name": "id", "in": "query", "description": "Disk pricing ID", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pricing response for a custom disk provider", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.CustomDiskPricingResponse" } } } }, "400": { "description": "Invalid id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Provider and organization do not match", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Disk pricing entry not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/pricing": { "post": { "summary": "Get pricing for an instance", "description": "Get pricing for compute instances", "requestBody": { "description": "Instance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Instance" } } }, "required": true }, "responses": { "200": { "description": "Pricing for a given instance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/schema.ComputePricingsRow" } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Pricing not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" } }, "/pricing/compute": { "post": { "summary": "Get pricing for an instance", "description": "Get pricing for compute instances", "requestBody": { "description": "Instance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Instance" } } }, "required": true }, "responses": { "200": { "description": "Pricing for a given instance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/schema.ComputePricingsRow" } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Pricing not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" } }, "/pricing/disks": { "post": { "summary": "Get pricing for a disk", "description": "Get pricing for a disk", "requestBody": { "description": "Disk", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.Disk" } } }, "required": true }, "responses": { "200": { "description": "Pricing for a given disk", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/schema.DiskPricingsRow" } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Pricing not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" } }, "/providers": { "get": { "summary": "Get details for the providers", "description": "Get details for the providers", "responses": { "200": { "description": "List of providers", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/provider.Configs" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/recommendations": { "post": { "summary": "Get recommendations for compute instances", "description": "Get the cheapest compute candidate per provider with savings versus the requested instance", "requestBody": { "description": "Instance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.ComputeRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/recommendations.ComputeRecommendationResult" } } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" } }, "/recommendations/compute": { "post": { "summary": "Get recommendations for compute instances", "description": "Get the cheapest compute candidate per provider with savings versus the requested instance", "requestBody": { "description": "Instance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.ComputeRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/recommendations.ComputeRecommendationResult" } } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" } }, "/recommendations/disks": { "post": { "summary": "Get recommendations for disks", "description": "Get the cheapest disk candidate per provider with savings versus the requested disk", "requestBody": { "description": "Instance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/types.DiskRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/recommendations.DiskRecommendationResult" } } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/handler.ErrorResponse" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "x-codegen-request-body-name": "instance" } } }, "components": { "schemas": { "github_com_baselinehq_golang-shared_types.Instance": { "type": "object", "properties": { "availability_zone": { "type": "string" }, "fallback_to_base_pricing": { "type": "boolean" }, "id": { "type": "string" }, "instance_type": { "type": "string" }, "operating_system": { "type": "string" }, "provider": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Provider" }, "region": { "type": "string" }, "service": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Service" }, "usage_type": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.UsageType" }, "vm": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.VM" } } }, "github_com_baselinehq_golang-shared_types.Provider": { "type": "string", "enum": [ "GCP", "AWS", "DigitalOcean", "Azure", "Hetzner", "OVHCloud", "Base" ], "x-enum-comments": { "Base": "Base provider for default pricing, no specific cloud provider" }, "x-enum-descriptions": [ "", "", "", "", "", "", "Base provider for default pricing, no specific cloud provider" ], "x-enum-varnames": [ "GCP", "AWS", "DigitalOcean", "Azure", "Hetzner", "OVHCloud", "Base" ] }, "github_com_baselinehq_golang-shared_types.Service": { "type": "string", "enum": [ "ComputeEngine", "AmazonEC2", "Droplet", "AzureCompute", "AzureManagedDisks", "HetznerCompute", "OVHPublicCloud", "BaseCompute", "BaseDisks", "AmazonEBS", "ComputeEnginePersistentDisk" ], "x-enum-varnames": [ "ComputeEngine", "AmazonEC2", "Droplet", "AzureCompute", "AzureManagedDisks", "HetznerCompute", "OVHPublicCloud", "BaseCompute", "BaseDisks", "AmazonEBS", "ComputeEnginePersistentDisk" ] }, "github_com_baselinehq_golang-shared_types.UsageType": { "type": "string", "enum": [ "SPOT_PREEMPTIBLE", "ONDEMAND", "RESERVED", "ONDEMAND_CUSTOM", "SPOT_PREEMPTIBLE_CUSTOM", "RESERVED_CUSTOM", "SOLE_TENANCY", "CUSTOM", "EXTENDED" ], "x-enum-varnames": [ "SPOT_PREEMPTIBLE", "ONDEMAND", "RESERVED", "ONDEMAND_CUSTOM", "SPOT_PREEMPTIBLE_CUSTOM", "RESERVED_CUSTOM", "SOLE_TENANCY", "CUSTOM", "EXTENDED" ] }, "github_com_baselinehq_golang-shared_types.VM": { "type": "object", "properties": { "cpu_cores": { "type": "number" }, "ram_gb": { "type": "number" } } }, "github_com_baselinehq_pricingapi_pkg_types.Status": { "type": "string", "enum": [ "Registered", "Deleted" ], "x-enum-varnames": [ "Registered", "Deleted" ] }, "handler.ErrorResponse": { "type": "object", "properties": { "error": { "type": "string" } } }, "provider.Config": { "type": "object", "properties": { "predicates": { "$ref": "#/components/schemas/types.Predicates" }, "provider": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Provider" } } }, "provider.Configs": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/provider.Config" } }, "schema.ComputePricingsRow": { "type": "object", "properties": { "architecture": { "type": "string" }, "availability_zone": { "type": "string" }, "cost_per_hour": { "type": "number" }, "cpu_cores": { "type": "number" }, "cpu_cores_cost_per_hour": { "type": "number" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "instance_type": { "type": "string" }, "operating_system": { "type": "string" }, "period_billing_hours": { "type": "number" }, "provider": { "type": "string" }, "ram_gb": { "type": "number" }, "ram_gb_cost_per_hour": { "type": "number" }, "raw_pricing_data": { "type": "object", "properties": {} }, "region": { "type": "string" }, "service": { "type": "string" }, "tags": { "type": "object", "properties": {} }, "updated_at": { "type": "string" }, "usage_type": { "type": "string" } } }, "schema.DiskPricingsRow": { "type": "object", "properties": { "availability_zone": { "type": "string" }, "cost_per_gb_hour": { "type": "number" }, "cost_per_iops_hour": { "type": "number" }, "cost_per_throughput_mbps_hour": { "type": "number" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "max_capacity_gb": { "type": "number" }, "max_iops": { "type": "number" }, "max_throughput_mbps": { "type": "number" }, "min_capacity_gb": { "type": "number" }, "min_iops": { "type": "number" }, "min_throughput_mbps": { "type": "number" }, "period_billing_hours": { "type": "number" }, "provider": { "type": "string" }, "raw_pricing_data": { "type": "object", "properties": {} }, "region": { "type": "string" }, "service": { "type": "string" }, "tags": { "type": "object", "properties": {} }, "type": { "type": "string" }, "updated_at": { "type": "string" }, "usage_type": { "type": "string" } } }, "types.ComputeRequest": { "type": "object", "properties": { "include_metadata": { "type": "boolean" }, "instance": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Instance" }, "predicates": { "$ref": "#/components/schemas/types.Predicates" }, "usage": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.VM" } } }, "recommendations.ComputeRecommendationResult": { "type": "object", "properties": { "pricing": { "$ref": "#/components/schemas/schema.ComputePricingsRow" }, "savings": { "$ref": "#/components/schemas/types.Savings" } } }, "types.CustomDiskPriceRequest": { "required": [ "entries" ], "type": "object", "properties": { "entries": { "minItems": 1, "type": "array", "items": { "$ref": "#/components/schemas/schema.DiskPricingsRow" } } } }, "types.CustomDiskPricingResponse": { "type": "object", "properties": { "entries": { "type": "array", "items": { "$ref": "#/components/schemas/schema.DiskPricingsRow" } }, "status": { "$ref": "#/components/schemas/github_com_baselinehq_pricingapi_pkg_types.Status" } } }, "types.CustomPriceRequest": { "required": [ "entries" ], "type": "object", "properties": { "entries": { "minItems": 1, "type": "array", "items": { "$ref": "#/components/schemas/schema.ComputePricingsRow" } } } }, "types.CustomPricingResponse": { "type": "object", "properties": { "entries": { "type": "array", "items": { "$ref": "#/components/schemas/schema.ComputePricingsRow" } }, "status": { "$ref": "#/components/schemas/github_com_baselinehq_pricingapi_pkg_types.Status" } } }, "types.Disk": { "type": "object", "properties": { "availability_zone": { "type": "string" }, "capacity_gb": { "type": "number" }, "fallback_to_base_pricing": { "type": "boolean" }, "id": { "type": "string" }, "iops": { "type": "number" }, "provider": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Provider" }, "region": { "type": "string" }, "service": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.Service" }, "throughput_mbps": { "type": "number" }, "type": { "type": "string" }, "usage_type": { "$ref": "#/components/schemas/github_com_baselinehq_golang-shared_types.UsageType" } } }, "types.DiskRequest": { "type": "object", "properties": { "include_metadata": { "type": "boolean" }, "instance": { "$ref": "#/components/schemas/types.Disk" }, "predicates": { "$ref": "#/components/schemas/types.Predicates" }, "usage": { "$ref": "#/components/schemas/types.Disk" } } }, "recommendations.DiskRecommendationResult": { "type": "object", "properties": { "pricing": { "$ref": "#/components/schemas/schema.DiskPricingsRow" }, "savings": { "$ref": "#/components/schemas/types.Savings" } } }, "types.MarketplaceDiskProvidersResponse": { "type": "object", "properties": { "providers": { "type": "array", "items": { "$ref": "#/components/schemas/schema.DiskPricingsRow" } } } }, "types.MarketplaceProvidersResponse": { "type": "object", "properties": { "providers": { "type": "array", "items": { "$ref": "#/components/schemas/schema.ComputePricingsRow" } } } }, "types.Predicates": { "type": "object", "properties": { "availability_zones": { "type": "array", "items": { "type": "string" } }, "disk_types": { "type": "array", "items": { "type": "string" } }, "instance_types": { "type": "array", "items": { "type": "string" } }, "operating_systems": { "type": "array", "items": { "type": "string" } }, "providers": { "type": "array", "items": { "type": "string" } }, "regions": { "type": "array", "items": { "type": "string" } }, "services": { "type": "array", "items": { "type": "string" } }, "usage_types": { "type": "array", "items": { "type": "string" } } } }, "types.Savings": { "type": "object", "properties": { "amount_per_hour": { "type": "number" }, "amount_per_month": { "type": "number" }, "amount_per_year": { "type": "number" }, "percentage": { "type": "number" } } } }, "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "description": "API key with \"bl_\" prefix (e.g. \"bl_\")", "name": "X-API-Key", "in": "header" }, "BearerAuth": { "type": "apiKey", "description": "Bearer token for authentication (e.g. \"Bearer \")", "name": "Authorization", "in": "header" } } }, "x-original-swagger-version": "2.0" }