Alphaus Flow API

(ALPHA) Flow API. Base URL: https://api.alphaus.cloud/m/blue/flow

OpenAPI Specification

alphaus-flow-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: Blue API reference Admin Flow API
  description: 'Alphaus provides an API for interacting with its services. Blue API is a RESTful API that can be accessed by an HTTP client such as `curl`, or any HTTP library which is part of most modern programming languages. This API reference is autogenerated from [protocol buffers](https://developers.google.com/protocol-buffers) defined in this [repository](https://github.com/alphauslabs/blueapi), together with our supported [client libraries](https://alphauslabs.github.io/docs/blueapi/client-sdks/). See the official [documentation](https://alphauslabs.github.io/docs/blueapi/overview/) for more information.


    You may encounter the following feature maturity indicators:

    - **(WORK-IN-PROGRESS)** - Development is ongoing, don''t use yet;

    - **(BETA)** - New or experimental features, subject to changes; and

    - **(DEPRECATED)** - Outdated or replaced features.


    Some endpoints, especially those that return lists of resources, have streaming responses; newline-separated stream of “chunks”. Each chunk is an envelope that can contain either a response message or an error. Only the last chunk will include an error, if any.'
  version: v1
host: api.alphaus.cloud
basePath: /m/blue
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: Flow
  description: '(ALPHA) Flow API. Base URL: https://api.alphaus.cloud/m/blue/flow'
  externalDocs:
    description: Service definition
    url: https://github.com/alphauslabs/blueapi/tree/main/flow/
paths:
  /v1/aws/xacct/cea:
    get:
      summary: Gets a CloudFormation launch URL for enabling read-only cross-account access to cost explorer information (API only).
      operationId: Flow_GetCostExplorerAccessTemplateUrl
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetCostExplorerAccessTemplateUrlResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
      - Flow
    post:
      summary: Creates a default cross-account access role for cost explorer (API only).
      operationId: Flow_CreateCostExplorerAccess
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1CreateCostExplorerAccessResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: 'Request message for the Flow.CreateCostExplorerAccess rpc.

          This endpoint only supports the ''apionly'' template type.'
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1CreateCostExplorerAccessRequest'
      tags:
      - Flow
  /v1/aws/xacct/spa:
    get:
      summary: Gets a CloudFormation launch URL for Savings Plan purchase capabilities
      operationId: Flow_GetSPPurchaseAccessTemplateUrl
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetSPPurchaseAccessTemplateUrlResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
      - Flow
    post:
      summary: Creates a default cross-account access role for Savings Plan (API only).
      operationId: Flow_CreateSPPurchaseAccess
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1CreateSPPurchaseAccessResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Flow.CreateSPPurchaseAccess rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1CreateSPPurchaseAccessRequest'
      tags:
      - Flow
  /v1/aws/xacct/{payerId}/access:
    get:
      summary: Returns the activated cross-account access roles of the target payerId.
      operationId: Flow_GetCrossAccountAccessDetails
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetCrossAccountAccessDetailsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: payerId
        description: Required. The target payerId of the AWS account to be checked.
        in: path
        required: true
        type: string
      tags:
      - Flow
  /v1/aws/{billingInternalId}/accounts:
    post:
      summary: Returns all the aws accounts and its payer of the msp id
      operationId: Flow_GetAwsAccounts
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetAwsAccountsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: billingInternalId
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/FlowGetAwsAccountsBody'
      tags:
      - Flow
  /v1/info:
    get:
      summary: For Testing Purposes Only.
      operationId: Flow_GetInfo
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/blueapiFlowV1GetInfoResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
      - Flow
  /v1/settings/history/{id}:
    get:
      summary: Gets the settings configuration history for a user.
      operationId: Flow_GetSettingsHistory
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetSettingsHistoryResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. The id of the payer to fetch settings history for.
        in: path
        required: true
        type: string
      tags:
      - Flow
  /v1/settings/recommendations/{id}:
    get:
      summary: Fetch user savings plan details
      operationId: Flow_GetRecommendationDetails
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetRecommendationDetailsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. The id of the payer to fetch recommendation details for.
        in: path
        required: true
        type: string
      tags:
      - Flow
  /v1/settings/{id}:
    get:
      summary: Fetch previous settings for a user
      operationId: Flow_GetSettings
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetSettingsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. The id of the payer to fetch settings for.
        in: path
        required: true
        type: string
      tags:
      - Flow
    put:
      summary: Creates or Updates the settings configuration for recommendation.
      operationId: Flow_SetSettings
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1SetSettingsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. The id of the payer.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/FlowSetSettingsBody'
      tags:
      - Flow
  /v1/sp/purchaseDetails/notification:
    post:
      summary: Sends savings plan details to be purchased to a Slack channel or user email
      operationId: Flow_SendSPToPurchaseDetailsNotification
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1SendSPToPurchaseDetailsNotificationsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Flow.SendSPToPurchaseDetailsNotifications rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1SendSPToPurchaseDetailsNotificationsRequest'
      tags:
      - Flow
  /v1/sp/purchaseDetails/notification/link/expiry:
    get:
      summary: Checks the expiry of the link in the SP to purchase details notification
      operationId: Flow_CheckSPToPurchaseDetailsLinkExpiry
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1CheckSPToPurchaseDetailsLinkExpiryResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: url
        description: 'Required. The URL containing the expiry information to check.


          The URL to check for expiration'
        in: query
        required: false
        type: string
      tags:
      - Flow
  /v1/sp/purchaseDetails/{payerId}/{yearMonth}:
    get:
      summary: Get savings plan details to be purchased .
      operationId: Flow_GetSPToPurchaseDetails
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetSPToPurchaseDetailsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: payerId
        description: Required. The id of the payer account.
        in: path
        required: true
        type: string
      - name: yearMonth
        description: Required. The year and month  for which the savings plan details are requested, formatted as "YYYYMM".
        in: path
        required: true
        type: string
      tags:
      - Flow
  /v1/sp/recommendation/notification:
    post:
      summary: Sends configuration and recommendation to a Slack channel
      operationId: Flow_CreateSPRecommendationNotification
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1CreateSPRecommendationNotificationResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1CreateSPRecommendationNotificationRequest'
      tags:
      - Flow
  /v1/usagecost:
    post:
      summary: Gets the daily cost and usage details.
      operationId: Flow_GetDailyUsageCostDetails
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetDailyUsageCostDetailsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Flow.GetDailyUsageCostDetailsRequest rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1GetDailyUsageCostDetailsRequest'
      tags:
      - Flow
  /v1/user/settings/{id}:
    get:
      summary: Gets the user account settings.
      operationId: Flow_GetUserAccountSettings
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetUserAccountSettingsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. The user ID of the user.
        in: path
        required: true
        type: string
      tags:
      - Flow
    put:
      summary: Create or Update the user account settings.
      operationId: Flow_SetUserAccountSettings
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1SetUserAccountSettingsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. The user ID of the user.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/FlowSetUserAccountSettingsBody'
      tags:
      - Flow
definitions:
  flowV1SavingsPlanDetailsPurchase:
    type: object
    properties:
      payerId:
        type: string
      linkedAccounts:
        type: string
      accountScope:
        type: string
      savingsPlanType:
        type: string
      term:
        type: integer
        format: int32
      region:
        type: string
      instanceFamily:
        type: string
      recommendedHourlyCommitment:
        type: number
        format: double
      paymentOption:
        type: string
      upfrontCost:
        type: number
        format: double
      monthlyCost:
        type: number
        format: double
      totalCost:
        type: number
        format: double
      expiryDate:
        type: string
    title: Savings plan details to be purchased
  v1CreateCostExplorerAccessResponse:
    type: object
    properties:
      target:
        type: string
        description: The queried target account.
      roleArn:
        type: string
        description: The role ARN that provides the cross-account access permissions.
      externalId:
        type: string
        description: The external id for this role.
      stackId:
        type: string
        description: The id of the CloudFormation stack deployed in the target account.
      stackRegion:
        type: string
        description: The region where the stack is deployed.
      templateUrl:
        type: string
        description: The latest template used to deploy the stack.
      status:
        type: string
        description: This can be `latest`, `outdated`, or some error information.
      lastUpdated:
        type: string
        description: The last updated timestamp, RFC3339 UTC.
      access:
        type: string
        title: 'The access type- partial access to view simulation only: "cloud_explorer_access"'
    description: Response message for the Flow.CreateCostExplorerAccess rpc.
  v1GetCostExplorerAccessTemplateUrlResponse:
    type: object
    properties:
      launchUrl:
        type: string
        description: The CloudFormation launch url. Open it in your browser.
      templateUrl:
        type: string
        description: The latest CloudFormation template. The version is included in the filename.
      stackName:
        type: string
        description: The default stack name used. Can be modified.
      principal:
        type: string
        description: The AWS account that will receive the access. Do not change.
      externalId:
        type: string
        description: The external id for this role. Do not change.
    description: Response message for the Flow.GetCostExplorerAccessTemplateUrl rpc.
  v1CreateSPPurchaseAccessResponse:
    type: object
    properties:
      target:
        type: string
        description: The queried target account.
      roleArn:
        type: string
        description: The role ARN that provides the cross-account access permissions.
      externalId:
        type: string
        description: The external id for this role.
      stackId:
        type: string
        description: The id of the CloudFormation stack deployed in the target account.
      stackRegion:
        type: string
        description: The region where the stack is deployed.
      templateUrl:
        type: string
        description: The latest template used to deploy the stack.
      status:
        type: string
        description: This can be `latest`, `outdated`, or some error information.
      lastUpdated:
        type: string
        description: The last updated timestamp, RFC3339 UTC.
      access:
        type: string
        title: 'The access type- full access to view simulation and purchase saving plan: "savings_plan_access"'
    description: Response message for the Flow.CreateSPPurchaseAccess rpc.
  v1SetUserAccountSettingsResponse:
    type: object
    properties:
      response:
        type: string
    description: Response message for the Flow.SetUserAccountSettings rpc.
  v1SendSPToPurchaseDetailsNotificationsRequestSavingsPlanDetailsPurchase:
    type: object
    properties:
      payerId:
        type: string
      linkedAccounts:
        type: string
      accountScope:
        type: string
      savingsPlanType:
        type: string
      term:
        type: integer
        format: int32
      region:
        type: string
      instanceFamily:
        type: string
      recommendedHourlyCommitment:
        type: number
        format: double
      paymentOption:
        type: string
      upfrontCost:
        type: number
        format: double
      monthlyCost:
        type: number
        format: double
      totalCost:
        type: number
        format: double
      expiryDate:
        type: string
    title: Savings plan details to be purchased
  v1CreateSPRecommendationNotificationRequest:
    type: object
    properties:
      configurations:
        $ref: '#/definitions/CreateSPRecommendationNotificationRequestConfigurations'
      recommendation:
        $ref: '#/definitions/CreateSPRecommendationNotificationRequestRecommendation'
    title: Configuration and recommendation details to send to Slack
  v1GetSettingsHistoryResponse:
    type: object
    properties:
      settingsHistory:
        type: array
        items:
          type: object
          $ref: '#/definitions/v1SettingsHistory'
    description: Response message for the Flow.GetSettingsHistory rpc.
  v1CrossAccountAccessDetail:
    type: object
    properties:
      roleArn:
        type: string
        description: The role ARN that provides the cross-account access permissions.
      externalId:
        type: string
        description: The external id for this role.
      stackId:
        type: string
        description: The id of the CloudFormation stack deployed in the target account.
      stackRegion:
        type: string
        description: The region where the stack is deployed.
      templateUrl:
        type: string
        description: The latest template used to deploy the stack.
      status:
        type: string
        description: This can be `latest`, `outdated`, or some error information.
      access:
        type: string
        title: 'The access type:  "savings_plan_access" or "cost_explorer_access"'
    description: Individual cross-access detail record.
  v1GetDailyUsageCostDetailsResponse:
    type: object
    properties:
      payerId:
        type: string
        description: The payer account ID for which the savings plan details are fetched.
      monthlyCosts:
        $ref: '#/definitions/v1MonthlyCosts'
        description: Monthly aggregated cost summary for the Savings Plan.
      spDetails:
        type: array
        items:
          type: object
          $ref: '#/definitions/v1SpDetails'
        description: Purchased Savings Plan details for the payer account.
      usageCostDetails:
        type: array
        items:
          type: object
          $ref: '#/definitions/v1UsageCostDetails'
        description: Daily Savings Plan usage and cost details.
      utilizationDetails:
        type: array
        items:
          type: object
          $ref: '#/definitions/v1UtilizationDetails'
        description: Percentage of Savings Plan utilization per ARN.
    description: A single entry containing Savings Plan, monthly cost summary, and usage breakdown.
  rpcStatus:
    type: object
    properties:
      code:
        type: integer
        format: int32
        description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
      message:
        type: string
        description: 'A developer-facing error message, which should be in English. Any

          user-facing error message should be localized and sent in the

          [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.'
      details:
        type: array
        items:
          type: object
          $ref: '#/definitions/protobufAny'
        description: 'A list of messages that carry the error details.  There is a common set of

          message types for APIs to use.'
    description: 'The `Status` type defines a logical error model that is suitable for

      different programming environments, including REST APIs and RPC APIs. It is

      used by [gRPC](https://github.com/grpc). Each `Status` message contains

      three pieces of data: error code, error message, and error details.


      You can find out more about this error model and how to work with it in the

      [API Design Guide](https://cloud.google.com/apis/design/errors).'
  v1GetUserAccountSettingsResponse:
    type: object
    properties:
      id:
        type: string
        description: The payer ID of the user.
      emails:
        type: array
        items:
          type: string
        description: List of email addresses to send notifications to.
      theme:
        type: string
        description: User interface preferences.
      language:
        type: string
        description: Preferred language for the user interface.
    description: Response message for the Flow.GetUserAccountSettings rpc.
  blueapiFlowV1GetInfoResponse:
    type: object
    properties:
      response:
        type: string
    description: Response message for the Flow.GetInfo rpc.
  v1SetSettingsResponse:
    type: object
    properties:
      response:
        type: string
    description: Response message for the Flow.CreateSettings rpc.
  protobufAny:
    type: object
    properties:
      '@type':
        type: string
        description: "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n  value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n  URL, or have them precompiled into a binary to avoid any\n  lookup. Therefore, binary compatibility needs to be preserved\n  on changes to types. (Use versioned type names to manage\n  breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics."
    additionalProperties: {}
    description: "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n    Foo foo = ...;\n    Any any;\n    any.PackFrom(foo);\n    ...\n    if (any.UnpackTo(&foo)) {\n      ...\n    }\n\nExample 2: Pack and unpack a message in Java.\n\n    Foo foo = ...;\n    Any any = Any.pack(foo);\n    ...\n    if (any.is(Foo.class)) {\n      foo = any.unpack(Foo.class);\n    }\n    // or ...\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n      foo = any.unpack(Foo.getDefaultInstance());\n    }\n\n Example 3: Pack and unpack a message in Python.\n\n    foo = Foo(...)\n    any = Any()\n    any.Pack(foo)\n    ...\n    if any.Is(Foo.DESCRIPTOR):\n      any.Unpack(foo)\n      ...\n\n Example 4: Pack and unpack a message in Go\n\n     foo := &pb.Foo{...}\n     any, err := anypb.New(foo)\n     if err != nil {\n       ...\n     }\n     ...\n     foo := &pb.Foo{}\n     if err := any.UnmarshalTo(foo); err != nil {\n       ...\n     }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n    package google.profile;\n    message Person {\n      string first_name = 1;\n      string last_name = 2;\n    }\n\n    {\n      \"@type\": \"type.googleapis.com/google.profile.Person\",\n      \"firstName\": <string>,\n      \"lastName\": <string>\n    }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n    {\n      \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n      \"value\": \"1.212s\"\n    }"
  v1SendSPToPurchaseDetailsNotificationsResponse:
    type: object
    properties:
      message:
        type: string
      success:
        type: boolean
    title: Response after sending SendSPToPurchaseDetailsNotifications to Slack
  v1SendSPToPurchaseDetailsNotificationsRequest:
    type: object
    properties:
      approval:
        type: string
      recommendation:
        $ref: '#/definitions/v1SendSPToPurchaseDetailsNotificationsRequestSavingsPlanRecommendation'
      purchases:
        type: array
        items:
          type: object
          $ref: '#/definitions/v1SendSPToPurchaseDetailsNotificationsRequestSavingsPlanDetailsPurchase'
      mode:
        type: string
        title: '"slack" or "email"'
      userEmail:
        type: string
      companyName:
        type: string
      ondemandCostBefore:
        type: string
        title: On-demand cost before savings plan
      ondemandCostAfter:
        type: string
        title: On-demand cost after savings plan
      reductionRate:
        type: string
        title: Cost reduction percentage
      approvalLink:
        type: string
        title: Link for approval action
      language:
        type: string
        title: Language code (en or ja)
      linkExpiryDate:
        type: string
        title: ISO8601 formatted date when the approval link expires (3 days from sending)
    description: Request message for the Flow.SendSPToPurchaseDetailsNotifications rpc.
  v1CreateSPPurchaseAccessRequest:
    type: object
    properties:
      target:
        type: string
        description: Required. The target AWS account to validate.
    description: Request message for the Flow.CreateSPPurchaseAccess rpc.
  v1GetSPPurchaseAccessTemplateUrlResponse:
    type: object
    properties:
      launchUrl:
        type: string
        description: The CloudFormation launch url. Open it in your browser.
      templateUrl:
        type: string
        description: The latest CloudFormation template. The version is included in the filename.
      stackName:
        type: string
        description: The default stack name used. Can be modified.
      principal:
        type: string
        description: The AWS account that will receive the access. Do not change.
      externalId:
        type: string
        description: The external id for this role. Do not change.
    description: Response message for the Flow.GetSPPurchaseAccessTemplateUrl rpc.
  blueapiFlowV1DailyUtilization:
    type: object
    properties:
      currentDate:
        type: string
        description: The current date for which the utilization is reported.
      utilizationPercentage:
        type: number
        format: double
        title: The percentage of utilization for this specific date
    description: Daily utilization data for a specific date range.
  v1SpDetails:
    type: object
    properties:
      savingsPlanType:
        type: string
        description: The savings plan type, e.g., `Compute`, `Ec2`.
      state:
        type: string
        description: The current state of the savings plan, e.g., `ACTIVE`, `EXPIRED`, `PENDING`.
      startTime:
        type: string
        description: The start time of the savings plan.
      endTime:
        type: string
        description: The end time of the savings plan.
      returnableUntil:
        type: string
        description: The date until which the savings plan is returnable, if applicable.
      commitment:
        type: number
        format: double
        description: The commitment amount per hour for the savings plan in USD.
      currency:
        type: string
        description: The currency in which the savings plan is priced, e.g., `USD`.
      planTerm:
        type: string
        description: The duration of the plan term, e.g., `1 year`, `3 years`.
      paymentOption:
        type: string
        description: The payment option for the savings plan, e.g., `All Upfront`, `Partial Upfront`, `No Upfront`.
      productTypes:
        type: array
        items:
          type: string
        description: The product types covered by the savings plan, e.g., `EC2`, `Lambda`.
      upfrontPaymentAmount:
        type: number
        format: double
        description: The total amount paid at the start of the Savings Plan, if applicable.
      recurringPaymentAmount:
        type: number
        format: double
        description: The periodic (usually monthly) charge to pay over the term of the plan.
      ec2InstanceFamily:
        type: array
        items:
          type: string
        description: The EC2 instance families covered by the savings plan, e.g., `m5`, `c5`.
      tags:
        type: string
        description: The tag that refers to the one who purchased the Savings Plan.
      purchasedBy:
        type: string
        description: The user or Flow that purchased the Savings Plan.
    description: Savings Plan Details to be used in the GetDailyUsageCostDetailsResponse.
  v1SendSPToPurchaseDetailsNotificationsRequestSavingsPlanRecommendation:
    type: object
    properties:
      payerId:
        type: string
      linkedAccounts:
        type: string
      accountScope:
        type: string
      savingsPlanType:
        type: string
      term:
        type: integer
        format: int32
      region:
        type: string
      instanceFamily:
        type: string
      recommendedHourlyCommitment:
        type: number
        format: double
      paymentOption:
        type: string
      upfrontCost:
        type: number
        format: double
      monthlyCost:
        type: number
        format: double
      totalCost:
        type: number
        format: double
      expiryDate:
        type: s

# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/alphaus/refs/heads/main/openapi/alphaus-flow-api-openapi.yml