# Working with webhooks

If you are creating integrations that are dependent on 3rd-party webhooks, you may find that some policies are quite restrictive.

e.g. for **Jira Cloud**, the following constraints apply:

* For an **OAuth 2.0 app**, the limit is **5 webhooks per app** per user on a tenant
* A **single webhook url** can be registered per app
* Webhooks **expire every 30 days**

In such a case a solution you may need to implement is to set up **webhook proxies**.

This could be done natively in the Tray builder by:

1. **Creating a webhook-triggered workflow** to receive all webhooks from the 3rd party
2. **Building the necessary filtering logic into the workflow** (which you otherwise might have done with the 3rd party using e.g. Jira queries)
3. **Routing the payloads** to any required destinations

You would then need to **schedule a job**, after e.g. 29 days, to create a **new webhook with the 3rd party** (in the 3rd party admin UI or via API) with the same **destination URL of your Tray workflow**.

You could also build the above proxy system in your own external code outside of Tray.
