> You are reading the Docusign Developer Documentation. For clean Markdown of any page, append .md to the page URL.
>
> Documentation indexes by section:
> - APIs and SDKs: https://docusign.docs.buildwithfern.com/docs/llms.txt
> - Platform 101: https://docusign.docs.buildwithfern.com/platform/llms.txt
> - Extension Apps: https://docusign.docs.buildwithfern.com/extension-apps/llms.txt
> - Docusign CLI: https://docusign.docs.buildwithfern.com/docusign-cli/llms.txt
>
> Authentication (OAuth, JWT Grant, M2M): https://docusign.docs.buildwithfern.com/platform/auth
> Webhooks and Connect: https://docusign.docs.buildwithfern.com/platform/webhooks
>
> OpenAPI specifications: https://docusign.docs.buildwithfern.com/openapi.json
> MCP server: https://docusign.docs.buildwithfern.com/_mcp/server

# Extensions and extension points

> Learn what extensions are and when their actions are triggered.

An extension contains the actions needed to support a type of external functionality, such as verifying data or writing files to cloud storage. Extensions can be defined in the [app manifest](/extension-apps/build-an-extension-app/register/use-manifest#extensions) or through the [form-based experience](/extension-apps/build-an-extension-app/register/use-form/integration-details#add-an-extension).

## Define an extension in the app manifest

In the app manifest, an extension is defined as a JSON object. Each extension has an *extension contract* (set by the `extension` object’s `template` property) that identifies its type, the required [actions](/extension-apps/extension-apps-101/concepts/actions), and the optional [capabilities](/extension-apps/extension-apps-101/concepts/capabilities) that you implement to use it. See [Extension schema](/extension-apps/extension-app-reference/app-manifest-reference/extension) for a list of supported `template` values and details about extension properties.

**Note:** The action names in the extension's `actionReferences` object must match the names in the [actions](/extension-apps/extension-apps-101/concepts/actions) objects.

Example extension implementation:

```text
"extensions": [
  {
    "name": "My File Output Cloud Storage Extension",
    "description": "Used to write files to cloud storage",
    "template": "FileIO.Version1.FileOutputCloudStorage",
    "actionReferences": [
      "list-directory-contents",
      "list-drives",
      "write-file"
    ],
    "capabilities": [
      "FileIO.Version1.ListDirectoryContents",
      "FileIO.Version1.ListDrives"
    ]
  }
]
```

## Define an extension using a form

Extensions can also be added to extension apps using a form. When you register an extension app [using a form](/extension-apps/build-an-extension-app/register/use-form), you will be prompted to choose the extensions that you want to include. See [Supported extensions](/extension-apps/extension-apps-101/supported-extensions) for descriptions of each type, their extension points, and links to more information.

![Extension type selection](/_fern-files/_img/72a5ebd6039f38cd21b695ea3bd50240c71ce0bd1b9c57f928c8f7a1aff662ef.webp)

If you select **Data Input Output**, you have the option to select whether the extension app will only read data from a system of record or whether it will both read from and write to the system of record.

![Data Input Output extension type selected](/_fern-files/_img/d34aa7d7300430358f7ee6b0d409c3c9bebf6287f851f485eafca38cd4857cef.webp)

If you select **Data Verification**, you can select the type of data the extension app will verify.

![Extension Type Data Verification selected](/_fern-files/_img/1c5193d2617afd3f3bf8a400325756b82331e226922cb842691909c297367373.webp)

If you select **File Input Output**, you must make an additional selection.

![File IO extension type](/_fern-files/_img/67dae992328a0f7994980ba831a8d8e85ef2cd14cdc258f91ce35ee62659bc19.webp)

Extensions can also be updated at the [extension app's integration details](/extension-apps/build-an-extension-app/register/use-form/integration-details#access-integrations-details-for-an-extension-app) page.

## Extension points

An extension point is a location in the Docusign UI or a stage in a Docusign agreement process  where an extension app can be invoked. eSignature envelopes, Agreement Builder workflows, Agreement Manager, and the **Add Fields** page in the prepare process are all extension points. For example, a file output cloud storage extension can be triggered to write a file generated during a Agreement Builder workflow to an external cloud storage system.

## Next steps

* Learn more about [connections](/extension-apps/extension-apps-101/concepts/connections).
* Review the characteristics of [actions](/extension-apps/extension-apps-101/concepts/actions) and [capabilities](/extension-apps/extension-apps-101/concepts/capabilities).
* See [sample app manifest files](/extension-apps/build-an-extension-app/example-use-case) for different extensions.
* Get an overview of the [Developer Console](/extension-apps/developer-console-overview).