Each flow is separately configured to use the firehose. This API allows firehose configuration to be tested before it is set on a flow.
The Firehose feature supports multiple cloud storage services for event data export. This document describes the configuration options for both AWS S3 and Azure Blob Storage services.
For existing flows, the legacy configuration continues to work:
{
"firehose": {
"enabled": true,
"credential_id": "507f1f77bcf86cd799439011",
"bucket": "my-s3-bucket",
"prefix": "events/production"
}
}
The new service-based configuration allows multiple cloud storage providers:
{
"firehose": {
"enabled": true,
"services": {
"aws": {
"enabled": true,
"credential_id": "507f1f77bcf86cd799439011",
"bucket": "my-s3-bucket",
"prefix": "events/aws"
},
"azure": {
"enabled": true,
"credential_id": "507f1f77bcf86cd799439012",
"bucket": "my-azure-container",
"prefix": "events/azure"
}
}
}
}
The /firehose endpoint validates AWS credentials by:
leadconduit_verification_[flow_id_]YYYYMMDDHHMMSSMS.txtverification_file=true (default)verification_file=false{ validated: true, verification_file: <bool> } payload on successRequired IAM permissions:
| Flow | Required permission |
|---|---|
verification_file=true (default) |
s3:PutObject on arn:aws:s3:::<bucket>[/<prefix>]/* |
verification_file=false |
s3:ListBucket on arn:aws:s3:::<bucket> |
The default flow does not require s3:ListBucket -- a write-only IAM policy is sufficient
for customers who want to limit LeadConduit's bucket-level visibility.
Error responses follow the structured LCError schema. Upstream S3 errors are mapped onto
specific HTTP statuses (404 missing bucket, 403 IAM, 401 bad signature, 400 wrong region,
502 upstream/network failure) rather than a generic 500. See the OpenAPI path file for the
full mapping.
Example Requests:
Basic validation (creates file):
curl -X GET "https://app.leadconduit.com/firehose?service=aws&access_key_id=AKIA...&secret_access_key=wJal...&bucket=my-bucket&prefix=test"
With flow ID (includes flow identifier in filename):
curl -X GET "https://app.leadconduit.com/firehose?service=aws&access_key_id=AKIA...&secret_access_key=wJal...&bucket=my-bucket&flow_id=507f1f77bcf86cd799439011"
Validation only (no file created):
curl -X GET "https://app.leadconduit.com/firehose?service=aws&access_key_id=AKIA...&secret_access_key=wJal...&bucket=my-bucket&verification_file=false"
Example Responses:
File created:
{
"validated": true,
"verification_file": true
}
Validation only:
{
"validated": true,
"verification_file": false
}
The /firehose endpoint validates Azure credentials by:
verification_file parameterExample Request:
curl -X GET "https://app.leadconduit.com/firehose?service=azure&connection_string=DefaultEndpointsProtocol=https;AccountName=test;AccountKey=key;EndpointSuffix=core.windows.net&bucket=my-container"
Example Responses:
With verification file:
{
"validated": true,
"verification_file": true
}
Validation only (verification_file=false):
{
"validated": true,
"verification_file": false
}
When only one service is configured, events are sent to that service. If the service fails, events are spooled for retry.
When multiple services are configured:
Example migration:
Before:
{
"firehose": {
"enabled": true,
"credential_id": "507f1f77bcf86cd799439011",
"bucket": "my-bucket"
}
}
After:
{
"firehose": {
"enabled": true,
"services": {
"aws": {
"enabled": true,
"credential_id": "507f1f77bcf86cd799439011",
"bucket": "my-bucket"
}
}
}
}
The /firehose resource is used to validate cloud storage credentials and test
write access to a specified bucket/container.
AWS S3 Validation:
verification_file=true (default), creates a test file with unique name
leadconduit_verification_[flow_id_]YYYYMMDDHHMMSSMS.txt and uploads it to the
bucket (with optional prefix). Requires s3:PutObject on the bucket/prefix.verification_file=false, validates bucket access without creating a file
by calling HeadBucket. Requires s3:ListBucket on the bucket.s3:ListBucket.Azure Blob Storage Validation:
verification_file parameterRequired Parameters:
access_key_id, secret_access_key, bucketconnection_string, bucket (container name)service parameter determines which validation method is usedOptional Parameters:
flow_id: Include flow ID in verification filename for better trackingverification_file: Control whether verification file is created (default: true)Error responses follow the structured LCError schema and map upstream errors
onto specific HTTP statuses (404 missing bucket, 403 IAM, 401 bad signature, 400
wrong region, 502 upstream/network) rather than a generic 500.
Credentials validation successful
Bad Request - bucket is in a different region or container name is invalid
Unauthorized - signature mismatch (AWS) or authentication failed (Azure)
Forbidden - access denied or unrecognized access key
Not Found - bucket or container does not exist
Missing required parameters
Internal Server Error - unexpected error during validation
Bad Gateway - upstream cloud storage service is unreachable or returned 5xx
Example response when credentials are valid and verification file is created
{- "validated": true,
- "verification_file": true
}