Skip to main content
Custom Webhooks let you trigger a Duckie agent from any system that can send a JSON POST request. Use them when your source system is not one of Duckie’s built-in deployment channels, or when you need to shape a custom event payload into Duckie runs.

How Custom Webhooks Work

A Custom Webhook deployment has two parts: When Duckie receives a valid request, it checks the deployment’s event filtering, extracts the mapped fields, creates a run, inserts the mapped run messages, and queues the selected agent.

Create a Custom Webhook Deployment

1

Create a deployment

Go to Deploy, click Create Deployment, and choose the agent that should handle the webhook.
2

Choose Custom Webhook

In the trigger selector, choose Custom Webhook.
3

Name the endpoint

Enter an Endpoint Name. This name identifies the webhook endpoint in Duckie.
4

Choose a verification method

Select how Duckie should verify incoming requests.
5

Map the payload

Paste a sample JSON payload, parse the fields, and map the payload into run fields, run messages, and optional metadata.
6

Save and copy the webhook URL

Save the deployment. Duckie shows the generated webhook URL after the endpoint is created.

Webhook URL

After you save the deployment for the first time, Duckie shows a generated URL:
Send JSON POST requests to this URL. Duckie reads the request body as JSON, so non-JSON payloads are rejected.

Verification Methods

Choose a verification method before sending production traffic. For HMAC verification, configure the signature header and algorithm. Duckie supports the algorithms available in the selector, including SHA-256, SHA-1, and SHA-512. For token verification, the default header is X-Webhook-Token. Send the token as the header value:

Payload Mappings

Payload mappings tell Duckie how to turn your JSON payload into a run. Most mapping fields accept either: JSONPath reads a value from the payload. Templates combine literal text with dot-path placeholders from the payload.

Parse a Sample Payload

Paste a sample JSON payload into Sample JSON Payload and click Parse Fields. Duckie discovers scalar fields, suggests common mappings such as IDs and messages, and makes discovered fields available in mapping dropdowns. The parser accepts normal JSON, fenced JSON snippets, and common pasted object-literal formatting such as single quotes, unquoted keys, and trailing commas.

Run Fields

Run fields are required fields written to the run. Example mappings:

Run Messages

Run messages provide the conversation content the agent should respond to. Use Single message when each webhook payload contains one new message: Use Conversation array when the payload contains an array of messages or comments. Set Array Path to the array, then map message fields relative to each item in that array. Example payload:
Example conversation array mappings: When role is mapped from the payload, Duckie normalizes common values: If the mapped role is missing or unrecognized, Duckie uses the fallback role selected in the deployment.

Run Metadata

Run Metadata stores optional fields on the run for context. Use it for source-specific attributes such as account ID, priority, product area, locale, plan, or tags. You can add fields manually, or click Add Parsed Fields after parsing a sample payload.
Do not send secrets, credentials, or unnecessary sensitive fields in webhook payloads. Duckie stores the raw payload and mapped metadata with the run.

Event Filtering

Event filtering lets one webhook endpoint receive multiple event types while a deployment only processes the ones you allow. If you leave the allowed event types blank, Duckie accepts all event types for that deployment.

Request Outcomes

Duckie validates the request before it starts asynchronous processing. If filtering does not match, Duckie accepts the request but does not create a run for that deployment. If required mappings resolve to empty values, Duckie does not create a run for that deployment.

Test Before Going Live

  1. Create the deployment in Testing mode.
  2. Send a representative sample payload to the webhook URL.
  3. Open Analyze > Runs and review the created run.
  4. Confirm the title, ticket ID, messages, role mapping, and metadata look correct.
  5. Switch to Live mode after the mapping is validated.

Troubleshooting

Next Steps

Create Deployment

Set up a deployment

Deployment Modes

Test before live traffic

Runs

Review webhook-triggered runs

Duckie as an External Subagent

Let a customer-owned orchestration agent call Duckie with a webhook.