diff --git a/docs/config/config-file.mdx b/docs/config/config-file.mdx
index f5ff2a14f0..28903af710 100644
--- a/docs/config/config-file.mdx
+++ b/docs/config/config-file.mdx
@@ -397,10 +397,12 @@ This is usually required if you are using certain ORMs, like TypeORM, that requi
If you are using Prisma, you should use the prisma build extension.
-- Automatically handles copying prisma files to the build directory.
-- Generates the prisma client during the deploy process
+- Automatically handles copying Prisma files to the build directory
+- Generates the Prisma client during the deploy process
- Optionally will migrate the database during the deploy process
-- Support for TypedSQL and multiple schema files.
+- Support for TypedSQL and multiple schema files
+- You can use `prismaSchemaFolder` to specify just the directory containing your schema file, instead of the full path
+- You can add the extension twice if you have multiple separate schemas in the same project (example below)
You can use it for a simple Prisma setup like this:
@@ -522,6 +524,21 @@ These environment variables are only used during the build process and are not e
+If you have multiple separate schemas in the same project you can add the extension multiple times:
+
+```ts
+prismaExtension({
+ schema: 'prisma/schema/main.prisma',
+ version: '6.2.0',
+ migrate: false,
+}),
+prismaExtension({
+ schema: 'prisma/schema/secondary.prisma',
+ version: '6.2.0',
+ migrate: false,
+}),
+```
+
#### syncEnvVars
The `syncEnvVars` build extension replaces the deprecated `resolveEnvVars` export. Check out our [syncEnvVars documentation](/deploy-environment-variables#sync-env-vars-from-another-service) for more information.
diff --git a/docs/idempotency.mdx b/docs/idempotency.mdx
index 7e3743fff6..e9400a77eb 100644
--- a/docs/idempotency.mdx
+++ b/docs/idempotency.mdx
@@ -94,6 +94,14 @@ await tasks.batchTrigger("my-task", [
## `idempotencyKeyTTL` option
+The `idempotencyKeyTTL` option defines a time window during which a task with the same idempotency key will only run once. Here's how it works:
+
+1. When you trigger a task with an idempotency key and set `idempotencyKeyTTL: "5m"`, it creates a 5-minute window.
+2. During this window, any subsequent triggers with the same idempotency key will return the original task run instead of creating a new one.
+3. Once the TTL window expires, the next trigger with that idempotency key will create a new task run and start a new time window.
+
+
+
By default idempotency keys are stored for 30 days. You can change this by passing the `idempotencyKeyTTL` option when triggering a task:
```ts
diff --git a/docs/images/idempotency-key-ttl.png b/docs/images/idempotency-key-ttl.png
new file mode 100644
index 0000000000..2da392940f
Binary files /dev/null and b/docs/images/idempotency-key-ttl.png differ
diff --git a/docs/limits.mdx b/docs/limits.mdx
index 3e64745cd3..fe1522b051 100644
--- a/docs/limits.mdx
+++ b/docs/limits.mdx
@@ -114,7 +114,7 @@ We limit the size of logs to prevent oversized data potentially causing issues.
## Alerts
-An alert destination is a single email address, Slack channel, or webhook URL that you want to send alerts to. If you're on the Pro and need more than 100 alert destinations, you can request more by contacting us via [email](https://trigger.dev/contact) or [Discord](https://trigger.dev/discord).
+An alert destination is a single email address, Slack channel, or webhook URL that you want to send alerts to. If you're on the Pro plan and need more than the plan limit, you can request more by contacting us via [email](https://trigger.dev/contact) or [Discord](https://trigger.dev/discord).
| Pricing tier | Limit |
| :----------- | :---------------------- |
diff --git a/docs/runs.mdx b/docs/runs.mdx
index 9ffe6d05c4..6de858b682 100644
--- a/docs/runs.mdx
+++ b/docs/runs.mdx
@@ -133,7 +133,9 @@ You can set a TTL when triggering a run:
await yourTask.trigger({ foo: "bar" }, { ttl: "10m" });
```
-If the run hasn't started within the specified TTL, it will automatically expire. This is useful for time-sensitive tasks. Note that dev runs automatically have a 10-minute TTL.
+If the run hasn't started within the specified TTL, it will automatically expire, returning the status `Expired`. This is useful for time-sensitive tasks where immediate execution is important. For example, when you queue many runs simultaneously and exceed your concurrency limits, some runs might be delayed - using TTL ensures they only execute if they can start within your specified timeframe.
+
+Note that dev runs automatically have a 10-minute TTL. In Staging and Production environments, no TTL is set by default.

diff --git a/docs/troubleshooting-alerts.mdx b/docs/troubleshooting-alerts.mdx
index 2bbd8e8233..b79ddb05cf 100644
--- a/docs/troubleshooting-alerts.mdx
+++ b/docs/troubleshooting-alerts.mdx
@@ -94,3 +94,292 @@ export async function action({ request }: ActionFunctionArgs) {
}
}
```
+
+### Common properties
+
+When you create a webhook alert, you'll receive different payloads depending on the type of alert. All webhooks share some common properties:
+
+
+ A unique identifier for this webhook event
+
+
+
+ When this webhook event was created
+
+
+
+ The version of the webhook payload format
+
+
+
+ The type of alert webhook. One of: `alert.run.failed`, `alert.deployment.success`, or `alert.deployment.failed`
+
+
+### Run Failed Alert
+
+This webhook is sent when a run fails. The payload is available on the `object` property:
+
+
+ Unique identifier for the task
+
+
+
+ File path where the task is defined
+
+
+
+ Name of the exported task function
+
+
+
+ Version of the task
+
+
+
+ Version of the SDK used
+
+
+
+ Version of the CLI used
+
+
+
+ Unique identifier for the run
+
+
+
+ Run number
+
+
+
+ Current status of the run
+
+
+
+ When the run was created
+
+
+
+ When the run started executing
+
+
+
+ When the run finished executing
+
+
+
+ Whether this is a test run
+
+
+
+ Idempotency key for the run
+
+
+
+ Associated tags
+
+
+
+ Error information
+
+
+
+ Whether the run was an out-of-memory error
+
+
+
+ Machine preset used for the run
+
+
+
+ URL to view the run in the dashboard
+
+
+
+ Environment ID
+
+
+
+ Environment type (STAGING or PRODUCTION)
+
+
+
+ Environment slug
+
+
+
+ Organization ID
+
+
+
+ Organization slug
+
+
+
+ Organization name
+
+
+
+ Project ID
+
+
+
+ Project reference
+
+
+
+ Project slug
+
+
+
+ Project name
+
+
+### Deployment Success Alert
+
+This webhook is sent when a deployment succeeds. The payload is available on the `object` property:
+
+
+ Deployment ID
+
+
+
+ Deployment status
+
+
+
+ Deployment version
+
+
+
+ Short code identifier
+
+
+
+ When the deployment completed
+
+
+
+ Array of deployed tasks with properties: id, filePath, exportName, and triggerSource
+
+
+
+ Environment ID
+
+
+
+ Environment type (STAGING or PRODUCTION)
+
+
+
+ Environment slug
+
+
+
+ Organization ID
+
+
+
+ Organization slug
+
+
+
+ Organization name
+
+
+
+ Project ID
+
+
+
+ Project reference
+
+
+
+ Project slug
+
+
+
+ Project name
+
+
+### Deployment Failed Alert
+
+This webhook is sent when a deployment fails. The payload is available on the `object` property:
+
+
+ Deployment ID
+
+
+
+ Deployment status
+
+
+
+ Deployment version
+
+
+
+ Short code identifier
+
+
+
+ When the deployment failed
+
+
+
+ Error name
+
+
+
+ Error message
+
+
+
+ Error stack trace (optional)
+
+
+
+ Standard error output (optional)
+
+
+
+ Environment ID
+
+
+
+ Environment type (STAGING or PRODUCTION)
+
+
+
+ Environment slug
+
+
+
+ Organization ID
+
+
+
+ Organization slug
+
+
+
+ Organization name
+
+
+
+ Project ID
+
+
+
+ Project reference
+
+
+
+ Project slug
+
+
+
+ Project name
+
+