<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="genomics_v1.html">Genomics API</a> . <a href="genomics_v1.callsets.html">callsets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new call set. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
<p class="toc_element">
  <code><a href="#delete">delete(callSetId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a call set. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
<p class="toc_element">
  <code><a href="#get">get(callSetId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a call set by ID. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
<p class="toc_element">
  <code><a href="#patch">patch(callSetId, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a call set. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a list of call sets matching the criteria. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L178).</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(body, x__xgafv=None)</code>
  <pre>Creates a new call set. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # A call set is a collection of variant calls, typically for one sample. It belongs to a variant set. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
  "info": { # A map of additional call set information. This must be of the form map (string key mapping to a list of string values).
    "a_key": [
      "",
    ],
  },
  "name": "A String", # The call set name.
  "created": "A String", # The date this call set was created in milliseconds from the epoch.
  "sampleId": "A String", # The sample ID this call set corresponds to.
  "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1 API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
    "A String",
  ],
  "id": "A String", # The server-generated call set ID, unique across all call sets.
}

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # A call set is a collection of variant calls, typically for one sample. It belongs to a variant set. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "info": { # A map of additional call set information. This must be of the form map (string key mapping to a list of string values).
      "a_key": [
        "",
      ],
    },
    "name": "A String", # The call set name.
    "created": "A String", # The date this call set was created in milliseconds from the epoch.
    "sampleId": "A String", # The sample ID this call set corresponds to.
    "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1 API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
      "A String",
    ],
    "id": "A String", # The server-generated call set ID, unique across all call sets.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(callSetId, x__xgafv=None)</code>
  <pre>Deletes a call set. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

Args:
  callSetId: string, The ID of the call set to be deleted. (required)
  x__xgafv: string, V1 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(callSetId, x__xgafv=None)</code>
  <pre>Gets a call set by ID. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

Args:
  callSetId: string, The ID of the call set. (required)
  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # A call set is a collection of variant calls, typically for one sample. It belongs to a variant set. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "info": { # A map of additional call set information. This must be of the form map (string key mapping to a list of string values).
      "a_key": [
        "",
      ],
    },
    "name": "A String", # The call set name.
    "created": "A String", # The date this call set was created in milliseconds from the epoch.
    "sampleId": "A String", # The sample ID this call set corresponds to.
    "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1 API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
      "A String",
    ],
    "id": "A String", # The server-generated call set ID, unique across all call sets.
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(callSetId, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a call set. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports patch semantics.

Args:
  callSetId: string, The ID of the call set to be updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A call set is a collection of variant calls, typically for one sample. It belongs to a variant set. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
  "info": { # A map of additional call set information. This must be of the form map (string key mapping to a list of string values).
    "a_key": [
      "",
    ],
  },
  "name": "A String", # The call set name.
  "created": "A String", # The date this call set was created in milliseconds from the epoch.
  "sampleId": "A String", # The sample ID this call set corresponds to.
  "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1 API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
    "A String",
  ],
  "id": "A String", # The server-generated call set ID, unique across all call sets.
}

  updateMask: string, An optional mask specifying which fields to update. At this time, the only mutable field is name. The only acceptable value is "name". If unspecified, all mutable fields will be updated.
  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # A call set is a collection of variant calls, typically for one sample. It belongs to a variant set. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "info": { # A map of additional call set information. This must be of the form map (string key mapping to a list of string values).
      "a_key": [
        "",
      ],
    },
    "name": "A String", # The call set name.
    "created": "A String", # The date this call set was created in milliseconds from the epoch.
    "sampleId": "A String", # The sample ID this call set corresponds to.
    "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1 API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
      "A String",
    ],
    "id": "A String", # The server-generated call set ID, unique across all call sets.
  }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body, x__xgafv=None)</code>
  <pre>Gets a list of call sets matching the criteria. For the definitions of call sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Implements [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L178).

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # The call set search request.
    "pageToken": "A String", # The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of `nextPageToken` from the previous response.
    "variantSetIds": [ # Restrict the query to call sets within the given variant sets. At least one ID must be provided.
      "A String",
    ],
    "name": "A String", # Only return call sets for which a substring of the name matches this string.
    "pageSize": 42, # The maximum number of results to return in a single page. If unspecified, defaults to 1024.
  }

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # The call set search response.
    "nextPageToken": "A String", # The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results. This field will be empty if there aren't any additional results.
    "callSets": [ # The list of matching call sets.
      { # A call set is a collection of variant calls, typically for one sample. It belongs to a variant set. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        "info": { # A map of additional call set information. This must be of the form map (string key mapping to a list of string values).
          "a_key": [
            "",
          ],
        },
        "name": "A String", # The call set name.
        "created": "A String", # The date this call set was created in milliseconds from the epoch.
        "sampleId": "A String", # The sample ID this call set corresponds to.
        "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1 API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
          "A String",
        ],
        "id": "A String", # The server-generated call set ID, unique across all call sets.
      },
    ],
  }</pre>
</div>

</body></html>