<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_v1beta2.html">Genomics API</a> . <a href="genomics_v1beta2.jobs.html">jobs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#cancel">cancel(jobId)</a></code></p>
<p class="firstline">Cancels a job by ID. Note that it is possible for partial results to be generated and stored for cancelled jobs.</p>
<p class="toc_element">
  <code><a href="#get">get(jobId)</a></code></p>
<p class="firstline">Gets a job by ID.</p>
<p class="toc_element">
  <code><a href="#search">search(body)</a></code></p>
<p class="firstline">Gets a list of jobs matching the criteria.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="cancel">cancel(jobId)</code>
  <pre>Cancels a job by ID. Note that it is possible for partial results to be generated and stored for cancelled jobs.

Args:
  jobId: string, Required. The ID of the job. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(jobId)</code>
  <pre>Gets a job by ID.

Args:
  jobId: string, Required. The ID of the job. (required)

Returns:
  An object of the form:

    { # A Job represents an ongoing process that can be monitored for status information.
    "detailedStatus": "A String", # A more detailed description of this job's current status.
    "status": "A String", # The status of this job.
    "errors": [ # Any errors that occurred during processing.
      "A String",
    ],
    "created": "A String", # The date this job was created, in milliseconds from the epoch.
    "warnings": [ # Any warnings that occurred during processing.
      "A String",
    ],
    "request": { # A summary representation of the service request that spawned the job. # A summarized representation of the original service request.
      "source": [ # The data source of the request, for example, a Google Cloud Storage object path or Readset ID.
        "A String",
      ],
      "destination": [ # The data destination of the request, for example, a Google BigQuery Table or Dataset ID.
        "A String",
      ],
      "type": "A String", # The original request type.
    },
    "projectNumber": "A String", # The Google Developers Console project number to which this job belongs.
    "importedIds": [ # If this Job represents an import, this field will contain the IDs of the objects that were successfully imported.
      "A String",
    ],
    "id": "A String", # The job ID.
  }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body)</code>
  <pre>Gets a list of jobs matching the criteria.

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

{ # The jobs search request.
    "status": [ # Only return jobs which have a matching status.
      "A String",
    ],
    "createdAfter": "A String", # If specified, only jobs created on or after this date, given in milliseconds since Unix epoch, will be returned.
    "pageSize": 42, # The maximum number of results to return in a single page. If unspecified, defaults to 128. The maximum value is 256.
    "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 the nextPageToken from the previous response.
    "createdBefore": "A String", # If specified, only jobs created prior to this date, given in milliseconds since Unix epoch, will be returned.
    "projectNumber": "A String", # Required. Only return jobs which belong to this Google Developers Console project.
  }


Returns:
  An object of the form:

    { # The job search response.
    "nextPageToken": "A String", # The continuation token which is used to page through large result sets. Provide this value is a subsequent request to return the next page of results. This field will be empty if there are no more results.
    "jobs": [ # The list of jobs results, ordered newest to oldest.
      { # A Job represents an ongoing process that can be monitored for status information.
        "detailedStatus": "A String", # A more detailed description of this job's current status.
        "status": "A String", # The status of this job.
        "errors": [ # Any errors that occurred during processing.
          "A String",
        ],
        "created": "A String", # The date this job was created, in milliseconds from the epoch.
        "warnings": [ # Any warnings that occurred during processing.
          "A String",
        ],
        "request": { # A summary representation of the service request that spawned the job. # A summarized representation of the original service request.
          "source": [ # The data source of the request, for example, a Google Cloud Storage object path or Readset ID.
            "A String",
          ],
          "destination": [ # The data destination of the request, for example, a Google BigQuery Table or Dataset ID.
            "A String",
          ],
          "type": "A String", # The original request type.
        },
        "projectNumber": "A String", # The Google Developers Console project number to which this job belongs.
        "importedIds": [ # If this Job represents an import, this field will contain the IDs of the objects that were successfully imported.
          "A String",
        ],
        "id": "A String", # The job ID.
      },
    ],
  }</pre>
</div>

</body></html>