> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pinecone.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Integrate with Azure Blob Storage

> Set up a Pinecone storage integration with an Azure Blob Storage container using a service principal to bulk import data into your indexes.

<Note>
  This feature is in [public preview](/release-notes/feature-availability) and available only on [Standard and Enterprise plans](https://www.pinecone.io/pricing/).
</Note>

This page describes how to integrate Pinecone with Azure Blob Storage. After setting up an integration, you can [import data](/guides/index-data/import-data) from an Azure Blob Storage container into a Pinecone index hosted on AWS, GCP, or Azure.

## Before you begin

Ensure you have the following:

* A [Pinecone account](https://app.pinecone.io/)
* An [Azure Blob Storage container](https://learn.microsoft.com/azure/storage/blobs/storage-blobs-introduction)

## 1. Create an app registration and service principal

Pinecone uses a service principal to access your Azure Blob Storage container.

1. [Create an app registration](https://learn.microsoft.com/entra/identity-platform/quickstart-register-app) for your Pinecone integration. This automatically creates a service principal.

   When creating your app registration:

   * Don't specify a **Redirect URI**.
   * Copy the **Application (client) ID** and the **Directory (tenant) ID**. You'll use these values when adding a storage integration in Pinecone.

2. [Create a client secret](https://learn.microsoft.com/entra/identity-platform/how-to-add-credentials?tabs=client-secret) for the service principal.

   Copy the secret's **Value** (not its **ID**). You'll use this when creating a storage integration in Pinecone.

## 2. Grant access to the storage account

[Assign the service principal to your storage account](https://learn.microsoft.com/azure/storage/common/storage-auth-aad-rbac-portal#assign-azure-rbac-roles-using-the-azure-portal):

1. In the Azure portal, navigate to the subscription associated with your storage account.
2. Select **Access control (IAM)**.
3. Click **Add** > **Add role assignment**.
4. Select **Storage Blob Data Reader** or another role that has permission to list and read blobs in a container.
5. Click **Next**.
6. Select **User, group, or service principal** and click **Select members**.
7. Select the app you created in the previous step.
8. Click **Review + assign** (you may need to click this twice).

## 3. In Pinecone, add a storage integration

You can add a storage integration in the Pinecone console or with the API.

### Use the console

In the [Pinecone console](https://app.pinecone.io/organizations/-/projects), add an integration with Azure Blob Storage:

1. Select your project.
2. Go to [**Manage > Storage integrations**](https://app.pinecone.io/organizations/-/projects/-/storage).
3. Click **Add integration**.
4. Enter a unique integration name.
5. Select **Azure Blob Storage**.
6. For **Tenant ID**, **Client ID**, and **Client secret**, enter the values you copied from Azure.
7. Click **Add integration**.

### Use the API

<Note>
  This endpoint requires `X-Pinecone-Api-Version: unstable`. Unstable endpoints can change without notice.
</Note>

Pass the values you copied from Azure as the `azure_app_credentials` field:

```bash curl theme={null}
curl -sS -X POST "https://api.pinecone.io/storage-integrations" \
    -H "Api-Key: ${PINECONE_API_KEY}" \
    -H "X-Pinecone-Api-Version: unstable" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "my-azure-integration",
      "provider": "azure_blob",
      "azure_app_credentials": {
        "tenant_id": "TENANT_ID",
        "client_id": "CLIENT_ID",
        "client_secret": "CLIENT_SECRET"
      }
    }'
```

Replace `TENANT_ID`, `CLIENT_ID`, and `CLIENT_SECRET` with the values you copied from Azure, and `my-azure-integration` with a unique name for the integration.

The response includes the integration's `id`, which you need to [import data](/guides/index-data/import-data), and a `status` of `Validated` or `Invalid`. If the credentials are invalid, the request still succeeds and the integration is created with a `status` of `Invalid`, so check the status before you import.

## Next steps

[Import data](/guides/index-data/import-data) from your Azure Blob Storage container into your Pinecone index.
