[Yandex Cloud documentation](../../../index.md) > [Yandex Cloud Registry](../../index.md) > [Step-by-step guides](../index.md) > Managing artifacts > Binary artifact > Pushing a binary artifact to a registry

# Pushing a binary artifact to a registry

1. Create the following environment variables depending on the authentication method:
   
   {% list tabs group=registry_auth %}
   
   - IAM token {#iam-token}
   
     1. Get an [IAM token](../../../iam/concepts/authorization/iam-token.md) for the [Yandex account](../../../iam/operations/iam-token/create.md) or [service account](../../../iam/operations/iam-token/create-for-sa.md) you are going to use for authentication.
     1. Create the `REGISTRY_USERNAME` and `REGISTRY_PASSWORD` environment variables:
   
         ```bash
         export REGISTRY_USERNAME="iam"
         export REGISTRY_PASSWORD="<IAM_token>"
         ```
   
         Where:
   
         * `REGISTRY_USERNAME`: Authentication method.
         * `REGISTRY_PASSWORD`: Body of the previously obtained IAM token.
   
     {% note info %}
   
     The IAM token's [lifetime](../../../iam/concepts/authorization/iam-token.md#lifetime) is limited to 12 hours.
   
     {% endnote %}
   
   - API key {#api-key}
   
     1. [Create](../../../iam/operations/authentication/manage-api-keys.md#create-api-key) an API key for the [service account](../../../iam/concepts/users/service-accounts.md) you are going to use for authentication.
     1. Create the `REGISTRY_USERNAME` and `REGISTRY_PASSWORD` environment variables:
   
         ```bash
         export REGISTRY_USERNAME="api_key"
         export REGISTRY_PASSWORD="<API_key>"
         ```
   
         Where:
   
         * `REGISTRY_USERNAME`: Authentication method.
         * `REGISTRY_PASSWORD`: Body of the previously created [API key](../../../iam/concepts/authorization/api-key.md).
   
     {% note info %}
   
     The API key maximum [lifetime](../../../iam/concepts/authorization/api-key.md#scoped-api-keys) is set manually when you create the key.
   
     {% endnote %}
   
   {% endlist %}
1. To push a [binary artifact](../../concepts/artifacts/binary.md), use a POST [HTTP](https://en.wikipedia.org/wiki/HTTP) request:

    ```bash
    curl \
      --request PUT \
      --user "$REGISTRY_USERNAME:$REGISTRY_PASSWORD" \
      --header "X-Checksum-SHA256: <file_hash>" \
      --upload-file <local_path_to_file> \
      https://registry.yandexcloud.net/binaries/<registry_ID>/<artifact_name>/<artifact_version>/<file_name_in_registry>
    ```

    Where:

    * `--request`: Method.
    * `--user`: Authentication data.
    * `--header`: API request header. This is an optional setting.

        In the `X-Checksum-SHA256` header, you can specify the hash of the file you are pushing to check the file’s integrity after it is pushed. You can generate the hash, e.g., using this command:

        ```bash
        openssl dgst -sha256 <file_path> | awk '{print $2}'
        ```

    * `--upload-file`: Local path to the file to upload.
    * The request URL contains the registry URL, the artifact name and version, as well as the file name in the registry. For example:

        ```bash
        https://registry.yandexcloud.net/binaries/cn15fqbr806r********/sample-package/3.5.4/agent-installer.sh
        ```