| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 | [role="xpack"][[security-api-get-api-key]]=== Get API key information API++++<titleabbrev>Get API key information</titleabbrev>++++Retrieves information for one or more API keys.[[security-api-get-api-key-request]]==== {api-request-title}`GET /_security/api_key`[[security-api-get-api-key-prereqs]]==== {api-prereq-title}* To use this API, you must have at least the `manage_own_api_key` or the`read_security` cluster privileges.** If you only have the `manage_own_api_key` privilege, this API only returnsthe API keys that you own.+NOTE: Authenticating with an API key that has the `manage_own_api_key` privilegedoes not allow retrieving the authenticated user's own keys. Instead,authenticate the user with basic credentials.** If you have `read_security`, `manage_api_key` or greaterprivileges (including `manage_security`), this API returns all API keysregardless of ownership.[[security-api-get-api-key-desc]]==== {api-description-title}The information for the API keys created by<<security-api-create-api-key,create API Key>> can be retrieved using this API.[[security-api-get-api-key-query-params]]==== {api-path-parms-title}The following parameters can be specified in the query parameters of a GET request andpertain to retrieving api keys:`id`::(Optional, string) An API key id. This parameter cannot be used with any of`name`, `realm_name` or `username` are used.`name`::(Optional, string) An API key name. This parameter cannot be used with any of`id`, `realm_name` or `username` are used. It supports prefix search with wildcard.`realm_name`::(Optional, string) The name of an authentication realm. This parameter cannot beused with either `id` or `name` or when `owner` flag is set to `true`.`username`::(Optional, string) The username of a user. This parameter cannot be used witheither `id` or `name` or when `owner` flag is set to `true`.`owner`::(Optional, Boolean) A boolean flag that can be used to query API keys ownedby the currently authenticated user. Defaults to false.The 'realm_name' or 'username' parameters cannot be specified when thisparameter is set to 'true' as they are assumed to be the currently authenticated ones.`with_limited_by`::(Optional, Boolean) A boolean flag to return the snapshot of the owner user's role descriptorsassociated with the API key. An API key's actual permission is the intersection ofits <<api-key-role-descriptors,assigned role descriptors>> and the owner user's role descriptors(effectively limited by it). An API key must have `manage_api_key` or higher privileges to retrieve the limited-by role descriptors of any API key, including itself.`active_only`::(Optional, Boolean) A boolean flag that can be used to query API keys that are currently active.An API key is considered active if it is neither invalidated, nor expired at query time. You can specify this togetherwith other parameters such as `owner` or `name`.  If `active_only` is `false`, the response willinclude both active and inactive (expired or invalidated) keys. Defaults to `false`.NOTE: When none of the parameters "id", "name", "username" and "realm_name"are specified, and the "owner" is set to false then it will retrieve all APIkeys if the user is authorized. If the user is not authorized to retrieve other user'sAPI keys, then an error will be returned.[[security-api-get-api-key-example]]==== {api-examples-title}If you create an API key as follows:[source,console]------------------------------------------------------------POST /_security/api_key{  "name": "my-api-key",  "role_descriptors": {},  "metadata": {    "application": "myapp"  }}------------------------------------------------------------A successful call returns a JSON structure that providesAPI key information. For example:[source,console-result]--------------------------------------------------{  "id":"VuaCfGcBCdbkQm-e5aOx",  "name":"my-api-key",  "api_key":"ui2lp2axTNmsyakw9tvNnw",  "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="}--------------------------------------------------// TESTRESPONSE[s/VuaCfGcBCdbkQm-e5aOx/$body.id/]// TESTRESPONSE[s/ui2lp2axTNmsyakw9tvNnw/$body.api_key/]// TESTRESPONSE[s/VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==/$body.encoded/]You can use the following example to retrieve the API key by ID:[source,console]--------------------------------------------------GET /_security/api_key?id=VuaCfGcBCdbkQm-e5aOx&with_limited_by=true--------------------------------------------------// TEST[s/VuaCfGcBCdbkQm-e5aOx/$body.id/]// TEST[continued]A successful call returns a JSON structure that contains the information of the API key:[source,js]--------------------------------------------------{  "api_keys": [ <1>    {      "id": "VuaCfGcBCdbkQm-e5aOx", <2>      "name": "my-api-key", <3>      "creation": 1548550550158, <4>      "expiration": 1548551550158, <5>      "invalidated": false, <6>      "username": "myuser", <7>      "realm": "native1", <8>      "metadata": { <9>        "application": "myapp"      },      "role_descriptors": { }, <10>      "limited_by": [  <11>        {          "role-power-user": {            "cluster": [              "monitor"            ],            "indices": [              {                "names": [                  "*"                ],                "privileges": [                  "read"                ],                "allow_restricted_indices": false              }            ],            "applications": [ ],            "run_as": [ ],            "metadata": { },            "transient_metadata": {              "enabled": true            }          }        }      ]    }  ]}--------------------------------------------------// NOTCONSOLE<1> The list of API keys that were retrieved for this request.<2> Id for the API key<3> Name of the API key<4> Creation time for the API key in milliseconds<5> Optional expiration time for the API key in milliseconds<6> Invalidation status for the API key. If the key has been invalidated, it hasa value of `true`. Otherwise, it is `false`.<7> Principal for which this API key was created<8> Realm name of the principal for which this API key was created<9> Metadata of the API key<10> The role descriptors assigned to this API key when it was <<api-key-role-descriptors,created>>or last <<security-api-update-api-key-api-key-role-descriptors,updated>>.An empty role descriptor means the API key inherits the owner user'spermissions.<11> The owner user's permissions associated with the API key.It is a point-in-time snapshot captured at <<security-api-create-api-key,creation>> andsubsequent <<security-api-update-api-key,updates>>. An API key'seffective permissions are an intersection of its assigned privileges andthe owner user's permissions.You can use the following example to retrieve the API key by name:[source,console]--------------------------------------------------GET /_security/api_key?name=my-api-key--------------------------------------------------// TEST[continued]API key name supports prefix search by using wildcard:[source,console]--------------------------------------------------GET /_security/api_key?name=my-*--------------------------------------------------// TEST[continued]The following example retrieves all API keys for the `native1` realm:[source,console]--------------------------------------------------GET /_security/api_key?realm_name=native1--------------------------------------------------// TEST[continued]The following example retrieves all API keys for the user `myuser` in all realms:[source,console]--------------------------------------------------GET /_security/api_key?username=myuser--------------------------------------------------// TEST[continued]The following example retrieves all API keys owned by the currently authenticated user:[source,console]--------------------------------------------------GET /_security/api_key?owner=true--------------------------------------------------// TEST[continued]The following example retrieves all API keys if the user is authorized to do so:[source,console]--------------------------------------------------GET /_security/api_key--------------------------------------------------// TEST[continued]The following example retrieves all active API keys if the user is authorized to do so:[source,console]--------------------------------------------------GET /_security/api_key?active_only=true--------------------------------------------------// TEST[continued]Following creates an API key[source,console]------------------------------------------------------------POST /_security/api_key{  "name": "my-api-key-1",  "metadata": {    "application": "my-application"  }}------------------------------------------------------------The following example retrieves the API key identified by the specified `id` ifit is owned by the currently authenticated user:[source,console]--------------------------------------------------GET /_security/api_key?id=VuaCfGcBCdbkQm-e5aOx&owner=true--------------------------------------------------// TEST[s/VuaCfGcBCdbkQm-e5aOx/$body.id/]// TEST[continued]Finally, the following example retrieves all API keys for the user `myuser` in the `native1` realm immediately:[source,console]--------------------------------------------------GET /_security/api_key?username=myuser&realm_name=native1--------------------------------------------------// TEST[continued]A successful call returns a JSON structure that contains the information of one or more API keys that were retrieved.[source,js]--------------------------------------------------{  "api_keys": [    {      "id": "0GF5GXsBCXxz2eDxWwFN",      "name": "hadoop_myuser_key",      "creation": 1548550550158,      "expiration": 1548551550158,      "invalidated": false,      "username": "myuser",      "realm": "native1",      "metadata": {        "application": "myapp"      },      "role_descriptors": {        "role-a": {          "cluster": [            "monitor"          ],          "indices": [            {              "names": [                "index-a"              ],              "privileges": [                "read"              ],              "allow_restricted_indices": false            }          ],          "applications": [ ],          "run_as": [ ],          "metadata": { },          "transient_metadata": {            "enabled": true          }        }      }    },    {      "id": "6wHJmcQpReKBa42EHV5SBw",      "name": "api-key-name-2",      "creation": 1548550550158,      "invalidated": false,      "username": "user-y",      "realm": "realm-2",      "metadata": {},      "role_descriptors": { }    }  ]}--------------------------------------------------// NOTCONSOLE
 |