> For the complete documentation index, see [llms.txt](https://docs.umbraco.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.umbraco.com/umbraco-automate/17.latest/extending/extending.md).

# Overview

Create custom triggers, actions, and connection types in C# to extend Umbraco Automate with your own functionality.

Umbraco Automate can be extended in C#. Add new triggers, actions, and connection types as part of your project or distribute them as NuGet packages.

## Available Extension Points

Choose the extension point that matches the behavior you want to add.

| Extension Point                                                                                         | Use Case                                                                                   |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| [Create a Custom Trigger](/umbraco-automate/17.latest/extending/custom-trigger.md)                      | React to a domain event or external signal that is not covered by the built-in triggers.   |
| [Create a Custom Action](/umbraco-automate/17.latest/extending/custom-action.md)                        | Add a new unit of work that automations can use as a step.                                 |
| [Create a Custom Connection Type](/umbraco-automate/17.latest/extending/custom-connection-type.md)      | Add a new credential type for an external service.                                         |
| [Schedule and Webhook Triggers](/umbraco-automate/17.latest/extending/schedule-and-webhook-triggers.md) | Fire a trigger on a cron schedule, from an inbound webhook, or from a non-Umbraco event.   |
| [Control What Runs](/umbraco-automate/17.latest/extending/controlling-execution.md)                     | Gate trigger dispatch, stop automation-triggered cycles, or wrap every action's execution. |
| [Additional Action Behavior](/umbraco-automate/17.latest/extending/action-behavior.md)                  | Give an action a dynamic output schema, an audit trail entry, or export-time redaction.    |

## How Discovery Works

Triggers, actions, and connection types are auto-discovered at startup using Umbraco's type loader. Apply the relevant attribute (`[Trigger]`, `[Action]`, or `[ConnectionType]`) and inherit from the right base class. No manual registration is needed.

Some extension points need explicit registration instead of attribute discovery — webhook authenticators, trigger dispatch authorizers, and action middleware. See the relevant article above for the registration call each one needs.

## See Also

* [Triggers](/umbraco-automate/17.latest/concepts/triggers.md)
* [Actions](/umbraco-automate/17.latest/concepts/actions.md)
* [Connections](/umbraco-automate/17.latest/concepts/connections.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.umbraco.com/umbraco-automate/17.latest/extending/extending.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
