Skip to content

Help Center / Developers

Get notified when things happen (webhooks)

Turn on webhooks so your systems hear about new applications, approvals, payments and more as they happen. Includes every event, the message format and how to check it is really from Slate.

6 min read · Updated November 10, 2026

Screenshot of the Slate partner dashboard: Webhooks

A webhook is a message Slate sends to your system the moment something happens, such as an application being approved. Your developers set up a web address to receive these messages.

Find it in the menu on the left: Developers, then Webhooks. You'll need a web address (URL) on your server that can receive messages.

Turn on webhooks

Open the Webhooks page

Select Developers in the menu on the left, then select Webhooks. Webhooks are off until you switch them on.

The Webhooks page with the Webhooks menu item and the Enable Webhooks switch numbered
  1. Webhooks: the page.
  2. Enable Webhooks: turns notifications on for your organization.

Select Enable Webhooks

Turn the switch on. A panel loads below it, where you manage your endpoints.

Add an endpoint and choose events

An endpoint is the web address Slate sends messages to. In the panel below the switch, you can:

  • Add an endpoint by entering its URL. For a test, you can use a placeholder such as https://example.com/webhooks/slate.
  • Choose which events that endpoint receives. Pick only the ones you need.
  • See each endpoint's signing secret. It starts with whsec_.
  • See the messages Slate sent, and whether they arrived.

The panel is provided by Svix, Slate's webhook partner, and follows your light or dark theme. Its screens may look slightly different from the rest of the dashboard.

What a message looks like

Every event has the same shape.

{
  "event_type": "application.approved",
  "data": { "id": "123e4567-e89b-12d3-a456-426614174000" },
  "timestamp": "2026-01-01T00:00:00Z"
}
  • event_type: which event happened.
  • data.id: the ID of the customer, application, agreement or other item the event is about.
  • timestamp: when it happened.

Some events add more fields inside data. They are listed below. Money amounts are in cents.

Check that a message is really from Slate

Every message is signed. Your developers should check the signature before trusting a message. Each request carries three headers:

  • svix-id: a unique ID for the message. It stays the same if the message is sent again.
  • svix-timestamp: when it was sent.
  • svix-signature: the signature.

Your developers use the endpoint's whsec_ signing secret to verify these. Svix provides ready-made libraries for most languages, and its guide is at docs.svix.com/receiving/verifying-payloads/how.

If your system is down

Slate retries failed messages automatically. The dashboard describes webhooks as "automatically retried on failure". Make your endpoint reply quickly with a success status, and fetch details afterwards.

Every event

Customers and businesses

  • customer.created: a customer was added.
  • customer.updated: a customer's details changed.
  • customer.product-changed: a customer moved between Capital and Credit line. Adds previousProductType and productType.
  • business.created: a business was added.
  • business.updated: a business's details changed.
  • business.financial-data.attached: financial data was added to a business.

Offers

  • preapproval.created: a new offer was made for a customer.
  • preapproval.expired: an offer ran out of time.
  • preapproval.consumed: an offer was used by an approved application.
  • opportunity.offer.created: Slate spotted a good moment and published an offer. Comes with preapproval.created, and adds customerId and description.

Applications

  • application.created: an application was started.
  • application.submitted: the customer submitted it.
  • application.bank.verified: the customer's bank account was verified.
  • application.ready-to-accept: the customer can now review and sign.
  • application.terms-countered: Slate offered different terms. Adds the new amount, term, termUnit, paymentFrequency, paymentAmount, numberOfPayments, totalAmount and expiresAt. Sent again for every new counter.
  • application.approved: the application was approved.
  • application.rejected: the application was turned down. Adds rejectedReasons.
  • application.expired: the customer did not confirm the terms in time.

Financing agreements

  • financing-agreement.created: an agreement was created.
  • financing-agreement.disbursed: the funds were sent.
  • financing-agreement.payment.initiated: a payment was started. Adds amount and currency.
  • financing-agreement.repayment: a payment was received.
  • financing-agreement.payment.failed: a payment was returned or cancelled by the bank. Adds amount and currency.
  • financing-agreement.completed: the agreement was fully paid.
  • financing-agreement.defaulted: the agreement went into default.

Credit lines

  • credit-line.approved: a credit line application was approved. Adds approvedFacilityLimit.
  • credit-line.created: the credit line was set up.
  • credit-line.statement-ready: a billing statement is ready.
  • credit-line.suspended: the line was suspended, for example after an unpaid amount.
  • credit-line.reinstated: a suspended line is active again.
  • credit-line.limit-changed: Slate raised or lowered the limit. Adds previousFacilityLimit, facilityLimit and currency.
  • credit-line.bank-reconnection-requested: the customer must link their bank again. Adds deadline.
  • credit-line.bank-reconnected: the customer linked their bank again.
  • credit-line.draw.created: a draw was started on the line. Adds financingAgreementId.
  • credit-line.draw.funded: a draw was funded.
  • credit-line.draw.repaid: a draw was paid back. Adds financingAgreementId.

Early Wage Access requests

  • finance-request.created: a request was created.
  • finance-request.in-progress: the worker started the application.
  • finance-request.submitted: the application was submitted.
  • finance-request.approved: the request was approved.
  • finance-request.declined: the request was declined.
  • finance-request.canceled: the request was cancelled.
  • finance-request.expired: the request ran out of time.

If something goes wrong

The switch will not turn on

You see "Something went wrong. Please try again." Try once more. If it keeps happening, contact Slate support from the Need help? button.

The panel below the switch is blank

Reload the page. The panel's sign-in link is renewed automatically, but it can fail to load. If it stays blank, contact Slate support.

My messages are not arriving

Check that the URL is public and spelled correctly, and that your endpoint replies with a success status. Then look at the message list in the panel to see what Slate tried.

Learn more about how Slate goes into your product.

Still stuck? Email [email protected] with your account email and the screen you are on. We reply within 24 business hours.