# Create Registry Token

This section shows you how to create a registry token. We assume the following prerequisite:

* [<mark style="color:blue;">A container registry</mark>](https://docs.ionos.com/sections-test/guides/containers/private-container-registry/api-howtos/create_registry)

In this guide, we used test named repository to create registry tokens. Therefore, it is important that the you know your container registry name.

With the `POST` request, you get the registry token. You will need to provide registry ID:

## Request

{% hint style="info" %}
**Note:** The sample `requestID` is `789f8e3c-d5c8-4359-8f85-c200fb89e97c`.
{% endhint %}

```bash
curl --location  \
--request POST 'https://api.ionos.com/containerregistries/registries/:789f8e3c-d5c8-4359-8f85-c200fb89e97c/tokens' \
--header 'Authorization: Bearer ${TOKEN}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "properties": {
    "name": "test",
    "expiryDate": null,
    "scopes": [
      {
        "name": "*",
        "actions": [
          "pull", "push", "delete"
        ],
        "type": "repository"
      }
    ]
  }
}'
```

## Response

**200 OK - Successfully showed the list of registries**

```json
{
    "id": "8fb592e4-494c-11ed-b878-0242ac120002",
    "type": "token",
    "href": "",
    "metadata": {
        "createdBy": "sample@sample.com",
        "createdByUserId": "8hb792e4-494c-11ed-b878-0242ac120002",
        "createdDate": "2022-10-08T15:56:04Z",
        "state": "enabled"
    },
    "properties": {
        "name": "test",
        "scopes": [
            {
                "actions": [
                    "pull",
                    "push",
                    "delete"
                ],
                "name": "*",
                "type": "repository"
            }
        ],
        "expiryDate": null,
        "status": "enabled",
        "credentials": {
            "username": "test",
            "password": "148g592e4-494c-11ed-b878-0242ac120002"
        }
    }
}
```

### Response fields

| **Field**           | **Type** |                           **Description**                           | **Example**                            |
| ------------------- | :------: | :-----------------------------------------------------------------: | -------------------------------------- |
| **id**              |  string  |                     The id of the created token.                    | `8fb592e4-494c-11ed-b878-0242ac120002` |
| **createdBy**       |  string  |                   The user who created the token.                   | `sample@sample.com`                    |
| **createdByUserId** |  string  | The ID of the user or service account that initiated the operation. | `8fb59000-494c-11ed-0242ac120002`      |
| **state**           |  string  |                     The status of the registry.                     | `Running`                              |
| **hostname**        |  string  |         The allocated hostname for the particular registry.         | `demo.cr.de-fra.test.com`              |

{% hint style="info" %}
**Note:**

* Your values will differ from those in the sample code. Your response will have a different `id` for your token.
* Save the **username** and **password** in the reponse sample for using the [<mark style="color:blue;">**Docker commands**</mark>](https://docs.docker.com/registry/spec/api/).
  {% endhint %}

**409 - Conflict**

```json
{
   "httpStatus": 409,
   "messages": [
       {
           "errorCode": "0",
           "message": "already exists: name is not available"
       }
   ]
}
```

## Docker CLI

If you want to push your local images to docker repository, you need to login to it using:

```bash
docker login [OPTIONS] [SERVER]
```

You need to enter the following options to login:

* **Hostname**
* **Username**
* **Password**

For more information, refer to the the [<mark style="color:blue;">**Docker Commands**</mark>](https://docs.docker.com/registry/spec/api/).

You can push the images to your registry by providing all required information. You can query registries and look at images manifest, discover tags, delete layers and delete manifest etc. In the Docker API calls:

* **You can use the name of registry**
* **Authenticate the API calls with a token**

To know more, explore the [<mark style="color:blue;">**Docker Documentation**</mark>](https://docs.docker.com/registry/spec/api/). The Data Center Designer (DCD) also uses an easy to opt passthrough feature which as discussed uses **Basic Auth** feature, so you do not need to use a separate authentication method for the DCD.
