Why Webhooks?
Certain Baselayer products can take a few seconds to complete. During this time, the API is:- Querying authoritative data sources
- Scraping and analyzing websites
- Running AI-powered enrichment
- Performing multi-step verification workflows
Webhooks vs. API Polling
Recommendation: Use webhooks for production integrations. Baselayer’s async architecture is optimized for webhook delivery.
Setting Up Webhook Endpoints
Via Console (Recommended)
- Log into the Baselayer console
- Navigate to the Webhooks & Logs tab in the sidebar
- Click Add Endpoint

- Enter your endpoint parameters URL (must be HTTPS)
- Subscribe to the required events
- We recommend creating one single endpoint per event type

- Save the endpoint
- Copy your signing secret - you’ll need this to verify webhook signatures

whsec_C2FVsBQIhrscChlQIMV+b5sSYspob7oD
⚠️ Important: Your endpoint must use HTTPS. HTTP endpoints will be rejected.
Via API (Programmatic Setup)
You can also create webhook endpoints programmatically:cURL Example
Python Example
Understanding Webhook Events
Every webhook Baselayer sends includes standardized metadata and event-specific data.Event Structure
All webhook events include an__event__ field with metadata:
Common Event Patterns
Baselayer webhooks follow consistent naming patterns:.submitted- Request received and queued for processing.started- Processing has begun.completed- Processing finished successfully, data is ready.failed- Processing failed (insufficient data, invalid input, etc.).cancelled- Request was cancelled before completing.responded- A response was produced (webhook-only event; there is no matching resource state).updated- Initial results have been updated with additional data
Event Names vs. Resource state
Webhook event names are lowercase and describe something that happened. The state field on the resource itself is uppercase and describes where the request is in its lifecycle: PENDING, EXECUTING, COMPLETED, FAILED, or CANCELLED. They map as follows:
.responded and .updated are webhook-only events with no corresponding resource state.
Webhook Lifecycle Examples
Example 1: Standard Async Flow
Most Baselayer API calls follow this pattern:Sample BusinessSearch.completed Webhook
Example 2: Updated Events - TIN Retry
Some data may be unavailable initially but delivered later via.updated webhooks.
Scenario: IRS TIN Matching Temporarily Unavailable
Example 3: Updated Events - Liens/Docket Search
Requesting liens or dockets triggers an additional verification pass:.updated webhooks to ensure you have the most current data.
Webhook Delivery & Retries
Baselayer uses Svix for reliable webhook delivery.Retry Behavior
If your endpoint fails to respond with a 2xx status code, Baselayer will automatically retry:- Initial attempt: Immediate delivery
- Retry schedule: Exponential backoff over 5 attempts
- 5 seconds, 5 minutes, 30 minutes, 2 hours, final retry after 5 hours
Handling Retries in Your Code
Webhooks may be delivered more than once (retries, network issues, etc.). Implement idempotency using the event ID:Best Practices
1. Return 200 Quickly
Your webhook endpoint should acknowledge receipt immediately (within 5 seconds). Don’t perform long-running operations before returning 200, or Baselayer may time out and retry.2. Always Verify Signatures
Never trust webhook data without verification. See the Authentication guide for implementation details.3. Handle .updated Events
Some workflows (TIN verification, liens or docket searches) may send updated data after initial completion.
4. Implement Idempotency
Use the eventid field to prevent duplicate processing.
In production, store processed IDs in your database or cache.
5. Monitor Webhook Health
Regularly check the Baselayer console’s webhook dashboard for failed deliveries or high error rates. Failed webhooks can be manually replayed from the console.When to Use API Polling Instead
Webhooks are recommended for most use cases, but polling may be appropriate for:1. Synchronous Business Search
Business Search supports synchronous mode using theAccept header for immediate results:
cURL Example
Python Example
2. Testing & Development
For quick testing without webhook infrastructure:3. Simple One-Off Integrations
If you’re only running occasional searches and don’t want to set up webhook infrastructure, polling is acceptable. Important: For production use at scale, webhooks are significantly more efficient.Next Steps
Now that you understand webhooks, you’re ready to:- Authenticate your webhook endpoint (signature verification)
- Understand async vs. sync API patterns
- Start building with product-specific guides:
- Business Search
- Portfolio Monitoring
- Other products