<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.annotations.html">annotations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchCreate">batchCreate(body)</a></code></p>
<p class="firstline">Creates one or more new annotations atomically. All annotations must belong to the same annotation set. Caller must have WRITE permission for this annotation set. For optimal performance, batch positionally adjacent annotations together.</p>
<p class="toc_element">
  <code><a href="#create">create(body)</a></code></p>
<p class="firstline">Creates a new annotation. Caller must have WRITE permission for the associated annotation set.</p>
<p class="toc_element">
  <code><a href="#delete">delete(annotationId)</a></code></p>
<p class="firstline">Deletes an annotation. Caller must have WRITE permission for the associated annotation set.</p>
<p class="toc_element">
  <code><a href="#get">get(annotationId)</a></code></p>
<p class="firstline">Gets an annotation. Caller must have READ permission for the associated annotation set.</p>
<p class="toc_element">
  <code><a href="#patch">patch(annotationId, body)</a></code></p>
<p class="firstline">Updates an annotation. The update must respect all mutability restrictions and other invariants described on the annotation resource. Caller must have WRITE permission for the associated dataset. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#search">search(body)</a></code></p>
<p class="firstline">Searches for annotations that match the given criteria. Results are ordered by genomic coordinate (by reference sequence, then position). Annotations with equivalent genomic coordinates are returned in an unspecified order. This order is consistent, such that two queries for the same content (regardless of page size) yield annotations in the same order across their respective streams of paginated responses. Caller must have READ permission for the queried annotation sets.</p>
<p class="toc_element">
  <code><a href="#update">update(annotationId, body)</a></code></p>
<p class="firstline">Updates an annotation. The update must respect all mutability restrictions and other invariants described on the annotation resource. Caller must have WRITE permission for the associated dataset.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchCreate">batchCreate(body)</code>
  <pre>Creates one or more new annotations atomically. All annotations must belong to the same annotation set. Caller must have WRITE permission for this annotation set. For optimal performance, batch positionally adjacent annotations together.


If the request has a systemic issue, such as an attempt to write to an inaccessible annotation set, the entire RPC will fail accordingly. For lesser data issues, when possible an error will be isolated to the corresponding batch entry in the response; the remaining well formed annotations will be created normally.


For details on the requirements for each individual annotation resource, see annotations.create.

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

{
    "annotations": [ # The annotations to be created. At most 4096 can be specified in a single request.
      { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
        "info": { # A string which maps to an array of values.
          "a_key": [ # A string which maps to an array of values.
            "A String",
          ],
        },
        "name": "A String", # The display name of this annotation.
        "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
        "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
          "type": "A String", # Type has been adapted from ClinVar's list of variant types.
          "effect": "A String", # Effect of the variant on the coding sequence.
          "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
            "A String",
          ],
          "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
          "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
          "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
            {
              "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
              "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
              "externalIds": [ # The set of external IDs for this condition.
                {
                  "sourceName": "A String", # The name of the source of this data.
                  "id": "A String", # The id used by the source of this data.
                },
              ],
              "names": [ # A set of names for the condition.
                "A String",
              ],
            },
          ],
          "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
        },
        "annotationSetId": "A String", # The annotation set to which this annotation belongs.
        "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
          "start": "A String", # The start position of the range on the reference, 0-based inclusive.
          "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
          "end": "A String", # The end position of the range on the reference, 0-based exclusive.
          "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
          "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
        },
        "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
          "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
              #
              # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
            "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
            "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
          },
          "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
          "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
              #
              #
              # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
              #
              #
              # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
              #
              #
              # Exons are ordered by start position and may not overlap.
            {
              "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
              "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
                  #
                  # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
                  #
                  # The JSON representation for `Int32Value` is JSON number.
                "value": 42, # The int32 value.
              },
              "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
            },
          ],
        },
        "id": "A String", # The server-generated annotation ID, unique across all annotations.
      },
    ],
  }


Returns:
  An object of the form:

    {
    "entries": [ # The resulting per-annotation entries, ordered consistently with the original request.
      {
        "status": { # The resulting status for this annotation operation.
          "message": "A String", # Error message for this status, if any.
          "code": 42, # The HTTP status code for this operation.
        },
        "annotation": { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT. # The annotation, if any.
          "info": { # A string which maps to an array of values.
            "a_key": [ # A string which maps to an array of values.
              "A String",
            ],
          },
          "name": "A String", # The display name of this annotation.
          "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
          "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
            "type": "A String", # Type has been adapted from ClinVar's list of variant types.
            "effect": "A String", # Effect of the variant on the coding sequence.
            "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
              "A String",
            ],
            "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
            "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
            "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
              {
                "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
                "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
                "externalIds": [ # The set of external IDs for this condition.
                  {
                    "sourceName": "A String", # The name of the source of this data.
                    "id": "A String", # The id used by the source of this data.
                  },
                ],
                "names": [ # A set of names for the condition.
                  "A String",
                ],
              },
            ],
            "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
          },
          "annotationSetId": "A String", # The annotation set to which this annotation belongs.
          "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
            "start": "A String", # The start position of the range on the reference, 0-based inclusive.
            "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
            "end": "A String", # The end position of the range on the reference, 0-based exclusive.
            "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
            "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
          },
          "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
            "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
                #
                # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
              "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
              "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
            },
            "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
            "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
                #
                #
                # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
                #
                #
                # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
                #
                #
                # Exons are ordered by start position and may not overlap.
              {
                "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
                "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
                    #
                    # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
                    #
                    # The JSON representation for `Int32Value` is JSON number.
                  "value": 42, # The int32 value.
                },
                "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
              },
            ],
          },
          "id": "A String", # The server-generated annotation ID, unique across all annotations.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body)</code>
  <pre>Creates a new annotation. Caller must have WRITE permission for the associated annotation set.


The following fields must be provided when creating an annotation:  
- annotationSetId 
- position.referenceName or  position.referenceId  Transcripts 
For annotations of type TRANSCRIPT, the following fields of annotation.transcript must be provided:  
- exons.start 
- exons.end  
All other fields may be optionally specified, unless documented as being server-generated (for example, the id field). The annotated range must be no longer than 100Mbp (mega base pairs). See the annotation resource for additional restrictions on each field.

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

{ # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
  "info": { # A string which maps to an array of values.
    "a_key": [ # A string which maps to an array of values.
      "A String",
    ],
  },
  "name": "A String", # The display name of this annotation.
  "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
  "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
    "type": "A String", # Type has been adapted from ClinVar's list of variant types.
    "effect": "A String", # Effect of the variant on the coding sequence.
    "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
      "A String",
    ],
    "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
    "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
    "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
      {
        "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
        "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
        "externalIds": [ # The set of external IDs for this condition.
          {
            "sourceName": "A String", # The name of the source of this data.
            "id": "A String", # The id used by the source of this data.
          },
        ],
        "names": [ # A set of names for the condition.
          "A String",
        ],
      },
    ],
    "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
  },
  "annotationSetId": "A String", # The annotation set to which this annotation belongs.
  "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
    "start": "A String", # The start position of the range on the reference, 0-based inclusive.
    "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
    "end": "A String", # The end position of the range on the reference, 0-based exclusive.
    "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
    "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
  },
  "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
    "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
        #
        # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
      "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
      "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
    },
    "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
    "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
        #
        #
        # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
        #
        #
        # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
        #
        #
        # Exons are ordered by start position and may not overlap.
      {
        "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
        "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
            #
            # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
            #
            # The JSON representation for `Int32Value` is JSON number.
          "value": 42, # The int32 value.
        },
        "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
      },
    ],
  },
  "id": "A String", # The server-generated annotation ID, unique across all annotations.
}


Returns:
  An object of the form:

    { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
    "info": { # A string which maps to an array of values.
      "a_key": [ # A string which maps to an array of values.
        "A String",
      ],
    },
    "name": "A String", # The display name of this annotation.
    "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
    "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
      "type": "A String", # Type has been adapted from ClinVar's list of variant types.
      "effect": "A String", # Effect of the variant on the coding sequence.
      "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
        "A String",
      ],
      "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
      "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
      "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
        {
          "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
          "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
          "externalIds": [ # The set of external IDs for this condition.
            {
              "sourceName": "A String", # The name of the source of this data.
              "id": "A String", # The id used by the source of this data.
            },
          ],
          "names": [ # A set of names for the condition.
            "A String",
          ],
        },
      ],
      "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
    },
    "annotationSetId": "A String", # The annotation set to which this annotation belongs.
    "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
      "start": "A String", # The start position of the range on the reference, 0-based inclusive.
      "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
      "end": "A String", # The end position of the range on the reference, 0-based exclusive.
      "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
      "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
    },
    "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
      "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
          #
          # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
        "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
        "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
      },
      "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
      "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
          #
          #
          # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
          #
          #
          # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
          #
          #
          # Exons are ordered by start position and may not overlap.
        {
          "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
          "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
              #
              # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
              #
              # The JSON representation for `Int32Value` is JSON number.
            "value": 42, # The int32 value.
          },
          "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
        },
      ],
    },
    "id": "A String", # The server-generated annotation ID, unique across all annotations.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(annotationId)</code>
  <pre>Deletes an annotation. Caller must have WRITE permission for the associated annotation set.

Args:
  annotationId: string, The ID of the annotation to be deleted. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(annotationId)</code>
  <pre>Gets an annotation. Caller must have READ permission for the associated annotation set.

Args:
  annotationId: string, The ID of the annotation to be retrieved. (required)

Returns:
  An object of the form:

    { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
    "info": { # A string which maps to an array of values.
      "a_key": [ # A string which maps to an array of values.
        "A String",
      ],
    },
    "name": "A String", # The display name of this annotation.
    "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
    "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
      "type": "A String", # Type has been adapted from ClinVar's list of variant types.
      "effect": "A String", # Effect of the variant on the coding sequence.
      "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
        "A String",
      ],
      "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
      "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
      "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
        {
          "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
          "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
          "externalIds": [ # The set of external IDs for this condition.
            {
              "sourceName": "A String", # The name of the source of this data.
              "id": "A String", # The id used by the source of this data.
            },
          ],
          "names": [ # A set of names for the condition.
            "A String",
          ],
        },
      ],
      "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
    },
    "annotationSetId": "A String", # The annotation set to which this annotation belongs.
    "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
      "start": "A String", # The start position of the range on the reference, 0-based inclusive.
      "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
      "end": "A String", # The end position of the range on the reference, 0-based exclusive.
      "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
      "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
    },
    "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
      "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
          #
          # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
        "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
        "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
      },
      "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
      "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
          #
          #
          # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
          #
          #
          # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
          #
          #
          # Exons are ordered by start position and may not overlap.
        {
          "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
          "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
              #
              # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
              #
              # The JSON representation for `Int32Value` is JSON number.
            "value": 42, # The int32 value.
          },
          "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
        },
      ],
    },
    "id": "A String", # The server-generated annotation ID, unique across all annotations.
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(annotationId, body)</code>
  <pre>Updates an annotation. The update must respect all mutability restrictions and other invariants described on the annotation resource. Caller must have WRITE permission for the associated dataset. This method supports patch semantics.

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

{ # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
  "info": { # A string which maps to an array of values.
    "a_key": [ # A string which maps to an array of values.
      "A String",
    ],
  },
  "name": "A String", # The display name of this annotation.
  "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
  "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
    "type": "A String", # Type has been adapted from ClinVar's list of variant types.
    "effect": "A String", # Effect of the variant on the coding sequence.
    "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
      "A String",
    ],
    "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
    "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
    "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
      {
        "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
        "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
        "externalIds": [ # The set of external IDs for this condition.
          {
            "sourceName": "A String", # The name of the source of this data.
            "id": "A String", # The id used by the source of this data.
          },
        ],
        "names": [ # A set of names for the condition.
          "A String",
        ],
      },
    ],
    "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
  },
  "annotationSetId": "A String", # The annotation set to which this annotation belongs.
  "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
    "start": "A String", # The start position of the range on the reference, 0-based inclusive.
    "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
    "end": "A String", # The end position of the range on the reference, 0-based exclusive.
    "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
    "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
  },
  "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
    "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
        #
        # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
      "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
      "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
    },
    "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
    "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
        #
        #
        # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
        #
        #
        # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
        #
        #
        # Exons are ordered by start position and may not overlap.
      {
        "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
        "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
            #
            # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
            #
            # The JSON representation for `Int32Value` is JSON number.
          "value": 42, # The int32 value.
        },
        "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
      },
    ],
  },
  "id": "A String", # The server-generated annotation ID, unique across all annotations.
}


Returns:
  An object of the form:

    { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
    "info": { # A string which maps to an array of values.
      "a_key": [ # A string which maps to an array of values.
        "A String",
      ],
    },
    "name": "A String", # The display name of this annotation.
    "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
    "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
      "type": "A String", # Type has been adapted from ClinVar's list of variant types.
      "effect": "A String", # Effect of the variant on the coding sequence.
      "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
        "A String",
      ],
      "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
      "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
      "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
        {
          "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
          "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
          "externalIds": [ # The set of external IDs for this condition.
            {
              "sourceName": "A String", # The name of the source of this data.
              "id": "A String", # The id used by the source of this data.
            },
          ],
          "names": [ # A set of names for the condition.
            "A String",
          ],
        },
      ],
      "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
    },
    "annotationSetId": "A String", # The annotation set to which this annotation belongs.
    "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
      "start": "A String", # The start position of the range on the reference, 0-based inclusive.
      "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
      "end": "A String", # The end position of the range on the reference, 0-based exclusive.
      "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
      "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
    },
    "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
      "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
          #
          # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
        "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
        "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
      },
      "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
      "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
          #
          #
          # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
          #
          #
          # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
          #
          #
          # Exons are ordered by start position and may not overlap.
        {
          "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
          "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
              #
              # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
              #
              # The JSON representation for `Int32Value` is JSON number.
            "value": 42, # The int32 value.
          },
          "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
        },
      ],
    },
    "id": "A String", # The server-generated annotation ID, unique across all annotations.
  }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body)</code>
  <pre>Searches for annotations that match the given criteria. Results are ordered by genomic coordinate (by reference sequence, then position). Annotations with equivalent genomic coordinates are returned in an unspecified order. This order is consistent, such that two queries for the same content (regardless of page size) yield annotations in the same order across their respective streams of paginated responses. Caller must have READ permission for the queried annotation sets.

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

{
    "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.
    "range": { # A 0-based half-open genomic coordinate range for search requests. reference_id or reference_name must be set. # If specified, this query matches only annotations that overlap this range.
      "start": "A String", # The start position of the range on the reference, 0-based inclusive. If specified, referenceId or referenceName must also be specified. Defaults to 0.
      "referenceId": "A String", # The ID of the reference to query.
      "end": "A String", # The end position of the range on the reference, 0-based exclusive. If specified, referenceId or referenceName must also be specified. If unset or 0, defaults to the length of the reference.
      "referenceName": "A String", # The name of the reference to query, within the reference set associated with this query.
    },
    "annotationSetIds": [ # The annotation sets to search within. The caller must have READ access to these annotation sets. Required. All queried annotation sets must have the same type.
      "A String",
    ],
    "pageSize": 42, # The maximum number of results to return in a single page. If unspecified, defaults to 256. The maximum value is 2048.
  }


Returns:
  An object of the form:

    {
    "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.
    "annotations": [ # The matching annotations.
      { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
        "info": { # A string which maps to an array of values.
          "a_key": [ # A string which maps to an array of values.
            "A String",
          ],
        },
        "name": "A String", # The display name of this annotation.
        "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
        "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
          "type": "A String", # Type has been adapted from ClinVar's list of variant types.
          "effect": "A String", # Effect of the variant on the coding sequence.
          "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
            "A String",
          ],
          "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
          "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
          "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
            {
              "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
              "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
              "externalIds": [ # The set of external IDs for this condition.
                {
                  "sourceName": "A String", # The name of the source of this data.
                  "id": "A String", # The id used by the source of this data.
                },
              ],
              "names": [ # A set of names for the condition.
                "A String",
              ],
            },
          ],
          "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
        },
        "annotationSetId": "A String", # The annotation set to which this annotation belongs.
        "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
          "start": "A String", # The start position of the range on the reference, 0-based inclusive.
          "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
          "end": "A String", # The end position of the range on the reference, 0-based exclusive.
          "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
          "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
        },
        "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
          "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
              #
              # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
            "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
            "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
          },
          "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
          "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
              #
              #
              # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
              #
              #
              # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
              #
              #
              # Exons are ordered by start position and may not overlap.
            {
              "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
              "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
                  #
                  # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
                  #
                  # The JSON representation for `Int32Value` is JSON number.
                "value": 42, # The int32 value.
              },
              "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
            },
          ],
        },
        "id": "A String", # The server-generated annotation ID, unique across all annotations.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(annotationId, body)</code>
  <pre>Updates an annotation. The update must respect all mutability restrictions and other invariants described on the annotation resource. Caller must have WRITE permission for the associated dataset.

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

{ # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
  "info": { # A string which maps to an array of values.
    "a_key": [ # A string which maps to an array of values.
      "A String",
    ],
  },
  "name": "A String", # The display name of this annotation.
  "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
  "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
    "type": "A String", # Type has been adapted from ClinVar's list of variant types.
    "effect": "A String", # Effect of the variant on the coding sequence.
    "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
      "A String",
    ],
    "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
    "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
    "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
      {
        "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
        "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
        "externalIds": [ # The set of external IDs for this condition.
          {
            "sourceName": "A String", # The name of the source of this data.
            "id": "A String", # The id used by the source of this data.
          },
        ],
        "names": [ # A set of names for the condition.
          "A String",
        ],
      },
    ],
    "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
  },
  "annotationSetId": "A String", # The annotation set to which this annotation belongs.
  "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
    "start": "A String", # The start position of the range on the reference, 0-based inclusive.
    "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
    "end": "A String", # The end position of the range on the reference, 0-based exclusive.
    "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
    "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
  },
  "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
    "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
        #
        # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
      "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
      "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
    },
    "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
    "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
        #
        #
        # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
        #
        #
        # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
        #
        #
        # Exons are ordered by start position and may not overlap.
      {
        "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
        "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
            #
            # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
            #
            # The JSON representation for `Int32Value` is JSON number.
          "value": 42, # The int32 value.
        },
        "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
      },
    ],
  },
  "id": "A String", # The server-generated annotation ID, unique across all annotations.
}


Returns:
  An object of the form:

    { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are GENE and VARIANT.
    "info": { # A string which maps to an array of values.
      "a_key": [ # A string which maps to an array of values.
        "A String",
      ],
    },
    "name": "A String", # The display name of this annotation.
    "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
    "variant": { # A Variant annotation. # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type VARIANT.
      "type": "A String", # Type has been adapted from ClinVar's list of variant types.
      "effect": "A String", # Effect of the variant on the coding sequence.
      "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
        "A String",
      ],
      "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
      "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
      "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
        {
          "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
          "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
          "externalIds": [ # The set of external IDs for this condition.
            {
              "sourceName": "A String", # The name of the source of this data.
              "id": "A String", # The id used by the source of this data.
            },
          ],
          "names": [ # A set of names for the condition.
            "A String",
          ],
        },
      ],
      "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
    },
    "annotationSetId": "A String", # The annotation set to which this annotation belongs.
    "position": { # A 0-based half-open genomic coordinate range over a reference sequence, for representing the position of a genomic resource. # The position of this annotation on the reference sequence.
      "start": "A String", # The start position of the range on the reference, 0-based inclusive.
      "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
      "end": "A String", # The end position of the range on the reference, 0-based exclusive.
      "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
      "referenceName": "A String", # The display name corresponding to the reference specified by referenceId, for example chr1, 1, or chrX.
    },
    "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type TRANSCRIPT.
      "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them.
          #
          # Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
        "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and not the containing annotation start.
        "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and not the containing annotation start.
      },
      "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
      "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes.
          #
          #
          # Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns.
          #
          #
          # Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence.
          #
          #
          # Exons are ordered by start position and may not overlap.
        {
          "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and not the containing annotation start.
          "frame": { # Wrapper message for `int32`. # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.position.reverseStrand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end-1.
              #
              # Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
              #
              # The JSON representation for `Int32Value` is JSON number.
            "value": 42, # The int32 value.
          },
          "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and not the containing annotation start.
        },
      ],
    },
    "id": "A String", # The server-generated annotation ID, unique across all annotations.
  }</pre>
</div>

</body></html>