--
:api: start-datafeed
:request: StartDatafeedRequest
:response: StartDatafeedResponse
--
[role="xpack"]
[id="{upid}-{api}"]
=== Start {dfeeds} API

Starts a {ml} {dfeed} in the cluster. It accepts a +{request}+ object and
responds with a +{response}+ object.

[id="{upid}-{api}-request"]
==== Start {dfeeds} request

A +{request}+ object is created referencing a non-null `datafeedId`.
All other fields are optional for the request.

["source","java",subs="attributes,callouts,macros"]
--------------------------------------------------
include-tagged::{doc-tests-file}[{api}-request]
--------------------------------------------------
<1> Constructing a new request referencing an existing `datafeedId`.

==== Optional arguments

The following arguments are optional.

["source","java",subs="attributes,callouts,macros"]
--------------------------------------------------
include-tagged::{doc-tests-file}[{api}-request-options]
--------------------------------------------------
<1> Set when the {dfeed} should end, the value is exclusive.
May be an epoch seconds, epoch millis or an ISO 8601 string.
"now" is a special value that indicates the current time.
If you do not specify an end time, the {dfeed} runs continuously.
<2> Set when the {dfeed} should start, the value is inclusive.
May be an epoch seconds, epoch millis or an ISO 8601 string.
If you do not specify a start time and the {dfeed} is associated with a new job,
the analysis starts from the earliest time for which data is available.
<3> Set the timeout for the request

[id="{upid}-{api}-response"]
==== Start {dfeeds} response

["source","java",subs="attributes,callouts,macros"]
--------------------------------------------------
include-tagged::{doc-tests-file}[{api}-response]
--------------------------------------------------
<1> `isStarted()` from the +{response}+ is always `true` if the {dfeed} was
started successfully. (An exception would be thrown instead if the {dfeed}
was not started successfully.)
<2> `getNode()` returns the node that the {dfeed} was assigned to. If the
{dfeed} is allowed to open lazily and has not yet been assigned to a node
then an empty string is returned. If `getNode()` returns `null` then
the server is an old version that does not return node information.

include::../execution.asciidoc[]
