Skip to main content
Managed webhooks are available to integrations explicitly configured by Finosu. Contact Finosu to confirm eligibility and configure your company. Select individual subscriptions within Payments, Texts, Calls, and Emails. Setup tests are not subscriptions. This reference and the webhook editor use the same backend catalog. The sender validates the complete envelope and event data against that contract before saving a delivery. Examples below contain fictional identifiers. Receivers should tolerate additional fields for forward compatibility. The JSON schemas below are strict sender-side contracts: additionalProperties: false prevents accidental disclosure when Finosu creates a delivery. Receivers using these schemas must allow unknown properties at every object level, including nested objects and $defs, while still validating known fields, signatures, company, and environment.

Request and acceptance

Finosu sends an HTTPS POST with Content-Type: application/json, X-Finosu-Signature: t=<unix-seconds>,v1=<hmac>, and an Idempotency-Key that identifies the endpoint delivery. An optional configured bearer token is sent in Authorization. Verify the raw-body signature, check company and environment, then durably deduplicate and enqueue before returning 2xx. Return 2xx for an already accepted duplicate. See delivery and retries for failures, ordering, pauses, and retry limits. These events never authorize another charge or send. occurred_at is consumer capture time. Text/email events separately expose data.sent_at; calls expose data.started_at for their supported source signal. A successful dispatch does not prove a text/email was delivered, a borrower answered, or content was read. Publication gaps before the delivery queue are not repaired by HTTP retries; there is no historical catch-up API. Test-customer events use the same event names and subscriptions with test: true. Accept and deduplicate them, but never apply them to live accounts. They do not verify endpoint setup or bypass activation/pause. The separate webhook.test event remains the explicit synthetic endpoint-verification signal.

Common envelope

subject

references

Events

payment.succeeded

Group: Payments. Subscribable: Yes. A payment has a confirmed successful outcome. Pending ACH submission is excluded. When: A supported payment notification is consumed and the persisted transaction is SUCCESSFUL. Use for: Reconcile a confirmed successful payment allocation. Coverage and limits: The consumer reads current committed state. A return can supersede an unconsumed success. Pending ACH, deleted records, test loans for non-test customers, and invalid customer/loan/company scope are excluded. Test-customer outcomes use normal subscriptions with test=true; never apply them to live accounts. Publication failures and exhausted consumer retries can lose notifications before enqueue. No historical backfill or catch-up API. Never initiate another debit from these events.

Data fields

Complete example

payment.failed

Group: Payments. Subscribable: Yes. A payment has a confirmed failed outcome. This does not authorize another charge. When: A supported payment notification is consumed and the persisted transaction is FAILED. Use for: Reconcile a failed payment attempt without submitting another charge. Coverage and limits: The consumer reads current committed state. A return can supersede an unconsumed success. Pending ACH, deleted records, test loans for non-test customers, and invalid customer/loan/company scope are excluded. Test-customer outcomes use normal subscriptions with test=true; never apply them to live accounts. Publication failures and exhausted consumer retries can lose notifications before enqueue. No historical backfill or catch-up API. Never initiate another debit from these events.

Data fields

Complete example

payment.returned

Group: Payments. Subscribable: Yes. A previously recorded payment was returned. Its identity and origin are retained. When: A return notification is consumed and the persisted transaction is RETURNED. Use for: Update the same payment’s recorded outcome to returned. Coverage and limits: The consumer reads current committed state. A return can supersede an unconsumed success. Pending ACH, deleted records, test loans for non-test customers, and invalid customer/loan/company scope are excluded. Test-customer outcomes use normal subscriptions with test=true; never apply them to live accounts. Publication failures and exhausted consumer retries can lose notifications before enqueue. No historical backfill or catch-up API. Never initiate another debit from these events.

Data fields

Complete example

text.sent

Group: Texts. Subscribable: Yes. An outbound text was accepted by the sending provider. When: The shared outbound text send path commits a successful provider acceptance, then the listener requires a saved outbound message with a provider message ID, current sent or delivered status, and valid tenant scope. Use for: Track an accepted outbound text using its Finosu message ID. Coverage and limits: Reports dispatch only, not delivery, answer, or engagement. Deleted customers and invalid tenant/loan scope are excluded. Content, recipients, credentials, and provider responses are omitted. Only the supported producer paths emit notifications; direct database writes and historical sends do not. Test-customer events use normal subscriptions with test=true; never apply them to live accounts. Publication failures and exhausted consumer retries can lose notifications before enqueue. Successful integrations that omit a provider message ID are not covered. A later failed status can suppress a delayed notification. Text loan references are null; no loan is guessed.

Data fields

Complete example

call.started

Group: Calls. Subscribable: Yes. An outbound call’s phone leg started dialing or became active. When: An authenticated phone-participant join reports dialing, ringing, or active for an outbound call, matching its acknowledged or saved pre-dispatch room, trunk, and recipient. Use for: Track the start of the outbound phone leg using the Finosu call ID. Coverage and limits: Reports dispatch only, not delivery, answer, or engagement. Deleted customers and invalid tenant/loan scope are excluded. Content, recipients, credentials, and provider responses are omitted. Only the supported producer paths emit notifications; direct database writes and historical sends do not. Test-customer events use normal subscriptions with test=true; never apply them to live accounts. Publication failures and exhausted consumer retries can lose notifications before enqueue. Queueing, agent dispatch acknowledgment, browser audio, room creation, and the preliminary call status alone do not qualify. Early joins can match the saved pre-dispatch room. Notification acceptance requires durable broker acknowledgment; failures permit provider notification retries without redialing. Calls without a matching join or with exhausted provider retries are not covered.

Data fields

Complete example

email.sent

Group: Emails. Subscribable: Yes. An outbound email was accepted by the sending provider. When: A successful shared email-pipeline completion notification matches a persisted successful-send audit for the same company, customer, loan, recipient, and provider message. Use for: Track an accepted outbound email using a stable opaque send identity. Coverage and limits: Reports dispatch only, not delivery, answer, or engagement. Deleted customers and invalid tenant/loan scope are excluded. Content, recipients, credentials, and provider responses are omitted. Only the supported producer paths emit notifications; direct database writes and historical sends do not. Test-customer events use normal subscriptions with test=true; never apply them to live accounts. Publication failures and exhausted consumer retries can lose notifications before enqueue. Skipped, deferred, failed, bounced, customerless, and unaudited sends are excluded. Email sends outside the shared completion-event path are not covered.

Data fields

Complete example

webhook.test

Group: Setup. Subscribable: No. Synthetic endpoint verification. When: Staff explicitly sends a synthetic test for the current endpoint configuration. Use for: Verify authentication and receiver acceptance before activation. Coverage and limits: Not a business subscription. Contains no borrower data. A test for an older configuration cannot verify a newer one.

Data fields

Complete example