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:
        ty

# --- 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