<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="bigqueryreservation_v1.html">BigQuery Reservation API</a> . <a href="bigqueryreservation_v1.projects.html">projects</a> . <a href="bigqueryreservation_v1.projects.locations.html">locations</a> . <a href="bigqueryreservation_v1.projects.locations.capacityCommitments.html">capacityCommitments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, enforceSingleAdminProjectPerOrg=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new capacity commitment resource.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a capacity commitment. Attempting to delete capacity commitment</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns information about the capacity commitment.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all the capacity commitments for the admin project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#merge">merge(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Merges capacity commitments of the same plan into a single commitment.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing capacity commitment.</p>
<p class="toc_element">
  <code><a href="#split">split(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Splits capacity commitment to two commitments of the same plan and</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, enforceSingleAdminProjectPerOrg=None, x__xgafv=None)</code>
  <pre>Creates a new capacity commitment resource.

Args:
  parent: string, Required. Resource name of the parent reservation. E.g.,
   `projects/myproject/locations/US` (required)
  body: object, The request body.
    The object takes the form of:

{ # Capacity commitment is a way to purchase compute capacity for BigQuery jobs
      # (in the form of slots) with some committed period of usage. Annual
      # commitments renew by default. Commitments can be removed after their
      # commitment end time passes.
      # 
      # In order to remove annual commitment, its plan needs to be changed
      # to monthly or flex first.
      # 
      # A capacity commitment resource exists as a child resource of the admin
      # project.
    &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
    &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
    &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
        # passes. Once the plan is changed, committed period is extended according to
        # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
    &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
        # 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).
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
    },
    &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
        # capacity commitments.
    &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
        # `projects/myproject/locations/US/capacityCommitments/123`
  }

  enforceSingleAdminProjectPerOrg: boolean, If true, fail the request if another project in the organization has a
capacity commitment.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Capacity commitment is a way to purchase compute capacity for BigQuery jobs
        # (in the form of slots) with some committed period of usage. Annual
        # commitments renew by default. Commitments can be removed after their
        # commitment end time passes.
        #
        # In order to remove annual commitment, its plan needs to be changed
        # to monthly or flex first.
        #
        # A capacity commitment resource exists as a child resource of the admin
        # project.
      &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
      &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
      &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
          # passes. Once the plan is changed, committed period is extended according to
          # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
      &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
          # 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).
        &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
            # message types for APIs to use.
          {
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
          },
        ],
        &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
        &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
      },
      &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
          # capacity commitments.
      &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
          # `projects/myproject/locations/US/capacityCommitments/123`
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a capacity commitment. Attempting to delete capacity commitment
before its commitment_end_time will fail with the error code
`google.rpc.Code.FAILED_PRECONDITION`.

Args:
  name: string, Required. Resource name of the capacity commitment to delete. E.g.,
   `projects/myproject/locations/US/capacityCommitments/123` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Returns information about the capacity commitment.

Args:
  name: string, Required. Resource name of the capacity commitment to retrieve. E.g.,
   `projects/myproject/locations/US/capacityCommitments/123` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Capacity commitment is a way to purchase compute capacity for BigQuery jobs
        # (in the form of slots) with some committed period of usage. Annual
        # commitments renew by default. Commitments can be removed after their
        # commitment end time passes.
        #
        # In order to remove annual commitment, its plan needs to be changed
        # to monthly or flex first.
        #
        # A capacity commitment resource exists as a child resource of the admin
        # project.
      &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
      &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
      &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
          # passes. Once the plan is changed, committed period is extended according to
          # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
      &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
          # 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).
        &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
            # message types for APIs to use.
          {
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
          },
        ],
        &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
        &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
      },
      &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
          # capacity commitments.
      &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
          # `projects/myproject/locations/US/capacityCommitments/123`
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists all the capacity commitments for the admin project.

Args:
  parent: string, Required. Resource name of the parent reservation. E.g.,
   `projects/myproject/locations/US` (required)
  pageToken: string, The next_page_token value returned from a previous List request, if any.
  pageSize: integer, The maximum number of items to return.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for ReservationService.ListCapacityCommitments.
    &quot;capacityCommitments&quot;: [ # List of capacity commitments visible to the user.
      { # Capacity commitment is a way to purchase compute capacity for BigQuery jobs
            # (in the form of slots) with some committed period of usage. Annual
            # commitments renew by default. Commitments can be removed after their
            # commitment end time passes.
            #
            # In order to remove annual commitment, its plan needs to be changed
            # to monthly or flex first.
            #
            # A capacity commitment resource exists as a child resource of the admin
            # project.
          &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
          &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
          &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
              # passes. Once the plan is changed, committed period is extended according to
              # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
          &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
              # 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).
            &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
                # message types for APIs to use.
              {
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
            ],
            &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
            &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
          },
          &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
              # capacity commitments.
          &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
          &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
              # `projects/myproject/locations/US/capacityCommitments/123`
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no
        # more results in the list.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="merge">merge(parent, body=None, x__xgafv=None)</code>
  <pre>Merges capacity commitments of the same plan into a single commitment.

The resulting capacity commitment has the greater commitment_end_time
out of the to-be-merged capacity commitments.

Attempting to merge capacity commitments of different plan will fail
with the error code `google.rpc.Code.FAILED_PRECONDITION`.

Args:
  parent: string, Parent resource that identifies admin project and location e.g.,
 `projects/myproject/locations/us` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request for ReservationService.MergeCapacityCommitments.
    &quot;capacityCommitmentIds&quot;: [ # Ids of capacity commitments to merge.
        # These capacity commitments must exist under admin project and location
        # specified in the parent.
      &quot;A String&quot;,
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Capacity commitment is a way to purchase compute capacity for BigQuery jobs
        # (in the form of slots) with some committed period of usage. Annual
        # commitments renew by default. Commitments can be removed after their
        # commitment end time passes.
        #
        # In order to remove annual commitment, its plan needs to be changed
        # to monthly or flex first.
        #
        # A capacity commitment resource exists as a child resource of the admin
        # project.
      &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
      &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
      &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
          # passes. Once the plan is changed, committed period is extended according to
          # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
      &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
          # 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).
        &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
            # message types for APIs to use.
          {
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
          },
        ],
        &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
        &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
      },
      &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
          # capacity commitments.
      &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
          # `projects/myproject/locations/US/capacityCommitments/123`
    }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an existing capacity commitment.

Only `plan` and `renewal_plan` fields can be updated.

Plan can only be changed to a plan of a longer commitment period.
Attempting to change to a plan with shorter commitment period will fail
with the error code `google.rpc.Code.FAILED_PRECONDITION`.

Args:
  name: string, Output only. The resource name of the capacity commitment, e.g.,
`projects/myproject/locations/US/capacityCommitments/123` (required)
  body: object, The request body.
    The object takes the form of:

{ # Capacity commitment is a way to purchase compute capacity for BigQuery jobs
      # (in the form of slots) with some committed period of usage. Annual
      # commitments renew by default. Commitments can be removed after their
      # commitment end time passes.
      # 
      # In order to remove annual commitment, its plan needs to be changed
      # to monthly or flex first.
      # 
      # A capacity commitment resource exists as a child resource of the admin
      # project.
    &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
    &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
    &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
        # passes. Once the plan is changed, committed period is extended according to
        # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
    &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
        # 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).
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
    },
    &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
        # capacity commitments.
    &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
        # `projects/myproject/locations/US/capacityCommitments/123`
  }

  updateMask: string, Standard field mask for the set of fields to be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Capacity commitment is a way to purchase compute capacity for BigQuery jobs
        # (in the form of slots) with some committed period of usage. Annual
        # commitments renew by default. Commitments can be removed after their
        # commitment end time passes.
        #
        # In order to remove annual commitment, its plan needs to be changed
        # to monthly or flex first.
        #
        # A capacity commitment resource exists as a child resource of the admin
        # project.
      &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
      &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
      &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
          # passes. Once the plan is changed, committed period is extended according to
          # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
      &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
          # 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).
        &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
            # message types for APIs to use.
          {
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
          },
        ],
        &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
        &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
      },
      &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
          # capacity commitments.
      &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
          # `projects/myproject/locations/US/capacityCommitments/123`
    }</pre>
</div>

<div class="method">
    <code class="details" id="split">split(name, body=None, x__xgafv=None)</code>
  <pre>Splits capacity commitment to two commitments of the same plan and
`commitment_end_time`.

A common use case is to enable downgrading commitments.

For example, in order to downgrade from 10000 slots to 8000, you might
split a 10000 capacity commitment into commitments of 2000 and 8000. Then,
you would change the plan of the first one to `FLEX` and then delete it.

Args:
  name: string, Required. The resource name e.g.,:
 `projects/myproject/locations/US/capacityCommitments/123` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request for ReservationService.SplitCapacityCommitment.
    &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in the capacity commitment after the split.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for ReservationService.SplitCapacityCommitment.
    &quot;second&quot;: { # Capacity commitment is a way to purchase compute capacity for BigQuery jobs # Second capacity commitment, result of a split.
          # (in the form of slots) with some committed period of usage. Annual
          # commitments renew by default. Commitments can be removed after their
          # commitment end time passes.
          #
          # In order to remove annual commitment, its plan needs to be changed
          # to monthly or flex first.
          #
          # A capacity commitment resource exists as a child resource of the admin
          # project.
        &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
        &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
        &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
            # passes. Once the plan is changed, committed period is extended according to
            # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
        &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
            # 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).
          &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
        },
        &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
            # capacity commitments.
        &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
        &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
            # `projects/myproject/locations/US/capacityCommitments/123`
      },
    &quot;first&quot;: { # Capacity commitment is a way to purchase compute capacity for BigQuery jobs # First capacity commitment, result of a split.
          # (in the form of slots) with some committed period of usage. Annual
          # commitments renew by default. Commitments can be removed after their
          # commitment end time passes.
          #
          # In order to remove annual commitment, its plan needs to be changed
          # to monthly or flex first.
          #
          # A capacity commitment resource exists as a child resource of the admin
          # project.
        &quot;plan&quot;: &quot;A String&quot;, # Capacity commitment commitment plan.
        &quot;slotCount&quot;: &quot;A String&quot;, # Number of slots in this commitment.
        &quot;renewalPlan&quot;: &quot;A String&quot;, # The plan this capacity commitment is converted to after commitment_end_time
            # passes. Once the plan is changed, committed period is extended according to
            # commitment plan. Only applicable for ANNUAL and TRIAL commitments.
        &quot;failureStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. For FAILED commitment plan, provides the reason of failure.
            # 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).
          &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;message&quot;: &quot;A String&quot;, # 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 field, or localized by the client.
        },
        &quot;commitmentEndTime&quot;: &quot;A String&quot;, # Output only. The end of the current commitment period. It is applicable only for ACTIVE
            # capacity commitments.
        &quot;state&quot;: &quot;A String&quot;, # Output only. State of the commitment.
        &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the capacity commitment, e.g.,
            # `projects/myproject/locations/US/capacityCommitments/123`
      },
  }</pre>
</div>

</body></html>