
How to Configure and Publish an Azure Custom Extension App for Docusign IAM
Use your Azure source system to configure a Docusign IAM custom extension app. This guide walks through creating the manifest, adding it to the Docusign Developer Console, testing OAuth and data actions, and publishing the app for your organization.
Key takeaways |
|---|
• A Docusign IAM custom extension app connects a secured source system to Docusign through an app definition. • The app definition lives in a • Before the manifest will validate, you must add your • After adding the manifest to the Docusign Developer Console, you can test authentication and data actions before publishing. • Once published, the extension app can bring external data into agreement workflows built in Docusign Workflow Builder |
A Docusign IAM custom extension app connects a secured source system to Docusign agreement workflows through an app definition. In this guide, you’ll configure that app definition in a manifest.json file, add it to the Docusign Developer Console, test OAuth and data actions, and prepare the app to publish for your organization.
This guide assumes you already have a deployed backend with OAuth configured and the required values saved from that setup: clientId, clientSecret, authorizationUrl, tokenUrl, and your backend’s default domain.
If you don’t have those values yet, start with How to Create an Azure Custom Extension App for Docusign IAM, which walks through building the Azure source system with Cosmos DB, Azure Functions, and OAuth. The values you capture there map directly to the manifest fields below.
This guide covers:
Writing the manifest file that defines your extension app
Replacing the manifest placeholders with your own credentials and endpoints
Adding the manifest to Docusign and creating the app
Testing the authentication and data actions
Publishing the app for your organization
For a deeper reference on each manifest field and the available action templates, see the build an extension app guide. The steps below summarize the process.
Prerequisites
Before starting, make sure you have:
Visual Studio Code (VS Code), or your preferred IDE for creating and editing the manifest file
A deployed source system (such as an Azure Functions App) with OAuth configured and reachable
The following values saved from your source system setup:
clientId, clientSecret, authorizationUrl, tokenUrl, and your backend's default domain
Set up the manifest file
The manifest is a single JSON file that describes your app to Docusign: its identity, how it authenticates, and the data actions it exposes. Docusign uses these declarations to register your app, route each action to the right endpoint on your backend, and authenticate every call through your identity provider.
The diagram below shows how those pieces fit together.
Docusign IAM custom extension app architecture. The manifest configures the IAM platform, which authenticates with your identity provider over OAuth and calls action endpoints on your backend Function App, which reads & writes records in your data source.
In VS Code (or your file explorer) create a new file in the project folder called manifest.json, then copy the content below into it. Caption: Architecture of a Docusign IAM custom extension app. The manifest configures the Docusign IAM platform, which authenticates against your identity provider over OAuth and then calls the action endpoints on your backend Function App, which reads and writes records in your data source.
For the icon field, replace [BASE64_ENCODED_PNG_ICON] with your own base64-encoded PNG. Any small square PNG works.
VSCode Create File dialog showing manifest.json being created alongside the Azure Functions action files (CreateRecord.js, GetTypeDefinitions.js, GetTypeNames.js, PatchRecord.js, SearchRecords.js) in the project folder.
{
"name": "Expanding IAM Example",
"distribution": "PRIVATE",
"description": {
"short": "Extension App for Account Management",
"long": "Extension App for Account Management"
},
"termsOfServiceUrl": "https://www.samplecompany.com/tos",
"privacyUrl": "https://www.samplecompany.com/privacy-security",
"supportUrl": "https://www.samplecompany.com/support",
"publisher": {
"name": "Expanding Enterprises Inc",
"phone": "111-222-3333",
"email": "info@samplecompany.com",
"website": "https://www.samplecompany.com"
},
"connections": [
{
"name": "authentication",
"description": "Secure connection",
"type": "oauth2",
"params": {
"provider": "CUSTOM",
"clientId": "5630469f-c738-4978-8d7f-30b979b361de",
"clientSecret": "~r88Q~x8IkpMFpXTQXN-0BTJMLxR48_mKZjJ4bMj",
"scopes": [
"api://5630469f-c738-4978-8d7f-30b979b361de/user_impersonation",
"offline_access"
],
"customConfig": {
"authorizationMethod": "header",
"authorizationParams": {},
"authorizationUrl": "https://login.microsoftonline.com/5221c46c-b7b6-41e0-a534-78064848cd54/oauth2/v2.0/authorize",
"requiredScopes": [],
"scopeSeparator": " ",
"tokenUrl": "https://login.microsoftonline.com/5221c46c-b7b6-41e0-a534-78064848cd54/oauth2/v2.0/token"
}
}
}
],
"icon": {
"data": "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",
"mediaType": "image/png"
},
"screenshots": [],
"extensions": [
{
"name": "Employees",
"description": "Employee details",
"template": "DataIO.Version6.DataInputOutput",
"actionReferences": [
"GetTypeDefinitions",
"GetTypeNames",
"PatchRecord",
"CreateRecord",
"SearchRecords"
]
}
],
"actions": [
{
"name": "GetTypeNames",
"description": "Get list of tables",
"template": "DataIO.Version6.GetTypeNames",
"connectionsReference": "authentication",
"params": {
"uri": "https://presales-appcenter.azurewebsites.net/api/GetTypeNames"
}
},
{
"name": "GetTypeDefinitions",
"description": "Get list of fields of each table",
"template": "DataIO.Version6.GetTypeDefinitions",
"connectionsReference": "authentication",
"params": {
"uri": "https://presales-appcenter.azurewebsites.net/api/GetTypeDefinitions"
}
},
{
"name": "SearchRecords",
"description": "Search for records",
"template": "DataIO.Version6.SearchRecords",
"connectionsReference": "authentication",
"params": {
"uri": "https://presales-appcenter.azurewebsites.net/api/SearchRecords"
}
},
{
"name": "CreateRecord",
"description": "Create a new record",
"template": "DataIO.Version6.CreateRecord",
"connectionsReference": "authentication",
"params": {
"uri": "https://presales-appcenter.azurewebsites.net/api/CreateRecord"
}
},
{
"name": "PatchRecord",
"description": "Update an existing record",
"template": "DataIO.Version6.PatchRecord",
"connectionsReference": "authentication",
"params": {
"uri": "https://presales-appcenter.azurewebsites.net/api/PatchRecord"
}
}
]
}
Replace the placeholder values
This guide assumes your source system is an Azure Function App, as set up in How to Create an Azure Custom Extension App for Docusign IAM. If you used a different backend, adjust the placeholder values to match your setup.
Placeholder | Where to find it |
| Function App > Settings > Authentication, copy the App (client) ID. Used in both |
| Function App > Settings > Environment variables, copy the value for |
| The |
| The |
| Function App > Properties, copy the Default domain |
Keep your client secret out of public repositories and shared documents. If it is ever exposed, rotate it in Azure and update the manifest.
Add the manifest to Docusign
Open the Docusign Developer Console
Select Create App > By editing the manifest
3. Paste in the manifest contents you just created, or upload the manifest.json file
4. Select Validate, then Create App
Test the application
With the app created, run each action to confirm the connection works before you publish.
Select App Testing in the left panel
2. Select Install app
3. For the authentication action, select Run Test, then enter your credentials. A successful test confirms the OAuth handshake is working
4. Close the test, then select the SearchRecords action and select Run Test
5. Paste the query below into the Input, then select Run Test
{
"query": {
"$class": "com.docusign.connected.data.queries@1.0.0.Query",
"attributesToSelect": [
"account_type",
"account_holder_name",
"account_holder_email",
"phone",
"date_of_birth"
],
"from": "Accounts",
"queryFilter": {
"$class": "com.docusign.connected.data.queries@1.0.0.QueryFilter",
"operation": {
"$class": "com.docusign.connected.data.queries@1.0.0.ComparisonOperation",
"leftOperand": {
"$class": "com.docusign.connected.data.queries@1.0.0.Operand",
"name": "account_holder_email",
"type": "STRING",
"isLiteral": false
},
"operator": "EQUALS",
"rightOperand": {
"$class": "com.docusign.connected.data.queries@1.0.0.Operand",
"name": "catherine.client@mailinator.com",
"type": "STRING",
"isLiteral": true
}
}
}
},
"pagination": {
"limit": 10,
"skip": 0
}
}
A successful test returns the matching record from your data source.
Publish and use the app
After the app tests successfully, it can be published for use in your organization.
Publishing details are covered in Publish an extension app to the Docusign App Center guide. After publishing, the app can be used as part of an agreement workflow in Docusign Workflow Builder.
You now have a custom extension app defined in the Docusign Developer Console, connected to your backend, and tested with a sample data action.
From here, you can publish it and use it in a Docusign Workflow Builder workflow to bring external account data into an agreement process.
Troubleshooting tips
Manifest validation fails when adding the manifest in the Developer Console. This is usually a missing or incorrect placeholder value. Confirm you have replaced all five placeholders,
[CLIENT_ID],[CLIENT_SECRET],[AUTHORIZATION_URL],[TOKEN_URL], and[FUNCTION_DOMAIN], with the actual values from your source system setup, and that the[CLIENT_ID]inside the scope string matches the clientId.The authentication action test fails. The OAuth configuration in your manifest likely contains an error. Double-check that
clientId,clientSecret,authorizationUrl, andtokenUrlare exactly correct and match the values captured from your App Registration.The SearchRecords test fails or returns an unexpected result. Verify that the JSON payload you pasted into the test input is valid and free of typos. Also confirm the test record (for example, the one for
catherine.client@mailinator.com) still exists and is correctly structured in your data source.
FAQs
What does
distribution: PRIVATEmean? A private app is available only within your own organization rather than listed publicly. This is the right setting while you build and test, and for internal-only extensions.Can I add or remove data actions? Yes. Each action in the
actionsarray maps to an endpoint on your backend, and each must also be listed underactionReferencesin theextensionsblock to be exposed. Add or remove them in pairs to keep the two lists in sync.
Resources
How to Create an Azure Custom Extension App for Docusign IAM – end-to-end guide for setting up the Azure source system (Cosmos DB + Azure Functions + OAuth).
Build an extension app – core developer guide covering registration, testing, and lifecycle management for extension apps.
Publish an extension app to the Docusign App Center – how to submit, review, and publish your extension app for production use.
Extension apps overview – high-level overview of extension apps, App Center, and how extensions plug into IAM workflows.
Developer Console overview – how to use the Developer Console to register, test, and manage extension apps.
Docusign Workflow Builder: Agreement Process Automation – product overview for building agreement workflows that can invoke your extension app.
Fast-track your extension apps with reference implementations – sample manifests and GitHub repos that show complete, working extension apps you can clone and adapt.

Mo is a Distinguished Solution Architect with over 20 years of experience working with companies of all sizes, helping them realise their digital strategies. Mo is based in Australia, loves all things low-code, architecture, and is currently attempting to master the art of dad jokes.
Related posts
Docusign IAM is the agreement platform your business needs




