Bolsivo API & Webhooks
Connect Bolsivo to your CRM, Zapier workflows, or internal tools using the REST API and real-time webhook events. Available on the Scale plan.
Authentication
API keys follow the format lp_ + 32 hex characters. Keys are generated once and shown to you — Bolsivo stores only the SHA-256 hash. Treat your key like a password.
Generate an API key
Settings → API Keys → Create key. You can create multiple named keys and revoke any individually.
Plan requirement
API access and webhooks are available on the Scale plan only. Upgrade in Settings → Billing.
Send your API key in the Authorization header:
curl https://bolsivo.com/api/leads \ -H "Authorization: Bearer lp_your_api_key_here" \ -H "Content-Type: application/json"
Never expose API keys in client-side code or commit them to version control. Use environment variables. Keys can be revoked instantly from Settings if compromised.
Webhooks
Bolsivo sends real-time POST requests to your endpoint when key events occur. Each webhook delivery includes an X-Bolsivo-Signature header for verification.
Signature verification
Every delivery includes an HMAC-SHA256 signature of the raw request body, signed with the secret generated when you created the webhook endpoint. Always verify before processing.
import crypto from 'crypto'
export function verifyBolsivoWebhook(
rawBody: string,
signature: string,
secret: string,
): boolean {
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex')
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected),
)
}Supported events
Fired when a lead's AI score meets your minimum threshold and it moves to Qualified status.
{
"event": "lead.qualified",
"org_id": "org_abc123",
"lead_id": "lead_xyz789",
"business_name": "Sunrise Office Park",
"score": 82,
"fit_reason": "Active office park in Bellevue with 180+ reviews",
"timestamp": "2026-06-20T14:32:10Z"
}Fires on every lead status transition (new → qualified → contacted → replied → meeting → closed_won / closed_lost).
{
"event": "lead.status_changed",
"org_id": "org_abc123",
"lead_id": "lead_xyz789",
"business_name": "Sunrise Office Park",
"previous_status": "contacted",
"new_status": "replied",
"timestamp": "2026-06-20T14:32:10Z"
}Fired after you approve and send an outreach email to a lead.
{
"event": "email.sent",
"org_id": "org_abc123",
"lead_id": "lead_xyz789",
"email_id": "draft_def456",
"to": "manager@sunriseofficepark.com",
"subject": "Quick question for Sunrise Office Park",
"sequence_step": 1,
"timestamp": "2026-06-20T14:32:10Z"
}Register a webhook endpoint
curl -X POST https://bolsivo.com/api/webhooks \
-H "Authorization: Bearer lp_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "My CRM sync",
"target_url": "https://your-server.com/bolsivo-events",
"event_types": ["lead.qualified", "lead.status_changed", "email.sent"]
}'The response includes a secret field — store this immediately. It is shown only once and cannot be recovered.
Rate limits & retries
API requests
1,000 / hour
Per API key
Webhook retries
3 attempts
30s, 5min, 30min backoff
Webhook timeout
10 seconds
Per delivery attempt
429 Rate limited?
When rate limited, the response includes a Retry-After header indicating seconds to wait. Implement exponential backoff for robust integrations.
Response format & errors
All responses are JSON. Successful responses return 2xx. Errors return a structured body:
{
"error": "name, target_url and event_types required"
}| Status | Meaning |
|---|---|
200 | Success |
201 | Created (new webhook or API key) |
400 | Bad request — missing or invalid parameters |
401 | Unauthorized — missing or invalid API key |
403 | Forbidden — Scale plan required |
404 | Resource not found |
429 | Rate limited — wait for Retry-After |
500 | Server error — retry with backoff |
Common integration patterns
CRM sync
Listen for lead.status_changed events and mirror status updates into your CRM. When status becomes "closed_won", create a customer record automatically.
Zapier / Make
Use the webhook URL as a Zapier "Catch Hook" trigger. Map Bolsivo events to create Trello cards, send Slack notifications, or update Google Sheets.
Instant CRM records
Trigger on lead.qualified to instantly create a CRM contact with the lead's business name, address, phone, score, and fit reason pre-filled.
Analytics pipeline
Forward email.sent and lead.status_changed events to your data warehouse to build custom funnel reports and measure outreach ROI.
Need a custom integration?
The Luna Enterprise plan includes a dedicated account manager and custom onboarding. We can help you build the integration your team needs.