Overview
The Benzinga Data Webhook service delivers real-time calendar and signals data to your configured webhook endpoints. When calendar events (earnings, dividends, ratings, etc.) or signals (option activity, halts, etc.) are created, updated, or removed, the service automatically sends HTTP POST requests to your webhook URL with the data payload. Key capabilities:- Configurable scopes for calendar and signal coverage so you only receive the data you need
- Idempotent deliveries with a unique
X-BZ-Deliveryheader and payloadidfield for deduplication - Robust retry schedule that escalates from rapid exponential retries to long-tail hourly attempts
- Optional content transformations to align payloads with downstream system expectations
Webhook Delivery
HTTP Request Details
- Method:
POST - Content-Type:
application/json - User-Agent:
Benzinga-Dispatch/v1.0.0 {build-version} - Custom Header:
X-BZ-Delivery- A unique UUID for each delivery attempt (useful for deduplication)
Retry Policy
The data webhook service implements a robust retry mechanism:- Exponential Phase: 15 retries within the first 5 minutes
- Additional Exponential Retries: 11 more retries if needed
- Fixed Interval Phase: 12 retries per hour × 24 hours/day × 7 days (for long-term retries)
- Max Wait Time: 5 minutes between retries in exponential phase
- Request Timeout: 30 seconds per request
Response Requirements
Your webhook endpoint should return one of the following HTTP status codes:- Success Codes (200-202, 204): Indicates successful delivery. No retries will be attempted.
- Client Error Codes (401-403): Indicates authentication/authorization failure. Retries will be halted immediately to prevent further failed attempts.
- Other Codes (4xx, 5xx): Will trigger retries according to the retry policy above.
Webhook Payload Structure
Each webhook delivery contains a JSON payload with the following structure:Payload Fields
Top-Level Fields
id(string, UUID): Unique identifier for this webhook delivery. Use this for deduplication.api_version(string): API version identifier. Currently"webhook/v1".kind(string): Data type path identifier. See Supported Data Types for all possible values.
Data Object
action(string): Event action type. Possible values:"Created": New data was created (default for new webhook keys)"Updated": Existing data was updated"Removed": Data was removed- Note: Legacy webhook keys may receive lowercase values:
"created","updated","removed"
id(string): Unique identifier for the calendar/signal recordtimestamp(string, ISO 8601): Timestamp when the webhook was generatedcontent(object): The actual calendar or signal data. Structure varies by data type (see Supported Data Types)
Supported Data Types
The data webhook service supports the following calendar and signal types:Calendar Data Types (v2.1)
| Data Type | Kind Path | Description |
|---|---|---|
| Earnings | data/v2.1/calendar/earnings | Company earnings announcements |
| Dividends | data/v2.1/calendar/dividends | Dividend declarations and payments |
| Ratings | data/v2.1/calendar/ratings | Analyst ratings and price targets |
| IPOs | data/v2.1/calendar/ipos | Initial public offerings |
| Guidance | data/v2.1/calendar/guidance | Company guidance updates |
| Conference | data/v2.1/calendar/conference | Conference calls and presentations |
| Economics | data/v2.1/calendar/economics | Economic indicators and releases |
| Offerings | data/v2.1/calendar/offerings | Secondary offerings |
| Mergers & Acquisitions | data/v2.1/calendar/ma | M&A announcements |
| Retail | data/v2.1/calendar/retail | Retail sales data |
| Splits | data/v2.1/calendar/splits | Stock splits |
| FDA | data/v2.1/calendar/fda | FDA approvals and announcements |
Signals Data Types (v1)
| Data Type | Kind Path | Description |
|---|---|---|
| Option Activity | data/v1/signal/option_activity | Unusual option activity |
| WIIMs | data/v1/wiims | Why Is It Moving (WIIMs) data |
| SEC Insider Transactions | data/v1/sec/insider_transactions/filings | SEC insider trading filings |
| Government Trades | data/v1/gov/usa/congress | Congressional trading data |
Additional Data Types (v1)
| Data Type | Kind Path | Description |
|---|---|---|
| Bulls Say Bears Say | data/v1/bulls_bears_say | Market sentiment analysis |
| Bulls Say Bears Say (Korean) | data/v1/bulls_bears_say/korean | Korean market sentiment |
| Analyst Insights | data/v1/analyst/insights | Analyst insights and commentary |
| Consensus Ratings | data/v1/consensus-ratings | Aggregated consensus ratings |
Content Structure Examples
Earnings Example
Dividends Example
Ratings Example
Option Activity Example
Event Actions
The data webhook service sends events for three types of actions:- Created: Triggered when new calendar or signal data is published
- Updated: Triggered when existing data is modified
- Removed: Triggered when data is deleted
- New webhook keys: Receive capitalized actions (
"Created","Updated","Removed") - Legacy webhook keys: Receive lowercase actions (
"created","updated","removed")
Content Filtering
Your webhook configuration can include filters to control which data you receive:Filter Options
- Data Types: Filter by specific calendar/signal types (e.g., only earnings, only ratings)
- Geographic Filters: Control whether to receive:
- US market data (
AllowUSA) - Canadian market data (
AllowCanada) - Indian market data (
AllowIndia) - for WIIMs data
- US market data (
- Date Filter: Exclude historical data older than a specified date (
MaxHistoricalDate)
Exchange Filtering
The service automatically filters by exchange based on your geographic settings:- US Exchanges: NYSE, NASDAQ, AMEX, ARCA, OTC, OTCBB, PINX, PINK, BATS, IEX
- Canadian Exchanges: TSX, TSXV, CSE, CNSX
Content Transformation
The webhook engine supports content transformation for specific data types. Transformations are applied based on your webhook configuration and may include:- Field renaming
- Data format conversion
- Field filtering/removal
Best Practices
1. Idempotency
Use theid field (UUID) in the payload to implement idempotency. Store processed delivery IDs to avoid duplicate processing.
2. Response Handling
- Return
200 OKor204 No Contentimmediately upon receiving the webhook - Process the data asynchronously if needed
- Don’t perform long-running operations before responding
3. Error Handling
- Return appropriate HTTP status codes
- For authentication errors (401-403), ensure your endpoint is properly configured
- For temporary failures, return 5xx status codes to trigger retries
4. Security
- Use HTTPS for your webhook endpoint
- Implement authentication/authorization (API keys, tokens, etc.)
- Validate the
X-BZ-Deliveryheader for additional security
5. Monitoring
- Monitor your endpoint’s response times
- Set up alerts for repeated failures
- Track the
X-BZ-Deliveryheader to identify delivery attempts
6. Data Type Handling
- Check the
kindfield to determine the data type - Parse the
contentobject based on the data type structure - Handle different action formats (capitalized vs lowercase) if supporting legacy keys
Example Webhook Handler
Python (Flask)
Node.js (Express)
Go
Troubleshooting
Common Issues
-
No webhooks received
- Verify your webhook URL is correctly configured
- Check that your endpoint is publicly accessible
- Ensure your API key is valid and active
- Verify filters aren’t excluding all data types
- Check that your geographic filters match the data you expect
-
Duplicate deliveries
- Implement idempotency using the
idfield - Check your endpoint’s response times (slow responses may cause retries)
- Implement idempotency using the
-
Authentication errors (401-403)
- Verify your endpoint’s authentication configuration
- Check API keys and tokens
- Note: Authentication errors halt retries immediately
-
Timeout errors
- Ensure your endpoint responds within 30 seconds
- Process data asynchronously if needed
- Return success immediately and process later
-
Unexpected action format
- Check if you’re using a legacy webhook key (lowercase actions)
- Update to a new webhook key to receive capitalized actions
- Handle both formats if supporting multiple clients
-
Missing data types
- Verify your webhook configuration includes the desired data types
- Check geographic filters (US/Canada/India settings)
- Ensure date filters aren’t excluding recent data
Support
For questions or issues with webhook delivery:- Check the Benzinga API Documentation
- Contact your Benzinga account representative
- Review webhook configuration with your integration team
Version History
- v1.0.0: Initial data webhook service release
- Current: Enhanced filtering, transformation, and retry mechanisms