<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="jobs_v3.html">Cloud Talent Solution API</a> . <a href="jobs_v3.projects.html">projects</a> . <a href="jobs_v3.projects.clientEvents.html">clientEvents</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Report events issued when end user interacts with customer's application</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Report events issued when end user interacts with customer&#x27;s application
that uses Cloud Talent Solution. You may inspect the created events in
[self service
tools](https://console.cloud.google.com/talent-solution/overview).
[Learn
more](https://cloud.google.com/talent-solution/docs/management-tools)
about self service tools.

Args:
  parent: string, Parent project name. (required)
  body: object, The request body.
    The object takes the form of:

{ # The report event request.
    &quot;clientEvent&quot;: { # An event issued when an end user interacts with the application that # Required. Events issued when end user interacts with customer&#x27;s application that
        # uses Cloud Talent Solution.
        # implements Cloud Talent Solution. Providing this information improves the
        # quality of search and recommendation for the API clients, enabling the
        # service to perform optimally. The number of events sent must be consistent
        # with other calls, such as job searches, issued to the service by the client.
      &quot;jobEvent&quot;: { # An event issued when a job seeker interacts with the application that # A event issued when a job seeker interacts with the application that
          # implements Cloud Talent Solution.
          # implements Cloud Talent Solution.
        &quot;type&quot;: &quot;A String&quot;, # Required. The type of the event (see JobEventType).
        &quot;jobs&quot;: [ # Required. The job name(s) associated with this event.
            # For example, if this is an impression event,
            # this field contains the identifiers of all jobs shown to the job seeker.
            # If this was a view event, this field contains the
            # identifier of the viewed job.
          &quot;A String&quot;,
        ],
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Required. The timestamp of the event.
      &quot;requestId&quot;: &quot;A String&quot;, # Required. A unique ID generated in the API responses. It can be found in
          # ResponseMetadata.request_id.
      &quot;eventId&quot;: &quot;A String&quot;, # Required. A unique identifier, generated by the client application. This `event_id`
          # is used to establish the relationship between different events
          # (see parent_event_id).
      &quot;parentEventId&quot;: &quot;A String&quot;, # Optional. The event_id of an event that resulted in the current event. For example, a
          # Job view event usually follows a parent
          # impression event: A job seeker first does a
          # search where a list of jobs appears
          # (impression). The job seeker then selects a
          # result and views the description of a particular job (Job
          # view).
      &quot;extraInfo&quot;: { # Optional. Extra information about this event. Used for storing information with no
          # matching field in event payload, for example, user application specific
          # context or details.
          #
          # At most 20 keys are supported. The maximum total size of all keys and
          # values is 2 KB.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An event issued when an end user interacts with the application that
      # implements Cloud Talent Solution. Providing this information improves the
      # quality of search and recommendation for the API clients, enabling the
      # service to perform optimally. The number of events sent must be consistent
      # with other calls, such as job searches, issued to the service by the client.
    &quot;jobEvent&quot;: { # An event issued when a job seeker interacts with the application that # A event issued when a job seeker interacts with the application that
        # implements Cloud Talent Solution.
        # implements Cloud Talent Solution.
      &quot;type&quot;: &quot;A String&quot;, # Required. The type of the event (see JobEventType).
      &quot;jobs&quot;: [ # Required. The job name(s) associated with this event.
          # For example, if this is an impression event,
          # this field contains the identifiers of all jobs shown to the job seeker.
          # If this was a view event, this field contains the
          # identifier of the viewed job.
        &quot;A String&quot;,
      ],
    },
    &quot;createTime&quot;: &quot;A String&quot;, # Required. The timestamp of the event.
    &quot;requestId&quot;: &quot;A String&quot;, # Required. A unique ID generated in the API responses. It can be found in
        # ResponseMetadata.request_id.
    &quot;eventId&quot;: &quot;A String&quot;, # Required. A unique identifier, generated by the client application. This `event_id`
        # is used to establish the relationship between different events
        # (see parent_event_id).
    &quot;parentEventId&quot;: &quot;A String&quot;, # Optional. The event_id of an event that resulted in the current event. For example, a
        # Job view event usually follows a parent
        # impression event: A job seeker first does a
        # search where a list of jobs appears
        # (impression). The job seeker then selects a
        # result and views the description of a particular job (Job
        # view).
    &quot;extraInfo&quot;: { # Optional. Extra information about this event. Used for storing information with no
        # matching field in event payload, for example, user application specific
        # context or details.
        #
        # At most 20 keys are supported. The maximum total size of all keys and
        # values is 2 KB.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
  }</pre>
</div>

</body></html>