[[console-kibana]] == Run API requests with Console **Console** lets you interact with https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html[{es} APIs] and https://www.elastic.co/docs/api[{kib} APIs] from within {kib}. [role="screenshot"] image::dev-tools/console/images/console.png["Console", width="75%"] To go to **Console**, find **Dev Tools** in the navigation menu or use the <>. You can also find Console directly on certain Search solution and Elasticsearch serverless project pages, where you can expand it from the footer. This Console, called **Persistent Console**, has the same capabilities and shares the same history as the Console in **Dev Tools**. [role="screenshot"] image::dev-tools/console/images/persistent-console.png["Console", width="75%"] [float] [[console-api]] === Write requests *Console* understands commands in a cURL-like syntax. For example, the following is a `GET` request to the {es} `_search` API. [source,js] ---------------------------------- GET /_search { "query": { "match_all": {} } } ---------------------------------- Here is the equivalent command in cURL: [source,bash] ---------------------------------- curl -XGET "http://localhost:9200/_search" -d' { "query": { "match_all": {} } }' ---------------------------------- Prepend requests to a {kib} API endpoint with `kbn:` [source,bash] -------------------------------------------------- GET kbn:/api/index_management/indices -------------------------------------------------- [float] [[console-autocomplete]] ==== Autocomplete When you're typing a command, *Console* makes context-sensitive suggestions. These suggestions show you the parameters for each API and speed up your typing. You can configure your preferences for autocomplete in the <>. [float] [[console-comments]] ==== Comments You can write comments or temporarily disable parts of a request by using double forward slashes or pound signs to create single-line comments. [source,js] ---------------------------------- # This request searches all of your indices. GET /_search { // The query parameter indicates query context. "query": { "match_all": {} // Matches all documents. } } ---------------------------------- You can also use a forward slash followed by an asterisk to mark the beginning of multi-line comments. An asterisk followed by a forward slash marks the end. [source,js] ---------------------------------- GET /_search { "query": { /*"match_all": { "boost": 1.2 }*/ "match_none": {} } } ---------------------------------- [float] [[console-variables]] ==== Variables Click *Variables* to create, edit, and delete variables. [role="screenshot"] image::dev-tools/console/images/variables.png["Variables", width=60%] You can refer to these variables in the paths and bodies of your requests. Each variable can be referenced multiple times. [source,js] ---------------------------------- GET ${pathVariable} { "query": { "match": { "${bodyNameVariable}": "${bodyValueVariable}" } } } ---------------------------------- By default, variables in the body may be substituted as a boolean, number, array, or object by removing nearby quotes instead of a string with surrounding quotes. Triple quotes overwrite this default behavior and enforce simple replacement as a string. [source,js] ---------------------------------- GET /locations/_search { "query": { "bool": { "must": { "match": { // ${shopName} shall be replaced as a string if the variable exists. "shop.name": """${shopName}""" } }, "filter": { "geo_distance": { "distance": "12km", // "${pinLocation}" may be substituted with an array such as [-70, 40]. "pin.location": "${pinLocation}" } } } } } ---------------------------------- [float] [[auto-formatting]] ==== Auto-formatting The auto-formatting capability can help you format requests to be more readable. Select one or more requests that you want to format, open the contextual menu, and then select *Auto indent*. [float] [[keyboard-shortcuts]] ==== Keyboard shortcuts Go to line number:: `Ctrl/Cmd` + `L` Auto-indent current request:: `Ctrl/Cmd` + `I` Jump to next request end:: `Ctrl/Cmd` + `↓` Jump to previous request end:: `Ctrl/Cmd` + `↑` Open documentation for current request:: `Ctrl/Cmd` + `/` Run current request:: `Ctrl/Cmd` + `Enter` Apply current or topmost term in autocomplete menu:: `Enter` or `Tab` Close autocomplete menu:: `Esc` Navigate items in autocomplete menu:: `↓` + `↑` [float] [[console-view-api]] ==== View API docs To view the documentation for an API endpoint, select the request, then open the contextual menu and select *Open API reference*. [float] [[console-request]] === Run requests When you're ready to run a request, select the request, and click the play button. The result of the request execution is displayed in the response panel, where you can see: * the JSON response * the HTTP status code corresponding to the request * The execution time, in ms. TIP: You can select multiple requests and submit them together. *Console* executes the requests one by one. Submitting multiple requests is helpful when you're debugging an issue or trying query combinations in multiple scenarios. [float] [[import-export-console-requests]] === Import and export requests You can export requests: * **to a TXT file**, by using the **Export requests** button. When using this method, all content of the input panel is copied, including comments, requests, and payloads. All of the formatting is preserved and allows you to re-import the file later, or to a different environment, using the **Import requests** button. + TIP: When importing a TXT file containing Console requests, the current content of the input panel is replaced. Export it first if you don't want to lose it, or find it in the **History** tab if you already ran the requests. * by copying them individually as **curl**, **JavaScript**, or **Python**. To do this, select a request, then open the contextual menu and select **Copy as**. When using this action, requests are copied individually to your clipboard. You can save your favorite language to make the copy action faster the next time you use it. + When running copied requests from an external environment, you'll need to add https://www.elastic.co/docs/api/doc/kibana/authentication[authentication information] to the request. [float] [[console-history]] === Get your request history *Console* maintains a list of the last 500 requests that you tried to execute. To view them, open the *History* tab. You can run a request from your history again by selecting the request and clicking **Add and run**. If you want to add it back to the Console input panel without running it yet, click **Add** instead. It is added to the editor at the current cursor position. [float] [[configuring-console]] === Configure Console settings Go to the **Config** tab of **Console** to customize its display, autocomplete, and accessibility settings. [float] [[disable-console]] === Disable Console If you don’t want to use *Console*, you can disable it by setting `console.ui.enabled` to `false` in your `kibana.yml` configuration file. Changing this setting causes the server to regenerate assets on the next startup, which might cause a delay before pages start being served. You can also choose to only disable the persistent console that shows in the footer of several Kibana pages. To do that, go to **Stack Management** > **Advanced Settings**, and turn off the `devTools:enablePersistentConsole` setting.