An External App Connector is a generic API integration node within JumpCloud Workflows. Instead of hardcoding API endpoints, headers, and authentication keys directly into every individual workflow, JumpCloud allows you to define an external application's connection credentials once in your global settings.
Once defined, you can add an External App Connector node into any canvas, instantly giving that specific workflow a secure pipeline to send payloads to or request data from that external platform.
Using an External App Connector
To be able to use an external app connector, first create the connector under Settings > Connectors in the JumpCloud Admin portal. See Manage Connectors in Settings to learn more. Once you have added the connector under Settings, the connector will be available to use in Workflows.
This section only describes the process to use external app connectors in a workflow. See Create Workflows for detailed steps to create the workflows.
To use external app connectors in a workflow:
- In your Workflow Canvas, click the + icon to add an action.
- In Action Type > Actions, search and select External App Connector. The action card will be added to your canvas.
- In the Workflow canvas, click the action card to open the configuration pane on the right. The options vary depending on what action you selected.
- Select the application that you registered under global settings (Settings > Connectors) from the Select Connector dropdown menu. Next, define exactly what specific action, endpoint, or resource you want to target within that external application.
- Select the HTTP Method.
- The HTTP Method dropdown determines the type of action your workflow will execute against the target platform's server:
- GET (Shown Selected): Used to retrieve data or fetch status updates from the external system (e.g., checking if a user profile exists before running an onboarding sequence).
- POST: Used to send brand-new payloads, create assets, or spin up records in the external app (e.g., creating a new ticket or user profile).
- PUT / PATCH: Used to update existing information or modify records asynchronously.
- DELETE: Used to remove records or instantly terminate access endpoints.
- The Endpoint Path field is relative to your connector's root domain.
Do not enter the full URL here. Since your base environment link is already securely embedded in your global configuration, you only need to update the specific extension here. For example, if you are querying a resource group, simply input /api/resource.
- Define the payload data in the Request Body JSON field. Jump to Request Body JSON example to learn more.
- If your individual API endpoints require task-specific instruction labels, use the Add Header button to define key value pairings.
- Once you’ve defined the triggers and actions, click Save changes in the unsaved changes floating panel at the bottom of the page.
Request Body JSON Example
- The goal is to automatically create a ticket whenever a user is activated and verified, providing an unalterable log for SOC2 compliance.
Request Body JSON Example:
{
  "fields": {
   "project": { "key": "IT" },
   "summary": "Access Provisioned: ${input.resource.username}",
   "description": {
     "type": "doc",
     "version": 1,
    "content": [
       {
       "type": "paragraph",
       "content": [
         {
            "type": "text",
            "text": "User ${input.resource.username} (ID: ${input.resource.id}) has been successfully activated in JumpCloud and automated provisioning has been completed."
            }
          ]
       }
    ]
    },
 "issuetype": { "name": "Task" }
  }
}
- For compliance purposes, significant directory changes—like a temporary privilege elevation or the deletion of a production user group—should always generate an audit trail outside your identity provider.
- HTTP Method: POST
- Endpoint Path: /api/v2/alerts
- Example Request Body JSON:
{
"summary": "Administrative Workflow Executed",
"details": {
"actor": "{{ .input.body.actor.email }}",
"action": "Temporary Admin Group Elevation",
"target_user": "{{ .input.body.target.email }}"
},
"severity": "info"
}