Azure Blob Storage Connector Guide

The Azure Blob Storage connector allows Tealfabric workflows to store and retrieve files in Azure containers for document pipelines, export archives, and operational assets. It is designed for workflows that need predictable object storage access with metadata support.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/a/azure-blob
Version (published date)2026-05-08
Tagsconnectors, reference, azure-blob
Connector IDazure-blob-1.0.0

Azure Blob connector flow showing storage account authentication, blob upload with metadata, filtered blob listing, and workflow actions based on stored file state.

When to use this connector

Use this connector when workflows must persist files to object storage or fetch files for downstream processing. Common patterns include storing generated reports, archiving payload snapshots, and retrieving artifacts for validation or distribution. The connector works best when naming conventions and container structure are defined consistently across teams.

Prerequisites

Before configuring the connector, create the target blob container and confirm your storage account key has required access permissions. Decide on blob naming rules, including prefix structure for environment and domain grouping. Validate connectivity from the runtime environment to Azure endpoints before enabling production jobs.

Configuration

Store these values in the integration profile:

  • account_name (required): Azure storage account name.
  • account_key (required): Azure storage account key.
  • container_name (required): Existing target container name (3–63 lowercase alphanumeric characters; hyphens allowed).
  • timeout_seconds (optional): Request timeout in seconds, default 30.

send accepts blob aliases blob_name, key, or path; content aliases content, body, or data; and optional file_path/file for host-local binary uploads.

Upload blobs with send

Use send to upload text or binary content. Set content_type (or mime_type) explicitly when downstream clients need a specific MIME type. When file_path is used, the connector reads raw bytes from the host filesystem.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

type BlobWriteResult = {
  message_count: number;
  blob_name: string;
  container: string;
  etag: string | null;
  size: number;
};

async function uploadReport(integrationId: string, csvText: string): Promise<BlobWriteResult> {
  const response = await fetch(
    `${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`,
    {
      method: "POST",
      headers: {
        "X-API-Key": apiKey,
        "X-Tenant-ID": tenantId,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        operation: "send",
        blob_name: "exports/2026/05/report.csv",
        content: csvText,
        content_type: "text/csv",
      }),
    }
  );
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = (await response.json()) as { success?: boolean; data?: BlobWriteResult };
  if (!payload.success || !payload.data) throw new Error("Blob upload failed");
  return payload.data;
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "send",
    "blob_name": "exports/2026/05/report.csv",
    "content": "id,name\n1,alpha",
    "content_type": "text/csv"
  }'
{
  "success": true,
  "data": {
    "message_count": 1,
    "blob_name": "exports/2026/05/report.csv",
    "container": "workflow-exports",
    "etag": "\"0x8DE12345A1BCDEF\"",
    "size": 15
  }
}

Retrieve and list blobs with receive

Use receive with blob_name (or key/path) for direct downloads, or omit the blob name and pass prefix to list blobs. Listing supports max_results or limit (default 5000).

{
  "operation": "receive",
  "prefix": "exports/2026/05/",
  "max_results": 25
}

List response envelope:

{
  "success": true,
  "data": {
    "message_count": 1,
    "blobs": [
      {
        "name": "exports/2026/05/report.csv",
        "size": 58212,
        "last_modified": "2026-05-08T13:06:10Z",
        "etag": "\"0x8DE12345A1BCDEF\"",
        "content_type": "text/csv"
      }
    ],
    "next_marker": null
  }
}

Download response envelope:

{
  "success": true,
  "data": {
    "message_count": 1,
    "blob_name": "exports/2026/05/report.csv",
    "content": "id,name\n1,alpha",
    "content_type": "text/csv",
    "size": 15
  }
}

Delete blobs with delete

{
  "operation": "delete",
  "blob_name": "exports/2026/05/report.csv"
}
{
  "success": true,
  "data": {
    "message_count": 1,
    "blob_name": "exports/2026/05/report.csv",
    "deleted": true
  }
}

Test connectivity with test

test validates required configuration and probes container metadata (GET ?comp=metadata).

{
  "success": true,
  "data": {
    "message": "Azure Blob Storage connection test successful",
    "details": {
      "account": "mystorageaccount",
      "container": "workflow-exports",
      "endpoint": "https://mystorageaccount.blob.core.windows.net"
    }
  }
}

Batch operations with batch

batch runs multiple send, receive, or delete operations sequentially. Each item may use operation or type (default send) and optional nested data.

{
  "operation": "batch",
  "operations": [
    { "operation": "send", "data": { "blob_name": "a.txt", "content": "hello" } },
    { "operation": "delete", "data": { "blob_name": "old/a.txt" } }
  ]
}

Reliability guidance

Use consistent prefixes so files can be discovered and audited across environments. For large transfers, split operations and checkpoint progress to keep retries bounded and observable. Monitor storage usage, lifecycle rules, and access-key rotation to maintain both cost control and security posture.

Related references