<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="youtubeAnalytics_v2.html">YouTube Analytics API</a> . <a href="youtubeAnalytics_v2.groupItems.html">groupItems</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(onBehalfOfContentOwner=None, id=None, x__xgafv=None)</a></code></p>
<p class="firstline">Removes an item from a group.</p>
<p class="toc_element">
  <code><a href="#insert">insert(body, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a group item.</p>
<p class="toc_element">
  <code><a href="#list">list(onBehalfOfContentOwner=None, groupId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a collection of group items that match the API request parameters.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(onBehalfOfContentOwner=None, id=None, x__xgafv=None)</code>
  <pre>Removes an item from a group.

Args:
  onBehalfOfContentOwner: string, This parameter can only be used in a properly authorized request. **Note:**
This parameter is intended exclusively for YouTube content partners that
own and manage many different YouTube channels.

The `onBehalfOfContentOwner` parameter indicates that the request's
authorization credentials identify a YouTube user who is acting on behalf
of the content owner specified in the parameter value. It allows content
owners to authenticate once and get access to all their video and channel
data, without having to provide authentication credentials for each
individual channel. The account that the user authenticates with must be
linked to the specified YouTube content owner.
  id: string, The `id` parameter specifies the YouTube group item ID of the group item
that is being deleted.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Empty response.
    "errors": { # Request Error information. # Apiary error details
        #
        # The presence of an error field signals that the operation
        # has failed.
      "code": "A String", # Global error code. Deprecated and ignored.
          # Set custom error codes in ErrorProto.domain and ErrorProto.code
          # instead.
      "requestId": "A String", # Request identifier generated by the service, which can be
          # used to identify the error in the logs
      "error": [ # Specific error description and codes
        { # Describes one specific error.
          "domain": "A String", # Error domain. RoSy services can define their own
              # domain and error codes. This should normally be
              # the name of an enum type, such as: gdata.CoreErrorDomain
          "code": "A String", # Error code in the error domain. This should correspond to
              # a value of the enum type whose name is in domain. See
              # the core error domain in error_domain.proto.
          "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
              #
              # Please set domain, code and arguments whenever possible instead of this
              # error message so that external APIs can build safe error messages
              # themselves.
              #
              # External messages built in a RoSy interface will most likely refer to
              # information and concepts that are not available externally and should not
              # be exposed. It is safer if external APIs can understand the errors and
              # decide what the error message should look like.
          "debugInfo": "A String", # Debugging information, which should not be
              # shared externally.
          "locationType": "A String",
          "argument": [ # Error arguments, to be used when building user-friendly error messages
              # given the error domain and code.  Different error codes require different
              # arguments.
            "A String",
          ],
          "location": "A String", # Location of the error, as specified by the location type.
              #
              # If location_type is PATH, this should be a path to a field that's
              # relative to the request, using FieldPath notation
              # (net/proto2/util/public/field_path.h).
              #
              # Examples:
              #   authenticated_user.gaia_id
              #   resource.address[2].country
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(body, onBehalfOfContentOwner=None, x__xgafv=None)</code>
  <pre>Creates a group item.

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

{ # A group item.
    "kind": "A String", # Identifies the API resource's type. The value will be `youtube#groupItem`.
    "errors": { # Request Error information. # Apiary error details
        #
        # The presence of an error field signals that the operation
        # has failed.
      "code": "A String", # Global error code. Deprecated and ignored.
          # Set custom error codes in ErrorProto.domain and ErrorProto.code
          # instead.
      "requestId": "A String", # Request identifier generated by the service, which can be
          # used to identify the error in the logs
      "error": [ # Specific error description and codes
        { # Describes one specific error.
          "domain": "A String", # Error domain. RoSy services can define their own
              # domain and error codes. This should normally be
              # the name of an enum type, such as: gdata.CoreErrorDomain
          "code": "A String", # Error code in the error domain. This should correspond to
              # a value of the enum type whose name is in domain. See
              # the core error domain in error_domain.proto.
          "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
              #
              # Please set domain, code and arguments whenever possible instead of this
              # error message so that external APIs can build safe error messages
              # themselves.
              #
              # External messages built in a RoSy interface will most likely refer to
              # information and concepts that are not available externally and should not
              # be exposed. It is safer if external APIs can understand the errors and
              # decide what the error message should look like.
          "debugInfo": "A String", # Debugging information, which should not be
              # shared externally.
          "locationType": "A String",
          "argument": [ # Error arguments, to be used when building user-friendly error messages
              # given the error domain and code.  Different error codes require different
              # arguments.
            "A String",
          ],
          "location": "A String", # Location of the error, as specified by the location type.
              #
              # If location_type is PATH, this should be a path to a field that's
              # relative to the request, using FieldPath notation
              # (net/proto2/util/public/field_path.h).
              #
              # Examples:
              #   authenticated_user.gaia_id
              #   resource.address[2].country
        },
      ],
    },
    "resource": { # The `resource` object contains information that identifies the item being
        # added to the group.
      "kind": "A String", # Identifies the type of resource being added to the group.
          #
          # Valid values for this property are:
          #  * `youtube#channel`
          #  * `youtube#playlist`
          #  * `youtube#video`
          #  * `youtubePartner#asset`
      "id": "A String", # The channel, video, playlist, or asset ID that YouTube uses to uniquely
          # identify the item that is being added to the group.
    },
    "groupId": "A String", # The ID that YouTube uses to uniquely identify the group that contains the
        # item.
    "etag": "A String", # The Etag of this resource.
    "id": "A String", # The ID that YouTube uses to uniquely identify the `channel`, `video`,
        # `playlist`, or `asset` resource that is included in the group. Note that
        # this ID refers specifically to the inclusion of that resource in a
        # particular group and is different than the channel ID, video ID,
        # playlist ID, or asset ID that uniquely identifies the resource itself.
        # The `resource.id` property's value specifies the unique channel, video,
        # playlist, or asset ID.
  }

  onBehalfOfContentOwner: string, This parameter can only be used in a properly authorized request. **Note:**
This parameter is intended exclusively for YouTube content partners that
own and manage many different YouTube channels.

The `onBehalfOfContentOwner` parameter indicates that the request's
authorization credentials identify a YouTube user who is acting on behalf
of the content owner specified in the parameter value. It allows content
owners to authenticate once and get access to all their video and channel
data, without having to provide authentication credentials for each
individual channel. The account that the user authenticates with must be
linked to the specified YouTube content owner.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A group item.
      "kind": "A String", # Identifies the API resource's type. The value will be `youtube#groupItem`.
      "errors": { # Request Error information. # Apiary error details
          #
          # The presence of an error field signals that the operation
          # has failed.
        "code": "A String", # Global error code. Deprecated and ignored.
            # Set custom error codes in ErrorProto.domain and ErrorProto.code
            # instead.
        "requestId": "A String", # Request identifier generated by the service, which can be
            # used to identify the error in the logs
        "error": [ # Specific error description and codes
          { # Describes one specific error.
            "domain": "A String", # Error domain. RoSy services can define their own
                # domain and error codes. This should normally be
                # the name of an enum type, such as: gdata.CoreErrorDomain
            "code": "A String", # Error code in the error domain. This should correspond to
                # a value of the enum type whose name is in domain. See
                # the core error domain in error_domain.proto.
            "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
                #
                # Please set domain, code and arguments whenever possible instead of this
                # error message so that external APIs can build safe error messages
                # themselves.
                #
                # External messages built in a RoSy interface will most likely refer to
                # information and concepts that are not available externally and should not
                # be exposed. It is safer if external APIs can understand the errors and
                # decide what the error message should look like.
            "debugInfo": "A String", # Debugging information, which should not be
                # shared externally.
            "locationType": "A String",
            "argument": [ # Error arguments, to be used when building user-friendly error messages
                # given the error domain and code.  Different error codes require different
                # arguments.
              "A String",
            ],
            "location": "A String", # Location of the error, as specified by the location type.
                #
                # If location_type is PATH, this should be a path to a field that's
                # relative to the request, using FieldPath notation
                # (net/proto2/util/public/field_path.h).
                #
                # Examples:
                #   authenticated_user.gaia_id
                #   resource.address[2].country
          },
        ],
      },
      "resource": { # The `resource` object contains information that identifies the item being
          # added to the group.
        "kind": "A String", # Identifies the type of resource being added to the group.
            #
            # Valid values for this property are:
            #  * `youtube#channel`
            #  * `youtube#playlist`
            #  * `youtube#video`
            #  * `youtubePartner#asset`
        "id": "A String", # The channel, video, playlist, or asset ID that YouTube uses to uniquely
            # identify the item that is being added to the group.
      },
      "groupId": "A String", # The ID that YouTube uses to uniquely identify the group that contains the
          # item.
      "etag": "A String", # The Etag of this resource.
      "id": "A String", # The ID that YouTube uses to uniquely identify the `channel`, `video`,
          # `playlist`, or `asset` resource that is included in the group. Note that
          # this ID refers specifically to the inclusion of that resource in a
          # particular group and is different than the channel ID, video ID,
          # playlist ID, or asset ID that uniquely identifies the resource itself.
          # The `resource.id` property's value specifies the unique channel, video,
          # playlist, or asset ID.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(onBehalfOfContentOwner=None, groupId=None, x__xgafv=None)</code>
  <pre>Returns a collection of group items that match the API request parameters.

Args:
  onBehalfOfContentOwner: string, This parameter can only be used in a properly authorized request. **Note:**
This parameter is intended exclusively for YouTube content partners that
own and manage many different YouTube channels.

The `onBehalfOfContentOwner` parameter indicates that the request's
authorization credentials identify a YouTube user who is acting on behalf
of the content owner specified in the parameter value. It allows content
owners to authenticate once and get access to all their video and channel
data, without having to provide authentication credentials for each
individual channel. The account that the user authenticates with must be
linked to the specified YouTube content owner.
  groupId: string, The `groupId` parameter specifies the unique ID of the group for which you
want to retrieve group items.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for GroupsService.ListGroupItems.
    "items": [ # A list of groups that match the API request parameters. Each item in the
        # list represents a `groupItem` resource.
      { # A group item.
          "kind": "A String", # Identifies the API resource's type. The value will be `youtube#groupItem`.
          "errors": { # Request Error information. # Apiary error details
              #
              # The presence of an error field signals that the operation
              # has failed.
            "code": "A String", # Global error code. Deprecated and ignored.
                # Set custom error codes in ErrorProto.domain and ErrorProto.code
                # instead.
            "requestId": "A String", # Request identifier generated by the service, which can be
                # used to identify the error in the logs
            "error": [ # Specific error description and codes
              { # Describes one specific error.
                "domain": "A String", # Error domain. RoSy services can define their own
                    # domain and error codes. This should normally be
                    # the name of an enum type, such as: gdata.CoreErrorDomain
                "code": "A String", # Error code in the error domain. This should correspond to
                    # a value of the enum type whose name is in domain. See
                    # the core error domain in error_domain.proto.
                "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
                    #
                    # Please set domain, code and arguments whenever possible instead of this
                    # error message so that external APIs can build safe error messages
                    # themselves.
                    #
                    # External messages built in a RoSy interface will most likely refer to
                    # information and concepts that are not available externally and should not
                    # be exposed. It is safer if external APIs can understand the errors and
                    # decide what the error message should look like.
                "debugInfo": "A String", # Debugging information, which should not be
                    # shared externally.
                "locationType": "A String",
                "argument": [ # Error arguments, to be used when building user-friendly error messages
                    # given the error domain and code.  Different error codes require different
                    # arguments.
                  "A String",
                ],
                "location": "A String", # Location of the error, as specified by the location type.
                    #
                    # If location_type is PATH, this should be a path to a field that's
                    # relative to the request, using FieldPath notation
                    # (net/proto2/util/public/field_path.h).
                    #
                    # Examples:
                    #   authenticated_user.gaia_id
                    #   resource.address[2].country
              },
            ],
          },
          "resource": { # The `resource` object contains information that identifies the item being
              # added to the group.
            "kind": "A String", # Identifies the type of resource being added to the group.
                #
                # Valid values for this property are:
                #  * `youtube#channel`
                #  * `youtube#playlist`
                #  * `youtube#video`
                #  * `youtubePartner#asset`
            "id": "A String", # The channel, video, playlist, or asset ID that YouTube uses to uniquely
                # identify the item that is being added to the group.
          },
          "groupId": "A String", # The ID that YouTube uses to uniquely identify the group that contains the
              # item.
          "etag": "A String", # The Etag of this resource.
          "id": "A String", # The ID that YouTube uses to uniquely identify the `channel`, `video`,
              # `playlist`, or `asset` resource that is included in the group. Note that
              # this ID refers specifically to the inclusion of that resource in a
              # particular group and is different than the channel ID, video ID,
              # playlist ID, or asset ID that uniquely identifies the resource itself.
              # The `resource.id` property's value specifies the unique channel, video,
              # playlist, or asset ID.
        },
    ],
    "kind": "A String", # Identifies the API resource's type. The value will be
        # `youtube#groupItemListResponse`.
    "etag": "A String", # The Etag of this resource.
    "errors": { # Request Error information. # Apiary error details
        #
        # The presence of an error field signals that the operation
        # has failed.
      "code": "A String", # Global error code. Deprecated and ignored.
          # Set custom error codes in ErrorProto.domain and ErrorProto.code
          # instead.
      "requestId": "A String", # Request identifier generated by the service, which can be
          # used to identify the error in the logs
      "error": [ # Specific error description and codes
        { # Describes one specific error.
          "domain": "A String", # Error domain. RoSy services can define their own
              # domain and error codes. This should normally be
              # the name of an enum type, such as: gdata.CoreErrorDomain
          "code": "A String", # Error code in the error domain. This should correspond to
              # a value of the enum type whose name is in domain. See
              # the core error domain in error_domain.proto.
          "externalErrorMessage": "A String", # A short explanation for the error, which can be shared outside Google.
              #
              # Please set domain, code and arguments whenever possible instead of this
              # error message so that external APIs can build safe error messages
              # themselves.
              #
              # External messages built in a RoSy interface will most likely refer to
              # information and concepts that are not available externally and should not
              # be exposed. It is safer if external APIs can understand the errors and
              # decide what the error message should look like.
          "debugInfo": "A String", # Debugging information, which should not be
              # shared externally.
          "locationType": "A String",
          "argument": [ # Error arguments, to be used when building user-friendly error messages
              # given the error domain and code.  Different error codes require different
              # arguments.
            "A String",
          ],
          "location": "A String", # Location of the error, as specified by the location type.
              #
              # If location_type is PATH, this should be a path to a field that's
              # relative to the request, using FieldPath notation
              # (net/proto2/util/public/field_path.h).
              #
              # Examples:
              #   authenticated_user.gaia_id
              #   resource.address[2].country
        },
      ],
    },
  }</pre>
</div>

</body></html>