<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="mirror_v1.html">Google Mirror API</a> . <a href="mirror_v1.contacts.html">contacts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(id)</a></code></p>
<p class="firstline">Deletes a contact.</p>
<p class="toc_element">
  <code><a href="#get">get(id)</a></code></p>
<p class="firstline">Gets a single contact by ID.</p>
<p class="toc_element">
  <code><a href="#insert">insert(body)</a></code></p>
<p class="firstline">Inserts a new contact.</p>
<p class="toc_element">
  <code><a href="#list">list()</a></code></p>
<p class="firstline">Retrieves a list of contacts for the authenticated user.</p>
<p class="toc_element">
  <code><a href="#patch">patch(id, body)</a></code></p>
<p class="firstline">Updates a contact in place. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(id, body)</a></code></p>
<p class="firstline">Updates a contact in place.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(id)</code>
  <pre>Deletes a contact.

Args:
  id: string, The ID of the contact. (required)
</pre>
</div>

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

Args:
  id: string, The ID of the contact. (required)

Returns:
  An object of the form:

    { # A person or group that can be used as a creator or a contact.
      "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
      "displayName": "A String", # The name to display for this contact.
      "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
        "A String",
      ],
      "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
        "A String",
      ],
      "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
      "source": "A String", # The ID of the application that created this contact. This is populated by the API
      "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
      "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
          # - ADD_CAPTION
        "A String",
      ],
      "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
          # - INDIVIDUAL - Represents a single person. This is the default.
          # - GROUP - Represents more than a single person.
      "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
        { # A single menu command that is part of a Contact.
          "type": "A String", # The type of operation this command corresponds to. Allowed values are:
              # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
              # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
        },
      ],
      "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
      "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(body)</code>
  <pre>Inserts a new contact.

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

{ # A person or group that can be used as a creator or a contact.
    "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
    "displayName": "A String", # The name to display for this contact.
    "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
      "A String",
    ],
    "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
      "A String",
    ],
    "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
    "source": "A String", # The ID of the application that created this contact. This is populated by the API
    "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
    "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
        # - ADD_CAPTION
      "A String",
    ],
    "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
        # - INDIVIDUAL - Represents a single person. This is the default.
        # - GROUP - Represents more than a single person.
    "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
      { # A single menu command that is part of a Contact.
        "type": "A String", # The type of operation this command corresponds to. Allowed values are:
            # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
            # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
      },
    ],
    "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
    "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
  }


Returns:
  An object of the form:

    { # A person or group that can be used as a creator or a contact.
      "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
      "displayName": "A String", # The name to display for this contact.
      "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
        "A String",
      ],
      "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
        "A String",
      ],
      "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
      "source": "A String", # The ID of the application that created this contact. This is populated by the API
      "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
      "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
          # - ADD_CAPTION
        "A String",
      ],
      "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
          # - INDIVIDUAL - Represents a single person. This is the default.
          # - GROUP - Represents more than a single person.
      "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
        { # A single menu command that is part of a Contact.
          "type": "A String", # The type of operation this command corresponds to. Allowed values are:
              # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
              # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
        },
      ],
      "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
      "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list()</code>
  <pre>Retrieves a list of contacts for the authenticated user.

Args:

Returns:
  An object of the form:

    { # A list of Contacts representing contacts. This is the response from the server to GET requests on the contacts collection.
    "items": [ # Contact list.
      { # A person or group that can be used as a creator or a contact.
          "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
          "displayName": "A String", # The name to display for this contact.
          "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
            "A String",
          ],
          "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
            "A String",
          ],
          "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
          "source": "A String", # The ID of the application that created this contact. This is populated by the API
          "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
          "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
              # - ADD_CAPTION
            "A String",
          ],
          "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
              # - INDIVIDUAL - Represents a single person. This is the default.
              # - GROUP - Represents more than a single person.
          "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
            { # A single menu command that is part of a Contact.
              "type": "A String", # The type of operation this command corresponds to. Allowed values are:
                  # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
                  # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
            },
          ],
          "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
          "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
        },
    ],
    "kind": "mirror#contacts", # The type of resource. This is always mirror#contacts.
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(id, body)</code>
  <pre>Updates a contact in place. This method supports patch semantics.

Args:
  id: string, The ID of the contact. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A person or group that can be used as a creator or a contact.
    "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
    "displayName": "A String", # The name to display for this contact.
    "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
      "A String",
    ],
    "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
      "A String",
    ],
    "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
    "source": "A String", # The ID of the application that created this contact. This is populated by the API
    "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
    "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
        # - ADD_CAPTION
      "A String",
    ],
    "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
        # - INDIVIDUAL - Represents a single person. This is the default.
        # - GROUP - Represents more than a single person.
    "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
      { # A single menu command that is part of a Contact.
        "type": "A String", # The type of operation this command corresponds to. Allowed values are:
            # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
            # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
      },
    ],
    "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
    "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
  }


Returns:
  An object of the form:

    { # A person or group that can be used as a creator or a contact.
      "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
      "displayName": "A String", # The name to display for this contact.
      "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
        "A String",
      ],
      "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
        "A String",
      ],
      "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
      "source": "A String", # The ID of the application that created this contact. This is populated by the API
      "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
      "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
          # - ADD_CAPTION
        "A String",
      ],
      "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
          # - INDIVIDUAL - Represents a single person. This is the default.
          # - GROUP - Represents more than a single person.
      "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
        { # A single menu command that is part of a Contact.
          "type": "A String", # The type of operation this command corresponds to. Allowed values are:
              # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
              # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
        },
      ],
      "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
      "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(id, body)</code>
  <pre>Updates a contact in place.

Args:
  id: string, The ID of the contact. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A person or group that can be used as a creator or a contact.
    "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
    "displayName": "A String", # The name to display for this contact.
    "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
      "A String",
    ],
    "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
      "A String",
    ],
    "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
    "source": "A String", # The ID of the application that created this contact. This is populated by the API
    "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
    "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
        # - ADD_CAPTION
      "A String",
    ],
    "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
        # - INDIVIDUAL - Represents a single person. This is the default.
        # - GROUP - Represents more than a single person.
    "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
      { # A single menu command that is part of a Contact.
        "type": "A String", # The type of operation this command corresponds to. Allowed values are:
            # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
            # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
      },
    ],
    "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
    "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
  }


Returns:
  An object of the form:

    { # A person or group that can be used as a creator or a contact.
      "kind": "mirror#contact", # The type of resource. This is always mirror#contact.
      "displayName": "A String", # The name to display for this contact.
      "acceptTypes": [ # A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.
        "A String",
      ],
      "imageUrls": [ # Set of image URLs to display for a contact. Most contacts will have a single image, but a "group" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.
        "A String",
      ],
      "priority": 42, # Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.
      "source": "A String", # The ID of the application that created this contact. This is populated by the API
      "phoneNumber": "A String", # Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number.
      "sharingFeatures": [ # A list of sharing features that a contact can handle. Allowed values are:
          # - ADD_CAPTION
        "A String",
      ],
      "type": "A String", # The type for this contact. This is used for sorting in UIs. Allowed values are:
          # - INDIVIDUAL - Represents a single person. This is the default.
          # - GROUP - Represents more than a single person.
      "acceptCommands": [ # A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.
        { # A single menu command that is part of a Contact.
          "type": "A String", # The type of operation this command corresponds to. Allowed values are:
              # - TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the "Take a note" voice menu command.
              # - POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the "Post an update" voice menu command.
        },
      ],
      "id": "A String", # An ID for this contact. This is generated by the application and is treated as an opaque token.
      "speakableName": "A String", # Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic.
    }</pre>
</div>

</body></html>