Webhooks
Boom sends real-time webhook notifications to your server when key events occur in BoomReport (rent reporting) and BoomScreen (tenant screening). Use webhooks to keep your systems in sync — for example, updating a tenant's status when their enrollment is approved, or triggering an internal workflow when a screening application is submitted.
How it works
- All webhooks are sent as POST requests with Content-Type: application/json
- Every payload includes an event field identifying the event type, plus a unique request_id
- If your server returns a non-2xx status or is unreachable, we retry 2 times at 1-minute intervals
- Webhook URLs are configured in Settings → Webhooks.
Authenticating webhooks
- Each webhook request can include an X-API-KEY header with the secret token configured for your webhook endpoint
- Validate this token on your server to verify the request is from Boom
Every message contains an event parameter describing its type. Other fields depend on type
Webhooks can be configured in Settings -> Webhooks.
Currently supported events
Boom Report Events
Event | Description |
|---|---|
customer_registered | Sent when a customer is created in Boom (via API or partner portal). The customer has provided name, phone, and email but has not yet started enrollment. Payload: { "event": "customer_registered", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123" } |
enrollment_pending | The customer completed their enrollment application. Identity, lease, and landlord verifications are now in progress. Payload: { "event": "enrollment_pending", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", } |
enrollment_approved | All verifications passed and the enrollment is active. Rent payments will be reported to credit bureaus going forward. Payload: { "event": "enrollment_approved", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456" } |
enrollment_rejected | The enrollment was rejected due to a failed verification (identity, lease, or landlord). The customer will not be reported. Payload: { "event": "enrollment_rejected", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456" } |
customer_unenrolled | The customer was unenrolled from rent reporting. Can be customer-initiated, partner-initiated, or system-initiated (45-day verification timeout). Check the reason field for system-initiated unenrollments. Unenrollment reasons:
Payload: { "event": "customer_unenrolled", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", "reasons": ["identity_verification_pending"] } |
furnishment_finished | A rent payment was reported to a credit bureau for a specific month. Sent once per bureau per reporting cycle. Includes bureau name and rental_verification details with the reported month and status. Payload: { "event": "furnishment_finished", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", "bureau": "experian", "rental_verification": { "id": "rv_ghi012", "for_month": "2026-03-01", "status": "pending_confirmation", "months_delinquency": 0 } } |
issue_pending | An issue was detected with the enrollment that requires customer action (e.g., failed bank verification, lease mismatch). The customer has been notified. Payload: { "event": "issue_pending", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", "slug": "bank_verification_failed", "title": "Bank Verification Failed", "description": "We were unable to verify your bank account. Please reconnect your bank." } |
issue_resolved | A previously pending issue was resolved by the customer. The enrollment is back on track. Payload: { "event": "issue_resolved", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", "slug": "bank_verification_failed", "title": "Bank Verification Failed", "description": "We were unable to verify your bank account. Please reconnect your bank." } |
rental_payment_verified | A monthly rent payment was verified. Includes transaction details showing the matched bank transactions. Payload: { "event": "rental_payment_verified", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", "rental_verification_id": "rv_ghi012", "for_month": "2026-03-01", "transactions": [ { "name": "RENT PAYMENT", "amount": 150000, "source": "plaid", "external_id": "txn_abc123" } ] } Note: amount is in cents (e.g., 150000 = $1,500.00). |
enrollment_verification_verified | An enrollment verification step (identity, lease, or landlord) was approved. The kind field indicates which verification type. kind: identity, lease, landlord review_method: automatic, manual Payload: { "event": "enrollment_verification_verified", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", "verification_id": "ver_jkl012", "kind": "lease", "memo": "", "review_method": "automatic" } |
enrollment_verification_rejected | An enrollment verification step was rejected. The kind field indicates which type, and memo may contain additional context. kind: identity, lease, landlord review_method: automatic, manual Payload: { "event": "enrollment_verification_rejected", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456", "verification_id": "ver_jkl012", "kind": "lease", "memo": "", "review_method": "automatic" } |
enrollment_moved_out | The customer was marked as moved out of their rental unit. Reporting will stop for this enrollment. Payload: { "event": "enrollment_moved_out", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "enrollment_id": "enr_def456" } |
boomreport_plaid_link_visited | Sent when the customer visits the generated Plaid bank linking URL Payload: { "event": "boomreport_plaid_link_visited", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "customer_id": "cust_abc123", "customer_first_name": "Jane", "customer_last_name": "Doe", "customer_email": "[email protected]", "customer_phone": "15551234567", "customer_created_at": "2026-01-15T10:30:00Z" } |
boomreport_plaid_link_requested | Sent when the customer clicks "copy" or "request" on their Plaid bank linking URL Payload: { "event": "boomreport_plaid_link_requested", "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "plaid_connect_url": "https://cdn.plaid.com/link/v2/...", "customer_id": "cust_abc123", "customer_first_name": "Jane", "customer_last_name": "Doe", "customer_email": "[email protected]", "customer_phone": "15551234567", "customer_created_at": "2026-01-15T10:30:00Z" } |
Boom Screen Events
Event | Description | Other fields |
|---|---|---|
application_approved | Emitted in case application is approved. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_conditionally_approved | Emitted in case application is conditionally approved. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_canceled | Emitted in case application is canceled. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_declined | Emitted in case application is declined. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
applicant_submitted | Emitted in case applicant submitted. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
applicant_started | Emitted in case applicant started. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_submitted | Emitted in case application is submitted. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_updated | Emitted in case application is updated. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_started | Emitted in case application is started. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
applicant_created | (Deprecated) Emitted in case applicant created. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_created | (Deprecated) Emitted in case application created. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at |
applicant_completed | (Deprecated) Emitted in case applicant completed the application. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_completed | (Deprecated) Emitted in case application is completed. | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id |
application_merged | Emittedin case applications are merged | event:
target_application_id:
target_application_url:
merged_application_ids:
merged_at:
merged_by: |
identity_verification_finished | When a lead or an applicant finish identity verification | event:
status:
lead_id:
first_name:
last_name:
email:
phone:
identity_verification_finished:
external_customer_id:
created_at:
updated_at: application_status:
applicant_id:
application_id:
role:
finished_at: |
identity_verification_expired | When an identity verification expires (30 days since it last finished) | event:
status:
lead_id:
first_name:
last_name:
email:
phone:
identity_verification_finished:
external_customer_id:
created_at:
updated_at: application_status:
applicant_id:
application_id:
role:
finished_at: |
push_applicants_to_property_management_system | When applicants are pushed to property management system | event:
dependents:
pets
first_name
last_name
phone
email
desired_move_in_date
unit
address
monthly_rent_amount
status
created_at
application_updated_at
external_id
pms_push_status
error_message |
applicant_invite_followup | Triggered after configurable delay when an invited applicant hasn't started their application. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
applicant_identity_followup | Triggered after configurable delay when an applicant hasn't completed identity verification. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
applicant_income_followup | Triggered after configurable delay when an applicant hasn't completed income verification. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
applicant_checkout_followup | Triggered after configurable delay when an applicant finished verifications but hasn't submitted. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
pet_screening_requested | Triggered when a pet screening is requested for an applicant. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
application_under_review | Triggered when a group application is submitted and enters review status. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
applicant_receipt | Triggered when the application fee payment receipt email is sent. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
application_decision_reverted | Triggered when an application decision is reversed/undone. | event: lead_id: invited_lead: inviting_applicant: dependents: pets: applicants: desired_move_in_date: unit: unit_object: property: monthly_rent_amount: status: portal_url: id: reasons: created_at: application_updated_at: external_id: |
application_assigned_to_user | Emitted when team members are assigned to or removed from an application. unassigned is true when no one was newly assigned. | event:
application_id:
assigned_users:
newly_assigned_users:
unassigned_users:
assigned_at:
unassigned: |
Boom CRM Events
Event | Description | Other fields |
|---|---|---|
lead_created | Emitted when a lead is created. | event:
lead_id:
first_name:
last_name:
email:
phone:
source:
property_id:
property_name:
unit_id:
unit_name:
created_at: |
lead_assigned_to_user | Emitted when team members are assigned to or removed from a lead. unassigned is true when no one was newly assigned. | event:
lead_id:
assigned_users:
newly_assigned_users:
unassigned_users:
assigned_at:
unassigned: |
lead_status_changed | Emitted when a lead moves to a different pipeline stage. | event:
lead_id:
previous_stage_id:
previous_stage:
new_stage_id:
new_stage:
property_id:
property_name:
unit_id:
unit_name:
changed_at: |
showing_requested | Emitted when a showing is booked. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at: |
showing_scheduled | Emitted when the showing time is accepted by your team or confirmed automatically. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at:
confirmed_at: |
showing_confirmed | Emitted when the lead confirms they will attend a guided showing. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at:
lead_confirmed_at: |
showing_checked_in | Emitted when the lead checks in to a self-guided showing or is sent the lockbox code. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at:
checked_in_at: |
showing_rescheduled | Emitted when a showing is moved to a new time. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at:
previous_scheduled_at:
previous_end_at:
rescheduled_by:
rescheduled_by_user:
confirmed_at: |
showing_completed | Emitted when a showing is marked completed. Not emitted for no-shows. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at:
completed_at: |
showing_canceled | Emitted when a showing is canceled. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at:
originally_scheduled_at:
canceled_at:
canceled_by:
canceled_by_user: |
showing_no_show | Emitted when a showing is marked as a no-show. | event:
showing_id:
lead_id:
lead_name:
property_id:
property_name:
unit_id:
unit_name:
showing_type:
scheduled_at:
status:
created_at:
marked_no_show_at: |