About webhooks
Integrations
If you are experiencing issues with webhooks, it could be because the webhook request content-type header has changed from application/json to application/jwt. Read the full details here. We apologize for any inconvenience.
Webhooks are outbound HTTPS requests that Kinde sends when a specified event occurs. Each request is delivered to an external URL you configure.
Use Kinde webhooks to subscribe to event triggers and push event data to your other systems and applications.
Webhook limits apply if you are on the Kinde free plan. See all plans.
Webhook request payloads are signed and sent as a JSON Web Token (JWT) from Kinde.
If you’re using a library to validate JWTs, you’ll need the URL for your public JSON Web Key Set (JWKS). The JWKS file is available at https://<your_subdomain>.kinde.com/.well-known/jwks.
If you’re using a JavaScript backend, you can use the Kinde webhooks decoder to decode and verify the JWT. See the webhooks decoder section for details.
Everything you can do with webhooks in the Kinde dashboard, you can also do through the Kinde API using these endpoints.
GET /api/v1/webhooks — list available webhooksPOST /api/v1/webhooks — create a webhookPATCH /api/v1/webhooks/{webhook_id} — update a webhookDELETE /api/v1/webhooks/{webhook_id} — delete a webhookEvents can also be retrieved using:
GET /api/v1/event_types — list available event typesGET /api/v1/events/{event_id} — get an event by its event_id from a webhook payloadLearn more in the Kinde Management API reference.
organization.created;user.created;user.authentication_failed;user.authenticated;subscriber.created;access_request.created;passkey.added;passkey.removed;role.created;role.updated;role.deleted;permission.created;permission.updated;permission.deleted;organization.updated;organization.deleted;user.updated;user.deleted;customer.agreement_cancelled;customer.agreement_created;customer.invoice_overdue;customer.meter_usage_updated;customer.payment_failed;customer.payment_succeeded;customer.plan_created;customer.plan_assigned;customer.plan_changed;The user.created trigger does not fire when you import users.
To use webhooks, you need a publicly available URL. To test locally, use a proxy to expose your local instance on the internet.
Here are a couple of free tools to help you do this.
--subdomain attribute to fix the issued subdomain.Each of these services exposes a local port through a public URL that can be set as your webhook endpoint.
You can also use the webhook.site to check the webhook request payload and headers.