> 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 actions (beta)

> Review the extensions and actions associated with file output to system of record.

[Extensions](/extension-apps/extension-apps-101/concepts/extensions-and-extension-points) are the components that determine the type of functionality that an extension app implements. Each extension supports one or more [actions](/extension-apps/extension-apps-101/concepts/actions) and [capabilities](/extension-apps/extension-apps-101/concepts/capabilities). Both actions and capabilities send requests to an external API service. Actions are required and provide the core functionality for an extension. Capabilities are optional and offer additional features to enhance the core functionality. You specify the extensions, actions, and capabilities to include in an extension app when you [register an extension app](/extension-apps/build-an-extension-app/register).

For file output to system of record, the method your extension app uses for [identifying a destination record](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/identify-destination-records) determines the extensions, actions, and capabilities that should be included in the app. See these sections for details:

* [Extensions and actions: Record identifier is a workflow variable](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/extensions-and-actions#extensions-and-actions-record-identifier-is-a-workflow-variable)
* [Extensions and actions: Record ID is from a Data read step](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/extensions-and-actions#extensions-and-actions-record-id-is-from-a-data-read-step)

## Extensions and actions: Record identifier is a workflow variable

If a [workflow variable value](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/identify-destination-records#use-a-workflow-variable-value) will identify the record to write files to, the file output system of record extension must implement the **Write File** action and the **Get Type Names** capability. Below are descriptions of how they function.

| Extension                    | Action or capability                                                                                                                 | Executed when                                                                                                                                        | Description                                                                                                                                                                                                                                                                                            |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| File output system of record | [Get Type Names](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record#get-type-names) capability | A workflow process builder configures a **File Output** step and selects a workflow variable whose value will be sent in the **Write File** request. | Gets the names of objects in your system of record. The names are displayed on the **File Output** step configuration panel to enable the process builder to select the object to write files to.                                                                                                      |
| File output system of record | [Write File](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record#write-file) action             | A running workflow instance reaches a **File Output** step.                                                                                          | Writes a completed agreement file or files to the system of record. To enable the external system to identify the destination for the files, the request includes:- The runtime value of a workflow variable that the process builder selected
- The object that the workflow process builder selected |

These sections explain the flow for action and capability execution:

* [Get Type Names flow](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/extensions-and-actions#get-type-names-flow)
* [Write File flow](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/extensions-and-actions#write-file-flow)

### Get Type Names flow

When a workflow process builder configures a **File Output** step, a [Get Type Names](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record#get-type-names) call retrieves a list of objects that your system of record exposes.

Docusign displays the list of objects in a dropdown on the **File Output** step configuration panel. This enables the process builder to select an object to write files to. The object name is included in the **Write File** request during workflow instance execution.

![Get Type Names flow](/_fern-files/_img/5554b4970620002d91f8e89e39d5e8feec77eddbcaf76637a693c7d0ee1c2927.webp)

### Write File flow

As a customer completes the steps in a running workflow instance, Docusign calls [Write File](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record#write-file) to write the envelope file or files to the system of record. The request includes the file contents, the destination object, and a value that can be used to identify the destination record.

![Write File flow](/_fern-files/_img/7fc38010c57310194ef0b1532894c34bae7accb69496358f4ee2e7e755544156.webp)

## Extensions and actions: Record ID is from a Data read step

If a [record ID](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/identify-destination-records#use-an-id-returned-by-a-read-from-workflow-step) returned from a workflow **Data read** step will identify the record to write files to, the extension app requires two extensions:

* [Data IO](/extension-apps/extension-app-reference/extension-contracts/data-io): This extension retrieves data model details from the external system of record and searches for a record to which a file or files will be written. The extension must include these actions:

  * **Get Type Names**
  * **Get Type Definitions**
  * **Search Records**
* [File output system of record](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record): This extension writes envelope files to the system of record. The extension must include this action:

  * **Write File**

Below are descriptions of the actions.

| Extension                    | Action                                                                                                                           | Executed when                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Data IO                      | [Get Type Names](/extension-apps/extension-app-reference/extension-contracts/data-io#dataio-version6-get-type-names)             | The extension app establishes or refreshes a [connection](/extension-apps/extension-apps-101/concepts/connections). This can be triggered by:- Running a [connection test](/extension-apps/build-an-extension-app/test/integration-tests#run-a-connection-test) from the Developer Console Testing module
- Creating or refreshing a connection in the App Center. See [Manage Docusign App Connections](https://support.docusign.com/s/document-item?bundleId=ous1698169987748\&topicId=xyw1716318604389.html)﻿ for details. | Gets the names of the objects that are used by your system of record.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Data IO                      | [Get Type Definitions](/extension-apps/extension-app-reference/extension-contracts/data-io#dataio-version6-get-type-definitions) | The extension app establishes or refreshes a connection. This action is executed directly after **Get Type Names**.                                                                                                                                                                                                                                                                                                                                                                                                           | Gets a set of object definitions from your system of record and returns their equivalents in the [Concerto](https://concerto.accordproject.org/docs/intro/) data model format. Docusign uses the Concerto data model to map the data from your system of record. If your system of record does not already use the Concerto data model, you must implement transform logic that defines how your records map to Concerto data types before they can be read. This transform logic should be implemented within your **Get Type Definitions** action, and is called whenever the action is executed. See [Data model](/extension-apps/extension-apps-101/supported-extensions/data-model) for details on the structure. |
| Data IO                      | [Search Records](/extension-apps/extension-app-reference/extension-contracts/data-io#dataio-version6-search-records)             | A running workflow instance reaches a **Read from** step.                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Sends the external system a query to retrieve the ID of the record to which the envelope file or files should be written.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| File output system of record | [Write File](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record#write-file)                | A running workflow instance reaches a **File Output** step.                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Writes a completed agreement file or files to the system of record. To enable the external system to identify the destination for the files, the request includes:- The record ID returned from the **Search Records** request
- The object associated with that record ID                                                                                                                                                                                                                                                                                                                                                                                                                                             |

These sections explain the flow for action execution:

* [Get Type Names and Get Type Definitions flow](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/extensions-and-actions#get-type-names-and-get-type-definitions-flow)
* [Search Records and Write File flow](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/extensions-and-actions#search-records-and-write-file-flow)

### Get Type Names and Get Type Definitions flow

When your extension app is [installed and connected](https://support.docusign.com/s/document-item?bundleId=ous1698169987748\&topicId=ctg1698170340729.html) to a Docusign account, or when a connection is [refreshed](https://support.docusign.com/s/document-item?bundleId=ous1698169987748\&topicId=qkv1716320270335.html) in the Docusign App Center, the extension app will automatically get the types and type definitions of the objects that your system of record is configured to expose:

1. Docusign calls [Get Type Names](/extension-apps/extension-app-reference/extension-contracts/data-io#dataio-version6-get-type-names) to get the set of objects that your system of record exposes.
2. Docusign calls [Get Type Definitions](/extension-apps/extension-app-reference/extension-contracts/data-io#dataio-version6-get-type-definitions), inputting the objects returned by **Get Type Names**. This returns the definitions of each object that your system of record exposes for Docusign.

After Docusign has retrieved the object definitions, it displays them on the workflow **Read from** step configuration panel. This enables workflow process builders to set up parameters that will be used at workflow instance run time to identify the object and record that envelope files are written to.

![Get Type Names and Definitions flow](/_fern-files/_img/e2bfee4d1cd721d029fa50537da3d15fa86b987ec4538fdda30cce1053c5706d.webp)

### Search Records and Write File flow

This action flow is executed as a customer completes the steps in a running workflow instance.

1. Docusign calls [Search Records](/extension-apps/extension-app-reference/extension-contracts/data-io#dataio-version6-search-records) to get the ID of a record in the external data source to which envelope files are to be written.
2. Docusign calls [Write File](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record#write-file) to write the file to the record identified in the response to the **Search Records** request.

![Search Records Write File flow](/_fern-files/_img/0ac77abec3f06759ee75c4dec192ed0cb0444bfb02eb37ee70d37151ad14dc64.webp)

## Next steps

* Review options to consider when you [plan a file output to system of record implementation](/extension-apps/extension-apps-101/supported-extensions/file-output-system-of-record/plan-implementation).
* Get an overview of the process to [build an extension app](/extension-apps/build-an-extension-app).
* See [File output system of record extension contract reference](/extension-apps/extension-app-reference/extension-contracts/file-output-system-of-record) for details about the action and capability requests and responses.