# ActionKit for Tool Calling Source: https://docs.useparagon.com/actionkit/actionkit-for-tool-calling Use ActionKit to provide your AI agent with hundreds of Integration Tools. ActionKit is designed to give AI agents the ability to call out to integration logic as a part of a prompt or ongoing conversation with a user. The API exposes JSON Schema specs to easily provide your agent with capabilities including: * Creating tasks in Jira based on action items an agent recognizes from a meeting transcript * Querying real-time sales reports in Shopify when an agent is asked questions about online sales * Creating a Google Docs draft to start a project based on a user prompt ## Implementation Examples ### Vercel AI SDK ```js Implementing ActionKit in AI SDK expandable theme={null} import { generateText, jsonSchema, tool } from "ai"; import { openai } from "@ai-sdk/openai"; const response = await fetch( "https://actionkit.useparagon.com/projects//tools", { method: "GET", headers: { Authorization: `Bearer ${paragonUserToken}`, }, } ); const { tools, errors } = await response.json(); if (errors.length === 0) { await generateText({ model: openai("gpt-4o"), tools: Object.fromEntries( tools.map((tool) => [ tool.function.name, tool({ description: tool.function.description, parameters: jsonSchema(tool.function.parameters), execute: async (params: any, { toolCallId }) => { try { const response = await fetch( `https://actionkit.useparagon.com/projects//tools`, { method: "POST", body: JSON.stringify({ tool: tool.function.name, parameters: params, }), headers: { Authorization: `Bearer ${session.paragonUserToken}`, "Content-Type": "application/json", }, } ); const output = await response.json(); if (!response.ok) { throw new Error(JSON.stringify(output, null, 2)); } return output; } catch (err) { if (err instanceof Error) { return { error: { message: err.message } }; } return err; } }, }), ]) ), toolChoice: "auto", temperature: 0, system: "You are a helpful assistant. Be as concise as possible.", prompt: "Help me create a new task in Jira.", }); } ``` ### LangGraph / LangChain ```py Implementing ActionKit in LangChain expandable theme={null} import json import requests from typing import Annotated, Any, TypedDict from langchain.tools import BaseTool from langchain.schema import HumanMessage from langgraph.graph import StateGraph, START, END from langgraph.graph.message import add_messages from langgraph.prebuilt import ToolNode, tools_condition from langchain_openai import ChatOpenAI PARAGON_PROJECT_ID = "" PARAGON_USER_TOKEN = "" OPENAI_API_KEY = "" class ActionKitTool(BaseTool): name: str description: str tool_name: str paragon_token: str def _run(self, tool_input: str) -> str: try: params = json.loads(tool_input) response = requests.post( url=f"https://actionkit.useparagon.com/projects/{PARAGON_PROJECT_ID}/tools", headers={ "Authorization": f"Bearer {self.paragon_token}", "Content-Type": "application/json", }, json={ "tool": self.tool_name, "parameters": params, }, timeout=30 ) data = response.json() if not response.ok: raise ValueError(json.dumps(data, indent=2)) return json.dumps(data) except Exception as e: return json.dumps({"error": {"message": str(e)}}) class State(TypedDict): messages: Annotated[list, add_messages] def main(): graph_builder = StateGraph(State) url = f"https://actionkit.useparagon.com/projects/{PARAGON_PROJECT_ID}/tools" headers = {"Authorization": f"Bearer {PARAGON_USER_TOKEN}"} resp = requests.get(url, headers=headers) json_resp = resp.json() tools = json_resp.get("tools", []) errors = json_resp.get("errors", []) if not tools: print("Failed to fetch Paragon tools or encountered errors:") print(errors) return tools_list = [] for integration in tools: integration_tools = tools.get(integration) for tool in integration_tools: func_def = tool["function"] tool_name = func_def["name"] tool_description = func_def["description"] paragon_tool = ActionKitTool( name=tool_name, description=tool_description, tool_name=tool_name, paragon_token=PARAGON_USER_TOKEN ) tools_list.append(paragon_tool) llm = ChatOpenAI( openai_api_key=OPENAI_API_KEY, model_name="o1" ) def chatbot(state: State): return {"messages": [llm.bind_tools(tools_list).invoke(state["messages"])]} graph_builder.add_node("chatbot", chatbot) tools_node = ToolNode(tools=tools_list) graph_builder.add_node("tools", tools_node) graph_builder.add_conditional_edges( "chatbot", tools_condition, ) graph_builder.add_edge("tools", "chatbot") graph_builder.add_edge(START, "chatbot") graph = graph_builder.compile() def stream_graph_updates(user_input: str): for event in graph.stream({"messages": [{"role": "user", "content": user_input}]}): for value in event.values(): print("Assistant:", value["messages"][-1].content) while True: try: user_input = input("User: ") if user_input.lower() in ["quit", "exit", "q"]: print("Goodbye!") break stream_graph_updates(user_input) except: # fallback if input() is not available user_input = "What do you know about LangGraph?" print("User: " + user_input) stream_graph_updates(user_input) break if __name__ == "__main__": main() ``` ### Other implementations If you’re not using TypeScript, you can pass the JSON Schema specs from the ActionKit to the request to your LLM. Here is an example in Python with OpenAI’s library: ```py Loading ActionKit tools for OpenAI client library expandable theme={null} import requests from openai import OpenAI client = OpenAI() actions_url = f"https://actionkit.useparagon.com/projects/{project_id}/tools" actions_auth_header = { "Authorization": f"Bearer {user_token}" } get_tools_params = { "format": "json_schema", "categories": "crm,project_management" } response = requests.get(actions_url, params=get_tools_params, headers=actions_auth_header) paragon_tools = response.json() messages = [{"role": "user", "content": "Help me create a Jira ticket"}] completion = client.chat.completions.create( model="gpt-4o", messages=messages, tools=paragon_tools["tools"], tool_choice="auto" ) ``` When passing the specs directly, you will also need to respond to the agent’s request to use a tool and route it to the ActionKit: ```py Calling ActionKit tools with OpenAI client library expandable theme={null} message = completion["choices"][0]["message"] if message.get("function_call"): function_name = message["function_call"]["name"] arguments = json.loads(message["function_call"]["arguments"]) # Check if this tool uses ActionKit if any(tool["name"] == function_name for tool in paragon_tools["tools"]): run_tools_body = { "tool": function_name, "parameters": arguments } # Run Tool response = requests.post(actions_url, body=run_tools_body, headers=actions_auth_header) result = response.json() messages.append({ "role": "function", "name": function_name, "content": json.dumps(result) }) # Return to chat with tool result completion = client.chat.completions.create( model="gpt-4o", messages=messages, tools=paragon_tools, tool_choice="auto" ) ``` # Logs and Errors Source: https://docs.useparagon.com/actionkit/actionkit-logs Search, view, and trace logs for all of your ActionKit requests and trigger events. ## Overview Quickly search, view, and trace through logs of your ActionKit calls on the **Monitoring** page of your Paragon dashboard. There are two tabs in Monitoring for ActionKit: * The **Tools** tab provides a timeline of all ActionKit Tool usage, including all List and Run Tool requests. * The **Triggers** tab provides a timeline of all subscribed ActionKit Triggers, including the full lifecycle of subscribing to triggers, detecting new data, and delivering events to your webhook. ## Tool Logs Visit the **Tools** Tab in Monitoring to find a list of your historical Tool calls. You can use this tab to: * Understand how your AI agent is performing ActionKit calls on behalf of your users. * Investigate why Tool calls fail for particular Connected Users. * Discover which ActionKits requests your users are utilizing and the parameters used to make those requests. ### Filtering Filters allow you to view the history of specific requests that meet criteria, including: * **User ID** * **Integration name** * **Status** * **Tool name** * **Trace ID** When an ActionKit request errors, a trace or `requestId` is returned via the API response. Provide this ID to filter for the request. ```json Sample ActionKit error response with a requestId highlight={6} theme={null} { "message": "{\"message\":\"Unable to update Task\",\"details\":{\"err\":\"Team not authorized\",\"ECODE\":\"OAUTH_027\"}}", "code": "41070", "status": 500, "meta": { "requestId": "4c7445d2-1972-4ed6-9e47-46053bf1d45f" } } ``` * **Date range**: Filter by the date the ActionKit request was received by Paragon. ### Tool Log Trace Clicking into a Tool call row opens a Log Trace view, which shows all logs associated with a single Tool call. These logs display information about the initial HTTP request received by Paragon, events within Paragon's system, and any API requests made to the integration providers. Expanding the log shows additional metadata, such as API response data, error messages, and HTTP status codes. **Note**: The response body of API requests are only displayed for Error-level logs. All other logs do not include the contents of the body. ## Trigger Logs The **Triggers** tab in Monitoring displays a table of all trigger events for your project. You can click on any trigger event row to open a detail panel that shows the full context of that event, including its deliveries and event logs. ### Trigger Event Detail The top of the detail panel shows key information about the trigger event: * **Event ID**: the unique identifier for the trigger event. * **Integration**: the integration that produced the event. * **Time Received**: when the event was received by Paragon. * **Status**: the current processing status of the event (Success, Delivery Failures, Processing Failure, or Queued). #### Deliveries The deliveries section shows how the trigger event was delivered to your subscribed users. Each delivery includes: * **Status**: whether the delivery succeeded, failed, or is still pending. * **User**: the end user ID the delivery was sent to. * **Timestamp**: when the delivery was created. When there is a single delivery, the panel shows additional details including the **Trigger ID**, **Webhook URL**, and delivery timing. #### Event Logs The event logs section shows a timeline of logs associated with the trigger event. You can expand any log entry to view its full payload, including the Trace ID and log context. This is useful for debugging trigger processing issues and understanding how an event moved through Paragon. You will see logs for: * Attempts or failures to deliver a received trigger event to your webhook URL * Triggers with a `POLLING` subscription model: * New or updated records detected by the trigger's polling job * Triggers with a `WEBHOOK` subscription model: * The original webhook events received by Paragon * Attempts or failures to create a webhook in a specific integration on behalf of your user #### Filtering Trigger Events You can filter the Triggers table by: * **User ID** * **Integration** * **Status** (Success, Delivery Failures, Processing Failure, Queued) * **Date range** ## Log Retention ActionKit Logs are rotated automatically based on limits to your Paragon plan's retention and storage policy. When you reach the maximum lifetime or number of logs that your plan supports, Paragon will automatically drop the oldest logs from the system. Interested in forwarding logs to your own system? [Contact us](mailto:support@useparagon.com) for more details. | Plan | Log Retention | | ---------- | ------------------------------------------------------- | | Trial | 7 days or 50k maximum logs (whichever is reached first) | | Pro | 30 days or 1M maximum logs | | Enterprise | Configurable | # AI Agent Playground Source: https://docs.useparagon.com/actionkit/actionkit-playground Try ActionKit in the AI Agent Playground, a sandbox to test chatting with an agent that has access to ActionKit tools. **Get the source on GitHub** Find the source code for AI Agent Playground on our [GitHub repository](https://github.com/useparagon/actionkit-playground). ## Setup To run the AI Agent Playground locally, you will need the following: * [Node.js](https://nodejs.org/en) ≥ v22 and `pnpm` available in \$PATH ([Install instructions](https://pnpm.io/installation)) * OpenAI API Key * Paragon Project ID and [Signing Key](/getting-started/installing-the-connect-sdk#setup) You can copy your Project ID by clicking Copy Project ID under the Environment switcher: Start by cloning the source of Playground locally: ```bash theme={null} git clone git@github.com:useparagon/actionkit-playground.git && cd actionkit-playground ``` Install the dependencies with pnpm: ```bash theme={null} pnpm install ``` Next, create a local SQLite database by running the migration script: ```bash theme={null} pnpm migrate ``` Then, copy the `.env.example` into a `.env.local` file: ```bash theme={null} cp .env.example .env.local ``` In the `.env.local` file, provide your values for OPENAI\_API\_KEY, PARAGON\_SIGNING\_KEY, and NEXT\_PUBLIC\_PARAGON\_PROJECT\_ID. Finally, run Playground: ```bash theme={null} pnpm dev ``` Playground will start locally on port 3000 by default. ## Using the Playground The Playground is intended to help guide development of your own integration-enabled agents. Try connecting integrations that will be relevant to your customers and iterating on system prompts that reflect the goals of the agents you are building. Here's how to start using the Playground: ### 1. Connect an account in the sidebar When you click on an integration, the [Connect Portal](/connect-portal/connect-portal-customization) will appear. In your app, you can place the Connect Portal wherever your users will find integrations. **Note**: Only [Active integrations](/getting-started/displaying-the-connect-portal#activating-the-integration) that are supported by ActionKit will appear in the sidebar. ### 2. Add Tools to the chat Once you have connected an integration account, you can add Tools to a chat by expanding the integration in the sidebar and clicking the checkmark next to the tool name. In your app, you can control what Tools a chat has access to with your own application logic. ### 3. Customize system instructions Write instructions for your agent in the System Instructions input at top of the conversation. For example: "You are a sales copilot that assists users with doing research on potential prospects and allows them to update their CRM with their findings..." ### 4. Send a chat Try messaging your agent. When your agent uses a tool, a row will appear to show the tool-calling status, with input and output from the ActionKit API. To start a new chat with new context, click the top-left navigation menu and select **New chat**. You can also navigate a history of previous chats in the sidebar. ## Troubleshooting This means that your Signing Key was not correctly formatted or supplied. Make sure that you have a `.env.local` file (copied from `.env.example`) that includes a value for `PARAGON_SIGNING_KEY`. The value should be on one line, separated with `\n`. Check your browser console (Inspect Element > Console). If you are seeing 401 responses from the Paragon API, double-check the values for your `NEXT_PUBLIC_PARAGON_PROJECT_ID` and `PARAGON_SIGNING_KEY`. Verify that [ActionKit-compatible integrations](/actionkit/supported-integrations) have been added to your Paragon project and are [Active](/getting-started/displaying-the-connect-portal#activating-the-integration). Check the shell/terminal window where you are running `pnpm dev` to see any possible errors. If you are getting rate limit errors associated with your OpenAI account, the chat may stop or fail to save once the conversation reaches a certain length, or if you select too many tools at once. * **Resolution:** Keep message contents smaller in size and restrict tools to only those that are necessary to a given message. # Tools API Source: https://docs.useparagon.com/actionkit/api-reference Give your AI agent or app access to thousands of tools from your users' integrations, from our catalog of pre-built Tools. ActionKit **Tools API** provides our complete library of pre-built tools (actions in third-party systems) to expose as capabilities for AI agents, workflow builders, or other front-end functions that require integration data. ## API Usage **Base URL** ```js theme={null} https://actionkit.useparagon.com/projects/[Project ID] ``` ```js theme={null} https://worker-actionkit.[On-Prem Base URL]/projects/[Project ID] ``` **Authentication** To authenticate to ActionKit API, present a Bearer token with the Paragon User Token (a JWT): ```js theme={null} Authorization: Bearer [Paragon User Token] ``` This is the same token that you used to call `paragon.authenticate` with the Paragon SDK. See examples in [Installing the SDK](/getting-started/installing-the-connect-sdk). If you are using [JWT Permissions](/apis/api-reference/jwt-permissions) to control access, your Paragon User Token must include the `actionkit` permission to make ActionKit API requests. ## Pagination Many list and search actions in ActionKit accept a `paginationParameters` object as part of the request `parameters`. When the result set exceeds a single page, the response includes a `pageCursor` (or equivalent token) that you pass in the next request to retrieve the following page. A typical pagination flow looks like this: 1. Call an action without any pagination parameters to get the first page. 2. Check the response for a pagination cursor or token (e.g. `nextPageCursor`). 3. If a cursor is present, call the action again with the cursor in `paginationParameters`. 4. Repeat until no cursor is returned. ```js Example: Paginating Asana projects expandable theme={null} // First request: no pagination parameters const firstPage = await fetch( `https://actionkit.useparagon.com/projects/${projectId}/actions`, { method: "POST", headers: { "Authorization": `Bearer ${userToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ action: "ASANA_GET_PROJECTS", parameters: {}, }), } ); const firstResult = await firstPage.json(); // Use firstResult.pageCursor for the next request // Subsequent request: pass the page cursor const nextPage = await fetch( `https://actionkit.useparagon.com/projects/${projectId}/actions`, { method: "POST", headers: { "Authorization": `Bearer ${userToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ action: "ASANA_GET_PROJECTS", parameters: { paginationParameters: { pageCursor: firstResult.pageCursor, }, }, }), } ); ``` Paragon standardizes vendor-specific pagination mechanics into a few patterns: | Parameter type | Description | Fields | Example integrations | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Cursor-based | Receive `nextPageCursor` or `nextPageToken` and pass that field to `paginationParameters` in the next call. | `pageCursor` or `pageToken` | [Asana](/actionkit/integrations/asana/ASANA_GET_PROJECTS), [Confluence](/actionkit/integrations/confluence/CONFLUENCE_SEARCH_PAGES), [Slack](/actionkit/integrations/slack/SLACK_LIST_CHANNELS) | | Offset-based | Count the number of records received in a page and add it to a running `offset` parameter passed to `paginationParameters` in the next call. | `offset` or `skip` | [Mailchimp](/actionkit/integrations/mailchimp/MAILCHIMP_GET_CONTACTS_FROM_LIST), [Sage Intacct](/actionkit/integrations/sageintacct/SAGE_INTACCT_SEARCH_ACCOUNTS), [Zoho CRM](/actionkit/integrations/zohocrm/ZOHO_CRM_SEARCH_RECORDS_ANY) | | Page number | For each page, add 1 to a running `pageOffset` parameter passed to `paginationParameters` in the next call. | `page`, `pageNo`, `pageNumber`, or `pageOffset` | [Dropbox Sign](/actionkit/integrations/dropboxsign/DROPBOX_SIGN_SEARCH_SIGNATURE_REQUESTS), [ServiceNow](/actionkit/integrations/servicenow/SERVICENOW_GET_TICKETS), [Xero](/actionkit/integrations/xero/XERO_GET_ACCOUNTS) | You can find the specific pagination parameters available for each action in the [Actions Reference](/actionkit/supported-integrations). Actions that support pagination include `paginationParameters` in their input schema. ## File Uploads Actions that accept a `file` input to upload a file to an integration (for example, [Google Drive: Save File](/actionkit/integrations/googledrive/GOOGLE_DRIVE_SAVE_FILE) and [Box: Save File](/actionkit/integrations/box/BOX_SAVE_FILE)) will need to be encoded as part of the JSON payload provided when the Action is run. 1. **Hex-encode the file** With the file contents you want to upload, hex-encode of the bytes file that you intend to upload. 2. **Construct a File object** A File object is a JSON object that represents a File to upload. You must provide three standard fields: ```json File object theme={null} { "dataType": "FILE", // Always set to "FILE" "mimeType": "text/plain", // Set to the file's known MIME type "data": "..." // Use the hex-encoded file data } ``` #### Examples Here are some end-to-end examples of uploading a file with ActionKit in a few different client languages: ```javascript Node.js expandable theme={null} import fs from 'node:fs'; const filePath = './report.pdf'; const fileBuffer = fs.readFileSync(filePath); const body = { action: "GOOGLE_DRIVE_SAVE_FILE", parameters: { filename: "report.pdf", file: { mimeType: "application/pdf", dataType: "FILE", data: fileBuffer.toString('hex'), }, }, }; const res = await fetch( `https://actionkit.useparagon.com/projects/${PROJECT_ID}/actions`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${PARAGON_USER_TOKEN}`, }, body: JSON.stringify(body), }, ); ``` ```python Python expandable theme={null} from pathlib import Path import json import requests file_path = Path("./report.pdf") file_bytes = file_path.read_bytes() body = { "action": "GOOGLE_DRIVE_SAVE_FILE", "parameters": { "filename": "report.pdf", "file": { "mimeType": "application/pdf", "dataType": "FILE", "data": file_bytes.hex(), }, }, } res = requests.post( f"https://actionkit.useparagon.com/projects/{PROJECT_ID}/actions", headers={ "Content-Type": "application/json", "Authorization": f"Bearer {PARAGON_USER_TOKEN}", }, data=json.dumps(body), ) ``` ```bash Bash theme={null} FILE_HEX="$(xxd -p -c 1000000 "./report.pdf" | tr -d '\n')" curl "https://actionkit.useparagon.com/projects/${PROJECT_ID}/actions" \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${PARAGON_USER_TOKEN}" \ --data "$(jq -n \ --arg data "$FILE_HEX" \ '{ action: "GOOGLE_DRIVE_SAVE_FILE", parameters: { filename: "report.pdf", file: { mimeType: "application/pdf", dataType: "FILE", data: $data } } }' )" ``` #### Limitations ActionKit limits incoming request body payloads to **10 MB**. Because of the required hex encoding, uploaded files are effectively limited to 5 MB. For larger file sizes, use the [Proxy API](/apis/proxy) to upload to the integration directly. ## Using Multi-Account Authorization [Multi-Account Authorization](/apis/api-reference/multi-account-authorization#getting-started) is a set of SDK options that enables you to connect multiple accounts of the same integration type for a [Connected User](/billing/connected-users). You can use Multi-Account Authorization with ActionKit by specifying a credential with a header of `X-Paragon-Credential`. ```http REST API theme={null} POST https://actionkit.useparagon.com/projects//tools Authorization: Bearer X-Paragon-Credential: // Body { "tool": "SLACK_SEND_MESSAGE", "parameters": { "channel": "#general", "message": "Hello world!" } } ``` # List Tools Source: https://docs.useparagon.com/actionkit/api-reference/list-tools actionkit/openapi-standard.json GET /projects/{project_id}/tools List all Tools available for a user. Every Connected User will have the ability to run different Tools, depending on what accounts they have connected. Use this endpoint to list those Tools and discover the schemas of their input parameters. **Paragon automatically loads user-specific fields to Tool schemas for users where applicable.** For example, if the user has custom fields defined for Salesforce Opportunities, those custom fields will appear in their response for the `SALESFORCE_CREATE_RECORD_OPPORTUNITY` Tool schema. This endpoint was previously available at `GET /projects/{project_id}/actions`. The `/actions` path is preserved for backward compatibility; both paths work identically. # Run Tool Source: https://docs.useparagon.com/actionkit/api-reference/run-tool actionkit/openapi-standard.json POST /projects/{project_id}/tools Run a Tool on behalf of your user. This endpoint can be used to call any ActionKit Tool on behalf of your user. You can find specific input parameters for a Tool you want to call in the Tools Reference, for example: * [Slack: Send Message](/actionkit/integrations/slack/SLACK_SEND_MESSAGE) * [Google: Drive Download File](/actionkit/integrations/googledrive/GOOGLE_DRIVE_DOWNLOAD_FILE) * [Gmail: Search Emails](/actionkit/integrations/gmail/GMAIL_SEARCH_FOR_EMAIL) Each Tool in the Reference is an example call to this endpoint. This endpoint was previously available at `POST /projects/{project_id}/actions`. The `/actions` path is preserved for backward compatibility; both paths work identically. # Custom Tools Source: https://docs.useparagon.com/actionkit/custom-tools Use the Proxy API to create Custom Tools for any API or integration. To send requests to integrations or APIs that aren't yet supported by our catalog of tools available in ActionKit, you can use the [Proxy API](/apis/proxy) to create a Custom Tool for any use case. ## Usage To send a custom request to any API for an integration in your Paragon project, use the following base URL with a [Paragon User Token](/getting-started/installing-the-connect-sdk#setup) (JWT) as a Bearer token in the Authorization header. **Base URL** ``` https://proxy.useparagon.com/projects/[Project ID]/sdk/proxy/[integration] ``` ``` https://worker-proxy.[On-Prem Base URL]/projects/[Project ID]/sdk/proxy/[integration] ``` Then, specify the path or full URL of a custom integration request to send on behalf of your user as the header `X-Paragon-Proxy-Url` (or directly appended to the base URL). For example, if you are trying to reach the `comments.list` endpoint of Google Drive, which has the URL: ``` GET https://www.googleapis.com/drive/v3/files/{fileId}/comments ``` ...the custom request would be structured as: ```http theme={null} GET https://proxy.useparagon.com/projects/[Project ID]/sdk/proxy/googledrive Authorization: Bearer [Paragon User Token] X-Paragon-Proxy-Url: https://www.googleapis.com/drive/v3/files/{fileId}/comments ``` Proxy API requests can be sent for any of the 130+ integrations available in [our catalog](/resources/integrations) or with [Custom Integrations](/resources/custom-integrations), so you can add Custom Tools for any API. Custom Tool definitions will not appear in the [List Tools](/actionkit/api-reference/list-tools) endpoint, which only includes Paragon-defined Tools. See below for examples of defining Custom Tools within your application or our MCP to drive Proxy API requests. ## Examples ### Custom Tool for Tool Calling A Custom Tool can be defined in your system as one or many Proxy API calls that are made for a given set of input parameters. A basic implementation of a Custom Tool would look like the following: ```js expandable theme={null} // Create JSON Schema of a Get Comments tool: const getFileCommentsTool = { "type": "function", "name": "get_file_comments", "description": "Get comments for a specific file in Google Drive", "parameters": { "type": "object", "properties": { "fileId": { "type": "string", "description": "The ID of the file to get comments for" } }, "required": ["fileId"] } } // When receiving this tool call, make the proxy request: if (outputItem.type === "function_call" && outputItem.name === getFileCommentsTool.name) { const { fileId } = item.arguments; const response = await fetch( `https://proxy.useparagon.com/projects/${PROJECT_ID}/sdk/proxy/googledrive`, { method: 'GET', headers: { 'Authorization': `Bearer ${getUserToken()}`, 'X-Paragon-Proxy-Url': `https://www.googleapis.com/drive/v3/files/${fileId}/comments` } } ); // Make additional requests or transformations... let output = await response.text(); // Return to the model: input.push({ type: "function_call_output", call_id: outputItem.call_id, output, }); await responses.create(...); }; ``` The 2 key components to implement: 1. Define a JSON Schema for your Custom Tool that you will pass to the model as a tool definition (in addition to the native ActionKit definitions). 2. When your Custom Tool is called, call the Proxy API with the input and return the output to the model (or make additional requests / transformations). ### OpenAPI as Custom Tools If you have an OpenAPI spec defining a list of endpoints that you want to add as available tools, you can transform those automatically into Custom Tools as described above that send requests to the Proxy API. Our open-source MCP does this out-of-the-box by accepting OpenAPI specs in the `openapi/` folder of your server: You can also adapt the implementation yourself for use outside of MCP. The key areas to adapt from are: 1. Transforming OpenAPI fields to JSON Schemas that can be used as tool definitions. [(Source)](https://github.com/useparagon/paragon-mcp/blob/main/src/openapi.ts#L78-L165) 2. Calling the Proxy API with the input (and path parameters resolved in the URL) given a tool call request from an LLM. [(Source)](https://github.com/useparagon/paragon-mcp/blob/main/src/utils.ts#L73-L115) # Getting Started Source: https://docs.useparagon.com/actionkit/getting-started Get started with the ActionKit API. **Need help getting started with ActionKit?** Schedule a personalized onboarding with our Product team [here](https://useparagon.com/book-demo-actionkit). To use ActionKit, you will need to have set up the following: ### 1. Add the Paragon SDK to your app See [Installing the SDK](/getting-started/installing-the-connect-sdk) for adding the Paragon SDK to your app. With the SDK, you can prompt users to connect their accounts inside of your app using the [Connect Portal](/connect-portal/connect-portal-customization). Alternatively, you can use one of the below options for testing or development purposes: * [Hosted Demo Environment](/demo): an in-browser implementation of the SDK to test connecting accounts to your integrations * [ActionKit Playground](/actionkit/actionkit-playground): an open-source sandbox to test chatting with an agent that has access to ActionKit tools ### 2. Activate an integration in your Paragon project You can add and configure an integration by visiting the Catalog page in your Paragon dashboard (see [Adding Integrations](/getting-started/adding-an-integration)). See [Supported Integrations](/actionkit/supported-integrations) for integrations currently supported in ActionKit. ### 3. Connect an account Use your app (or Playground or demo.useparagon.com) to connect an account (e.g. a Salesforce account) using the Connect Portal. If you are having issues connecting an account, you may need to add your own OAuth app credentials. See [Connect your developer app to Paragon](/getting-started/adding-an-integration#connect-your-developer-app-to-paragon). Once an account is connected, you can start testing [the ActionKit API](/actionkit/api-reference) with the user ID that you are testing with. If you are running the Playground locally, the ID is `playground.local-static-user`. ## Usage ActionKit is available as an API, so you can use it directly from your app or with any LLM that supports tool/function calling: See all available API endpoints in ActionKit ActionKit is also available as a self-hosted MCP for AI agent implementations. Learn more in the [open-source repo](https://github.com/useparagon/paragon-mcp). # Create Folder Source: https://docs.useparagon.com/actionkit/integrations/adobeexperiencemanager/ADOBE_EXPERIENCE_MANAGER_CREATE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#ADOBE_EXPERIENCE_MANAGER_CREATE_FOLDER # Delete Asset Source: https://docs.useparagon.com/actionkit/integrations/adobeexperiencemanager/ADOBE_EXPERIENCE_MANAGER_DELETE_ASSET actionkit/openapi.json POST /projects/{project_id}/tools/#ADOBE_EXPERIENCE_MANAGER_DELETE_ASSET # Delete Folder Source: https://docs.useparagon.com/actionkit/integrations/adobeexperiencemanager/ADOBE_EXPERIENCE_MANAGER_DELETE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#ADOBE_EXPERIENCE_MANAGER_DELETE_FOLDER # Get Asset By ID Source: https://docs.useparagon.com/actionkit/integrations/adobeexperiencemanager/ADOBE_EXPERIENCE_MANAGER_GET_ASSET_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ADOBE_EXPERIENCE_MANAGER_GET_ASSET_BY_ID # Get Folder By ID Source: https://docs.useparagon.com/actionkit/integrations/adobeexperiencemanager/ADOBE_EXPERIENCE_MANAGER_GET_FOLDER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ADOBE_EXPERIENCE_MANAGER_GET_FOLDER_BY_ID # List Folders Source: https://docs.useparagon.com/actionkit/integrations/adobeexperiencemanager/ADOBE_EXPERIENCE_MANAGER_LIST_FOLDERS actionkit/openapi.json POST /projects/{project_id}/tools/#ADOBE_EXPERIENCE_MANAGER_LIST_FOLDERS # Adobe Experience Manager Source: https://docs.useparagon.com/actionkit/integrations/adobeexperiencemanager/overview Browse the tools available for Adobe Experience Manager in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Adobe Experience Manager. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Record Source: https://docs.useparagon.com/actionkit/integrations/airtable/AIRTABLE_CREATE_RECORD actionkit/openapi.json POST /projects/{project_id}/tools/#AIRTABLE_CREATE_RECORD # Fetch Records Source: https://docs.useparagon.com/actionkit/integrations/airtable/AIRTABLE_FETCH_RECORDS actionkit/openapi.json POST /projects/{project_id}/tools/#AIRTABLE_FETCH_RECORDS # Update Record Source: https://docs.useparagon.com/actionkit/integrations/airtable/AIRTABLE_UPDATE_RECORD actionkit/openapi.json POST /projects/{project_id}/tools/#AIRTABLE_UPDATE_RECORD # Airtable Source: https://docs.useparagon.com/actionkit/integrations/airtable/overview Browse the tools available for Airtable in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Airtable. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Folder Source: https://docs.useparagon.com/actionkit/integrations/amazons3/AMAZON_S3_CREATE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#AMAZON_S3_CREATE_FOLDER # Delete Folder Source: https://docs.useparagon.com/actionkit/integrations/amazons3/AMAZON_S3_DELETE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#AMAZON_S3_DELETE_FOLDER # Download File Source: https://docs.useparagon.com/actionkit/integrations/amazons3/AMAZON_S3_DOWNLOAD_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#AMAZON_S3_DOWNLOAD_FILE This Tool will respond with a temporary signed download URL from the Amazon S3 API. Send a request to this URL to get a response with a byte stream of the file data. # List Files Source: https://docs.useparagon.com/actionkit/integrations/amazons3/AMAZON_S3_LIST_FILES actionkit/openapi.json POST /projects/{project_id}/tools/#AMAZON_S3_LIST_FILES # Upload File Source: https://docs.useparagon.com/actionkit/integrations/amazons3/AMAZON_S3_UPLOAD_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#AMAZON_S3_UPLOAD_FILE # Amazon S3 Source: https://docs.useparagon.com/actionkit/integrations/amazons3/overview Browse the tools available for Amazon S3 in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Amazon S3. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Add Task To Section Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_ADD_TASK_TO_SECTION actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_ADD_TASK_TO_SECTION # Create Comment Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_CREATE_COMMENT actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_CREATE_COMMENT # Create Project Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_CREATE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_CREATE_PROJECT # Create Task Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_CREATE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_CREATE_TASK # Get Projects Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_GET_PROJECTS actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_GET_PROJECTS # Get Project By ID Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_GET_PROJECT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_GET_PROJECT_BY_ID # Get Tasks By ID Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_GET_TASKS_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_GET_TASKS_BY_ID # Get Tasks Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_GET_TASKS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_GET_TASKS_V2 # Get Task By External ID Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_GET_TASK_BY_EXTERNAL_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_GET_TASK_BY_EXTERNAL_ID # Get Teams Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_GET_TEAMS actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_GET_TEAMS # Get Workspaces Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_GET_WORKSPACES actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_GET_WORKSPACES # Update Task Source: https://docs.useparagon.com/actionkit/integrations/asana/ASANA_UPDATE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#ASANA_UPDATE_TASK # Asana Source: https://docs.useparagon.com/actionkit/integrations/asana/overview Browse the tools and triggers available for Asana in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Comment Source: https://docs.useparagon.com/actionkit/integrations/asana/triggers/ASANA_TRIGGER_COMMENT_CREATED Trigger when a new comment is created in Asana ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "asana", "type": "ASANA_TRIGGER_COMMENT_CREATED", "parameters": { "projectId": "example-value" } } ``` **Configuration options:** Select a Project to watch for comments. Use Connect Portal Workflow Settings to allow users to select an Asana Project. * Options can be loaded by using the `projects` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # New Project Source: https://docs.useparagon.com/actionkit/integrations/asana/triggers/ASANA_TRIGGER_PROJECT_CREATED Trigger when a new project is created in Asana ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "asana", "type": "ASANA_TRIGGER_PROJECT_CREATED", "parameters": { "workspaceId": "example-value" } } ``` **Configuration options:** Workspace ID * Options can be loaded by using the `workspaces` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Tag Added Source: https://docs.useparagon.com/actionkit/integrations/asana/triggers/ASANA_TRIGGER_TAG_ADDED Trigger when a tag is added in Asana ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "asana", "type": "ASANA_TRIGGER_TAG_ADDED", "parameters": { "tagId": "example-value" } } ``` **Configuration options:** Tag ID * Options can be loaded by using the `tags` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Task Completed Source: https://docs.useparagon.com/actionkit/integrations/asana/triggers/ASANA_TRIGGER_TASK_COMPLETED Trigger when a task is completed in Asana ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "asana", "type": "ASANA_TRIGGER_TASK_COMPLETED", "parameters": { "projectId": "example-value" } } ``` **Configuration options:** Project ID * Options can be loaded by using the `projects` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # New Task Source: https://docs.useparagon.com/actionkit/integrations/asana/triggers/ASANA_TRIGGER_TASK_CREATED Trigger when a new task is created in Asana ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "asana", "type": "ASANA_TRIGGER_TASK_CREATED", "parameters": { "projectId": "example-value" } } ``` **Configuration options:** Project ID * Options can be loaded by using the `projects` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Task Deleted Source: https://docs.useparagon.com/actionkit/integrations/asana/triggers/ASANA_TRIGGER_TASK_DELETED Trigger when a task is deleted in Asana ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "asana", "type": "ASANA_TRIGGER_TASK_DELETED", "parameters": { "projectId": "example-value" } } ``` **Configuration options:** Project ID * Options can be loaded by using the `projects` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Task Updated Source: https://docs.useparagon.com/actionkit/integrations/asana/triggers/ASANA_TRIGGER_TASK_UPDATED Trigger when a task is updated in Asana ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "asana", "type": "ASANA_TRIGGER_TASK_UPDATED", "parameters": { "projectId": "example-value" } } ``` **Configuration options:** Project ID * Options can be loaded by using the `projects` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Create Workitem Source: https://docs.useparagon.com/actionkit/integrations/azuredevops/AZURE_DEVOPS_CREATE_WORKITEM actionkit/openapi.json POST /projects/{project_id}/tools/#AZURE_DEVOPS_CREATE_WORKITEM # Delete Workitem Source: https://docs.useparagon.com/actionkit/integrations/azuredevops/AZURE_DEVOPS_DELETE_WORKITEM actionkit/openapi.json POST /projects/{project_id}/tools/#AZURE_DEVOPS_DELETE_WORKITEM # Search Workitems Source: https://docs.useparagon.com/actionkit/integrations/azuredevops/AZURE_DEVOPS_SEARCH_WORKITEMS actionkit/openapi.json POST /projects/{project_id}/tools/#AZURE_DEVOPS_SEARCH_WORKITEMS # Update Workitem Source: https://docs.useparagon.com/actionkit/integrations/azuredevops/AZURE_DEVOPS_UPDATE_WORKITEM actionkit/openapi.json POST /projects/{project_id}/tools/#AZURE_DEVOPS_UPDATE_WORKITEM # Azure DevOps Source: https://docs.useparagon.com/actionkit/integrations/azuredevops/overview Browse the tools available for Azure DevOps in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Azure DevOps. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Add List Field Value Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_ADD_LIST_FIELD_VALUE actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_ADD_LIST_FIELD_VALUE # Adjust Time Off Balance For Employee Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_ADJUST_TIME_OFF_BALANCE_FOR_EMPLOYEE actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_ADJUST_TIME_OFF_BALANCE_FOR_EMPLOYEE # Change Request Status Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_CHANGE_REQUEST_STATUS actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_CHANGE_REQUEST_STATUS # Create Employee Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_CREATE_EMPLOYEE actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_CREATE_EMPLOYEE # Create Time Off Request Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_CREATE_TIME_OFF_REQUEST actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_CREATE_TIME_OFF_REQUEST # Get Employee By ID Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_GET_EMPLOYEE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_GET_EMPLOYEE_BY_ID # Get Employee Directory Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_GET_EMPLOYEE_DIRECTORY actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_GET_EMPLOYEE_DIRECTORY # Get Field List Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_GET_FIELD_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_GET_FIELD_LIST # Get Time Off Requests For Employee Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_GET_TIME_OFF_REQUESTS_FOR_EMPLOYEE actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_GET_TIME_OFF_REQUESTS_FOR_EMPLOYEE # Get Time Off Types Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_GET_TIME_OFF_TYPES actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_GET_TIME_OFF_TYPES # Update Employee Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/BAMBOO_HR_UPDATE_EMPLOYEE actionkit/openapi.json POST /projects/{project_id}/tools/#BAMBOO_HR_UPDATE_EMPLOYEE # BambooHR Source: https://docs.useparagon.com/actionkit/integrations/bamboohr/overview Browse the tools available for BambooHR in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for BambooHR. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Folder Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_CREATE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_CREATE_FOLDER # Delete Folder Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_DELETE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_DELETE_FOLDER # Download File Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_DOWNLOAD_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_DOWNLOAD_FILE This Tool will respond with a temporary signed download URL from the Box API. Send a request to this URL to get a response with a byte stream of the file data. # Get File By ID Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_GET_FILE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_GET_FILE_BY_ID # Get Folder By ID Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_GET_FOLDER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_GET_FOLDER_BY_ID # List Files Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_LIST_FILES actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_LIST_FILES # Move Folder Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_MOVE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_MOVE_FOLDER # Save File Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_SAVE_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_SAVE_FILE # Save File From Object Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_SAVE_FILE_FROM_OBJECT actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_SAVE_FILE_FROM_OBJECT # Search Folders Source: https://docs.useparagon.com/actionkit/integrations/box/BOX_SEARCH_FOLDERS actionkit/openapi.json POST /projects/{project_id}/tools/#BOX_SEARCH_FOLDERS # Box Source: https://docs.useparagon.com/actionkit/integrations/box/overview Browse the tools available for Box in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Box. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Cancel Event Source: https://docs.useparagon.com/actionkit/integrations/calendly/CALENDLY_CANCEL_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#CALENDLY_CANCEL_EVENT # Get Available Times For Event Type Source: https://docs.useparagon.com/actionkit/integrations/calendly/CALENDLY_GET_AVAILABLE_TIMES_FOR_EVENT_TYPE actionkit/openapi.json POST /projects/{project_id}/tools/#CALENDLY_GET_AVAILABLE_TIMES_FOR_EVENT_TYPE # Get Event By ID Source: https://docs.useparagon.com/actionkit/integrations/calendly/CALENDLY_GET_EVENT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#CALENDLY_GET_EVENT_BY_ID # Get Event Invitees Source: https://docs.useparagon.com/actionkit/integrations/calendly/CALENDLY_GET_EVENT_INVITEES actionkit/openapi.json POST /projects/{project_id}/tools/#CALENDLY_GET_EVENT_INVITEES # Get Event Types Source: https://docs.useparagon.com/actionkit/integrations/calendly/CALENDLY_GET_EVENT_TYPES actionkit/openapi.json POST /projects/{project_id}/tools/#CALENDLY_GET_EVENT_TYPES # Search Events Source: https://docs.useparagon.com/actionkit/integrations/calendly/CALENDLY_SEARCH_EVENTS actionkit/openapi.json POST /projects/{project_id}/tools/#CALENDLY_SEARCH_EVENTS # Calendly Source: https://docs.useparagon.com/actionkit/integrations/calendly/overview Browse the tools and triggers available for Calendly in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Invitee Canceled Source: https://docs.useparagon.com/actionkit/integrations/calendly/triggers/CALENDLY_TRIGGER_INVITEE_CANCELED Trigger when a new Calendly invitee is cancelled. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "calendly", "type": "CALENDLY_TRIGGER_INVITEE_CANCELED", "parameters": { "scope": "user" } } ``` **Configuration options:** Specify whether to only trigger for newly created invitees for all events that are associated with this user or for all newly scheduled events in the organization. * Default: `user` * Allowed values: `organization`, `user` # Invitee Created Source: https://docs.useparagon.com/actionkit/integrations/calendly/triggers/CALENDLY_TRIGGER_INVITEE_CREATED Trigger when a new Calendly invitee is created. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "calendly", "type": "CALENDLY_TRIGGER_INVITEE_CREATED", "parameters": { "scope": "user" } } ``` **Configuration options:** Specify whether to only trigger for newly created invitees for all events that are associated with this user or for all newly scheduled events in the organization. * Default: `user` * Allowed values: `organization`, `user` # Create Task Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_CREATE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_CREATE_TASK # Delete Task Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_DELETE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_DELETE_TASK # Get All Fields In List Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_GET_ALL_FIELDS_IN_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_GET_ALL_FIELDS_IN_LIST # Get Custom Fields In List Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_GET_CUSTOM_FIELDS_IN_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_GET_CUSTOM_FIELDS_IN_LIST # Get Folders Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_GET_FOLDERS actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_GET_FOLDERS # Get List Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_GET_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_GET_LIST # Get Member Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_GET_MEMBER actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_GET_MEMBER # Get Space Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_GET_SPACE actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_GET_SPACE # Get Task In List Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_GET_TASK_IN_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_GET_TASK_IN_LIST # Search Tasks Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_SEARCH_TASKS actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_SEARCH_TASKS # Update Task Source: https://docs.useparagon.com/actionkit/integrations/clickup/CLICKUP_UPDATE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLICKUP_UPDATE_TASK # ClickUp Source: https://docs.useparagon.com/actionkit/integrations/clickup/overview Browse the tools and triggers available for ClickUp in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Folder Created Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_FOLDER_CREATED Trigger when a Folder is created in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_FOLDER_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Folder Updated Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_FOLDER_UPDATED Trigger when a Folder is updated in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_FOLDER_UPDATED", "parameters": { "spaceId": "example-value" } } ``` **Configuration options:** Trigger when a Folder is created within the provided Space. Use Connect Portal Workflow Settings to allow users to select a ClickUp Space. Defaults to watching all Spaces. * Options can be loaded by using the `spaceCacheKey` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # New List Created Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_LIST_CREATED Trigger when a List is created in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_LIST_CREATED", "parameters": { "spaceId": "example-value", "folderId": "example-value" } } ``` **Configuration options:** Trigger when a List is created within this Space. Use Connect Portal Workflow Settings to allow users to select a ClickUp Space. Defaults to all Spaces. * Options can be loaded by using the `spaceCacheKey` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Trigger when a List is created within this Folder. Use Connect Portal Workflow Settings to allow users to select a ClickUp Space. Defaults to provided Space. * Options can be loaded by using the `folderCacheKey` key after selecting `spaceId`. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # List Updated Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_LIST_UPDATED Trigger when a List is updated in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_LIST_UPDATED", "parameters": { "spaceId": "example-value", "folderId": "example-value", "listId": "example-value" } } ``` **Configuration options:** Trigger when a List is updated within this Space. Use Connect Portal Workflow Settings to allow users to select a ClickUp Space. Defaults to all Spaces. * Options can be loaded by using the `spaceCacheKey` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Trigger when a List is updated within this Folder. Use Connect Portal Workflow Settings to allow users to select a ClickUp Folder. Defaults to provided Folder. * Options can be loaded by using the `folderCacheKey` key after selecting `spaceId`. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Provide a List to watch for updates. Use Connect Portal Workflow Settings to allow users to select a ClickUp List. Defaults to provided Folder. * Options can be loaded by using the `listCacheKey` key after selecting `spaceId`. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # New Space Created Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_SPACE_CREATED Trigger when a Space is created in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_SPACE_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Space Updated Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_SPACE_UPDATED Trigger when a Space is updated in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_SPACE_UPDATED", "parameters": { "spaceId": "example-value" } } ``` **Configuration options:** Provide a Space to watch for updates. Use Connect Portal Workflow Settings to allow users to select a ClickUp Space. Defaults to all Spaces. * Options can be loaded by using the `spaceCacheKey` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # New Task Created Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_TASK_CREATED Trigger when a Task is created in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_TASK_CREATED", "parameters": { "listId": "example-value" } } ``` **Configuration options:** Select a List to create this task in. Use Connect Portal User Settings to allow users to select a ClickUp List. * Options can be loaded by using the `listCacheKey` key after selecting `spaceId`. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # New Comment on Task Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_TASK_NEW_COMMENT_ADDED Trigger when a comment is added to a Task in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_TASK_NEW_COMMENT_ADDED", "parameters": { "listId": "example-value", "taskId": "example-value" } } ``` **Configuration options:** Trigger when a comment is added to a Task within the provided List. Use Connect Portal Workflow Settings to allow users to select a ClickUp List. * Options can be loaded by using the `listCacheKey` key after selecting `spaceId`. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Trigger when a comment is added to the provided Task. Defaults to subscribing to all Tasks within the List. # Task Updated Source: https://docs.useparagon.com/actionkit/integrations/clickup/triggers/CLICKUP_TRIGGER_TASK_UPDATED Trigger when a Task is updated in ClickUp ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "clickup", "type": "CLICKUP_TRIGGER_TASK_UPDATED", "parameters": { "listId": "example-value" } } ``` **Configuration options:** Select a List to create this task in. Use Connect Portal User Settings to allow users to select a ClickUp List. * Options can be loaded by using the `listCacheKey` key after selecting `spaceId`. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Advanced Filtering Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_ADVANCED_FILTERING actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_ADVANCED_FILTERING # Create Record Contact Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_CREATE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_CREATE_RECORD_CONTACT # Create Record Lead Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_CREATE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_CREATE_RECORD_LEAD # Create Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_CREATE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_CREATE_RECORD_OPPORTUNITY # Create Record Task Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_CREATE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_CREATE_RECORD_TASK # Delete Record Contact Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_DELETE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_DELETE_RECORD_CONTACT # Delete Record Lead Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_DELETE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_DELETE_RECORD_LEAD # Delete Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_DELETE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_DELETE_RECORD_OPPORTUNITY # Delete Record Task Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_DELETE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_DELETE_RECORD_TASK # Get Custom Fields Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_GET_CUSTOM_FIELDS actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_GET_CUSTOM_FIELDS # Get Record By ID Contact Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_GET_RECORD_BY_ID_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_GET_RECORD_BY_ID_CONTACT # Get Record By ID Lead Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_GET_RECORD_BY_ID_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_GET_RECORD_BY_ID_LEAD # Get Record By ID Opportunity Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_GET_RECORD_BY_ID_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_GET_RECORD_BY_ID_OPPORTUNITY # Get Record By ID Task Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_GET_RECORD_BY_ID_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_GET_RECORD_BY_ID_TASK # Search Record Contact Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_SEARCH_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_SEARCH_RECORD_CONTACT # Search Record Lead Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_SEARCH_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_SEARCH_RECORD_LEAD # Search Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_SEARCH_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_SEARCH_RECORD_OPPORTUNITY # Search Record Task Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_SEARCH_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_SEARCH_RECORD_TASK # Update Record Contact Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_UPDATE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_UPDATE_RECORD_CONTACT # Update Record Lead Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_UPDATE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_UPDATE_RECORD_LEAD # Update Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_UPDATE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_UPDATE_RECORD_OPPORTUNITY # Update Record Task Source: https://docs.useparagon.com/actionkit/integrations/close/CLOSE_UPDATE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#CLOSE_UPDATE_RECORD_TASK # Close Source: https://docs.useparagon.com/actionkit/integrations/close/overview Browse the tools available for Close in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Close. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Document Source: https://docs.useparagon.com/actionkit/integrations/coda/CODA_CREATE_DOCUMENT actionkit/openapi.json POST /projects/{project_id}/tools/#CODA_CREATE_DOCUMENT # Delete Document Source: https://docs.useparagon.com/actionkit/integrations/coda/CODA_DELETE_DOCUMENT actionkit/openapi.json POST /projects/{project_id}/tools/#CODA_DELETE_DOCUMENT # Get Document By ID Source: https://docs.useparagon.com/actionkit/integrations/coda/CODA_GET_DOCUMENT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#CODA_GET_DOCUMENT_BY_ID # Get Table By ID Source: https://docs.useparagon.com/actionkit/integrations/coda/CODA_GET_TABLE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#CODA_GET_TABLE_BY_ID # Search Documents Source: https://docs.useparagon.com/actionkit/integrations/coda/CODA_SEARCH_DOCUMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#CODA_SEARCH_DOCUMENTS # Search Tables Source: https://docs.useparagon.com/actionkit/integrations/coda/CODA_SEARCH_TABLES actionkit/openapi.json POST /projects/{project_id}/tools/#CODA_SEARCH_TABLES # Coda Source: https://docs.useparagon.com/actionkit/integrations/coda/overview Browse the tools available for Coda in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Coda. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Page Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_CREATE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_CREATE_PAGE # Delete Page Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_DELETE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_DELETE_PAGE # Get Blog Posts Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_GET_BLOG_POSTS actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_GET_BLOG_POSTS # Get Pages By Label Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_GET_PAGES_BY_LABEL actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_GET_PAGES_BY_LABEL # Get Pages In Space Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_GET_PAGES_IN_SPACE actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_GET_PAGES_IN_SPACE # Get Page By ID Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_GET_PAGE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_GET_PAGE_BY_ID # Get Space By ID Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_GET_SPACE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_GET_SPACE_BY_ID # Search Pages Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_SEARCH_PAGES actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_SEARCH_PAGES # Search Spaces Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_SEARCH_SPACES actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_SEARCH_SPACES # Update Page Source: https://docs.useparagon.com/actionkit/integrations/confluence/CONFLUENCE_UPDATE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#CONFLUENCE_UPDATE_PAGE # Confluence Source: https://docs.useparagon.com/actionkit/integrations/confluence/overview Browse the tools available for Confluence in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Confluence. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create An Envelope Source: https://docs.useparagon.com/actionkit/integrations/docusign/DOCUSIGN_CREATE_AN_ENVELOPE actionkit/openapi.json POST /projects/{project_id}/tools/#DOCUSIGN_CREATE_AN_ENVELOPE # Envelope Custom Field Source: https://docs.useparagon.com/actionkit/integrations/docusign/DOCUSIGN_ENVELOPE_CUSTOM_FIELD actionkit/openapi.json POST /projects/{project_id}/tools/#DOCUSIGN_ENVELOPE_CUSTOM_FIELD # Get Envelope By ID Source: https://docs.useparagon.com/actionkit/integrations/docusign/DOCUSIGN_GET_ENVELOPE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DOCUSIGN_GET_ENVELOPE_BY_ID # Search Envelopes Source: https://docs.useparagon.com/actionkit/integrations/docusign/DOCUSIGN_SEARCH_ENVELOPES actionkit/openapi.json POST /projects/{project_id}/tools/#DOCUSIGN_SEARCH_ENVELOPES # Send An Envelope Source: https://docs.useparagon.com/actionkit/integrations/docusign/DOCUSIGN_SEND_AN_ENVELOPE actionkit/openapi.json POST /projects/{project_id}/tools/#DOCUSIGN_SEND_AN_ENVELOPE # Update Envelope Source: https://docs.useparagon.com/actionkit/integrations/docusign/DOCUSIGN_UPDATE_ENVELOPE actionkit/openapi.json POST /projects/{project_id}/tools/#DOCUSIGN_UPDATE_ENVELOPE # DocuSign Source: https://docs.useparagon.com/actionkit/integrations/docusign/overview Browse the tools available for DocuSign in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for DocuSign. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Folder Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_CREATE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_CREATE_FOLDER # Delete Folder Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_DELETE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_DELETE_FOLDER # Download File Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_DOWNLOAD_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_DOWNLOAD_FILE This Tool will respond with a temporary signed download URL from the Dropbox API. Send a request to this URL to get a response with a byte stream of the file data. # Get Folder By ID Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_GET_FOLDER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_GET_FOLDER_BY_ID # List Files Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_LIST_FILES actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_LIST_FILES # Move Folder Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_MOVE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_MOVE_FOLDER # Save File Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_SAVE_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SAVE_FILE # Search Folders Source: https://docs.useparagon.com/actionkit/integrations/dropbox/DROPBOX_SEARCH_FOLDERS actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SEARCH_FOLDERS # Dropbox Source: https://docs.useparagon.com/actionkit/integrations/dropbox/overview Browse the tools and triggers available for Dropbox in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # File Created Source: https://docs.useparagon.com/actionkit/integrations/dropbox/triggers/TRIGGER_DROPBOX_FILE_CREATED Trigger when a file is created in dropbox ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "dropbox", "type": "TRIGGER_DROPBOX_FILE_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # File Deleted Source: https://docs.useparagon.com/actionkit/integrations/dropbox/triggers/TRIGGER_DROPBOX_FILE_DELETED Trigger when a file is deleted in dropbox ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "dropbox", "type": "TRIGGER_DROPBOX_FILE_DELETED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # File Updated Source: https://docs.useparagon.com/actionkit/integrations/dropbox/triggers/TRIGGER_DROPBOX_FILE_UPDATED Trigger when a file is updated in dropbox ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "dropbox", "type": "TRIGGER_DROPBOX_FILE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Cancel Incomplete Signature Request Source: https://docs.useparagon.com/actionkit/integrations/dropboxsign/DROPBOX_SIGN_CANCEL_INCOMPLETE_SIGNATURE_REQUEST actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SIGN_CANCEL_INCOMPLETE_SIGNATURE_REQUEST # Create And Send Signature Request Source: https://docs.useparagon.com/actionkit/integrations/dropboxsign/DROPBOX_SIGN_CREATE_AND_SEND_SIGNATURE_REQUEST actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SIGN_CREATE_AND_SEND_SIGNATURE_REQUEST # Download Files Source: https://docs.useparagon.com/actionkit/integrations/dropboxsign/DROPBOX_SIGN_DOWNLOAD_FILES actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SIGN_DOWNLOAD_FILES This Tool will respond with a temporary signed download URL from the Dropbox Sign API. Send a request to this URL to get a response with a byte stream of the file data. # Get Signature Request By ID Source: https://docs.useparagon.com/actionkit/integrations/dropboxsign/DROPBOX_SIGN_GET_SIGNATURE_REQUEST_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SIGN_GET_SIGNATURE_REQUEST_BY_ID # Search Signature Requests Source: https://docs.useparagon.com/actionkit/integrations/dropboxsign/DROPBOX_SIGN_SEARCH_SIGNATURE_REQUESTS actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SIGN_SEARCH_SIGNATURE_REQUESTS # Update Signature Request Source: https://docs.useparagon.com/actionkit/integrations/dropboxsign/DROPBOX_SIGN_UPDATE_SIGNATURE_REQUEST actionkit/openapi.json POST /projects/{project_id}/tools/#DROPBOX_SIGN_UPDATE_SIGNATURE_REQUEST # Dropbox Sign Source: https://docs.useparagon.com/actionkit/integrations/dropboxsign/overview Browse the tools available for Dropbox Sign in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Dropbox Sign. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Payment Term Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_CREATE_PAYMENT_TERM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_CREATE_PAYMENT_TERM # Create Purchase Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_CREATE_PURCHASE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_CREATE_PURCHASE_INVOICE # Create Purchase Invoice Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_CREATE_PURCHASE_INVOICE_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_CREATE_PURCHASE_INVOICE_LINE_ITEM # Create Tax Group Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_CREATE_TAX_GROUP actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_CREATE_TAX_GROUP # Create Vendor Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_CREATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_CREATE_VENDOR # Delete Payment Term Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_DELETE_PAYMENT_TERM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_DELETE_PAYMENT_TERM # Delete Purchase Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_DELETE_PURCHASE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_DELETE_PURCHASE_INVOICE # Delete Purchase Invoice Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_DELETE_PURCHASE_INVOICE_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_DELETE_PURCHASE_INVOICE_LINE_ITEM # Delete Tax Group Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_DELETE_TAX_GROUP actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_DELETE_TAX_GROUP # Delete Vendor Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_DELETE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_DELETE_VENDOR # Get Accounts Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_ACCOUNTS # Get Account By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_ACCOUNT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_ACCOUNT_BY_ID # Get Payment Term By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_PAYMENT_TERM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_PAYMENT_TERM_BY_ID # Get Purchase Invoice By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_PURCHASE_INVOICE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_PURCHASE_INVOICE_BY_ID # Get Purchase Invoice Lines Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_PURCHASE_INVOICE_LINES actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_PURCHASE_INVOICE_LINES # Get Purchase Invoice Line Item By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_PURCHASE_INVOICE_LINE_ITEM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_PURCHASE_INVOICE_LINE_ITEM_BY_ID # Get Tax Group By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_TAX_GROUP_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_TAX_GROUP_BY_ID # Get Vendor By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_GET_VENDOR_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_GET_VENDOR_BY_ID # Post Purchase Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_POST_PURCHASE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_POST_PURCHASE_INVOICE # Search For Purchase Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_SEARCH_FOR_PURCHASE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_SEARCH_FOR_PURCHASE_INVOICE # Search Payment Term Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_SEARCH_PAYMENT_TERM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_SEARCH_PAYMENT_TERM # Search Purchase Invoice Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_SEARCH_PURCHASE_INVOICE_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_SEARCH_PURCHASE_INVOICE_LINE_ITEM # Search Tax Group Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_SEARCH_TAX_GROUP actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_SEARCH_TAX_GROUP # Search Vendor Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_SEARCH_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_SEARCH_VENDOR # Update Payment Term Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_UPDATE_PAYMENT_TERM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_UPDATE_PAYMENT_TERM # Update Purchase Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_UPDATE_PURCHASE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_UPDATE_PURCHASE_INVOICE # Update Purchase Invoice Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_UPDATE_PURCHASE_INVOICE_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_UPDATE_PURCHASE_INVOICE_LINE_ITEM # Update Tax Group Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_UPDATE_TAX_GROUP actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_UPDATE_TAX_GROUP # Update Vendor Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/DYNAMICS_BUSINESS_CENTRAL_UPDATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_BUSINESS_CENTRAL_UPDATE_VENDOR # Dynamics 365 Business Central Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/overview Browse the tools and triggers available for Dynamics 365 Business Central in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when a new Dynamics Business Central record is created. **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Record Created Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/triggers/DYNAMICS_BUSINESS_CENTRAL_TRIGGER_RECORD_CREATED Trigger when a new Dynamics Business Central record is created. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "dynamicsbusinesscentral", "type": "DYNAMICS_BUSINESS_CENTRAL_TRIGGER_RECORD_CREATED", "parameters": { "recordType": "purchaseInvoices", "businessCentralFilterFormula": "Field" } } ``` **Configuration options:** Record Type * Allowed values: Purchase Invoice (`purchaseInvoices`), Vendors (`vendors`) * Options can be loaded by using the `recordType` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to `purchaseInvoices`. Only trigger on records that match these filters. * Example value: `Field` * Supported filter fields: `id`, `vendorName`, `vendorInvoiceNumber`, `dueDate`, `postingDate`, `status` * Supported filter fields are loaded from `getFields` after selecting `recordType`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$numberEquals`, `$numberGreaterThan`, `$numberLessThan`, `$numberGreaterThanOrEqualTo`, `$numberDoesNotEqual`, `$dateTimeEquals`, `$dateTimeBefore`, `$dateTimeAfter`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `vendors`. Only trigger on records that match these filters. * Example value: `Field` * Supported filter fields: `id`, `displayName`, `number`, `email`, `taxRegistrationNumber`, `paymentTermsId` * Supported filter fields are loaded from `getFields` after selecting `recordType`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$numberEquals`, `$numberGreaterThan`, `$numberLessThan`, `$numberGreaterThanOrEqualTo`, `$numberDoesNotEqual`, `$dateTimeEquals`, `$dateTimeBefore`, `$dateTimeAfter`, `$booleanTrue`, `$booleanFalse` # Record Deleted Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/triggers/DYNAMICS_BUSINESS_CENTRAL_TRIGGER_RECORD_DELETED Trigger when a Dynamics Business Central record is deleted. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "dynamicsbusinesscentral", "type": "DYNAMICS_BUSINESS_CENTRAL_TRIGGER_RECORD_DELETED", "parameters": { "recordType": "purchaseInvoices" } } ``` **Configuration options:** Record Type * Allowed values: `purchaseInvoices`, `vendors` * Options can be loaded by using the `recordType` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Record Updated Source: https://docs.useparagon.com/actionkit/integrations/dynamicsbusinesscentral/triggers/DYNAMICS_BUSINESS_CENTRAL_TRIGGER_RECORD_UPDATED Trigger when a Dynamics Business Central record is updated. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "dynamicsbusinesscentral", "type": "DYNAMICS_BUSINESS_CENTRAL_TRIGGER_RECORD_UPDATED", "parameters": { "recordType": "purchaseInvoices", "businessCentralFilterFormula": "Field" } } ``` **Configuration options:** Record Type * Allowed values: Purchase Invoice (`purchaseInvoices`), Vendors (`vendors`) * Options can be loaded by using the `recordType` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to `purchaseInvoices`. Only trigger on records that match these filters. * Example value: `Field` * Supported filter fields: `id`, `vendorName`, `vendorInvoiceNumber`, `dueDate`, `postingDate`, `status` * Supported filter fields are loaded from `getFields` after selecting `recordType`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$numberEquals`, `$numberGreaterThan`, `$numberLessThan`, `$numberGreaterThanOrEqualTo`, `$numberDoesNotEqual`, `$dateTimeEquals`, `$dateTimeBefore`, `$dateTimeAfter`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `vendors`. Only trigger on records that match these filters. * Example value: `Field` * Supported filter fields: `id`, `displayName`, `number`, `email`, `taxRegistrationNumber`, `paymentTermsId` * Supported filter fields are loaded from `getFields` after selecting `recordType`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$numberEquals`, `$numberGreaterThan`, `$numberLessThan`, `$numberGreaterThanOrEqualTo`, `$numberDoesNotEqual`, `$dateTimeEquals`, `$dateTimeBefore`, `$dateTimeAfter`, `$booleanTrue`, `$booleanFalse` # Create Bill Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_BILL # Create Bill Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_BILL_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_BILL_LINE_ITEM # Create Customer Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_CUSTOMER # Create Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_INVOICE # Create Invoice Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_INVOICE_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_INVOICE_LINE_ITEM # Create Payment Journal Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_PAYMENT_JOURNAL actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_PAYMENT_JOURNAL # Create Payment Journal Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_PAYMENT_JOURNAL_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_PAYMENT_JOURNAL_LINE_ITEM # Create Vendor Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_CREATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_CREATE_VENDOR # Delete Bill Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_DELETE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_DELETE_BILL # Delete Bill Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_DELETE_BILL_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_DELETE_BILL_LINE_ITEM # Delete Customer Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_DELETE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_DELETE_CUSTOMER # Delete Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_DELETE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_DELETE_INVOICE # Delete Invoice Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_DELETE_INVOICE_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_DELETE_INVOICE_LINE_ITEM # Delete Payment Journal Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_DELETE_PAYMENT_JOURNAL actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_DELETE_PAYMENT_JOURNAL # Delete Payment Journal Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_DELETE_PAYMENT_JOURNAL_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_DELETE_PAYMENT_JOURNAL_LINE_ITEM # Get Accounts Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_ACCOUNTS # Get Bill By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_BILL_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_BILL_BY_ID # Get Bill Line Item By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_BILL_LINE_ITEM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_BILL_LINE_ITEM_BY_ID # Get Customer By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_CUSTOMER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_CUSTOMER_BY_ID # Get Invoice By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_INVOICE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_INVOICE_BY_ID # Get Invoice Line Item By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_INVOICE_LINE_ITEM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_INVOICE_LINE_ITEM_BY_ID # Get Payment Journal By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_PAYMENT_JOURNAL_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_PAYMENT_JOURNAL_BY_ID # Get Payment Journal Line Item By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_PAYMENT_JOURNAL_LINE_ITEM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_PAYMENT_JOURNAL_LINE_ITEM_BY_ID # Get Vendor By ID Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_GET_VENDOR_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_GET_VENDOR_BY_ID # Search Bills Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_BILLS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_BILLS # Search Bill Line Items Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_BILL_LINE_ITEMS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_BILL_LINE_ITEMS # Search Customers Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_CUSTOMERS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_CUSTOMERS # Search Invoices Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_INVOICES actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_INVOICES # Search Invoice Line Items Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_INVOICE_LINE_ITEMS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_INVOICE_LINE_ITEMS # Search Payment Journals Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_PAYMENT_JOURNALS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_PAYMENT_JOURNALS # Search Payment Journal Line Items Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_PAYMENT_JOURNAL_LINE_ITEMS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_PAYMENT_JOURNAL_LINE_ITEMS # Search Vendors Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_SEARCH_VENDORS actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_SEARCH_VENDORS # Update Bill Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_BILL # Update Bill Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_BILL_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_BILL_LINE_ITEM # Update Customer Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_CUSTOMER # Update Invoice Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_INVOICE # Update Invoice Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_INVOICE_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_INVOICE_LINE_ITEM # Update Payment Journal Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_PAYMENT_JOURNAL actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_PAYMENT_JOURNAL # Update Payment Journal Line Item Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_PAYMENT_JOURNAL_LINE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_PAYMENT_JOURNAL_LINE_ITEM # Update Vendor Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/DYNAMICS_365_FINANCE_UPDATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#DYNAMICS_365_FINANCE_UPDATE_VENDOR # Dynamics 365 Finance Source: https://docs.useparagon.com/actionkit/integrations/dynamicsfinance/overview Browse the tools available for Dynamics 365 Finance in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Dynamics 365 Finance. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Build Ad Creative Object Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_BUILD_AD_CREATIVE_OBJECT actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_BUILD_AD_CREATIVE_OBJECT # Create Ad Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_CREATE_AD actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_CREATE_AD # Create Ad Creative Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_CREATE_AD_CREATIVE actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_CREATE_AD_CREATIVE # Create Ad Set Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_CREATE_AD_SET actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_CREATE_AD_SET # Create Campaign Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_CREATE_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_CREATE_CAMPAIGN # Create Lead Gen Form Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_CREATE_LEAD_GEN_FORM actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_CREATE_LEAD_GEN_FORM # Get Ad By ID Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_GET_AD_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_GET_AD_BY_ID # Get Ad Sets Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_GET_AD_SETS actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_GET_AD_SETS # Get Ad Set By ID Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_GET_AD_SET_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_GET_AD_SET_BY_ID # Get Campaigns Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_GET_CAMPAIGNS actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_GET_CAMPAIGNS # Get Campaign By ID Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_GET_CAMPAIGN_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_GET_CAMPAIGN_BY_ID # Send Funnel Event Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_SEND_FUNNEL_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_SEND_FUNNEL_EVENT # Send Lead Event Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_SEND_LEAD_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_SEND_LEAD_EVENT # Send Purchase Event Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_SEND_PURCHASE_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_SEND_PURCHASE_EVENT # Update Ad Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_UPDATE_AD actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_UPDATE_AD # Update Ad Set Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_UPDATE_AD_SET actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_UPDATE_AD_SET # Update Campaign Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/FACEBOOK_ADS_UPDATE_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#FACEBOOK_ADS_UPDATE_CAMPAIGN # Facebook Ads Source: https://docs.useparagon.com/actionkit/integrations/facebookAds/overview Browse the tools available for Facebook Ads in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Facebook Ads. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Comment Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_CREATE_COMMENT actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_CREATE_COMMENT # Create Comment Reaction Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_CREATE_COMMENT_REACTION actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_CREATE_COMMENT_REACTION # Delete Comments Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_DELETE_COMMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_DELETE_COMMENTS # Delete Comment Reaction Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_DELETE_COMMENT_REACTION actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_DELETE_COMMENT_REACTION # Get Comments By File Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_GET_COMMENTS_BY_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_GET_COMMENTS_BY_FILE # Get Comment Reaction Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_GET_COMMENT_REACTION actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_GET_COMMENT_REACTION # Get File By ID Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_GET_FILE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_GET_FILE_BY_ID # Get File Nodes Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_GET_FILE_NODES actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_GET_FILE_NODES # Get Project Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_GET_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_GET_PROJECT # Get Project Files Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_GET_PROJECT_FILES actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_GET_PROJECT_FILES # Get Rendered Image Source: https://docs.useparagon.com/actionkit/integrations/figma/FIGMA_GET_RENDERED_IMAGE actionkit/openapi.json POST /projects/{project_id}/tools/#FIGMA_GET_RENDERED_IMAGE # Figma Source: https://docs.useparagon.com/actionkit/integrations/figma/overview Browse the tools available for Figma in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Figma. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Ticket Source: https://docs.useparagon.com/actionkit/integrations/freshdesk/FRESHDESK_CREATE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#FRESHDESK_CREATE_TICKET # Delete Ticket Source: https://docs.useparagon.com/actionkit/integrations/freshdesk/FRESHDESK_DELETE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#FRESHDESK_DELETE_TICKET # Get Ticket By ID Source: https://docs.useparagon.com/actionkit/integrations/freshdesk/FRESHDESK_GET_TICKET_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#FRESHDESK_GET_TICKET_BY_ID # Update Ticket Source: https://docs.useparagon.com/actionkit/integrations/freshdesk/FRESHDESK_UPDATE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#FRESHDESK_UPDATE_TICKET # Freshdesk Source: https://docs.useparagon.com/actionkit/integrations/freshdesk/overview Browse the tools available for Freshdesk in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Freshdesk. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Account Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_CREATE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_CREATE_ACCOUNT # Create Contact Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_CREATE_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_CREATE_CONTACT # Delete Account Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_DELETE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_DELETE_ACCOUNT # Delete Contact Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_DELETE_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_DELETE_CONTACT # Get Account By ID Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_GET_ACCOUNT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_GET_ACCOUNT_BY_ID # Get Contact By ID Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_GET_CONTACT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_GET_CONTACT_BY_ID # Search Accounts Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_SEARCH_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_SEARCH_ACCOUNTS # Search Contacts Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_SEARCH_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_SEARCH_CONTACTS # Update Account Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_UPDATE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_UPDATE_ACCOUNT # Update Contact Source: https://docs.useparagon.com/actionkit/integrations/front/FRONT_UPDATE_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#FRONT_UPDATE_CONTACT # Front Source: https://docs.useparagon.com/actionkit/integrations/front/overview Browse the tools available for Front in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Front. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Issue Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_CREATE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_CREATE_ISSUE # Create Release Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_CREATE_RELEASE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_CREATE_RELEASE # Delete Release Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_DELETE_RELEASE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_DELETE_RELEASE # Get File Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_GET_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_GET_FILE # Get Files Changed In Pr Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_GET_FILES_CHANGED_IN_PR actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_GET_FILES_CHANGED_IN_PR # Get Issue By Number Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_GET_ISSUE_BY_NUMBER actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_GET_ISSUE_BY_NUMBER # Get Pull Request By Number Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_GET_PULL_REQUEST_BY_NUMBER actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_GET_PULL_REQUEST_BY_NUMBER # Get Release By ID Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_GET_RELEASE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_GET_RELEASE_BY_ID # Get Release By Tag Name Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_GET_RELEASE_BY_TAG_NAME actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_GET_RELEASE_BY_TAG_NAME # Lock Issue Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_LOCK_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_LOCK_ISSUE # Search Issue Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_SEARCH_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_SEARCH_ISSUE # Update Issue Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_UPDATE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_UPDATE_ISSUE # Update Release Source: https://docs.useparagon.com/actionkit/integrations/github/GITHUB_UPDATE_RELEASE actionkit/openapi.json POST /projects/{project_id}/tools/#GITHUB_UPDATE_RELEASE # GitHub Source: https://docs.useparagon.com/actionkit/integrations/github/overview Browse the tools and triggers available for GitHub in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Project Created (Classic) Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_CLASSIC_PROJECT_CREATED Trigger when a classic Project is created in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_CLASSIC_PROJECT_CREATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Repository, Organization, and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`), Repository (`repository`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` Additional options when this parameter is set to `repository`. Specify the name of the account owner of the associated repository for this Project (Classic). * Example value: `abc` Specify the name of the associated repository for this Project (Classic). # Project Updated (Classic) Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_CLASSIC_PROJECT_UPDATED Trigger when a classic Project is updated in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_CLASSIC_PROJECT_UPDATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Repository, Organization, and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`), Repository (`repository`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` Additional options when this parameter is set to `repository`. Specify the name of the account owner of the associated repository for this Project (Classic). * Example value: `abc` Specify the name of the associated repository for this Project (Classic). # Issue Created Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_ISSUE_CREATED Trigger when an Issue is created in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_ISSUE_CREATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Repository, Organization, and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`), Repository (`repository`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` Additional options when this parameter is set to `repository`. Specify the name of the account owner of the associated repository for this Issue. * Example value: `abc` Specify the name of the associated repository for this Issue. # Issue Updated Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_ISSUE_UPDATED Trigger when an Issue is updated in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_ISSUE_UPDATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Repository, Organization, and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`), Repository (`repository`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` Additional options when this parameter is set to `repository`. Specify the name of the account owner of the associated repository for this Issue. * Example value: `abc` Specify the name of the associated repository for this Issue. # Project Created Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_PROJECT_CREATED Trigger when a Project is created in GitHub through OAuth ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_PROJECT_CREATED", "parameters": { "apiType": "organization", "organization": "Paragon" } } ``` **Configuration options:** Select the type for Organization triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: Organization (`organization`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` # Project Item Created Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_PROJECT_ITEM_CREATED Trigger when a Project Item is created in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_PROJECT_ITEM_CREATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Organization and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` # Project Item Updated Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_PROJECT_ITEM_UPDATED Trigger when a Project Item is updated in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_PROJECT_ITEM_UPDATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Organization and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` # Project Updated Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_PROJECT_UPDATED Trigger when a Project is updated in GitHub through OAuth ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_PROJECT_UPDATED", "parameters": { "apiType": "organization", "organization": "Paragon" } } ``` **Configuration options:** Select the type for Organization triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: Organization (`organization`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` # PR Created Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_PULL_REQUEST_CREATED Trigger when a PR is created in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_PULL_REQUEST_CREATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Repository, Organization, and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`), Repository (`repository`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` Additional options when this parameter is set to `repository`. Specify the name of the account owner of the associated repository for this Pull Request. * Example value: `abc` Specify the name of the associated repository for this Pull Request. # PR Updated Source: https://docs.useparagon.com/actionkit/integrations/github/triggers/GITHUB_TRIGGER_PULL_REQUEST_UPDATED Trigger when a PR is updated in GitHub ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "github", "type": "GITHUB_TRIGGER_PULL_REQUEST_UPDATED", "parameters": { "apiType": "githubApp" } } ``` **Configuration options:** Select the type for Repository, Organization, and GitHub App triggers. see the [docs](https://docs.github.com/en/webhooks-and-events/webhooks/creating-webhooks). * Allowed values: `githubApp`, Organization (`organization`), Repository (`repository`) Additional options when this parameter is set to `organization`. Specify the Organization name. The name is not case sensitive. * Example value: `Paragon` Additional options when this parameter is set to `repository`. Specify the name of the account owner of the associated repository for this Pull Request. * Example value: `abc` Specify the name of the associated repository for this Pull Request. # Create A Contact Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_CREATE_A_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_CREATE_A_CONTACT # Create Draft Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_CREATE_DRAFT actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_CREATE_DRAFT # Delete Contact Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_DELETE_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_DELETE_CONTACT # Delete Email Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_DELETE_EMAIL actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_DELETE_EMAIL # Get Contact By Resource Name Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_GET_CONTACT_BY_RESOURCE_NAME actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_GET_CONTACT_BY_RESOURCE_NAME # Get Email By ID Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_GET_EMAIL_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_GET_EMAIL_BY_ID # Search For Contact Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_SEARCH_FOR_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_SEARCH_FOR_CONTACT # Search For Email Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_SEARCH_FOR_EMAIL actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_SEARCH_FOR_EMAIL # Send Email Source: https://docs.useparagon.com/actionkit/integrations/gmail/GMAIL_SEND_EMAIL actionkit/openapi.json POST /projects/{project_id}/tools/#GMAIL_SEND_EMAIL # Gmail Source: https://docs.useparagon.com/actionkit/integrations/gmail/overview Browse the tools and triggers available for Gmail in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when an email thread is either created or updated in Gmail. Returned payload contains thread reference IDs. **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Thread Created Source: https://docs.useparagon.com/actionkit/integrations/gmail/triggers/GMAIL_TRIGGER_THREAD_CREATED Trigger when an email thread is created in Gmail ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "gmail", "type": "GMAIL_TRIGGER_THREAD_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Thread Modified Source: https://docs.useparagon.com/actionkit/integrations/gmail/triggers/GMAIL_TRIGGER_THREAD_MODIFIED Trigger when an email thread is either created or updated in Gmail. Returned payload contains thread reference IDs. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "gmail", "type": "GMAIL_TRIGGER_THREAD_MODIFIED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Thread Updated Source: https://docs.useparagon.com/actionkit/integrations/gmail/triggers/GMAIL_TRIGGER_THREAD_UPDATED Trigger when an email thread is updated in Gmail ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "gmail", "type": "GMAIL_TRIGGER_THREAD_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Add Call Source: https://docs.useparagon.com/actionkit/integrations/gong/GONG_ADD_CALL actionkit/openapi.json POST /projects/{project_id}/tools/#GONG_ADD_CALL # Get Call By ID Source: https://docs.useparagon.com/actionkit/integrations/gong/GONG_GET_CALL_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GONG_GET_CALL_BY_ID # Search Call Source: https://docs.useparagon.com/actionkit/integrations/gong/GONG_SEARCH_CALL actionkit/openapi.json POST /projects/{project_id}/tools/#GONG_SEARCH_CALL # Gong Source: https://docs.useparagon.com/actionkit/integrations/gong/overview Browse the tools available for Gong in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Gong. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Event Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_CREATE_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_CREATE_EVENT # Delete Event Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_DELETE_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_DELETE_EVENT # Get Availability Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_GET_AVAILABILITY actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_GET_AVAILABILITY # Get Contacts Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_GET_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_GET_CONTACTS # Get Event By ID Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_GET_EVENT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_GET_EVENT_BY_ID # List Directory People Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_LIST_DIRECTORY_PEOPLE actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_LIST_DIRECTORY_PEOPLE # List Events Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_LIST_EVENTS actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_LIST_EVENTS # List Other Contacts Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_LIST_OTHER_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_LIST_OTHER_CONTACTS # Search Contacts Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_SEARCH_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_SEARCH_CONTACTS # Search Directory People Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_SEARCH_DIRECTORY_PEOPLE actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_SEARCH_DIRECTORY_PEOPLE # Search Other Contacts Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_SEARCH_OTHER_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_SEARCH_OTHER_CONTACTS # Update Event Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/GOOGLE_CALENDAR_UPDATE_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_CALENDAR_UPDATE_EVENT # Google Calendar Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/overview Browse the tools and triggers available for Google Calendar in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Event Cancelled (Legacy) Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_TRIGGER_EVENT_CANCELLED Trigger when a Google Calendar Event is cancelled ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_TRIGGER_EVENT_CANCELLED", "parameters": { "calendarId": "{{settings.calendar}}", "collapseRecurringEventUpdates": true, "shouldTriggerOnPastEventUpdates": false } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). If on, recurring event updates will not be expanded into multiple instances of the event. * Default: `true` If on, this workflow will trigger when events that have already passed are cancelled. This can add significant event volume to this workflow. * Default: `false` # New Event (Legacy) Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_TRIGGER_EVENT_CREATED Trigger when a new Google Calendar Event is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_TRIGGER_EVENT_CREATED", "parameters": { "calendarId": "{{settings.calendar}}", "collapseRecurringEventUpdates": true } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). If on, recurring event updates will not be expanded into multiple instances of the event. * Default: `true` # Event Ended Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_TRIGGER_EVENT_ENDED Trigger when a Google Calendar Event ends ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_TRIGGER_EVENT_ENDED", "parameters": { "calendarId": "{{settings.calendar}}" } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Event Started Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_TRIGGER_EVENT_STARTED Trigger when a Google Calendar Event is started ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_TRIGGER_EVENT_STARTED", "parameters": { "calendarId": "{{settings.calendar}}", "timeBefore": "example-value" } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). How long before an event starts this should be triggered. # Event Updated (Legacy) Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_TRIGGER_EVENT_UPDATED Trigger when a Google Calendar Event is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_TRIGGER_EVENT_UPDATED", "parameters": { "calendarId": "{{settings.calendar}}", "collapseRecurringEventUpdates": true, "shouldTriggerOnPastEventUpdates": false } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). If on, recurring event updates will not be expanded into multiple instances of the event. * Default: `true` If on, this workflow will trigger when events that have already passed are updated. This can add significant event volume to this workflow. * Default: `false` # Event Cancelled Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_WEBHOOK_TRIGGER_EVENT_CANCELLED Trigger when a Google Calendar Event is cancelled ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_WEBHOOK_TRIGGER_EVENT_CANCELLED", "parameters": { "calendarId": "{{settings.calendar}}", "collapseRecurringEventUpdates": true, "shouldTriggerOnPastEventUpdates": false } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). If on, recurring event updates will not be expanded into multiple instances of the event. * Default: `true` If on, this workflow will trigger when events that have already passed are cancelled. This can add significant event volume to this workflow. * Default: `false` # New Event Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_WEBHOOK_TRIGGER_EVENT_CREATED Trigger when a new Google Calendar Event is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_WEBHOOK_TRIGGER_EVENT_CREATED", "parameters": { "calendarId": "{{settings.calendar}}", "collapseRecurringEventUpdates": true } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). If on, recurring event updates will not be expanded into multiple instances of the event. * Default: `true` # Event Updated Source: https://docs.useparagon.com/actionkit/integrations/googleCalendar/triggers/GOOGLE_CALENDAR_WEBHOOK_TRIGGER_EVENT_UPDATED Trigger when a Google Calendar Event is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googleCalendar", "type": "GOOGLE_CALENDAR_WEBHOOK_TRIGGER_EVENT_UPDATED", "parameters": { "calendarId": "{{settings.calendar}}", "collapseRecurringEventUpdates": true, "shouldTriggerOnPastEventUpdates": false } } ``` **Configuration options:** Use Connect Portal Workflow Settings to allow users to select a calendar. Defaults to the user’s primary calendar if left blank. * Example value: `{{settings.calendar}}` * Options can be loaded by using the `calendars` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). If on, recurring event updates will not be expanded into multiple instances of the event. * Default: `true` If on, this workflow will trigger when events that have already passed are updated. This can add significant event volume to this workflow. * Default: `false` # Create Folder Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_CREATE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_CREATE_FOLDER # Delete Folder Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_DELETE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_DELETE_FOLDER # Download File Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_DOWNLOAD_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_DOWNLOAD_FILE This Tool will respond with a byte stream of the file data from the Google Drive API. The `Content-Type` response header will vary based on the MIME type of the file. Google Workspace files, e.g. Google Docs, Slides, Sheets, will be exported to equivalent formats by default (if `mimeType` is not specified): * **Docs**: PDF file * **Sheets**: XLSX file * **Slides**: PPTX file * **Drawings**: PDF file # Export Doc Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_EXPORT_DOC actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_EXPORT_DOC # Get File By ID Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_GET_FILE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_GET_FILE_BY_ID # Get Folder By ID Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_GET_FOLDER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_GET_FOLDER_BY_ID # List Files Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_LIST_FILES actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_LIST_FILES # Move Folder Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_MOVE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_MOVE_FOLDER # Save File Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_SAVE_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_SAVE_FILE # Search Folders Source: https://docs.useparagon.com/actionkit/integrations/googledrive/GOOGLE_DRIVE_SEARCH_FOLDERS actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_DRIVE_SEARCH_FOLDERS # Google Drive Source: https://docs.useparagon.com/actionkit/integrations/googledrive/overview Browse the tools and triggers available for Google Drive in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # File Created Source: https://docs.useparagon.com/actionkit/integrations/googledrive/triggers/GOOGLE_DRIVE_TRIGGER_FILE_CREATED Trigger when a new file is created in Google Drive ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googledrive", "type": "GOOGLE_DRIVE_TRIGGER_FILE_CREATED", "parameters": { "supportsAllDrives": false } } ``` **Configuration options:** Watch for events from files in Shared Drives. Defaults to false. * Default: `false` # File Deleted Source: https://docs.useparagon.com/actionkit/integrations/googledrive/triggers/GOOGLE_DRIVE_TRIGGER_FILE_DELETED Trigger when a file is deleted in Google Drive ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googledrive", "type": "GOOGLE_DRIVE_TRIGGER_FILE_DELETED", "parameters": { "triggerOnPermanentDeletionOnly": true } } ``` **Configuration options:** Triggers only when a file is permanently deleted. If disabled, the workflow will trigger when a file is moved to the trash. * Default: `true` # File Updated Source: https://docs.useparagon.com/actionkit/integrations/googledrive/triggers/GOOGLE_DRIVE_TRIGGER_FILE_UPDATED Trigger when a file is updated in Google Drive ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googledrive", "type": "GOOGLE_DRIVE_TRIGGER_FILE_UPDATED", "parameters": { "supportsAllDrives": false, "parentId": "folder1,folder2" } } ``` **Configuration options:** Watch for events from files in Shared Drives. Defaults to false. * Default: `false` Specify the Folder ID to search for updated files within the folders. Defaults to the user’s root folder if left blank. * Example value: `folder1,folder2` * Options can be loaded by using the `folders` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Create Row Source: https://docs.useparagon.com/actionkit/integrations/googlesheets/GOOGLE_SHEETS_CREATE_ROW actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_SHEETS_CREATE_ROW # Get Row Source: https://docs.useparagon.com/actionkit/integrations/googlesheets/GOOGLE_SHEETS_GET_ROW actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_SHEETS_GET_ROW # Update Row Source: https://docs.useparagon.com/actionkit/integrations/googlesheets/GOOGLE_SHEETS_UPDATE_ROW actionkit/openapi.json POST /projects/{project_id}/tools/#GOOGLE_SHEETS_UPDATE_ROW # Google Sheets Source: https://docs.useparagon.com/actionkit/integrations/googlesheets/overview Browse the tools and triggers available for Google Sheets in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # File Created Source: https://docs.useparagon.com/actionkit/integrations/googlesheets/triggers/GOOGLE_SHEETS_TRIGGER_FILE_CREATED Trigger when a file is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googlesheets", "type": "GOOGLE_SHEETS_TRIGGER_FILE_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # File Updated Source: https://docs.useparagon.com/actionkit/integrations/googlesheets/triggers/GOOGLE_SHEETS_TRIGGER_FILE_UPDATED Trigger when a file is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "googlesheets", "type": "GOOGLE_SHEETS_TRIGGER_FILE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Create Application Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_CREATE_APPLICATION actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_CREATE_APPLICATION # Create Candidate Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_CREATE_CANDIDATE actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_CREATE_CANDIDATE # Create Job Opening Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_CREATE_JOB_OPENING actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_CREATE_JOB_OPENING # Delete Application Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_DELETE_APPLICATION actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_DELETE_APPLICATION # Delete Candidate Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_DELETE_CANDIDATE actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_DELETE_CANDIDATE # Get Application By ID Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_GET_APPLICATION_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_GET_APPLICATION_BY_ID # Get Candididate By ID Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_GET_CANDIDIDATE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_GET_CANDIDIDATE_BY_ID # Get Job Opening By ID Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_GET_JOB_OPENING_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_GET_JOB_OPENING_BY_ID # Update Application Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_UPDATE_APPLICATION actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_UPDATE_APPLICATION # Update Candidate Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_UPDATE_CANDIDATE actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_UPDATE_CANDIDATE # Update Job Opening Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/GREENHOUSE_UPDATE_JOB_OPENING actionkit/openapi.json POST /projects/{project_id}/tools/#GREENHOUSE_UPDATE_JOB_OPENING # Greenhouse Source: https://docs.useparagon.com/actionkit/integrations/greenhouse/overview Browse the tools available for Greenhouse in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Greenhouse. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Employee Source: https://docs.useparagon.com/actionkit/integrations/gusto/GUSTO_CREATE_EMPLOYEE actionkit/openapi.json POST /projects/{project_id}/tools/#GUSTO_CREATE_EMPLOYEE # Get Employee By ID Source: https://docs.useparagon.com/actionkit/integrations/gusto/GUSTO_GET_EMPLOYEE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#GUSTO_GET_EMPLOYEE_BY_ID # Get Employee Directory Source: https://docs.useparagon.com/actionkit/integrations/gusto/GUSTO_GET_EMPLOYEE_DIRECTORY actionkit/openapi.json POST /projects/{project_id}/tools/#GUSTO_GET_EMPLOYEE_DIRECTORY # Update Employee Source: https://docs.useparagon.com/actionkit/integrations/gusto/GUSTO_UPDATE_EMPLOYEE actionkit/openapi.json POST /projects/{project_id}/tools/#GUSTO_UPDATE_EMPLOYEE # Gusto Source: https://docs.useparagon.com/actionkit/integrations/gusto/overview Browse the tools available for Gusto in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Gusto. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Record Any Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_CREATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_CREATE_RECORD_ANY # Create Record Companies Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_CREATE_RECORD_COMPANIES actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_CREATE_RECORD_COMPANIES # Create Record Contacts Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_CREATE_RECORD_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_CREATE_RECORD_CONTACTS # Create Record Deals Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_CREATE_RECORD_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_CREATE_RECORD_DEALS # Create Record Engagements Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_CREATE_RECORD_ENGAGEMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_CREATE_RECORD_ENGAGEMENTS # Delete Record Any Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_DELETE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_DELETE_RECORD_ANY # Delete Record Companies Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_DELETE_RECORD_COMPANIES actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_DELETE_RECORD_COMPANIES # Delete Record Contacts Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_DELETE_RECORD_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_DELETE_RECORD_CONTACTS # Delete Record Deals Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_DELETE_RECORD_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_DELETE_RECORD_DEALS # Delete Record Engagements Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_DELETE_RECORD_ENGAGEMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_DELETE_RECORD_ENGAGEMENTS # Describe Action Schema Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_DESCRIBE_ACTION_SCHEMA actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_DESCRIBE_ACTION_SCHEMA # Get Contacts By List ID Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_CONTACTS_BY_LIST_ID actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_CONTACTS_BY_LIST_ID # Get Records Any Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORDS_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORDS_ANY # Get Records Companies Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORDS_COMPANIES actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORDS_COMPANIES # Get Records Contacts Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORDS_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORDS_CONTACTS # Get Records Deals Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORDS_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORDS_DEALS # Get Records Engagements Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORDS_ENGAGEMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORDS_ENGAGEMENTS # Get Record By ID Any Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORD_BY_ID_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORD_BY_ID_ANY # Get Record By ID Companies Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORD_BY_ID_COMPANIES actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORD_BY_ID_COMPANIES # Get Record By ID Contacts Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORD_BY_ID_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORD_BY_ID_CONTACTS # Get Record By ID Deals Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORD_BY_ID_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORD_BY_ID_DEALS # Get Record By ID Engagements Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_GET_RECORD_BY_ID_ENGAGEMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_GET_RECORD_BY_ID_ENGAGEMENTS # Search Records Any Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_SEARCH_RECORDS_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_SEARCH_RECORDS_ANY # Search Records Companies Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_SEARCH_RECORDS_COMPANIES actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_SEARCH_RECORDS_COMPANIES # Search Records Contacts Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_SEARCH_RECORDS_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_SEARCH_RECORDS_CONTACTS # Search Records Deals Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_SEARCH_RECORDS_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_SEARCH_RECORDS_DEALS # Search Records Engagements Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_SEARCH_RECORDS_ENGAGEMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_SEARCH_RECORDS_ENGAGEMENTS # Update Record Any Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_UPDATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_UPDATE_RECORD_ANY # Update Record Companies Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_UPDATE_RECORD_COMPANIES actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_UPDATE_RECORD_COMPANIES # Update Record Contacts Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_UPDATE_RECORD_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_UPDATE_RECORD_CONTACTS # Update Record Deals Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_UPDATE_RECORD_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_UPDATE_RECORD_DEALS # Update Record Engagements Source: https://docs.useparagon.com/actionkit/integrations/hubspot/HUBSPOT_UPDATE_RECORD_ENGAGEMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#HUBSPOT_UPDATE_RECORD_ENGAGEMENTS # HubSpot Source: https://docs.useparagon.com/actionkit/integrations/hubspot/overview Browse the tools and triggers available for HubSpot in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when a record is deleted for privacy/regulatory reasons **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Record Created Source: https://docs.useparagon.com/actionkit/integrations/hubspot/triggers/HUBSPOT_TRIGGER_RECORD_CREATED Trigger when a new record is created in HubSpot ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "hubspot", "type": "HUBSPOT_TRIGGER_RECORD_CREATED", "parameters": { "recordType": "companies", "filterFormula": "field" } } ``` **Configuration options:** Record type * Allowed values: `companies`, `contacts`, `deals`, Custom Object (``) * Options can be loaded by using the `cacheAllObjectTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The Name of the Custom Object to create. Use Connect Portal Workflow Settings to allow users to select a Custom Object Mapping. * Example value: `{{settings.objectType}}` Only trigger on new records that match these filters. * Example value: `field` * Supported filter fields are loaded from `cachedFields` after selecting `recordType`. * Supported operators: `$none`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$exists`, `$doesNotExist` # Record Deleted Source: https://docs.useparagon.com/actionkit/integrations/hubspot/triggers/HUBSPOT_TRIGGER_RECORD_DELETED Trigger when a record is deleted in HubSpot ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "hubspot", "type": "HUBSPOT_TRIGGER_RECORD_DELETED", "parameters": { "recordType": "companies", "filterFormula": "field" } } ``` **Configuration options:** Record type * Allowed values: `companies`, `contacts`, `deals`, Custom Object (``) * Options can be loaded by using the `cacheAllObjectTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The Name of the Custom Object to create. Use Connect Portal Workflow Settings to allow users to select a Custom Object Mapping. * Example value: `{{settings.objectType}}` Only trigger on new records that match these filters. * Example value: `field` * Supported filter fields are loaded from `cachedFields` after selecting `recordType`. * Supported operators: `$none`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$exists`, `$doesNotExist` # Record Deleted for Privacy (GDPR) Source: https://docs.useparagon.com/actionkit/integrations/hubspot/triggers/HUBSPOT_TRIGGER_RECORD_DELETED_FOR_PRIVACY Trigger when a record is deleted for privacy/regulatory reasons ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "hubspot", "type": "HUBSPOT_TRIGGER_RECORD_DELETED_FOR_PRIVACY", "parameters": { "recordType": "contact" } } ``` **Configuration options:** Record type * Allowed values: `contact`, `conversation` * Options can be loaded by using the `cacheAllObjectTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Record Updated Source: https://docs.useparagon.com/actionkit/integrations/hubspot/triggers/HUBSPOT_TRIGGER_RECORD_UPDATED Trigger when a record is updated in HubSpot ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "hubspot", "type": "HUBSPOT_TRIGGER_RECORD_UPDATED", "parameters": { "recordType": "companies", "filterFormula": "field" } } ``` **Configuration options:** Record type * Allowed values: `companies`, `contacts`, `deals`, Custom Object (``) * Options can be loaded by using the `cacheAllObjectTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The Name of the Custom Object to create. Use Connect Portal Workflow Settings to allow users to select a Custom Object Mapping. * Example value: `{{settings.objectType}}` Only trigger on new records that match these filters. * Example value: `field` * Supported filter fields are loaded from `cachedFields` after selecting `recordType`. * Supported operators: `$none`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$exists`, `$doesNotExist` # Create Contact Source: https://docs.useparagon.com/actionkit/integrations/intercom/INTERCOM_CREATE_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#INTERCOM_CREATE_CONTACT # Get Contact By ID Source: https://docs.useparagon.com/actionkit/integrations/intercom/INTERCOM_GET_CONTACT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#INTERCOM_GET_CONTACT_BY_ID # Search Contacts Source: https://docs.useparagon.com/actionkit/integrations/intercom/INTERCOM_SEARCH_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#INTERCOM_SEARCH_CONTACTS # Send Message Source: https://docs.useparagon.com/actionkit/integrations/intercom/INTERCOM_SEND_MESSAGE actionkit/openapi.json POST /projects/{project_id}/tools/#INTERCOM_SEND_MESSAGE # Update Contact Source: https://docs.useparagon.com/actionkit/integrations/intercom/INTERCOM_UPDATE_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#INTERCOM_UPDATE_CONTACT # Intercom Source: https://docs.useparagon.com/actionkit/integrations/intercom/overview Browse the tools and triggers available for Intercom in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Company Created Source: https://docs.useparagon.com/actionkit/integrations/intercom/triggers/INTERCOM_TRIGGER_COMPANY_CREATED Triggers when a new company is created in Intercom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "intercom", "type": "INTERCOM_TRIGGER_COMPANY_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Company Updated Source: https://docs.useparagon.com/actionkit/integrations/intercom/triggers/INTERCOM_TRIGGER_COMPANY_UPDATED Triggers when a company is updated in Intercom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "intercom", "type": "INTERCOM_TRIGGER_COMPANY_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # New Contact Created Source: https://docs.useparagon.com/actionkit/integrations/intercom/triggers/INTERCOM_TRIGGER_CONTACT_CREATED Triggers when a new contact is created in Intercom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "intercom", "type": "INTERCOM_TRIGGER_CONTACT_CREATED", "parameters": { "filterFormula": "filter by property" } } ``` **Configuration options:** Only trigger on records that match these filters. * Example value: `filter by property` * Supported filter fields: `id`, `owner_id`, `role` * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch` # Contact Updated Source: https://docs.useparagon.com/actionkit/integrations/intercom/triggers/INTERCOM_TRIGGER_CONTACT_UPDATED Triggers when a contact is updated in Intercom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "intercom", "type": "INTERCOM_TRIGGER_CONTACT_UPDATED", "parameters": { "filterFormula": "filter by property" } } ``` **Configuration options:** Only trigger on records that match these filters. * Example value: `filter by property` * Supported filter fields: `id`, `owner_id`, `role` * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch` # Create Issue Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_CREATE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_CREATE_ISSUE # Delete Issue Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_DELETE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_DELETE_ISSUE # Describe Action Schema Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_DESCRIBE_ACTION_SCHEMA actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_DESCRIBE_ACTION_SCHEMA # Filter Issues Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_FILTER_ISSUES actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_FILTER_ISSUES # Get All Assignees By Project Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_GET_ALL_ASSIGNEES_BY_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_GET_ALL_ASSIGNEES_BY_PROJECT # Get Issue By Key Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_GET_ISSUE_BY_KEY actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_GET_ISSUE_BY_KEY # Get Issue Status By Project Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_GET_ISSUE_STATUS_BY_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_GET_ISSUE_STATUS_BY_PROJECT # Get Issue Types Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_GET_ISSUE_TYPES actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_GET_ISSUE_TYPES # Get Issue Types By Project Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_GET_ISSUE_TYPES_BY_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_GET_ISSUE_TYPES_BY_PROJECT # Get Projects Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_GET_PROJECTS actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_GET_PROJECTS # Search By JQL Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_SEARCH_BY_JQL actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_SEARCH_BY_JQL # Update Issue Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_UPDATE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_UPDATE_ISSUE # Update Issue Any Source: https://docs.useparagon.com/actionkit/integrations/jira/JIRA_UPDATE_ISSUE_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#JIRA_UPDATE_ISSUE_ANY # Jira Source: https://docs.useparagon.com/actionkit/integrations/jira/overview Browse the tools and triggers available for Jira in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Comment Source: https://docs.useparagon.com/actionkit/integrations/jira/triggers/JIRA_TRIGGER_COMMENT_CREATED Trigger when a new Jira comment is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "jira", "type": "JIRA_TRIGGER_COMMENT_CREATED", "parameters": { "jqlQuery": "project = {{settings.project}} \nAND status = {{settings.status}}" } } ``` **Configuration options:** Only trigger when new issues match the following query using JIRA Query Language (JQL) ([https://confluence.atlassian.com/jiracoreserver073/advanced-searching-861257209.html#Advancedsearching-ConstructingJQLqueries](https://confluence.atlassian.com/jiracoreserver073/advanced-searching-861257209.html#Advancedsearching-ConstructingJQLqueries)). * Example value: `project = {{settings.project}} \nAND status = {{settings.status}}` # New Issue Source: https://docs.useparagon.com/actionkit/integrations/jira/triggers/JIRA_TRIGGER_ISSUE_CREATED Trigger when a new Jira issue is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "jira", "type": "JIRA_TRIGGER_ISSUE_CREATED", "parameters": { "jqlQuery": "project = {{settings.project}} \nAND status = {{settings.status}}" } } ``` **Configuration options:** Only trigger when new issues match the following query using JIRA Query Language (JQL) ([https://confluence.atlassian.com/jiracoreserver073/advanced-searching-861257209.html#Advancedsearching-ConstructingJQLqueries](https://confluence.atlassian.com/jiracoreserver073/advanced-searching-861257209.html#Advancedsearching-ConstructingJQLqueries)). * Example value: `project = {{settings.project}} \nAND status = {{settings.status}}` # Issue Updated Source: https://docs.useparagon.com/actionkit/integrations/jira/triggers/JIRA_TRIGGER_ISSUE_UPDATED Trigger when a Jira issue is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "jira", "type": "JIRA_TRIGGER_ISSUE_UPDATED", "parameters": { "jqlQuery": "project = {{settings.project}} \nAND status = {{settings.status}}" } } ``` **Configuration options:** Only trigger when new issues match the following query using JIRA Query Language (JQL) ([https://confluence.atlassian.com/jiracoreserver073/advanced-searching-861257209.html#Advancedsearching-ConstructingJQLqueries](https://confluence.atlassian.com/jiracoreserver073/advanced-searching-861257209.html#Advancedsearching-ConstructingJQLqueries)). * Example value: `project = {{settings.project}} \nAND status = {{settings.status}}` # Project Created Source: https://docs.useparagon.com/actionkit/integrations/jira/triggers/JIRA_TRIGGER_PROJECT_CREATED Trigger when a new Jira project is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "jira", "type": "JIRA_TRIGGER_PROJECT_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Project Updated Source: https://docs.useparagon.com/actionkit/integrations/jira/triggers/JIRA_TRIGGER_PROJECT_UPDATED Trigger when a Jira project is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "jira", "type": "JIRA_TRIGGER_PROJECT_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Add Subscriber To List Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_ADD_SUBSCRIBER_TO_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_ADD_SUBSCRIBER_TO_LIST # Create Campaign Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_CREATE_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_CREATE_CAMPAIGN # Create List Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_CREATE_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_CREATE_LIST # Create Template Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_CREATE_TEMPLATE actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_CREATE_TEMPLATE # Get Campaign Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_GET_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_GET_CAMPAIGN # Get Lists Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_GET_LISTS actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_GET_LISTS # Get List Subscriber Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_GET_LIST_SUBSCRIBER actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_GET_LIST_SUBSCRIBER # Get Profile Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_GET_PROFILE actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_GET_PROFILE # Get Segements Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_GET_SEGEMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_GET_SEGEMENTS # Get Segment Subscribers Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_GET_SEGMENT_SUBSCRIBERS actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_GET_SEGMENT_SUBSCRIBERS # Get Templates Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_GET_TEMPLATES actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_GET_TEMPLATES # Send Campaign Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_SEND_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_SEND_CAMPAIGN # Unsubscribe From List Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_UNSUBSCRIBE_FROM_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_UNSUBSCRIBE_FROM_LIST # Update Profile Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/KLAVIYO_UPDATE_PROFILE actionkit/openapi.json POST /projects/{project_id}/tools/#KLAVIYO_UPDATE_PROFILE # Klaviyo Source: https://docs.useparagon.com/actionkit/integrations/klaviyo/overview Browse the tools available for Klaviyo in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Klaviyo. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Opportunity Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_CREATE_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_CREATE_OPPORTUNITY # Create Posting Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_CREATE_POSTING actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_CREATE_POSTING # Get Contact By ID Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_GET_CONTACT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_GET_CONTACT_BY_ID # Get Opportunities Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_GET_OPPORTUNITIES actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_GET_OPPORTUNITIES # Get Opportunity By ID Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_GET_OPPORTUNITY_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_GET_OPPORTUNITY_BY_ID # Get Postings Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_GET_POSTINGS actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_GET_POSTINGS # Get Posting By ID Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_GET_POSTING_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_GET_POSTING_BY_ID # Update Contact Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_UPDATE_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_UPDATE_CONTACT # Update Posting Source: https://docs.useparagon.com/actionkit/integrations/lever/LEVER_UPDATE_POSTING actionkit/openapi.json POST /projects/{project_id}/tools/#LEVER_UPDATE_POSTING # Lever Source: https://docs.useparagon.com/actionkit/integrations/lever/overview Browse the tools available for Lever in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Lever. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Archive Issue Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_ARCHIVE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_ARCHIVE_ISSUE # Create Issue Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_CREATE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_CREATE_ISSUE # Create Project Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_CREATE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_CREATE_PROJECT # Create Sub Issue Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_CREATE_SUB_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_CREATE_SUB_ISSUE # Delete Issue Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_DELETE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_DELETE_ISSUE # Delete Project Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_DELETE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_DELETE_PROJECT # Get Issue By ID Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_GET_ISSUE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_GET_ISSUE_BY_ID # Get Issue By Issue Identifier Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_GET_ISSUE_BY_ISSUE_IDENTIFIER actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_GET_ISSUE_BY_ISSUE_IDENTIFIER # Get Project By ID Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_GET_PROJECT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_GET_PROJECT_BY_ID # Search Issue Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_SEARCH_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_SEARCH_ISSUE # Search Projects Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_SEARCH_PROJECTS actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_SEARCH_PROJECTS # Search Teams Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_SEARCH_TEAMS actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_SEARCH_TEAMS # Update Issue Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_UPDATE_ISSUE actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_UPDATE_ISSUE # Update Project Source: https://docs.useparagon.com/actionkit/integrations/linear/LINEAR_UPDATE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#LINEAR_UPDATE_PROJECT # Linear Source: https://docs.useparagon.com/actionkit/integrations/linear/overview Browse the tools and triggers available for Linear in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Issue Created Source: https://docs.useparagon.com/actionkit/integrations/linear/triggers/LINEAR_TRIGGER_ISSUE_CREATED Trigger when a new record is created in Linear ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "linear", "type": "LINEAR_TRIGGER_ISSUE_CREATED", "parameters": { "teamId": "a70bdf0f-530a-4887-857d-46151b52b47c", "filterFormula": "Field" } } ``` **Configuration options:** Use Connect Portal User Settings to allow users to select a Linear Team's ID. Leaving this blank will trigger this workflow for every public team. * Example value: `a70bdf0f-530a-4887-857d-46151b52b47c` * Options can be loaded by using the `getTeams` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Only trigger on records that match these filters. Please maintain casing of the string for proper filtering. * Example value: `Field` * Supported filter fields: `title`, `team.id`, `organizationId`, `state.id`, `labelIds` * Supported operators: `$arrayIsIn`, `$arrayIsNotIn`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$stringContains`, `$stringDoesNotContain`, `$stringGreaterThan`, `$stringLessThan`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$numberGreaterThan`, `$numberLessThan`, `$dateTimeAfter`, `$dateTimeBefore` # Issue Deleted Source: https://docs.useparagon.com/actionkit/integrations/linear/triggers/LINEAR_TRIGGER_ISSUE_DELETED Trigger when a record is deleted in Linear ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "linear", "type": "LINEAR_TRIGGER_ISSUE_DELETED", "parameters": { "teamId": "a70bdf0f-530a-4887-857d-46151b52b47c", "filterFormula": "Field" } } ``` **Configuration options:** Use Connect Portal User Settings to allow users to select a Linear Team's ID. Leaving this blank will trigger this workflow for every public team. * Example value: `a70bdf0f-530a-4887-857d-46151b52b47c` * Options can be loaded by using the `getTeams` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Only trigger on records that match these filters. Please maintain casing of the string for proper filtering. * Example value: `Field` * Supported filter fields: `title`, `team.id`, `organizationId`, `state.id`, `labelIds` * Supported operators: `$arrayIsIn`, `$arrayIsNotIn`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$stringContains`, `$stringDoesNotContain`, `$stringGreaterThan`, `$stringLessThan`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$numberGreaterThan`, `$numberLessThan`, `$dateTimeAfter`, `$dateTimeBefore` # Issue Label Added or Removed Source: https://docs.useparagon.com/actionkit/integrations/linear/triggers/LINEAR_TRIGGER_LABEL_ADDED Trigger when a label is added or removed in Linear ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "linear", "type": "LINEAR_TRIGGER_LABEL_ADDED", "parameters": { "teamId": "a70bdf0f-530a-4887-857d-46151b52b47c", "filterFormula": "Field" } } ``` **Configuration options:** Use Connect Portal User Settings to allow users to select a Linear Team's ID. Leaving this blank will trigger this workflow for every public team. * Example value: `a70bdf0f-530a-4887-857d-46151b52b47c` * Options can be loaded by using the `getTeams` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Only trigger on records that match these filters. Please maintain casing of the string for proper filtering. * Example value: `Field` * Supported filter fields: `labelIds` * Supported operators: `$arrayIsIn`, `$arrayIsNotIn`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$stringContains`, `$stringDoesNotContain`, `$stringGreaterThan`, `$stringLessThan`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$numberGreaterThan`, `$numberLessThan`, `$dateTimeAfter`, `$dateTimeBefore` # Issue Status Updated Source: https://docs.useparagon.com/actionkit/integrations/linear/triggers/LINEAR_TRIGGER_STATUS_UPDATED Trigger when an issue’s status is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "linear", "type": "LINEAR_TRIGGER_STATUS_UPDATED", "parameters": { "teamId": "a70bdf0f-530a-4887-857d-46151b52b47c", "filterFormula": "Field" } } ``` **Configuration options:** Use Connect Portal User Settings to allow users to select a Linear Team's ID. Leaving this blank will trigger this workflow for every public team. * Example value: `a70bdf0f-530a-4887-857d-46151b52b47c` * Options can be loaded by using the `getTeams` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Only trigger on records that match these filters. Please maintain casing of the string for proper filtering. * Example value: `Field` * Supported filter fields: `stateId` * Supported operators: `$arrayIsIn`, `$arrayIsNotIn`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$stringContains`, `$stringDoesNotContain`, `$stringGreaterThan`, `$stringLessThan`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$numberGreaterThan`, `$numberLessThan`, `$dateTimeAfter`, `$dateTimeBefore` # Create Post Source: https://docs.useparagon.com/actionkit/integrations/linkedin/LINKEDIN_CREATE_POST actionkit/openapi.json POST /projects/{project_id}/tools/#LINKEDIN_CREATE_POST # Get Profile By ID Source: https://docs.useparagon.com/actionkit/integrations/linkedin/LINKEDIN_GET_PROFILE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#LINKEDIN_GET_PROFILE_BY_ID # LinkedIn Source: https://docs.useparagon.com/actionkit/integrations/linkedin/overview Browse the tools available for LinkedIn in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for LinkedIn. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Add Contact To List Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_ADD_CONTACT_TO_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_ADD_CONTACT_TO_LIST # Create Campaign Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_CREATE_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_CREATE_CAMPAIGN # Create List Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_CREATE_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_CREATE_LIST # Delete Campaign By ID Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_DELETE_CAMPAIGN_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_DELETE_CAMPAIGN_BY_ID # Get Campaign By ID Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_GET_CAMPAIGN_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_GET_CAMPAIGN_BY_ID # Get Contacts From List Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_GET_CONTACTS_FROM_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_GET_CONTACTS_FROM_LIST # Get List By ID Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_GET_LIST_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_GET_LIST_BY_ID # Search Campaigns Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_SEARCH_CAMPAIGNS actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_SEARCH_CAMPAIGNS # Search Lists Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_SEARCH_LISTS actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_SEARCH_LISTS # Send Campaign Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_SEND_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_SEND_CAMPAIGN # Update Campaign Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_UPDATE_CAMPAIGN actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_UPDATE_CAMPAIGN # Update Contact To List Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/MAILCHIMP_UPDATE_CONTACT_TO_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#MAILCHIMP_UPDATE_CONTACT_TO_LIST # Mailchimp Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/overview Browse the tools and triggers available for Mailchimp in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Mailchimp Lists Source: https://docs.useparagon.com/actionkit/integrations/mailchimp/triggers/MAILCHIMP_TRIGGER_LIST Mailchimp Lists ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "mailchimp", "type": "MAILCHIMP_TRIGGER_LIST", "parameters": { "listId": "{{settings.list}}" } } ``` **Configuration options:** Unique Id for the list * Example value: `{{settings.list}}` # Add Leads To List Source: https://docs.useparagon.com/actionkit/integrations/marketo/MARKETO_ADD_LEADS_TO_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#MARKETO_ADD_LEADS_TO_LIST # Create Custom Object Source: https://docs.useparagon.com/actionkit/integrations/marketo/MARKETO_CREATE_CUSTOM_OBJECT actionkit/openapi.json POST /projects/{project_id}/tools/#MARKETO_CREATE_CUSTOM_OBJECT # Create Or Update Lead Source: https://docs.useparagon.com/actionkit/integrations/marketo/MARKETO_CREATE_OR_UPDATE_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#MARKETO_CREATE_OR_UPDATE_LEAD # Get Leads Source: https://docs.useparagon.com/actionkit/integrations/marketo/MARKETO_GET_LEADS actionkit/openapi.json POST /projects/{project_id}/tools/#MARKETO_GET_LEADS # Get Lead By ID Source: https://docs.useparagon.com/actionkit/integrations/marketo/MARKETO_GET_LEAD_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#MARKETO_GET_LEAD_BY_ID # Marketo Source: https://docs.useparagon.com/actionkit/integrations/marketo/overview Browse the tools available for Marketo in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Marketo. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Microsoft Dynamics Create Record Account Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_ACCOUNT # Microsoft Dynamics Create Record Any Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_ANY # Microsoft Dynamics Create Record Call Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_CALL actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_CALL # Microsoft Dynamics Create Record Contact Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_CONTACT # Microsoft Dynamics Create Record Lead Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_LEAD # Microsoft Dynamics Create Record Meeting Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_MEETING # Microsoft Dynamics Create Record Note Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_NOTE actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_NOTE # Microsoft Dynamics Create Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_OPPORTUNITY # Microsoft Dynamics Create Record Task Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_CREATE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_CREATE_RECORD_TASK # Microsoft Dynamics Delete Record Account Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_ACCOUNT # Microsoft Dynamics Delete Record Any Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_ANY # Microsoft Dynamics Delete Record Call Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_CALL actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_CALL # Microsoft Dynamics Delete Record Contact Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_CONTACT # Microsoft Dynamics Delete Record Lead Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_LEAD # Microsoft Dynamics Delete Record Meeting Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_MEETING # Microsoft Dynamics Delete Record Note Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_NOTE actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_NOTE # Microsoft Dynamics Delete Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_OPPORTUNITY # Microsoft Dynamics Delete Record Task Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DELETE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DELETE_RECORD_TASK # Microsoft Dynamics Describe Action Schema Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_DESCRIBE_ACTION_SCHEMA actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_DESCRIBE_ACTION_SCHEMA # Microsoft Dynamics Get Record By ID Account Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_ACCOUNT # Microsoft Dynamics Get Record By ID Any Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_ANY # Microsoft Dynamics Get Record By ID Call Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_CALL actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_CALL # Microsoft Dynamics Get Record By ID Contact Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_CONTACT # Microsoft Dynamics Get Record By ID Lead Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_LEAD # Microsoft Dynamics Get Record By ID Meeting Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_MEETING # Microsoft Dynamics Get Record By ID Note Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_NOTE actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_NOTE # Microsoft Dynamics Get Record By ID Opportunity Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_OPPORTUNITY # Microsoft Dynamics Get Record By ID Task Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_GET_RECORD_BY_ID_TASK # Microsoft Dynamics Search Records Account Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_ACCOUNT # Microsoft Dynamics Search Records Any Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_ANY # Microsoft Dynamics Search Records Call Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_CALL actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_CALL # Microsoft Dynamics Search Records Contact Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_CONTACT # Microsoft Dynamics Search Records Lead Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_LEAD # Microsoft Dynamics Search Records Meeting Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_MEETING # Microsoft Dynamics Search Records Note Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_NOTE actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_NOTE # Microsoft Dynamics Search Records Opportunity Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_OPPORTUNITY # Microsoft Dynamics Search Records Task Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_SEARCH_RECORDS_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_SEARCH_RECORDS_TASK # Microsoft Dynamics Update Record Account Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_ACCOUNT # Microsoft Dynamics Update Record Any Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_ANY # Microsoft Dynamics Update Record Call Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_CALL actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_CALL # Microsoft Dynamics Update Record Contact Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_CONTACT # Microsoft Dynamics Update Record Lead Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_LEAD # Microsoft Dynamics Update Record Meeting Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_MEETING # Microsoft Dynamics Update Record Note Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_NOTE actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_NOTE # Microsoft Dynamics Update Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_OPPORTUNITY # Microsoft Dynamics Update Record Task Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/MICROSOFT_DYNAMICS_UPDATE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#MICROSOFT_DYNAMICS_UPDATE_RECORD_TASK # Dynamics 365 Sales Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/overview Browse the tools and triggers available for Dynamics 365 Sales in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Record Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/triggers/MICROSOFT_DYNAMICS_TRIGGER_RECORD_CREATED Trigger when a new Dynamics 365 record is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "microsoftDynamics", "type": "MICROSOFT_DYNAMICS_TRIGGER_RECORD_CREATED", "parameters": { "mdEntity": "Opportunity", "filterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "name", "operator": "$stringExactlyMatches", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Choose an entity * Allowed values: Opportunity (`Opportunity`), Account (`Account`), Contact (`Contact`), Lead (`Lead`), Call (`Call`), Meeting (`Meeting`), Task (`Task`), Note (`Note`), Custom Entity (``) * Options can be loaded by using the `cachedCustomEntities` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to `Opportunity`. Search for records that match specified filters. * Supported filter fields: `name`, `customerid`, `salesstagecode`, `estimatedclosedate`, `actualclosedate`, `estimatedvalue`, `description`, `_ownerid_value`, `transactioncurrencyid` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Account`. Search for records that match specified filters. * Supported filter fields: `name`, `_ownerid_value`, `websiteurl`, `telephone1`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Contact`. Search for records that match specified filters. * Supported filter fields: `firstname`, `lastname`, `emailaddress1`, `telephone1`, `jobtitle`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Lead`. Search for records that match specified filters. * Supported filter fields: `subject`, `firstname`, `lastname`, `emailaddress1`, `telephone1`, `websiteurl`, `jobtitle`, `salesstagecode`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Call`. Search for records that match specified filters. * Supported filter fields: `subject`, `directioncode`, `_regardingobjectid_value`, `phonenumber`, `actualdurationminutes`, `description`, `scheduledend`, `prioritycode` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Meeting`. Search for records that match specified filters. * Supported filter fields: `subject`, `scheduledstart`, `scheduledend`, `_regardingobjectid_value`, `location`, `description`, `prioritycode` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Task`. Search for records that match specified filters. * Supported filter fields: `subject`, `_regardingobjectid_value`, `scheduledend`, `_ownerid_value`, `prioritycode`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Note`. Search for records that match specified filters. * Supported filter fields: `_objectid_value`, `subject`, `notetext` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to ``. The Entity Set Name of the Object. Use Connect Portal Workflow Settings to allow users to select a Custom Object. * Example value: `entitysetname` Search for records that match specified filters. * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` # Record Updated Source: https://docs.useparagon.com/actionkit/integrations/microsoftDynamics/triggers/MICROSOFT_DYNAMICS_TRIGGER_RECORD_UPDATED Trigger when a Dynamics 365 record is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "microsoftDynamics", "type": "MICROSOFT_DYNAMICS_TRIGGER_RECORD_UPDATED", "parameters": { "mdEntity": "Opportunity", "filterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "name", "operator": "$stringExactlyMatches", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Choose an entity * Allowed values: Opportunity (`Opportunity`), Account (`Account`), Contact (`Contact`), Lead (`Lead`), Call (`Call`), Meeting (`Meeting`), Task (`Task`), Note (`Note`), Custom Entity (``) * Options can be loaded by using the `cachedCustomEntities` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to `Opportunity`. Search for records that match specified filters. * Supported filter fields: `name`, `customerid`, `salesstagecode`, `estimatedclosedate`, `actualclosedate`, `estimatedvalue`, `description`, `_ownerid_value`, `transactioncurrencyid` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Account`. Search for records that match specified filters. * Supported filter fields: `name`, `_ownerid_value`, `websiteurl`, `telephone1`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Contact`. Search for records that match specified filters. * Supported filter fields: `firstname`, `lastname`, `emailaddress1`, `telephone1`, `jobtitle`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Lead`. Search for records that match specified filters. * Supported filter fields: `subject`, `firstname`, `lastname`, `emailaddress1`, `telephone1`, `websiteurl`, `jobtitle`, `salesstagecode`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Call`. Search for records that match specified filters. * Supported filter fields: `subject`, `directioncode`, `_regardingobjectid_value`, `phonenumber`, `actualdurationminutes`, `description`, `scheduledend`, `prioritycode` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Meeting`. Search for records that match specified filters. * Supported filter fields: `subject`, `scheduledstart`, `scheduledend`, `_regardingobjectid_value`, `location`, `description`, `prioritycode` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Task`. Search for records that match specified filters. * Supported filter fields: `subject`, `_regardingobjectid_value`, `scheduledend`, `_ownerid_value`, `prioritycode`, `description` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to `Note`. Search for records that match specified filters. * Supported filter fields: `_objectid_value`, `subject`, `notetext` * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` Additional options when this parameter is set to ``. The Entity Set Name of the Object. Use Connect Portal Workflow Settings to allow users to select a Custom Object. * Example value: `entitysetname` Search for records that match specified filters. * Supported filter fields are loaded from `cachedFields` after selecting `mdEntity`. * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringContains`, `$numberLessThan`, `$dateTimeBefore`, `$numberEquals`, `$dateTimeEquals`, `$numberGreaterThan`, `$dateTimeAfter`, `$numberDoesNotEqual`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$booleanTrue`, `$booleanFalse` # Channel List Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/TEAMS_CHANNEL_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#TEAMS_CHANNEL_LIST # Get User By Email Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/TEAMS_GET_USER_BY_EMAIL actionkit/openapi.json POST /projects/{project_id}/tools/#TEAMS_GET_USER_BY_EMAIL # Joined Team List Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/TEAMS_JOINED_TEAM_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#TEAMS_JOINED_TEAM_LIST # List Messages In Chat Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/TEAMS_LIST_MESSAGES_IN_CHAT actionkit/openapi.json POST /projects/{project_id}/tools/#TEAMS_LIST_MESSAGES_IN_CHAT # Member List Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/TEAMS_MEMBER_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#TEAMS_MEMBER_LIST # Send Message In Channel Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/TEAMS_SEND_MESSAGE_IN_CHANNEL actionkit/openapi.json POST /projects/{project_id}/tools/#TEAMS_SEND_MESSAGE_IN_CHANNEL # Send Message In Chat Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/TEAMS_SEND_MESSAGE_IN_CHAT actionkit/openapi.json POST /projects/{project_id}/tools/#TEAMS_SEND_MESSAGE_IN_CHAT # Microsoft Teams Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/overview Browse the tools and triggers available for Microsoft Teams in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Channel Created Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/triggers/TEAMS_TRIGGER_CHANNEL_CREATED Trigger when a Channel is created in Microsoft Teams ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "microsoftTeams", "type": "TEAMS_TRIGGER_CHANNEL_CREATED", "parameters": { "teamId": "e4da8430-de80-4815-9785-9c2441c24a7b" } } ``` **Configuration options:** The ID of the Team to search for users in. Use Connect Portal User Settings to allow your user to select a Team. * Example value: `e4da8430-de80-4815-9785-9c2441c24a7b` # Chat Created Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/triggers/TEAMS_TRIGGER_CHAT_CREATED Trigger when a Chat is created in Microsoft Teams ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "microsoftTeams", "type": "TEAMS_TRIGGER_CHAT_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Chat Updated Source: https://docs.useparagon.com/actionkit/integrations/microsoftTeams/triggers/TEAMS_TRIGGER_CHAT_UPDATED Trigger when a Chat is updated in Microsoft Teams ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "microsoftTeams", "type": "TEAMS_TRIGGER_CHAT_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Archive Item Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_ARCHIVE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_ARCHIVE_ITEM # Create Item Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_CREATE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_CREATE_ITEM # Create Subitem Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_CREATE_SUBITEM actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_CREATE_SUBITEM # Delete Item Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_DELETE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_DELETE_ITEM # Get Item By External ID Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_GET_ITEM_BY_EXTERNAL_ID actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_GET_ITEM_BY_EXTERNAL_ID # Get Item By ID Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_GET_ITEM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_GET_ITEM_BY_ID # Search Items Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_SEARCH_ITEMS actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_SEARCH_ITEMS # Search Users Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_SEARCH_USERS actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_SEARCH_USERS # Update Item Source: https://docs.useparagon.com/actionkit/integrations/monday.com/MONDAY_UPDATE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#MONDAY_UPDATE_ITEM # Monday.com Source: https://docs.useparagon.com/actionkit/integrations/monday.com/overview Browse the tools and triggers available for Monday.com in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Comment on Item Source: https://docs.useparagon.com/actionkit/integrations/monday.com/triggers/MONDAY_TRIGGER_COMMENT_CREATED Trigger when a comment is created in Monday.com ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "monday.com", "type": "MONDAY_TRIGGER_COMMENT_CREATED", "parameters": { "boardId": "example-value" } } ``` **Configuration options:** Board ID * Options can be loaded by using the `boards` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Item Created Source: https://docs.useparagon.com/actionkit/integrations/monday.com/triggers/MONDAY_TRIGGER_ITEM_CREATED_WITH_NEW_API_VERSION Trigger when an item is created in Monday.com ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "monday.com", "type": "MONDAY_TRIGGER_ITEM_CREATED_WITH_NEW_API_VERSION", "parameters": { "boardId": "example-value" } } ``` **Configuration options:** Board ID * Options can be loaded by using the `boards` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Item Updated Source: https://docs.useparagon.com/actionkit/integrations/monday.com/triggers/MONDAY_TRIGGER_ITEM_UPDATED_WITH_NEW_API_VERSION Trigger when an item is updated in Monday.com ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "monday.com", "type": "MONDAY_TRIGGER_ITEM_UPDATED_WITH_NEW_API_VERSION", "parameters": { "boardId": "example-value" } } ``` **Configuration options:** Board ID * Options can be loaded by using the `boards` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). # Access Soap Api With Body Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_ACCESS_SOAP_API_WITH_BODY actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_ACCESS_SOAP_API_WITH_BODY # Create Account Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_CREATE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_CREATE_ACCOUNT # Create Bill Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_CREATE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_CREATE_BILL # Create Tax Group Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_CREATE_TAX_GROUP actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_CREATE_TAX_GROUP # Create Vendor Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_CREATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_CREATE_VENDOR # Delete Account Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_DELETE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_DELETE_ACCOUNT # Delete Bill Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_DELETE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_DELETE_BILL # Delete Tax Group Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_DELETE_TAX_GROUP actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_DELETE_TAX_GROUP # Delete Vendor Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_DELETE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_DELETE_VENDOR # Get Account By ID Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_GET_ACCOUNT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_GET_ACCOUNT_BY_ID # Get Bill By ID Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_GET_BILL_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_GET_BILL_BY_ID # Get Payment Term By ID Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_GET_PAYMENT_TERM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_GET_PAYMENT_TERM_BY_ID # Get Tax Group By ID Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_GET_TAX_GROUP_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_GET_TAX_GROUP_BY_ID # Get Vendor By ID Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_GET_VENDOR_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_GET_VENDOR_BY_ID # Search Accounts Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_SEARCH_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_SEARCH_ACCOUNTS # Search Bills Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_SEARCH_BILLS actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_SEARCH_BILLS # Search Contacts By Saved Search ID Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_SEARCH_CONTACTS_BY_SAVED_SEARCH_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_SEARCH_CONTACTS_BY_SAVED_SEARCH_ID # Search Payment Terms Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_SEARCH_PAYMENT_TERMS actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_SEARCH_PAYMENT_TERMS # Search Posting Periods Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_SEARCH_POSTING_PERIODS actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_SEARCH_POSTING_PERIODS # Search Tax Codes Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_SEARCH_TAX_CODES actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_SEARCH_TAX_CODES # Search Vendors Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_SEARCH_VENDORS actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_SEARCH_VENDORS # Update Account Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_UPDATE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_UPDATE_ACCOUNT # Update Bill Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_UPDATE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_UPDATE_BILL # Update Tax Group Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_UPDATE_TAX_GROUP actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_UPDATE_TAX_GROUP # Update Vendor Source: https://docs.useparagon.com/actionkit/integrations/netsuite/NETSUITE_UPDATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#NETSUITE_UPDATE_VENDOR # NetSuite Source: https://docs.useparagon.com/actionkit/integrations/netsuite/overview Browse the tools available for NetSuite in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for NetSuite. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Archive Page Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_ARCHIVE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_ARCHIVE_PAGE # Create Page Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_CREATE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_CREATE_PAGE # Create Page With Markdown Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_CREATE_PAGE_WITH_MARKDOWN actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_CREATE_PAGE_WITH_MARKDOWN # Delete Block Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_DELETE_BLOCK actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_DELETE_BLOCK # Get Block By ID Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_GET_BLOCK_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_GET_BLOCK_BY_ID # Get Page As Markdown Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_GET_PAGE_AS_MARKDOWN actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_GET_PAGE_AS_MARKDOWN # Get Page By ID Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_GET_PAGE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_GET_PAGE_BY_ID # Get Page Content Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_GET_PAGE_CONTENT actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_GET_PAGE_CONTENT # Search Pages Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_SEARCH_PAGES actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_SEARCH_PAGES # Update Block Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_UPDATE_BLOCK actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_UPDATE_BLOCK # Update Page Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_UPDATE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_UPDATE_PAGE # Update Page With Markdown Source: https://docs.useparagon.com/actionkit/integrations/notion/NOTION_UPDATE_PAGE_WITH_MARKDOWN actionkit/openapi.json POST /projects/{project_id}/tools/#NOTION_UPDATE_PAGE_WITH_MARKDOWN # Notion Source: https://docs.useparagon.com/actionkit/integrations/notion/overview Browse the tools and triggers available for Notion in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Page Created Source: https://docs.useparagon.com/actionkit/integrations/notion/triggers/NOTION_TRIGGER_PAGE_CREATED Trigger when a Page or Database entry is created in Notion ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "notion", "type": "NOTION_TRIGGER_PAGE_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Page Updated Source: https://docs.useparagon.com/actionkit/integrations/notion/triggers/NOTION_TRIGGER_PAGE_UPDATED Trigger when a Page or Database entry is updated in Notion ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "notion", "type": "NOTION_TRIGGER_PAGE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Create Folder Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_CREATE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_CREATE_FOLDER # Delete Folder Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_DELETE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_DELETE_FOLDER # Download File Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_DOWNLOAD_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_DOWNLOAD_FILE This Tool will respond with a temporary signed download URL from the OneDrive API. Send a request to this URL to get a response with a byte stream of the file data. # Get File By ID Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_GET_FILE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_GET_FILE_BY_ID # Get Folder By ID Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_GET_FOLDER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_GET_FOLDER_BY_ID # List Contents Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_LIST_CONTENTS actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_LIST_CONTENTS # Move Folder Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_MOVE_FOLDER actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_MOVE_FOLDER # Save File Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_SAVE_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_SAVE_FILE # Search Folders Source: https://docs.useparagon.com/actionkit/integrations/onedrive/ONEDRIVE_SEARCH_FOLDERS actionkit/openapi.json POST /projects/{project_id}/tools/#ONEDRIVE_SEARCH_FOLDERS # OneDrive Source: https://docs.useparagon.com/actionkit/integrations/onedrive/overview Browse the tools and triggers available for OneDrive in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when there are changes to content within the hierarchy of the root folder. **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # File Change Source: https://docs.useparagon.com/actionkit/integrations/onedrive/triggers/ONEDRIVE_TRIGGER_FILE_CHANGE Trigger when there are changes to content within the hierarchy of the root folder. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "onedrive", "type": "ONEDRIVE_TRIGGER_FILE_CHANGE", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Create Page Source: https://docs.useparagon.com/actionkit/integrations/onenote/ONENOTE_CREATE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#ONENOTE_CREATE_PAGE # Delete Page Source: https://docs.useparagon.com/actionkit/integrations/onenote/ONENOTE_DELETE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#ONENOTE_DELETE_PAGE # Get Page By ID Source: https://docs.useparagon.com/actionkit/integrations/onenote/ONENOTE_GET_PAGE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ONENOTE_GET_PAGE_BY_ID # Search Pages Source: https://docs.useparagon.com/actionkit/integrations/onenote/ONENOTE_SEARCH_PAGES actionkit/openapi.json POST /projects/{project_id}/tools/#ONENOTE_SEARCH_PAGES # Update Page Source: https://docs.useparagon.com/actionkit/integrations/onenote/ONENOTE_UPDATE_PAGE actionkit/openapi.json POST /projects/{project_id}/tools/#ONENOTE_UPDATE_PAGE # OneNote Source: https://docs.useparagon.com/actionkit/integrations/onenote/overview Browse the tools available for OneNote in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for OneNote. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Event Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_CREATE_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_CREATE_EVENT # Delete Event Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_DELETE_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_DELETE_EVENT # Get Events Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_GET_EVENTS actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_GET_EVENTS # Get Event By ID Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_GET_EVENT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_GET_EVENT_BY_ID # Get Messages Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_GET_MESSAGES actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_GET_MESSAGES # Get Message By ID Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_GET_MESSAGE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_GET_MESSAGE_BY_ID # Send Message Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_SEND_MESSAGE actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_SEND_MESSAGE # Update Event Source: https://docs.useparagon.com/actionkit/integrations/outlook/OUTLOOK_UPDATE_EVENT actionkit/openapi.json POST /projects/{project_id}/tools/#OUTLOOK_UPDATE_EVENT # Microsoft Outlook Source: https://docs.useparagon.com/actionkit/integrations/outlook/overview Browse the tools and triggers available for Microsoft Outlook in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Event Created Source: https://docs.useparagon.com/actionkit/integrations/outlook/triggers/OUTLOOK_TRIGGER_EVENT_CREATED_WEBHOOK Trigger when an Event is created in Outlook ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "outlook", "type": "OUTLOOK_TRIGGER_EVENT_CREATED_WEBHOOK", "parameters": { "userId": "1b671a64-40d5-491e-99b0-da01ff1f3341" } } ``` **Configuration options:** Specify a user ID to perform this action if you are working with an application token. * Example value: `1b671a64-40d5-491e-99b0-da01ff1f3341` # Event Removed Source: https://docs.useparagon.com/actionkit/integrations/outlook/triggers/OUTLOOK_TRIGGER_EVENT_REMOVED_WEBHOOK Trigger when an Event is removed in Outlook ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "outlook", "type": "OUTLOOK_TRIGGER_EVENT_REMOVED_WEBHOOK", "parameters": { "userId": "1b671a64-40d5-491e-99b0-da01ff1f3341" } } ``` **Configuration options:** Specify a user ID to perform this action if you are working with an application token. * Example value: `1b671a64-40d5-491e-99b0-da01ff1f3341` # Event Updated Source: https://docs.useparagon.com/actionkit/integrations/outlook/triggers/OUTLOOK_TRIGGER_EVENT_UPDATED_WEBHOOK Trigger when an Event is updated in Outlook ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "outlook", "type": "OUTLOOK_TRIGGER_EVENT_UPDATED_WEBHOOK", "parameters": { "userId": "1b671a64-40d5-491e-99b0-da01ff1f3341" } } ``` **Configuration options:** Specify a user ID to perform this action if you are working with an application token. * Example value: `1b671a64-40d5-491e-99b0-da01ff1f3341` # New Message Source: https://docs.useparagon.com/actionkit/integrations/outlook/triggers/OUTLOOK_TRIGGER_NEW_MESSAGE_WEBHOOK Trigger when a new Message is received in Outlook ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "outlook", "type": "OUTLOOK_TRIGGER_NEW_MESSAGE_WEBHOOK", "parameters": { "userId": "1b671a64-40d5-491e-99b0-da01ff1f3341", "mailFolder": "{{settings.mailfolder}}" } } ``` **Configuration options:** Specify a user ID to perform this action if you are working with an application token. * Example value: `1b671a64-40d5-491e-99b0-da01ff1f3341` Use Connect Portal Workflow Settings to allow users to select which mail folder to get messages from. Defaults to the user’s primary mail folder if left blank. * Example value: `{{settings.mailfolder}}` # Add Prospect To Sequence Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_ADD_PROSPECT_TO_SEQUENCE actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_ADD_PROSPECT_TO_SEQUENCE # Create Account Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_CREATE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_CREATE_ACCOUNT # Create Opportunity Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_CREATE_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_CREATE_OPPORTUNITY # Create Prospect Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_CREATE_PROSPECT actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_CREATE_PROSPECT # Get Accounts Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_GET_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_GET_ACCOUNTS # Get Account By ID Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_GET_ACCOUNT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_GET_ACCOUNT_BY_ID # Get Opportunities Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_GET_OPPORTUNITIES actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_GET_OPPORTUNITIES # Get Opportunity By ID Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_GET_OPPORTUNITY_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_GET_OPPORTUNITY_BY_ID # Get Prospects Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_GET_PROSPECTS actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_GET_PROSPECTS # Get Prospect By ID Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_GET_PROSPECT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_GET_PROSPECT_BY_ID # Update Account Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_UPDATE_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_UPDATE_ACCOUNT # Update Opportunity Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_UPDATE_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_UPDATE_OPPORTUNITY # Update Prospect Source: https://docs.useparagon.com/actionkit/integrations/outreach/OUTREACH_UPDATE_PROSPECT actionkit/openapi.json POST /projects/{project_id}/tools/#OUTREACH_UPDATE_PROSPECT # Outreach Source: https://docs.useparagon.com/actionkit/integrations/outreach/overview Browse the tools available for Outreach in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Outreach. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Document Source: https://docs.useparagon.com/actionkit/integrations/pandadoc/PANDA_DOC_CREATE_DOCUMENT actionkit/openapi.json POST /projects/{project_id}/tools/#PANDA_DOC_CREATE_DOCUMENT # Delete Document Source: https://docs.useparagon.com/actionkit/integrations/pandadoc/PANDA_DOC_DELETE_DOCUMENT actionkit/openapi.json POST /projects/{project_id}/tools/#PANDA_DOC_DELETE_DOCUMENT # Get Document By ID Source: https://docs.useparagon.com/actionkit/integrations/pandadoc/PANDA_DOC_GET_DOCUMENT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#PANDA_DOC_GET_DOCUMENT_BY_ID # Search Documents Source: https://docs.useparagon.com/actionkit/integrations/pandadoc/PANDA_DOC_SEARCH_DOCUMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#PANDA_DOC_SEARCH_DOCUMENTS # Send Document Source: https://docs.useparagon.com/actionkit/integrations/pandadoc/PANDA_DOC_SEND_DOCUMENT actionkit/openapi.json POST /projects/{project_id}/tools/#PANDA_DOC_SEND_DOCUMENT # Update Document Source: https://docs.useparagon.com/actionkit/integrations/pandadoc/PANDA_DOC_UPDATE_DOCUMENT actionkit/openapi.json POST /projects/{project_id}/tools/#PANDA_DOC_UPDATE_DOCUMENT # PandaDoc Source: https://docs.useparagon.com/actionkit/integrations/pandadoc/overview Browse the tools available for PandaDoc in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for PandaDoc. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Add Prospect To List Source: https://docs.useparagon.com/actionkit/integrations/pardot/PARDOT_ADD_PROSPECT_TO_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#PARDOT_ADD_PROSPECT_TO_LIST # Create Or Update Prospect Source: https://docs.useparagon.com/actionkit/integrations/pardot/PARDOT_CREATE_OR_UPDATE_PROSPECT actionkit/openapi.json POST /projects/{project_id}/tools/#PARDOT_CREATE_OR_UPDATE_PROSPECT # Delete Prospect By ID Source: https://docs.useparagon.com/actionkit/integrations/pardot/PARDOT_DELETE_PROSPECT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#PARDOT_DELETE_PROSPECT_BY_ID # Get Prospect By ID Source: https://docs.useparagon.com/actionkit/integrations/pardot/PARDOT_GET_PROSPECT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#PARDOT_GET_PROSPECT_BY_ID # Remove Prospect From List Source: https://docs.useparagon.com/actionkit/integrations/pardot/PARDOT_REMOVE_PROSPECT_FROM_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#PARDOT_REMOVE_PROSPECT_FROM_LIST # Search Prospects Source: https://docs.useparagon.com/actionkit/integrations/pardot/PARDOT_SEARCH_PROSPECTS actionkit/openapi.json POST /projects/{project_id}/tools/#PARDOT_SEARCH_PROSPECTS # Pardot Source: https://docs.useparagon.com/actionkit/integrations/pardot/overview Browse the tools available for Pardot in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Pardot. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Record Activities Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_ACTIVITIES_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_ACTIVITIES_V2 # Create Record Any Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_ANY # Create Record Deals Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_DEALS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_DEALS_V2 # Create Record Leads Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_LEADS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_LEADS_V2 # Create Record Notes Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_NOTES actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_NOTES # Create Record Organizations Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_ORGANIZATIONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_ORGANIZATIONS_V2 # Create Record Persons Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_PERSONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_PERSONS_V2 # Create Record Users Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_CREATE_RECORD_USERS actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_CREATE_RECORD_USERS # Delete Record Activities Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_ACTIVITIES_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_ACTIVITIES_V2 # Delete Record Any Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_ANY # Delete Record Deals Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_DEALS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_DEALS_V2 # Delete Record Leads Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_LEADS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_LEADS_V2 # Delete Record Notes Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_NOTES actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_NOTES # Delete Record Organizations Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_ORGANIZATIONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_ORGANIZATIONS_V2 # Delete Record Persons Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_PERSONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_PERSONS_V2 # Delete Record Users Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DELETE_RECORD_USERS actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DELETE_RECORD_USERS # Describe Action Schema Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_DESCRIBE_ACTION_SCHEMA actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_DESCRIBE_ACTION_SCHEMA # Get Records Activities Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_ACTIVITIES_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_ACTIVITIES_V2 # Get Records Any Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_ANY # Get Records Deals Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_DEALS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_DEALS_V2 # Get Records Leads Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_LEADS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_LEADS_V2 # Get Records Notes Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_NOTES actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_NOTES # Get Records Organizations Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_ORGANIZATIONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_ORGANIZATIONS_V2 # Get Records Persons Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_PERSONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_PERSONS_V2 # Get Records Users Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORDS_USERS actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORDS_USERS # Get Record By ID Activities Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_ACTIVITIES_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_ACTIVITIES_V2 # Get Record By ID Any Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_ANY # Get Record By ID Deals Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_DEALS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_DEALS_V2 # Get Record By ID Leads Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_LEADS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_LEADS_V2 # Get Record By ID Notes Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_NOTES actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_NOTES # Get Record By ID Organizations Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_ORGANIZATIONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_ORGANIZATIONS_V2 # Get Record By ID Persons Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_PERSONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_PERSONS_V2 # Get Record By ID Users Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_GET_RECORD_BY_ID_USERS actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_GET_RECORD_BY_ID_USERS # Update Record Activities Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_ACTIVITIES_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_ACTIVITIES_V2 # Update Record Any Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_ANY # Update Record Deals Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_DEALS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_DEALS_V2 # Update Record Leads Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_LEADS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_LEADS_V2 # Update Record Notes Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_NOTES actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_NOTES # Update Record Organizations Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_ORGANIZATIONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_ORGANIZATIONS_V2 # Update Record Persons Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_PERSONS_V2 actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_PERSONS_V2 # Update Record Users Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/PIPEDRIVE_UPDATE_RECORD_USERS actionkit/openapi.json POST /projects/{project_id}/tools/#PIPEDRIVE_UPDATE_RECORD_USERS # Pipedrive Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/overview Browse the tools and triggers available for Pipedrive in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Lead Created Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/triggers/PIPEDRIVE_TRIGGER_LEAD_CREATED Lead Created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "pipedrive", "type": "PIPEDRIVE_TRIGGER_LEAD_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Record Created Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/triggers/PIPEDRIVE_TRIGGER_RECORD_CREATED Record Created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "pipedrive", "type": "PIPEDRIVE_TRIGGER_RECORD_CREATED", "parameters": { "recordType": "activities", "triggerFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "field", "operator": "$arrayIsEmpty", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Record Type * Allowed values: `activities`, `activities_v2`, `deals`, `deals_v2`, `organizations`, `organizations_v2`, `persons`, `persons_v2`, `notes` * Options can be loaded by using the `cacheObjectTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Only trigger on records that match these filters. * Supported filter fields are loaded from `cacheObjectFields` after selecting `recordType`. * Supported operators: `$arrayIsEmpty`, `$arrayIsNotEmpty`, `$booleanFalse`, `$booleanTrue`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$isUndefinedOrNull`, `$isNotUndefinedOrNull`, `$exists`, `$doesNotExist`, `$numberDoesNotEqual`, `$numberEquals`, `$numberGreaterThan`, `$numberLessThan`, `$stringContains`, `$stringDoesNotContain`, `$stringDoesNotEndWith`, `$stringDoesNotExactlyMatch`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringExactlyMatches`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith` # Record Updated Source: https://docs.useparagon.com/actionkit/integrations/pipedrive/triggers/PIPEDRIVE_TRIGGER_RECORD_UPDATED Record Updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "pipedrive", "type": "PIPEDRIVE_TRIGGER_RECORD_UPDATED", "parameters": { "recordType": "activities", "triggerFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "field", "operator": "$arrayIsEmpty", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Record Type * Allowed values: `activities`, `activities_v2`, `deals`, `deals_v2`, `organizations`, `organizations_v2`, `persons`, `persons_v2`, `notes` * Options can be loaded by using the `cacheObjectTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Only trigger on records that match these filters. * Supported filter fields are loaded from `cacheObjectFields` after selecting `recordType`. * Supported operators: `$arrayIsEmpty`, `$arrayIsNotEmpty`, `$booleanFalse`, `$booleanTrue`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$isUndefinedOrNull`, `$isNotUndefinedOrNull`, `$exists`, `$doesNotExist`, `$numberDoesNotEqual`, `$numberEquals`, `$numberGreaterThan`, `$numberLessThan`, `$stringContains`, `$stringDoesNotContain`, `$stringDoesNotEndWith`, `$stringDoesNotExactlyMatch`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringExactlyMatches`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith` # Create Component Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_CREATE_COMPONENT actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_CREATE_COMPONENT # Create Feature Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_CREATE_FEATURE actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_CREATE_FEATURE # Delete Feature Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_DELETE_FEATURE actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_DELETE_FEATURE # Get Component By ID Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_GET_COMPONENT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_GET_COMPONENT_BY_ID # Get Feature By ID Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_GET_FEATURE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_GET_FEATURE_BY_ID # Get Product By ID Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_GET_PRODUCT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_GET_PRODUCT_BY_ID # Update Component Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_UPDATE_COMPONENT actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_UPDATE_COMPONENT # Update Feature Source: https://docs.useparagon.com/actionkit/integrations/productboard/PRODUCTBOARD_UPDATE_FEATURE actionkit/openapi.json POST /projects/{project_id}/tools/#PRODUCTBOARD_UPDATE_FEATURE # Productboard Source: https://docs.useparagon.com/actionkit/integrations/productboard/overview Browse the tools available for Productboard in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Productboard. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Customer Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_CREATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_CREATE_CUSTOMER # Create Invoice Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_CREATE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_CREATE_INVOICE # Create Payment Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_CREATE_PAYMENT actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_CREATE_PAYMENT # Get Accounts Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_GET_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_GET_ACCOUNTS # Get Customers Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_GET_CUSTOMERS actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_GET_CUSTOMERS # Get Invoices Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_GET_INVOICES actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_GET_INVOICES # Get Payments Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_GET_PAYMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_GET_PAYMENTS # Send Invoice Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_SEND_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_SEND_INVOICE # Update Customer Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_UPDATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_UPDATE_CUSTOMER # Update Invoice Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/QUICKBOOKS_UPDATE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#QUICKBOOKS_UPDATE_INVOICE # QuickBooks Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/overview Browse the tools and triggers available for QuickBooks in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Account Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/triggers/QUICKBOOKS_TRIGGER_ACCOUNT_CREATED Trigger when an account is created in QuickBooks ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "quickbooks", "type": "QUICKBOOKS_TRIGGER_ACCOUNT_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # New Customer Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/triggers/QUICKBOOKS_TRIGGER_CUSTOMER_CREATED Trigger when a customer is created in QuickBooks ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "quickbooks", "type": "QUICKBOOKS_TRIGGER_CUSTOMER_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Customer Updated Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/triggers/QUICKBOOKS_TRIGGER_CUSTOMER_UPDATED Trigger when a Customer is updated in Quickbooks ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "quickbooks", "type": "QUICKBOOKS_TRIGGER_CUSTOMER_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # New Invoice Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/triggers/QUICKBOOKS_TRIGGER_INVOICE_CREATED Trigger when an invoice is created in QuickBooks ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "quickbooks", "type": "QUICKBOOKS_TRIGGER_INVOICE_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Invoice Updated Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/triggers/QUICKBOOKS_TRIGGER_INVOICE_UPDATED Trigger when an invoice is updated in Quickbooks ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "quickbooks", "type": "QUICKBOOKS_TRIGGER_INVOICE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # New Purchase Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/triggers/QUICKBOOKS_TRIGGER_PURCHASE_CREATED Trigger when a purchase is created in QuickBooks ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "quickbooks", "type": "QUICKBOOKS_TRIGGER_PURCHASE_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Updated Purchase Source: https://docs.useparagon.com/actionkit/integrations/quickbooks/triggers/QUICKBOOKS_TRIGGER_PURCHASE_UPDATED Trigger when a purchase is updated in QuickBooks ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "quickbooks", "type": "QUICKBOOKS_TRIGGER_PURCHASE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Create Vendor Source: https://docs.useparagon.com/actionkit/integrations/ramp/RAMP_CREATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#RAMP_CREATE_VENDOR # Get Location By ID Source: https://docs.useparagon.com/actionkit/integrations/ramp/RAMP_GET_LOCATION_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#RAMP_GET_LOCATION_BY_ID # Get Vendor By ID Source: https://docs.useparagon.com/actionkit/integrations/ramp/RAMP_GET_VENDOR_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#RAMP_GET_VENDOR_BY_ID # List Locations Source: https://docs.useparagon.com/actionkit/integrations/ramp/RAMP_LIST_LOCATIONS actionkit/openapi.json POST /projects/{project_id}/tools/#RAMP_LIST_LOCATIONS # List Vendors Source: https://docs.useparagon.com/actionkit/integrations/ramp/RAMP_LIST_VENDORS actionkit/openapi.json POST /projects/{project_id}/tools/#RAMP_LIST_VENDORS # Update Vendor Source: https://docs.useparagon.com/actionkit/integrations/ramp/RAMP_UPDATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#RAMP_UPDATE_VENDOR # Ramp Source: https://docs.useparagon.com/actionkit/integrations/ramp/overview Browse the tools available for Ramp in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Ramp. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Bill Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_CREATE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_CREATE_BILL # Create Vendor Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_CREATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_CREATE_VENDOR # Delete Bill Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_DELETE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_DELETE_BILL # Delete Vendor Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_DELETE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_DELETE_VENDOR # Get Account By ID Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_GET_ACCOUNT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_GET_ACCOUNT_BY_ID # Get Bills By ID Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_GET_BILLS_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_GET_BILLS_BY_ID # Get Dimensions Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_GET_DIMENSIONS actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_GET_DIMENSIONS # Get Payment Term By ID Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_GET_PAYMENT_TERM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_GET_PAYMENT_TERM_BY_ID # Get Vendor By ID Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_GET_VENDOR_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_GET_VENDOR_BY_ID # Search Accounts Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_SEARCH_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_SEARCH_ACCOUNTS # Search Bills Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_SEARCH_BILLS actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_SEARCH_BILLS # Search Payment Terms Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_SEARCH_PAYMENT_TERMS actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_SEARCH_PAYMENT_TERMS # Search Vendors Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_SEARCH_VENDORS actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_SEARCH_VENDORS # Search Vendor Types Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_SEARCH_VENDOR_TYPES actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_SEARCH_VENDOR_TYPES # Update Bill Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_UPDATE_BILL actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_UPDATE_BILL # Update Vendor Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/SAGE_INTACCT_UPDATE_VENDOR actionkit/openapi.json POST /projects/{project_id}/tools/#SAGE_INTACCT_UPDATE_VENDOR # Sage Intacct Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/overview Browse the tools and triggers available for Sage Intacct in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Record Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/triggers/SAGE_INTACCT_TRIGGER_RECORD_CREATED Trigger when a new record is created in Sage Intacct ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "sageintacct", "type": "SAGE_INTACCT_TRIGGER_RECORD_CREATED", "parameters": { "recordType": "BILL" } } ``` **Configuration options:** Record Type * Allowed values: `BILL`, `VENDOR` # Record Updated Source: https://docs.useparagon.com/actionkit/integrations/sageintacct/triggers/SAGE_INTACCT_TRIGGER_RECORD_UPDATED Trigger when a record is updated in Sage Intacct ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "sageintacct", "type": "SAGE_INTACCT_TRIGGER_RECORD_UPDATED", "parameters": { "recordType": "BILL" } } ``` **Configuration options:** Record Type * Allowed values: `BILL`, `VENDOR` # Create Custom Field Account Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_CUSTOM_FIELD_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_CUSTOM_FIELD_ACCOUNT # Create Custom Field Any Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_CUSTOM_FIELD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_CUSTOM_FIELD_ANY # Create Custom Field Contact Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_CUSTOM_FIELD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_CUSTOM_FIELD_CONTACT # Create Custom Field Lead Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_CUSTOM_FIELD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_CUSTOM_FIELD_LEAD # Create Custom Field Opportunity Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_CUSTOM_FIELD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_CUSTOM_FIELD_OPPORTUNITY # Create Custom Field Task Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_CUSTOM_FIELD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_CUSTOM_FIELD_TASK # Create Custom Object Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_CUSTOM_OBJECT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_CUSTOM_OBJECT # Create Record Account Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_RECORD_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_RECORD_ACCOUNT # Create Record Any Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_RECORD_ANY # Create Record Contact Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_RECORD_CONTACT # Create Record Lead Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_RECORD_LEAD # Create Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_RECORD_OPPORTUNITY # Create Record Task Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_CREATE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_CREATE_RECORD_TASK # Delete Record Account Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_DELETE_RECORD_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_DELETE_RECORD_ACCOUNT # Delete Record Any Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_DELETE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_DELETE_RECORD_ANY # Delete Record Contact Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_DELETE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_DELETE_RECORD_CONTACT # Delete Record Lead Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_DELETE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_DELETE_RECORD_LEAD # Delete Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_DELETE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_DELETE_RECORD_OPPORTUNITY # Delete Record Task Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_DELETE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_DELETE_RECORD_TASK # Describe Action Schema Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_DESCRIBE_ACTION_SCHEMA actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_DESCRIBE_ACTION_SCHEMA # Get Record By ID Account Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_ID_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_ID_ACCOUNT # Get Record By ID Any Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_ID_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_ID_ANY # Get Record By ID Contact Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_ID_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_ID_CONTACT # Get Record By ID Lead Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_ID_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_ID_LEAD # Get Record By ID Opportunity Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_ID_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_ID_OPPORTUNITY # Get Record By ID Task Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_ID_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_ID_TASK # Get Record By View ID Account Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_VIEW_ID_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_VIEW_ID_ACCOUNT # Get Record By View ID Any Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_VIEW_ID_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_VIEW_ID_ANY # Get Record By View ID Contact Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_VIEW_ID_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_VIEW_ID_CONTACT # Get Record By View ID Lead Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_VIEW_ID_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_VIEW_ID_LEAD # Get Record By View ID Opportunity Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_VIEW_ID_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_VIEW_ID_OPPORTUNITY # Get Record By View ID Task Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_GET_RECORD_BY_VIEW_ID_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_GET_RECORD_BY_VIEW_ID_TASK # Search Records Account Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_SEARCH_RECORDS_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_SEARCH_RECORDS_ACCOUNT # Search Records Any Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_SEARCH_RECORDS_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_SEARCH_RECORDS_ANY # Search Records Contact Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_SEARCH_RECORDS_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_SEARCH_RECORDS_CONTACT # Search Records Lead Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_SEARCH_RECORDS_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_SEARCH_RECORDS_LEAD # Search Records Opportunity Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_SEARCH_RECORDS_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_SEARCH_RECORDS_OPPORTUNITY # Search Records Task Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_SEARCH_RECORDS_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_SEARCH_RECORDS_TASK # Update Record Account Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_UPDATE_RECORD_ACCOUNT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_UPDATE_RECORD_ACCOUNT # Update Record Any Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_UPDATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_UPDATE_RECORD_ANY # Update Record Contact Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_UPDATE_RECORD_CONTACT actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_UPDATE_RECORD_CONTACT # Update Record Lead Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_UPDATE_RECORD_LEAD actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_UPDATE_RECORD_LEAD # Update Record Opportunity Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_UPDATE_RECORD_OPPORTUNITY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_UPDATE_RECORD_OPPORTUNITY # Update Record Task Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_UPDATE_RECORD_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_UPDATE_RECORD_TASK # Write SOQL Query Source: https://docs.useparagon.com/actionkit/integrations/salesforce/SALESFORCE_WRITE_SOQL_QUERY actionkit/openapi.json POST /projects/{project_id}/tools/#SALESFORCE_WRITE_SOQL_QUERY # Salesforce Source: https://docs.useparagon.com/actionkit/integrations/salesforce/overview Browse the tools and triggers available for Salesforce in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Campaign Member Added Source: https://docs.useparagon.com/actionkit/integrations/salesforce/triggers/SALESFORCE_TRIGGER_CAMPAIGN_MEMBER_ADDED Trigger when a contact/lead is added to a campaign ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "salesforce", "type": "SALESFORCE_TRIGGER_CAMPAIGN_MEMBER_ADDED", "parameters": { "campaignId": "{{settings.campaign}}", "filterFormula": "filter by column" } } ``` **Configuration options:** The campaign to watch for new Campaign Members. Use Connect Portal Workflow Settings to allow users to select a campaign. * Example value: `{{settings.campaign}}` Only trigger on records that match these filters. * Example value: `filter by column` * Supported filter fields: `Id`, `LeadId`, `ContactId`, `Status`, `Type`, `Name`, `Email` * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist` # Campaign Opportunity Added Source: https://docs.useparagon.com/actionkit/integrations/salesforce/triggers/SALESFORCE_TRIGGER_CAMPAIGN_OPPORTUNITY_ADDED Trigger when an opportunity is added to a campaign ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "salesforce", "type": "SALESFORCE_TRIGGER_CAMPAIGN_OPPORTUNITY_ADDED", "parameters": { "campaignId": "{{settings.campaign}}", "filterFormula": "filter by column" } } ``` **Configuration options:** The campaign to watch for new Campaign Members. Use Connect Portal Workflow Settings to allow users to select a campaign. * Example value: `{{settings.campaign}}` Only trigger on records that match these filters. * Example value: `filter by column` * Supported filter fields: `Id`, `Name`, `ContactId`, `StageName`, `Probability`, `Type` * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist` # New Record Source: https://docs.useparagon.com/actionkit/integrations/salesforce/triggers/SALESFORCE_TRIGGER_RECORD_CREATED Trigger when a new Salesforce record is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "salesforce", "type": "SALESFORCE_TRIGGER_RECORD_CREATED", "parameters": { "recordType": "Opportunity", "recordsFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "field", "operator": "$stringContains", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Record type * Allowed values: `Opportunity`, `Account`, `Contact`, `Lead`, `Task`, Custom Object (``) * Options can be loaded by using the `recordTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The API Name of the Object. Use Connect Portal Workflow Settings to allow users to select a Custom Object. * Example value: `{{settings.objectType}}` Only trigger on new records that match these filters. * Supported filter fields are loaded from `cachedFields` after selecting `recordType`. * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist` # Record Deleted Source: https://docs.useparagon.com/actionkit/integrations/salesforce/triggers/SALESFORCE_TRIGGER_RECORD_DELETED Trigger when a Salesforce record is deleted ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "salesforce", "type": "SALESFORCE_TRIGGER_RECORD_DELETED", "parameters": { "recordType": "Opportunity", "recordsFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "field", "operator": "$stringContains", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Record type * Allowed values: `Opportunity`, `Account`, `Contact`, `Lead`, `Task`, Custom Object (``) * Options can be loaded by using the `recordTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The API Name of the Object. Use Connect Portal Workflow Settings to allow users to select a Custom Object. * Example value: `{{settings.objectType}}` Only trigger on deleted records that match these filters. * Supported filter fields are loaded from `cachedFields` after selecting `recordType`. * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist` # Record Updated Source: https://docs.useparagon.com/actionkit/integrations/salesforce/triggers/SALESFORCE_TRIGGER_RECORD_UPDATED Trigger when a Salesforce record is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "salesforce", "type": "SALESFORCE_TRIGGER_RECORD_UPDATED", "parameters": { "recordType": "Opportunity", "recordsFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "field", "operator": "$stringContains", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Record type * Allowed values: `Opportunity`, `Account`, `Contact`, `Lead`, `Task`, Custom Object (``) * Options can be loaded by using the `recordTypes` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The API Name of the Object. Use Connect Portal Workflow Settings to allow users to select a Custom Object. * Example value: `{{settings.objectType}}` Only trigger on updated records that match these filters. * Supported filter fields are loaded from `cachedFields` after selecting `recordType`. * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist` # Create Supplier Invoice Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_CREATE_SUPPLIER_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_CREATE_SUPPLIER_INVOICE # Delete Supplier Invoice Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_DELETE_SUPPLIER_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_DELETE_SUPPLIER_INVOICE # Get Customer By ID Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_GET_CUSTOMER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_GET_CUSTOMER_BY_ID # Get Supplier By ID Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_GET_SUPPLIER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_GET_SUPPLIER_BY_ID # Get Supplier Invoice By ID Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_GET_SUPPLIER_INVOICE_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_GET_SUPPLIER_INVOICE_BY_ID # Search Customers Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_SEARCH_CUSTOMERS actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_SEARCH_CUSTOMERS # Search Suppliers Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_SEARCH_SUPPLIERS actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_SEARCH_SUPPLIERS # Search Supplier Invoices Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_SEARCH_SUPPLIER_INVOICES actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_SEARCH_SUPPLIER_INVOICES # Update Customer Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_UPDATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_UPDATE_CUSTOMER # Update Supplier Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/SAP_UPDATE_SUPPLIER actionkit/openapi.json POST /projects/{project_id}/tools/#SAP_UPDATE_SUPPLIER # SAP S/4HANA Source: https://docs.useparagon.com/actionkit/integrations/saps4hana/overview Browse the tools available for SAP S/4HANA in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for SAP S/4HANA. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Ticket Source: https://docs.useparagon.com/actionkit/integrations/servicenow/SERVICENOW_CREATE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#SERVICENOW_CREATE_TICKET # Delete Ticket Source: https://docs.useparagon.com/actionkit/integrations/servicenow/SERVICENOW_DELETE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#SERVICENOW_DELETE_TICKET # Get Tickets Source: https://docs.useparagon.com/actionkit/integrations/servicenow/SERVICENOW_GET_TICKETS actionkit/openapi.json POST /projects/{project_id}/tools/#SERVICENOW_GET_TICKETS # Get Ticket By ID Source: https://docs.useparagon.com/actionkit/integrations/servicenow/SERVICENOW_GET_TICKET_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SERVICENOW_GET_TICKET_BY_ID # Search Records Source: https://docs.useparagon.com/actionkit/integrations/servicenow/SERVICENOW_SEARCH_RECORDS actionkit/openapi.json POST /projects/{project_id}/tools/#SERVICENOW_SEARCH_RECORDS # Update Ticket Source: https://docs.useparagon.com/actionkit/integrations/servicenow/SERVICENOW_UPDATE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#SERVICENOW_UPDATE_TICKET # ServiceNow Source: https://docs.useparagon.com/actionkit/integrations/servicenow/overview Browse the tools available for ServiceNow in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for ServiceNow. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Item Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_CREATE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_CREATE_ITEM # Create List Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_CREATE_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_CREATE_LIST # Create List Column Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_CREATE_LIST_COLUMN actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_CREATE_LIST_COLUMN # Delete Item Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_DELETE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_DELETE_ITEM # Get Items In A List Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_GET_ITEMS_IN_A_LIST actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_GET_ITEMS_IN_A_LIST # Get Item By ID Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_GET_ITEM_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_GET_ITEM_BY_ID # Get Lists Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_GET_LISTS actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_GET_LISTS # Get List By ID Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_GET_LIST_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_GET_LIST_BY_ID # Get List Columns Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_GET_LIST_COLUMNS actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_GET_LIST_COLUMNS # Save File Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_SAVE_FILE actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_SAVE_FILE # Update Item Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/SHAREPOINT_UPDATE_ITEM actionkit/openapi.json POST /projects/{project_id}/tools/#SHAREPOINT_UPDATE_ITEM # SharePoint Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/overview Browse the tools and triggers available for SharePoint in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when a File is deleted from the Documents list in SharePoint Trigger when a Site Page is created or updated in SharePoint **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # File Deleted Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/triggers/SHAREPOINT_TRIGGER_FILE_DELETED Trigger when a File is deleted from the Documents list in SharePoint ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "sharepoint", "type": "SHAREPOINT_TRIGGER_FILE_DELETED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Item Created Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/triggers/SHAREPOINT_TRIGGER_ITEM_CREATED Trigger when an Item is created in SharePoint ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "sharepoint", "type": "SHAREPOINT_TRIGGER_ITEM_CREATED", "parameters": { "listId": "22e03ef3-6ef4-424d-a1d3-92a337807c30" } } ``` **Configuration options:** The List ID of the item in Sharepoint. Use Connect Portal User Settings to allow users to select a List. * Example value: `22e03ef3-6ef4-424d-a1d3-92a337807c30` # Item Updated Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/triggers/SHAREPOINT_TRIGGER_ITEM_UPDATED Trigger when an Item is updated in SharePoint ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "sharepoint", "type": "SHAREPOINT_TRIGGER_ITEM_UPDATED", "parameters": { "listId": "22e03ef3-6ef4-424d-a1d3-92a337807c30" } } ``` **Configuration options:** The List ID of the item in Sharepoint. Use Connect Portal User Settings to allow users to select a List. * Example value: `22e03ef3-6ef4-424d-a1d3-92a337807c30` # Page Modified Source: https://docs.useparagon.com/actionkit/integrations/sharepoint/triggers/SHAREPOINT_TRIGGER_PAGE_MODIFIED Trigger when a Site Page is created or updated in SharePoint ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "sharepoint", "type": "SHAREPOINT_TRIGGER_PAGE_MODIFIED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Create Customer Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_CREATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_CREATE_CUSTOMER # Create Customer GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_CREATE_CUSTOMER_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_CREATE_CUSTOMER_GRAPHQL # Create Order Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_CREATE_ORDER actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_CREATE_ORDER # Create Order GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_CREATE_ORDER_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_CREATE_ORDER_GRAPHQL # Create Product Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_CREATE_PRODUCT actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_CREATE_PRODUCT # Create Product GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_CREATE_PRODUCT_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_CREATE_PRODUCT_GRAPHQL # Get Abandoned Carts Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_ABANDONED_CARTS actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_ABANDONED_CARTS # Get Abandoned Carts GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_ABANDONED_CARTS_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_ABANDONED_CARTS_GRAPHQL # Get Customers Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_CUSTOMERS actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_CUSTOMERS # Get Customers GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_CUSTOMERS_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_CUSTOMERS_GRAPHQL # Get Orders Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_ORDERS actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_ORDERS # Get Orders GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_ORDERS_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_ORDERS_GRAPHQL # Get Products Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_PRODUCTS actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_PRODUCTS # Get Products GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_GET_PRODUCTS_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_GET_PRODUCTS_GRAPHQL # Search Customers Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_SEARCH_CUSTOMERS actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_SEARCH_CUSTOMERS # Update Customer Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_UPDATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_UPDATE_CUSTOMER # Update Customer GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_UPDATE_CUSTOMER_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_UPDATE_CUSTOMER_GRAPHQL # Update Order Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_UPDATE_ORDER actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_UPDATE_ORDER # Update Order GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_UPDATE_ORDER_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_UPDATE_ORDER_GRAPHQL # Update Product Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_UPDATE_PRODUCT actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_UPDATE_PRODUCT # Update Product GRAPHQL Source: https://docs.useparagon.com/actionkit/integrations/shopify/SHOPIFY_UPDATE_PRODUCT_GRAPHQL actionkit/openapi.json POST /projects/{project_id}/tools/#SHOPIFY_UPDATE_PRODUCT_GRAPHQL # Shopify Source: https://docs.useparagon.com/actionkit/integrations/shopify/overview Browse the tools and triggers available for Shopify in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when a customer data erasure is requested in Shopify **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Customer (GraphQL) Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_CUSTOMER_CREATED_GRAPHQL Trigger when a customer is created in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_CUSTOMER_CREATED_GRAPHQL", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Customer Data Erasure Request Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_CUSTOMER_DATA_ERASURE_REQUEST Trigger when a customer data erasure is requested in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_CUSTOMER_DATA_ERASURE_REQUEST", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Customer Data Request Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_CUSTOMER_DATA_REQUEST Trigger when a customer data is requested in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_CUSTOMER_DATA_REQUEST", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Customer Updated (GraphQL) Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_CUSTOMER_UPDATED_GRAPHQL Trigger when a customer is updated in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_CUSTOMER_UPDATED_GRAPHQL", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # New Order (GraphQL) Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_ORDER_CREATED_GRAPHQL Trigger when an order is created in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_ORDER_CREATED_GRAPHQL", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Order Updated (GraphQL) Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_ORDER_UPDATED_GRAPHQL Trigger when an order is updated in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_ORDER_UPDATED_GRAPHQL", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # New Product (GraphQL) Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_PRODUCT_CREATED_GRAPHQL Trigger when a product is created in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_PRODUCT_CREATED_GRAPHQL", "parameters": { "status": "active" } } ``` **Configuration options:** Status * Allowed values: `active`, `archived`, `draft` # Product Updated (GraphQL) Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_PRODUCT_UPDATED_GRAPHQL Trigger when a product is updated in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_PRODUCT_UPDATED_GRAPHQL", "parameters": { "status": "active" } } ``` **Configuration options:** Status * Allowed values: `active`, `archived`, `draft` # Shop Data Erasure Request Source: https://docs.useparagon.com/actionkit/integrations/shopify/triggers/SHOPIFY_TRIGGER_SHOP_DATA_ERASURE_REQUEST Trigger when a shop data erasure is requested in Shopify ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "shopify", "type": "SHOPIFY_TRIGGER_SHOP_DATA_ERASURE_REQUEST", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Create Epic Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_CREATE_EPIC actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_CREATE_EPIC # Create Project Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_CREATE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_CREATE_PROJECT # Create Story Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_CREATE_STORY actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_CREATE_STORY # Delete Epic Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_DELETE_EPIC actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_DELETE_EPIC # Delete Project Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_DELETE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_DELETE_PROJECT # Delete Story Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_DELETE_STORY actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_DELETE_STORY # Get Custom Fields Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_GET_CUSTOM_FIELDS actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_GET_CUSTOM_FIELDS # Get Epic By ID Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_GET_EPIC_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_GET_EPIC_BY_ID # Get Project By ID Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_GET_PROJECT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_GET_PROJECT_BY_ID # Get Stories By Epic Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_GET_STORIES_BY_EPIC actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_GET_STORIES_BY_EPIC # Get Stories By Project Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_GET_STORIES_BY_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_GET_STORIES_BY_PROJECT # Get Story By ID Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_GET_STORY_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_GET_STORY_BY_ID # Search Stories Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_SEARCH_STORIES actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_SEARCH_STORIES # Update Epic Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_UPDATE_EPIC actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_UPDATE_EPIC # Update Project Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_UPDATE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_UPDATE_PROJECT # Update Story Source: https://docs.useparagon.com/actionkit/integrations/shortcut/SHORTCUT_UPDATE_STORY actionkit/openapi.json POST /projects/{project_id}/tools/#SHORTCUT_UPDATE_STORY # Shortcut Source: https://docs.useparagon.com/actionkit/integrations/shortcut/overview Browse the tools available for Shortcut in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Shortcut. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Get Users By Name Source: https://docs.useparagon.com/actionkit/integrations/slack/SLACK_GET_USERS_BY_NAME actionkit/openapi.json POST /projects/{project_id}/tools/#SLACK_GET_USERS_BY_NAME # Get User By Email Source: https://docs.useparagon.com/actionkit/integrations/slack/SLACK_GET_USER_BY_EMAIL actionkit/openapi.json POST /projects/{project_id}/tools/#SLACK_GET_USER_BY_EMAIL # List Channels Source: https://docs.useparagon.com/actionkit/integrations/slack/SLACK_LIST_CHANNELS actionkit/openapi.json POST /projects/{project_id}/tools/#SLACK_LIST_CHANNELS # List Members Source: https://docs.useparagon.com/actionkit/integrations/slack/SLACK_LIST_MEMBERS actionkit/openapi.json POST /projects/{project_id}/tools/#SLACK_LIST_MEMBERS # Search Messages Source: https://docs.useparagon.com/actionkit/integrations/slack/SLACK_SEARCH_MESSAGES actionkit/openapi.json POST /projects/{project_id}/tools/#SLACK_SEARCH_MESSAGES # Send Direct Message Source: https://docs.useparagon.com/actionkit/integrations/slack/SLACK_SEND_DIRECT_MESSAGE actionkit/openapi.json POST /projects/{project_id}/tools/#SLACK_SEND_DIRECT_MESSAGE # Send Message Source: https://docs.useparagon.com/actionkit/integrations/slack/SLACK_SEND_MESSAGE actionkit/openapi.json POST /projects/{project_id}/tools/#SLACK_SEND_MESSAGE # Slack Source: https://docs.useparagon.com/actionkit/integrations/slack/overview Browse the tools and triggers available for Slack in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when your application is mentioned in a message in Slack Trigger when global and message shortcuts are interacted with in Slack **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # App Mentioned Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_APP_MENTIONED Trigger when your application is mentioned in a message in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_APP_MENTIONED", "parameters": { "appMentionedFilter": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "user", "operator": "$stringExactlyMatches", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Search for records that match specified filters. * Supported filter fields: `user`, `channel` * Supported operators: `$stringExactlyMatches` ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "client_msg_id": "123123123", "type": "app_mention", "text": "Your app <@app_id> is mentioned.", "user": "U048S106P", "ts": "1360782400.498405", "blocks": [ { "type": "rich_text", "block_id": "S4RPr", "elements": [ { "type": "rich_text_section", "elements": [ { "type": "user", "user_id": "U04URSJ58" }, { "text": "mock-text", "type": "text" } ] } ] } ], "team": "TM7705V", "channel": "C03NFFWH13M", "event_context": "mock-event-context", "event_ts": "1360782400.498405" } ``` # Channel Created Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_CHANNEL_CREATED Trigger when a channel was created in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_CHANNEL_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "channel_created", "channel": { "id": "C0553690LQM", "is_channel": true, "name": "test-webhook", "name_normalized": "test-webhook", "created": 1682576941, "creator": "U02T23UL0R1", "is_shared": false, "is_org_shared": false, "context_team_id": "TM7FL705V", "channel": "mock-channel-id", "channel_type": "channel", "event_context": "mock-event-context", "event_ts": "1682576941.441499", "subtype": "channel_join", "text": "<@mock-user-id> has joined the channel", "ts": "1682576941.441499", "type": "message", "user": "mock-user-id", "is_archived": false, "is_ext_shared": false, "is_frozen": false, "is_general": false, "is_group": false, "is_im": false, "is_mpim": false, "is_pending_ext_shared": false, "is_private": false, "parent_conversation": null, "pending_connected_team_ids": [], "pending_shared": [], "previous_names": [], "purpose": { "creator": "", "last_set": 0, "value": "" }, "shared_team_ids": [ "T05FCKSSGAK" ], "topic": { "creator": "", "last_set": 0, "value": "" }, "unlinked": 0, "updated": 1764319818291 }, "event_ts": "1764319818.015000" } ``` # Channel Message Sent Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_CHANNEL_MESSAGE_POSTED Trigger when a channel message is posted in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_CHANNEL_MESSAGE_POSTED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "message", "subtype": "channel_join", "ts": "1682576941.441499", "team": "mock-team-id", "user": "U02T23UL0R1", "text": "<@U02T23UL0R1> has joined the channel", "blocks": [ { "type": "rich_text", "block_id": "mock-block-id", "elements": [ { "type": "rich_text_section", "elements": [ { "text": "mock-text", "type": "text" } ] } ] } ], "channel": "C0553690LQM", "event_ts": "1682576941.441499", "channel_type": "channel", "display_as_bot": false, "upload": false, "files": [], "client_msg_id": "mock-client-msg-id", "event_context": "mock-event-context" } ``` # Channel Message Updated Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_CHANNEL_MESSAGE_UPDATED Trigger when a channel message is updated in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_CHANNEL_MESSAGE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "message", "subtype": "message_changed", "message": { "client_msg_id": "df1d041e-9c4a-4a09-a5ab-dff83ea4f48b", "type": "message", "text": "mail password", "user": "U02T23UL0R1", "team": "TM7FL705V", "blocks": [ { "block_id": "mock-block-id", "elements": [ { "elements": [ { "text": "mock-text", "type": "text" } ], "type": "rich_text_section" } ], "type": "rich_text" } ], "files": [], "display_as_bot": false, "upload": false, "edited": { "user": "U02T23UL0R1", "ts": "1682408029.257029" }, "ts": "1682408029.257029", "source_team": "TM7FL705V", "user_team": "TM7FL705V" }, "previous_message": { "client_msg_id": "df1d041e-9c4a-4a09-a5ab-dff83ea4f48b", "type": "message", "text": "mail ka password", "display_as_bot": false, "user": "U02T23UL0R1", "ts": "1682408029.257029", "blocks": [ { "block_id": "mock-block-id", "elements": [ { "elements": [ { "text": "mock-text", "type": "text" } ], "type": "rich_text_section" } ], "type": "rich_text" } ], "files": [], "upload": false, "team": "TM7FL705V" }, "channel": "D04B4K12K4J", "hidden": true, "ts": "1682576024.000100", "event_ts": "1682576024.000100", "channel_type": "im", "event_context": "mock-event-context" } ``` # Direct Message Created Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_DIRECT_MESSAGE_CREATED Trigger when a DM was created in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_DIRECT_MESSAGE_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "im_created", "user": "mock-user-id", "channel": { "id": "C0553690LQM", "user": "mock-user-id", "is_im": true, "latest": null, "is_open": false, "updated": 1764319159873, "is_frozen": false, "last_read": "0000000000.000000", "is_archived": false, "unread_count": 0, "is_channel": true, "name": "test-webhook", "name_normalized": "test-webhook", "created": 1682576941, "creator": "U02T23UL0R1", "is_shared": false, "is_org_shared": false, "context_team_id": "TM7FL705V", "unread_count_display": 0 }, "event_ts": "1682576941.441499" } ``` # Direct Message Sent Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_DIRECT_MESSAGE_POSTED Trigger when a message is posted in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_DIRECT_MESSAGE_POSTED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "ts": "1760013930.211109", "team": "mock-team-id", "text": "mock-text", "type": "message", "user": "mock-user-id", "blocks": [ { "type": "rich_text", "block_id": "mock-block-id", "elements": [ { "type": "rich_text_section", "elements": [ { "text": "mock-text", "type": "text" } ] } ] } ], "channel": "mock-channel-id", "event_ts": "1760013930.211109", "channel_type": "im", "client_msg_id": "mock-client-msg-id", "event_context": "mock-event-context" } ``` # Direct Message Updated Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_DIRECT_MESSAGE_UPDATED Trigger when a direct message is updated in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_DIRECT_MESSAGE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "message", "subtype": "message_changed", "message": { "client_msg_id": "df1d041e-9c4a-4a09-a5ab-dff83ea4f48b", "type": "message", "text": "mail password", "user": "U02T23UL0R1", "team": "TM7FL705V", "blocks": [ { "block_id": "mock-block-id", "elements": [ { "elements": [ { "text": "mock-text", "type": "text" } ], "type": "rich_text_section" } ], "type": "rich_text" } ], "files": [], "display_as_bot": false, "upload": false, "edited": { "user": "U02T23UL0R1", "ts": "1682408029.257029" }, "ts": "1682408029.257029", "source_team": "TM7FL705V", "user_team": "TM7FL705V" }, "previous_message": { "client_msg_id": "df1d041e-9c4a-4a09-a5ab-dff83ea4f48b", "type": "message", "text": "mail ka password", "display_as_bot": false, "user": "U02T23UL0R1", "ts": "1682408029.257029", "blocks": [ { "block_id": "mock-block-id", "elements": [ { "elements": [ { "text": "mock-text", "type": "text" } ], "type": "rich_text_section" } ], "type": "rich_text" } ], "files": [], "upload": false, "team": "TM7FL705V" }, "channel": "D04B4K12K4J", "hidden": true, "ts": "1682576024.000100", "event_ts": "1682576024.000100", "channel_type": "im", "event_context": "mock-event-context" } ``` # File Deleted Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_FILE_DELETED Trigger when a file is deleted in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_FILE_DELETED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "file_deleted", "file_id": "F05L9MF5DTQ", "channel_ids": [ "C05LVIR6PP" ], "event_ts": "1360782804.08312123" } ``` # Group Message Sent Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_GROUP_MESSAGE_POSTED Trigger when a group message is posted in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_GROUP_MESSAGE_POSTED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "message", "client_msg_id": "mock-client-msg-id", "event_context": "mock-event-context", "team": "T05FCKSSGAK", "blocks": [ { "block_id": "mock-block-id", "elements": [ { "elements": [ { "text": "mock-text", "type": "text" } ], "type": "rich_text_section" } ], "type": "rich_text" } ], "ts": "1682576941.441499", "user": "U02T23UL0R1", "text": "<@U02T23UL0R1> has joined the channel", "channel": "C0553690LQM", "event_ts": "1682576941.441499", "channel_type": "mpim" } ``` # Group Message Updated Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_GROUP_MESSAGE_UPDATED Trigger when a group message is updated in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_GROUP_MESSAGE_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "message", "subtype": "message_changed", "message": { "client_msg_id": "df1d041e-9c4a-4a09-a5ab-dff83ea4f48b", "type": "message", "text": "mail password", "user": "U02T23UL0R1", "team": "TM7FL705V", "blocks": [ { "block_id": "mock-block-id", "elements": [ { "elements": [ { "text": "mock-text", "type": "text" } ], "type": "rich_text_section" } ], "type": "rich_text" } ], "files": [], "display_as_bot": false, "upload": false, "edited": { "user": "U02T23UL0R1", "ts": "1682408029.257029" }, "ts": "1682408029.257029", "source_team": "TM7FL705V", "user_team": "TM7FL705V" }, "previous_message": { "client_msg_id": "df1d041e-9c4a-4a09-a5ab-dff83ea4f48b", "type": "message", "text": "mail ka password", "display_as_bot": false, "user": "U02T23UL0R1", "ts": "1682408029.257029", "blocks": [ { "block_id": "mock-block-id", "elements": [ { "elements": [ { "text": "mock-text", "type": "text" } ], "type": "rich_text_section" } ], "type": "rich_text" } ], "files": [], "upload": false, "team": "TM7FL705V" }, "channel": "D04B4K12K4J", "hidden": true, "ts": "1682576024.000100", "event_ts": "1682576024.000100", "channel_type": "im", "event_context": "mock-event-context" } ``` # Message Interaction Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_MESSAGE_INTERACTION Trigger when global and message shortcuts are interacted with in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_MESSAGE_INTERACTION", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "block_actions", "user": { "id": "U05FHR8WY94", "username": "mock", "name": "mock", "team_id": "T05FCDEOGAK" }, "api_app_id": "F5JFQPAQS5B", "token": "L7IX6dGhLCZnYlRkjHJE6FE4", "container": { "type": "message", "message_ts": "1702463410.208979", "channel_id": "C069FDS4JWV", "is_ephemeral": false }, "trigger_id": "5522672900359.6335258913941.9a930ce254ab481dcf90c6ad200e636f", "team": { "id": "T05FCDEOGAK", "domain": "mock" }, "enterprise": null, "is_enterprise_install": false, "channel": { "id": "C069FDS4JWV", "name": "privategroup" }, "message": { "bot_id": "EFCOGT05DAK", "type": "message", "text": "bro", "app_id": "AQPS5BQA05F", "team": "T05FCDEOGAK", "blocks": [ { "text": { "text": "New request", "type": "plain_text", "emoji": true }, "type": "header", "block_id": "QZRVZ" }, { "type": "section", "fields": [ { "text": "*When:*\nAug 10 - Aug 13", "type": "mrkdwn", "verbatim": false } ], "block_id": "zcsYJ" }, { "type": "actions", "block_id": "bBxhy", "elements": [ { "text": { "text": "Approve", "type": "plain_text", "emoji": true }, "type": "button", "style": "primary", "value": "click_me_123", "action_id": "uSoeH" } ] } ], "ts": "1759934456.031349", "user": "U05FD5S2023" }, "state": { "values": {} }, "response_url": "https://hooks.slack.com/actions/T05FCDEOGAK/6335263953942/xKHT0IcAFsOLYl0HTf3LkU4S", "actions": [ { "action_id": "Yg6CW", "block_id": "bBxhy", "text": { "type": "plain_text", "text": "Reject", "emoji": true }, "value": "click_me_123", "style": "danger", "type": "button", "action_ts": "1702463475.096267" } ] } ``` # New Message Reaction Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_NEW_REACTION Trigger when a reaction was added to an message in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_NEW_REACTION", "parameters": { "reactionFilter": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "item_user", "operator": "$stringExactlyMatches", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Search for reactions that match specified filters. * Supported filter fields: `item_user`, `user`, `channel` * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch` ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "reaction_added", "user": "U123ABC456", "reaction": "thumbsup", "item_user": "U222222222", "item": { "type": "message", "channel": "C123ABC456", "ts": "1360782400.498405" }, "event_ts": "1360782804.083113", "event_context": "mock-event-context" } ``` # Message Reaction Removed Source: https://docs.useparagon.com/actionkit/integrations/slack/triggers/SLACK_TRIGGER_REACTION_REMOVED Trigger when a reaction is removed from an message in Slack ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "slack", "type": "SLACK_TRIGGER_REACTION_REMOVED", "parameters": { "reactionFilter": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "item_user", "operator": "$stringExactlyMatches", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Search for reactions that match specified filters. * Supported filter fields: `item_user`, `user`, `channel` * Supported operators: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch` ## Example Payload This is an example payload that Paragon sends to your configured webhook URL. Learn more about handling trigger payloads in [Receiving Webhooks](/actionkit/triggers/receiving-webhooks). ```json Example expandable theme={null} { "type": "reaction_removed", "user": "U123ABC456", "reaction": "thumbsup", "item_user": "U222222222", "item": { "type": "message", "channel": "C123ABC456", "ts": "1360782400.498405" }, "event_ts": "1360782804.083113", "event_context": "mock-event-context" } ``` # Create Customer Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_CREATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_CREATE_CUSTOMER # Create Product Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_CREATE_PRODUCT actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_CREATE_PRODUCT # Create Subscription Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_CREATE_SUBSCRIPTION actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_CREATE_SUBSCRIPTION # Get Balance Transactions Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_GET_BALANCE_TRANSACTIONS actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_GET_BALANCE_TRANSACTIONS # Get Customers Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_GET_CUSTOMERS actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_GET_CUSTOMERS # Get Customer By ID Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_GET_CUSTOMER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_GET_CUSTOMER_BY_ID # Get Plans Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_GET_PLANS actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_GET_PLANS # Get Products Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_GET_PRODUCTS actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_GET_PRODUCTS # Get Product By ID Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_GET_PRODUCT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_GET_PRODUCT_BY_ID # Get Subscriptions Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_GET_SUBSCRIPTIONS actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_GET_SUBSCRIPTIONS # Update Customer Source: https://docs.useparagon.com/actionkit/integrations/stripe/STRIPE_UPDATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#STRIPE_UPDATE_CUSTOMER # Stripe Source: https://docs.useparagon.com/actionkit/integrations/stripe/overview Browse the tools available for Stripe in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Stripe. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Close Task Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_CLOSE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_CLOSE_TASK # Create Project Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_CREATE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_CREATE_PROJECT # Create Task Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_CREATE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_CREATE_TASK # Delete Project Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_DELETE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_DELETE_PROJECT # Delete Task Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_DELETE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_DELETE_TASK # Get All Projects Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_GET_ALL_PROJECTS actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_GET_ALL_PROJECTS # Get Project By ID Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_GET_PROJECT_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_GET_PROJECT_BY_ID # Get Task By ID Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_GET_TASK_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_GET_TASK_BY_ID # Search Tasks Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_SEARCH_TASKS actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_SEARCH_TASKS # Update Project Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_UPDATE_PROJECT actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_UPDATE_PROJECT # Update Task Source: https://docs.useparagon.com/actionkit/integrations/todoist/TODOIST_UPDATE_TASK actionkit/openapi.json POST /projects/{project_id}/tools/#TODOIST_UPDATE_TASK # Todoist Source: https://docs.useparagon.com/actionkit/integrations/todoist/overview Browse the tools available for Todoist in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Todoist. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Card Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_CREATE_CARD actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_CREATE_CARD # Delete Card Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_DELETE_CARD actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_DELETE_CARD # Get Boards Member Belong To Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_GET_BOARDS_MEMBER_BELONG_TO actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_GET_BOARDS_MEMBER_BELONG_TO # Get Cards In Board Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_GET_CARDS_IN_BOARD actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_GET_CARDS_IN_BOARD # Get Lists In Board Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_GET_LISTS_IN_BOARD actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_GET_LISTS_IN_BOARD # Search Boards Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_SEARCH_BOARDS actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_SEARCH_BOARDS # Search Cards Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_SEARCH_CARDS actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_SEARCH_CARDS # Update Card Source: https://docs.useparagon.com/actionkit/integrations/trello/TRELLO_UPDATE_CARD actionkit/openapi.json POST /projects/{project_id}/tools/#TRELLO_UPDATE_CARD # Trello Source: https://docs.useparagon.com/actionkit/integrations/trello/overview Browse the tools and triggers available for Trello in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # Board Created Source: https://docs.useparagon.com/actionkit/integrations/trello/triggers/TRELLO_TRIGGER_BOARD_CREATED Trigger when a new Trello board is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "trello", "type": "TRELLO_TRIGGER_BOARD_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Board Updated Source: https://docs.useparagon.com/actionkit/integrations/trello/triggers/TRELLO_TRIGGER_BOARD_UPDATED Trigger when a Trello board is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "trello", "type": "TRELLO_TRIGGER_BOARD_UPDATED", "parameters": { "boardId": "{{settings.board}}" } } ``` **Configuration options:** Select a Board to watch its updates. Use Connect Portal Workflow Settings to allow users to select a Trello Board. * Example value: `{{settings.board}}` # Card Created Source: https://docs.useparagon.com/actionkit/integrations/trello/triggers/TRELLO_TRIGGER_CARD_CREATED Trigger when a new Trello card is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "trello", "type": "TRELLO_TRIGGER_CARD_CREATED", "parameters": { "boardId": "{{settings.board}}" } } ``` **Configuration options:** Select a Board to watch for new cards. Use Connect Portal Workflow Settings to allow users to select a Trello Board. * Example value: `{{settings.board}}` # Card Updated Source: https://docs.useparagon.com/actionkit/integrations/trello/triggers/TRELLO_TRIGGER_CARD_UPDATED Trigger when a Trello card is updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "trello", "type": "TRELLO_TRIGGER_CARD_UPDATED", "parameters": { "boardId": "{{settings.board}}" } } ``` **Configuration options:** Select a Board to watch for updated cards. Use Connect Portal Workflow Settings to allow users to select a Trello Board. * Example value: `{{settings.board}}` # Comment Created Source: https://docs.useparagon.com/actionkit/integrations/trello/triggers/TRELLO_TRIGGER_COMMENT_CREATED Trigger when a new Trello card commment is created ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "trello", "type": "TRELLO_TRIGGER_COMMENT_CREATED", "parameters": { "boardId": "{{settings.board}}" } } ``` **Configuration options:** Select a Board to watch for card comments. Use Connect Portal Workflow Settings to allow users to select a Trello Board. * Example value: `{{settings.board}}` # Create Customer Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_CREATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_CREATE_CUSTOMER # Create Invoice Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_CREATE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_CREATE_INVOICE # Create Payment Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_CREATE_PAYMENT actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_CREATE_PAYMENT # Get Accounts Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_GET_ACCOUNTS actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_GET_ACCOUNTS # Get Contacts Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_GET_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_GET_CONTACTS # Get Invoices Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_GET_INVOICES actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_GET_INVOICES # Get Payments Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_GET_PAYMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_GET_PAYMENTS # Send Invoice Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_SEND_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_SEND_INVOICE # Update Customer Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_UPDATE_CUSTOMER actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_UPDATE_CUSTOMER # Update Invoice Source: https://docs.useparagon.com/actionkit/integrations/xero/XERO_UPDATE_INVOICE actionkit/openapi.json POST /projects/{project_id}/tools/#XERO_UPDATE_INVOICE # Xero Source: https://docs.useparagon.com/actionkit/integrations/xero/overview Browse the tools available for Xero in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Xero. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Add Comment To Ticket Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_ADD_COMMENT_TO_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_ADD_COMMENT_TO_TICKET # Create Ticket Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_CREATE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_CREATE_TICKET # Create User Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_CREATE_USER actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_CREATE_USER # Delete Ticket Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_DELETE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_DELETE_TICKET # Delete User Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_DELETE_USER actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_DELETE_USER # Get Ticket Audits Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_GET_TICKET_AUDITS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_GET_TICKET_AUDITS # Get Ticket By ID Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_GET_TICKET_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_GET_TICKET_BY_ID # Get Ticket Comments Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_GET_TICKET_COMMENTS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_GET_TICKET_COMMENTS # Get Ticket Fields Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_GET_TICKET_FIELDS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_GET_TICKET_FIELDS # Get User By ID Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_GET_USER_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_GET_USER_BY_ID # Search Tickets Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_SEARCH_TICKETS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SEARCH_TICKETS # Search Users Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_SEARCH_USERS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SEARCH_USERS # Update Ticket Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_UPDATE_TICKET actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_UPDATE_TICKET # Update User Source: https://docs.useparagon.com/actionkit/integrations/zendesk/ZENDESK_UPDATE_USER actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_UPDATE_USER # Zendesk Source: https://docs.useparagon.com/actionkit/integrations/zendesk/overview Browse the tools and triggers available for Zendesk in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Ticket Source: https://docs.useparagon.com/actionkit/integrations/zendesk/triggers/ZENDESK_TRIGGER_TICKET_CREATED New Ticket ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zendesk", "type": "ZENDESK_TRIGGER_TICKET_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Ticket Updated Source: https://docs.useparagon.com/actionkit/integrations/zendesk/triggers/ZENDESK_TRIGGER_TICKET_UPDATED Ticket Updated ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zendesk", "type": "ZENDESK_TRIGGER_TICKET_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Create Record Contacts Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_CREATE_RECORD_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_CREATE_RECORD_CONTACTS # Create Record Deals Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_CREATE_RECORD_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_CREATE_RECORD_DEALS # Create Record Leads Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_CREATE_RECORD_LEADS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_CREATE_RECORD_LEADS # Create Record Tasks Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_CREATE_RECORD_TASKS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_CREATE_RECORD_TASKS # Delete Record Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_DELETE_RECORD actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_DELETE_RECORD # Get Custom Fields Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_GET_CUSTOM_FIELDS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_GET_CUSTOM_FIELDS # Get Record By ID Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_GET_RECORD_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_GET_RECORD_BY_ID # Search Records Contacts Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_SEARCH_RECORDS_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_SEARCH_RECORDS_CONTACTS # Search Records Deals Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_SEARCH_RECORDS_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_SEARCH_RECORDS_DEALS # Search Records Leads Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_SEARCH_RECORDS_LEADS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_SEARCH_RECORDS_LEADS # Search Records Tasks Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_SEARCH_RECORDS_TASKS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_SEARCH_RECORDS_TASKS # Update Record Contacts Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_UPDATE_RECORD_CONTACTS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_UPDATE_RECORD_CONTACTS # Update Record Deals Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_UPDATE_RECORD_DEALS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_UPDATE_RECORD_DEALS # Update Record Leads Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_UPDATE_RECORD_LEADS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_UPDATE_RECORD_LEADS # Update Record Tasks Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/ZENDESK_SELL_UPDATE_RECORD_TASKS actionkit/openapi.json POST /projects/{project_id}/tools/#ZENDESK_SELL_UPDATE_RECORD_TASKS # Zendesk Sell Source: https://docs.useparagon.com/actionkit/integrations/zendesksell/overview Browse the tools available for Zendesk Sell in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers No prebuilt ActionKit triggers are currently available for Zendesk Sell. You can define your own using [Custom Webhooks](/resources/custom-webhooks). # Create Record Any Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/ZOHO_CRM_CREATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#ZOHO_CRM_CREATE_RECORD_ANY # Delete Record Any Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/ZOHO_CRM_DELETE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#ZOHO_CRM_DELETE_RECORD_ANY # Describe Action Schema Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/ZOHO_CRM_DESCRIBE_ACTION_SCHEMA actionkit/openapi.json POST /projects/{project_id}/tools/#ZOHO_CRM_DESCRIBE_ACTION_SCHEMA # Get Record By ID Any Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/ZOHO_CRM_GET_RECORD_BY_ID_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#ZOHO_CRM_GET_RECORD_BY_ID_ANY # Search Records Any Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/ZOHO_CRM_SEARCH_RECORDS_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#ZOHO_CRM_SEARCH_RECORDS_ANY # Update Record Any Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/ZOHO_CRM_UPDATE_RECORD_ANY actionkit/openapi.json POST /projects/{project_id}/tools/#ZOHO_CRM_UPDATE_RECORD_ANY # Write COQL Query Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/ZOHO_CRM_WRITE_COQL_QUERY actionkit/openapi.json POST /projects/{project_id}/tools/#ZOHO_CRM_WRITE_COQL_QUERY # Zoho CRM Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/overview Browse the tools and triggers available for Zoho CRM in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Record Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/triggers/ZOHO_CRM_TRIGGER_RECORD_CREATED Trigger when a new Zoho CRM record is created. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zohocrm", "type": "ZOHO_CRM_TRIGGER_RECORD_CREATED", "parameters": { "recordType": "Accounts", "recordsFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "id", "operator": "$stringContains", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Record type * Allowed values: `Accounts`, `Contacts`, `Leads`, `Tasks`, Custom Object (``) * Options can be loaded by using the `recordTypeCacheKey` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The API Name of the Object to create. Use Connect Portal Workflow Settings to allow users to select a Field Mapping. * Example value: `{{settings.objectType}}` Only trigger on new records that match these filters. * Supported filter fields: `id` * Supported filter fields are loaded from `fieldsCacheKey` after selecting `recordType`. * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist` # Record Updated Source: https://docs.useparagon.com/actionkit/integrations/zohocrm/triggers/ZOHO_CRM_TRIGGER_RECORD_UPDATED Trigger when a Zoho CRM record is updated. ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zohocrm", "type": "ZOHO_CRM_TRIGGER_RECORD_UPDATED", "parameters": { "recordType": "Accounts", "recordsFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "id", "operator": "$stringContains", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Record type * Allowed values: `Accounts`, `Contacts`, `Leads`, `Tasks`, Custom Object (``) * Options can be loaded by using the `recordTypeCacheKey` key. Learn more in [User Configuration](/actionkit/triggers/user-configuration). Additional options when this parameter is set to ``. The API Name of the Object to update. Use Connect Portal Workflow Settings to allow users to select a Field Mapping. * Example value: `{{settings.objectType}}` Only trigger on updated records that match these filters. * Supported filter fields: `id` * Supported filter fields are loaded from `fieldsCacheKey` after selecting `recordType`. * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist` # Add Meeting Registrant Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_ADD_MEETING_REGISTRANT actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_ADD_MEETING_REGISTRANT # Create Meeting Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_CREATE_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_CREATE_MEETING # Delete Meeting Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_DELETE_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_DELETE_MEETING # Delete Meeting Registrant Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_DELETE_MEETING_REGISTRANT actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_DELETE_MEETING_REGISTRANT # Get Meeting Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_GET_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_GET_MEETING # Get Meeting By ID Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_GET_MEETING_BY_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_GET_MEETING_BY_ID # Get Meeting Registrant Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_GET_MEETING_REGISTRANT actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_GET_MEETING_REGISTRANT # Get Recording By Meeting ID Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_GET_RECORDING_BY_MEETING_ID actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_GET_RECORDING_BY_MEETING_ID # Search Recording Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_SEARCH_RECORDING actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_SEARCH_RECORDING # Update Meeting Source: https://docs.useparagon.com/actionkit/integrations/zoom/ZOOM_UPDATE_MEETING actionkit/openapi.json POST /projects/{project_id}/tools/#ZOOM_UPDATE_MEETING # Zoom Source: https://docs.useparagon.com/actionkit/integrations/zoom/overview Browse the tools and triggers available for Zoom in ActionKit. ## Tools **Don't see the tool you need?** Define your own using [Custom Tools](/actionkit/custom-tools). ## Triggers Trigger when the transcript of the recording is made available **Don't see the trigger you need?** Define your own using [Custom Webhooks](/resources/custom-webhooks). # New Meeting Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_MEETING_CREATED Trigger when a meeting is created in Zoom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_MEETING_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Meeting Ended Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_MEETING_ENDED Trigger when a meeting host ends the meeting in Zoom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_MEETING_ENDED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # New Meeting Registrant Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_MEETING_REGISTRANT_CREATED Trigger when a user registers for a meeting in Zoom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_MEETING_REGISTRANT_CREATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Meeting Updated Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_MEETING_UPDATED Trigger when a meeting is updated in Zoom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_MEETING_UPDATED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Meeting Participant Joined Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_PARTICIPANT_JOINED Trigger when a participant joins a meeting in Zoom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_PARTICIPANT_JOINED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Meeting Participant Left Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_PARTICIPANT_LEFT Trigger when a participant has left the meeting in Zoom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_PARTICIPANT_LEFT", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Complete Recording Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_RECORDING_COMPLETED Trigger when a meeting recording is ready to download ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_RECORDING_COMPLETED", "parameters": { "recordsFilterFormula": { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "Account ID", "operator": "$stringContains", "value": "example-value" } ] } ] } } } ``` **Configuration options:** Only trigger for meeting recordings that match these filters * Supported filter fields: `Account ID`, `Start Date`, `End Date` * Supported operators: `$none`, `$stringContains`, `$stringDoesNotContain`, `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$numberGreaterThan`, `$numberLessThan`, `$numberEquals`, `$numberDoesNotEqual`, `$dateTimeAfter`, `$dateTimeBefore`, `$dateTimeEquals`, `$booleanTrue`, `$booleanFalse`, `$exists`, `$doesNotExist`, `$isNotUndefinedOrNull`, `$isUndefinedOrNull`, `$arrayIsEmpty`, `$arrayIsNotEmpty` # New Recording Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_RECORDING_STARTED Trigger when a meeting recording is started in Zoom ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_RECORDING_STARTED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # Recording Transcript Completed Source: https://docs.useparagon.com/actionkit/integrations/zoom/triggers/ZOOM_TRIGGER_RECORDING_TRANSCRIPT_COMPLETED Trigger when the transcript of the recording is made available ## Subscribe Send this request body to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger) to start listening for this event on behalf of your user: ```http Subscribe Request theme={null} POST https://actionkit.useparagon.com/projects/{project_id}/trigger-subscriptions Authorization: Bearer {Paragon User Token} Content-Type: application/json { "integration": "zoom", "type": "ZOOM_TRIGGER_RECORDING_TRANSCRIPT_COMPLETED", "parameters": {} } ``` **Configuration options:** This trigger does not require any configuration options. # ActionKit Source: https://docs.useparagon.com/actionkit/overview ActionKit is an API to give your AI agent or app access to Paragon's catalog of pre-built Integration Tools and Triggers. Action Kit Banner Pn **ActionKit** exposes thousands of pre-built Tools (actions in a third-party system) and Triggers (events in a third-party system) across integrations through *one* consistent interface. The main use cases for ActionKit include: 1. **AI agents**: Give your AI agent a deep understanding of your users' connected apps: * Expose [Tools](/actionkit/api-reference) as capabilities to your AI agent (with our API or MCP), with agent-optimized descriptions for tool calling accuracy. * Use [Triggers](/actionkit/triggers/overview) to listen for third-party events in your users' integrations and react to new data with your AI agent. 2. **In-app workflow builders**: Expand your in-app workflow builder with Paragon's catalog of thousands of pre-built Tools and Triggers: * Expose [Tools](/actionkit/api-reference) as action nodes in your in-app workflow builder by rendering Tool input schemas in your UI. * Expose [Triggers](/actionkit/triggers/overview) as trigger nodes for your users to discover and configure trigger points for their workflow automations. 3. **Front-end functions**: If your users interact with integration data in your app, use [Tools](/actionkit/api-reference) to power frontend features like displaying a table of Salesforce opportunities or a button to send a Slack notification. 4. **First-party automations**: If your app needs to react to data changes or new events from your users' connected apps, use [Triggers](/actionkit/triggers/overview) to listen for events like a new Slack @mention or new Salesforce lead. ActionKit is built for real-life use cases, providing much deeper abstractions than simply wrapping each 3rd-party API. As a result, this comes with benefits including: * A universal filter schema that works across all list/search operations in any 3rd-party application (ie. "contains", "equals", "greater\_than") * A `reload_fields` configuration that can re-pull each of your users’ dynamic fields at query-time, ensuring you have full access to their custom fields in the 3rd-party applications * [Use case-specific schema formats](/actionkit/schema-formats) purpose-built for AI agent use cases and workflow builder implementations # Schema Formats Source: https://docs.useparagon.com/actionkit/schema-formats ## Overview ActionKit supports multiple formats for accessing Tool definitions from the API, for different use cases: * **JSON Schema** `format=json_schema` * For AI agent use cases: in most cases, you can pass Tool schemas directly in JSON Schema format to your LLM. * To learn more about JSON Schema, reference the [official specification](https://json-schema.org/draft/2020-12/json-schema-core). Paragon does not implement any of the non-standard fields in `draft-*` versions of JSON Schema at this time. * **Paragon** `format=paragon` * For frontend configuration use cases: for example, if you are adding Tools to your product's workflow builder. * Learn more about the Paragon format below. You can request a specific format in the [List Tools](/actionkit/api-reference/list-tools) API endpoint with the `format` query parameter. ## Paragon Format The Paragon format is the same schema used internally to power our Workflow Editor. It is designed to render input fields to allow end users to configure Tools. When using the Paragon format, you will need to support the following types of inputs in Paragon:
Input Type Key(s) Example
Enum input (dropdown) ENUM | DYNAMIC\_ENUM
Enum input with free text support
The user should be able to add their own option, if unavailable in the list
EDITABLE\_ENUM
Enum input with text area
A text input should appear to the right of the dropdown.
EnumTextAreaPairInput
**Text input** TEXT | TEXT\_NO\_VARS
**Textarea input**
Note that by default, lines = 1 (in this case, this input should look identical to a text input).
TEXTAREA | TEXTAREA\_NO\_VARS
**Code input** CODE
**Boolean input** (switch / toggle) BOOLEAN\_INPUT | SWITCH
**Filter / conditional input** CONDITIONAL | DYNAMIC\_CONDITIONAL
### Tool polymorphism To work around limitations of JSON Schema, the `json_schema` (default) format automatically breaks down polymorphic parameters into individual Tools. For example, `SALESFORCE_CREATE_RECORD` splits into 6 distinct Tools: * `SALESFORCE_CREATE_OPPORTUNITY` * `SALESFORCE_CREATE_CONTACT` * `SALESFORCE_CREATE_ACCOUNT` * `SALESFORCE_CREATE_LEAD` * `SALESFORCE_CREATE_ANY` * For non-standard objects, whose fields can be discovered with `SALESFORCE_DESCRIBE_ACTION_SCHEMA` In the `paragon` format, polymorphic schemas are not broken into individual Tools and instead will be represented as `dependentInputs` within the API (see below example). When calling [Run Tool](/actionkit/api-reference/run-tool), you can reference either the specific Tool (e.g. `SALESFORCE_CREATE_OPPORTUNITY`) or the generic Tool (e.g. `SALESFORCE_CREATE_RECORD`), as long as the required parameters are supplied. ```json theme={null} // Example format=paragon Tool Schema: { "name": "SALESFORCE_CREATE_RECORD", "title": "Create record", "inputs": [ { "id": "recordType", "title": "Record type", "type": "ENUM", "required": true, "values": [ { "value": "Opportunity", // When recordType = "Opportunity", show inputs: "dependentInputs": [...] }, { "value": "Contact", // When recordType = "Contact", show inputs: "dependentInputs": [...] }, ... ] } ] } ``` # Supported Integrations Source: https://docs.useparagon.com/actionkit/supported-integrations See all the integrations that are currently supported by ActionKit. Available Tools are also listed in the [Reference](/actionkit/integrations) section under each integration name in the sidebar. If you don't see the integration or tool you're looking for, try [creating a Custom Tool](/actionkit/custom-tools) or [reach out to us](mailto:support@useparagon.com) with more details. * Adobe Experience Manager * Asana * Azure DevOps * BambooHR * Box * Calendly * ClickUp * Coda * Confluence * DocuSign * Dropbox * Dropbox Sign * Dynamics 365 Business Central * Facebook Ads * Figma * Freshdesk * Front * GitHub * Gmail * Gong * Google Calendar * Google Drive * Google Search Console * Google Sheets * Gusto * HubSpot * Intercom * Jira * Klaviyo * Lever * Linear * LinkedIn * Mailchimp * Marketo * Microsoft Outlook * Microsoft Teams * Monday.com * NetSuite * Notion * OneDrive * Oracle Eloqua * Outreach * PandaDoc * Pardot * Pipedrive * Productboard * QuickBooks * Sage Intacct * Salesforce * SAP S/4HANA * ServiceNow * SharePoint * Shopify * Slack * Stripe * Trello * Xero * Zendesk * Zoom # Get Example Payload Source: https://docs.useparagon.com/actionkit/triggers/api-reference/get-example-payload actionkit/triggers/openapi.json POST /projects/{project_id}/triggers/examples Get example records for a trigger configuration. # List Available Triggers Source: https://docs.useparagon.com/actionkit/triggers/api-reference/list-available-triggers actionkit/triggers/openapi.json GET /projects/{project_id}/triggers List all triggers that you can subscribe to on behalf of your user. # List Subscribed Triggers Source: https://docs.useparagon.com/actionkit/triggers/api-reference/list-subscribed-triggers actionkit/triggers/openapi.json GET /projects/{project_id}/trigger-subscriptions List all triggers that a user is currently subscribed to. # Subscribe to a Trigger Source: https://docs.useparagon.com/actionkit/triggers/api-reference/subscribe-to-trigger actionkit/triggers/openapi.json POST /projects/{project_id}/trigger-subscriptions Subscribe to a trigger on behalf of your user. # Unsubscribe from a Trigger Source: https://docs.useparagon.com/actionkit/triggers/api-reference/unsubscribe-from-trigger actionkit/triggers/openapi.json DELETE /projects/{project_id}/trigger-subscriptions/{subscription_id} Unsubscribe from a trigger on behalf of your user. # Update Subscription Source: https://docs.useparagon.com/actionkit/triggers/api-reference/update-trigger-subscription actionkit/triggers/openapi.json PATCH /projects/{project_id}/trigger-subscriptions/{subscription_id} Update a trigger subscription's configuration on behalf of your user. # Triggers API Source: https://docs.useparagon.com/actionkit/triggers/overview Subscribe to events from your users' integrations, using our catalog of pre-built triggers or Custom Webhooks. ActionKit **Triggers API** provides our complete library of pre-built triggers in simple endpoints to discover, configure, and subscribe to events on behalf of your users. You can use the Triggers API to: * Add triggers to your workflow builder product from our catalog of 130+ integrations * Kick off your AI agents / agentic workflows from events occurring in your users' connected integrations * Subscribe your webhook to integration events on behalf of your users (for example, Slack: Message Received or Google Calendar: New Event) ## Getting Started To get started with the Triggers API, you will need a Connected User with at least 1 account connected in a supported integration. You can then continue to start by configuring a webhook URL (below). In the Paragon dashboard, open **Settings** and add your Webhook URL under the **ActionKit** tab. This URL will receive events on behalf of all of your users. You can also save your generated Signing Secret to verify that incoming payloads to this webhook are coming from Paragon. Go to the Connected Users page and select the user you connected an integration with. In the Triggers section, turn on any kind of trigger that you want to listen for. You will see a code example for the equivalent API call you can use to subscribe a user to this trigger. Trigger the event type you activated in the account you connected for your user. You can see the result delivered to your webhook (within a few seconds) or in [ActionKit Logs](/actionkit/actionkit-logs). ## API Usage **Base URL** ``` https://actionkit.useparagon.com/projects/[Project ID] ``` ``` https://worker-actionkit.[On-Prem Base URL]/projects/[Project ID] ``` **Authentication** To authenticate to Triggers API, present a Bearer token with the Paragon User Token (a JWT): ```js theme={null} Authorization: Bearer [Paragon User Token] ``` This is the same token that you used to call `paragon.authenticate` with the Paragon SDK. See examples in [Installing the SDK](/getting-started/installing-the-connect-sdk). [Multi Account Authorization](/apis/api-reference/multi-account-authorization#getting-started) is a set of SDK options that enables you to connect multiple accounts of the same integration type for a [Connected User](/billing/connected-users). You can use Multi-Account Authorization with Triggers API by specifying a credential with a header of `X-Paragon-Credential`. ```http REST API theme={null} POST https://actionkit.useparagon.com/projects//triggers Authorization: Bearer X-Paragon-Credential: ``` # Receiving Webhooks Source: https://docs.useparagon.com/actionkit/triggers/receiving-webhooks Learn how to receive, validate, and process webhook events for your users' trigger subscriptions. ## Webhook URLs By default, trigger subscriptions will send events to the URL that you have configured via the dashboard for the associated project. You can set or change your project's Webhook URL by going to the **Settings** > **ActionKit** page of your dashboard: You can also override the URL for a specific trigger subscription by passing a `webhookOverride` property to the API when you subscribe: ```http highlight={10-14} theme={null} POST /projects/{project_id}/trigger-subscriptions Authorization: Bearer [Paragon User Token] { "type": "SALESFORCE_TRIGGER_RECORD_CREATED", "parameters": { "recordType": "Opportunity" }, "webhookOverride": { "url": "https://example.com", "headers": {}, "metadata": {}, } } ``` ## Signing secret Your signing secret is automatically generated when you first save your webhook configuration. You can find it in the **ActionKit** section of your project settings under **Signing Secret**. To view your signing secret: 1. Navigate to **Settings** > **ActionKit** in your Paragon dashboard. 2. Click **Reveal** next to the **Signing Secret** row. 3. Copy the secret for use in your webhook verification logic. Keep your signing secret private. Do not expose it in client-side code or public repositories. ## Webhook Payloads Every webhook payload has a few standard properties, including a HMAC-SHA256 signature that can be used to validate the trigger payload. The trigger event data will be available in the `payload` key. ```http Example theme={null} x-paragon-signature: v1=[signature] { "eventId": "[uuid]", "userId": "12345", "integration": "salesforce", "triggerType": "SALESFORCE_TRIGGER_RECORD_CREATED", "triggerSubscriptionId": "[uuid]", "credentialId": "[uuid]", "projectId": "[uuid]", "dateReceived": "2025-10-14T00:00:00Z", "payload": {...}, "triggerSubscriptionMetadata": {...} } ``` **Headers:** HMAC-SHA256 signature of the webhook JSON body, preceded by the versioning prefix `v1=`. Use this to validate the authenticity of this event as delivered by Paragon, with the project-specific webhook secret found in your project settings. **Body:** A unique ID for this event. Use this ID for event deduplication in case Paragon sends multiple requests to your webhook for the same event. The ID for the Connected User that this trigger fired for. This is the same ID that is passed to the `sub` claim of the Paragon User Token (JWT). The name of the integration that this trigger fired for. **Example:** `salesforce` The `type` of trigger that fired. **Example:** `SALESFORCE_TRIGGER_RECORD_CREATED` The event payload as received from the trigger. The schema of this object will vary depending on the trigger type. You can get example objects to use as the schema for this trigger with [Get Example Payloads](/actionkit/triggers/api-reference/get-example-payload). The UUID of the trigger subscription that fired. The UUID of the user's credential that triggered this event. The UUID of the Paragon project. An ISO datetime string of the original date that this event was received. You can use this to sequence events if necessary. If this trigger subscription was created with `metadata` passed in `webhookOverride`, then the metadata will be passed in this field of the incoming webhook body. ## Verifying webhook signatures Use the `x-paragon-signature` header to confirm that the payload was sent by Paragon and has not been tampered with. ### Verification steps Read the `x-paragon-signature` header from the incoming request and remove the `v1=` prefix. Create an HMAC-SHA256 hash of the raw JSON request body using your signing secret, then hex-encode the result. Use a timing-safe comparison to check whether the computed signature matches the signature from the header. ### Example: Node.js ```javascript theme={null} const crypto = require('crypto'); function verifyWebhookSignature(rawBody, signatureHeader, signingSecret) { const signature = signatureHeader.replace(/^v1=/, ''); const expectedSignature = crypto .createHmac('sha256', signingSecret) .update(rawBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature, 'hex'), Buffer.from(expectedSignature, 'hex'), ); } ``` ### Example: Python ```python theme={null} import hmac import hashlib def verify_webhook_signature(payload: bytes, signature_header: str, signing_secret: str) -> bool: signature = signature_header.removeprefix('v1=') expected = hmac.new( signing_secret.encode('utf-8'), payload, hashlib.sha256, ).hexdigest() return hmac.compare_digest(expected, signature) ``` # User Configuration Source: https://docs.useparagon.com/actionkit/triggers/user-configuration Allow users to configure their trigger parameters in your application UI. If your in-product workflow builder or UI will allow users to configure their own triggers, use the JavaScript SDK or Triggers API to collect user input for trigger parameters such as a Salesforce Record Type or event filter conditions. ## Trigger Parameters The SDK provides all available Trigger Parameters when you call `paragon.getTriggers`. You can also fetch the same schema directly from [List Available Triggers](/actionkit/triggers/api-reference/list-available-triggers). Each trigger has a `parameters` field that will provide a list of Paragon-formatted [Input Types](/actionkit/schema-formats#overview) that can be rendered and exposed to your users. ```js JavaScript SDK theme={null} const response = await paragon.getTriggers("salesforce", { // Optional: pass when Multi-Account Authorization. selectedCredentialId: "", }); const triggerDefinitions = response.triggers.salesforce; ``` ```http REST API theme={null} GET https://actionkit.useparagon.com/projects//triggers?integrations=salesforce Authorization: Bearer // Optional: pass when using Multi-Account Authorization X-Paragon-Credential: ``` ```json Response: Trigger definitions highlight={9-21} expandable theme={null} { "triggers": { "salesforce": [ { "type": "SALESFORCE_TRIGGER_RECORD_CREATED", "triggerModel": "POLLING", "title": "New Record", "description": "Trigger when a new record is created in Salesforce", "parameters": [ { "id": "recordType", "type": "ENUM", "title": "Record type", "required": true, "valuesSource": { "sourceType": "recordTypes", "dependencies": [] } } ] } ] } } ``` The `id` property of each input should be used as the key names of `parameters` when calling [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger). The values should be the input collected from your user. ## Displaying Inputs Render each trigger parameter based on its `type`, and use `paragon.getSourcesForActionInput` to determine whether the input needs static or dynamic options. ```js JavaScript SDK expandable theme={null} const inputSources = paragon.getSourcesForActionInput(input); switch (inputSources.source.type) { // Static dropdowns case "STATIC_ENUM": renderSelectInput({ input, value, options: inputSources.source.values, onChange, }); break; // Dynamic dropdowns case "DYNAMIC_DATA_SOURCE": const options = await paragon.getFieldOptions({ integration, action: inputSources.source.cacheKey, parameters: inputSources.source.dependencies.map((key) => ({ key, source: { type: "VALUE", value: triggerForm.parameters[key] }, })), }); renderSelectInput({ input, value, options, onChange }); break; default: renderPlainInput({ input, value, onChange }); break; } ``` For plain inputs, render directly from `input.type`. For example, `TEXT`, `CODE`, `PASSWORD`, and `NUMBER` can be rendered as text inputs; `TEXTAREA` can be rendered as a textarea; `BOOLEAN_INPUT` and `SWITCH` can be rendered as toggles. ### Dropdown inputs For static dropdowns, `paragon.getSourcesForActionInput` returns a `STATIC_ENUM` source. Render these values directly in your dropdown. Some inputs require loading dynamic data from the user's connected account. For example, the **Salesforce: New Record** trigger requires an **Object** selection to be made by your user: Dropdown menu of Salesforce record type options For dynamic dropdowns, `paragon.getSourcesForActionInput` returns a `DYNAMIC_DATA_SOURCE` source. Pass the source to `paragon.getFieldOptions`, along with any dependency values required by `source.refreshDependencies`. ```js JavaScript SDK expandable theme={null} async function loadDynamicOptions({ integration, source, parameterValues, search, selectedCredentialId, }) { const dependencyKeys = (source.refreshDependencies ?? []).filter( (key) => typeof key === "string" ); const dependencies = dependencyKeys.map((key) => ({ cacheKey: key, value: parameterValues[key], })); const hasDependencies = dependencyKeys.length > 0; const dependenciesSatisfied = dependencies.every((item) => Boolean(item.value)); if (hasDependencies && !dependenciesSatisfied) { return []; } const response = await paragon.getFieldOptions({ integration, source, search, selectedCredentialId, parameters: dependencies.map((dependency) => ({ key: dependency.cacheKey, source: { type: "VALUE", value: dependency.value, }, })), }); return response.data; } ``` ### Conditional inputs For `CONDITIONAL` inputs, render a filter builder UI, such as the below: Filter builder UI The value should be an object with `operator` (`OR` or `AND`) and `conditions` properties; each condition contains the selected `field`, `operator`, and `value`. ```js JavaScript SDK theme={null} const filterValue = { operator: "OR", conditions: [ { field: "Name", operator: "$stringContains", value: "Test", }, { field: "Amount", operator: "$numberGreaterThan", value: "5000", }, ], }; ``` For complex conditional inputs, you can use DNF (Disjunctive Normal Form) to represent the filter value. This expression represents: Opportunity Amount > 5000 OR (Contact.Title contains "CEO" AND Amount > 1000) ```json theme={null} { "operator": "OR", "conditions": [ { "operator": "AND", "conditions": [ { "field": "Amount", "operator": "$numberGreaterThan", "value": "5000", }, ], }, { "operator": "AND", "conditions": [ { "field": "Contact.Title", "operator": "$stringContains", "value": "CEO", }, { "field": "Amount", "operator": "$numberGreaterThan", "value": "1000", }, ], }, ], } ``` Conditional inputs can provide static `supportedKeys` or a dynamic `supportedKeysSource` for listing out available options for `field`. When the keys are dynamic, load them the same way you load dynamic dropdown options. Use `supportedOperators` to limit the operators available in your UI, and respect `disableOrCondition` if your filter builder supports OR groups. ```js JavaScript SDK expandable theme={null} async function getConditionalFields({ integration, input, parameterValues }) { if (input.supportedKeys?.length) { return input.supportedKeys.map((key) => ({ label: key, value: key })); } if (!input.supportedKeysSource) { return []; } const response = await paragon.getFieldOptions({ integration, action: input.supportedKeysSource.sourceType, parameters: input.supportedKeysSource.dependencies.map((key) => ({ key, source: { type: "VALUE", value: parameterValues[key], }, })), }); return flattenOptions(response.data); } ``` Once your user has configured the trigger, send the collected parameter values to [Subscribe to a Trigger](/actionkit/triggers/api-reference/subscribe-to-trigger). ```json Subscribe to a Trigger request body highlight={5-19} theme={null} { "integration": "salesforce", "triggerType": "SALESFORCE_TRIGGER_RECORD_CREATED", "parameters": { "objectName": "Opportunity", "recordsFilterFormula": { operator: "OR", conditions: [ { field: "Name", operator: "$stringContains", value: "Test", }, { field: "Amount", operator: "$numberGreaterThan", value: "5000", }, ] } } } ``` See the resources below for implementation details: Learn more about each Input Type and their UI requirements. Learn more about loading dynamic data from your user's account with the SDK. # SDK / API Reference Source: https://docs.useparagon.com/apis/api-reference Below are all the public functions exposed on the Paragon SDK, which can be accessed as the named `paragon` export from `@useparagon/connect`, and the public endpoints of the Paragon REST API. Install Paragon's JavaScript SDK with: ```bash npm theme={null} npm install @useparagon/connect ``` ```bash yarn theme={null} yarn add @useparagon/connect ``` ```bash pnpm theme={null} pnpm add @useparagon/connect ``` ```bash bun theme={null} bun add @useparagon/connect ``` The SDK can be imported in your client-side JavaScript files as a module: ```javascript icon="js" JavaScript theme={null} import { paragon } from '@useparagon/connect'; ``` If you are using an [on-premise](/on-premise/hosting-paragon-on-premise) instance of Paragon, you can call the `paragon.configureGlobal` function to point the SDK to use the base hostname of your Paragon instance. ```javascript icon="js" JavaScript theme={null} import { paragon } from "@useparagon/connect"; // If your login URL is https://dashboard.mycompany.paragon.so: paragon.configureGlobal({ host: "mycompany.paragon.so", }); ``` ## SDK Methods ### .authenticate `paragon.authenticate` should be called at the beginning of your application's lifecycle in all cases. This is to make sure that the `userToken` is always as fresh as possible, with respect to your user's existing session on your own site. ```javascript icon="js" JavaScript theme={null} await paragon.authenticate(PROJECT_ID, USER_TOKEN); ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token Once `paragon.authenticate` has been called, you can access the user's integration state with `paragon.getUser`. `paragon.authenticate` only needs to be called when using the Paragon SDK - when making requests to the Paragon REST API, you should instead provide the Paragon User Token in the Authorization header. *** ### .connect Call `paragon.connect` to launch your Connect Portal for a specific integration provider. You can find the `integrationType` identifier you need in the Overview page for the integration. ```javascript icon="js" JavaScript theme={null} paragon.connect(integrationType, installOptions); ``` **Arguments:** Type of integration (i.e. "salesforce", "hubspot", "googledrive") Callback invoked when an integration is successfully enabled. Callback if an unexpected error occurs. For integrations that support multiple account types, you can optionally designate a specific `accountType` to skip the account selection dialog. Example values: `default`, `sandbox` ```javascript icon="js" Example of using accountType theme={null} paragon.connect("salesforce", { // Only allow production-type Salesforce accounts to connect accountType: "default", }); ``` For [Field Mapping](/connect-portal/field-mapping) inputs that use Dynamic Application Fields. Keys must match the Application Object Name from the dashboard; values describe application fields and/or loaders for integration object types and fields. See [Passing dynamic fields through the SDK](/connect-portal/field-mapping#passing-dynamic-fields-through-the-sdk). Pass this option to associate a new credential with an identifier from your own system. The `externalId` will be available on the credential object returned by [`paragon.getUser`](/apis/api-reference#getuser). This option cannot be used with `selectedCredentialId`, which is used to replace or manage existing connected accounts. Existing credentials currently cannot be updated with an external ID. Used for [Multi-Account Authorization](/apis/api-reference/multi-account-authorization). Pass this option to open the Connect Portal for an existing credential ID and update/manage settings (headful) or to start an install flow to replace an existing credential ID with a new account (with the [Headless Connect Portal](/connect-portal/headless-connect-portal)). Used for [Multi-Configuration](/apis/api-reference/multi-configuration). Pass this option to open the Connect Portal for a specific configuration (unique set of User Settings and Workflow Enablements for a connected credential). This function must be called after the Paragon SDK has completed authentication. You can `await` the Promise returned by [`paragon.authenticate`](#authenticate) to show a loading state before users are able to access the Connect Portal. You *must* have an integration configured of this `integrationType` in your Paragon project for the Connect Portal to appear. Otherwise, this function does nothing. If your integration uses a [Field Mapping](/connect-portal/field-mapping) User Setting, pass the mapping configuration through `installOptions`. For examples, see [Passing dynamic fields through the SDK](/connect-portal/field-mapping#passing-dynamic-fields-through-the-sdk). You can also connect multiple accounts for the same integration. *** ### .subscribe Call `paragon.subscribe` to subscribe to different events and changes from the Paragon SDK. You can find the possible `eventNames` below: | Event Type | Usage in `paragon.subscribe` | Usage in `paragon.connect` | | ------------------------- | ---------------------------- | -------------------------- | | **Integration enabled** | `"onIntegrationInstall"` | `"onInstall"` | | **Integration disabled** | `"onIntegrationUninstall"` | `"onUninstall"` | | **Workflow state change** | `"onWorkflowChange"` | `"onWorkflowChange"` | | **Connect Portal opened** | `"onPortalOpen"` | `"onOpen"` | | **Connect Portal closed** | `"onPortalClose"` | `"onClose"` | Subscribing to SDK Events applies to all integrations *globally*. Specifying callbacks to `paragon.connect` only applies to a currently open Connect Portal *locally*. ```javascript icon="js" JavaScript theme={null} paragon.subscribe(eventType, callback); ``` Event type (i.e. "onIntegrationInstall", "onPortalOpen") as seen in the table above callback function that triggers on event **Examples:** ```typescript Integration Enabled / Disabled theme={null} type IntegrationInstallEvent = { integrationId: string; integrationType: VisibleConnectAction; credential: Credential; credentialId: string; }; // Using global subscribe paragon.subscribe( "onIntegrationInstall", (event: IntegrationInstallEvent, user: AuthenticatedConnectUser) => { /* ... */ } ); ``` ```typescript Workflow State Changed theme={null} type WorkflowStateChangeEvent = { integrationId: string; workflowId: string; }; // Using global subscribe paragon.subscribe( "onWorkflowChange", (event: WorkflowStateChangeEvent, user: AuthenticatedConnectUser) => { /* ... */ } ); ``` ```typescript Connect Portal Opened / Closed theme={null} type PortalOpenEvent = { integrationId: string; integrationType: VisibleConnectAction; }; type PortalCloseEvent = { integrationId: string; integrationType: VisibleConnectAction; }; // Using global subscribe paragon.subscribe( "onPortalOpen", (event: PortalOpenEvent, user: AuthenticatedConnectUser) => { /* ... */ } ); paragon.subscribe( "onPortalClose", (event: PortalCloseEvent, user: AuthenticatedConnectUser) => { /* ... */ } ); ``` Alternatively, you can subscribe `onOpen`, `onClose`, `onUninstall` , and `onWorkflowChange` as a one-time event locally. ```typescript Integration Enabled / Disabled theme={null} type IntegrationInstallEvent = { integrationId: string; integrationType: VisibleConnectAction; credential: Credential; credentialId: string; }; // Using local call to paragon.connect paragon.connect("", { onInstall: ( event: IntegrationInstallEvent, user: AuthenticatedConnectUser ) => { /* ... */ }, }); ``` ```typescript Workflow State Changed theme={null} type WorkflowStateChangeEvent = { integrationId: string; workflowId: string; }; // Using local call to paragon.connect paragon.connect("", { onWorkflowChange: ( event: WorkflowStateChangeEvent, user: AuthenticatedConnectUser ) => { /* ... */ }, }); ``` ```typescript Connect Portal Opened / Closed theme={null} type PortalOpenEvent = { integrationId: string; integrationType: VisibleConnectAction; }; type PortalCloseEvent = { integrationId: string; integrationType: VisibleConnectAction; }; // Using local call to paragon.connect paragon.connect("", { onOpen: (event: PortalOpenEvent, user: AuthenticatedConnectUser) => { /* ... */ }, onClose: (event: PortalCloseEvent, user: AuthenticatedConnectUser) => { /* ... */ }, }); ``` *** ### .installIntegration This function should be used only if you are using your [own components](/connect-portal/headless-connect-portal) to show connected integrations and their status, instead of the Connect Portal. Otherwise, you can use [the `paragon.connect` function](/apis/api-reference#connect). The `paragon.installIntegration` can be used to start the connection process for an integration *without* the Connect Portal appearing over your user interface. You can find the `integrationType` identifier you need in the Overview page for the integration. This function resolves with the `IntegrationInstallEvent` in the same format available in `paragon.subscribe`. You can use this to get the newly created credential by awaiting the returned Promise. This function rejects the returned Promise if the integration is already installed for the authenticated user. ```javascript icon="js" JavaScript theme={null} const { credential } = await paragon.installIntegration(integrationType, installOptions); ``` Type of integration (i.e. "salesforce", "hubspot", "googledrive") Callback invoked when an integration is successfully enabled. Callback if an unexpected error occurs. For integrations that support multiple account types, you can optionally designate a specific `accountType` to skip the account selection dialog. Example values: `default`, `sandbox` ```javascript icon="js" Example of using accountType theme={null} paragon.connect("salesforce", { // Only allow production-type Salesforce accounts to connect accountType: "default", }); ``` For [Field Mapping](/connect-portal/field-mapping) inputs that use Dynamic Application Fields. Keys must match the Application Object Name from the dashboard; values describe application fields and/or loaders for integration object types and fields. See [Passing dynamic fields through the SDK](/connect-portal/field-mapping#passing-dynamic-fields-through-the-sdk). Pass this option to associate a new credential with an identifier from your own system. The `externalId` will be available on the credential object returned by [`paragon.getUser`](/apis/api-reference#getuser). This option cannot be used with `selectedCredentialId`, which is used to replace or manage existing connected accounts. Existing credentials currently cannot be updated with an external ID. Used for [Multi-Account Authorization](/apis/api-reference/multi-account-authorization). Pass this option to open the Connect Portal for an existing credential ID and update/manage settings (headful) or to start an install flow to replace an existing credential ID with a new account (with the [Headless Connect Portal](/connect-portal/headless-connect-portal)). Used for [Multi-Configuration](/apis/api-reference/multi-configuration). Pass this option to open the Connect Portal for a specific configuration (unique set of User Settings and Workflow Enablements for a connected credential). **Note**: If the integration specified by `integrationType` requires API keys or post-authentication options, the Connect Portal will still appear to capture those values from your user at that time. The Connect Portal will automatically be dismissed after those values are entered. This function accepts the same optional install options as [`paragon.connect`](/apis/api-reference#connect). *** ### .uninstallIntegration Call `paragon.uninstallIntegration` to disconnect an integration for the authenticated user. When an integration is disconnected, workflows for that integration will stop running for the authenticated user and any saved User Settings will be cleared. ```typescript JavaScript SDK theme={null} await paragon.uninstallIntegration(integrationType); ``` **Arguments:** The short name for the integration (i.e. "salesforce", "hubspot"). Use the same name as used in `paragon.connect`. ```http icon="terminal" HTTP theme={null} GET https://api.useparagon.com/projects/PROJECT_ID/sdk/integrations Authorization: Bearer // Example Response // [ { "id": INTEGRATION_ID, "type": "salesforce"} ] DELETE https://api.useparagon.com/projects/PROJECT_ID/sdk/integrations/INTEGRATION_ID Authorization: Bearer PARAGON_USER_TOKEN ``` **Arguments:** You can find your project ID in the Overview tab of any Integration The ID of the integration to disconnect. Retrieve it from the `/sdk/integrations` endpoint. See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token *** ### .getIntegrationMetadata Call `paragon.getIntegrationMetadata` to get the `name`, `brandColor`, and `icon`, for any of your active integration providers. This is a great way to create your integrations page! ```javascript icon="js" JavaScript theme={null} paragon.getIntegrationMetadata(); ``` ```http icon="terminal" HTTP theme={null} GET https://api.useparagon.com/projects/PROJECT_ID/sdk/metadata Authorization: Bearer PARAGON_USER_TOKEN ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token **Returns:** The integration type identifier (e.g., `"salesforce"`, `"hubspot"`). The human-readable display name of the integration. The brand color hex value for the integration. The URL to the integration's icon image. **Example Response:** ```javascript icon="js" JavaScript expandable theme={null} [ { "type": "salesforce", "name": "Salesforce", "brandColor": "#057ACF", "icon": "https://cdn.useparagon.com/2.35.0/dashboard/public/integrations/salesforce.svg" }, { "type": "hubspot", "name": "Hubspot", "brandColor": "#F67600", "icon": "https://cdn.useparagon.com/2.35.0/dashboard/public/integrations/hubspot.svg" }, { "type": "slack", "name": "Slack", "brandColor": "#4A154B", "icon": "https://cdn.useparagon.com/2.35.0/dashboard/public/integrations/slack.svg" } ] ``` *** ### .getIntegrationConfig Call `paragon.getIntegrationConfig` to get the user-facing descriptions, User Settings, and Workflows associated with any integration. ```javascript icon="js" JavaScript theme={null} paragon.getIntegrationConfig(integrationType); ``` **Arguments:** An integration type string, like `salesforce` or `slack`. **Example Response:** ```javascript icon="js" JavaScript expandable theme={null} { "shortDescription": "Send notifications to Slack", "longDescription": "Connect your Slack workspace to receive notifications and alerts in Slack. Stay connected to important activity by bringing it all together in your Slack workspace.\n\nOur Slack integration enables you to:\n\n• Receive alerts and notifications in your Slack workspace\n• Notify or DM specific team members based on certain activity", "availableUserSettings": [ { "id": "2d5662c9-6750-46c2-8588-2ac904532efb", "type": "DYNAMIC_ENUM", "title": "Channel", "required": false, "sourceType": "channels" } ], "availableWorkflows": [ { "id": "2248335c-671c-47e4-b9a0-3641a9f2d301", "inputs": [], "infoText": "Send a Slack notification when a Task is created", "defaultEnabled": false, "description": "Send Slack Notification" } ], "hiddenWorkflows": [] } ``` ```http icon="terminal" HTTP theme={null} GET https://api.useparagon.com/projects/PROJECT_ID/sdk/integrations/INTEGRATION_TYPE Authorization: Bearer PARAGON_USER_TOKEN ``` **Arguments:** You can find your project ID in the Overview tab of any Integration An integration type string, like `salesforce` or `slack`. See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token **Example Response:** ```javascript icon="js" JavaScript expandable theme={null} [{ "id": "2f08e65f-d924-42ab-9618-b6023d82ffbd", "projectId": "908f4c5e-6394-46a5-9355-3f729edbd160", "customIntegrationId": null, "type": "slack", "isActive": true, "configs": [ { "id": "3ebcc179-a1a6-447f-8dc9-5017f40f08ef", "values": { "overview": "####Our Slack integration enables you to:\n \n\n• Receive alerts and notifications in your Slack workspace\n• Notify or DM specific team members based on certain activity", "sharedMeta": {}, "accentColor": "#4A154B", "description": "Send notifications to Slack", "workflowMeta": {} } }, ], "workflows": [ { "id": "1b22193b-e355-458d-b6a3-5e5516edb588", "description": "Send Updates to Slack", "projectId": "908f4c5e-6394-46a5-9355-3f729edbd160", "integrationId": "2f08e65f-d924-42ab-9618-b6023d82ffbd", "steps": [] } ], "customIntegration": null, "hasCredential": true, "connectedUserLimitOnDevCred": 0, "connectedUserLimitReached": true, "name": "Slack", "brandColor": "#4A154B", "needPreOauthInputs": false, "providerType": "slack", "authenticationType": "oauth" }] ``` *** ### .getUser Call `paragon.getUser` to retrieve the currently authenticated user and their connected integration state. ```javascript icon="js" JavaScript theme={null} paragon.getUser(); ``` ```http icon="terminal" HTTP theme={null} GET https://api.useparagon.com/projects/PROJECT_ID/sdk/me Authorization: Bearer PARAGON_USER_TOKEN ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token **Example Response:** ```javascript icon="js" JavaScript expandable theme={null} { authenticated: true, userId: "xyz", integrations: { salesforce: { configuredWorkflows: {}, credentialId: "987654-56a7-89b1-cd23-456789abcdef", credentialStatus: "VALID", enabled: true, providerData: { instanceURL: "https://mycompany.my.salesforce.com" }, providerId: "1234567890" }, shopify: { configuredWorkflows: {}, enabled: false } } } ``` If the user is not authenticated, you'll receive back only `{ authenticated: false }` instead. Please check the `authenticated` property before using the `user.integrations` field. *** ### .setUserMetadata Call `paragon.setUserMetadata` to associate the authenticated user with metadata from your application. This metadata can be accessed with `paragon.getUser` or retrieved over the API. ```typescript JavaScript SDK theme={null} paragon.setUserMetadata(metadata); ``` **Arguments:** Metadata object to associate with the authenticated user. ```http icon="terminal" HTTP theme={null} PATCH https://api.useparagon.com/projects/PROJECT_ID/sdk/me // Headers Authorization: PARAGON_USER_TOKEN Content-Type: application/json // Body { ...metadata } ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token Metadata object to associate with the authenticated user. **Examples:** ```typescript JavaScript SDK theme={null} paragon.setUserMetadata({ Name: "Sean V", Email: "sean@useparagon.com", apiKey: "key_Y0kBVldPFInxK", }); ``` **Request** ```http icon="terminal" HTTP theme={null} PATCH https://api.useparagon.com/projects//sdk/me // Headers Authorization: Content-Type: application/json // Body { "meta": { "Email": "sean@useparagon.com", "apiKey": "key_Y0kBVldPFInxK" } } ``` *** ### .updateIntegrationUserSettings Call `paragon.updateIntegrationUserSettings` to update any integration-level [User Settings](/connect-portal/workflow-user-settings) for your Connected User. ```javascript icon="js" JavaScript theme={null} paragon.updateIntegrationUserSettings(integrationType, userSettingsUpdate, options); ``` **Arguments:** An integration type string, like `salesforce`. A partial update object where the keys are the `id` properties of User Settings objects (which you can get from [`paragon.getIntegrationConfig`](#getintegrationconfig)) and the values are the user's selection for the matching input type. Any keys that are not included in the object will not be updated. The type for each value will depend on the input type. See [Input Types Reference](/connect-portal/input-types-reference) to see the value type for each input. ```json Example theme={null} { "1f7474a5-8b8e-4c25-8d44-29f20aec3fe4": "general" } ``` Optionally specify a Credential and Configuration to target, if using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) or [Multi-Configuration](/apis/api-reference/multi-configuration). The Credential ID (a UUID) of the connected account you want to update, if using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization). The Configuration ID (a UUID or an External ID prefixed with `ext:`), if using [Multi-Configuration](/apis/api-reference/multi-configuration). *** ### .getDataSourceOptions Call `paragon.getDataSourceOptions` to get configuration details for **compound** data sources used for dynamic [User Settings types](/connect-portal/headless-connect-portal#exposing-user-settings) in the Headless Connect Portal. Compound data sources, for Field Mapping and Combo Dropdown inputs, have multiple data sources within them (Field Mappings have both Object Types and Field Names as sources). To load options for a data source, see [`paragon.getFieldOptions`](#getfieldoptions). **SDK 2.3.0+:** Consider using [`paragon.getSourcesForInput`](#getsourcesforinput) instead, which provides a simpler way to get all data sources needed for any input type in a single call. ```javascript icon="js" JavaScript theme={null} await paragon.getDataSourceOptions(integrationType, sourceType); ``` **Arguments:** An integration type string, like `salesforce`. A source type string, which can be found in the `sourceType` property of a User Setting object from [`paragon.getIntegrationConfig`](#getintegrationconfig) or from `stage.options` of `PostOptionsStage`. **Examples:** ```javascript icon="js" JavaScript SDK (Field Mapping) expandable theme={null} await paragon.getDataSourceOptions( "salesforce", "customObjectMapping", ); // Returns: { "id": "customObjectMapping", "type": "FIELD_MAPPER_DATA_SOURCE", "title": "Field Mapping", "subtitle": "Allows users to define a field mapping", "recordSource": { "type": "DYNAMIC_DATA_SOURCE", "title": "Record Type", "cacheKey": "recordTypes", }, "fieldSource": { "type": "DYNAMIC_DATA_SOURCE", "title": "Field", "cacheKey": "cachedFields", }, } ``` ```javascript icon="js" JavaScript SDK (Combo Dropdown) expandable theme={null} await paragon.getDataSourceOptions( "jira", "projectIssueStatusTypeCombo", ); // Returns: { "id": "projectIssueStatusTypeCombo", "type": "COMBO_INPUT_DATA_SOURCE", "title": "Issue Status", "subtitle": "The stage the issue is at, e.g. To Do or Done", "mainInputSource": { "type": "DYNAMIC_DATA_SOURCE", "cacheKey": "projects", "title": "Project", "subtitle": "Jira project that issues can be created in", }, "dependentInputSource": { "type": "DYNAMIC_DATA_SOURCE", "cacheKey": "issueIssueStatusByProject", "title": "Issue Status", "subtitle": "The stage the issue is at, e.g. To Do or Done", } } ``` *** ### .getFieldOptions Load options from an integration data source for dynamic [User Settings types](/connect-portal/headless-connect-portal#exposing-user-settings) in the Headless Connect Portal, using the Connected User's account. **`paragon.getFieldOptions` can only be called for data sources with type `DYNAMIC_DATA_SOURCE`** (for dynamic enum input types). * Compound data sources like `FIELD_MAPPER_DATA_SOURCE` or `COMBO_INPUT_DATA_SOURCE` are composed of `DYNAMIC_DATA_SOURCE`-type sources. * When rendering Field Mapping or Combo Dropdown inputs, first identify each data source with [`paragon.getSourcesForInput`](#getsourcesforinput) (or [`paragon.getDataSourceOptions`](#getdatasourceoptions)), and use the returned data source configuration to call `paragon.getFieldOptions`. [See a full example.](/connect-portal/headless-connect-portal#exposing-user-settings) This function supports search and pagination; see the parameters for `fieldOptions` below to learn more. ```javascript icon="js" JavaScript SDK (Field Mapping) theme={null} await paragon.getFieldOptions(fieldOptions); ``` **Arguments:** An integration type string, like `salesforce`. A source type string, which can be found in the `sourceType` property of a User Setting object from [`paragon.getIntegrationConfig`](#getintegrationconfig) or from `stage.options` of `PostOptionsStage`. Either `action` or `source` must be provided. A `DynamicDataSource` object, as returned by [`paragon.getSourcesForInput`](#getsourcesforinput). When provided, the `cacheKey` of the source is used to identify the data source to load options from. Either `action` or `source` must be provided. A user-provided search query for an option. When provided, the data source will return options that match this query. A page cursor to use to load subsequent pages of results. The response of `paragon.getFieldOptions` will provide `nextPageCursor` to use or `null` if there are no more results. When loading options for a compound data source (e.g. `fieldSource` of a Field Mapping input or `dependentInputSource` of a Combo Dropdown input), pass parameters with the user's selection from the first input (e.g. the Record Type for Field Mapping). The `cacheKey` property of the primary/first input in the compound data sources (e.g. `recordSource` of a Field Mapping input or `mainInputSource` of a Combo Dropdown input). Set this to `"VALUE"`. Set this to the `value` property of the user's selection. If you are using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) and there may be more than one account connected for a given integration, pass `selectedCredentialId` to load options for the current account. ```http icon="terminal" HTTP theme={null} POST https://api.useparagon.com/projects/PROJECT_ID/sdk/actions Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json { ...fieldOptions } ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token An integration type string, like `salesforce`. A source type string, which can be found in the `sourceType` property of a User Setting object from [`paragon.getIntegrationConfig`](#getintegrationconfig) or from `stage.options` of `PostOptionsStage`. Either `action` or `source` must be provided. A `DynamicDataSource` object, as returned by [`paragon.getSourcesForInput`](#getsourcesforinput). When provided, the `cacheKey` of the source is used to identify the data source to load options from. Either `action` or `source` must be provided. A user-provided search query for an option. When provided, the data source will return options that match this query. A page cursor to use to load subsequent pages of results. The response of `paragon.getFieldOptions` will provide `nextPageCursor` to use or `null` if there are no more results. When loading options for a compound data source (e.g. `fieldSource` of a Field Mapping input or `dependentInputSource` of a Combo Dropdown input), pass parameters with the user's selection from the first input (e.g. the Record Type for Field Mapping). The `cacheKey` property of the primary/first input in the compound data sources (e.g. `recordSource` of a Field Mapping input or `mainInputSource` of a Combo Dropdown input). Set this to `"VALUE"`. Set this to the `value` property of the user's selection. If you are using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) and there may be more than one account connected for a given integration, pass `selectedCredentialId` to load options for the current account. **Returns:** `data` will be an Array of either `Option` or `Section` objects, which should be handled by your Dropdown input. The human-readable display name to use for this option when displaying it to your user. The unique value of this option to save with `paragon.setPreOptions`, `paragon.setPostOptions`, `paragon.updateIntegrationUserSettings`, or `paragon.updateWorkflowUserSettings`. This value can also be passed as `parameters[].source.value` for dependent inputs of compound data sources. The title of this section of options. The list of options that should be contained in this section. This section is an empty array for all input types except for **Default value mapping**, which is only supported by Jira: Issue Field Values. The cursor value to pass as `cursor` for the next page of results. **Examples:** ```javascript icon="js" JavaScript SDK expandable theme={null} await paragon.getFieldOptions({ integration: "slack", action: "channels", search: "general", }); // Returns: { "data": [ { "label": "#general", "value": "general" }, ], "nestedData": [], "nextPageCursor": "dGVhbTpDMDUxWjlNSzk4Vw==" } ``` ```javascript icon="js" JavaScript SDK (Field Mapping) expandable theme={null} // Load Record Types: await paragon.getFieldOptions({ integration: "salesforce", action: "recordTypes", // from `recordSource.cacheKey` of data source options }); // Load Fields: await paragon.getFieldOptions({ integration: "salesforce", action: "cachedFields", // from `fieldSource.cacheKey` of data source options parameters: [{ "key": "recordTypes", "source": { "type": "VALUE", "value": "Task" // The `value` property of the user's input } }], }); ``` REST API ```http icon="terminal" HTTP theme={null} POST https://api.useparagon.com/projects//sdk/actions Authorization: Bearer Content-Type: application/json { "action": "salesforce", "sourceKey": "cachedFields", "parameters": [{ "key": "recordTypes", "source": { "type": "VALUE", "value": "Task" } }], "paginationParameters": { "pageCursor": 0, "search": "" } } ``` *** ### .getSourcesForInput Call `paragon.getSourcesForInput` to get all the data sources needed to render a dynamic input (e.g. a picklist loaded from integration data from the user's connected account). The returned data sources can be passed directly to [`paragon.getFieldOptions`](#getfieldoptions) using the `source` parameter to load options for your input, with pagination and search. ```javascript icon="js" JavaScript theme={null} const config = paragon.getIntegrationConfig(integrationType, input); ``` **Arguments:** An integration type string, like `salesforce`. The input object from `availableUserSettings`, `availableWorkflows[n].inputs`, or `stage.options` of an install flow stage. **Returns:** Returns `null` for inputs that don't require a data source (e.g. text inputs). Otherwise, returns one of the following based on the [Input Type](/connect-portal/input-types-reference) of the input: Returned for [`DynamicEnum`](/connect-portal/input-types-reference) and [`CustomDropdown`](/connect-portal/input-types-reference) input types. `"single"` for SingleSource. The data source for the input. Pass this to [`paragon.getFieldOptions`](#getfieldoptions) using the `source` parameter to load options. **Example:** ```javascript icon="js" DynamicEnum input expandable theme={null} const config = paragon.getIntegrationConfig("slack"); const input = config.availableUserSettings[0]; // { id: "...", type: "DYNAMIC_ENUM", title: "Channel", sourceType: "channels" } const sources = paragon.getSourcesForInput("slack", input); // { kind: "single", source: { type: "DYNAMIC_DATA_SOURCE", cacheKey: "channels", ... } } if (sources?.kind === "single") { const options = await paragon.getFieldOptions({ integration: "slack", source: sources.source, }); // { data: [{ label: "#general", value: "general" }, ...], nextPageCursor: "..." } } ``` Returned for [`FieldMapper`](/connect-portal/input-types-reference) input types. `"fieldMapper"` for FieldMapperSources. The data source for loading record types. Pass to [`paragon.getFieldOptions`](#getfieldoptions) to load record type options. The data source for loading fields. Pass to [`paragon.getFieldOptions`](#getfieldoptions) with `parameters` for the selected record type to load available fields. An optional data source for a dependent input within the field mapping. Pre-configured field mapping options, if provided via [`paragon.setDataSources`](#setdatasources). **Example:** ```javascript icon="js" FieldMapper input expandable theme={null} const config = paragon.getIntegrationConfig("salesforce"); const input = config.availableUserSettings[0]; // { id: "...", type: "FIELD_MAPPER", title: "Map fields", sourceType: "customObjectMapping" } const sources = paragon.getSourcesForInput("salesforce", input); // { kind: "fieldMapper", recordSource: {...}, fieldSource: {...} } if (sources?.kind === "fieldMapper") { // Load record types const recordTypes = await paragon.getFieldOptions({ integration: "salesforce", source: sources.recordSource, }); // Load fields for a selected record type const fields = await paragon.getFieldOptions({ integration: "salesforce", source: sources.fieldSource, parameters: [{ key: sources.recordSource.cacheKey, source: { type: "VALUE", value: "Task" }, }], }); } ``` Returned for [`ComboInput`](/connect-portal/input-types-reference) input types (e.g. Combo Dropdown). `"combo"` for ComboSources. The data source for the primary input. Pass to [`paragon.getFieldOptions`](#getfieldoptions) to load main options. The data source for the dependent input. Pass to [`paragon.getFieldOptions`](#getfieldoptions) with `parameters` for the user's main selection. **Example:** ```javascript icon="js" ComboInput expandable theme={null} const config = paragon.getIntegrationConfig("jira"); const input = config.availableUserSettings[0]; // { id: "...", type: "COMBO_INPUT", sourceType: "projectIssueStatusTypeCombo" } const sources = paragon.getSourcesForInput("jira", input); // { kind: "combo", mainInputSource: {...}, dependentInputSource: {...} } if (sources?.kind === "combo") { // Load main options (e.g. Projects) const projects = await paragon.getFieldOptions({ integration: "jira", source: sources.mainInputSource, }); // Load dependent options (e.g. Issue Statuses for a selected Project) const statuses = await paragon.getFieldOptions({ integration: "jira", source: sources.dependentInputSource, parameters: [{ key: sources.mainInputSource.cacheKey, source: { type: "VALUE", value: "PROJECT-1" }, }], }); } ``` Returned for [`DynamicComboInput`](/connect-portal/input-types-reference) input types. `"defaultFieldValue"` for DefaultFieldValueSources. The data source for the primary input. Pass to [`paragon.getFieldOptions`](#getfieldoptions) to load main options. The data source for the dependent input. Pass to [`paragon.getFieldOptions`](#getfieldoptions) with `parameters` for the user's main selection. An optional data source for a variable input. **Example:** ```javascript icon="js" DynamicComboInput expandable theme={null} const config = paragon.getIntegrationConfig("salesforce"); const input = config.availableUserSettings[0]; // { id: "...", type: "DYNAMIC_COMBO_INPUT", sourceType: "dynamicComboAction" } const sources = paragon.getSourcesForInput("salesforce", input); // { kind: "defaultFieldValue", mainInputSource: {...}, dependentInputSource: {...}, variableInputSource: {...} } if (sources?.kind === "defaultFieldValue") { const mainOptions = await paragon.getFieldOptions({ integration: "salesforce", source: sources.mainInputSource, }); const dependentOptions = await paragon.getFieldOptions({ integration: "salesforce", source: sources.dependentInputSource, parameters: [{ key: sources.mainInputSource.cacheKey, source: { type: "VALUE", value: mainOptions.data[0].value }, }], }); } ``` *** ### .setDataSources Call `paragon.setDataSources` to register custom data sources for dropdown and field mapping inputs when using the [Headless Connect Portal](/connect-portal/headless-connect-portal). This can be used in place of passing `dropdowns` and `mapObjectFields` inline with `paragon.connect`, for Headless Connect Portal implementations. Data sources can be registered globally (applied to all integrations) or for specific integrations. When an integration-specific source exists, it takes priority over a global source with the same key. This function should be called once after [`paragon.setHeadless`](#setheadless) and before rendering any inputs. ```javascript icon="js" JavaScript theme={null} paragon.setDataSources(config); ``` **Arguments:** Global custom dropdown data sources, keyed by the dropdown `key` identifier. Values can be either a static array of `CustomDropdownField[]` options (objects with `label` and `value` strings), or a `CustomDropdownOptions` object for dynamic loading: ```javascript icon="js" Static dropdown options theme={null} paragon.setDataSources({ dropdowns: { my_custom_dropdown: [ { label: "Option A", value: "a" }, { label: "Option B", value: "b" }, ], }, }); ``` A function that returns dropdown options with support for pagination and search. Called by the SDK when options need to be loaded or refreshed. If `true`, the dropdown options will be reloaded every time the dropdown is opened. Useful for dependent dropdowns where options depend on other input values. Defaults to `false`. ```javascript icon="js" Dynamic dropdown with loader expandable theme={null} paragon.setDataSources({ dropdowns: { my_dynamic_dropdown: { loadOptions: async (cursor, search) => { const response = await fetch(`/api/options?cursor=${cursor}&search=${search}`); const data = await response.json(); return { options: data.items, nextPageCursor: data.nextCursor, }; }, }, }, }); ``` Global field mapping data sources, keyed by field mapping name. Values can be one of the following: **Option 1: `DynamicMappingField[]`** - Static array of mapping options. The display label for the field. The value identifier for the field. **Option 2: `DynamicMappingOptions`** — Configurable mapping behavior with static fields. The list of available fields (objects with `label` and `value` strings). Field values that should be selected by default. Whether users can remove field mappings. Whether users can create new fields. **Option 3: `DynamicFieldMappingConfig`** — Fully dynamic field mapping with loader functions for fetching object types and fields at runtime. A loader function to fetch available object types with pagination and search support. A loader function to fetch available fields for a given object type with pagination and search support. Optional configuration for application-side fields. The list of application fields available for mapping. Field values that should be selected by default. Whether users can remove field mappings. Whether users can create new fields. ```javascript icon="js" Field mapping with BYO loaders expandable theme={null} paragon.setDataSources({ mapObjectFields: { myFieldMapping: { objectTypes: { get: async (cursor, search) => { const response = await fetch(`/api/object-types?cursor=${cursor}&search=${search}`); const data = await response.json(); return { options: data.items, nextPageCursor: data.nextCursor }; }, }, integrationFields: { get: async ({ objectType }, cursor, search) => { const response = await fetch( `/api/fields?objectType=${objectType}&cursor=${cursor}&search=${search}` ); const data = await response.json(); return { options: data.items, nextPageCursor: data.nextCursor }; }, }, applicationFields: { fields: [ { label: "Name", value: "name" }, { label: "Email", value: "email" }, ], }, }, }, }); ``` Integration-specific data sources that take priority over global sources. Keyed by integration type (e.g. `"salesforce"`), with the same `dropdowns` and `mapObjectFields` structure. ```javascript icon="js" Integration-specific sources expandable theme={null} paragon.setDataSources({ dropdowns: { departments: [ { label: "Engineering", value: "eng" }, { label: "Sales", value: "sales" }, ], }, integrationSpecificSources: { salesforce: { dropdowns: { departments: [ { label: "Engineering", value: "engineering" }, { label: "Sales", value: "sales-dept" }, { label: "Marketing", value: "marketing" }, ], }, }, }, }); ``` *** ### .enableWorkflow Call `paragon.enableWorkflow` to turn on a workflow for a user by ID. ```javascript icon="js" JavaScript theme={null} paragon.enableWorkflow(workflowId); ``` **Arguments:** Workflow ID ```http icon="terminal" HTTP theme={null} POST https://api.useparagon.com/projects/PROJECT_ID/sdk/workflows/WORKFLOW_ID Authorization: Bearer PARAGON_USER_TOKEN ``` **Arguments:** You can find your project ID in the Overview tab of any Integration Workflow ID See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token *** ### .disableWorkflow Call `paragon.disableWorkflow` to turn off a workflow for a user by ID. ```javascript icon="js" JavaScript theme={null} paragon.disableWorkflow(workflowId); ``` **Arguments:** Workflow ID ```http icon="terminal" HTTP theme={null} DELETE https://api.useparagon.com/projects/PROJECT_ID/sdk/workflows/WORKFLOW_ID Authorization: Bearer PARAGON_USER_TOKEN ``` **Arguments:** You can find your project ID in the Overview tab of any Integration Workflow ID See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token *** ### .updateWorkflowState Call `paragon.updateWorkflowState` to enable or disable workflows for a user. ```javascript icon="js" JavaScript theme={null} paragon.updateWorkflowState(workflowStateUpdate, options); ``` **Arguments:** A partial update object where keys are workflow IDs and values are `true` or `false`. Any workflow IDs not included in this object will not be updated in this call. ```javascript icon="js" on Example theme={null} { "bb89897b-ec2a-4118-b091-c12713c6bffa": true, "487c67e1-bc3f-406e-acc4-085f897dc564": false, } ``` Optionally specify a Credential and Configuration to target, if using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) or [Multi-Configuration](/apis/api-reference/multi-configuration). The Credential ID (a UUID) of the connected account you want to update, if using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization). The Configuration ID (a UUID or an External ID prefixed with `ext:`), if using [Multi-Configuration](/apis/api-reference/multi-configuration). *** ### .updateWorkflowUserSettings Call `paragon.updateWorkflowUserSettings` to update any workflow-level [User Settings](/connect-portal/workflow-user-settings) for your Connected User. ```javascript icon="js" JavaScript theme={null} paragon.updateWorkflowUserSettings(integrationType, workflowId, userSettingsUpdate, options); ``` **Arguments:** An integration type string, like `salesforce`. The ID of the Workflow that the workflow-level User Setting you are modifying belongs to. If you are trying to modify an integration-level User Setting, call [`paragon.updateIntegrationUserSettings`](#updateintegrationusersettings) instead. A partial update object where the keys are the `id` properties of User Settings objects (which you can get from [`paragon.getIntegrationConfig`](#getintegrationconfig)) and the values are the user's selection for the matching input type. Any keys that are not included in the object will not be updated. The type for each value will depend on the input type. See [Input Types Reference](/connect-portal/input-types-reference) to see the value type for each input. ```json Example theme={null} { "1f7474a5-8b8e-4c25-8d44-29f20aec3fe4": "general" } ``` Optionally specify a Credential and Configuration to target, if using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) or [Multi-Configuration](/apis/api-reference/multi-configuration). The Credential ID (a UUID) of the connected account you want to update, if using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization). The Configuration ID (a UUID or an External ID prefixed with `ext:`), if using [Multi-Configuration](/apis/api-reference/multi-configuration). *** ### .getCustomWebhookUserManualUrl If you are using [Custom Webhooks](/resources/custom-webhooks) with a User-Level URL and [Manual Setup](/resources/custom-webhooks#option-2%3A-manual-setup), you can use `paragon.getCustomWebhookUserManualUrl` to construct the user-specific URL that must be registered by your customer in the integration to complete webhook setup. There is no API endpoint available for this method. However, you can construct the user-specific URL without the JavaScript SDK as described in the [Custom Webhooks docs](/resources/custom-webhooks#user-specific-webhook-target-urls). ```javascript icon="js" JavaScript theme={null} // Present this value to your user to register this webhook in their account manually const webhookUrl = paragon.getCustomWebhookUserManualUrl(workflowId, credentialId); ``` **Arguments:** The ID of a Workflow that utilizes this Custom Webhook. If the same Custom Webhook is used in multiple Workflows, any one of these workflows can be used as `workflowId`. If you are using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) and there may be more than one account connected for a given integration, pass the `credentialId` to ensure that received events are routed to the correct account. *** ### .workflow Call `paragon.workflow` to trigger a Paragon workflow that sends a custom response back to your app. Note: The workflow must be enabled and use a Request-type trigger. ```javascript icon="js" JavaScript theme={null} await paragon.workflow(workflowId, options); ``` **Arguments:** The ID of the workflow to trigger. The request body to pass to the workflow trigger. **Example:** ```javascript icon="js" theme={null} paragon.authenticate(PROJECT_ID, PARAGON_USER_TOKEN); await paragon.workflow(WORKFLOW_ID, { "body": { "email": "bowie@useparagon.com", "first_name": "Bowie", "last_name": "Foo" } }); ``` ```http icon="terminal" HTTP theme={null} POST https://api.useparagon.com/projects/PROJECT_ID/sdk/triggers/WORKFLOW_ID Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json { ...options } ``` **Arguments:** You can find your project ID in the Overview tab of any Integration The ID of the workflow to trigger. See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token The request body to pass to the workflow trigger. **Example:** ```http icon="terminal" HTTP theme={null} POST https://api.useparagon.com/projects/PROJECT_ID/sdk/triggers/WORKFLOW_ID Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json { "email": "bowie@useparagon.com", "first_name": "Bowie", "last_name": "Foo" } ``` *** ### .request Call `paragon.request` to send an API request to a third-party integration on behalf of one of your users. Every integration in your dashboard has a code example of using `paragon.request`. ```javascript icon="js" JavaScript theme={null} await paragon.request(integrationType, path, requestOptions); ``` **Arguments:** The short name for the integration (i.e. "salesforce" or "googleCalendar"). You can find this string on the Overview tab of the integration you want to access, on your Paragon dashboard. The path (without the hostname) of the API request you are trying to access. An example might be: "/v1/charges" for Stripe's charge API or "chat.postMessage" for Slack's Web API. Optional request options to include: An object representing JSON contents of the request. An HTTP verb such as "GET" or "POST". Defaults to GET. Additional HTTP headers to include in the request. If `requestOptions` is omitted, the SDK issues a `GET` request without a body. The function returns a promise for the request output, which will have a shape that varies depending on the integration and API endpoint. **Examples:** ```typescript JavaScript SDK theme={null} await paragon.request('slack', '/chat.postMessage', { method: 'POST', body: { channel: 'CXXXXXXX0' // Channel ID, text: 'This message was sent with Paragon Connect :exploding_head:' } }); // -> Responds with { ok: true }, and sends a message :) ``` ```http icon="terminal" HTTP theme={null} POST https://proxy.useparagon.com/projects//sdk/proxy/slack/chat.postMessage Authorization: Bearer Content-Type: application/json { "channel": "CXXXXXXX0", "text": "This message was sent with Paragon Connect :exploding_head:" } // -> Responds with { output: { ok: true }}, and sends a message :) ``` *** ### .event App Events can be sent from your application using the Paragon SDK or REST API. In both cases, you must pass two parameters: * **name** - the event name defined in your App Event * **payload** - the event payload that should match the event schema defined in your App Event See the code examples below for how to send App Events using the Paragon SDK or API. ```javascript icon="js" JavaScript theme={null} var eventName = "Contact Created"; var eventPayload = { "name": "Brandon", "email": "b@useparagon.com" }; paragon.event(eventName, payload); ``` **Arguments:** The event name defined in your App Event The event payload that should match the event schema defined in your App Event ```http icon="terminal" HTTP theme={null} POST https://api.useparagon.com/projects/PROJECT_ID/sdk/events/trigger Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json { "name": "Contact Created", "payload": { "name": "Brandon", "email": "b@useparagon.com" } } ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token The event name defined in your App Event The event payload that should match the event schema defined in your App Event When sending live events from your application, Paragon will not validate that your event payload matches the defined event schema. *** ### .setHeadless Call `paragon.setHeadless` to enable or disable Headless mode for the SDK. When headless mode is enabled, the SDK will not render the Connect Portal UI and will instead expose functions for you to build your own UI. ```javascript icon="js" JavaScript theme={null} paragon.setHeadless(true); ``` This should be called once after SDK initialization. See the [Headless Connect Portal](/connect-portal/headless-connect-portal) guide for more details. *** ## API Only ### `GET` project's integrations Returns a list of the integrations enabled for the Paragon project by the ID in the URL. * Includes the Connect Portal configuration for each integration (as `.configs`) and the Workflows associated with each integration (as `.workflows`) You can use [`paragon.getIntegrationMetadata`](#getintegrationmetadata) and [`paragon.getIntegrationConfig`](#getintegrationconfig) when using the JavaScript SDK. ```http icon="terminal" HTTP expandable theme={null} GET https://api.useparagon.com/projects/PROJECT_ID/sdk/integrations Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json // Example response (may include more than is in this list): [{ "id": "2f08e65f-d924-42ab-9618-b6023d82ffbd", "projectId": "908f4c5e-6394-46a5-9355-3f729edbd160", "customIntegrationId": null, "type": "slack", "isActive": true, "configs": [ { "id": "3ebcc179-a1a6-447f-8dc9-5017f40f08ef", "values": { "overview": "####Our Slack integration enables you to:\n \n\n• Receive alerts and notifications in your Slack workspace\n• Notify or DM specific team members based on certain activity", "sharedMeta": {}, "accentColor": "#4A154B", "description": "Send notifications to Slack", "workflowMeta": {} } }, ], "workflows": [ { "id": "1b22193b-e355-458d-b6a3-5e5516edb588", "description": "Send Updates to Slack", "projectId": "908f4c5e-6394-46a5-9355-3f729edbd160", "integrationId": "2f08e65f-d924-42ab-9618-b6023d82ffbd", "steps": [] } ], "customIntegration": null, "hasCredential": true, "connectedUserLimitOnDevCred": 0, "connectedUserLimitReached": true, "name": "Slack", "brandColor": "#4A154B", "needPreOauthInputs": false, "providerType": "slack", "authenticationType": "oauth" }] ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token ### `GET` user's Connect credentials Returns a list of the user's Connect credentials (i.e., the accounts connected and authorized by the end user). * The **providerId** is the authenticated user's ID assigned by their integration provider (e.g. for a Salesforce integration, this would be the user's Salesforce user ID) This method is currently available via REST API only. ```http icon="terminal" HTTP theme={null} GET https://api.useparagon.com/projects/PROJECT_ID/sdk/credentials Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json // Example response (may include more than is in this list): [{ "id": "00da4146-7ac4-4253-a8f7-96849b8137d9", "dateCreated": "2021-03-24T12:19:21.511Z", "dateUpdated": "2021-03-24T12:19:28.512Z", "dateDeleted": null, "projectId": "db06d291-ba2c-41c5-9a12-9362abfd6228", "integrationId": "95bedc9f-6a22-4855-b08d-e68dc073ad91", "personaId": "0563109f-5e71-46c5-8483-1ac8c0913d6c", "config": { "configuredWorkflows": { "3eb95154-3c7b-413c-bf14-ba367d95b53f": { "enabled": true, "settings": { "example-input-id": "example value" } } } }, "isPreviewCredential": false, "providerId": "50150244515" }] ``` **Arguments:** You can find your project ID in the Overview tab of any Integration See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token ### `UPDATE` user's Connect credential Updates the user's connected integration account, including any settings and configured workflows. This endpoint updates by replacement with respect to the `config` property, so this endpoint should only be used after retrieving the existing value (which can be done by using the above endpoint: [Get user's Connect credentials](/apis/api-reference#get-users-connect-credentials)). Alternatively, you can use the SDK to update User Settings or workflow enablements: * [`paragon.updateIntegrationUserSettings`](/apis/api-reference#updateintegrationusersettings): Update integration-level User Settings. * [`paragon.updateWorkflowUserSettings`](/apis/api-reference#updateworkflowusersettings): Update workflow-level User Settings. * [`paragon.updateWorkflowState`](/apis/api-reference#updateworkflowstate): Update workflow enablements. ```http icon="terminal" HTTP theme={null} PATCH https://api.useparagon.com/projects/PROJECT_ID/sdk/credentials/CREDENTIAL_ID Authorization: Bearer Content-Type: application/json // Body: Example showing WORKFLOW_ID being enabled { "config": { "configuredWorkflows": { ... WORKFLOW_ID: { "enabled": true, "settings": {} } }, "sharedSettings": {...} } } ``` **Arguments:** You can find your project ID in the Overview tab of any Integration The ID of the Connect credential to update. Retrieve it from the [`/sdk/credentials`](/apis/api-reference#get-users-connect-credentials) endpoint. See [Setup](/getting-started/installing-the-connect-sdk) for how to encode your user token The configuration object to update. This will replace the existing `config` property entirely, so you must provide the full existing value with your intended changes applied. **Note**: In the above example, the existing value for `config` must be provided in full, with the intended changes applied. This is because `config` will be updated by replacement. ## Headless Connect installFlow Use `paragon.installFlow` when implementing the [Headless Connect Portal](/connect-portal/headless-connect-portal) to guide your user through the installation process for an integration. **InstallFlowStage:** These are the possible install flow stages received in the `onNext` callback of `InstallFlow` that should be rendered by your app to guide the user through the installation process. In the `AccountTypeStage`, the user should be prompted with a list of account types that they can choose from. If you want to skip this stage, pass the first account type option (or `"default"`) to `paragon.installFlow.setAccountType` to move to the next stage. ```javascript icon="js" Example (Salesforce) theme={null} { "stage": "accountType", "options": [ { "id": "default", "accountDescription": "Production Account" }, { "id": "sandbox", "accountDescription": "Sandbox Account"} ] } ``` `"accountType"` for AccountTypeStage. The list of account types that the user can choose from. The ID of the account type. Pass this to `paragon.installFlow.setAccountType` when the user selects an option. The human-readable description of the account type. In the `PreOptionsStage`, the user should be prompted with inputs to collect the necessary details for API key authorization or for the next OAuth stage in the flow. ```javascript icon="js" Example (Shopify) theme={null} { "stage": "preOptions", "options": [ { "id": "SHOP_NAME", "title": "Enter your Shopify username", "subtitle": "Enter your Shopify username, e.g. https://.myshopify.com.", "placeholder": "username", "type": "TEXT_NO_VARS" } ] } ``` `"preOptions"` for PreOptionsStage. The list of inputs to prompt the user with in this stage. You can see a full list of input types that are used by the Connect Portal and must be rendered by your implementation in [Input Types Reference](/connect-portal/input-types-reference). Use the input `id` as the key of the object you pass to [`paragon.setPreOptions`](#installflowsetpreoptions). The value will be the input provided by the user. The type of this input, which will be one of the inputs in [Input Types Reference](/connect-portal/input-types-reference). The title to display to the user to describe this input. The descriptive text to display to the user to further describe or provide context to this input. The placeholder or example value to display to the user. In the `PostOptionsStage`, the user should be prompted with inputs to finalize their account setup after the OAuth flow. ```javascript icon="js" Example (Jira) theme={null} { "stage": "postOptions", "credentialId": "987654-56a7-89b1-cd23-456789abcdef", "options": [ { "id": "JIRA_CLOUD_ID", "type": "DYNAMIC_ENUM", "title": "Choose a Jira site to connect.", "subtitle": "The Jira site, where all operations will be performed.", "sourceType": "getAvailableSites", "required": true } ], "done": false } ``` `"postOptions"` for PostOptionsStage. The ID of the credential that was created during the OAuth flow. Available once the credential has been created, so you can pass it to [`paragon.getFieldOptions`](#getfieldoptions) when loading options for dynamic inputs in this stage. The list of inputs to prompt the user with in this stage. You can see a full list of input types that are used by the Connect Portal and must be rendered by your implementation in [Input Types Reference](/connect-portal/input-types-reference). Use the input `id` as the key of the object you pass to [`paragon.setPostOptions`](#installflowsetpostoptions). The value will be the input provided by the user. The type of this input, which will be one of the inputs in [Input Types Reference](/connect-portal/input-types-reference). The title to display to the user to describe this input. The descriptive text to display to the user to further describe or provide context to this input. The placeholder or example value to display to the user. The source type of this input, defined for dynamic enum inputs. This value can be passed to [`paragon.getFieldOptions`](#getfieldoptions) to load the options for the input. See a walkthrough of implementing dynamic input types in [Exposing User Settings](/connect-portal/headless-connect-portal#exposing-user-settings). Whether this input is required. In the `InstructionStage`, the user should be shown instructional content with call-to-action buttons and a finish button to proceed to the next stage. ```javascript icon="js" Example (Salesforce) theme={null} { "stage": "instruction", "content": "## Install Package\n\nPlease install the package using the link below.\n\n![Install Image](https://cdn.useparagon.com/image.png \"Install Image\")\n\nAfter installation, click the finish button.", "ctas": [ { "type": "link", "label": "Install Package", "href": "https://example.com/package-install" }, { "type": "copyButton", "label": "Copy link", "copyText": "https://example.com/package-install" } ], "finish": { "type": "finishButton", "label": "I've installed the package", "onClick": Function }, "done": false } ``` `"instruction"` for InstructionStage. Markdown-formatted content to display to the user. This can include headings, images, and other markdown elements. An array of call-to-action buttons to display alongside the content. Each CTA can be either a link or a copy button. `"link"` for Link CTAs. The text to display on the link button. The URL to navigate to when the link is clicked. `"copyButton"` for CopyButton CTAs. The text to display on the copy button. The text to copy to the clipboard when the button is clicked. The finish button that the user clicks to proceed to the next stage after completing the instructions. `"finishButton"` for FinishButton. The text to display on the finish button. The callback function provided by the SDK to execute when the finish button is clicked. When this button is clicked, call `finish.onClick()` to mark the instruction stage as complete. *** ### .installFlow\.start Call `paragon.installFlow.start` to begin an install flow for an integration. [See an example call](/connect-portal/headless-connect-portal#example-install-flow). ```javascript icon="js" JavaScript theme={null} paragon.installFlow.start(integrationType, options); ``` **Arguments:** The integration type string, like `salesforce`. This callback is called when the install flow is ready to move to the next stage. Your app must render the appropriate UI for each stage, so that your user can provide the necessary details in that stage to connect their account. The install flow stage for your app to render. See [InstallFlowStage](#installflowstage) for more details. This callback is called when the install flow completes successfully. This callback is called when the install flow fails, with an error object and error context. The error object. You can read the `.name` of the error object to identify one of the following error types: * `OAuthBlockedError`: The browser blocked the OAuth prompt from appearing. This may require the user to allow popups in their browser settings. * `OAuthTimeoutError`: The OAuth prompt took longer than `oauthTimeout` milliseconds (as provided in `options`) to complete. * `UserNotAuthenticatedError`: The user is not authenticated with the Paragon SDK. Verify that `paragon.authenticate` has been called before starting the install flow. * `NoActiveInstallFlowError`: An install flow function was called, but no install flow is currently active. Call `paragon.installFlow.start` to start an install flow. * `HeadlessModeNotEnabledError`: Headless Connect Portal is not enabled. Call `paragon.setHeadless` to enable Headless mode. * `IntegrationNotFoundError`: The provided integration type is not found or has [not been enabled](/getting-started/displaying-the-connect-portal#activating-the-integration) in your Paragon project. The error context object. The stage that the install flow was on when the error occurred. **One of**: `accountType`, `preOptions`, `postOptions`, `instruction`. The number of milliseconds to wait for an OAuth prompt to complete. If the user does not complete the OAuth prompt within this time, the install flow will fail, and the `onError` callback will be called. If not provided, there will be no timeout for the OAuth prompt. Set to `true` if using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization). This will allow users to connect multiple accounts under one integration type. Defaults to `false`. Set this parameter to *replace* an account by a selected Credential ID instead of connecting a new account. This can be used to prompt a user to reconnect a credential if authorization has been revoked and the `status` of the credential is `INVALID`. Set this parameter to your Redirect Page URL for integrations like [Google Drive](/resources/integrations/google-drive#setting-up-a-redirect-page-in-your-app). *** ### .installFlow\.setAccountType Call `paragon.installFlow.setAccountType` when the user selects an account type in the `AccountTypeStage`. ```javascript icon="js" JavaScript theme={null} paragon.installFlow.setAccountType(accountType); ``` **Arguments:** The account type to set. This should be the `id` property of the Account Type option that the user selected. *** ### .installFlow\.setPreOptions Call `paragon.installFlow.setPreOptions` when the user finishes providing inputs in the `PreOptionsStage`. ```javascript icon="js" JavaScript theme={null} await paragon.installFlow.setPreOptions(values); ``` This returns a Promise that resolves when the values are saved. Upon success, the install flow will move to the next stage and call `onNext`. If there is no stage after the `PreOptionsStage`, the install flow will call `onComplete`. **Arguments:** The values to set for the inputs in the `PreOptionsStage`. This should be an object, where the keys are `id`s of the inputs in the `PreOptionsStage`, and the values are the values that the user provided for each input. ```javascript icon="js" Example (Shopify) theme={null} { "SHOP_NAME": "my-shop" } ``` *** ### .installFlow\.setPostOptions Call `paragon.installFlow.setPostOptions` when the user finishes providing inputs in the `PostOptionsStage`. ```javascript icon="js" JavaScript theme={null} await paragon.installFlow.setPostOptions(values); ``` This returns a Promise that resolves when the values are saved. Upon success, the install flow will be completed and call `onComplete`. **Arguments:** The values to set for the inputs in the `PostOptionsStage`. This should be an object, where the keys are `id`s of the inputs in the `PostOptionsStage`, and the values are the values that the user provided for each input. ```javascript icon="js" Example (Jira) theme={null} { "JIRA_CLOUD_ID": "my-jira-cloud-id" } ``` *** ### .installFlow\.cancel Call `paragon.installFlow.cancel` if your user abandons the integration connection process during an active install flow. This function resets the state for `paragon.installFlow` to begin again at another time. ```javascript icon="js" JavaScript theme={null} paragon.installFlow.cancel(); ``` If your user has completed an OAuth connection but has *not* completed required post-OAuth options, this function will remove the credential with status `"PENDING"` automatically by calling `paragon.uninstallIntegration`. However, if the page has been refreshed or the SDK has been reloaded *since* the pending credential was connected, you will need to call `paragon.uninstallIntegration` manually to disconnect the pending credential from your user. *** ## External File Picker You can use the Paragon SDK to allow your user to select files from a File Storage integration in your app. The SDK provides an `ExternalFilePicker` class to load any necessary JavaScript dependencies into your page and authenticate with your user's connected account. **Supported integrations for ExternalFilePicker:** * [Google Drive](/resources/integrations/google-drive#using-the-google-drive-file-picker) * [OneDrive](/resources/integrations/onedrive#using-the-onedrive-file-picker) * [SharePoint](/resources/integrations/sharepoint#using-the-sharepoint-file-picker) * [Box](/resources/integrations/box#using-the-box-file-picker) ### .ExternalFilePicker Construct a new instance of an ExternalFilePicker for an integration given by `integrationType`. Any required JS dependencies do not start loading until [`picker.init`](/apis/api-reference#pickerinit) is called. ```javascript icon="js" JavaScript theme={null} const picker = new paragon.ExternalFilePicker(integrationType, options); ``` **Arguments:** Type of integration (i.e. "googledrive", "onedrive", "sharepoint", "box") An array of MIME types to allow for file selection, e.g. `["application/pdf", "image/jpeg"]`. If `undefined`, all types will be allowed. If `true`, allow multiple files to be selected. Default: `false`. If `true`, allow folders to be selected. Default: `false`. Called when a Picker successfully appears in the app. Called when a Picker gets closed. Called when a Picker file selection is made. `files` is an Array of objects with the selected file objects from the 3rd-party picker script. Called when a Picker gets closed without any files selected. **Example:** ```javascript icon="js" JavaScript theme={null} const picker = new paragon.ExternalFilePicker("googledrive", { allowedTypes: ["application/pdf"], allowMultiSelect: false, onFileSelect(files) { console.log("User picked files", files); }, }); ``` *** ### picker.init Initialize a file picker with required configuration `initConfig`. Required configuration varies per integration; see [integration-specific documentation](/apis/api-reference#supported-integrations-for-externalfilepicker) for specific details. This function loads required JS dependencies into the page, if they have not already been loaded. Other methods, like `picker.open` and `picker.getInstance`, cannot be called until the Promise returned by `picker.init` is resolved. ```javascript icon="js" JavaScript theme={null} await picker.init(initConfig); ``` **Arguments:** The developer key required for certain integrations (e.g., Google Drive). Pass to select a specific account to pick files from when using [Multi-Account Authorization](/apis/api-reference/multi-account-authorization). SharePoint only. Optional site URL override (e.g. `https://contoso.sharepoint.com/sites/MySite`). Takes precedence over `siteId` and the connected credential's default site. See [SharePoint File Picker](/resources/integrations/sharepoint#using-the-sharepoint-file-picker) for details. SharePoint only. Optional site ID (e.g. `contoso.sharepoint.com,191d8a17-...`). Resolved to a site URL via Microsoft Graph before opening the picker. Ignored when `siteUrl` is also provided. **Example:** ```javascript icon="js" JavaScript theme={null} await picker.init({ developerKey: "AIzaS...", }); ``` *** ### picker.open Presents the file picker in your app. Selected files or other events will be received in the [callbacks](/apis/api-reference#options) you specified in the constructor. ```javascript icon="js" JavaScript theme={null} picker.open(); ``` *** ### picker.getInstance Returns a reference to the third-party JS library object that this file picker is using. This object can be used for additional integration-specific customization. ```javascript icon="js" JavaScript theme={null} const instance = picker.getInstance(); ``` # JWT Permissions Source: https://docs.useparagon.com/apis/api-reference/jwt-permissions Use JWT Permissions to control the credentials and configurations that an authenticated user has access to using the Paragon User Token. If your Connected Users represent accounts, organizations, or some other *group* of users in your platform, then you may want to control the permissions of the credentials and configurations within that user to only the set that an authenticated user of your application should have access to. By default, a Paragon User Token grants access to all credentials and configurations within a Connected User (identified by the `sub` field in the JWT). Diagram illustrating org- vs. user-level tokens You can restrict access to specific credentials and configurations by adding an additional claim on the [Paragon User Token](../../getting-started/installing-the-connect-sdk.md#setup) (JWT) that is passed for an authenticated user in your platform. You can also use JWT Permissions to prevent certain types of API calls from being made using a given token, for example: Proxy API calls, App Events, Workflow triggers, or ActionKit requests. ## Usage The claim for JWT Permissions is called `urn:useparagon:connect:permissions` and is structured as an object with keys of [Scopes](#jwt-scopes) (i.e. what to scope a group of permissions/rules to) and values of [Permissions](#jwt-permissions) (i.e. visibility of specific credentials or configurations and the types of operations that are allowed). Here are some examples of token types that are expressible with JWT Permissions: ```json Admin (org-level) theme={null} { "sub": "", "urn:useparagon:connect:permissions": { "integration:*": true } } ``` ```json Restricted to specific accounts (user-level) theme={null} { "sub": "", "urn:useparagon:connect:permissions": { "integration:gmail": { "credential:abf961e3-12ec-40fe-8aa9-caa5ab162a6a": true } } } ``` ```json Restricted to specific configurations theme={null} { "sub": "", "urn:useparagon:connect:permissions": { "integration:*": true, "integration:slack": { // Applies to all teams "credential:*": { "permissions": [ "events" ], // Applies to all Slack configurations with external ID of // "Team A", for all Slack accounts "configuration:ext:Team A": [ "config:write", "settings:write" ] } }, "integration:custom.test": false, "integration:hubspot": { "credential:*": [ "config:write" ] } } } ``` ```json ActionKit access with restricted integrations theme={null} { "sub": "", "urn:useparagon:connect:permissions": { "permissions": [ "actionkit" ], "integration:salesforce": { "credential:*": true }, "integration:hubspot": { "credential:*": true } } } ``` **Claims passed in the JWT are not persisted or saved in any way.** They are only used and evaluated for the current API request and should be included with every token that requires permissions control. ## JWT Scopes The following scopes can be used to assign permissions and rules. These scopes are ordered from least specific to most specific. Permissions designated at more specific scopes will override those inherited from less specific scopes.
Scope Description
**integration:\*** All integrations
**integration:\[name]** An integration matching a name of \[name] (as passed to paragon.connect )
**credential:\*** All credentials belonging to an integration
**credential:\[uuid]** All credentials matching an ID of \[uuid]
**configuration:\*** All configurations belonging to a credential
**configuration:ext:\[id]** All configurations matching an External ID of \[id]
## JWT Permissions The following permissions can be used to configure API capabilities for a Paragon User Token. These permissions can apply to any of the scopes listed above. Permissions must be specified as an array, or as a Boolean interpreted as `true` = Allow All, `false` = Deny All.
Permission Description
**credential:write** Connect a new credential, reconnect an existing credential, or disconnect an existing credential
**config:write** Create, modify, or destroy a configuration
**settings:read** Read User Settings and Workflow Enablement
**settings:write** Write and read User Settings and Workflow Enablements
**metadata:read** Read User Metadata
**metadata:write** Write and read User Metadata
**proxy-api** Send requests to the Proxy API
**events** Send App Events
**workflows** Send Workflow Request triggers
**actionkit** Send requests to the [ActionKit API](/actionkit/api-reference)
# Multi-Account Authorization Source: https://docs.useparagon.com/apis/api-reference/multi-account-authorization Use the SDK to connect multiple accounts for the same integration. Multiple Account Authorizations is a set of SDK options that allows Connected Users to connect multiple accounts for the same integration. For example, a Connected User can connect multiple Google Drive accounts, with each account stored as a separate Credential. ## Supported Products | Product | Supported | | -------------------------------------- | ---------------------------------------------------------- | | [Workflows](/workflows/overview) | Yes | | [ActionKit](/actionkit/overview) | Yes (via `X-Paragon-Credential` header) | | [Managed Sync](/managed-sync/overview) | Yes (via `credentialId` in request body) | | [Proxy API](/apis/proxy) | Yes (via `selectedCredentialId` or `X-Paragon-Credential`) | ## Getting Started **Connecting new accounts** To get started with Multiple Account Authorizations, you can pass in `allowMultipleCredentials` to `paragon.installIntegration`: ```javascript theme={null} // Connect a new Google Calendar account paragon.installIntegration("googleCalendar", { allowMultipleCredentials: true, // Set to true to show User Settings after installation: showPortalAfterInstall: true }); ``` This function starts the connection process for a new account of an integration. After the user has connected, you can optionally show the Connect Portal to present any User Settings that are used to configure the integration. **Listing accounts** Your UI must be able to render a list of each account your user has connected for an integration. Use `paragon.getUser` to retrieve this list: ```javascript theme={null} const user = paragon.getUser(); // An array of all Google Calendar accounts the user has connected: user.integrations.googleCalendar.allCredentials; ``` Each account ("credential") will have an ID that can be used to present the Connect Portal for the account, remove the account, or route requests to the account. Use `paragon.subscribe` to listen for change events to the Paragon user object, if your UI updates dynamically. **Managing existing accounts** You can allow your users to manage User Settings for a specific account using the Connect Portal by passing `selectedCredentialId` to `paragon.connect`: ```javascript theme={null} // Modify User Settings for an existing Google Calendar account paragon.connect("googleCalendar", { selectedCredentialId: "a5e995c2-7709-43fd-9cdf-f759faa52497" }); ``` **Removing existing accounts** You can disconnect an existing account by passing `selectedCredentialId` to `paragon.uninstallIntegration`: ```javascript theme={null} // Disconnect an existing Google Calendar account paragon.uninstallIntegration("googleCalendar", { selectedCredentialId: "a5e995c2-7709-43fd-9cdf-f759faa52497" }); ``` ## Usage A subset of SDK functions can be passed an additional parameter for Multiple Account Authorizations, as outlined below. In general, to use Multiple Account Authorizations, you will need to: * Use `user.integrations.[integration].allCredentials` (a field returned in [`paragon.getUser`](/apis/api-reference/multi-account-authorization#getuser)) to display multiple connected accounts in your Integrations UI. * Update references to [`paragon.connect`](/apis/api-reference#connect) (or [`paragon.installIntegration`](/apis/api-reference/multi-account-authorization#installintegration) and [`paragon.uninstallIntegration`](/apis/api-reference/multi-account-authorization#uninstallintegration)) to use the SDK with Multiple Account Authorizations enabled. * Update references to [`paragon.request`](/apis/api-reference/multi-account-authorization#request) and [`paragon.workflow`](/apis/api-reference/multi-account-authorization#workflow) (and API equivalents) to make sure that a specific account is targeted for a given integration type. App Events and Workflows do not need to be updated to support Multiple Account Authorizations. ## Access Control If you are using Multi-Account Authorization to enable multiple users within one organization to connect their individual credentials within one Connected User, use JWT Permissions to restrict each user's access to only the accounts they have connected: Learn more about implementing JWT Permissions to control access to credentials. ## Reference ### .connect With Multiple Account Authorizations, use `paragon.connect` to present the Connect Portal for an *existing* account for the intended integration. Use [`paragon.installIntegration`](/apis/api-reference/multi-account-authorization#installintegration) to connect *new* accounts. * The Connect Portal can show the settings and workflows enabled for one account at a time, set by the `selectedCredentialId` property. If `selectedCredentialId` is not defined, the Connect Portal will use the first account available. * When the Connect Portal appears, a user can enable or disable workflows, update User Settings, and disconnect the account that is selected. For full documentation of this method, see [`paragon.connect`](/apis/api-reference#connect). **Example:** ```javascript icon="js" JavaScript theme={null} // Connect a new account for this integration. // NOTE: You must use `paragon.installIntegration` rather than `paragon.connect`. paragon.installIntegration("salesforce", { allowMultipleCredentials: true }); // Show the Connect Portal to configure an existing account for this integration. paragon.connect("salesforce", { selectedCredentialId: "de06dea8-8680-483c-95ea-cfcf66582c96" }); ``` *** ### .installIntegration The `paragon.installIntegration` function starts the connection process for a new account of an integration. With Multiple Account Authorizations, pass `allowMultipleCredentials: true` so the function does not throw an error if the user already has this integration installed. You can use the resulting Promise to get the newly created credential. For full documentation of this method, see [`paragon.installIntegration`](/apis/api-reference#installintegration). **Example:** ```javascript icon="js" Connect a new account theme={null} const { credential } = await paragon.installIntegration("googledrive", { allowMultipleCredentials: true }); ``` ```javascript icon="js" Replace an existing account theme={null} paragon.installIntegration("googledrive", { allowMultipleCredentials: true, selectedCredentialId: "0d2cca60-268b-45f1-ac5e-af6aad403d8c" }); ``` *** ### .uninstallIntegration Call `paragon.uninstallIntegration` to disconnect an integration for the authenticated user. With Multiple Account Authorizations, use `selectedCredentialId` (SDK) or the `X-Paragon-Credential` header (API) to select a specific account to disconnect. For full documentation of this method, see [`paragon.uninstallIntegration`](/apis/api-reference#uninstallintegration). **Example:** ```javascript icon="js" JavaScript theme={null} paragon.uninstallIntegration("googledrive", { selectedCredentialId: "de06dea8-8680-483c-95ea-cfcf66582c96" }); ``` ```http icon="terminal" REST API theme={null} DELETE https://api.useparagon.com/projects/PROJECT_ID/sdk/integrations/INTEGRATION_ID Authorization: Bearer PARAGON_USER_TOKEN X-Paragon-Credential: de06dea8-8680-483c-95ea-cfcf66582c96 ``` *** ### .getUser Call `paragon.getUser` to retrieve the currently authenticated user and their connected integration state. With Multiple Account Authorizations, `paragon.getUser` additionally returns `allCredentials`, an array of connected accounts for a given integration. For full documentation of this method, see [`paragon.getUser`](/apis/api-reference#getuser). **Example Response:** ```javascript icon="js" JavaScript expandable theme={null} { authenticated: true, userId: "xyz", // The user ID you specified in the signed JWT integrations: { salesforce: { enabled: true, allCredentials: [ { id: "a5e995c2-7709-43fd-9cdf-f759faa52497", dateCreated: "2023-05-30T22:33:20.349Z", dateUpdated: "2023-05-30T22:33:20.349Z", projectId: "d1f142cd-1dfe-4d76-ab4c-8f64901a9c5c", integrationId: "8aaad9ff-5adb-433c-a17b-da093f9d4528", personaId: "30975f6a-c50c-4e74-914a-3eb700db8b05", config: { configuredWorkflows: {} }, isPreviewCredential: false, providerId: "1223115691", providerData: {}, status: "VALID", dateRefreshed: "2023-05-30T22:33:20.349Z", dateValidUntil: "2023-05-30T23:33:17.809Z", refreshFailureCount: 0, isRefreshing: false, externalId: "my-external-id", // Present if set via .connect() or .installIntegration() }, ], configuredWorkflows: {}, credentialId: "a5e995c2-7709-43fd-9cdf-f759faa52497", credentialStatus: "VALID", providerId: "1223115691", providerData: {}, }, shopify: { enabled: false, }, }, } ``` *** ### .workflow Call `paragon.workflow` to trigger a Paragon workflow that sends a custom response back to your app. Note: The workflow must be enabled and use a Request-type trigger. With Multiple Account Authorizations, use `selectedCredentialId` (SDK) or the `X-Paragon-Credential` header (API) to select a specific account for which to trigger a workflow. The Credential ID that is used will be recorded for viewing in the [Monitoring Workflows page](/workflows/viewing-workflow-executions). For full documentation of this method, see [`paragon.workflow`](/apis/api-reference#workflow). **Example:** ```javascript icon="js" JavaScript theme={null} // Trigger the "Lead Created" workflow await paragon.workflow("", { body: { "email": "bowie@useparagon.com", "first_name": "Bowie", "last_name": "Foo" }, selectedCredentialId: "de06dea8-8680-483c-95ea-cfcf66582c96" }); ``` ```http icon="terminal" REST API theme={null} POST https://api.useparagon.com/projects/PROJECT_ID/sdk/triggers/WORKFLOW_ID Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json X-Paragon-Credential: de06dea8-8680-483c-95ea-cfcf66582c96 { "email": "bowie@useparagon.com", "first_name": "Bowie", "last_name": "Foo" } ``` *** ### .request Call `paragon.request` to send an API request to a third-party integration on behalf of one of your users. With Multiple Account Authorizations, use `selectedCredentialId` (SDK) or the `X-Paragon-Credential` header (API) to select a specific account to use with the [Proxy API](/apis/proxy) or [ActionKit](/actionkit/overview). For full documentation of this method, see [`paragon.request`](/apis/api-reference#request). **Example:** ```javascript icon="js" JavaScript theme={null} await paragon.request('slack', '/chat.postMessage', { method: 'POST', body: { channel: 'CXXXXXXX0', // Channel ID text: 'This message was sent with Paragon Connect :exploding_head:' }, selectedCredentialId: "de06dea8-8680-483c-95ea-cfcf66582c96" }); ``` ```http icon="terminal" REST API theme={null} POST https://proxy.useparagon.com/projects/PROJECT_ID/sdk/proxy/slack/chat.postMessage Authorization: Bearer PARAGON_USER_TOKEN Content-Type: application/json X-Paragon-Credential: de06dea8-8680-483c-95ea-cfcf66582c96 { "channel": "CXXXXXXX0", "text": "This message was sent with Paragon Connect :exploding_head:" } ``` *** ### picker.init You can use the Paragon SDK to allow your user to select files from a File Storage integration in your app. After constructing a new instance of the [ExternalFilePicker](/apis/api-reference#externalfilepicker), you can initialize a file picker with the required configuration `initConfig`, including the `selectedCredentialId` for the user. Required configuration varies per integration; see [integration-specific documentation](/apis/api-reference#supported-integrations-for-externalfilepicker) for specific details. This function loads required JS dependencies into the page, if they have not already been loaded. Other methods, like `picker.open` and `picker.getInstance`, cannot be called until the Promise returned by `picker.init` is resolved. **Example:** ```javascript icon="js" JavaScript theme={null} await picker.init({ developerKey: "AIzaS...", appId: "457...", selectedCredentialId: "de06dea8-8680-483c-95ea-cfcf66582c96" }); ``` # Multi-Configuration Source: https://docs.useparagon.com/apis/api-reference/multi-configuration Use the SDK to set up multiple configurations of settings or workflow enablements for one connected account authorization. Multi-Configuration allows you to use one connected account authorization (1 credential) to set up multiple *configurations* of [User Settings](../../connect-portal/workflow-user-settings/) or [Workflow](/workflows) enablements for your users. For example, if your Google Drive integration might require you to set up different workflows for different folders that your user wants to watch, Multi-Configuration can provide a separate "instance" of the [Connect Portal](/connect-portal/) to show for each of those folder configurations. Configurations currently do not appear in the [Connected Users Dashboard](/monitoring/users). Any workflow enablements that are displayed in the Connected Users page represent the default configuration, and values for other configurations can only be viewed and modified with the API at this time. ## Configurations A **Configuration** is a set of User Settings and Workflow Enablements associated with one connected account (credential), as shown here: In the above example, User `A` with Google Drive Credential `A` can have $N$ configurations associated with that credential. * Different sets of Workflows can be enabled / disabled for each configuration. * Different User Settings can be used for each configuration. * Configurations can be associated with an **External ID** (an ID that you provide). * An External ID which can be used to reference a Configuration(s) *in place of* a UUID, in the following format: `ext:[External ID]` * For example, if the configuration is created with `externalId: "Team A"`, it can be addressed in the Paragon User Token as `configuration:ext:Team A`. ## Usage ### Creating and managing configurations To create a new configuration, call `createConfiguration` with a `credentialId` to attach the configuration to and an optional `externalId` to reference this configuration in the API. ```typescript theme={null} const config = await paragon.createConfiguration({ // The credential to create this configuration from credentialId: "...", // An external ID that can be used to reference this configuration from the API externalId: "Team A" }); // -> { id: "", credentialId: "", settings: {}, configuredWorkflows: {} } ``` The `createConfiguration` call will return a Promise that resolves with the saved configuration object. After creating a configuration, it will be included in the `paragon.getUser` response under each integration, in both the `allConfigurations` array and within the `configurations` property of each credential object. ```typescript theme={null} paragon.getUser(); // -> { jira: { allCredentials: [{ configurations }], allConfigurations: [] } } ``` Finally, you can destroy a configuration (removing any User Settings and disabling any workflow enablements for the associated configuration) with `destroyConfiguration`: ```typescript theme={null} // Destroy a configuration using its external ID await paragon.destroyConfiguration({ id: "ext:Team A", // Configuration ID (use "ext:" prefix for external ID) credentialId: "..." // The credential ID that this configuration belongs to }); // Or destroy using configuration UUID await paragon.destroyConfiguration({ id: "a1304037-d994-40ef-894a-8d6c55f65f7c", // Configuration UUID credentialId: "..." // The credential ID that this configuration belongs to }); ``` The `destroyConfiguration` method accepts: * `id` - The configuration ID to destroy. This can be either: * A configuration UUID (e.g., `"a1304037-d994-40ef-894a-8d6c55f65f7c"`) * An external ID with the `ext:` prefix (e.g., `"ext:Team A"`) * `credentialId` - The connected account credential ID that this configuration belongs to. ### Presenting the Connect Portal After creating a configuration, you can present a Connect Portal by passing `selectedConfigurationId`. You can pass a configuration UUID or the external ID prefixed with `ext:`to reference the configuration. ```typescript theme={null} // Open Connect Portal of this configuration paragon.connect("jira", { selectedConfigurationId: "ext:Team A" }); ``` You can also use Headless Connect Portal functions for managing workflow enablements with the configuration ID: ```typescript theme={null} // Manage Headless workflow enablements for this configuration await paragon.enableWorkflow("workflow-id", { selectedConfigurationId: config.id }); await paragon.disableWorkflow("workflow-id", { selectedConfigurationId: config.id }); ``` **Note:** All credentials have a default Configuration included, which will be used if the configuration does not exist or if `selectedConfigurationId` is undefined. ### Calling the API You can use `selectedConfigurationId` as an option for SDK calls and `X-Paragon-Configuration-Id`for API calls. ```javascript theme={null} // Send an App Event for this configuration only await paragon.event("workflow-id", { selectedConfigurationId: config.id }); ``` ``` POST /sdk/events X-Paragon-Credential: a1304037-d994-40ef-894a-8d6c55f65f7c X-Paragon-Configuration-Id: ext:Team A ``` ## Access Control If you are using Multi-Configuration to enable different groups of users (such as teams) within one organization to set up distinct configurations of an integration, you may want to control which authenticated users in your application have visibility to each configuration. You can use JWT Permissions to encode these visibility controls into your Paragon User Token: Learn more abut implementing JWT Permissions to control access to configurations. # Proxy API Source: https://docs.useparagon.com/apis/proxy Send requests directly to an integration provider, on behalf of Connected Users. Proxy API was formerly known as the Connect API. ## Introduction Once your users have connected their third-party app accounts in the Connect Portal, you can access their app account via the Proxy API. The Proxy API allows you to directly access any of the third-party provider's API methods. With the SDK, you can use [`paragon.request`](/apis/api-reference#request) to send an API request to a third-party app on behalf of one of your Connected Users. Along with [Workflows](/workflows/building-workflows), the Proxy API is one of two primary ways to build integrations with Paragon. ## When to use the Proxy API The Proxy API is the most flexible way to interact with your users' third-party apps, and is a useful code-based approach for situations including: * Performing a simple one-off request (e.g. fetching a list of Salesforce contacts) * Accessing API methods that may not be available in Workflow [Integration Actions](/workflows/integration-actions) * Writing custom code for complex or unique integration use cases * Migrating existing integration code to Paragon ## Making requests with the Proxy API Every integration in your dashboard has a code example of using `paragon.request`, which takes the following arguments: * `integrationType`: The short name for the integration. i.e. "salesforce" or "googleCalendar". You can find this string on the Overview tab of the integration you want to access, on your Paragon dashboard. * When using a custom integration, the `integrationType` name is prefixed with `"custom."` For example, a custom integration titled "TaskLab" would be called `"custom.tasklab"`. * `path`: The path (without the hostname) of the API request you are trying to access. An example might be "/v1/charges" for Stripe's charge API or "chat.postMessage" for Slack's Web API. * `requestOptions` (optional): Request options to include, such as: * `body`: An object representing JSON contents of the request. * `method`: An HTTP verb such as "GET" or "POST". Defaults to GET. * `headers`: Additional HTTP headers to include in the request. If `requestOptions` is omitted, the SDK issues a `GET` request without a body. The function returns a Promise for the request output, which will have a shape that varies depending on the integration and API endpoint. ### Client-side SDK Usage ```js JavaScript SDK theme={null} await paragon.request('slack', '/chat.postMessage', { method: 'POST', body: { channel: 'CXXXXXXX0' // Channel ID, text: 'This message was sent with Paragon Connect :exploding_head:' } }); // -> Responds with { ok: true }, and sends a Slack message :) ``` ### Server-side Usage **Base URL:** * Cloud: `https://proxy.useparagon.com` * [On-premise environments](/on-premise/hosting-paragon-on-premise): `https://worker-proxy.`\[your on-prem host name] If you'd like to issue a request from your server to an integration on behalf of an end-user, you can make a request to one of the following paths: * `/projects//sdk/proxy//` * or `/projects//sdk/proxy/custom//` for [Custom Integrations](/resources/custom-integrations). ```bash theme={null} https://proxy.useparagon.com/projects//sdk/proxy // Authorization: Bearer ``` * A Bearer token must also be specified with a Paragon User Token. * This endpoint accepts any HTTP verb you want to use with the API. * Body contents must be specified as `application/json`. **Example**: ```bash theme={null} POST https://proxy.useparagon.com/projects/19d...012/sdk/proxy/slack/chat.postMessage Authorization: Bearer eyJ... Content-Type: application/json { "channel": "CXXXXXXX0", "text": "This message was sent with Paragon Connect :exploding_head:" } ``` When sending Proxy API requests for Custom Integrations, the request path differs slightly. Use the `/custom/` path to send requests as shown: ```bash theme={null} https://proxy.useparagon.com/projects//sdk/proxy /custom// Authorization: Bearer ``` * A Bearer token must also be specified with a Paragon User Token. * This endpoint accepts any HTTP verb you want to use with the API. * The Integration ID can be found in the dashboard (`/.../integrations/`) or with the [Get project's integrations](/apis/api-reference#get-projects-integrations) API endpoint. **Example:** ```bash theme={null} POST https://proxy.useparagon.com/projects/19d...012/sdk/proxy /fb243b75-35e7-46b3-ba6c-967ccebeb449/notifications Authorization: Bearer eyJ... Content-Type: application/json { "title": "This notification was created from your app" } ``` ## Requesting files or binary response data By default, the Proxy API will attempt to parse the response data from the integration API as JSON. To receive the raw response data (including all HTTP headers that were received from the integration API), you can pass the `X-Paragon-Use-Raw-Response` header to the request. This can be used when downloading binary/file data, such as images or PDF files, where the response cannot be encoded as JSON. *The JavaScript SDK currently does not support returning non-JSON payloads. As an alternative, you can use your preferred request client to make the below API request.* Below is an example of using the Proxy API to download a file from Google Drive using their [`files.get`](https://developers.google.com/drive/api/v3/reference/files/get) endpoint. ```curl REST API theme={null} GET https://proxy.useparagon.com/projects/19d...012/sdk/proxy/googledrive/files//?alt=media Authorization: Bearer eyJ... X-Paragon-Use-Raw-Response: 1 ``` ## Changing the Base URL In some cases, the Base URL included automatically in the Proxy API isn't the one you want to send requests to. To change the Base URL of a Proxy request, simply use a fully-qualified URL rather than a relative path: ```bash theme={null} https://proxy.useparagon.com/projects/[Project ID]/sdk/proxy/googledrive/https://sheets.googleapis.com/v4/spreadsheets ``` In this example, the URL that will be requested is **`https://sheets.googleapis.com/v4/spreadsheets`**. **Note**: Integrations have a permitted list of hosts that can be reached with the Proxy API. If you get the error "This domain is invalid for the current integration", you may be using an unpermitted host. # Task History API Source: https://docs.useparagon.com/apis/task-history ## Introduction The Task History API allows you to query your users' usage of integration workflows and access data from historical workflow executions. **Task History API is available for Paragon customers on Enterprise plans.** To learn more, contact your Customer Success Manager or [sales@useparagon.com](mailto:sales@useparagon.com). ### When to use the Task History API The Task History API can be used to analyze integration usage or pull information about historical workflow executions into your application. For example, you can use the Task History API to: * Query the number of workflow executions that ran last week for the Salesforce integration * Query all failed workflow executions for a specific user * Export all tasks that occurred in a specific month into Google BigQuery You can find example queries in the request format below. ### Generating API Keys The Task History API authorizes with a project-level API Key, instead of the Paragon User Token. API Keys provide access to *all Connected Users* in the project they are created in and can be rotated or deleted after being generated. To generate a new project-level API Key: 1. Visit your Project's Settings > API Keys. 2. Click "**Create API Key**". Provide a meaningful name for the API Key for your reference. 3. The API Key will appear on a one-time basis for you to save in a secure place. ## Examples ### Querying Salesforce workflow executions run during a week's time period ```bash REST API theme={null} GET /projects//task-history/workflow-executions?integration=salesforce&afterDate=2023-02-16T00:00:00&beforeDate=2023-02-23T00:00:00 Authorization: Bearer ``` **Response example:** ```json theme={null} { "workflowExecutions": [ { "id": "c70cafa5-4f80-45c7-b5b3-71454f6d638d", "userId": "d1f142cd-1dfe-4d76-ab4c-8f64901a9c5c", "taskCount": 1, "runDuration": 1477, "workflowId": "c395c170-4541-499c-afd1-0eccfaae49c9", "status": "SUCCEEDED", "dateEnded": "2023-02-20T06:21:43.751Z", "dateStarted": "2023-02-20T06:21:42.274Z" }, ... ], "nextLink": "https://zeus.useparagon.com/projects/d1f142cd-1dfe-4d76-ab4c-8f64901a9c5c/task-history/workflow-executions?integration=salesforce&afterDate=2023-02-16T00:00:00&beforeDate=2023-02-23T00:00:00&sortBy=ASC&offset=100", "total": 14295 } ``` ### Querying failed workflow executions for a user ```bash REST API theme={null} GET /projects//task-history/workflow-executions?userId=test@example.com&status=FAILED Authorization: Bearer ``` **Response example:** ```json theme={null} { "workflowExecutions": [ { "id": "317a396c-7dc8-4a1f-8ceb-b39d5ad845da", "userId": "123456", "taskCount": 0, "runDuration": 3847, "workflowId": "24cf377b-c7f5-40e7-9b10-6cc5d811266a", "status": "FAILED", "dateEnded": "2023-03-01T11:15:04.051Z", "dateStarted": "2023-03-01T11:15:00.204Z" }, ... ], "nextLink": "https://zeus.useparagon.com/projects/d1f142cd-1dfe-4d76-ab4c-8f64901a9c5c/task-history/workflow-executions?userId=test@example.com&status=FAILED&sortBy=ASC&offset=100", "total": 180 } ``` ## Endpoint Reference ### Base URL The Base URL of the Task History API endpoints begin with the same origin as the [Proxy](/apis/proxy) and [Users APIs](/apis/users). * For cloud customers who sign in to `dashboard.useparagon.com`, the Base URL is `https\://api.useparagon.com/projects/\/task-history` * For on-premise customers who sign in to `dashboard.`, the base URL is `https\://zeus.\/projects/\/task-history` ### Authorization Requests to the Task History API must provide an API Key as a Bearer-type `Authorization` header in the request: ```bash theme={null} GET /projects//task-history/workflow-executions Authorization: Bearer ``` ### Pagination API responses that include multiple objects will be provided in page size of 100. In the case that there are additional pages of data available, the API response will include a URL to get the next 100 records. ### Rate Limits The Task History API has a rate limit of 1,000 requests per 10 minutes. If you need higher rate limits, please reach out to our team at [support@useparagon.com](mailto:support@useparagon.com) ### API Methods ## Get workflow executions `GET` `[Base URL]/workflow-executions` Search through historical workflow executions with the below filtering options as query parameters. #### Query Parameters | Name | Type | Description | | ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | userId | String | Filter executions by a specific Connected User ID. | | workflowId | UUID | Filter executions for a specific workflow ID. | | integration | String | Filter executions for a specific integration, for example, `salesforce`. The integration name is in the same format as provided to [`paragon.connect`](/apis/api-reference#connect). | | status | String | Filter executions by a status, for example, `FAILED`. See [Workflow execution statuses](#workflow-execution-statuses) for the full list of supported values. | | beforeDate | String (Date) | Filter executions that began before a certain timestamp, in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601) (for example, `2023-02-22`). | | afterDate | String (Date) | Filter executions that began after a certain timestamp, in ISO 8601 format. | | offset | Number | Offset results by a fixed number of records. | | sortBy | String | Sort by execution time: `ASC` / `DESC`. Defaults to `DESC`. | ```json 200: OK theme={null} { "workflowExecutions": [ { "id": "c70cafa5-4f80-45c7-b5b3-71454f6d638d", "userId": "d1f142cd-1dfe-4d76-ab4c-8f64901a9c5c", "taskCount": 1, "runDuration": 1477, "workflowId": "c395c170-4541-499c-afd1-0eccfaae49c9", "status": "SUCCEEDED", "dateEnded": "2023-02-20T06:21:43.751Z", "dateStarted": "2023-02-20T06:21:42.274Z" }, // ... ], // nextLink is `null` if there are no more results "nextLink": "https://zeus.useparagon.com/projects/d1f142cd-1dfe-4d76-ab4c-8f64901a9c5c/task-history/workflow-executions?integration=salesforce&afterDate=2023-02-16T00:00:00&beforeDate=2023-02-23T00:00:00&sortBy=ASC&offset=100", "total": 14295 } ``` ## Get workflow execution by ID `GET` `[Base URL]/workflow-executions/:executionID` Get details for a specific workflow execution by its Execution ID. #### Path Parameters | Name | Type | Description | | ------------- | ---- | ------------------------------------------- | | executionID\* | UUID | The ID of the execution to get details for. | ```json 200: OK theme={null} { "id": "daff08e3-c299-4005-9799-be69090ebae1", "userId": "test", "taskCount": 1, "runDuration": 8, "workflowId": "88d20d69-e585-4eea-aac4-5b7aea0521e8", "status": "FAILED", "dateEnded": "2022-11-25T22:15:07.987Z", "dateStarted": "2022-11-25T22:15:00.038Z", "stepExecutions": [ { "id": "5fec7d78-7e10-4b4a-bdfc-292f629774bf", "stepId": "0f7cce44-d292-4555-bae8-5b904a0c4ac9", "workflowExecutionId": "daff08e3-c299-4005-9799-be69090ebae1", "status": "SUCCEEDED", "type": "TRIGGER/CRON", "start": "2022-11-25T22:15:00.075Z", "end": "2022-11-25T22:15:00.084Z", "next": [ "29e675eb-0910-4d5c-8a5c-a4a4c1895605" ], "prev": null, "inputSize": "220", "outputSize": "76" }, { "id": "29e675eb-0910-4d5c-8a5c-a4a4c1895605", "stepId": "7459bbf5-e55b-49e8-9390-084cf86752e5", "workflowExecutionId": "daff08e3-c299-4005-9799-be69090ebae1", "status": "FAILED", "type": "ACTION/REQUEST", "start": "2022-11-25T22:15:07.850Z", "end": "2022-11-25T22:15:07.873Z", "next": [], "prev": "5fec7d78-7e10-4b4a-bdfc-292f629774bf", "inputSize": "712", "outputSize": "824" } ] } ``` ### Workflow execution statuses The `status` field on a workflow execution can be one of the following values. | Status | Description | | -------------- | ------------------------------------------------------------------------------------------------------------------------------- | | `NOT_STARTED` | The execution has been queued but has not begun running yet. | | `EXECUTING` | The execution is currently in progress. | | `PAUSED` | The execution is paused until resumed or unblocked manual pause (for example, by endpoint payload, or OAuth authorization.). | | `WAITING` | A less common status for blocked executions awaiting user interaction; executions usually show PAUSED instead. | | `DELAYED` | The execution is delayed and scheduled to resume at a later time (for example, by a Delay step). | | `RATE_LIMITED` | The execution was paused because a rate limit was reached and will resume once the limit resets. | | `SUCCEEDED` | The execution finished successfully. | | `FAILED` | The execution finished with an error. | | `CANCELLED` | The execution was cancelled before it finished (for example, because the workflow was undeployed or the execution was stopped). | ## Get details for step of workflow execution `GET` `[Base URL]/workflow-executions/:executionID/step-executions/:stepExecutionID` Get details for a specific step of a workflow execution, by its Execution ID *and* Step Execution ID. These details include step input/output and run duration for the specific step. #### Path Parameters | Name | Type | Description | | ----------------- | ---- | ------------------------------------------------ | | executionID\* | UUID | The ID of the execution to get details for. | | stepExecutionID\* | UUID | The ID of the step execution to get details for. | ```json 200: OK theme={null} { "isLargeInput": false, "isLargeOutput": false, "input": {}, "output": "Error: no auth mechanism defined" } ``` ## Replay workflow execution `POST` `[Base URL]/workflow-executions/:executionID/replay` Replay a specific workflow execution, using the same version of the workflow that the execution originally ran with. *This endpoint is in beta and may not be suitable for use in your production application. Please send any feedback you have about this endpoint to *[*support@useparagon.com*](mailto:support@useparagon.com)*!* #### Path Parameters | Name | Type | Description | | ------------- | ---- | ------------------------------------------- | | executionID\* | UUID | The ID of the execution to get details for. | ```json 201: Created theme={null} // No response body ``` # Users API Source: https://docs.useparagon.com/apis/users ## Introduction The Users API allows you to query and modify the state of your Connected Users and their integrations. The API includes REST endpoints (and matching SDK functions) for identifying what integrations your user has enabled, disconnecting integrations, and disabling workflows. The API also allows your application to associate metadata with a Connected User. ✨ User Metadata is included in the **Pro Plan** and above. [Contact us](mailto:sales@useparagon.com) to schedule a demo of User Metadata or upgrade your account. ### When to use the Users API The Users API can be used for integration usage analysis or maintenance of Connected Users. For example, using the API methods, you can... * Automatically disconnect integrations when a user deletes or downgrades their account in your application * Enrich your Connected Users' profile information with email, name, and other metadata * Check if a user has enabled a certain integration and view account connection status ## Authorization Requests to the Users API are authorized with a Bearer-type `Authorization` header using a Paragon User Token: ```bash theme={null} https://api.useparagon.com/projects//sdk/... Authorization: Bearer ``` In the SDK, the Users API can be called directly after calling `paragon.authenticate`: ```js theme={null} // Authenticate the user await paragon.authenticate("", ""); // Call a Users API method, like setUserMetadata paragon.setUserMetadata({ ... }); ``` ## Examples ### Associate Connected User with metadata You can associate your user with metadata by including it in your existing SDK call to `paragon.authenticate`, as an additional parameter: ```js theme={null} await paragon.authenticate("", "", { metadata: { Name: user.fullName, Email: user.email, AccountType: user.plan, } }); ``` **Note:** `Name` and `Email` are special parameters that you can view within the [Connected Users Dashboard](/monitoring/users). They are also case-sensitive. Alternatively, you can supply the metadata from your application after authenticating: ```js JavaScript SDK theme={null} paragon.setUserMetadata({ Name: "Sean V", Email: "sean@useparagon.com", AccountType: "Pro", }); ``` ```bash REST API theme={null} // REQUEST PATCH https://api.useparagon.com/projects//sdk/me // Headers Authorization: Content-Type: application/json // Body { "meta": { "Email": "sean@useparagon.com" } } ``` #### Using Metadata in Workflows Metadata properties are available for use in workflows in the variable menu of the Workflow Editor. To select a metadata property in a workflow, you'll first need to set a sample metadata object. From any workflow, click the Options menu in the top navigation and select **Set User Metadata**: A dialog will appear to set a sample metadata object that represents the object you will pass through to the API or SDK as shown above in [Associate Connected User with metadata](/apis/users#associate-connected-user-with-metadata). Any properties set in this sample object will be available for selection in the variable menu, in the "User Info" section: ### Get Connected User info and integration state You can access Connected User info (including any associated metadata) using `paragon.getUser` or with the REST API. ```js JavaScript SDK theme={null} paragon.getUser(); // Returns: { authenticated: true, integrations: { salesforce: { enabled: true, credentialStatus: "VALID", // "INVALID" if account is unreachable providerData: {...}, // Account details for integration providerId: "00502000..." // Account's unique ID for integration } }, meta: {...}, // Metadata provided by your application userId: "12345" // User ID specified in "sub" field of Paragon User Token } ``` ```bash REST API theme={null} // REQUEST GET https://api.useparagon.com/projects//sdk/me // Headers Authorization: Bearer // RESPONSE { "authenticated": true, "integrations": { "salesforce": { "enabled": true, "credentialStatus": "VALID", "providerData": {...}, "providerId": "00502000..." } }, "meta": {...}, "userId": "12345" } ``` #### Validating account status with the `credentialStatus` property If a previously connected account is unreachable (e.g. your user revokes access from the integration), the Connect Portal will show a warning and prompt your user to reconnect their account: You can check for this condition with the SDK with the `credentialStatus` property. For example: ```js theme={null} paragon.getUser(); // Returns: { integrations: { salesforce: { enabled: false, credentialStatus: "INVALID", ... } }, ... } ``` If you are using the [Headless Connect Portal](/connect-portal/headless-connect-portal), you should show a reconnection prompt when `credentialStatus` is not `"VALID"`. You can initiate a reconnection flow with the same function used to start a connection flow: [.installIntegration(integrationType: string, installOptions?: InstallOptions) -> Promise\](/apis/api-reference#installintegration). ### Disconnecting integrations Integrations can be disconnected using `paragon.uninstallIntegration` or with the REST API. When an integration is disconnected, workflows for that integration will stop running for the authenticated user and any saved User Settings will be cleared. ```js theme={null} // Use the integration name, as used in paragon.connect(); await paragon.uninstallIntegration("salesforce"); ``` Get the ID of the integration you want to disconnect, with the `/sdk/integrations` endpoint: **Request** ```bash theme={null} GET https://api.useparagon.com/projects//sdk/integrations // Headers Authorization: Bearer ``` **Response** ```json theme={null} [ { "id": "", "type": "salesforce", ... }, {...} ] ``` The `` can be used to disconnect the integration for the user: **Request** ```bash theme={null} DELETE https://api.useparagon.com/projects//sdk/integrations/ // Headers Authorization: Bearer ``` # Concurrency SLA Source: https://docs.useparagon.com/billing/concurrency-limits Learn how concurrency is calculated in Paragon. Paragon's concurrency SLA is the number of workflow step executions that can run at the same time across all of your [Connected Users](/billing/connected-users). This is a shared pool of execution capacity for [Workflows](/workflows/overview) for your subscription. ActionKit and Managed Sync usage are not impacted by the concurrency SLA. For example, if you have a concurrency SLA of 20, Paragon can run up to 20 workflow steps in the background at the same time. Those 20 step executions could come from 20 different workflows, several Connected Users triggering the same workflow, or a single workflow that fans out into many steps. ### Concurrency Levels Our Concurrency SLA for our standard plans is as follows: | Plan | Concurrency SLA | | -------------- | ----------------------------------------------------------------------------------- | | **Trial** | **5** step executions | | **Pro** | **20** step executions | | **Enterprise** | - Cloud: **50** step executions
- On-premise: Up to **1,000** step executions | Enterprise customers may contact their Customer Success Manager to configure their Concurrency SLA. ### How concurrency works When a workflow is triggered, Paragon queues the work to begin the execution and queues each step following until the Workflow is completed. If concurrency capacity is available, the step begins running. If all concurrency slots are already in use, the step remains queued until another step finishes and a slot becomes available. **Concurrency is shared across your workflows and Connected Users.** For example, with a concurrency SLA of 20: * If 12 step executions are running for User A and 8 are running for User B, your subscription is using all 20 slots. * If another workflow is triggered while those 20 slots are in use, Paragon accepts the new execution but waits to run its next step. * When one of the running steps finishes, queued work can begin using the freed slot. Concurrency is separate from your monthly [task usage](/billing/tasks). Concurrency controls how many workflow steps can run simultaneously. Task usage measures how many billable tasks are completed during your billing cycle. ### How queued work is prioritized When a workflow execution is submitted, Paragon assigns it a queue priority. Most workflows are prioritized in the order they arrive, and queued steps later in the same workflow keep that original priority. This means standard workflow executions generally continue moving from start to finish in arrival order as concurrency slots become available. Request-triggered workflows that include a [Response step](/workflows/triggers/request-trigger#sending-a-response) are treated differently: because the original HTTP request is waiting for Paragon to reach the Response step, these workflows receive a higher priority than standard asynchronous workflows. This helps Paragon return the synchronous response before the request timeout. Request-triggered workflows without a Response step do not use this higher-priority path; they return `202 Accepted` immediately and continue as standard asynchronous workflow executions. Priority does not increase your concurrency SLA. It only affects which queued step executions are selected next when capacity is available. ### High-volume workflow handling [Fan Out](/workflows/using-fan-out) steps can create many step executions at once because each item in the array runs the steps inside the Fan Out branch. A large Fan Out occurs when the array passed into the Fan Out resolves to **50 or more items**. For example, a workflow that queries 75 new records and then fans out over those records is treated as a large Fan Out. Paragon treats these Fan Outs differently because one workflow can suddenly create thousands of branch executions. To keep that high-volume work from crowding the standard workflow execution queue, Paragon routes large Fan Out work into a dedicated queue. Dedicated Fan Out queues help isolate high-volume Fan Out work from other workflow execution queues, but they do not bypass your concurrency SLA. They are still part of the same shared concurrency pool for your subscription. Dedicated queues receive a concurrency assignment based on the current queue backpressure (in pending/waiting step executions). The Workflow Engine automatically balances available concurrency slots between your project's queues based on backpressure. For example, if a workflow fans out over 1,000 records and the first step inside the Fan Out is an integration action: * Paragon will detect a large Fan Out, so the workflow will not run 1,000 integration actions simultaneously. * Fan Out branch executions will wait in the dedicated Fan Out queue and run as concurrency slots and workers are available. * Multiple concurrency units may be used if multiple branch executions are running at the same time, capped by your subscription's shared concurrency SLA (shared with work occuring in other workflows). ### What happens if I reach my Concurrency SLA? When you reach this SLA, Paragon does not reject new workflow executions because of concurrency. New step executions are queued and show as **Not Started** on the [Monitoring](/workflows/viewing-workflow-executions) page, under the Workflows tab. In filters and API responses, this queued state may also appear as `QUEUED` or `NOT_STARTED`. Paragon accepts and stores all queued executions. They begin running once the number of active step executions drops below your concurrency SLA. To upgrade your Paragon subscription to a higher usage tier for concurrent workflows, [contact Sales](mailto:sales@useparagon.com) or reach out to your Customer Success Manager. # Connected Users Source: https://docs.useparagon.com/billing/connected-users Learn how Connected Users are counted in Paragon. Connected Users represent your customers that are connected to integrations in Paragon. A Connected User typically represents an organization, but can be implemented to represent any entity, such as an individual user. Each Connected User is a **unique User ID connected to at least 1 integration.** A User ID is the subject (`sub`) field of the Paragon User Token used to [authenticate to the API or SDK](/getting-started/installing-the-connect-sdk#3.-call-paragon.authenticate). You can view and manage your Connected Users in the Paragon dashboard. Learn more in [Managing Connected Users](/monitoring/users). ## Connected User limits and pricing Your Paragon subscription includes a limit on Connected Users. You can view this limit and current usage in the header of the [Connected Users Dashboard](/monitoring/users). All [Admin users](/managing-account/teams#managing-roles-and-permissions) in your organization will receive automated email notifications when your usage reaches 70%, 85%, and 100% of your Connected Users limit. ### What happens if I reach my Connected Users limit? When you exceed this limit, new Connected Users will be unable to connect integrations. **Existing Connected Users will *****not***** be impacted**, and Workflows for existing Connected Users will continue to run. You can reduce your usage of Connected Users by deleting inactive users from the [Connected Users Dashboard](/monitoring/users). To upgrade your Paragon subscription to a higher usage tier for Connected Users, [contact Sales](mailto:sales@useparagon.com) or reach out to your Account Manager. # Task Usage Source: https://docs.useparagon.com/billing/tasks Learn how tasks are counted in Paragon. A task is a unit of work that occurs in the Paragon platform on behalf of your Connected User. * In [Workflows](/workflows/building-workflows), each successful Action, Request, and Function are counted as tasks. You can see which steps succeeded in the workflow execution view of [Monitoring > Workflows](/workflows/viewing-workflow-executions) (see screenshot below). * All [Proxy API](/apis/proxy) requests are counted as tasks. ## How workflow steps count towards tasks The following steps count as tasks: * [Integrations](/resources/integrations) (e.g. Salesforce, Slack, Google Sheets) * [Request](/workflows/requests) * [Function](/workflows/functions) The following steps **do not** count as tasks: * [Triggers](/workflows/triggers) * [Conditional](/workflows/using-conditionals) * [Fan Out](/workflows/using-fan-out) * Response * [Delay](/workflows/using-delay) **Note:** While the Fan Out itself doesn't count as a task, the contents within Fan Outs count as tasks per iteration. ## Task limits The task limit is the maximum number of tasks you can run before your workflows stop executing during the current billing cycle. ## How task usage resets Task usage resets at the beginning of your billing period each month. Unused tasks will not roll over to the next billing period. ### What happens if I reach my task limit? If you are on a legacy plan that bills by task usage, you'll receive notification emails from Paragon as you get closer to your task limit. We'll send an email notifying you that your workflows have stopped executing. Users on any of our [paid plans](https://www.useparagon.com/pricing) have a five-day grace period to upgrade before workflows stop executing. Any unfinished tasks will show up on the [Monitoring](/workflows/viewing-workflow-executions) page as a failed workflow. You can [replay stopped workflows](/workflows/viewing-workflow-executions#editing-and-replaying) when your billing cycle restarts or you upgrade your plan. Need more tasks? Upgrade to a [paid plan](https://useparagon.com/pricing) today! # Building with Agents Source: https://docs.useparagon.com/building-with-agents Use Paragon's Agent Skills directly with your agentic IDE of choice ## Paragon Skill **The Paragon Skill is used within your coding agent** (Claude Code, Cursor, Codex, OpenCode, etc.) to help you **set up Paragon in your application**. The Paragon Skill provides your agent with context on how to: 1. **Set up the [Paragon SDK](/getting-started/installing-the-connect-sdk)**. 2. **Embed the [Connect Portal](/connect-portal/connect-portal-customization)**, a prebuilt component to guide your users through integration connection flows. Paragon Skill in OpenCode After running these setup steps, you'll have everything you need to get started with [ActionKit](/actionkit/overview), [Managed Sync](/managed-sync/overview), and [Workflows](/workflows/overview). ## Getting Started ### Recommended: Installing via the Skills CLI The `npx skills` CLI by Vercel automatically adds the Paragon Skill for the most popular agentic IDEs. ```bash theme={null} npx skills add useparagon/paragon-skills ``` Update the Paragon Skill with the following command: ```bash theme={null} npx skills update ``` ### Alternative: Manual Installation 1. Navigate to the `skills/` directory for your agentic IDE of choice, e.g. ``` ~/.cursor/skills/ ~/.claude/skills/ ~/.agents/skills/ ~/.config/opencode/skills/ ``` 2. Clone the [Paragon Skills Repo](https://github.com/useparagon/paragon-skills) in the `skills/` directory: ```bash theme={null} git clone https://github.com/useparagon/paragon-skills.git ``` ## Using the Skill Your agent should naturally detect when the Paragon Skill is needed. In some cases, it may be useful to reference the skill directly by name (i.e. "Using the Paragon Setup Skill..." or "/paragon-setup-skill"). ### Starter Prompts ```markdown Add the Paragon SDK wrap theme={null} /paragon-setup-skill Look at my app and set up the Paragon SDK, including all dependencies and required setup steps. I will provide the following environment variables for your reference: - `PARAGON_PROJECT_ID`: The Paragon Project UUID. - `PARAGON_SIGNING_KEY`: The Signing Key as a PKCS8-encoded private key. ``` ```markdown Build an integration catalog wrap theme={null} /paragon-setup-skill Build an integration catalog for the integrations defined in my Paragon project. ``` ```markdown Add JWT signing theme={null} /paragon-setup-skill Set up auth for using the Paragon SDK. ``` # API Release Notes Source: https://docs.useparagon.com/changelog/api Release notes for new versions of the Paragon REST API. This page lists all breaking changes for the Paragon REST API. We make a best effort to keep our API endpoints backwards-compatible with existing usage, but in cases where that is not possible, we will provide advanced notice and guidance on how to adapt to the changes. ## Standardized ActionKit pagination parameters We are standardizing pagination across ActionKit so developers and agents can use one consistent pagination pattern across list and search actions, regardless of whether the underlying provider uses cursors, page numbers, offsets, or skip tokens. **Affected API:** * [ActionKit Tools API](/actionkit/api-reference) **What's changing:** **Pagination input parameters**: * Paginated ActionKit actions will support `paginationParameters.pageCursor` as the standard way to request the next page of results. Treat this value as an opaque string, even when the underlying integration uses a numeric page number or offset. * Actions that support page sizing will support `paginationParameters.limit` as the standard page size parameter. **Existing pagination input parameter names will remain supported** If your application already passes action-specific pagination input keys (such as `page`, `pageNo`, and `pageNumber`), those requests will continue to work. For new implementations, we recommend using `paginationParameters.pageCursor` and, when supported, `paginationParameters.limit`. **Pagination response parameters**: * Paginated responses will standardize on `nextPageCursor` as a string when another page is available, and `null` when there are no more pages. **Breaking change** Actions that previously returned `false` or `""` for `nextPageCursor` at the end of pagination will now return `null`. ## What do I need to do? **Handle the breaking change in response parameters:** * If you currently check for `nextPageCursor === false` or `nextPageCursor === ""` to detect the end of pagination, update that logic to handle `nextPageCursor === null`. **(Optional) Standardize your pagination code:** * For all ActionKit pagination code, pass the returned `nextPageCursor` value into `paginationParameters.pageCursor` on the next request. * Treat `nextPageCursor` as an opaque string. Avoid parsing it as a number or calculating the next page value in your application code. ## When will these changes be released? * Changes to set `nextPageCursor` as `null` will begin on July 31, 2026 and will gradually roll out across all ActionKit integrations. Updates will be propagated to the Tool-specific docs in the [ActionKit Integration Reference](/actionkit/integrations/slack/overview). * We recommend updating your application code to handle `nextPageCursor === null` (or falsey values) as a possible condition for the end of pagination during this transition period. ## Custom Integration identifiers are now immutable Before this change, changing the display name of a Custom Integration would result in a change in the integration identifier/slug (used in `paragon.connect`) and the Paragraph source path (after a `para pull`). For example, changing "TaskLab" to "Apex Tasks" would result in a change from `custom.tasklab` to `custom.apextasks`. **This identifier is now immutable and set at the time your Custom Integration is created.** For existing Custom Integrations, the identifier will be set immutably to the same value it currently has in your project. **Existing Custom Integration identifiers are preserved** Any hard-coded references you may use to existing Custom Integration identifiers will continue to work as expected, since the identifier has been set immutably to its current value. Any *future* changes to the display name will no longer impact this identifier. ## What do I need to do? * Treat the `slug` returned by the API as the source of truth for Custom Integrations. If your application already uses the `slug` returned by the API as the source of truth for identifiers, no changes are required. * Replace any logic in your application that may derive Custom Integration identifiers from the display name with the `slug` property provided by the API. A published Custom Integration's identifier will no longer change when its display name changes. * Upgrade the `@useparagon/connect` SDK to v2.3.1 or later. * `@useparagon/connect` SDK versions \< 2.3.1 (which derive the identifier from the integration name) will continue to use name-derived identifiers and work without issue. You can upgrade to v2.3.1 or later to use the current, immutable identifiers. * Upgrade `@useparagon/paragraph` to v1.1.1 or later. ## When were these changes released? * These changes were released on April 2, 2026. Platform versions of >= `v2026.0402` will include this update. ## Updates to GET /sdk/integrations and Proxy API To improve the ergonomics of the API, we are introducing a few changes to the GET `/projects/:projectId/sdk/integrations` and Proxy API endpoints for Custom Integrations. We are also removing some unnecessary fields from the response of the GET `/projects/:projectId/sdk/integrations` endpoint to improve performance. Please review these changes to ensure that your application is not using any of the fields scheduled for removal. **Affected endpoints:** * GET `/projects/:projectId/sdk/integrations` * [Proxy API](/apis/proxy) **Breaking changes:** * In GET `/projects/:projectId/sdk/integrations`, the `type` field of Custom Integrations will now be the full slug that is used in `paragon.connect` calls. ```diff theme={null} { "id": "77210f70-4f20-4eac-bded-825732b229c3", "projectId": "1ea8024c-23a7-4885-b925-c50d0faf9318", "customIntegrationId": "d8fe6169-8119-4cb0-a7a9-c2b18aff2c07", "name": "Example", - "type": "custom", + "type": "custom.example", "isActive": true, "configs": [...], "workflows": [...], "customIntegration": { "id": "d8fe6169-8119-4cb0-a7a9-c2b18aff2c07", "projectId": "1ea8024c-23a7-4885-b925-c50d0faf9318", "name": "Example", "isPublished": true, "slug": "custom.example" }, "hasCredential": true, "connectedUserLimitOnDevCred": 0, "connectedUserLimitReached": false, "brandColor": "#000000", "needPreOauthInputs": false, "authenticationType": "oauth", "sdkIntegrationConfig": null } ``` * In GET `/projects/:projectId/sdk/integrations`, some unnecessary fields are being removed from Integrations: * To optimize the performance of this endpoint, some fields of Integrations are being removed. Please ensure that the following fields are not in use by your application: * `integration.dateCreated` * `integration.dateUpdated` * `integration.resourceId` * `integration.configs[].dateCreated` * `integration.configs[].dateUpdated` * `integration.configs[].integrationId` * `integration.workflows[].dateCreated` * `integration.workflows[].dateUpdated` * `integration.workflows[].teamId` * `integration.workflows[].isOnboardingWorkflow` * `integration.workflows[].workflowVersion` * `integration.customIntegration.dateCreated` * `integration.customIntegration.dateUpdated` * `integration.customIntegration.projectId` * `integration.customIntegration.oauthScopes` * `integration.customIntegration.oauthIncludeClientAuthorizationHeader` * `integration.customIntegration.usePKCEInCodeExchange` * `integration.customIntegration.apiBaseUrl` * `integration.customIntegration.testEndpointPath` * `integration.customIntegration.isTestEndpointVerified` * `integration.customIntegration.apiAuthorization` * `integration.customIntegration.userProfileConfig` ```diff theme={null} { "id": "f02dba2f-d149-4664-958d-138d546d987b", - "dateCreated": "2023-10-23T17:03:16.211Z", - "dateUpdated": "2023-10-23T17:03:16.211Z", "projectId": "1ea8024c-23a7-4885-b925-c50d0faf9318", "customIntegrationId": "208d5d99-bbb4-4147-b991-83e220da192c", - "resourceId": null, "type": "custom.spotify", "isActive": false, "configs": [ { "id": "70c9c3f6-f68c-4e06-921e-0ee678bc6a9f", - "dateCreated": "2023-10-23T17:03:16.211Z", - "dateUpdated": "2023-10-23T17:03:16.211Z", - "integrationId": "f02dba2f-d149-4664-958d-138d546d987b", "values": { "accentColor": "#000000", "description": "play music", "workflowMeta": {} } } ], "workflows": [ { "id": "0d6660ac-2396-4442-98a3-4321fa6ce42b", - "dateCreated": "2024-06-04T13:16:32.660Z", - "dateUpdated": "2024-06-04T13:17:03.374Z", "description": "Example Workflow", "projectId": "1ea8024c-23a7-4885-b925-c50d0faf9318", - "teamId": "72c5150b-6bfa-4972-9845-1350f3ee18bc", - "isOnboardingWorkflow": false, "integrationId": "b62baf56-5030-4105-9c78-dbf307e1ee94", - "workflowVersion": 1, "steps": [] } ], "customIntegration": { "id": "208d5d99-bbb4-4147-b991-83e220da192c", - "dateCreated": "2023-10-23T17:03:16.211Z", - "dateUpdated": "2023-10-23T17:03:16.211Z", - "projectId": "1ea8024c-23a7-4885-b925-c50d0faf9318", "name": "Spotify", "authenticationType": "oauth", "inputFields": [], "oauthAuthorizationUrl": { "type": "TOKENIZED", "parts": [{ "type": "VALUE", "value": "https://accounts.spotify.com/authorize", "dataType": "STRING" }], "dataType": "STRING" }, "oauthAccessTokenUrl": { "type": "TOKENIZED", "parts": [{ "type": "VALUE", "value": "https://accounts.spotify.com/api/token", "dataType": "STRING" }], "dataType": "STRING" }, - "oauthScopes": "user-read-private", - "oauthIncludeClientAuthorizationHeader": true, - "usePKCEInCodeExchange": false, - "apiBaseUrl": { "type": "TOKENIZED", "parts": [ { "type": "VALUE", "value": "https://api.spotify.com/v1", "dataType": "STRING" } ], "dataType": "STRING" }, - "testEndpointPath": { "type": "TOKENIZED", "parts": [], "dataType": "STRING" }, - "isTestEndpointVerified": false, - "apiAuthorization": { "type": "bearer", "token": { "type": "TOKENIZED", "parts": [ { "type": "CONNECT_CREDENTIAL_FIELD", "fieldType": "OAUTH_ACCESS_TOKEN" } ] } }, "isPublished": true, - "userProfileConfig": {}, "slug": "custom.spotify" }, "hasCredential": true, "connectedUserLimitOnDevCred": 0, "connectedUserLimitReached": false, "name": "Spotify", "brandColor": "#000000", "needPreOauthInputs": false, "authenticationType": "oauth", "sdkIntegrationConfig": null } ``` **Other non-breaking changes:** * Proxy API now supports using the `custom.name` format when sending Proxy requests for Custom Integrations * Instead of passing in a `customIntegrationId`, you will now be able to pass in `custom.name` (the same slug used for `paragon.connect`) directly to the Proxy API. * Example: ```diff theme={null} - https://proxy.useparagon.com/projects/:projectId/sdk/proxy/custom/:customIntegrationId/:path + https://proxy.useparagon.com/projects/:projectId/sdk/proxy/custom.integrationName/:path ``` ## What do I need to do? * Verify that your use of `integrations.type` for Custom Integrations does not rely on the value being exactly `"custom"`. The new `type` field will include the full slug value, e.g. `custom.integrationName`. * Verify that you are not using any of the fields scheduled for removal from the API. ## When were these changes released? * These changes were released on July 7, 2025. # Paragraph Release Notes Source: https://docs.useparagon.com/changelog/paragraph Release notes for new versions of the Paragraph core libraries and CLI. ### Updating to the latest version To update your Paragraph project to the latest version, run the following commands in your terminal: ```bash theme={null} # Update the CLI npm install -g @useparagon/cli # Update the core libraries in your project para install --sync-versions ``` ## Release Notes * Fixed an issue where `para build` and `para push` could rewrite Cron trigger intervals that do not evenly divide the schedule unit. Interval schedules are now preserved correctly through pull, build, and push. * Fixed an issue where `para pull` generated an invalid `ResourceAuthorizationConfig` import in API resource `config.ts` files, causing TypeScript errors during `para build`. Generated resource configs now only import the symbols they use. * Fixed an issue where `para push` could overwrite the published state of a Custom Integration, causing it to disappear from the Connect integrations page. Custom Integrations synced through Paragraph are now always kept published. * Fixed an issue where the project picker in `para init --create-from-existing` showed the project title for the Development environment instead of "Development". The picker now labels and orders Development, Staging, and Production to match the dashboard. * Fixed an issue where `para pull` exported `bodyType` on GET/DELETE requests for BYO user profile configs and API resource test requests, causing TypeScript errors during `para build`. * Added `showWatermark` to custom integration config files, allowing custom integrations to control Connect Portal branding. Running `para pull` no longer drops the `showWatermark` field from regenerated `config.ts` files. * Fixed an issue where `objectMapping` was not supported on GitHub user-level triggers (e.g., Issue Created with Organization scope), causing runtime validation errors and TypeScript compilation errors. * Fixed an issue where custom webhook trigger type definitions were missing the `rawBody` field, preventing correct typing of the raw webhook request body. * Fixed an issue where pressing Escape during integration selection in `para new integration` could incorrectly select an integration instead of canceling. * Fixed an issue where `para build` could incorrectly change custom trigger webhook response parameters that read incoming request headers after a pull, build, and push. * Updated the Mailgun library types in Function step to the latest version. * Added support for the `pdf-lib` library in Function steps. * Fixed an issue where `para push` could override the **Apply field mapping** setting on HubSpot workflow trigger steps. * Pinned all dependency versions of Paragraph CLI. * Added `slug` field to Custom Integrations for consistent naming between the API and CLI. Renaming a Custom Integration's display name no longer affects directory or import paths in Paragraph: **Custom Integration identifiers are now immutable** Before API version [2026-04](/changelog/api#2026-04), changing the display name of a Custom Integration would result in a change in the integration identifier/slug (used in `paragon.connect`) and the integration source path (after a `para pull`). This identifier is now immutable and set at the time your Custom Integration is created. For existing Custom Integrations, the identifier is set immutably to the same value it currently has in your project. Upgrading to v1.1.1 will ensure that this immutability is correctly reflected in your Paragraph project. Learn more about these changes in the [API Changelog](/changelog/api#2026-04). * Fixed type errors with some available Function step libraries (e.g., `libphonenumber`, `ioredis`, `@aws-sdk/client-sqs`). * Fixed webhook trigger step output typing so that `triggerStep.output.result` is no longer typed as `unknown`, resolving TypeScript compilation errors in synced and exported code. * Added support for OAuth ROPC (Resource Owner Password Credentials) authentication and custom request options (`requestOptions`) in Custom Integrations. **Change in defaults for auth URL parameters** Before v1.1.0, Custom Integrations using OAuth automatically included `access_type=offline` as part of the query parameters for the initial authorization URL. This query parameter is no longer included by default. If you need to add this parameter (notably, Google requires this parameter for refresh tokens), define it in `requestOptions.authorizationCodeOptions.configuration.queryParams`. ```ts theme={null} // In custom.[integration name]/config.ts requestOptions: { authorizationCodeOptions: { configuration: { queryParams: { access_type: 'offline', }, }, }, }, ``` * Fixed `para pull` to include the "Add Basic Auth header" toggle under `requestOptions.accessTokenOptions` for OAuth-type Custom Integrations. * Added support for `paragonUtils` and field mapping object sources in Function steps. * Fixed an issue where referencing File variables in the "Raw" body option of a Request step could cause file data to incorrectly be stringified after pushing changes from Paragraph. * Updated Paragraph's `mysql2` and `form-data` dependencies for improved compatibility. * Added support for workflow execution source variables (`workflowExecutionId`, `projectId`, `workflowId`) that can be synced between Paragon and Paragraph using `para pull` and `para push`. * Adds support for "Include Client ID and Secret in Token Exchange" option for OAuth 2.0-type Resources. * Improves error messaging for deployment failures that occur during `para push`. Error messages will now include workflow and step names for clarity. * Adds support for using GraphQL body types in Request steps. * Adds support for custom cron expressions for Scheduler triggers. * Fixes an issue where using literal array values with `StringIsIn` operators could result in the following error: ``` You can not perform string operation on non-string data type. ``` * Fixes an issue where Request steps with query parameters in the URL and in the `params` object could cause conflicts that lead to parameters being removed after `para push`. * Improves variable referencing support by allowing for "bare" references. * Previously, variables would need to be interpolated as template strings: ```ts theme={null} const functionStep = new FunctionStep({ parameters: { key: `${requestStep.output.body}` } }); ``` * Now, they can be referenced directly: ```ts theme={null} const functionStep = new FunctionStep({ parameters: { key: requestStep.output.body } }); ``` * Adds a generic type parameter for `FunctionStep` to allow for customizable output types. * Fixes `Object literal may only specify known properties` errors when pulling a Paragon project that uses a combination dropdown input type in the Connect Portal User Settings. * Updates compilation error messaging to reveal more detailed information instead of the following generic errors: * `persona.meta.js is not found in project` * `Could not found [...]/dist/integrations/[...]/config.js.` * Fixes a compilation issue that could occur when using the `para pull` command in projects that have a Pipedrive integration. * Fixes an issue where pushing new projects initialized with Paragraph could result in a "Failed to get project comparison." error. * Fixes an issue where Request Step Pagination used in Custom Integrations could result in a compilation error. * Adds support for referencing combination inputs, such as the Azure DevOps State input. * Adds support for using numeric values in Custom Dropdown inputs defined in Paragraph projects. * Fixes an issue where nested step variables in a Request Step JSON body could create invalid references when pushing to a Paragon project. * Adds support for new Field Mapping input types, now supported for any integration. [Learn more here](/connect-portal/field-mapping). * Fixes an issue where `para pull` could fail if the workflow name contains a `/` character. * Adds support for Password-type inputs in the Connect Portal configuration. * Fixes an issue where Request steps without query parameters could cause an extra `?=` to be added to the URL after pulling/pushing. * Adds full support for pulling Resource Request steps. * Fixes type issues for App Event triggers using Field Mapping. * Fixes an issue where a nested object in the Request body could be pulled incorrectly as `[object Object]`. # Product Updates Source: https://docs.useparagon.com/changelog/product-updates Monthly updates on new features and improvements to the Paragon platform. ## Releasing Triggers API in Beta Triggers API [Triggers API](/actionkit/triggers) is a single API to subscribe to all of your users' integration events. With just one API call, you can subscribe to any of your users' events like Slack mentions, GitHub commits, or Notion updates using Paragon's pre-built collection of triggers and Custom Webhooks. 📖 Learn more about Triggers API [here](/actionkit/triggers). # Managed Sync Improvements ## Multi-Account Authorization support for Managed Sync We have released support for Multi-Account Authorization for Managed Sync. This allows you to connect multiple accounts of the same integration type for a Connected User and enable individual syncs for each by specifying the relevant credential ID. 📖 Learn more about Multi-Account Authorization for Managed Sync [here](/managed-sync/sync-api#multi-account-authorization). ## MIME-type Filtering for File Syncs We have released support for MIME type filtering across all File Storage sync pipelines (e.g. Google Drive, SharePoint, OneDrive). This allows you to restrict synced files to specific content types on both initial and incremental syncs. 📖 Learn more about MIME type filtering for Google Drive syncs [here](/managed-sync/integrations/googledrive#param-mime-types). ## New webhook events for periodic full syncs and errors We have released new webhook events to give you greater visibility into the health of your Managed Syncs. The `sync_periodic_full_sync_errored` event fires when a periodic full sync fails to complete successfully, helping you detect and debug these sync failure cases. 📖 Learn more about Managed Sync webhook events [here](/managed-sync/webhooks). ## Field Mapping in Function Steps We have released support for Field Mapping in Function Steps. This gives you full control over mapping values from your application to fields in your integration. Take advantage of new options for advance mapping patterns such as mapping an array of objects or handling deeply nested fields. ```javascript theme={null} // Map 3rd-party objects to your app objects using `mapIntegrationObjects` function yourFunction(parameters, libraries) { const { paragonUtils } = libraries; const { fieldMapping, records } = parameters; return paragonUtils.mapIntegrationObjects(fieldMapping, records); } ``` 📖 Learn more about how to use Field Mapping in Function Steps [here](/connect-portal/field-mapping#using-field-mappings-in-function-steps). ## Paragon is now HIPAA compliant Paragon is now HIPAA compliant We are pleased to announce that **Paragon is now HIPAA compliant for self-hosted installations**. In January, we've implemented: * **Fine-Grained User Roles**: Invite collaborators to your Paragon account with project-specific access to only select Release Environments (e.g. Development and Staging only) or to specific projects. * **Audit Logs** (available to on-prem environments only): On-prem environments now emit audit logs for dashboard logins, viewing customer data in Monitoring, and changes to sensitive data in your projects. * **Access Hardening**: A number of security improvements have been rolled out to our dashboard login and token management endpoints. 📧 [Contact our success team](mailto:success@useparagon.com) if you're interested in our HIPAA compliance offering. ## Improvements to Provider Data for Workflows for 10 Integrations We have exposed additional Provider Data fields in Workflows. This includes fields for region IDs in AWS, phone numbers in WhatsApp, Pod IDs in Insightly, and access point references in Adobe Acrobat Sign. 📖 Learn more about using Provider Data in Workflows [here](/workflows/building-workflows#using-dynamic-data). ## Introducing Triggers API Triggers API Triggers API is an ActionKit complement that lets you subscribe to webhooks from any integration your users have connected to. With just one API call to the Triggers API subscription endpoint, you can subscribe to any of your users' events like Slack mentions, GitHub commits, or Notion updates. 👉🏼 Join the beta [here!](https://useparagon.notion.site/2f861d1eb9a880979793e488ac6132db) ## New Actions and Triggers for ServiceNow We have released new ServiceNow triggers for creating and updating records in ServiceNow. Additionally, we've added support for searching records in your users' ServiceNow accounts. 📖 Learn more about the new ServiceNow capabilities [here](/resources/integrations/servicenow). ## User-Configured OAuth for Outlook We have released support for allowing connecting users to provide their own OAuth credentials for their Outlook integrations. 📖 Learn more about the improvements to the Outlook integration [here](/resources/integrations/outlook). ## New Actions for GitHub, Outlook, Microsoft Teams, and Zendesk We have released new actions for fetching files and their changes in GitHub, emails in Outlook, messages in Microsoft Teams, and ticket comments in Zendesk. You can now access the following actions when building workflows across these integrations: **GitHub** * Get Pull Request by Number * Get Files Changed in PR * Get File **Outlook** * Get Message by ID **Microsoft Teams** * List Messages in a Chat **Zendesk** * Get Ticket Comments 📖 Learn more about the new [GitHub actions](/resources/integrations/github), [Outlook actions](/resources/integrations/outlook), [Microsoft Teams actions](/resources/integrations/microsoft-teams), and [Zendesk actions](/resources/integrations/zendesk). ## Improvements to Custom Integration Builder (Beta) We have released improvements to the Custom Integration Builder, providing additional controls for supporting integrations with unorthodox OAuth flows. These authentication improvements are currently in beta and are available to all users. ## Ticketing Integrations for Managed Sync We have released support for Ticket Syncs in Managed Sync. With these pipelines, you can now sync Tickets from your users' Support Ticketing workspaces to your app. You can now create Ticket Syncs for the following integrations: * ClickUp * Freshdesk * Intercom * Monday.com * ServiceNow * Zendesk 📖 Learn more about the new Ticketing Sync pipelines and view the schema [here](/managed-sync/api/ticket-schema). ## CRM Integrations for Managed Sync We have released several Sync pipelines for CRM Objects in Managed Sync. With these pipelines, you can now build durable, high-volume syncs for Contacts, Companies, Deals, and any Custom Objects from your users' CRM accounts. We've released pipelines for the following integrations: * Salesforce * HubSpot * Pipedrive * Zoho CRM * Dynamics 365 Sales 📖 Learn more about the new CRM Sync pipelines [here](/managed-sync/api/contact-schema). ## Download File Content in ActionKit **New in ActionKit:** actions to download files from Google Drive, OneDrive, Box, and more. Use the ActionKit file download actions for use cases like on-demand file retrieval for your AI agent or handling files in your workflow builder. The following integrations support these new actions: * Google Drive * Box * OneDrive * Amazon S3 * Dropbox * Dropbox Sign 📖 See the [ActionKit](/actionkit/integrations/googledrive/GOOGLE_DRIVE_DOWNLOAD_FILE) docs to see how the Google Drive Download works and find other download actions you're looking for. ## Managed Sync Managed Sync We have released Managed Sync, a purpose-built product for fully managed high volume data ingestion and permissions. Managed Sync includes two key APIs: * **Sync API** - easily enable full syncs of customers' 3rd-party data with two API calls. [Learn more about the Sync API](/managed-sync/sync-api). * **Permissions API** - check users' access on retrieved data without dealing with the complexities of indexing 3rd-party permissions (for RAG). [Learn more about the Permissions API](/managed-sync/permissions-api). 📖 Learn more about Managed Sync [here](/managed-sync/overview). ## Event Logs in Public Beta Event Logs We released Event Logs, the first step in providing a comprehensive view of all events that occur in your Paragon instance. Event Logs launched in public beta with visibility into ActionKit requests, Workflow triggers, and Connected User credentials. 📖 Learn more about Event Logs [here](/monitoring/event-logs). ## Released Headless Connect Portal We have released Headless Connect Portal, a new way to display the Connect Portal without the Paragon branding. Headless Connect Portal provides fully-managed authentication, so you don't need to worry about managing, storing, or refreshing your customers' credentials. Bring your existing components or design system into your Paragon integrations experience with a suite of SDK functions. 📖 Learn more about Headless Connect Portal [here](/connect-portal/headless-connect-portal). ## Field Mapping Expansion We have released extensibility improvements to allow developers to create Field Mapping settings for *any* integration in Paragon. These improvements provide full control over the Field Mapping inputs allowing you to map *any* record in a Paragon integration against a record in your application. 📖 Learn more about Field Mapping improvements [here](/connect-portal/field-mapping#passing-dynamic-fields-through-the-sdk). ## ActionKit MCP: available and open source We have released an MCP server for ActionKit, an API supported by Paragon that provides access to pre-built actions for 130+ integrations to your users’ SaaS applications. The MCP includes a few optional extensions to the ActionKit API: * Automatically prompt users to authorize integrations with the [Connect Portal](https://docs.useparagon.com/getting-started/displaying-the-connect-portal) when their account isn't yet connected * Define [Custom Actions](https://github.com/useparagon/paragon-mcp#adding-custom-actions-with-openapi) with OpenAPI files * Allow [direct API access](https://github.com/useparagon/paragon-mcp#using-experimental-proxy-api-tool) to your agent as a tool 📖 View the repository [here](https://github.com/useparagon/paragon-mcp). ## New Developer Docs Find answers and API references faster with our new developer documentation site. Releasing improved content search, AI search, and navigation helping surface answers faster. 📖 See the new [docs here](/overview). ## ActionKit and ActionKit Logs With ActionKit, AI Agents can dynamically use Paragon to connect to their users' third-party applications like CRMs, email, calendars, and ticketing systems, and pick from dozens of ActionKit’s supported actions within each application. 📖 Learn more at [docs here.](/actionkit) You can now search, view, and trace your ActionKit calls with ActionKit Logs in Task History. * Understand how your AI agent is performing ActionKit calls on behalf of your users. * Investigate why Action calls fail for particular Connected Users. * Discover which ActionKit requests your users are utilizing and the parameters used to make those requests. 📖 Learn more at [docs here.](/actionkit/actionkit-logs) ## Custom Authentication Server Support You can now configure your own authentication server with a JSON Web Key Set (JWKS) endpoint to generate and manage Paragon User Tokens. 📖 Learn more at the [docs here.](https://docs-prod.useparagon.com/getting-started/installing-the-connect-sdk#setup-with-a-managed-authentication-service) ## Custom Dropdowns in Connect Portal You can now configure *Custom Dropdowns* to prompt users to select application values in the Paragon Connect Portal. 📖 Learn more at the [docs here.](/connect-portal/workflow-user-settings/custom-dropdowns) ## Platform Usability Updates Released usability updates for long text inputs and JSON views copy buttons within the Dashboard. ## Integration Usability Improvements * Released Field Mapping inputs for the Jira integration. * Improved error messaging for Google Calendar and Google Drive integrations. * Improved authentication stability for NetSuite and Airtable integrations. ## Custom Webhook Support You can now trigger your Paragon workflows from any event in any integration that has a HTTP Webhook API with the new Custom Webhooks feature! Paragon enables you to configure webhooks to subscribe to real-time events in your users' integration applications. For example, you can now subscribe to any event in the Slack Events webhook API and trigger your Paragon workflows. 📖 Learn more in [our docs](/resources/custom-webhooks). 👉 Join the [beta here](https://share.hsforms.com/19sUGNAW8TGqotRJPx92AwAdhpe2). ## Usability, Workflow Optimizations, Security Improvements * Allow Paragon developers ability to change how sensitive inputs appear in the Connect Portal. * Display and stability improvements to the Connect Portal and workflow editor. * Improvements to fanout step performance and stability. ## 🔒 Security Update * A CSRF vulnerability related to OAuth was discovered and patched in early September. ## 🚀 New Features ✨ **[Vimeo](/resources/integrations/vimeo) Integration!** You can now connect to your users' Vimeo accounts to manage their videos and video metadata. Paragon enables you to sync data between your app and your users’ Vimeo. For example, you can manage folders of videos or access video talk tracks in Vimeo. Learn more in [our docs](/resources/integrations/vimeo). ## 🛠 Improvements * Adds further support for different types of user authentication in NetSuite. * Improves internal handling of environment secrets. * Internal improvements to the Paragon dashboard. * Improvements to Google Calendar trigger instantiation and deletion. ## 🐛 Bug Fixes * Fixes a connection issue with the Custom Integration builder. ## 🛠 Improvements * Adds a loading state on the Disconnect button in the Connect Portal. * Dark mode Connect Portal UI improvements. * Whitelists `*.googleapis.com` domains in the Integration Request Step. * Improved error messages for the Paragon SDK and Connect Proxy API. * Improved UX for Marketo connection experience. * Improvements to Jira Connect Portal user settings. * Internal security and performance upgrades. * Improved error user interface for Connect Portal authentication errors. * Improvements to the ClickUp *New Comment on Task* workflow trigger. ## 🐛 Bug Fixes * Fixes an SDK issue with `paragon.connect`. * Fixes an issue with Salesforce's textarea input field for the *Deploy Custom Field* action in the workflow editor. * Fixes an authentication issue for Google. * Fixes an issue around textArea inputs for Salesforce custom fields. * Fixes a UX issue with closing the Connect Portal and maintaining state. * Fixes an authentication issue for the External File Picker SDK feature. * Fixes an issue with uploading Files via the Integration Request Step in the workflow editor. * Fixes a display issue with the Connect Portal in the Jira integration. * Fixes an issue with the *Integration Enabled* trigger firing before required workflow values are entered. ## 🚀 New Features ✨ **Intellum Integration!**\ You can now connect to your users' Intellum accounts to manage their courses, enrollments, and users. Paragon enables you to sync data between your app and your users’ Intellum. For example, you can manage courses or update enrollments in your users' Intellum. Learn more in our docs. ✨ **LinkedIn Marketing Updates!**\ We've recategorized LinkedIn Marketing under the 'Advertising' category alongside Google Ads and TikTok Ads for better organization and updated the LinkedIn logo to maintain consistency across our platform. ✨ **ServiceNow User Settings!** Enhanced ServiceNow integrations by allowing users to specify statuses of incidents and tasks, improving the configuration options available in the Connect Portal. ✨ **Integration Enhancements!** * **Adobe AEM:** Improved authentication experience in the Connect Portal, streamlining user interactions and connections. * **PagerDuty:** Added default scopes for Classic OAuth type to facilitate better access control. * **Monday.com:** Updated the Item Updated trigger to include name change events. ✨ **Data Source Extensions:** * **Trello, ServiceNow, Linear:** We've extended our data sources for Trello (Member data), ServiceNow (Status data), and Linear (Assignee data), providing richer integration capabilities. **✨ LinkedIn Marketing Integration!** You can now connect to your users' LinkedIn Marketing accounts to manage their ad campaigns, audiences, and insights. Paragon enables you to sync data between your app and your users’ LinkedIn Marketing. For example, you can create ad campaigns or manage audiences in LinkedIn Marketing. Learn more in our docs. ✨ **Gmail Enhancements:** * **Send Message with Attachments:** We've updated our Gmail actions to include an attachment field in the "Send Message" action, enabling you to send emails with attachments seamlessly through our platform. ✨ **Slack Integration Enhancements:** * **Message Interactivity Triggers:** We’ve added support for message interactivity triggers in Slack, enabling you to create dynamic, interactive workflows based on user interactions with messages. ✨ **Integration Error Handling Improvements:** * Comprehensive error handling updates have been implemented across multiple platforms for the following integrations to enhance stability and user experience: Jira, HubSpot, Salesforce, Sage Intacct, Pipedrive, AWS S3. ## 🛠 Improvements * **Asana Integration - Archived Projects:** We have updated our Asana integration to allow users to filter out archived projects from their data sources, ensuring only active projects are visible and selectable. * **Expose Connect Credentials via SDK for Box**: Provides Connected User credentials for the Box integration to allow you to use the Box File Picker with Paragon. * **Task History Clarity:** Resolved an issue in Task History where preview user executions appeared to run, now ensuring accurate display and status reporting. ## 🐛 Bug Fixes * **Connection Error Handling:** Fixed an issue where integration errors were incorrectly thrown from `getConnectOptions` across multiple integrations like Pipedrive and Salesforce. * **Salesforce API Error Handling:** Resolved an error in Salesforce custom API requests that caused a failure when trying to read properties of an undefined object, ensuring smoother operation and data handling. * **Workflow Execution Replay Reliability:** Addressed an issue where workflow replays were failing due to incorrect handling of input data. * **Fix for Sage Intacct Integration**: Resolved an issue where passing JSON as a return format caused errors, ensuring smoother integrations with Sage Intacct. * **Fix HubSpot Actions Copy**: Updated text elements and fixed UI issues in the HubSpot integration, improving usability and consistency across the platform. * **Delete Associated Connect Credentials on Integration Deletion**: Ensured that deleting an integration also deletes associated connect credentials, preventing orphaned data and maintaining data integrity. * **Integration Error Handling Improvements:** Multiple updates to standardize and improve error handling across integrations: * Improved error messaging for User Settings and during authentication failures. * Resolved issues with capturing and displaying errors outside of integrations. * Fixed bugs related to improper error displays in test data for triggers and actions. * **Miscellaneous Fixes:** * Fixed a bug where project lists were not displayed in the intended order within our platform. * Addressed a critical bug where duplicate identifiers and a blocker in opening the Custom Integration Builder caused interruptions in user workflows. * Fixed issues across multiple stages of the LinkedIn Ads integration lifecycle for more reliable connections. * **Workflow and Integration Stability Fixes:** * **Zendesk Updates:** Improved the "Search Tickets" step and fixed trigger tests for "ticket created" and "ticket updated," ensuring more accurate and reliable ticket handling. * **Test Workflow Record Handling:** Fixed an issue where test workflows were incorrectly adding new records in the task history executions, ensuring cleaner and more accurate execution logs. * **Stability and Reliability Fixes:** * **Custom Integration Builder Stability:** Fixed a crash issue in the Custom Integration Builder on load in release environments, enhancing the stability and reliability of integration setup. * **Release and Environment Management:** * Fixed an issue where creating environments would inadvertently create two releases, streamlining the release management process. * **Error Handling and Stability Fixes:** * **Amazon S3 & Workday:** Addressed issues where errors were being returned as generic 500s, now providing more specific error messages. * **Asana:** Resolved issues where a bad client ID could cause 504 errors or stall worker-actions, enhancing system reliability. * **Zendesk:** Updated the "Search tickets" step and fixed trigger tests for "Ticket Created" and "Ticket Updated," ensuring more accurate and reliable ticket handling. * **LinkedIn Marketing:** Resolved connection issues to improve reliability and user experience. * **File Handling:** Fixed an issue where xlsx and text files were getting corrupted during upload, ensuring data integrity during file transfers. * **User Metadata Fix in SDK:** Resolved a bug where user metadata passed into `paragon.authenticate` for new connected users was returning `null` values. Metadata now persists correctly after initial creation. * **Asana Integration - Archived Projects:** Improved the Asana integration to allow users to exclude archived projects from project lists in data sources and workflow steps. * **Zendesk Action Field Update:** Enhanced the Zendesk 'Create Ticket' action with dynamically editable fields for Status, Priority, and Type fields, providing more flexibility in ticket creation. * **Linear Authentication Tooltip Corrected:** Updated the tooltip for "Authenticate as Application" in Linear integration to provide clearer guidance on its usage. * **Intellum Integration Warning Fixed:** Fixed an issue in the Intellum integration where development credentials warnings were incorrectly displayed. ## 🐛 Bug Fixes * **Salesforce Access Token Refresh Issue:** Resolved an issue where connect proxy requests in Salesforce did not refresh access tokens, ensuring continuous and secure access to Salesforce resources. * **UI Fixes in Task History:** Addressed an issue where the integration enable trigger UI was distorting in Task History, ensuring a cleaner and more user-friendly interface. * **npm Route Access Restored:** Resolved a critical issue where the `actions/configs` route in npm was being erroneously blocked by immutable message in release environments, restoring full functionality. * **Monday.com Task History Accuracy:** Fixed discrepancies between Task History and test step responses in Monday.com integrations, ensuring data consistency and reliability. * **Localhost Address Usage for Redirect URLs:** Resolved an issue in the `paragon.completeInstall` method that prevented the use of localhost addresses for the `redirectUrl` option, enhancing flexibility in development environments. * **Salesforce Connection Stability:** Addressed a bug in Salesforce integration where proxy requests did not properly refresh access tokens. * **Airtable Token Issue Resolved:** Fixed a bug where connections to Airtable would fail due to token issues, ensuring smoother integrations. * **Task Limit Error Correction:** Corrected an erroneous "Task Limit Reached" error for users on Trial plans using the Proxy APIs, enhancing the trial experience. * **Integration Request Limit Increased:** We've resolved an issue where custom integration requests with a body size greater than 10 MB would fail, now supporting larger data payloads. * **Fix for Hubspot Get Record By ID Issue:** Resolved a bug where the Get Record By ID action in Hubspot failed due to a large Request URI, ensuring seamless integration workflows. ## 🚀 New Features **✨ SAP Emarsys Integration!** You can now connect to your users' SAP Emarsys accounts to manage their contacts, segments, and campaigns. Paragon enables you to sync data between your app and your users’ SAP Emarsys. For example, you can create contacts or manage campaigns in SAP Emarsys. Learn more in our docs. * **Monday.com API Migration:** We've successfully migrated all actions, triggers, and data sources to the latest Monday.com API, ahead of the January 15th deprecation deadline. This ensures our platform remains compatible and fully functional with Monday.com services. ✨ **Shopify Trigger Enhancements!** We’ve expanded our Shopify integration with new triggers that enhance your ability to manage customer and shop data privacy: * **Customer Data Request:** You can now automate the fulfillment of customer data requests directly within our platform. * **Customer Data Erasure Request:** Easily handle requests for customer data deletion, ensuring compliance with privacy regulations. ✨ **Google Drive Picker Support:** With the new Google Drive Picker integration, you can now easily access and manage your files directly within Paragon. This feature is perfect for users who need to quickly incorporate documents into their workflows without leaving the platform. ## 🛠 Improvements * **Salesforce Integration Enhancements:** Updated our Salesforce integration to handle token expiration more effectively by including `403` status code checks. This improvement ensures more reliable connectivity by handling token renewals proactively. * **Salesforce Credential Refresh Optimization:** Enhanced credential refresh optimization has been implemented for Salesforce integrations, ensuring smoother and more efficient authentication processes. * **Improved Monday.com Integration Stability:** Resolved unexpected errors related to webhook unsubscriptions, providing a smoother experience for integrating with Monday.com. ## Updates Our [SDK](https://www.npmjs.com/package/@useparagon/connect) has been updated to version 1.0.3, which includes the following changes: * Support for `paragon.completeInstall` function ([docs](/resources/integrations/shopify)), required for Redirect Pages in published Shopify and Pipedrive integrations * Support for `allowMultipleCredentials` parameters in Headless Connect Portal functions *** You can update the SDK by running: ``` npm install @useparagon/connect ``` If you are currently using the script tag installation, these updates have been published in version 2.93.1. ## 🚀 New Features ✨ **[Amazon S3](/resources/integrations/amazon-s3) Actions!** You can now access the following actions when building workflows for Amazon S3: * Upload File * List Files * Download File * Create Folder * Delete Folder ✨ **[Dynamics 365 Business Central](/resources/integrations/dynamicsbusinesscentral) Triggers!** You can now trigger Dynamics 365 Business Central workflows when records are created, updated, and deleted in your users' Dynamics 365 Business Central accounts, making it easy to sync data in real-time between your users' Dynamics 365 Business Central and your app. Learn more in our docs. **✨ DocuSign Integration!** You can now connect to your users' DocuSign accounts to manage their documents and signatures. Paragon enables you to sync data between your app and your users’ DocuSign. For example, you can create contracts or manage signatures in DocuSign. Learn more in our docs. * **OAuth Client Credentials Authorization:** Enhanced security by adding OAuth client credentials authorization type, allowing more robust and secure integration capabilities for your applications. ## 🛠 Improvements * **Notion Integration Upgrade:** Optimized the credential refresh process for Notion, ensuring smoother and more reliable integration performance. * Improvements to our token syncing mechanism for HubSpot. * Improvements to our token syncing mechanism for OneNote. ## 🐛 Bug Fixes * **Azure DevOps Integration:** Resolved an issue where actions to create work items were failing. * **Microsoft Dynamics Credential Handling:** Fixed a bug in credential type management, ensuring smoother authentication and connection stability. * Fixes a bug where users were redirected to a blank page instead when deleting users from the Connected Users Dashboard. * **Gusto Integration Link Correction:** Updated the 'Update Employee Action' in Gusto to correctly redirect to the 'API Versioning' guide, ensuring accurate and helpful documentation access. ## 🚀 New Features ✨ **[PagerDuty](/resources/integrations/pagerduty) Integration!** You can now connect to your users' PagerDuty accounts to manage their incidents and on-call schedules. Paragon enables you to sync incident data between your app and your users’ PagerDuty. For example, you can add new incidents or manage on-call schedules in PagerDuty. Learn more in [our docs](/resources/integrations/pagerduty). ✨ **New [Notion](/resources/integrations/notion) Triggers!** You can now access the following triggers when building workflows for Notion: * Page Created * Page Updated ## 🐛 Bug Fixes * Fixes an authentication issue for Google Drive. * Fixes an authentication issue for the Workday integration. ## 🛠 Improvements * Internal improvements * You can now add attachments when sending messages in Microsoft Outlook! ## 🚀 New Features ✨ **Default Account Types!** You can now choose which type of account you would like to connect to programmatically! This is great for cases where you want to your customers to only connect a production Salesforce account. To default the Connect Portal to a certain type of account, define the `accountType` parameter: ```js theme={null} paragon.connect("salesforce", { accountType: "default" }); ``` ## 🐛 Bug Fixes * Fixes an issue where Fan In values were concatenated to a string rather than an array of results. * Fixes an issue where users were unable to filter Task History by specific integrations. ## 🚀 New Features ✨ **[Wordpress](/resources/integrations/wordpress) Integration!** You can now connect to your users' Wordpress accounts to manage their pages, posts, and stats. Paragon enables you to sync data between your app and your users’ Wordpress. For example, you can create new posts or fetch post stats and insights in Wordpress. Learn more in [our docs](/resources/integrations/wordpress). ✨ **[Google Analytics GA4](/resources/integrations/googleanalyticsga4) Integration!** You can now connect to your users' Google Analytics GA4 accounts to manage their reports and analytics. Paragon enables you to sync data between your app and your users’ Google Analytics. For example, you can create new reports or periodically fetch new analytics in Google Analytics GA4 properties. Learn more in [our docs](/resources/integrations/googleanalyticsga4). ✨ **[ADP Workforce Now](/resources/integrations/adp-workforce-now) Integration!** You can now connect to your users' ADP Workforce Now accounts to manage their staffing and payroll. Paragon enables you to sync data between your app and your users’ ADP Workforce Now. For example, you can add new employees or sync payroll in ADP Workforce Now. Learn more in [our docs](/resources/integrations/adp-workforce-now). ✨ **New [Google Calendar](/resources/integrations/google-calendar) Triggers!** You can now access the following native, webhook-based triggers when building workflows for Google Calendar: * New Event * Event Updated * Event Cancelled ⚠️ These new webhook-based triggers introduce the *Legacy* label on existing Workflow triggers. There is no affect to deployed workflows with these legacy triggers. They will continue to execute as expected. ✨ **New [Close](/resources/integrations/close) Triggers!** You can now access the following triggers when building workflows for Close CRM: * Record Created * Record Updated * Record Deleted These triggers support subscribing to changes around `Leads`, `Opportunities`, `Contacts`, and `Tasks` within Close CRM. ✨ **[Apollo.io](/resources/integrations/apollo-io) Integration!** You can now connect to your users' Apollo.io accounts to manage their accounts, contacts, and sequences. Paragon enables you to sync data between your app and your users’ Apollo.io. For example, you can add new contacts or manage sequence stages in Apollo.io. Learn more in [our docs](/resources/integrations/apollo-io). ✨ **[Google Drive](/resources/integrations/google-drive) Actions!** You can now *Export a File* to a raw file blob when building workflows for Google Drive. ## 🛠 Improvements * Internal improvements * Internal improvements to the Paragon Proxy API * Adds support for OAuth-based authentication to the AirTable integration * Adds support for the `googleapis.com` domain in the proxy API for the Gmail integration * Allows developers to receive a download token for Zoom meeting recording workflow actions in payload responses * Improvements to Zoho CRM workflow triggers * Improvements to Klaviyo error messaging on empty action inputs * Improvements to Paragon SDK loading efficiencies * Improvements to pagination performance * Improvements to Event Destinations payloads * Adds a `paragon.completeInstall` function to the SDK for installing integrations that originate from an Application Marketplace ([Read more](/apis/api-reference)) * Internal improvements to memory build-up * Internal codebase efficiencies * UI updates to Asana workflow triggers * Internal improvements to our integration authentication manager * UI improvements for workflow triggers for Monday.com and Quickbooks * Provides more specific errors for Klayvio *Send Campaign* action * Improves error handling for the Marketo integration now returning a JSON-parsable error message ## 🐛 Bug Fixes * Fixes an authentication issue for the Gmail integration * Internal improvements to integration credential caching * Fixes Paragon Connect proxy request issues * Fixes a issue with generating new Signing Keys * Fixes an issue with Salesforce's *Create Record Custom Object* * Fixes an issue related to workflow trigger payload filtering in Zoho CRM * Fixes an issue related to the Azure DevOps Connect Portal ## 🚀 New Features ✨ **[Quip](/resources/integrations/quip) Integration!** You can now connect to your users' Quip accounts to manage their documents and spreadsheets. Paragon enables you to sync data between your app and your users’ Quip. For example, you can create documents or manage existing Sheets and Threads in Quip. Learn more in [our docs](/resources/integrations/quip). ✨ **[Shortcut](/resources/integrations/shortcut) Actions!** You can now access the following actions when building workflows for Shortcut: * Create Story * Update Story * Get Story by ID * Get Stories by Project * Get Stories by Epic * Search Stories * Create Epic * Update Epic * Get Epic by ID * Delete Epic * Create Project * Update Project * Get Project by ID * Delete Project ✨ **New [Asana](/resources/integrations/asana) Trigger!** You can now trigger workflows whenever an Asana task is deleted. ✨ **[Adobe Acrobat Sign](/resources/integrations/adobe-acrobat-sign) Integration!** You can now connect to your users' Adobe Acrobat Sign accounts to manage their lists, subscribers, and campaigns. Paragon enables you to sync data between your app and your users’ Adobe Acrobat Sign. For example, you can add new subscribers to lists or campaigns or manage lists or campaigns in Adobe Acrobat Sign. Learn more in [our docs](/resources/integrations/adobe-acrobat-sign). ✨ **New [Slack](/resources/integrations/slack) Trigger!** You can now access a *File Deleted* trigger when building workflows for Slack. 🚀 **Other New Features** * Adds ability for a developer to specify a token-type from the Slack Integration Request Step. ✨ **[Miro](/resources/integrations/miro) Integration**! You can now connect to your users' Miro accounts to manage their boards and documents. Paragon enables you to sync data between your app and your users’ Miro accounts. For example, you can create new documents and manage items within boards in Miro. ✨ **[Freshsales](/resources/integrations/freshsales) Integration**! You can now connect to your users' Freshsales accounts to manage their deals, contacts, and leads. Paragon enables you to sync data between your app and your users’ Freshsales accounts. For example, you can add new contacts or update deal stages in Freshsales. ✨ **[Figma](/resources/integrations/figma) Actions!** You can now access the following actions when building workflows for Figma: * Get File by ID * Get File Nodes * Get Rendered Image from File * Get Users' Projects * Get Project Files * Create Comment * Get Comments by File * Delete Comment * Create Comment Reaction * Get Comment Reactions by File * Delete Comment Reaction ✨ **[Coda](/resources/integrations/coda) Actions!** You can now access the following actions when building workflows for Coda: * Create Document * Get Document by ID * Search Documents * Delete Document * Get Table by ID * Search Tables ✨ **[Adobe Experience Manager](/resources/integrations/adobe-experience-manager) Actions!** You can now access the following actions when building workflows for Adobe Experience Manager: * Create Folder * Delete Folder * Create an Asset Rendition * Update an Asset Rendition * Delete an Asset Rendition * Delete an Asset ## 🛠 Improvements * Allows Paragon developers to author Outlook integrations enabling the connection and additional privileges of Microsoft organization administrators. Allows a Paragon developer to use Microsoft's *application permission types* * UI improvements to the Marketo integration * Improvements to workflow engine monitoring * UI improvements for Zoom and Asana triggers * Added a saving indicator to the Connect Portal * Improvements to Shopify trigger payload date accuracy * Improvements to pagination for Shopify actions * Improvements to Pipedrive workflow trigger record filtering ## 🐛 Bug Fixes * Fixes a dashboard-level bug preventing Paragon developers from viewing their integrations' settings under certain circumstances * Fixes an issue with URL query parameters not appearing in the received request payload * Fixes issues related to *Fan In* values in the workflow editor * Fixes an invalid URL for the Connect Portal image assets * Fixes an issue with multiple-account authorization and the Connect Portal * Fixes an issue with User names in the Task History dashboard * Fixes an issue where Jira triggers were not detecting new records under certain circumstances * Fixes an issue with parameter parsing for the *Update Items* workflow action in the Monday.com integration * Fixes an issue where Google Sheets and Google Drive triggers were firing too frequently * Fixes an issue with certain HubSpot records having truncated payloads * Fixes a visual issue with the Preview Portal and workflow editor inputs * Fixes an issue where workflows were resolving data from test workflows * Fixes an issue with the Pardot Connect Portal * Fixes an issue with the Azure DevOps integration authentication mechanism * Fixes an issue with HubSpot error state when an optional payload parameter is not passed * Fixes an issue with Fan Out and "Fan-in" workflow steps incorrectly resolving as empty arrays * Fixes an issue with the Paragon dashboard log-in process on Safari browsers ## New ## 🛠 Improvements ⚠️ **HubSpot Workflow Triggers Reverted** ⚠️ This release reverts recent work to improve the HubSpot webhook triggers. **No action is required from developers to maintain their currently deployed workflows.** 🛠 **Other Platform Improvements** * Improvements to the Google Drive trigger test step experience * Improvements to the Gmail integration error object * Exposes a request header for the Proxy API allowing developers to specify token-type for the Slack integration ## 🐛 Bug Fixes * Fixes a visual issue with integration logo icons * Fixes an issue with certain workflows not completing properly * Fixes extraneous executions for Marketo's workflow trigger configured for Leads ## 🛠 Improvements * Adds the Connected User ID to the workflow execution view in Task History. * Provides more accurate statuses to workflow executions. * Improvements to workflow execution efficiencies. * Provides more specific error details for the Jira integration. * Adds a new Data Source for Projects for the Asana integration. * Adds support for accepting JSON as input for creating Issues in the Jira integration. ⚠️ **HubSpot Trigger Improvements** * Adds more performant, webhook-based triggers for the HubSpot integration. * Developers may notice their HubSpot `Record Created`, `Record Updated`, and `Record Deleted` workflow triggers have `(Legacy)` appended to their labels. * **No action is required to maintain stability of existing deployed workflows.** These workflows will remain stable as there is no change to existing deployed workflows. * Developers may choose to opt-in to using the new workflows by selecting the new `Record Created` and `Record Deleted` triggers in the workflow editor which will configure webhook-based notifications in their HubSpot applications. ⚠️ **Outlook Trigger Improvements** * Adds more performant, webhook-based triggers for the Outlook integration. * Developers may notice their Outlook `Event Created`, `Event Updated`, `Event Removed`, and `New Message` workflow triggers have `(Legacy)` appended to their labels. * Developers may choose to opt-in to using the new workflows by selecting the new `Event Created`, `Event Updated`, `Event Removed`, and `New Message` triggers in the workflow editor which will configure webhook-based notifications in their Outlook applications. 🛠 **Other Platform Improvements** * Adds improvements to Test Step payloads for triggers in the Intercom integration. ## 🐛 Bug Fixes * Fixes issues with triggers not showing up in Task History. * Fixes issues with conditional operators in the Salesforce integration * Fixes an issue where *Test Step* fails to execute when the workflow is not deployed. * Fixes an issue where the Outlook integration `Event Created` trigger would fire for duplicate events. * Fixes validation errors in the Front integration. * Fixes UI issues for the Monday.com integration. * Fixes an issue with the Custom Integration Builder API key inputs. * Fixes issues with OneDrive user settings not loading. * Fixes an issue with API-key-based authentication for the Azure DevOps integration. * Fixes an issue where Google Calendar trigger runs for duplicate events. * Fixes and issue with searching for records for the DocuSign integration ## 🚀 New Features ✨ **New [Workday](/resources/integrations/workday) Integration!** You can now connect to your users' Workday accounts to manage their employees. Paragon enables you to sync data between your app and your users’ Workday. For example, you can add new employees to lists or manage PTO requests in Workday. ✨ **New [Box](/resources/integrations/box) Actions!** You can now access the following actions when building workflows for Box: * Save File * Get File by ID * List Files * Create Folder * Move Folder * Get Folder by ID * Search Folders * Delete Folders ✨ **New [Intercom](/resources/integrations/intercom) Triggers!** You can now access the following triggers when building workflows for Intercom: * Company Created * Company Updated * Contact Created * Contact Updated ✨ **New [OneDrive](/resources/integrations/onedrive) Actions!** You can now access the following actions when building workflows for OneDrive: ✨ **New [Google Drive](/resources/integrations/google-drive) Actions!** You can now access the following actions when building workflows for Google Drive: * Delete Folder ✨ **New [Dropbox](/resources/integrations/dropbox) Action!** You can now access the `Get Folder by ID` action when building workflows for Dropbox. ## 🚀 New Features ✨ **Project Manager!** We've given the top portion of Paragon a new coat of paint! You can now switch between projects by clicking your project's name in the top-left corner and selecting one from the drop-down. Clicking the "Manage Projects" button will take you straight to the **Project Manager**, where you can switch between projects or rename any previously named project. ✨ **New [HubSpot](/resources/integrations/hubspot) Trigger!** You can now access the `Record Deleted for Privacy (GDPR)` trigger for HubSpot. This allows you to trigger workflows when a record is deleted for privacy reasons. ✨ **New [GitHub](/resources/integrations/github) Triggers!** You can now access the following triggers when building workflows for GitHub: * Issue Created * Issue Updated * PR Created * PR Updated * Project Created * Project Updated ✨ **[Dropbox Sign](/resources/integrations/dropboxsign) Actions!** You can now access the following actions when building workflows for Dropbox Sign: * Create and Send Signature Request * Update Signature Request * Get Signature Request by ID * Search Signature Requests * Cancel Incomplete Signature Request * Download Files ✨ **[Todoist](/resources/integrations/todoist) Actions!** You can now access the following actions when building workflows for Todoist: * Create Project * Update Project * Get Project by ID * Get All Projects * Delete Project * Create Task * Update Task * Get Task by ID * Search Tasks * Close Task * Delete Task ✨ **More [GitHub](/resources/integrations/github) Triggers!** ✨ **More [Google Drive](/resources/integrations/google-drive) Actions!** You can now access the `Search Folders` action for Google Drive. This allows you to create workflows that are capable of searching folders at different depths on Paragon. ## 🛠 Improvements * The Hubspot `Search for Custom Object` types previously returned `null` values for every unset field. Changed the behavior so that they are filtered the same as other `Search record` types. * Adds support for the `archiver` npm library. * Adds filter search for Pipedrive's `Record Created` and `Record Updated` triggers. ## 🐛 Bug Fixes * Fixes an issue where workflows with Delay steps would have actions appear in the wrong order when viewing their Task History executions. * Fixes an issue where the `Search Records` action for HubSpot fails when attempting to search over 10k records. * Configuration settings when adding data sources no longer disappears after a few seconds * Fixes an issue where the `Record Deleted` trigger for HubSpot did not properly support Custom Objects. * Fixes an issue with the `Search Contacts` action for Intercom. * Fixes an issue where the Connect Portal could potentially crash when passing field mapping options from the Connect SDK. * Fixes an issue with the token refresh mechanism for Dropbox Sign. ## 🚀 New Features ✨ **[Microsoft Teams](/resources/integrations/microsoft-teams) Triggers!** You can now trigger Microsoft Teams workflows when chats and channels are created or updated in your users' Microsoft Teams accounts, making it easy to sync data in real-time between your users' Microsoft Teams and your app. Learn more in our docs. ✨ **More [ClickUp](/resources/integrations/clickup) Triggers!** You can now access the following triggers when building workflows for ClickUp: * New Folder Created * Folder Updated * New List Created * List Updated * New Space Created * Space Updated ✨ **More [Google Drive](/resources/integrations/google-drive) Triggers!** You can now trigger workflows when Files are deleted from your users' Google Drive accounts! ✨ **More [Gmail](/resources/integrations/gmail) Triggers!** You can now access the following triggers when building workflows for Gmail: * Thread Modified ✨ **[Sharepoint](/resources/integrations/sharepoint) Triggers!** You can now trigger Sharepoint workflows when items are created or updated in your users' Sharepoint accounts, making it easy to sync data in real-time between your users' Sharepoint and your app. Learn more in [our docs](/resources/integrations/sharepoint). ✨ **[Adobe Experience Manager](/resources/integrations/adobe-experience-manager) Integration!** You can now connect to your users' Adobe Experience Manager accounts to manage their digital assets. Paragon enables you to sync data between your app and your users’ Adobe Experience Manager. For example, you can create or manage digital assets in Adobe Experience Manager. Learn more in [our docs](/resources/integrations/adobe-experience-manager). ✨ **More [Google Drive](/resources/integrations/google-drive) Actions!** You can now access the following actions when building workflows for Google Drive: * Get File by ID ✨ **[npm](https://www.npmjs.com/package/@useparagon/connect) Support for Paragon's SDK!** You can now install the Paragon SDK with npm! Just type `npm install @useparagon/connect` in your application's console to get started. Learn more in [our docs](/getting-started/installing-the-connect-sdk). ✨ **[Front](/resources/integrations/front) Actions!** You can now access the following actions when building workflows for Front: * Create Account * Update Account * Get Account by ID * Search Accounts * Delete Account * Create Contact * Update Contact * Get Contact by ID * Search Contacts * Delete Contact ✨ **More [Asana](/resources/integrations/asana) Actions!** You can now access the following actions when building workflows for Asana: * Get Task by External ID * Add Task to Section ✨ **[Confluence](/resources/integrations/confluence) Actions!** You can now access the following actions when building workflows for Confluence: * Create Page * Update Page * Get Page by ID * Get Pages in Space * Get Pages by Label * Search Pages * Delete Page * Get Space By ID * Search Spaces ✨ **[Salesloft](/resources/integrations/salesloft) Actions!** You can now access the following actions when building workflows for Salesloft: * Create an Account * Update an Account * Get an Account * Delete an Account * Create a Custom Field * Update a Custom Field * Get a Custom Field * Delete a Custom Field * Search Custom Fields * Create a Call * Get a Call * Search Calls * Create a Person * Update a Person * Get a Person * Delete a Person * Search Persons * Create a Task * Update a Task * Get a Task * Search Tasks ✨ **[Salesloft](/resources/integrations/salesloft) Triggers!** You can now trigger Salesloft workflows when people and accounts are created and updated in your users' Salesloft accounts, making it easy to sync data in real-time between your users' Salesloft and your app. Learn more in our docs. ✨ **[Slack](/resources/integrations/slack) Triggers!** You can now trigger Slack workflows when direct, group, and channel messages are sent or updated in your users' Slack accounts, making it easy to sync data in real-time between your users' Slack and your app. Learn more in our docs. ✨ **[Greenhouse](/resources/integrations/greenhouse) Triggers!** You can now trigger Greenhouse workflows when candidates and jobs are created and updated in your users' Greenhouse accounts, making it easy to sync data in real-time between your users' Greenhouse and your app. Learn more in our docs. ✨ **[Sailthru](/resources/integrations/sailthru) Integration!** You can now connect to your users' Sailthru accounts to manage their lists, subscribers, and campaigns. Paragon enables you to sync data between your app and your users’ Sailthru. For example, you can add new subscribers to lists or campaigns or manage lists or campaigns in Sailthru. Learn more in [our docs](/resources/integrations/sailthru). ✨ **[Todoist](/resources/integrations/todoist) Integration!** You can now connect to your users' Todoist accounts to manage their projects and tasks. Paragon enables you to sync data between your app and your users’ Todoist. For example, you can create items or manage tasks and issues in Todoist. Learn more in [our docs](/resources/integrations/todoist). ✨ **[Dropbox](/resources/integrations/dropbox) Triggers!** You can now trigger Dropbox workflows when files are created, updated, and deleted in your users' Dropbox accounts, making it easy to sync data in real-time between your users' Dropbox and your app. Learn more in our docs. ✨ **[Gmail](/resources/integrations/gmail) Triggers!** You can now trigger Gmail workflows when threads are created and updatedm in your users' Gmail accounts, making it easy to sync data in real-time between your users' Gmail and your app. Learn more in our docs. ## 🐛 Bug Fixes * Fixes an issue where User and Workflow Settings picklists are not searchable when there's an error in the input. * Resolves an issue where filters did not appear properly when using the `Record Deleted` trigger for Companies in HubSpot. * Fixes an issue where workflows that are enabled by default were not working for integrations that had extra configuration settings after authenticating. * Fixes an authentication issue for the Klaviyo Request step. ## 🛠 Improvements * Updates the Pardot Connect Portal to help end users find their Business Unit ID. * You can now access `https://www.googleapis.com` in Google Sheets. * Updates the error responses for ClickUp, Asana, and Trello to parsed JSON. * Adds support for GitHub apps and OAuth apps to the GitHub integration. ## 🚀 New Features ✨ **[Google Docs](/resources/integrations/googledocs) Integration!** You can now connect to your users' Google Docs accounts to manage their documents. Paragon enables you to sync data between your app and your users’ Google Docs. For example, you can create documents or sync documents in Google Docs. Learn more in [our docs](/resources/integrations/googledocs). ✨ **[Workable](/resources/integrations/workable) Integration!** You can now connect to your users' Workable accounts to manage their applications, candidates, and resumes. Paragon enables you to sync data between your app and your users’ Workable. For example, you can get resumes or manage candidates' applications in Workable. Learn more in [our docs](/resources/integrations/workable). ✨ **[Gainsight](/resources/integrations/gainsight) Integration!** You can now connect to your users' Gainsight accounts to manage their records. Paragon enables you to sync data between your app and your users’ Gainsight. For example, you can create records or manage records in Gainsight. Learn more in [our docs](/resources/integrations/gainsight). ✨ **[Google Drive](/resources/integrations/google-drive) Triggers!** You can now trigger Google Drive workflows when files are created and updated in your users' Google Drive accounts, making it easy to sync data in real-time between your users' Google Drive and your app. Learn more in [our docs](/resources/integrations/google-drive). ✨ **[Zendesk Sell](/resources/integrations/zendesksell) Actions!** You can now access the following actions when building workflows for Zendesk Sell: * Create Record * Update Record * Get Record by ID * Search Records * Delete Record ✨ **More [Slack](/resources/integrations/slack) Actions!** You can now access the following actions when building workflows for Slack: * Search Messages ✨ **[Keap](/resources/integrations/keap) Integration!** You can now connect to your users' Keap accounts to create, access, and update records. Paragon enables you to sync data between your app and your users’ Keap. For example, you can create records or sync records in Keap. Learn more in [our docs](/resources/integrations/keap). ✨ **[TikTok Ads](/resources/integrations/tiktokads) Integration!** You can now connect to your users' TikTok Ads accounts to manage their campaigns, groups, and ads. Paragon enables you to sync data between your app and your users’ TikTok Ads. For example, you can create ad creatives or take action on your customers' ad conversions in TikTok Ads. Learn more in [our docs](/resources/integrations/tiktokads) Integration!). ✨ **[Figma](/resources/integrations/figma) Integration!** You can now connect to your users' Figma accounts to manage their files. Paragon enables you to sync data between your app and your users’ Figma. For example, you can create files or manage files in Figma. Learn more in [our docs](/resources/integrations/figma). ✨ **[OneNote](/resources/integrations/onenote) Integration!** You can now connect to your users' OneNote accounts to manage their notebooks and pages. Paragon enables you to sync data between your app and your users’ OneNote. For example, you can create pages or manage notebooks in OneNote. Learn more in [our docs](/resources/integrations/onenote). ✨ **[Zoho People](/resources/integrations/zohopeople) Integration!** You can now connect to your users' Zoho People accounts to manage their employees, time off, and timesheets. Paragon enables you to sync data between your app and your users’ Zoho People. For example, you can create employee time off requests or manage employee information in Zoho People. Learn more in [our docs](/resources/integrations/zohopeople). ✨ **[Google Sheets](/resources/integrations/google-sheets) Triggers!** You can now trigger Google Sheets workflows when files and rows are created and updated in your users' Google Sheets accounts, making it easy to sync data in real-time between your users' Google Sheets and your app. Learn more in our docs. ✨ **[Notion](/resources/integrations/notion) Actions!** You can now access the following actions when building workflows for Notion: * Create a Page * Update a Page * Get a Page * Archive a Page * Update a Block * Retrieve a Block * Delete a Block ✨ **[Front](/resources/integrations/front) Integration!** You can now connect to your users' Front accounts to manage their conversations, messages, and contacts. Paragon enables you to sync data between your app and your users’ Front. For example, you can create or update contacts or send messages to contacts in Front. Learn more in [our docs](/resources/integrations/front). ✨ **[Confluence](/resources/integrations/confluence) Integration!** You can now connect to your users' Confluence accounts to access, create, and update their documents. Paragon enables you to sync data between your app and your users’ Confluence. For example, you can create and update documents or manage documents in Confluence. Learn more in [our docs](/resources/integrations/confluence). ✨ **[OneDrive](/resources/integrations/onedrive) Actions!** You can now access the following actions when building workflows for OneDrive: * Save File * Get File * List Files ✨ **[Shortcut](/resources/integrations/shortcut) Integration!** You can now connect to your users' Shortcut accounts to manage their items and epics. Paragon enables you to sync data between your app and your users’ Shortcut. For example, you can create or update items or manage epics in Shortcut. Learn more in [our docs](/resources/integrations/shortcut). ✨ **[Amplitude](/resources/integrations/amplitude) Integration!** You can now connect to your users' Amplitude accounts to upload, export, and query event data. Paragon enables you to sync data between your app and your users’ Amplitude. For example, you can create event data or export event data in Amplitude. Learn more in [our docs](/resources/integrations/amplitude). ✨ **[OneDrive](/resources/integrations/onedrive) Triggers!** You can now trigger OneDrive workflows when files are changed in your users' OneDrive accounts, making it easy to sync data in real-time between your users' OneDrive and your app. Learn more in [our docs](/resources/integrations/onedrive). ✨ **[Coda](/resources/integrations/coda) Integration!** You can now connect to your users' Coda accounts to manage their documents and tables. Paragon enables you to sync data between your app and your users’ Coda. For example, you can create new documents or update rows in Coda. Learn more in [our docs](/resources/integrations/coda). ✨ **More [Trello](/resources/integrations/trello) Triggers!** You can now trigger workflows when Boards are created and updated in your users' Trello accounts! ✨ **More [Jira](/resources/integrations/jira) Triggers!** You can now trigger workflows when Projects are created and updated in your users' Trello accounts! ✨ **Role-Based Access Control!** Role-Based Access Control allows you to give team members different levels of visibility to your Paragon projects. For example, you can: * Assign support team members with **Support** roles for access to the Connected Users and Task History pages only * Designate specific users with **Admin** roles to manage global settings, including team member access and billing information We recommend giving team members the minimal level of access they need, according to the principle of least privilege. While Admin and Developer roles are available on all plans, Role-Based Access Control, such as the Support role, is available for Paragon customers on Enterprise plans. To learn more, contact your Customer Success Manager or [sales@useparagon.com](mailto:sales@useparagon.com). ✨ **[OneNote](/resources/integrations/onenote) Actions!** You can now access the following actions when building workflows for OneNote: * Update Page * Get Page by ID * Delete Page * Search Pages ✨ **[Lever](/resources/integrations/lever) Triggers!** You can now trigger Lever workflows when candidates and postings are created or updated in your users' Lever accounts, making it easy to sync data in real-time between your users' Lever and your app. Learn more in our docs. ## 🛠 Improvements * Adds support for filters for HubSpot triggers. * Adds access to the NetSuite account ID and provider data to the Dynamic Variable Menu. * Removes `https://www.googleapis.com/auth/drive` as one of the required scopes of the Google Drive integration. * Updates the error code for triggering workflows that aren't enabled to `Workflow not enabled for this user.` * Adds the `jsforce` npm library to the Function step. * Fixes an issue with Asana that results in blank fields causing other fields to become unset unexpectedly. ## 🐛 Bug Fixes * Fixes an issue where the workflow execution status in Task History get stuck on `Running`. * Fixes an issue where calling `paragon.authenticate` with metadata would cause a `500` error. * Resolves an issue where workflow executions would not match the contents of their tasks. * Fixes an issue where custom integration icons would not appear correctly in the Custom Integration Builder. * Fixes a display issue that causes the Test Shelf to only appear once a workflow test has finished executing. ## 🚀 New Features ✨ **[Copper](/resources/integrations/copper) Integration!** You can now connect to your users' Copper accounts to manage their records. Paragon enables you to sync data between your app and your users’ Copper. For example, you can create new records or manage records in Copper. Learn more in [our docs](/resources/integrations/copper). ✨ **[Box](/resources/integrations/box) Integration!** You can now connect to your users' Box accounts to manage, create, and update files. Paragon enables you to sync data between your app and your users’ Box account. For example, you can create files or sync files in Box. Learn more in [our docs](/resources/integrations/box). ✨ **[Task History API](/apis/task-history)!** The [Task History API](/apis/task-history) allows you to query your users' usage of integration workflows and access data from historical workflow executions. The Task History API can be used to analyze integration usage or pull information about historical workflow executions into your application. For example, you can use the Task History API to: * Query the number of workflow executions that ran last week for the Salesforce integration * Query all failed workflow executions for a specific user * Export all tasks that occurred in a specific month into Google BigQuery ✨ **[Notion](/resources/integrations/notion) Integration!** You can now connect to your users' Notion accounts to manage their pages and databases. Paragon enables you to sync data between your app and your users’ Notion. For example, you can create pages or manage databases in Notion. Learn more in [our docs](/resources/integrations/notion). ✨ **[Hive](/resources/integrations/hive) Integration!** You can now connect to your users' Hive accounts to manage their tasks and issues. Paragon enables you to sync data between your app and your users’ Hive. For example, you can create tasks or manage items in Hive. Learn more in [our docs](/resources/integrations/hive). ✨ **[OneDrive](/resources/integrations/onedrive) Integration!** You can now connect to your users' OneDrive accounts to manage their files. Paragon enables you to sync data between your app and your users’ OneDrive. For example, you can create files or manage files in OneDrive. Learn more in [our docs](/resources/integrations/onedrive). ✨ **[Dropbox Sign](/resources/integrations/dropboxsign) Integration!** You can now connect to your users' Dropbox Sign accounts to manage their files. Paragon enables you to sync data between your app and your users’ Dropbox Sign. For example, you can create files or manage files in Dropbox Sign. Learn more in [our docs](/resources/integrations/dropboxsign). ✨ **[Microsoft Excel](/resources/integrations/microsoftexcel) Integration!** You can now connect to your users' Microsoft Excel accounts to access, create, and update their spreadsheets. Paragon enables you to sync data between your app and your users’ Microsoft Excel. For example, you can create and update rows or sync row data from Microsoft Excel. Learn more in [our docs](/resources/integrations/microsoftexcel). ✨ **[LinkedIn](/resources/integrations/linkedin) Actions!** You can now access the following actions when building workflows for LinkedIn: * Get Profile by ID * Create Post ## 🐛 Bug Fixes * Fixes an issue where manually typed JSON would appear as a `string` instead of an `Object` in the Integration Request step. * Fixes an issue where manually typed boolean values would appear as a `string` instead of a `boolean` object. * Fixes a bug where the workflow settings sidebar would disappear after viewing the preview Connect Portal. * Fixes a bug where moving between the preview Connect Portal and the Workflow Editor causes the step reference display to appear with the UUID instead of the step index. * Fixes a bug where the Dynamic Variable Menu would unexpectedly close when used in filters. * Fixes a bug where you couldn't use Environment Secrets as parameters in Function steps. * Fixes an issue where some Request-triggered workflows would occasionally fail to send a response for some users. ## 🛠 Improvements * Exposes the API Base URL for Zoho CRM as a variable in the Dynamic Variable Menu. ## 🐛 Bug Fixes * Fixes issues when copying workflows between projects * Fixes an issue with the Salesforce `Search Records` action where Paragon may not paginate more than 2000 records. * Fixes an issue with the Salesforce `Search Records` step where users may see an error message when a search with filters returns no results. * Fixes an issue where User and Workflow Settings are not saving properly in the Connect Portal Preview. * Fixes an issue where Greenhouse would not allow you to select any users to use after connecting to your Greenhouse account in the Connect Portal. ## 🚀 New Features ✨ **[Mixpanel](/resources/integrations/mixpanel) Integration!** You can now connect to your users' Mixpanel accounts to manage their events, reports, and data. Paragon enables you to sync data between your app and your users’ Mixpanel. For example, you can send event or profile data or perform custom JQL Queries in Mixpanel. Learn more in [our docs](/resources/integrations/mixpanel). ✨ **Marketo Webhook Triggers!** You can now trigger Marketo workflows when a **Lead is added to a List**! ✨ **[OpenAI](/resources/integrations/openai) Integration!** You can now connect to your users' OpenAI accounts to perform completions and run queries. Paragon enables you to sync data between your app and your users’ OpenAI accounts. For example, you can create images or run queries in OpenAI. Learn more in [our docs](/resources/integrations/openai). ✨ **[WhatsApp](/resources/integrations/whatsapp) Integration!** You can now connect to your users' WhatsApp accounts to send and receive messages and notifications. Paragon enables you to sync data between your app and your users’ WhatsApp. For example, you can send messages or receive notifications when a message status changes in WhatsApp. Learn more in [our docs](/resources/integrations/whatsapp). ✨ **[Zendesk Sell](/resources/integrations/zendesksell) Integration!** You can now connect to your users' Zendesk Sell accounts to manage their opportunities, contacts, and leads. Paragon enables you to sync data between your app and your users’ Zendesk Sell. For example, you can create new records or manage existing records in Zendesk Sell. Learn more in [our docs](/resources/integrations/zendesksell). ✨ **[Snowflake](/resources/integrations/snowflake) Integration!** You can now connect to your users' Snowflake accounts to manage their records and data. Paragon enables you to sync data between your app and your users’ Snowflake accounts. For example, you can create new records or manage existing records in Snowflake. Learn more in [our docs](/resources/integrations/snowflake). ✨ **[PandaDoc](/resources/integrations/pandadoc) Actions!** You can now access the following actions when building workflows for PandaDoc: * Create a Document * Update a Document * Get a Document by ID * Delete Document * Send a Document * Search Documents ✨ **[Segment](/resources/integrations/segment) Integration!** You can now connect to your users' Segment accounts to manage their workspaces, sources, and destinations. Paragon enables you to sync data between your app and your users’ Segment. For example, you can create and maintain destination filters or configure warehouses and sources in Segment. Learn more in [our docs](/resources/integrations/segment). ✨ **[Facebook Pages](/resources/integrations/facebook-pages) Integration!** You can now connect to your users' Facebook Pages accounts to manage their pages, content, and messages. Paragon enables you to sync data between your app and your users’ Facebook Pages. For example, you can create content or manage messages in Facebook Pages. Learn more in [our docs](/resources/integrations/facebook-pages). ✨ **Single Sign-On (SSO) Support!** Paragon now supports Single Sign-On for companies on Enterprise installations! ✨ **[LinkedIn](/resources/integrations/linkedin) Integration!** You can now connect to your users' LinkedIn accounts to manage their posts and profiles. Paragon enables you to sync data between your app and your users’ LinkedIn. For example, you can share content or retrieve profiles in LinkedIn. Learn more in [our docs](/resources/integrations/linkedin). ✨ **[Mailchimp](/resources/integrations/mailchimp) Triggers!** You can now trigger Mailchimp workflows when people are added to lists in your users' Mailchimp accounts, making it easy to sync data in real-time between your users' Mailchimp and your app. Learn more in our docs. ## 🛠 Improvements * Adds support for the [`neo4j-driver`](https://www.npmjs.com/package/neo4j-driver) library in the Function step. * Adds an option to opt-out of recurring event updates for Google Calendar triggers. * Updates the API version for Facebook Ads from `v12` to `v14`. ## 🛠 Improvements * Improved general processing speeds by over 5x * Increased upper processing limit by over 20x * Adds the Social Media category to the Catalog. * Updates the Gong logo. * Adds pagination support to the Marketo Lists User Setting such that the dropdown displays all the lists available to the user in their account. * Adds the `refresh_token` scope as a default scope when setting up a Pardot integration. * Adds the `url` library to the Function step. ## 🚀 New Features ✨ **[PandaDoc](/resources/integrations/pandadoc) Integration!** You can now connect to your users' PandaDoc accounts to manage their documents, contacts, and templates. Paragon enables you to sync data between your app and your users’ PandaDoc. For example, you can send documents or manage agreements in PandaDoc. Learn more in [our docs](/resources/integrations/pandadoc). ✨ **[Gusto](/resources/integrations/gusto) Integration!** You can now connect to your users' Gusto accounts to manage their employees, payroll, and jobs. Paragon enables you to sync data between your app and your users’ Gusto. For example, you can update employee payroll or sync employee information in Gusto. Learn more in [our docs](/resources/integrations/gusto). ✨ **[WooCommerce](/resources/integrations/woocommerce) Actions!** You can now access the following actions when building workflows for WooCommerce: * Create Customer * Get Customer by ID * Search Customers * Update Customer * Delete Customer * Create Order * Get Order by ID * Search Orders * Update Order * Delete Order * Create Product * Get Product by ID * Search Products * Update Product * Delete Product ✨ **[Close](/resources/integrations/close) Integration!** You can now connect to your users' Close accounts to manage their opportunities, contacts, and leads. Paragon enables you to sync data between your app and your users’ Close. For example, you can create and update records or sync records in Close. Learn more in [our docs](/resources/integrations/close). ✨ **[DocuSign](/resources/integrations/docusign) Actions!** You can now access the following actions when building workflows for DocuSign: * Create an Envelope * Get Envelope by ID * Update Envelope * Send an Envelope * Search Envelopes * Envelope Custom Fields (CRUD) ✨ **[Greenhouse](/resources/integrations/greenhouse) Actions!** You can now access the following actions when building workflows for Greenhouse: * Create Application * Update Application * Get Application by ID * Delete Application * Create Candidate * Update Candidate * Get Candidate by ID * Delete Candidate * Create Job Opening * Update Job Opening * Get Job Opening by ID ✨ **[SAP S/4HANA](/resources/integrations/saps4hana) Actions!** You can now access the following actions when building workflows for SAP S/4HANA: * Create Supplier Invoice * Get Supplier Invoice by ID * Search Supplier Invoices * Delete Supplier Invoice * Get Supplier by ID * Search Suppliers * Update Supplier * Search Customer I guess you can say this release is *action-packed* 😏 ✨ **[Calendly](/resources/integrations/calendly) Triggers!** You can now trigger Calendly workflows when invitees are created or canceled in your users' Calendly accounts, making it easy to sync data in real-time between your users' Calendly and your app. Learn more in [our docs](/resources/integrations/calendly). ## 🐛 Bug Fixes * Fixes an issue with the copy for the `Insert Document` action for the Firebase integration in Paragon Automate * Fixes an issue where authentication tokens might not refresh for Microsoft Outlook workflows using the Microsoft Outlook Request step. ## 🚀 New Features ✨ **Twitter Integration!** You can now connect to your users' Twitter accounts to manage their datasets, dataflows, and reports. Paragon enables you to sync data between your app and your users’ Twitter account. For example, you can create tweets on behalf of your user or get a list of tweets by user or topic on Twitter. ✨ **[Power BI](/resources/integrations/powerbi) Integration!** You can now connect to your users' Power BI accounts to manage their content and perform admin operations. Paragon enables you to sync data between your app and your users’ Power BI. For example, you can embed Power BI content or perform admin operations in Power BI. Learn more in [our docs](/resources/integrations/powerbi). ✨ **[SAP SuccessFactors](/resources/integrations/sapsuccessfactors) Integration!** You can now connect to your users' SAP SuccessFactors accounts to manage their employees, time off, and benefits. Paragon enables you to sync data between your app and your users’ SAP SuccessFactors. For example, you can create employee time off requests or sync employee information in SAP SuccessFactors. Learn more in [our docs](/resources/integrations/sapsuccessfactors). ✨ **[Amazon S3](/resources/integrations/amazon-s3) Integration!** You can now connect to your users' Amazon S3 accounts to manage their buckets, objects, and jobs. Paragon enables you to sync data between your app and your users’ Amazon S3. For example, you can create publish or update metadata or run specific jobs and tasks in Amazon S3. Learn more in [our docs](/resources/integrations/amazon-s3). ✨ **[Tableau](/resources/integrations/tableau) Integration!** You can now connect to your users' Tableau accounts to manage their data sources, projects, and workbooks. Paragon enables you to sync data between your app and your users’ Tableau. For example, you can publish and update metadata or refresh the extract of a data source of a site in Tableau. Learn more in [our docs](/resources/integrations/tableau). ✨ **[Enable Workflows by Default](/connect-portal/connect-portal-customization)!** You can now default workflows to “enabled” without hiding the workflow from the Connect Portal! This is great for times when you want the functionality to be enabled by default and want to give your customer control over whether it stays enabled. Access these new settings in the **Connect Portal Configuration** menu. ✨ **[Lever](/resources/integrations/lever) Actions!** You can now access the following actions when building workflows for Lever: * Create an Opportunity * Get Opportunity by ID * Get Opportunities * Update Contact * Get Contact by ID * Create a Posting * Update Posting * Get Postings by ID * Get Postings ✨ **[Dropbox](/resources/integrations/dropbox) Actions!** You can now access the following actions when building workflows for Dropbox: * Get File by ID * Save File * List Files ✨ **[Adobe Commerce](/resources/integrations/adobecommerce) Actions!** You can now access the following actions when building workflows for Adobe Commerce: * Create Customer * Update Customer * Get Customer by ID * Search Customers * Delete Customer * Create Order * Update Order * Get Order by ID * Search Orders * Create Product * Update Product * Get Product by SKU * Search Products * Delete Product ## 🛠 Improvements * Updates to the description for the `Merge Fields` action for Mailchimp. * User metadata can now be accessed in the Workflow Editor if there is not an active connection in the Connect Portal Preview. * Adds support for European Mailgun accounts in Paragon Automate. * Task usage is now visible within the Paragon dashboard. * Adds a JSON input for attachments in Microsoft Teams. * Improvements to Pipedrive's token refreshing mechanism. ## 🐛 Bug Fixes * Fixes an issue where hidden workflows get enabled by default, even after being deleted. * Fixes an issue where calling `paragon.installIntegration` may not dismiss the portal after a successful authentication for basic authentication. * Fixes an issue where sidebar inputs would not show the full list of options available from dropdowns in Paragon Automate. * Fixes an issue where failed workflow emails wouldn't include a direct link to workflow executions. * Fixes an issue where Google Sheets filters do not work for users in non-US locales. * Fixes an issue for `Enterprise` users where they are unable to remove the "Powered by Paragon" watermark from the Connect Portal. * Fixes an issue with timeouts when disconnecting Pipedrive integrations with Webhook-triggered workflows. * Fixes an issue where the field mapping input for Microsoft Dynamics 365 Sales would not include all entity types. * Fixes an issue where `&` characters were not correctly encoded when using the `Write SOQL` step for Salesforce. * Fixes an issue where successfully replayed workflows appear as `Errored` in Task History. * Fixes an issue where users are unable to switch between Paragon Connect and Paragon Automate while viewing Task History. ## 🚀 New Features ✨ **[Greenhouse](/resources/integrations/greenhouse) Integration!** You can now connect to your users' Greenhouse accounts to manage their candidates and jobs Paragon enables you to sync data between your app and your users’ Greenhouse. For example, you can sync candidates or manage jobs in Greenhouse. Learn more in [our docs](/resources/integrations/greenhouse). ✨ **[Zoho CRM](/resources/integrations/zohocrm) Actions!** You can now access the following actions when building workflows for Zoho CRM: * Create Record * Update Record * Get Record by ID * Search Records * Delete Record * Search Records by COQL Query ✨ **[Workflow Monitoring](/monitoring/event-destinations)!** We’re excited to announce that we’ve released new [Monitoring](/monitoring/event-destinations) capabilities for Paragon projects! **[Event Destinations](/monitoring/event-destinations)** allow you to send Workflow Failure events to your logging, analytics, or APM tools for further alerting or querying. We have templates for setting up [Slack](/monitoring/event-destinations/slack), [Datadog](/monitoring/event-destinations/datadog), [New Relic](/monitoring/event-destinations/new-relic), and [Sentry](/monitoring/event-destinations/sentry), but you can configure them to be sent to any other service over webhooks. Find it in your dashboard under **Settings > Monitoring** to get started. Learn more about workflow monitoring in our docs. ✨ **[BigQuery](/resources/integrations/bigquery) Integration!** You can now connect to your users' BigQuery accounts to manage their datasets, tables, and jobs. Paragon enables you to sync data between your app and your users’ BigQuery. For example, you can create and update datasets or perform job queries in BigQuery. Learn more in [our docs](/resources/integrations/bigquery). ✨ **[Calendly](/resources/integrations/calendly) Actions!** You can now access the following actions when building workflows for Calendly: * Get Event Type Details * Get Available Times for Event Type * Search Events * Get Event by ID * Get Event Invitees * Cancel Event ✨ **[Headless Connect Portal](/connect-portal/headless-connect-portal)!** Want to create your own integration page with the added benefits of Paragon's fully managed authentication? Now you can! The `paragon.installIntegration` method can be used to start the connection process for an integration without the Connect Portal appearing over your user interface. You can find the integrationType identifier you need in the Overview page for the integration. Learn more in [our docs](/apis/api-reference). ✨ **[Airtable](/resources/integrations/airtable) Integration!** You can now connect to your users' Airtable accounts to manage their tables and invites. Paragon enables you to sync data between your app and your users’ Airtable. For example, you can create invites or manage event types in Airtable. Learn more in [our docs](/resources/integrations/airtable). ✨ **[Lever](/resources/integrations/lever) Integration!** You can now connect to your users' Lever accounts to manage their events and invites. Paragon enables you to sync data between your app and your users’ Lever. For example, you can create invites or manage event types in Lever. Learn more in [our docs](/resources/integrations/lever). ✨ **[Metadata Properties](/apis/users) in the Workflow Editor!** You can now access metadata properties for your Connected Users within the Workflow Editor. For example, you can associate an API Key with your Connected User and use that specific API Key when authenticating requests back to your application. Open the Connect Portal Preview in the Workflow Editor and press "**Set User Metadata**" to get started! ✨ **[Linear](/resources/integrations/linear) Triggers!** You can now trigger Linear workflows when issues and labels are created or updated in your users' Linear accounts, making it easy to sync data in real-time between your users' Linear and your app. Learn more in [our docs](/resources/integrations/linear). * Issue Created * Issue Status Updated * Label Added or Removed from Issue * Issue Deleted ✨ **ServiceNow Actions!** You can now access the following actions when building workflows for ServiceNow: * Get Ticket by ID * Create Ticket * Update Ticket ✨ **[Calendly](/resources/integrations/calendly) Integration!** You can now connect to your users' Calendly accounts to manage their events and invites. Paragon enables you to sync data between your app and your users’ Calendly. For example, you can create invites or manage event types in Calendly. Learn more in [our docs](/resources/integrations/calendly). ✨ **[Freshdesk](/resources/integrations/freshdesk) Integration!** You can now connect to your users' Freshdesk accounts to manage records. Paragon enables you to sync data between your app and your users’ Freshdesk. For example, you can create new records or sync records between your app and Freshdesk. Learn more in [our docs](/resources/integrations/freshdesk). ## 🛠 Improvements * Adds Product and Component User Settings for Productboard. * Request triggers now support file-type payloads: Files can be uploaded directly into a workflow, with no changes required, using a Request trigger. This can be used for workflows that accept a file and forward it into file storage integrations like Google Drive and Dropbox. * Support for non-US accounts in Zoho CRM. ## 🐛 Bug Fixes * Fixes an issue where the integration metadata icon link for Monday.com was broken. * Fixes an issue where users were unable to select Assignee and Team name from the Preview Connect Portal for Asana. * Updates the logo for Freshdesk. * Fixes issues with Custom Object Mapping input clearing behavior. * Fixes an issue where users were unable to login to SAP S/4HANA from the Connect Portal. ## 🚀 New Features ✨ **[SAP S/4HANA](/resources/integrations/saps4hana) Integration!** You can now connect to your users' SAP S/4HANA accounts to manage their accounts payable, accounts receivable, and general ledger items. Paragon enables you to sync data between your app and your users’ SAP S/4HANA. For example, you can create and update invoices or manage customer or supplier details from SAP S/4HANA. Learn more in [our docs](/resources/integrations/saps4hana). ✨ **[Productboard](/resources/integrations/productboard) Actions!** You can now access the following actions when building workflows for Productboard: * Create Feature * Update Feature * Get Feature by ID * Delete Feature * Create Component * Update Component * Get Component by ID * Get Product by ID ✨ **[Dynamics 365 Finance](/resources/integrations/dynamics-finance) Actions!** One of our largest integrations yet! You can now connect to your users' Dynamics 365 Finance accounts to access, create, and update customers, payments, invoices, and more. Paragon enables you to sync data between your app and your users’ Dynamics 365 Finance. For example, you can create customers or sync invoices from Dynamics 365 Finance. Learn more in [our docs](/resources/integrations/dynamics-finance). * Get Accounts * Create Vendor * Update Vendor * Get Vendor by ID * Search for Vendor * Create Bill * Update Bill * Get Bill by ID * Search for Bill * Delete Bill * Create Bill Line Item * Update Bill Line Item * Get Bill Line Item by ID * Search for Bill Line Item * Delete Bill Line Item * Create Customer * Update Customer * Get Customer by ID * Search for Customer * Delete Customer * Create Invoice * Update Invoice * Get Invoice by ID * Search for Invoice * Delete Invoice * Create Payment Journal * Update Payment Journal * Get Payment Journal by ID * Search for Payment Journal * Delete Payment Journal * Create Payment Journal Line Item * Update Payment Journal Line Item * Get Payment Journal Line Item by ID * Search for Payment Journal Line Item * Delete Payment Journal Line Item ✨ **[Google Ads](/resources/integrations/googleads) Integration!** You can now connect to your users' Google Ads accounts to manage their ads, campaigns, and conversions. Paragon enables you to sync data between your app and your users’ Google Ads. For example, you can create and update ad creatives or manage ads and ad campaigns from Google Ads. Learn more in [our docs](/resources/integrations/googleads). ✨ **[Google Ad Manager](/resources/integrations/google-ad-manager) Integration!** You can now connect to your users' Google Ad Manager accounts to manage their ad inventory, orders, reports, and more. Paragon enables you to sync data between your app and your users’ Google Ad Manager. For example, you can create orders or sync ad inventory from Google Ad Manager. Learn more in [our docs](/resources/integrations/google-ad-manager). ✨ **[Zoho CRM](/resources/integrations/zohocrm) Integration!** You can now connect to your users' Zoho CRM accounts to manage their accounts, contacts, leads, and opportunities. Paragon enables you to sync data between your app and your users’ Zoho CRM. For example, you can create and update records or sync new records from Zoho CRM. Learn more in [our docs](/resources/integrations/zohocrm). ✨ **[Docusign](/resources/integrations/docusign) Integration!** You can now connect to your users' Docusign accounts to manage their signatures, agreements, and documents. Paragon enables you to sync data between your app and your users’ Docusign. For example, you can manage agreements or sync documents from Docusign. Learn more in [our docs](/resources/integrations/docusign). ✨ **[Connected Users Dashboard](/monitoring/users)!** The Connected Users Dashboard is your one-stop shop for viewing and managing the users connected to your integrations and the integrations they have enabled. For example, you can view which workflows your customers enable or disconnect integrations if they stop paying. Learn more in [our docs](/monitoring/users). ✨ **GitHub Integration!** You can now connect to your users' GitHub accounts to manage their issues, releases, and repositories. Paragon enables you to sync data between your app and your users’ GitHub. For example, you can create and sync issues or tag issues and automate creating comments in GitHub. Learn more in our docs. ✨ **Dynamic Timezone Selection for Schedulers!** You can now choose a timezone to run your Scheduler-triggered workflows. This is great for use cases where you want to send messages in your customer's morning or run a nightly sync at midnight. Learn more about Schedulers [here](/workflows/triggers). ✨ **[Dynamic Object Mapping](/connect-portal/field-mapping) for CRMs!** The day is finally here…you can now dynamically map objects between your app and your users' integration! Use a [Custom Object Mapping](/connect-portal/field-mapping) User Setting to allow your users to define a mapping between objects in your application and their integration. [Custom Object Mapping](/connect-portal/field-mapping) settings can be added by visiting the "Customize Connect Portal" screen from a supported integration in your project, under the User Settings section. Learn more in our docs. ## 🛠 Improvements * Improved the runtime for the Function step for on-premise environments. * You can now choose a team, status, and label for updates in Linear. * Adds the `Get Team by ID` action to Linear. * You can now send Slack messages as your authenticated user! Just enable the "Send as authenticated user" toggle to get started. * Enhances the token refresh mechanism for Microsoft Teams. * Adds support for filtering by custom fields to the `Record Updated` Salesforce webhook trigger. * Users will now see an `Invalid Credentials` message when trying to login to their ServiceNow accounts from the Connect Portal if the credentials are invalid. * Improves the experience of copying workflows between projects. * The Custom Object Mapping field inputs for Salesforce now show *all* fields available in the record schema, not only writeable ones. * Adds support for `File` types from responses. * Support for downloading files from request steps! Request and Integration Request steps will now download `File` objects in the Workflow Editor for all non-text payloads by default. This allows you to skip the Function step to convert the string into a `File` object when downloading images or PDF files from an API! * Adds support for Sandbox credentials for DocuSign. ## 🐛 Bug Fixes * Fixes an issue where new `Calls` show up as `Tasks` inside Salesforce. * Fixes an issue where issues could not be created in Jira for users with 50+ projects. * Fixes a bug where users could not get test data in the Workflow Editor when trying to create or update `Deals` in HubSpot. * Fixes a bug where hidden fields when searching for custom objects in HubSpot would not appear. * Fixes an issue where the integration domain base URL could not be used when making requests with the Paragon Proxy API. * Fixes an issue where the Project + Assignee combination User Setting for Jira would not display more than 100 results. * Fixes an issue in the Request and Integration Request steps where some responses would return `[object Object]` instead of the actual payload. * Fixes an issue where missing scopes for the Zoom integration would cause an `undefined` error after authenticating in the Connect Portal. * Fixes an issue where deleting and re-creating an environment secret would cause workflow validation to fail. * Fixes an issue where users were not able to make requests to `docs.google.com` from the Google Drive integration. ## 🚀 New Features ✨ **[Gong](/resources/integrations/gong) Actions!** You can now access the following actions when building workflows for Gong: * Add a new Call * Get Call by ID * Search for Call ✨ **[Dropbox](/resources/integrations/dropbox) Integration!** You can now connect to your users' Dropbox accounts to access, create, and update files. Paragon enables you to sync data between your app and your users’ Dropbox. For example, you can save files or sync files from Dropbox. Learn more in [our docs](/resources/integrations/dropbox). ✨ **[Productboard](/resources/integrations/productboard) Integration!** You can now connect to your users' Productboard accounts to manage their features, components, and releases. Paragon enables you to sync data between your app and your users’ Productboard. For example, you can automatically create and update releases or sync features and components from Productboard. Learn more in [our docs](/resources/integrations/productboard). ✨ **[Users API](/apis/users)!** The Users API allows you to query and modify the state of your Connected Users and their integrations. The API includes REST endpoints (and matching SDK functions) for identifying what integrations your user has enabled, disconnecting integrations, and disabling workflows. The API also allows your application to associate metadata with a Connected User. You can use the new [Users API](/apis/users) to: * Automatically disconnect integrations when a user deletes or downgrades their account in your application * Enrich your Connected Users' profile information with email, name, and other metadata * Associate Connected Users with an API key for your application, which can be used in workflows to send requests * Poll to check if a user has enabled a certain integration and view account connection status ✨ **[Adobe Commerce](/resources/integrations/adobecommerce) Integration!** You can now connect to your users' Adobe Commerce account to access, create, and update records in their Adobe Commerce stores. Paragon enables you to sync data between your app and your users’ Adobe Commerce. For example, you can create customers or sync orders from Adobe Commerce. Learn more in [our docs](/resources/integrations/adobecommerce). ## 🐛 Bug Fixes * Fixes an issue in Google Calendar where leaving the calendar option blank would result in `Not Found` instead of using the default calendar for the connected user. * Fixes an issue where the Connect Portal would not show all items available in User Settings for assignees in Jira. * Fixes a bug where the icon for the Integration Enabled trigger went missing. * Fixes a bug where Google Calendar would request Google Drive scopes by default. * Fixes a regression for pagination support in Salesforce and Slack User Settings. * Fixes an issue where workflows hidden in the Connect Portal were not automatically enabled by default. * Fixes an issue where uploaded icons for the Custom Integration Builder would not automatically resize correctly. * Fixes an issue where the Connect Portal would not show all items available in User Settings with many items in Salesforce or Slack. ## 🛠 Improvements * You can now access important information, like workspace IDs, instance URLs, and team names within the Workflow Editor and Paragon SDK! These * Adds support to filter by List ID when searching Records in Salesforce. ## 🚀 New Features ✨ **[Gmail](/resources/integrations/gmail) Integration!** You can now connect to your users' Gmail accounts to manage their emails and drafts. Paragon enables you to sync data between your app and your users’ Gmail. For example, you can send emails and drafts or sync incoming emails from Gmail. Learn more in [our docs](/resources/integrations/gmail). ✨ **[Linear](/resources/integrations/linear) Actions!** You can now access the following actions when building workflows for Linear: * Create Issue * Update Issue * Get Issue by ID * Get Issue by Issue Identifier * Search Issues * Delete Issue * Archive Issue * Create Sub-Issue * Create Project * Update Project * Get Project by ID * Delete Project ✨ **[Gmail](/resources/integrations/gmail) Actions!** You can now access the following actions when building workflows for Gmail: * Send Email * Get Email by ID * Search for Email * Delete Email * Create a Contact * Get Contact by Resource Name * Search for Contact * Delete Contact ✨ **[BambooHR](/resources/integrations/bamboohr) Integration!** You can now connect to your users' BambooHR accounts to manage their employees, time off, and benefits. Paragon enables you to sync data between your app and your users’ BambooHR. For example, you can create time off requests or sync employee information from BambooHR. Learn more in [our docs](/resources/integrations/bamboohr). ## 🛠 Improvements * You can now search for permissions by keyword, like `events`, instead of searching for the full permission in your Integration Settings. * Removes the deprecated `contacts` scope from HubSpot in favor of `crm.objects.contacts.read` and `crm.objects.contacts.write`. ## 🐛 Bug Fixes * Fixes an issue where calling `paragon.authenticate` with no integrations in your account would result in a `500` error. * Fixes an issue where the Environment Secrets Manager wouldn’t refresh correctly after switching between projects. * Fixes an issue where shared User Settings changes do not update workflow deployments. * Fixes an issue with the token refreshing mechanism for Google Campaign Manager and Google Calendar. * Fixes an issue with the token refresh mechanism for NetSuite. * Fixes an issue where the Record ID was not available when updating `Engagements` in HubSpot. * Fixes an issue where some executions may result in `socket hang up` errors. * Fixes an issue where Google credentials may become invalid for integrations in Paragon Automate. * Fixes a bug where users could create multiple App Events with the same name. * Fixes an issue where required Boolean User Settings could not be set to `false` without disabling the rest of the Connect Portal's options. ## 🚀 New Features ✨ **[NetSuite](/resources/integrations/netsuite) Actions!** You can now access the following actions when building workflows for NetSuite: * Create Vendor * Update Vendor * Get Vendor by ID * Search Vendors * Delete Vendor * Create Bill * Update Bill * Get Bill by ID * Search Bills * Delete Bill * Create Account * Update Account * Get Account by ID * Search Accounts * Delete Account * Create Tax Group * Update Tax Group * Get Tax Group by ID * Delete Tax Group * Search Payment Terms * Get Payment Term by ID ✨ **[Gong](/resources/integrations/gong) Integration!** You can now connect to your users' Gong accounts to manage their call data. Paragon enables you to sync data between your app and your users’ Gong. For example, you can add and sync calls from Gong. Learn more in [our docs](/resources/integrations/gong). ✨ **[Sage Accounting](/resources/integrations/sage-accounting) Integration!** You can now connect to your users' Sage Accounting accounts to manage their payments and invoices. Paragon enables you to sync data between your app and your users’ Sage Accounting. For example, you can create and manage payments or sync invoices from Sage Accounting. Learn more in [our docs](/resources/integrations/sage-accounting). ✨ **[Dynamics 365 Business Central](/resources/integrations/dynamicsbusinesscentral) Actions!** You can now access the following actions when building workflows for Dynamics 365 Business Central: * Search for Vendor * Create Purchase Invoice * Update Purchase Invoice * Post a Purchase Invoice * Get a Purchase Invoice by ID * Search for Purchase Invoice * Delete Purchase Invoice * Create Purchase Invoice Line Item * Update Purchase Invoice Line Item * Get Purchase Invoice Lines * Get Purchase Invoice Line Item by ID * Search for Purchase Invoice Line Item * Delete Purchase Invoice Line Item * Get Accounts * Search for Tax Group * Create Payment Term * Update Payment Term * Search for Payment Term * Delete Payment Term ✨ **[iManage](/resources/integrations/imanage) Integration!** You can now connect to your users' iManage accounts to manage their files. Paragon enables you to sync data between your app and your users’ iManage. For example, you can create and manage documents or sync files from iManage. Learn more in [our docs](/resources/integrations/imanage). ## 🐛 Bug Fixes * Fixes an issue where replaying a workflow would only show the actions for previously successful steps. * Fixes an issue where the billing dashboard would not display payment information. * Fixes an issue where users were not able to sign into production Pardot accounts. * Fixes an issue with the token refreshing mechanism for Xero. * Fixes an issue where copying workflows between projects breaks step references. * Fixes an update where users were not able to update cells to `null` in Google Sheets. * Fixes an issue where the Jira Issue Status input does not use the correct ID as the value. * Fixes an issue where users were not able to sign into QuickBooks Sandbox accounts. * Fixes an issue where deploying multiple custom fields in a row for Salesforce would result in slow action times. ## 🛠 Improvements * You can now copy the entire `paragon.event` call when copying App Events from the App Event dashboard. * You can now filter Asana projects by Workspace in User Settings. * Google integrations now support Sign-in with Google. * Adds support to filter by List ID when searching Records in HubSpot. * Adds support for Get Abandoned Carts in Shopify. * Adds support for native integration icons in on-prem environments. ## 🚀 New Features ✨ **[NetSuite](/resources/integrations/netsuite) Integration!** You can now connect to your users' NetSuite ERP system to manage their vendors and purchase orders. Paragon enables you to sync data between your app and your users’ NetSuite. For example, you can create and manage vendors or sync purchase orders from NetSuite. Learn more in [our docs](/resources/integrations/netsuite). ✨ **Redesigned [Environment Secrets](/workflows/environment-secrets) Manager!** Environment Secrets can now be updated and revealed by Admin users! Updated environment secrets will automatically be used in future workflow executions. ✨ **[Sage Intacct](/resources/integrations/sage-intacct) Integration!** You can now connect to your users' Sage Intacct account to manage their accounts payable, vendors, and purchase orders. Paragon enables you to sync data between your app and your users’ Sage Intacct. For example, you can create and manage vendors or sync purchase orders from Sage Intacct. Learn more in [our docs](/resources/integrations/sage-intacct). ✨ **[Pipedrive](/resources/integrations/pipedrive) Actions!** You can now access the following actions when building workflows for Pipedrive: * Create Record * Update Record * Get Record by ID * Get Records * Delete Record ✨ **[Dynamics 365 Finance](/resources/integrations/dynamics-finance) Integration!** You can now connect to your users' Dynamics 365 Finance account to manage their customers, payments, invoices, and more. Paragon enables you to sync data between your app and your users’ Dynamics 365 Finance. For example, you can create and manage payments or sync invoices from Dynamics 365 Finance. Learn more in [our docs](/resources/integrations/dynamics-finance). ✨ **[Record Deleted](/resources/integrations/salesforce) Salesforce Trigger!** You can now trigger Connect workflows when records are deleted in your users' Salesforce, making it easy to sync data in real-time between your users' Salesforce and your app. Learn more in [our docs](/resources/integrations/salesforce). ✨ **[Dynamics 365 Business Central](/resources/integrations/dynamicsbusinesscentral) Integration!** You can now connect to your users' Dynamics 365 Business Central accounts to manage their accounts payable, vendors, and purchase orders. Paragon enables you to sync data between your app and your users’ Dynamics 365 Business Central. For example, you can create and manage vendors or sync purchase orders from Dynamics 365 Business Central. Learn more in [our docs](/resources/integrations/dynamicsbusinesscentral). ✨ **[Linear](/resources/integrations/linear) Integration!** You can now connect to your users' Linear accounts to manage their software projects, sprints, and tasks. Paragon enables you to sync data between your app and your users’ Linear. For example, you can create and manage tasks or sync sprints from Linear. Learn more in [our docs](/resources/integrations/linear). ✨ **[Woocommerce](/resources/integrations/woocommerce) Integration!** You can now connect to your users' Woocommerce accounts to manage their customers, products, and orders. Paragon enables you to sync data between your app and your users’ Woocommerce. For example, you can create and manage customers or sync purchase orders from Woocommerce. Learn more in [our docs](/resources/integrations/woocommerce). ## 🛠 Improvements * Paragon sends a `404` status code when trying to trigger a workflow with the Request trigger that isn't deployed. * Added support for dynamic variable menu inputs to the Delay step. * You can now quickly make changes to the App Event your workflow uses right from the Workflow Editor. * Added support for `Get User by Email` in Slack. * Added support for the full payload in Trello's `Comment Created` trigger. * Added support for `Contact Lead Status` in HubSpot. * You can copy App Events easily with the copy button to the code preview. * When deleting environment secrets from Paragon, the Environment Secrets Manager informs you which other workflows it appears in and may need to be reconfigured. ## 🐛 Bug Fixes * Fixed an issue where User Settings with a search bar were not searchable if they had a tooltip enabled. * Fixed an issue where the Function step could not display more than 20 variables. * Fixed an issue where `Members` would not have access to the same account plan as `Admins`. * Resolved issues with the token refresh mechanism for Zoom. * Resolved issues with the token refresh mechanism for Facebook Ads. * Fixed a bug where dynamic variables in filters for workflow actions would resolve as `undefined`. * Fixed a bug where users were unable to filter accounts from Outreach by `name`. * Fixed an issue where new users accepting team invites were not automatically redirected to their Paragon account. * Fixed an issue where users were unable to authenticate into Mailchimp, resulting in a `500` error. * Fixed an issue where SDK authorizations in quick succession could result in duplicate Connected Users. * Fixes an issue where the Function step editor did not resize properly. * Fixes a bug where specifying the issue type when trying to create an issue in Jira would fail for accounts with multiple projects. * Fixes an issue where a user's name would hyperlinked in the welcome email. * Fixes an issue where `0` or `null` values show up as empty instead of their literal values in databases. * Fixes an issue for Jira where errors that occur in triggers do not update refresh token values. * Fixes a bug where users were unable to get account data in Sage Intacct. ## 🚀 New Features ✨ **[Pipedrive](/resources/integrations/pipedrive) Integration!** You can now connect to your users' Pipedrive account to manage their records and contacts. Paragon enables you to sync data between your app and your users’ Pipedrive. For example, you can create and manage records in Pipedrive or sync contacts from Pipedrive. Learn more in [our docs](/resources/integrations/pipedrive). ✨ **[Oracle Eloqua](/resources/integrations/eloqua) Actions!** You can now access the following actions when building workflows for Oracle Eloqua: * Create Campaign * Update Campaign * Active Campaign * Search Campaigns * Get Campaign by ID * Create Email * Update Email * Search Emails * Send Email Deployment * Create Contact * Update Contact * Search Contacts ✨ **[Microsoft Outlook](/resources/integrations/outlook) Triggers!** You can now trigger Connect workflows when events are created or updated in your users' Microsoft Outlook, making it easy to sync data in real-time between your users' Microsoft Outlook and your app. Learn more in [our docs](/resources/integrations/outlook). ✨ **Comment Created Trigger!** You can now trigger Connect workflows when comments are created in your users' Asana, Jira, and Trello accounts! ## 🛠 Improvements * `Comment Created` triggers have been added for Asana, Jira, and Trello. * Added support for uploading different file types through the Connect SDK and API. * Connect Proxy responses can now receive binary-encoded/raw responses. * We've added an integration indicator for `Added` and `API` integrations. * You can now manage integration settings from the Integration Catalog. ## 🐛 Bug Fixes * Fixed a bug where the Function step wouldn't load for users with on-premise installations. * Fixed an issue where `providerData` would be missing from the Connect User object after an OAuth callback. * Fixed an issue where large Fan Outs would work intermittently. ## 🚀 New Features ✨ **[Oracle Eloqua](/resources/integrations/eloqua) Integration!** You can now connect to your users' Oracle Eloqua account to manage their campaigns and contacts. Paragon enables you to sync data between your app and your users’ Oracle Eloqua account.For example, you can create and manage campaigns in Oracle Eloqua or sync contacts from Oracle Eloqua. Learn more in [our docs](/resources/integrations/eloqua). ✨ **[ServiceNow](/resources/integrations/servicenow) Integration!** You can now connect to your users’ ServiceNow accounts to create, access, and update records in their ServiceNow account. Paragon enables you to sync data between your app and your users’ ServiceNow account. For example, you can create or update records in your users’ ServiceNow account or sync records from your users’ ServiceNow account. You can also receive webhooks when records are created or updated in your users’ ServiceNow account. Learn more in [our docs](/resources/integrations/servicenow). ✨ **[QuickBooks](/resources/integrations/quickbooks) Triggers!** You can now trigger Connect workflows when Accounts, Customers, and Invoices are created in your users' QuickBooks accounts, making it easy to sync data in real-time between your users' QuickBooks and your app. Learn more in [our docs](/resources/integrations/quickbooks). ✨ **[Microsoft Outlook](/resources/integrations/outlook) Integration!** You can now connect to your users' Microsoft Outlook account to manage their events and send messages. Paragon enables you to sync data between your app and your users’ Microsoft Outlook account. For example, you can create and manage events in Microsoft Outlook or sync messages from Microsoft Outlook. Learn more in [our docs](/resources/integrations/outlook). ✨ **[Google Analytics](/resources/integrations/google-analytics) Integration!** You can now integrate your Google Analytics application to get real-time data and run reports in Google Analytics! This integration also supports OAuth, allowing you to connect with your users' Google Analytics accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/google-analytics) to get started! ✨ **[Google Calendar](/resources/integrations/google-calendar) Triggers!** You can now trigger Connect workflows when events are created or updated in your users' Google Calendar, making it easy to sync data in real-time between your users' Google Calendar and your app. Learn more in [our docs](/resources/integrations/google-calendar). ## 🐛 Bug Fixes * Fixed a bug where error messages wouldn’t be sent back if you enabled “Continue workflow if request fails” for an Integration Request step. * Fixed an issue where tokenized strings representing objects were not sent as objects from Request step JSON bodies. * Fixed an issue where users would sometimes see a `Too many concurrent calls` error from the Function step. * Fixed an issue where the "Create or Update Lead" action in the Marketo integration would overwrite lead data with blanks if users chose to update a lead. * Fixed an issue where duplicate Salesforce entries may appear when searching over long lists. ## 🛠 Improvements * Added support for API Key validation for Klaviyo. * Added support for query parameters in Authorization URL when using the Custom Integration Builder. * Improved stability when switching between different Paragon projects. ## 🚀 New Features ✨ **[Google Search Console](/resources/integrations/google-search-console) Integration!** You can now integrate your Google Search Console application to run queries on their Google Search results data! This integration also supports OAuth, allowing you to connect with your users' Google Search Console accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/google-search-console) to get started! ✨ **[Monday.com](/resources/integrations/monday) Integration!** You can now integrate your Monday.com application to create, update, and manage Items in Monday.com! This integration also supports OAuth, allowing you to connect with your users' Monday.com accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/monday) to get started! ✨ **[Shopify](/resources/integrations/shopify) Triggers!** You can now trigger Connect workflows when Orders, Customers, or Products, are created or updated in your users' Shopify account, making it easy to sync data in real-time between your users' Shopify and your app. Learn more in [our docs](/resources/integrations/shopify). ✨ **[Monday.com](/resources/integrations/monday) Triggers!** You can now trigger Connect workflows when Items are created or updated in your users' Monday.com accounts, making it easy to sync data in real-time between your users' Monday.com and your app. Learn more in [our docs](/resources/integrations/monday). ✨ **[ClickUp](/resources/integrations/clickup) Integration!** You can now integrate your ClickUp application to create, update, and manage Tasks in ClickUp! This integration also supports OAuth, allowing you to connect with your users' ClickUp accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/clickup) to get started! ✨ **[ClickUp](/resources/integrations/clickup) Triggers!** You can now trigger Connect workflows when tasks are created or updated in your users' ClickUp account, making it easy to sync data in real-time between your users' ClickUp and your app. Learn more in [our docs](/resources/integrations/clickup). ✨ **[SharePoint](/resources/integrations/sharepoint) Integration!** You can now integrate your SharePoint application to create, update, and manage sites and lists in SharePoint! This integration also supports OAuth, allowing you to connect with your users' SharePoint accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/sharepoint) to get started! ✨ **[OAuth Client Credentials](/resources/custom-integrations) Authentication Support!** Specify the URL that this integration uses to exchange an authorization code for access tokens, also known as the **Access Token URL**. The Paragon Connect Portal prompt your user for their Client ID and Client Secret needed to validate the authentication. ## 🛠 Improvements * Added line numbers to error messages from the Function step to help debug them. ## 🐛 Bug Fixes * Fixed an issue where direct URLs to different Paragon projects would not load properly. * Fixed a bug where switching between projects wouldn't properly refresh the data in the dashboard. * Fixed an issue where the ClickUp Request step didn't use the correct URL. * Fixed an issue where users were unable to select password from the dynamic variable menu for Basic auth in the Request step. * Fixed an issue where environment secrets didn't properly resolve when sent through a Request step. ## 🚀 New Features ✨ **Request Triggers!** You can now trigger workflows for your customers using HTTP Requests! This means you can now trigger workflows and send custom responses to your app. **✨[Trello](/resources/integrations/trello) Integration!** You can now integrate your Trello application to create, update, and manage Cards and Lists in Trello! This integration also supports OAuth, allowing you to connect with your users' Trello accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/trello) to get started! **✨[Oracle Financials Cloud](/resources/integrations/oracle-financials-cloud) Integration!** You can now integrate your Oracle Financials Cloud application to create, update, and manage Invoices in Oracle Financials Cloud! This integration also supports OAuth, allowing you to connect with your users' Oracle Financials Cloud accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/oracle-financials-cloud) to get started! **✨[Azure DevOps](/resources/integrations/azure-devops) Integration!** You can now integrate your Azure DevOps application to create, update, and manage Work Items in Azure DevOps! This integration also supports OAuth, allowing you to connect with your users' Azure DevOps accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/azure-devops) to get started! ✨**Global User Settings!** You can now share workflow settings across different workflows. **✨[Trello](/resources/integrations/trello) Triggers!** You can now trigger Connect workflows when Cards are created or updated in your users' Trello account, making it easy to sync data in real-time between your users' Trello and your app. Learn more in [our docs](/resources/integrations/trello). ## 🐛 Bug Fixes * Fixed copy issues * Fixed an issue where failed workflow emails were not sent. * Fixed an issue in the Workflow Editor where steps would incorrectly duplicate when moving them upstream. * Fixed an issue where users were unable to filter Outreach using `Before` or `After` time filters. * Fixed an issue where the users could not select data from the dynamic variable menu in Paragon Automate. * Fixed an issue where users were unable to access `/v1/` of Klaivyo’s API. * Fixed an edge case where your users may quickly subscribe to a workflow then close the Connect Portal, which previously prevented the `onWorkflowChange` event from reaching your application. * Fixed some copy issues in the Integration Dashboard. * Fixed an issue for Enterprise customers where the number of connected users allowed was incorrectly set to `0`. * Fixed an issue where users could not add additional fields from the Dynamic Variable Menu when specifying any object directly to the "Additional Fields" input of the `Create Record` action in the Salesforce integration. ## 🛠 Improvements * Added an item to the Workflow Editor context menu called “Edit Connect Portal Workflow Settings” which takes you directly to the Workflow Settings part of the “Customize Connect Portal” page, for this workflow, allowing you to customize the settings for this workflow. * Added `aws-sdk` to the list of supported JavaScript libraries. * When creating App Events from the Workflow Editor, the App Event is now automatically selected. * You can now access your customer's base URL for Salesforce by calling `paragon.getUser` * Added Profile ID support to the Connect Portal authorization flow for Google Campaign Manager 360. * Added support for the `cloudflare` npm library in the Function step. * You can now load the Paragon Connect SDK in an iframe or when using `localhost`! ## 🐛 Bug Fixes * Fixed an issue where headers supplied to the step input for Integration Request steps were not being sent in the outgoing HTTP request. * Fixed an issue where users could only add property labels to User Settings in Salesforce one letter at a time. * Fixed an issue where Workflows with an empty App Event selection were not able to be deleted. * Fixed an error in the Salesforce Connect API sample code. * Fixed a bug where clicking "What's New?" would not open the changelog. * Fixed an issue where filtering on the `Name` property when getting customers in Xero consistently failed if the comparison value contained `&`. * Fixed an issue where Salesforce and Zendesk `Record Updated` triggers may not fire as expected. * Fixed an issue in the Workflow Builder preventing large workflows from deploying successfully. * Fixed an issue where input values would get erased if the page refreshed while typing the input. * Fixed an issue in Paragon Automate where Tasks Usage would always show as `0`. * Fixed an issue where custom Google-based integrations would not refresh tokens properly. * Fixed an issue where some accounts on Pro or Enterprise plans were not able to see their Task History properly. ## 🛠 Improvements * The Create Record and Update Record actions for HubSpot now include a JSON input for **Additional Fields**, in the case that you want to specify the inclusion of custom properties in the create/update payloads. * Links in Connect Portal descriptions for your integrations now open in new tabs. * Added a new type of input to Connect Portal Workflow Settings for Jira that allows your users to select an issue field type. * Added an “Additional Fields” JSON input to Jira that allows you to specify fields that aren’t represented in the UI as JSON. * Users won't be subscribed to workflows until all required fields are filled out. * Added support for `Text Area (Rich)` field type when deploying custom objects on Salesforce. * You can now view integration metadata from the Connect API and SDK! This includes the integration's name, icon, and brand color. ## 🚀 New Features **✨[Asana](/resources/integrations/asana) Triggers!** You can now trigger Connect workflows when projects or tasks are created or updated in your users' Asana account, making it easy to sync data in real-time between your users' Asana and your app. Learn more in [our docs](/resources/integrations/asana). **✨[Facebook Ads](/resources/integrations/facebook-ads) Integration!** You can now integrate your Facebook Ads application to create, update, and manage Campaigns and Lists in Facebook Ads! This integration also supports OAuth, allowing you to connect with your users' Facebook Ads accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/facebook-ads) to get started! ✨**Integration Icons in the Connect API and SDK!** You can now find integration icons and brand names inside the Connect API and SDK. **✨[Mailchimp](/resources/integrations/mailchimp) Integration!** You can now integrate your Mailchimp application to create, update, and manage Campaigns and Lists in Mailchimp! This integration also supports OAuth, allowing you to connect with your users' Mailchimp accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/mailchimp) to get started! ✨ **HubSpot [Custom Objects and Fields](/resources/integrations/hubspot)!** Our HubSpot integration now allows your users to choose their own custom object and field mapping in the Connect Portal, so you can sync data from your app to any objects or fields in your users' HubSpot instance. You can also deploy your own custom objects and fields to your users' HubSpot instance. Learn more in [our docs](/resources/integrations/hubspot). ## 🚀 New Features ✨**Free-form Scope Support!** We've redesigned the scope inputs in your integration's dashboard to allow you to add *any* scope. ✨**Multiple Project Support** You can now create multiple Paragon environments for your dev, staging, and production environments inside of Paragon! 🎉 Each one has its own workflows and authentication methods so you can test out new changes before going live to your customers. You can get started by checking out the Projects tab in the dropdown menu! ✨**Enhanced Authentication** If you use a third-party provider for user authentication, like Auth0 or Firebase, you can now it within Paragon! Just go to **Settings > User Authentication** to get started. ✨**Outreach Triggers!** You can now trigger Connect workflows when records are created or updated in your users' Outreach CRM, making it easy to sync data in real-time between your users' Outreach and your app. Learn more in [our docs](/resources/integrations/outreach). ✨**HubSpot Contact Deleted Trigger!** You can now trigger workflows to run when records are deleted in your user's HubSpot account! ✨**Boolean User Setting!** You can now allow your users to select a `true` / `false` statement from the Connect Portal! [Customize your Connect Portal](/connect-portal/connect-portal-customization) to get started. ## New ## 🛠 Improvements * You can now use dynamic variables when referencing phone numbers in Twilio. * You can now filter records when creating New Records and Record Updated triggers in Salesforce. * Optimized the Connect Portal layout on devices with smaller screens. * URLs in the Connect Portal are now automatically hyperlinked. * Migrated our Jira application to use rotating refresh tokens. * You can now include tooltips for each and any of the inputs in the workflow settings of your Connect Portal. ## 🐛 Bug Fixes * Fixed a UI bug when viewing previous workflow versions in Version History where navigation buttons get shifted to the left. * Fixed a UI bug when using the Salesforce Object Mapper to display a list of Salesforce Objects. * Fixed an inconsistency between Asana Connect Proxy API and Asana Request step. * Fixed a bug with Custom Integrations that prevents the interpolation of variables into the API Base URL. * Fixed a bug where the integration icon would not appear for Integration-Enabled triggers for Custom Integrations. * Fixed an issue where users couldn't change the icon for a custom integration after it was initially configured. * Fixed a bug where testing workflows or sending App Events may not fire properly. * Fixed a bug where the Workflow Editor would prompt users to enable their integration in the Connect Portal preview after already doing so. * Fixed an issue where the Contact Properties User Setting for HubSpot would not save the user's input. * Fixed an issue for Outreach where default scopes would always be used instead of credential-defined scopes. ## 🚀 New Features **✨[Google Campaign Manager 360](/resources/integrations/google-campaign-manager-360) Integration!** You can now integrate your Google Campaign Manager 360 application to create, update, and manage ads and campaigns in Google Campaign Manager 360! This integration also supports OAuth, allowing you to connect with your users' Google Campaign Manager 360 accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/google-campaign-manager-360) to get started! ✨**Salesforce Campaign Triggers!** You can now trigger Paragon Connect workflows when Opportunities or Members are added your users' Salesforce Campaigns, making it easy to sync data in real-time between your users' CRM and your app. Learn more in [our docs](/resources/integrations/salesforce). ## 🛠 Improvements * Inactive custom integrations now appear at the top of the Integrations dashboard. * When an App Event is deleted, all related workflows will become undeployed. * Removed the required validation for scopes when creating your own integrations. This means you can now build integrations with services that do not provide a list of scopes. * Added a `Custom` tag next to custom integrations in the Integration Dashboard * Long base URLS in the Custom Integration Request step are now visually truncated. * You can now specify the Reference field when creating invoices in Xero. * Added access to the `crm.object.owners.read` scope in HubSpot. * Added access to the `accounting.reports.read` scope in Xero. ## 🐛 Bug Fixes * Fixed an issue where using the integration name as a query parameter would result in the query not being recognized in the Paragon SDK or Paragon Proxy API. * Fixed an issue where creating meetings in Zoom would use the current timestamp instead of a supplied one. * Fixed an issue where the number of connected workflows to an App Event could be incorrect. Fixed an issue where users couldn't update rows in Google Sheets if their worksheet contained more than 26 columns. * Fixed an issue where deleting an integration wouldn't delete associated workflows and credentials. * Fixed an issue where custom integrations would not show up in the Paragon SDK. * The workflow name is no longer automatically highlighted when opening workflows in the Workflow Builder. * Fixed missing Field Inputs for the `Note` object in Salesforce Custom Objects. * Fixed an issue in Paragon Automate where the Integrations Manager would crash if the user didn't have any integrations connected. * Fixed an issue where the Workflow Builder would crash when trying to reference a trigger variable from the Delay step. * Fixed an issue where the page wouldn’t scroll if your cursor was above an input in the Workflow Builder. * Fixed an issue where some users were not able to add Meeting Registrants to Zoom when testing Zoom steps in the Workflow Builder. * Fixed an issue where the "Continue workflow if step fails" toggle wouldn't work on custom integration requests. * Fixed an issue in the Paragon Connect SDK where custom integrations would show up as `custom` instead of `custom.name` when calling `paragon.getUser`. ## New **✨[Outreach](/resources/integrations/outreach) Integration!** You can now integrate your Outreach application to create, update, and manage contacts and opportunities in Outreach! This integration also supports OAuth, allowing you to connect with your users' Outreach accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/outreach) to get started! ## 🚀 New Features ✨**Salesforce Pardot Triggers!** You can now trigger Connect workflows when members or prospects are created in your users' Salesforce Pardot account, making it easy to sync data in real-time between your users' Salesforce Pardot and your app. Learn more in [our docs](/resources/integrations/pardot). ✨**Integration Requests!** Don't see an action you need for an integration? Try using our Integration Request step! This step allows you to make API requests to your integration provider from the Workflow Builder. This is especially useful when you need access to an action we don't yet support. It works similarly to the API Request step: just input the API endpoint, fill out any parameters, and you're good to go! Paragon Connect takes care of the authentication so you don't have to 😉 ✨**HubSpot Engagements!** You can now create the following engagements for HubSpot in the Workflow Builder: * Email * Task * Call * Meeting * Note ✨**Jira Triggers!** You can now trigger Connect workflows when issues are created or updated in your users' Jira account, making it easy to sync data in real-time between your users' Jira and your app. Learn more in our docs. **✨[Microsoft Dynamics 365](/resources/integrations/microsoft-dynamics-365) Integration!** You can now integrate your Microsoft Dynamics 365 application to create, update, and manage records in Microsoft Dynamics 365! This integration also supports OAuth, allowing you to connect with your users' Microsoft Dynamics 365 accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/microsoft-dynamics-365) to get started! ## 🛠 Improvements * You can now choose the following scopes within the HubSpot integration: * `crm.objects.companies.read` * `crm.objects.companies.write` * `crm.objects.deals.read` * `crm.objects.deals.write` * `crm.lists.read` * `crm.lists.write` * You can now access your user's `providerId` within the Workflow Builder. This feature was previously exclusive to the Paragon Connect SDK. * Added support for `Phone` types for Xero contacts. * Added support for `AccountCode` when creating or updating invoices in Xero. ## 🐛 Bug Fixes * Updated Asana's description in the Workflow Builder. * Fixed an issue where users were unable to send a `DELETE` request without sending an empty `body` to Stripe through the Connect Proxy API. ## 🚀 New Features **✨[Zoom](/resources/integrations/zoom) Triggers!** You can now trigger Connect workflows when meetings are created or updated in your users' Zoom account, making it easy to sync data in real-time between your users' Zoom and your app. Learn more in our docs. **✨[Xero](/resources/integrations/xero) Triggers!** You can now trigger Connect workflows when new accounts, customers, or invoices, are created in your users' Xero account, making it easy to sync data in real-time between your users' Xero and your app. Learn more in our docs. **✨[Xero](/resources/integrations/xero) Integration!** You can now integrate your Xero application to create, update, and manage invoices in Xero! This integration also supports OAuth, allowing you to connect with your users' Xero accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/xero) to get started! **✨[Pardot](/resources/integrations/pardot) Integration!** You can now integrate your Pardot application to create, update, and manage prospects in Pardot! This integration also supports OAuth, allowing you to connect with your users' Pardot accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/pardot) to get started! **✨[Custom Integrations!](/resources/custom-integrations)** Custom Integrations allow you to build your own custom integration with any app provider on Paragon, even if it's not natively supported by our integration catalog. Similar to natively supported integration on Paragon, Custom Integrations provide the following features: * **Embedded Connect Portal** for your customers to activate and configure the integration in your app. * **Fully managed authentication** with OAuth 2.0 or API Keys. * **Visual workflow editor** for creating custom integration logic. * **Access to any API methods** provided by the application's API. Custom Integrations are included in the **Pro Plan** and above. **[Contact us](https://calendly.com/useparagon/demo)** to schedule a demo of Custom Integrations or upgrade your account. ## 🛠 Improvements * It's now easier to add User Settings when configuring the Connect Portal. * The icon for invalid workflow steps has been updated * Added `fast-xml-parser` npm module to the Function editor. ## 🐛 Bug Fixes * Fixed an issue where the code samples for Slack were incorrect. * Fixed an issue where switching from Connect to Automate incorrectly redirects to the Integrations Catalog. * Fixed a bug where clicking the background in the Connect Portal Preview causes the Portal to disappear. * Fixed an issue where Line Items in Xero would not accept a tokenized array. * Fixed an issue where users could not make API requests to Microsoft Teams through the Connect Proxy API. * Fixed an issue where dropdown icons in the Connect Portal wouldn't load for some users. * Updated the endpoint in the Salesforce code sample from `/query/Account` to `/query`. * Fixed an issue where an `a.trim is not a function` error would prevent users from deploying workflows. * Fixed an issues where users were not able to enable the QuickBooks integration from the Connect Portal. * Fixed an issue where users were unable to select a Zendesk account to use with the Zendesk triggers on Paragon Automate. ## 🛠 Improvements * App Events are now ordered alphabetically. This should make it easier to find your events from the App Events page. * You can now see the deployment status of the workflows connected to App Events via the App Events page. * Salesforce Webhook triggers now support all Salesforce Editions with API access. * We now present loading states in the Connect Portal for loading values. * It's now easier to access the User Setting editing panel. * You can now access all of Slack's scopes when creating your Slack integration. * You can now call `Paragon.getUser()` to access the **providerId** of any integrations that user has connected! * The Paragon Connect API now supports file uploads. * Users are redirected to the `Configuration` tab to select your workflows upon enabling an integration. * Inputs in the Connect Portal are now searchable. * Inputs in the Connect Portal now show loading states. * The following scopes have been added to Slack: `channels:history`, `groups:history`, `im:history`, `mpim:history`. * Improved workflow validation for function steps. ## 🚀 New Features ✨**`paragon.subscribe` to Paragon SDK Events!** Developers rejoice! You can now subscribe to different events that occur within the SDK: * **Integration enabled** (`"onIntegrationInstall"`) * **Integration disabled** (`"onIntegrationUninstall"`) * **Workflow state change** (`"onWorkflowChange"`) * **Connect Portal opened** (`"onPortalOpen"`) * **Connect Portal closed** (`"onPortalClose"`) Learn more about subscribing to SDK events and SDK callbacks in [our documentation](/apis/api-reference). ✨**Salesforce Sandbox Account Support!** Salesforce Sandbox accounts are now supported in the Connect Portal! You can learn more about our Salesforce integration in our documentation [here](/resources/integrations/salesforce). ✨**Workflow Validation!** The Workflow Builder became a little bit more sentient with this update and now informs you of misconfigured or empty fields. This is great for those times a workflow doesn't run as you'd expect it to. ✨**Zendesk Webhook Triggers!** You can now trigger workflows when tickets are created or updated in Zendesk Support, making it easy to sync data in real-time between your users' Zendesk accounts and your app. Learn more in [our docs](/resources/integrations/zendesk). ## 🐛 Bug Fixes * Slack OAuth scope options now includes `chat:write.public` * Fixed an issue where the `Custom Object Map` user setting in Salesforce would result in a `500` error for some users. * Fixed a UI bug where the App Events page would display the incorrect connected workflows. * Fixed a bug where App Credentials for integrations weren't deleted properly when the integration was removed. * Fixed an issue where workflow validation may apply to unused steps. * Fixed an issue where some users were unable to deploy Paragon Connect workflows with Connect credentials. * Fixed an issue where Salesforce would return an error if a record type had too many fields. * Fixed an issue where API requests issued from the Paragon Connect SDK are always "application/json". * Fixed an issue where users could pause workflows that have already finished. * Fixed an issue where some users wouldn't see their list of Slack channels. * Fixed an issue where headers passed into a Connect API request weren't forwarded to the end provider. * Fixed a bug where Task History periodically "flashes" if empty. ## 🚀 New Features ✨**Auto-refreshing Task History!** You heard right -- no more refreshing your Task History page to view your latest workflow executions! Any workflows that were previously running also update to succeeded to failed if they've been updated. **✨[Microsoft Teams](/resources/integrations/microsoft-teams) Integration** You can now integrate your Microsoft Teams account to send messages to channels and chats! Check out [our docs](/resources/integrations/microsoft-teams) to get started. ✨**Marketo Custom Object support!** You can now create and map custom objects in your Marketo workflows. ## 🛠 Improvements * Added loading animations to the Workflow dashboard and Task History in Paragon Automate. * QuickBooks now accepts `JSON` input for line items. * You can now view custom properties in HubSpot. * All actions now support the "continue if request fails" option. * Deleting a workflow redirects to the integration page instead of the top-level integration dashboard. * Improved Connect Portal alignment when using Safari. ## 🐛 Bug Fixes * Fixed spelling for Microsoft Teams * Fixed an issue where the OAuth Authentication window would appear twice when enabling the Shopify and Zendesk integrations. * Fixed a UI issue where `topic`, `start time`, `duration`, and `timezone` were not marked as *optional* when updating meetings in Zoom. * Fixed an issue where enabling the "Sent from a Paragon workflow" message in Slack would send an incomplete link to the workflow execution. * Fixed an issue where App Event data may show up as `undefined` in the Workflow Editor. * Fixed an issue where switching between Paragon Connect and Paragon Automate would show all Automate workflows as "undeployed". * Fixed a UI bug where the Connect Portal styling would apply to the main window. * Fixed an issue with Google Sheets where creating rows with numbers or dates puts a `'` character before the value. * Fixed spelling in App Events. * Fixed an issue where users would not be able to navigate between Paragon Connect and Paragon Automate when viewing Task History. * Fixed an issue where sending invitations to Team members to join Paragon would show up in the Spam inbox for some users. * Fixed a spelling error in the default description for the Zoom integration. * Fixed an issue where the `Create Invoice Line Item` action for QuickBooks wouldn't accept values from the dynamic variable menu. ## 🚀 New Features **✨[Zoom](/resources/integrations/zoom) Integration** You can now integrate your Zoom application to create, update, and manage meetings in Zoom! This integration also supports OAuth, allowing you to connect with your users' Zoom accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/zoom) to get started! **✨[Marketo](/resources/integrations/marketo) Integration** You can now integrate your Marketo account to create, update, and manage leads and lists in Marketo! This integration also supports User Credentials, allowing you to connect with your users' Marketo accounts and integrate them with your workflows. Check out [our docs](/resources/integrations/marketo) to get started! ✨**Integration Enabled Triggers!** Paragon Connect workflows can now be triggered when a user initially activates your integration. This is great for syncing contacts between your app and your user's CRM. Learn more about Integration Enabled triggers in [our docs](https://app.gitbook.com/@paragon-1/s/docs/workflows/triggers#integration-enabled). ✨**Whitelabel your Connect Portal!** To remove the Paragon branding from your Connect Portal, visit the **Appearance tab** in your customization settings. *This feature is available on our* ***[Pro plan](https://www.useparagon.com/pricing)*** *and above.* ## 🛠 Improvements * The step-timeout limit for users on the `Premium` Tier increased from `60` to `120` seconds. * Newly created Slack channels will appear in the dropdown menu when selecting a channel in Paragon Automate. * You can now create and edit App Event JSON without wrapping the `keys` in quotation marks `"`. * The Paragon Connect SDK can be loaded in the `` tag of your application. ## 🐛 Bug Fixes * Fixed an issue where the Salesforce OAuth token may expire. * Fixed an issue where Paragon Connect workflows could not be paused. * Fixed a bug where steps inside of a Fan Out would continue to execute if the workflow was paused during the Fan Out. * Fixed an issue where the OAuth window for integration providers would be blocked on Firefox. * Updated documentation references. * Fixed an issue where failed workflow emails wouldn't send for Paragon Connect workflows. * Fixed an issue where recently undeployed App Event-triggered workflows would still execute when the App Event was triggered. * Fixed a bug where the "Enable workflow" prompt may appear after it's already enabled. * Fixed an issue where editing a step from the Task History in Paragon Connect would lead to the Integrations Dashboard ## 🚀 New Features ✨**Webhook Triggers!** You can now trigger Connect workflows when records are created or updated in your users' Salesforce or HubSpot accounts, making it easy to sync data in real-time between your users' CRM and your app. Learn more in [our docs](/workflows/triggers). ✨ **Salesforce Custom Objects and Fields!** Our Salesforce integration now allows your users to choose their own custom object and field mapping in the Connect Portal, so you can sync data from your app to any objects or fields in your users' Salesforce instance. You can also deploy your own custom objects and fields to your users' Salesforce instance. Learn more in [our docs](/resources/integrations/salesforce). ## 🐛 Bug Fixes * **Paragon Connect:** The Salesforce SDK proxy now works for requests with an HTTP body. ## New ## 🛠 Improvements * You can now update a Slack notification preview when using Block Kit JSON. * Preview credentials are no longer required to display App Event test data in Paragon Connect. * You can now access the `jsonwebtoken` npm module in the Function step. ## 🐛 Bug Fixes * **Paragon Connect:** Shopify `read_users` scope is now off by default. ✨ **New Feature: Task History on Connect!** You can view your **[Task History](/monitoring/overview)** in the sidebar of your Paragon Connect dashboard. Task History keeps track of your workflow executions and lives on the left side of the dashboard. It serves as a timeline and an easy way to navigate through your workflow history, revisit any failed workflows, and get a step-by-step breakdown of the executed tasks in each one. * Fixed an issue where Asana would only show 50 projects. ## New ## 🐛 Bug Fixes * Salesforce "Search records by SOQL query" now displays the query interface. * Fixed an issue where saving a version in Version History would use the incorrect timestamp. * Fixed an issue where the start time for updating a Google Calendar event was not marked as *optional* ## 🛠 Improvements * Version History is now supported for Paragon Connect workflows! * Fixed a bug preventing users from editing Delay steps. * Fixed a UI issue where the Task Usage would disappear after refreshing the page when viewing Task History. * Fixed an issue where Fan Outs would give an incorrect preview reference: `Preview data (1 of 1)` Great news everyone! We made some major improvements to the user experience of building workflows. You can now right-click on any step to bring up the context menu. The **context menu** allows you to add steps in those hard-to-reach places, like in-between two Fan Outs or before a Conditional step. * Workflow steps can be moved from anywhere, just drag and drop to rearrange your workflows! * Added "Add to Step" to the context menu when right-clicking on a step in the Workflow Editor. * Fixed "Please specify a project type" error when creating a new account with `Personal` project type. ## New ## 🛠 Improvements * You can now access the [`snowflake-sdk`](https://www.npmjs.com/package/snowflake-sdk) npm module in the Function step! ## 🐛 Bug Fixes * Fixed an issue where duplicating a workflow wouldn't open the duplicate. * Workflow executions in Task History replay properly if the workflow is currently undeployed. * App icons no longer clip in Workflow steps. ## ✨ Paragon Connect Paragon Connect allows developers to embed user-facing SaaS integrations into their product in minutes. Setup the Paragon SDK once and instantly integrate your product with popular SaaS apps like Salesforce, HubSpot, Slack, JIRA, and more. Learn more about Connect [here](/). You can now access **Paragon Connect** in your sidebar menu of your Paragon dashboard. * Higher resolution app icons. * Premium Tier deployed workflow limit has been increased from 100 to 250 deployed workflows. * Fixed keyboard navigation when tagging workflows in the workflow dashboard. ## New ## New Features **✨Workflow Search** Can't find that workflow you've been working on? Well, look no further! You can now search and filter workflows in the Workflow menu! **✨Workflow Tags** You can now create and sort your workflows by tags! Just click the triple-dot menu and select **"Tag"**. *** It wouldn't be an update without bug fixes and improvements! ## Integrations **✨New Integration: [Asana](automate/resources/integrations-catalog/asana)** You can now query, add, and update projects and tasks in Asana. **✨New Integration: [Zendesk](automate/resources/integrations-catalog/zendesk)** You can now query, add, and update support tickets in Zendesk Support. Both integrations also support OAuth, allowing you to connect with your users' Asana or Zendesk Support accounts and integrate them with your workflows. Check out [our docs](automate/resources/oauth) to get started! *** ## Triggers **✨New Event-based Trigger: [MongoDB](automate/resources/integrations-catalog/mongodb)** You can now trigger workflows when a record is created or updated in your MongoDB database. As usual, we added a bunch of bug fixes and improvements! ## Updates **Updated the Request Step** with native support for different body types (JSON, multipart/form-data, x-www-form-urlencoded, raw) and authentication (Bearer Token or Basic auth). We also added support for tokenized variables in the Request parameters in addition to a few other quality of life improvements! As usual, we added bunch of bug fixes and improvements! **✨New Feature: [Version History](automate/building-workflows/version-history)!** You can now save versions of your workflows so that you can easily view or restore to previous versions! A version is automatically created every 10th auto-save, or you can save manually with ⌘⇧S (CTRL+Shift+S on Windows). **✨New Integration: [Quickbooks](automate/resources/integrations-catalog/quickbooks)!** You can now access and manage Quickbooks accounts, bills, customers, invoices, and payments. **✨New Integration: [Klaviyo](automate/resources/integrations-catalog/klaviyo)!** You can now create and manage Klaviyo campaigns, lists, subscribers, and templates. **✨New Integration: [Tableau](automate/resources/integrations-catalog/tableau)** You can now query, add, and update data quality warnings in Tableau. Made significant updates to the overall performance and speed of Paragon's web app. ## Updates **✨ New Feature: Integrations Manager!** You can now view, edit, and manage all the integrations connected to your Paragon account! Navigate to the **Integrations** tab in your dashboard sidebar to check it out! **Released [Paragon On-Prem](https://github.com/useparagon/on-prem)**, allowing you to deploy and run Paragon entirely on your own infrastructure! If you're interested in Paragon On-Prem, email us at [sales@useparagon.com](mailto:sales@useparagon.com). Improved performance when Fanning Out large arrays, among other bug fixes and improvements. **✨New Integration: JIRA!** You can now integrate with your JIRA account to create, update, and manage issues in your JIRA projects! You can also use our JIRA OAuth integration to allow your users to connect their JIRA accounts to your app. Check out [our docs](automate/resources/integrations-catalog/jira) for more. Made some major improvements to workflow performance - workflows now execute as much as 10x faster than before! Our Google Calendar integration now supports adding conference data to calendar events. Our AirTable integration now supports filtering columns by date when fetching records from a base. **✨New Feature: Auto-retries!** Workflow steps that perform a request now automatically retry if the request fails. When Auto-retry is enabled, Paragon will re-attempt failed requests up to several times, waiting after each attempt before performing the next retry. Auto-retries are available on our [Business plan](https://www.useparagon.com/pricing) and above **✨New Feature: MySQL Trigger!** You can now trigger workflows when a record is created or updated in your MySQL database! As always, a number bug fixes and performance improvements! **✨New Integration: Google Calendar!** You can now connect Paragon with Google Calendar to create, updates, and retrieve calendar events! Our new Google Calendar integration also supports OAuth-enabled apps, so you can integrate with your users' Google Calendar accounts, too. [Read more in our docs](automate/resources/integrations-catalog/google-calendar). **✨New Integration: FTP/SFTP!** You can now connect to an FTP or SFTP server from Paragon to download or upload files! [Read more in our docs](automate/resources/integrations-catalog/ftp). A bunch of performance improvements and bug fixes. **✨New Integration: Hubspot!** You can now integrate with Hubspot to create, update, and search Hubspot CRM records! Our Hubspot integration also supports OAuth, allowing you to connect with your users' Hubspot accounts and integrate them with your workflows. Check out [our docs](automate/resources/integrations-catalog/hubspot) for more. As always, numerous bug fixes and performance improvements. **✨ New Integration: OneSignal!** You can now send your users push notifications with our new OneSignal Integration! [Read more in our docs](automate/resources/integrations-catalog/onesignal). **You can now send rich, interactive Slack messages with Paragon** - our Slack integration now supports Slack's Block Kit JSON Builder! Improved performance when displaying integrations with a large number of input fields. Fixed a bug where Task History workflow executions sometimes couldn't be paused. **✨New Feature: Variable menu search and keyboard controls!** When inserting variables with `{{`, you can now search the variable menu by typing the step number and variable name. You can also navigate the menu by using the ⬆⬇ arrow keys and the Return key to select. **✨New Feature: Slack Block Kit support!** Our Slack integration now supports rich, interactive Slack messages created with the [Slack Block Kit Builder](https://app.slack.com/block-kit-builder) by simply copying the JSON payload from the Block Kit Builder into Paragon. Added a "Clear rows" action to our Google Sheets integration, allowing you to clear the contents of a row without deleting the row itself. Improved the composing experience of our Sendgrid integration. Improved performance when performing a Fan Out on a large array. ## Updates To make it easier to access javascript libraries within Functions, new functions will automatically come with the `libraries` parameter. You can now access the `s3` library in the Function step! Bug fixes and performance improvements! Added a "What's New" tab in the dashboard to showcase our latest release notes and product updates. You might even be reading this there! 🙃 You can now access the `lodash` npm module in the Function step! And of course…. bug fixes and performance improvements! ✨**New Feature: PostgreSQL Database Trigger!** You can now trigger workflows when a record is created or updated in your PostgreSQL database! Check out [our docs](automate/building-workflows/triggers) to learn more. ✨**New Feature: OAuth Integration!** You can now authenticate and build workflows with your users' Slack and Google accounts! Check out [our docs](automate/building-workflows/configuring-oauth) to learn more. Bug Fixes and performance improvements! **✨New Feature: Salesforce Integration!** Our most requested feature is here… you can now build workflows that create, update, and access records in Salesforce! What's more, our new Salesforce integration also supports OAuth, so you can integrate with your users' Salesforce accounts. Check out [our docs](automate/resources/integrations-catalog/salesforce) to learn more. ## Enhancements **✨New Feature: Onboarding Tutorial!** New users are now greeted with an onboarding tutorial that guides them through how to build a user re-engagement workflow. Task History now displays the number of [tasks](/billing/tasks) that were run in each execution. Failed workflow execution email alerts now include a link to their respective Task History execution. Improved app performance when viewing very large workflow executions in Task History. Added "Does not equal" as an operator to the Conditional step. ✨ **New Feature: Stripe Integration!** Connect your Stripe account to Paragon to build workflows with your customer and subscription data from Stripe! Check out our [documentation](automate/resources/integrations-catalog/stripe) to learn more about using Stripe with Paragon! **You can now right click on steps** to duplicate or delete them! As always, many bug fixes and performance improvements. ✨ **Paragon now has a brand new sign up experience**! If you haven't signed up already, check it out [here](https://app.useparagon.com/signup). You can now open Workflows and Task History executions in a new tab! Fixed an issue where string variable references would cause a step to fail if its value was null or undefined. Fixed an issue where completed workflows would sometimes appear to be still running in Task History. Bug fixes and improvements! ## Updates 🚀**Improved workflow performance** when using Fan Out on a large set of data. ✨ **New Feature: Replay Tasks**. You can now replay failed workflow executions from the Task History page! Task History now displays workflow executions in real time. You can now access the `https` npm module in Functions. You can now access the `slack`, `luxon`, `ramda`, and `date-fns` in the Function Step! Note that `date-fns` is accessed as `libraries.dateFns`. ✨ **New Feature: Task History Filters**. To help you navigate your Task History more easily, you can now filter executions by workflow, status, and date range! We made some **huge improvements** to Fan Out performance. Any Fan Out over 50 items now executes serially (instead of in parallel), making it far more resilient - especially if you need to avoid hitting API rate limits. The Airtable step now allows you to **select your Airtable Base and View**, rather than having to type them in! We also improved how we show your Airtable fields when creating or updating records. You can now access the `csv` and `redis` npm modules in the Function step! **New Feature: Environment Secrets**. You can now securely store and use environment secrets like API Keys in your workflows! Our MongoDB integration now supports writing raw Mongo queries. You can now view your task usage in the dashboard sidebar. You can now manage your Paragon subscription and billing information. Redesigned the dashboard sidebar to be a little more visually consistent with the rest of the app. # SDK Release Notes Source: https://docs.useparagon.com/changelog/sdk Release notes for new versions of the Paragon SDK. ### Updating to the latest version To update your SDK to the latest version, run the following commands in your app or codebase referencing the SDK: ```bash theme={null} npm install @useparagon/connect@latest ``` ## Release Notes **Improvements:** * Improved [`paragon.getCustomWebhookUserManualUrl`](/apis/api-reference#getcustomwebhookusermanualurl) to throw clear, actionable errors when an invalid `workflowId` or `connectCredentialId` is passed, instead of producing malformed URLs or generic failures. **Fixes:** * Fixed `paragon.configureGlobal()` polluting browser history when reconfiguring the Connect SDK iframe. **Improvements:** * Added `siteUrl` and `siteId` options to the [SharePoint File Picker](/resources/integrations/sharepoint#using-the-sharepoint-file-picker) `init()` call, allowing a single connected account to target different SharePoint sites. **Improvements:** * Exposed `credentialId` in the `onNext` handler state for [`paragon.installFlow.start`](/apis/api-reference#installflow), so it is available once the credential has been created (e.g. during the `postOptions` stage). **Fixes:** * Fixed an issue where passing an invalid `accountType` to `paragon.connect` or `paragon.installIntegration` would silently fall back to showing all available authentication options instead of surfacing a clear error. **Fixes:** * Fixed `installFlow.cancel()` not properly stopping the underlying session polling when cancelling an active OAuth flow. **Improvements:** * Updated TypeScript types for [`paragon.getUser`](/apis/api-reference#getuser) so that `resources[*].providerData` is now typed and accessible. **Fixes:** * Fixed concurrent [`paragon.request`](/apis/api-reference#request) proxy GET calls to the same URL failing with a "body stream already read" error. * Fixed error propagation in the Connect OAuth popup for Custom Integrations when credential values are empty. **Improvements:** * Added functions for retrieving available triggers in ActionKit and listing required parameters for rendering with the [Headless Connect Portal](/connect-portal/headless-connect-portal). **Fixes:** * Fixed requested browser permissions so that copy-to-clipboard inputs correctly write to the user's clipboard. **Improvements:** * Recategorized `React` as a peer dependency in the Connect SDK to enable better compatibility with React 18+ applications. * Updated types for [`paragon.request`](/apis/api-reference#request), so `requestOptions` properties can be omitted when not needed, improving TypeScript ergonomics. **Fixes:** * Fixed persona metadata key normalization improving SDK efficiency. **Fixes:** * Fixed Custom Integration identifier handling so the SDK now uses the `slug` returned by the API instead of recomputing one from the integration display name. **Custom Integration identifiers are now immutable** Before API version [2026-04](/changelog/api#2026-04), changing the display name of a Custom Integration would result in a change in the integration identifier/slug (used in `paragon.connect`) and the integration source path (after a `para pull`). This identifier is now immutable and set at the time your Custom Integration is created. For existing Custom Integrations, the identifier is set immutably to the same value it currently has in your project. SDK versions \< 2.3.1 will continue to use name-derived identifiers and work without issue. You can upgrade to v2.3.1 or later to use the current, immutable identifiers. Learn more about these changes in the [API Changelog](/changelog/api#2026-04). **Improvements:** * Added [`paragon.setDataSources`](/apis/api-reference#setdatasources) API for centralized configuration of data sources for [Custom Dropdowns](/connect-portal/workflow-user-settings/custom-dropdowns) and [Field Mapping](/connect-portal/field-mapping) inputs in the Headless Connect Portal. * Added [`paragon.getSourcesForInput`](/apis/api-reference#getsourcesforinput) resolver to retrieve typed source configurations for inputs, enabling more predictable data source handling with typed discriminators (`SingleSource`, `FieldMapperSources`, `ComboSources`, `DefaultFieldValueSources`). **Improvements:** * Added support for handling streamed responses in [`paragon.request`](/apis/api-reference#request) proxy requests, enabling proper handling of large file downloads (e.g., from Google Drive). **Improvements:** * Added `externalId` option to [`paragon.connect`](/apis/api-reference#connect) and [`paragon.installIntegration`](/apis/api-reference#installintegration) for associating credentials with an external identifier. The `externalId` is also available on credential objects returned by [`paragon.getUser`](/apis/api-reference#getuser). **Fixes:** * Fixed handling of non-ASCII characters in user metadata passed to `paragon.authenticate`. The SDK now properly encodes metadata values, ensuring characters like Unicode text are fully supported. **Improvements:** * Added `refreshOnOpen` option for custom dropdowns, enabling dropdown values to reload each time the dropdown is opened. This supports dependent dropdown patterns where one dropdown's options change based on another input's value. **Fixes:** * Fixed Box integration file picker's global CSS styles from leaking into and conflicting with the host application's styles. * Fixed misleading error message when calling `paragon.updateWorkflowUserSettings` for workflows that are not deployed. **Fixes:** * Fixed an issue where the SDK could send the initial request to the wrong server endpoint when restoring state from localStorage before configureGlobal() was called, causing unnecessary requests and errors for customers using custom or on-prem endpoints. **Improvements:** * Increases the timeout for OAuth connections to complete from 1 minute to 3 minutes. **Fixes:** * Fixes an issue where the `onComplete` callback to`paragon.installFlow.start` was not always providing the credential details for the account that was connected. **Improvements:** * Updates the type signature for `picker.init()` to optionally accept a `developerKey` property (required for Google Drive only). * Updates the type signature for `paragon.connect` to accept [Custom Dropdowns](/connect-portal/workflow-user-settings/custom-dropdowns) loader functions. * Adds support for [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) to `paragon.getFieldOptions`. **Fixes:** * Fixes an issue that caused stale state to be returned from `paragon.getUser` after calling `paragon.updateIntegrationUserSettings` or `paragon.updateWorkflowUserSettings`. **Improvements:** * Adds a new `InstructionStage` to the [Headless Connect Portal](/connect-portal/headless-connect-portal) to render instructional text as required by integration install flows (such as Salesforce package installation). **Fixes:** * Fixes an issue that prevented Dynamic Field Mapping from rendering properly in the headful Connect Portal. **Improvements:** * Adds support for Shared Drives in the [Google Drive File Picker](/resources/integrations/google-drive#using-the-google-drive-file-picker) as a tab in the picker. You can enable this with the following options: ```js theme={null} const picker = new paragon.ExternalFilePicker("googledrive", { integrationOptions: { googledrive: { enableSharedDrives: true } } }); ``` * Adds support for `allowMultipleCredentials`, `overrideRedirectUrl`, and `selectedCredentialId` install options to the Headless Connect Portal [`InstallFlow`](/apis/api-reference#installflow). * **Note**: In previous versions, [Multi-Account Authorization](/apis/api-reference/multi-account-authorization) was automatically enabled for the Headless Connect Portal. The `allowMultipleCredentials: true` option must now be passed to opt-in to Multi-Account Authorization for consistency with other SDK functions. **Improvements:** * Updates [Google Drive File Picker](/resources/integrations/google-drive#using-the-google-drive-file-picker) MIME type filtering by using the `setSelectableMimeTypes` option in the Google Picker SDK. This change means that all files will *appear* in the view, but only MIME types passed in `allowedTypes` array will be selectable (mirroring the behavior of other file pickers). * Adds a new function [`paragon.getCustomWebhookUserManualUrl`](/apis/api-reference#getcustomwebhookusermanualurl) for constructing the URL of user-level [Custom Webhooks](/resources/custom-webhooks). This function can be used to prompt your user to register a Custom Webhook URL in their integration account settings. **Fixes:** * Fixes the base URL used for the Proxy API when using the SDK for on-prem environments. **Improvements:** * Improves the security of OAuth connection flows. **For on-prem customers:** This SDK update requires that your instance version has been upgraded to `2025.1028` or later. You can verify your current version by visiting the `/infoz` path of your dashboard / login URL. Reach out to your Customer Success Manager to request an instance upgrade. **Fixes:** * Fixes a compatibility issue between the SDK using certain Redux libraries by preventing returning internally-managed state in SDK responses. **Fixes:** * Updates the base URL used for triggering App Events and Workflows from the SDK to the newest service URL. * Fixes an issue where `X-Paragon-Credential` was included in outgoing HTTP headers when not explicitly set by the SDK. **Improvements:** * Adds `paragon.installFlow.cancel` to the [Headless Connect Portal](/connect-portal/headless-connect-portal) API to cancel in-progress installs. [Learn more](/apis/api-reference#installflowcancel) **Fixes:** * Fixes an issue where `onSuccess` callbacks would not fire for some types of integrations. * Fixes types for `paragon.request` to include `selectedCredentialId` for Multi-Account Auth. * Fixes an issue where credentials with a non-`VALID` status could not be uninstalled with `paragon.uninstallIntegration`. **Improvements:** * Adds support for the `user-configured-oauth` authentication type for the Headless Connect Portal. **Fixes:** * Fixes types for `paragon.installIntegration` to include `selectedCredentialId` in available options. * Fixes connection issues for the Headless Connect Portal for certain integrations that have a PreOptionsStage, like Zendesk. **Improvements:** * Adds support for `oauthTimeout` option to the [`paragon.installFlow.start`](/apis/api-reference#installflowstart) method of the Headless Connect Portal, to specify the number of milliseconds to wait for the OAuth prompt to complete. * Adds `OAuthBlockedError` and `OAuthTimeoutError` as possible error types for [`paragon.installFlow.start`](/apis/api-reference#installflowstart) to detect when the OAuth prompt is blocked by the browser or takes longer than expected. **Improvements:** * Adds a centralized `onError` callback for the [`paragon.installFlow.start`](/apis/api-reference#installflowstart) method of the Headless Connect Portal. **Fixes:** * Fixes types for `paragon.connect` to include definitions for Custom Dropdowns. * Fixes an issue where Multi-Account Authorization could not be used with the [Headless Connect Portal](/connect-portal/headless-connect-portal). **Fixes:** * Fixes an issue where Multi-Config could not be used correctly when [sending App Events](/apis/api-reference#event) with the SDK. **Improvements:** * Adds support for Multi-Account Authorization for [File Pickers](/apis/api-reference#externalfilepicker). ## New: Field Mapping for all integrations You can now define custom Field Mapping inputs for any integration using the SDK. Learn more about how to use the new SDK options in the [Field Mapping documentation](/connect-portal/field-mapping#passing-your-own-integration-objects-and-fields). **Improvements:** * Updates `paragon.request` method to use the new URL changes introduced in the [2025-07 API release](/changelog/api#2025-07). **Fixes:** * Fixes an issue where the Headless Connect Portal might not progress to the post-OAuth stage when the OAuth prompt is completed. **Improvements:** * Adds support for [Box](/resources/integrations/box) File Picker. **Fixes:** * Fixes an issue where `showPortalAfterInstall` option in `paragon.installIntegration` did not correctly prompt the Connect Portal after install. * Fixes an issue where the Headless Connect Portal (using `paragon.installIntegration`) intermittently did not show post-OAuth options (such as SharePoint site selection) after the OAuth prompt was completed. **Improvements:** * Exposes new `CredentialStatus` and `IntegrationMetadata` types from the SDK. **Improvements:** * Removes call to `/sdk/projects` to improve performance of SDK authentication. **Improvements:** * Updates return types of Headless Connect Portal function `paragon.getDataSourceOptions` to show all available fields for input sources. **Improvements:** * Updates `paragon.getFieldOptions` function to make `parameters` field optional. ## New: Headless Connect Portal improvements We have made major improvements to the Headless Connect Portal which now support all functions of the hosted Connect Portal, including User Settings, Field Mappings, and Workflows. See our updated documentation and example implementation [here](/connect-portal/headless-connect-portal). ### Breaking changes * **There are no breaking changes in this release**. If you are using the Headless Connect Portal in v1.x of the SDK, all existing functionality with `paragon.installIntegration` will be preserved. * To opt-in to improvements to the Headless Connect Portal that can utilize more of your own UI components, see our migration guide below. ### Migrating from v1 of the Headless Connect Portal If you are currently using the Headless Connect Portal in v1.x of the SDK, you can update your implementation to take advantage of the new functions introduced in this release. 1. Call `paragon.setHeadless` in your implementation to opt in to the new version of the Headless Connect Portal: ```js theme={null} paragon.setHeadless(true); ``` 2. Implement all stages of the authentication flow described in the Headless Connect Portal docs. In v1.x of the SDK, the following stages were handled by the headful Connect Portal appearing and should now be implemented by your own components: * Account Type selection (e.g. Salesforce Production vs. Salesforce Sandbox) -- `AccountTypeStage` * Pre-OAuth / API Key inputs (e.g. Stripe API Key input, Shopify Store URL) -- `PreOptionsStage` * Post-OAuth inputs (e.g. Atlassian site, SharePoint site selection) -- `PostOptionsStage` * To implement the above stages, replace `paragon.installIntegration` with `paragon.installFlow.start` (this function will guide you through the above install stages): ```js Migrating to installFlow theme={null} paragon.installIntegration("salesforce"); // [!code --] paragon.installFlow.start("salesforce", { // [!code ++] // Handle all stages of the install flow // [!code ++] }); // [!code ++] ``` # Customizing the Connect Portal Source: https://docs.useparagon.com/connect-portal/connect-portal-customization Control your end-user integration experience by customizing Connect Portal. The **Connect Portal** is a ready-made interface that lets your users connect their third-party app accounts to your application. Paragon's out-of-the-box Connect Portal To customize the Connect Portal for a specific integration, go to the Integration Overview page and click **Customize Connect Portal**. This opens the **Connect Portal Editor**. Within the Connect Portal Editor, you can tailor several aspects of the user experience: * **[Overview](#overview):** Update the integration's description shown in the Overview tab. * **[Configuration](#configuration):** Adjust how workflows and workflow settings appear in the Configuration tab. * **[Appearance](#appearance):** Change the visual style of the Connect Portal. ## Overview There are two options you can edit in the **Overview** tab: * **Short description:** a one-line description of your integration that appears at the top of the Connect Portal. * **Overview**: a long-form description of your integration. This description is the first thing your users see when opening the Connect Portal, so this is the best place to describe and showcase your integration's benefits in detail to your users. You can use [Markdown formatting](https://commonmark.org/help/) in the Overview section. ## Configuration ### Settings Under the **Settings** section of the Configuration tab, you'll be able to create user-facing settings that allow your users to configure parameters of their workflows from the Connect Portal. Some example use cases of User Settings include: * **Slack:** choosing which channel that messages should be sent in * **Salesforce:** choosing a custom opportunity stage that new opportunities created in * **Hubspot:** choosing a custom lead status that new leads should be created with * **Jira:** choosing which Jira user that new issues should be assigned to }> Learn more about adding and configuring User Settings to let your users customize their integration and workflows. ### Workflows Under the **Workflows** section of the Configuration tab, you can control the visibility and customize the description of workflows that appear in the Connect Portal. }> Learn more about controlling which workflows appear in the Connect Portal and how they are displayed to your users. ## Appearance ### Theme The Connect Portal supports both light and dark themes, allowing you to choose a theme that matches your application's overall theme. The Connect Portal can also detect and match your user's system theme settings by selecting "Match System Theme" from the theme dropdown. #### Light #### Dark ### Paragon Branding You can optionally turn off the Paragon-branded footer in your Connect Portal. Whitelabeling the Connect Portal, which allows you to remove Paragon branding, is available on our **Pro plan** and above. Please [contact us](mailto:sales@useparagon.com) to enable this option on your account. # Displaying Workflows Source: https://docs.useparagon.com/connect-portal/displaying-workflows Control the visibility or customize the description of workflows that appear in the Connect Portal. Workflows are an easy way for members of your team to build integration logic. Workflows appear in the Connect Portal, in the **Configuration** tab, as a way for your users to opt-in or out of specific features of your integration. ## Customizing the Workflow List You can customize the Workflow List and their display options by visiting the **Configuration** tab of the Customize Connect Portal screen for any integration. **Not seeing a workflow in the Connect Portal?** Workflows do *not* appear to your users in the Connect Portal if: * The workflow is not deployed * The workflow is hidden for all users * The workflow uses an Integration Enabled trigger ### Reordering Workflows Drag and drop Workflows to change the order in which they appear to your users in the Connect Portal. ### Workflow Display Options By clicking on a workflow row, you can edit the display options for that specific workflow: #### Name and Description This is the user-facing name and description of the workflows as it appears in your Connect Portal. You should give your workflow a descriptive name and explain the functionality that it provides in the description to make it easy for your users to decide which workflows they want to activate. #### Settings Workflow-level User Settings can be added to allow customization that is specific to a particular workflow (as opposed to User Settings that apply to multiple workflows across the integration). Your user's selection for workflow-level User Settings will only be available to the workflow they are created for, as values available in the Variable Menu. Learn more about adding and configuring User Settings below: #### Default to enabled If turned on, the workflow will appear as enabled by default once a user connects their account to the integration. *This setting is unavailable for workflows that have required workflow-level User Settings.* Turning on this option will *not* affect the workflow's status for existing users. For example, if the workflow is disabled for an *existing user* prior to turning on this option, it will remain disabled after turning on this option. #### Hide workflow from Portal for all users If turned on, the workflow will be hidden from all users from the Connect Portal. The workflow can still be enabled by default (using the "Default to enabled" option described above) or enabled with a request to the [users.md](/apis/users). **Workflow Permissions** You can restrict the visibility of workflows to specific users (or groups of users) with Workflow Permissions. Learn more about adding and configuring Workflow Permissions below: # Field Mapping Source: https://docs.useparagon.com/connect-portal/field-mapping Use a Field Mapping User Setting to allow your users to define a mapping between objects in your application and their integration. ## Overview A **Field Mapping** is a type of User Setting that allows your users to define a mapping between an object in your application (an "Application Object") and an object in their connected integration account (an "Integration Object"). For example: let's say your integration needs to sync your user's Task records from your application to their Tasks in a Salesforce account. To do that, you'll need to build up a **Mapping** between fields in your application's Tasks and fields for a Task in a connected Salesforce account, as illustrated below: To enable your user to provide this Mapping, you can use the Connect Portal to provide a User Setting that displays each field of a Task (Title, Description, Completed) and prompts them to select a matching field of a Salesforce Task. Once this Mapping is completed, you're able to use the Mapping like any other [User Setting](/connect-portal/workflow-user-settings/workflow-user-settings#user-settings) in the [Workflow Editor](/connect-portal/field-mapping#usage-in-workflows) to transform objects in either direction (from Application Object to Integration Object **or** from Integration Object to Application Object). ## Adding Field Mapping to the Connect Portal In an integration in your project, click on **Customize** from the Connect Portal section in the dashboard. Select **Configuration**, add a **Setting**, and then select **Field Mapping** as the type of User Setting. Give this setting a descriptive name that explains what this Mapping represents for your integration. For example, if Contacts is your intended Application Object to be mapped to a Salesforce Object, you might title this input "*Map Contacts to this object*". Add a label for each property that should be mapped from your Application Object to a Salesforce Object. You might add labels for "First Name", "Last Name", and "Email", if the schema for Contacts in your app includes these properties. In your [Connect Portal](/getting-started/displaying-the-connect-portal), your users will be prompted to select an object from their Salesforce instance when enabling this workflow. For each of the Application Object properties you labeled, your users will be prompted to select which Integration Object field that property should be mapped to. By this stage, you have configured a static Field Mapping in the dashboard and can call `paragon.connect` to render the Field Mapping in the Connect Portal in your frontend application. ## Configuring Field Mapping Many implementations of Field Mapping will warrant additional configuration options. Start by using the Paragon Dashboard to enable additional configuration options for your Field Mapping like [Dynamic Application Fields](#dynamic-application-fields). Then, learn how to [pass dynamic fields through the Paragon SDK](#passing-dynamic-fields-through-the-sdk) in your frontend to render dynamic Field Mapping elements in the Connect Portal. ### Configuring your Field Mapping setting in the Dashboard #### Dynamic Application Fields If your Application Fields may vary between your users for a particular Mapping, you are able to provide those options from your frontend application, through the SDK, using **Dynamic Application Fields**. **Dynamic Application Fields is available for Paragon Enterprise customers and as an add-on for Paragon Pro customers.** To learn more, contact your Customer Success Manager or [sales@useparagon.com](mailto:sales@useparagon.com). Enable and configure Dynamic Application Fields by adding a Field Mapping input to your Connect Portal as described above. Configuration for Dynamic Application Fields will have a different interface depending on the integration. Complete the dashboard configuration for Dynamic Application Fields using the following steps, depending on the interface you see: Pre-configured Field Mappings simplify the `paragon.connect` call by rendering pre-built dropdowns for the most common object types and fields for you. Toggle on the "**Use dynamic fields**" slider option in your Field Mapping setting configuration. Provide an Object Name that represents the name of your Application Object. This name will be used as an identifier to provide dynamic application fields through the SDK, as demonstrated in the code example to `paragon.connect` in the [Passing Dynamic Fields through the SDK](#passing-dynamic-fields-through-the-sdk) section. Edit the example fields included in the code snippet to represent realistic values that will be passed from your application. These values will be used for testing in the Workflow Editor, and will not affect the live configuration for your users. Learn more about testing your Field Mapping in the [Testing Field Mapping in the Workflow Editor](#testing-field-mapping-in-the-workflow-editor) section. Click **Save** to apply your changes. By default, the Field Mapping Input will have Dynamic Field Mapping enabled. Provide an Object Name that represents the name of your Application Object. This name will be used as an identifier to provide dynamic fields through the SDK, as demonstrated in the code example to `paragon.connect`. Edit the example `objectTypes` and `integrationFields` included in the code snippet to represent realistic values that will be passed from your application. This will not affect the live configuration for your users, since values must be passed from your frontend application through the SDK, but use this to test example field values while building workflows. Learn more about testing your Field Mapping in the [Testing Field Mapping in the Workflow Editor](#testing-field-mapping-in-the-workflow-editor) section. Click **Save** to apply your changes. ### Passing Dynamic Fields Through the SDK For all Field Mapping inputs configured in the Dashboard to use Dynamic Application Fields, use the `paragon.connect` method in your frontend to fully configure the **Integration Objects**, **Integration Fields**, and **Application Fields** that are rendered dynamically in the Connect Portal. [Pre-configured Field Mappings](#pre-configured-field-mapping-support) simplify the SDK call by pre-building dropdowns for the most common object types and fields for you and minimally require you to specify your *Application Fields* in the SDK. You can think of this as the *right-hand-side* of the Field Mapping input. For all other integrations, you must define the Integration Objects, their Integration Fields (the *left-hand-side* of the Field Mapping input), and your Application Fields. #### Passing Application Fields for a Pre-configured Field Mapping Pass your Application Fields by specifying the `mapObjectFields` option, with an object keyed by the name you specified in the "Object Name" field when configuring your setting: ```js Open a pre-configured Field Mapping with Dynamic Application Fields theme={null} paragon.connect("salesforce", { mapObjectFields: { "Task": { fields: [ { label: "Title", value: "title" }, { label: "Description", value: "description" }, { label: "Completed?", value: "isCompleted" } ] } } }); ``` For each field passed, two values are specified: * `label`: The human-readable description for the field. This will be shown to the user in the Field Mapping input. * `value`: The field key used by the object as it exists in your application. *This key does not yet support nested properties.* Calling the above would result in the Connect Portal appearing like below: #### Passing Your Own Integration Objects and Fields For all integrations, you can fetch and render any object type and its fields that are available in the user's connected integration. Define the `objectTypes` and `integrationFields` properties and their `get` methods to render either a static list of objects and their fields, or a paginated list of objects and their fields via an API request. * `objectTypes` — defines the list of record types available in the user’s integration (e.g. “Contact”, “Deal”, “Opportunity”). * `integrationFields` — defines the fields available for the selected record type. The both properties require a `get` method that must return either: * A Promise that resolves to an array of dropdown options, where each is a `{ label, value }` pair as defined above in [Passing Application Fields for a Pre-configured Field Mapping](#passing-application-fields-for-a-pre-configured-field-mapping) example, or * An object containing both the dropdown options and a pagination cursor ```ts objectTypes: Array of Dropdown Options theme={null} // objectTypes { get: async (cursor, search) => { return [ { label: "Contact", value: "contact" }, { label: "Deal", value: "deal" }, { label: "Opportunity", value: "opportunity" } ] } } ``` ```ts objectTypes: Paginated Dropdown theme={null} // objectTypes { get: async (cursor, search) => { return { options: [ { label: "Contact", value: "contact" }, { label: "Deal", value: "deal" }, { label: "Opportunity", value: "opportunity" } ], nextPageCursor: "123" } } } ``` **applicationFields** When passing your own object types and fields, you must alter your `paragon.connect` call to explicitly define the `applicationFields` property. `applicationFields` defines the list of fields from your application. It should contain a `fields` array containing `{ label, value }` pairs identical to the `fields` array in the [Passing Application Fields for a Pre-configured Field Mapping](#passing-application-fields-for-a-pre-configured-field-mapping) example. The following are examples of how to fully configure `objectTypes`, `integrationFields`, and `applicationFields` when passing your own object types and fields: ```ts theme={null} paragon.connect("salesforce", { mapObjectFields: { // Replace "CustomObjectMapping" with your Application Object Name as specified in // Field Mapping input options CustomObjectMapping: { objectTypes: { get: async (cursor, search) => { const res = await paragon.request("salesforce", "/v1/objects", { method: "GET" }); return res.data.map((obj) => ({ label: obj.name, value: obj.id })); } }, // Integration fields from the selected objectTypes (Contacts' schema / field types) // @returns Promise resolving to Integration Fields to display. // Each item: { label: string, value: string } integrationFields: { get: async ({ objectType }) => { const res = await paragon.request("salesforce", `v1/objects/${objectType}/fields`, { method: "GET" }); return res.fields.map((field) => ({ label: field.label, value: field.id })); } }, // Fields from your application that will be displayed in the Connect Portal applicationFields: { fields: [ { label: "Title", value: "title" }, { label: "Email", value: "email" } ], defaultFields: [], userCanRemoveMappings: true } } } }); ``` ```ts theme={null} paragon.connect("slack", { mapObjectFields: { // Replace "SlackObjectMapping" with your Application Object Name as specified in // Field Mapping input options SlackObjectMapping: { objectTypes: { get: async (cursor, search) => { const url = `/conversations.list${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ''}`; const res = await paragon.request("slack", url, { method: "GET" }); // Optional search filter (case-insensitive) const filteredChannels = (res.channels || []).filter(ch => !search || ch.name.toLowerCase().includes(search.toLowerCase()) ); const channels = filteredChannels.map(ch => ({ label: ch.name, value: ch.id, })); return { options: channels, nextPageCursor: res.response_metadata?.next_cursor || null, }; }, }, // Integration fields from the selected objectTypes (Conversations' schema / field types) // @returns Promise resolving to Integration Fields to display. // Each item: { label: string, value: string } integrationFields: { get: async () => { const res = await paragon.request("slack", "/conversations.list", { method: "GET" }); const options = (res.channels || []).map(ch => ({ label: ch.name, value: ch.id, })); return { options }; }, }, applicationFields: { fields: [ { label: "Channel Name", value: "name" }, { label: "Channel ID", value: "id" }, ], }, }, }, }); ``` #### User-Configurable Mappings If your use case requires it, you can allow users to control the *number* of Field Mappings that are set by adding the `userCanRemoveMappings` option alongside the `fields` array in your `paragon.connect` call. ```js theme={null} paragon.connect("salesforce", { mapObjectFields: { // Replace "Task" with your Application Object Name as specified in // Field Mapping input options "Task": { fields: [ { label: "Title", value: "title" }, { label: "Description", value: "description" }, { label: "Completed?", value: "isCompleted" } ], userCanRemoveMappings: true } } }); ``` Setting this option will result in the Connect Portal appearing like below: With this option, your users will be able to remove, re-add, and change any of the Mappings that are passed through `fields`. This option can be combined with the `defaultFields` option to achieve different display configurations: `defaultFields` is an array of strings matching the `value` property of your `fields`. Any fields with matching `value` keys will be included in the initial list of Field Mappings that your user sees, when viewing the Connect Portal for the first time. If `defaultFields` is unspecified, *all* fields specified in the `fields` property will appear in the initial list of Field Mappings. #### User-Creatable Fields If your Application Object supports freeform fields or a flexible schema, you can allow users to create their own fields in the Field Mapping input. ```js theme={null} paragon.connect("salesforce", { mapObjectFields: { // Replace "Task" with your Application Object Name as specified in // Field Mapping input options "Task": { fields: [ { label: "Title", value: "title" }, { label: "Description", value: "description" }, { label: "Completed?", value: "isCompleted" } ], defaultFields: [], userCanCreateFields: true } } }); ``` If this option is specified, the Connect Portal will appear with an option for users to create their own fields, if the field is not available in the list populated by `fields`: ## Testing Field Mapping in the Workflow Editor When building workflows that use Field Mapping, you can test how your mappings work directly in the Workflow Editor. The mapping is applied based on what is configured for the Test User. ### Configuring Test User Mappings To configure the Field Mapping for the Test User: 1. Return to the **Customize Connect Portal** section of your integration in the dashboard. 2. Select the **Field Mapping** Input Type setting. 3. Alter the **Test Mapping** code to change the static Integration Objects, Integration Fields, and Application Fields that are rendered in the preview Connect Portal. (This has no production impact.) 4. Click **Save** to apply your changes. 5. **Preview the Connect Portal** to see the updated mapping configuration and fill-in the inputs to mimic the mapping you want to test. ## Usage in Workflows After your user specifies their desired mapping in the Connect Portal, you can use their chosen values within workflow actions. A Field Mapping contains 2 pieces of information: * The selected Integration Object type (for example, a Salesforce Task). * The field-level mappings between your Application Object and the selected Integration Object type (for example, Title ⇄ Salesforce Task Subject, Description ⇄ Salesforce Task Description). You can use the "**Apply field mapping**" option to transform Application Objects (from App Events or Request triggers) to Integration objects and vice versa. ### Transforming from Application Object → Integration Object If you receive an Application Object in an App Event or Request payload, you can transform it into an Integration Object by selecting the **Field Mapping Object Type** in the "**Apply field mapping**" option for your App Event or Request trigger. Once set, you will see the trigger output data update to show two objects: * `originalPayload`: This is the original App Event or Request payload received by the trigger. * `mappedIntegrationObject`: This is the Integration Object that was mapped based on the Field Mapping configured in the Connect Portal. **Note:** The mapped Integration Object only applies to the **root** of the original payload. If your field exists within a nested JSON, it will not work as expected. ### Transforming from Integration Object → Application Object When receiving an Integration Object in an Integration trigger (for example, a Salesforce "New Record" trigger), you can transform it into an Application Object using the Field Mapping specified by your user. In the trigger settings for your workflow, select the **Field Mapping Object Type** in the "**Apply field mapping**" option. Once set, you will see the trigger output data update to show two objects: * `originalPayload`: This is the original Integration Object received by the trigger. * `mappedApplicationObject`: This is the Application Object that was mapped based on the field mapping configured in the Connect Portal. ### Using Field Mappings in Function Steps For more advanced use cases, you can pass a Field Mapping configuration into a [Function step](/workflows/functions#using-field-mappings-in-functions) and use the `paragonUtils` library to programmatically transform data. This gives you full control over the transformation — for example, mapping arrays of objects, applying additional logic, or chaining mappings with other operations. ```js theme={null} function yourFunction(parameters, libraries) { const { paragonUtils } = libraries; const { fieldMapping, records } = parameters; return paragonUtils.mapIntegrationObjects(fieldMapping, records); } ``` ## Pre-configured Field Mapping Support Paragon provides pre-configured Field Mapping support for most CRM integrations, along with select others. These integrations come with fully maintained dropdowns for common record types and fields — you only provide your application fields. All pre-configured Field Mapping integrations can be overridden by using the SDK to define custom field mapping dropdowns as explained above. This gives you full control over record types, fields, and how they appear in the Connect Portal. (See [Passing Your Own Integration Objects and Fields](#passing-your-own-integration-objects-and-fields)). * [Close](/resources/integrations/close) * [Dynamics 365 Sales](/resources/integrations/microsoft-dynamics-365) * [Dynamics 365 Business Central](/resources/integrations/dynamicsbusinesscentral) * [HubSpot](/resources/integrations/hubspot) * [Jira](/resources/integrations/jira) * [Marketo](/resources/integrations/marketo) * [Pipedrive](/resources/integrations/pipedrive) * [QuickBooks](/resources/integrations/quickbooks) * [Sage Intacct](/resources/integrations/sage-intacct) * [Salesforce](/resources/integrations/salesforce) * [Sharepoint](/resources/integrations/sharepoint) * [ZohoCRM](/resources/integrations/zohocrm) # Headless Connect Portal Source: https://docs.useparagon.com/connect-portal/headless-connect-portal Bring your existing components or design system into your Paragon integrations experience with the Headless Connect Portal. The Headless Connect Portal can be used with your own UI components or design system to make your integrations feel native to the design of your app, while leveraging the SDK for all of the backend details of connecting and configuring your users' integrations. Headless mode still provides **fully managed authentication**, so you don't need to worry about managing, storing, or refreshing your customers' credentials. ## Example Implementation Below is an end-to-end example implemented with React and [shadcn/ui](https://ui.shadcn.com/) components (no pre-built Paragon components are used): We have open-sourced the above implementation in a public repository here: An end-to-end implementation example of the Headless Connect Portal using React You can use the example implementation or any of its components as a starting point for your application, or read on to learn how to implement it yourself. ## Usage To implement the Headless Connect Portal, use the SDK to implement the following product surfaces in your app: * **Integrations Catalog**: Listing all available integrations in a catalog to allow your users to discover integrations and connect their accounts. * **Integration Install / Uninstall Flow**: Guiding your user through the install stages of any integration, including the OAuth 2.0 flow (if required for the integration) * **User Settings and Workflow Configuration**: Providing inputs for users to configure [User Settings](/connect-portal/workflow-user-settings) for their integration. Follow the sections below to learn how to implement each of these product surfaces using the Paragon SDK. **Have you implemented SDK authentication?** The Usage guide below assumes that you have already implemented the basics of SDK authentication described in [Getting Started](/getting-started/installing-the-connect-sdk). All of the functions below should be called *after* SDK authentication is completed. ### Enabling Headless Mode To turn on Headless mode for the SDK, call the `paragon.setHeadless` function: ```js theme={null} import { paragon } from "@useparagon/connect"; paragon.setHeadless(true); ``` This only needs to be called once after SDK initialization to use the Headless Connect Portal functions. ### Integrations Catalog In your app's Integrations Catalog or Settings view, list available integrations from your Paragon project to allow your users to discover integrations and connect their accounts: You can render this view by calling `paragon.getIntegrationMetadata`: ```js theme={null} paragon.getIntegrationMetadata(); ``` Each entry in the returned list will be an object with the integration's display metadata, including the brand name, icon, and accent color: ```js theme={null} [ { type: "salesforce", name: "Salesforce", brandColor: "#057ACF", icon: "https://cdn.useparagon.com/latest/dashboard/public/integrations/salesforce.svg", }, ]; ``` See our reference implementation of the Integrations Catalog in the example repo. Learn more about `paragon.getIntegrationMetadata` in the SDK Reference. #### Integration Detail View As a part of your catalog, you may want to show users additional information when they click on an integration (or inline with the catalog): Headless Connect Portal modal To get the additional user-facing descriptions and informational text about the integration [configured in your Paragon dashboard](/connect-portal/connect-portal-customization), use [`paragon.getIntegrationConfig`](/apis/api-reference#getintegrationconfig): ```js theme={null} paragon.getIntegrationConfig("slack"); ``` This will return an object with the descriptions, User Settings, and Workflows associated with the integration: ```json Response expandable theme={null} { "shortDescription": "Send notifications to Slack", "longDescription": "Connect your Slack workspace to receive notifications and alerts in Slack. Stay connected to important activity by bringing it all together in your Slack workspace.\n\nOur Slack integration enables you to:\n\n• Receive alerts and notifications in your Slack workspace\n• Notify or DM specific team members based on certain activity", "availableUserSettings": [ { "id": "2d5662c9-6750-46c2-8588-2ac904532efb", "type": "DYNAMIC_ENUM", "title": "Channel", "required": false, "sourceType": "channels" } ], "availableWorkflows": [ { "id": "2248335c-671c-47e4-b9a0-3641a9f2d301", "inputs": [], "infoText": "Send a Slack notification when a Task is created", "defaultEnabled": false, "description": "Send Slack Notification" } ], "hiddenWorkflows": [] } ``` See our reference implementation of the Integration Detail View in the example repo. Learn more about `paragon.getIntegrationConfig` in the SDK Reference. #### Displaying Account State To display your user's account connection status in the Integrations Catalog (for example, showing a "Manage" button instead of a "Connect" button for integrations they have already installed), call `paragon.getUser` to get the user's account state and `paragon.subscribe` to react to state changes. ```js Getting account state with getUser expandable theme={null} paragon.getUser(); // Returns: { "authenticated": true, "userId": "user-id", "integrations": { "salesforce": { "enabled": false, "configuredWorkflows": {} }, "slack": { "enabled": true, "configuredWorkflows": {}, "credentialStatus": "VALID", "credentialId": "81af6717-9476-458d-8c29-f0aee7ce6d12", "providerId": "TM7FL705V", "providerData": {} }, "hubspot": { "enabled": false, "configuredWorkflows": {} } }, "meta": {} } ``` We can use the result of this object to conditionally show a **Connect** or **Manage** button, depending on the value of `user.integrations[integrationType].enabled`. You can also react to changes in your UI by setting up `paragon.subscribe` handlers: ```js Example component using subscribe() to react to user state changes expandable theme={null} function MyComponent() { const [user, setUser] = useState(); // Listen for account state changes useEffect(() => { const listener = () => { if (paragon) { const authedUser = paragon.getUser(); if (authedUser.authenticated) { setUser({ ...authedUser }); } } }; listener(); paragon?.subscribe("onIntegrationInstall", listener); paragon?.subscribe("onIntegrationUninstall", listener); return () => { paragon?.unsubscribe("onIntegrationInstall", listener); paragon?.unsubscribe("onIntegrationUninstall", listener); }; }, [paragon]); } ``` Learn more about `paragon.getUser` in the SDK Reference. ### Integration Install / Uninstall Flow Once a user expresses intent to connect their account, guide them through an **Install Flow** using the Paragon SDK: To implement an Install Flow, your app will need to handle the following stages of the installation process which should take place in your app (the stages used by each integration will vary): * Account Type selection (e.g. Salesforce Production vs. Salesforce Sandbox) -- `AccountTypeStage` * Pre-OAuth / API Key inputs (e.g. Stripe API Key input, Shopify Store URL) -- `PreOptionsStage` * Post-OAuth inputs (e.g. Atlassian site, SharePoint site selection) -- `PostOptionsStage` * Instructional content (e.g. Salesforce package installation) -- `InstructionStage` See a full reference of install flow stages and their properties in the [SDK Reference](/apis/api-reference#installflowstage). Any redirection or popup window that is required for OAuth will automatically occur between stages. The SDK will internally manage all state for the popup window and OAuth prompt, but if an error occurs during the install flow, you can receive errors using the `onError` callback and prompt users of any issues. Begin an Install Flow by calling `paragon.installFlow.start`: ```js theme={null} paragon.installFlow .start(props.integration, { onNext: (next) => { // Handle next install stage by presenting or updating UI for user input }, onComplete: () => { // Installation has completed successfully }, onError: (error, errorContext) => { // Handle error messaging } }); ``` After calling `.start`, you may receive required install stages in the `onNext` callback (depending on the specific install flow required by the integration). To handle each of the install stages in your app, you will need to: 1. Receive the stage details in the `onNext` callback. 2. Render the appropriate UI for your user to provide the necessary details in that stage. For the `PostOptionsStage`, refer to [the User Settings docs](#exposing-user-settings) below for help rendering integration-specific dropdown inputs. 3. Update SDK state with the user's inputs by calling one of: * [`installFlow.setAccountType`](/apis/api-reference#installflowsetaccounttype) * [`installFlow.setPreOptions`](/apis/api-reference#installflowsetpreoptions) * [`installFlow.setPostOptions`](/apis/api-reference#installflowsetpostoptions) #### Example Install Flow Here's a step-by-step example for how these stages would be implemented for Salesforce account types: 1. **Receive the `AccountTypeStage` in `onNext` handler:** ```js theme={null} paragon.installFlow.start("salesforce", { onNext: (next) => { if (next.stage === "accountType") { setAccountTypes(next.stage.options); // [{ "id": "default", "accountDescription": "Production Account", "scheme": "oauth" }, {...}, {...}] } }, }); ``` 2. **Render account type options for your user to select the available types:** ```jsx theme={null} return accountTypes.map((accountType) => { return ( ); }); ``` Account Types selector 3. **Update SDK state with the user's inputs:** Bind the `onClick` handler for the account type selection buttons to confirm the user's selection and start the OAuth flow. ```jsx theme={null} return accountTypes.map((accountType) => { return ( ); }); ``` To implement the other Install Flows, check out our example implementation or SDK Reference: See our reference implementation of the Integration Install Flow in the example repo. Learn more about `paragon.installFlow` and all related methods in the SDK Reference. #### Uninstalling Integrations When a user requests to disconnect their account, call `paragon.uninstallIntegration` to remove their account: ```js theme={null} async function onClickUninstall() { setUninstalling(true); await paragon.uninstallIntegration(props.integration); setUninstalling(false); } ``` This function returns a Promise that resolves when the account has been fully disconnected from Paragon (including any workflows or settings they may have configured). Learn more about `paragon.uninstallIntegration` in the SDK Reference. ### User Settings and Workflow Configuration After your user has connected an integration, show a Configuration screen with your configured [User Settings](/connect-portal/workflow-user-settings) to customize their integration, like a Salesforce Field Mapping or a Google Drive Folder to sync files from. If you are using [Workflows](/workflows/overview) and want your users to have controls to opt-in or out of specific Workflows, you can render toggles to enable or disable Workflows. Google Drive User Settings You can use the [`paragon.getIntegrationConfig`](/apis/api-reference#getintegrationconfig) method to get all the User Settings that you have configured for this integration's Connect Portal: ```js theme={null} paragon.getIntegrationConfig(type); ``` User Settings will be available as the `availableUserSettings` key of the response. ```json Response focus={2-10} expandable theme={null} { "availableUserSettings": [ { "id": "2d5662c9-6750-46c2-8588-2ac904532efb", "type": "DYNAMIC_ENUM", "title": "Channel", "required": false, "sourceType": "channels" } ], "shortDescription": "Send notifications to Slack", "longDescription": "Connect your Slack workspace to receive notifications and alerts in Slack. Stay connected to important activity by bringing it all together in your Slack workspace.\n\nOur Slack integration enables you to:\n\n• Receive alerts and notifications in your Slack workspace\n• Notify or DM specific team members based on certain activity", "availableWorkflows": [ { "id": "2248335c-671c-47e4-b9a0-3641a9f2d301", "inputs": [], "infoText": "Send a Slack notification when a Task is created", "defaultEnabled": false, "description": "Send Slack Notification" } ], "hiddenWorkflows": [] } ``` #### Exposing User Settings User Settings are inputs that appear during the install or configure stage of the Connect Portal, like the Folder input in the example above. Your implementation should render inputs when: * Your user is prompted with pre-OAuth options (`PreOptionsStage`) * Your user is prompted with post-OAuth options (`PostOptionsStage`) * For both `PreOptionsStage` and `PostOptionsStage`, User Settings objects can be found in `stage.options`. * Your user is configuring integration-level or workflow-level [User Settings](/connect-portal/workflow-user-settings) * User Settings objects can be found in [`paragon.getIntegrationConfig`](/apis/api-reference#getintegrationconfig), under `availableUserSettings` and `availableWorkflows[n].inputs`. Some User Settings (such as `SidebarInputType.DynamicEnum` or `SidebarInputType.FieldMapping`) will require you to render a dynamic list of options from the integration (a "data source"). You can use the following functions to help load this list: * [`paragon.getSourcesForInput`](/apis/api-reference#getsourcesforinput) - Get the data sources needed to render a dynamic input. Returns the appropriate data source objects which can be passed directly to `paragon.getFieldOptions`. * [`paragon.getFieldOptions`](/apis/api-reference#getfieldoptions) - Load a page of options from a data source to show in a dropdown input. ```js DynamicEnum input expandable theme={null} let config = paragon.getIntegrationConfig("slack"); let input = config.availableUserSettings[0]; // { id: "...", type: "DYNAMIC_ENUM", title: "Channel", sourceType: "channels" } let sources = paragon.getSourcesForInput("slack", input); // { kind: "single", source: { type: "DYNAMIC_DATA_SOURCE", cacheKey: "channels", ... } } // Load options using the source object: if (sources?.kind === "single") { await paragon.getFieldOptions({ integration: "slack", source: sources.source, }); // { data: [{ label: "#general", value: "general" }, ...], nextPageCursor: "..." } } ``` For compound inputs like Field Mapping, `paragon.getSourcesForInput` returns all the necessary data sources at once: ```js Field Mapping input expandable theme={null} let config = paragon.getIntegrationConfig("salesforce"); let input = config.availableUserSettings[0]; // { id: "...", type: "FIELD_MAPPER", title: "Map fields for a Task", sourceType: "customObjectMapping" } let sources = paragon.getSourcesForInput("salesforce", input); // { kind: "fieldMapper", recordSource: {...}, fieldSource: {...} } if (sources?.kind === "fieldMapper") { // Load Record Types: await paragon.getFieldOptions({ integration: "salesforce", source: sources.recordSource, }); // Load Fields for a selected record type: await paragon.getFieldOptions({ integration: "salesforce", source: sources.fieldSource, parameters: [{ key: sources.recordSource.cacheKey, source: { type: "VALUE", value: "Task" }, }], }); } ``` You can see a full list of input types that are used by the Connect Portal and must be rendered by your implementation in [Input Types Reference](/connect-portal/input-types-reference). Alternatively, you can start by using our React-based input renderer in our [reference implementation](https://github.com/useparagon/connect-headless-example/blob/main/src/components/feature/integration/integration-modal/components/integration-settings.tsx). #### Defining Custom Data Sources If your Connect Portal inputs use [Custom Dropdowns](/connect-portal/workflow-user-settings/custom-dropdowns) or Field Mapping with your own integration or application fields, you can use [`paragon.setDataSources`](/apis/api-reference#setdatasources) to register these data sources with the SDK. Call `paragon.setDataSources` once after enabling headless mode, before rendering any inputs: ```js theme={null} paragon.setHeadless(true); paragon.setDataSources({ dropdowns: { my_custom_dropdown: [ { label: "Option A", value: "a" }, { label: "Option B", value: "b" }, ], }, integrationSpecificSources: { salesforce: { dropdowns: { departments: [ { label: "Engineering", value: "eng" }, { label: "Sales", value: "sales" }, ], }, }, }, }); ``` Data sources registered with `paragon.setDataSources` are automatically resolved by `paragon.getSourcesForInput` and `paragon.getFieldOptions`. Integration-specific sources take priority over global sources when the same key is used. Learn more about `paragon.setDataSources` and its configuration options in the SDK Reference. Once user input is collected, you can save the values back to Paragon using one of the following functions, depending on the input's context: * [`setPreOptions`](/apis/api-reference#installflowsetpreoptions) - Save pre-OAuth options and start the OAuth flow. * [`setPostOptions`](/apis/api-reference#installflowsetpostoptions) - Save post-OAuth options and complete account connection. * [`paragon.updateIntegrationUserSettings`](/apis/api-reference#updateintegrationusersettings) - Save integration-level User Settings. * [`paragon.updateWorkflowUserSettings`](/apis/api-reference#updateworkflowusersettings) - Save workflow-level User Settings. See our reference implementation of User Settings in the example repo. Learn more about the different Input Types to implement in our reference. #### Exposing Workflow Configuration Workflow Configuration example In the Configuration tab of the headful Connect Portal, a list of Workflows appears as a list of toggles that users can opt-in or out of. This is not required if you do not use Workflows are your Workflows are set to be [enabled by default](/connect-portal/displaying-workflows#default-to-enabled). * To render the list of available Workflows, you can use [`paragon.getIntegrationConfig`](/apis/api-reference#getintegrationconfig) and read the `availableWorkflows` key. * To see what Workflows the user has enabled, you can use [`paragon.getUser`](/apis/api-reference#getuser) and read `user.integrations[].configuredWorkflows[].enabled`. ```js Getting Workflow state expandable theme={null} paragon.getUser(); // Response: { "integrations": { "slack": { // (other properties excluded for brevity) "configuredWorkflows": { "7b516f0f-2581-470f-a26d-72dfa7b9b554": { "enabled": false, "settings": {} } } } } } ``` * To toggle a Workflow on or off for a user, you can use [`paragon.updateWorkflowState`](/apis/api-reference#updateworkflowstate) to pass a partial update object of the Workflows that should be enabled or disabled for a user. ```js Updating Workflow state theme={null} paragon.updateWorkflowState({ // [Workflow UUID]: boolean "7b516f0f-2581-470f-a26d-72dfa7b9b554": true, }); ``` See our reference implementation of User Settings in the example repo. Learn more about the `paragon.updateWorkflowState` method in the SDK Reference. ## Multiple Account Authorization When implementing the Headless Connect Portal for [Multiple Account Authorization](/apis/api-reference/multi-account-authorization), you'll need to update your UI to handle listing multiple connections for a given integration. You can use `selectedCredentialId` in the following SDK functions to ensure that the right account is used in multi-account setups: * [`paragon.updateIntegrationUserSettings`](/apis/api-reference#updateintegrationusersettings) ```js theme={null} paragon.updateIntegrationUserSettings("googledrive", { [selectedInput.id]: newValue, }, { selectedCredentialId: "376910a0-74aa-4e5e-88ab-122a7fb20a56", }); ``` * [`paragon.updateWorkflowUserSettings`](/apis/api-reference#updateworkflowusersettings) ```js theme={null} paragon.updateWorkflowUserSettings("googledrive", selectedWorkflow.id, { [selectedInput.id]: newValue, }, { selectedCredentialId: "376910a0-74aa-4e5e-88ab-122a7fb20a56", }); ``` * [`paragon.updateWorkflowState`](/apis/api-reference#updateworkflowstate) ```js theme={null} paragon.updateWorkflowState({ "7b516f0f-2581-470f-a26d-72dfa7b9b554": true, }, { selectedCredentialId: "376910a0-74aa-4e5e-88ab-122a7fb20a56", }); ``` * [`paragon.uninstallIntegration`](/apis/api-reference#uninstallintegration) ```js theme={null} paragon.uninstallIntegration("googledrive", { selectedCredentialId: "376910a0-74aa-4e5e-88ab-122a7fb20a56", }); ``` * [`paragon.getFieldOptions`](/apis/api-reference#getfieldoptions) ```js theme={null} paragon.getFieldOptions({ integration: "googledrive", action: "folders", selectedCredentialId: "376910a0-74aa-4e5e-88ab-122a7fb20a56", }); ``` In all of the above, you can get the Credential ID for an account from [`paragon.getUser`](/apis/api-reference#getuser), in `user.integrations[].allCredentials[n].id`. ## SDK Reference The SDK includes the key functions below that should be used when implementing the Headless Connect Portal. Find more details about each function (including parameter types and return values) in the linked reference page. * [`paragon.getIntegrationMetadata`](/apis/api-reference#getintegrationmetadata): Returns display and branding information for integrations in your project, including a display name and icon. * [`paragon.installFlow.start`](/apis/api-reference#installflowstart): Prompts the user for third-party authorization details to connect their account. This function should be used when a user expresses intent to install your integration, for example: from a "Connect" button in your integrations catalog. * [`paragon.installFlow.setAccountType`](/apis/api-reference#installflowsetaccounttype): Sets the account type for an integration being actively installed. * [`paragon.installFlow.setPreOptions`](/apis/api-reference#installflowsetpreoptions): Sets the pre-OAuth options for an integration being actively installed. * [`paragon.installFlow.setPostOptions`](/apis/api-reference#installflowsetpostoptions): Sets the post-OAuth options for an integration being actively installed. * [`paragon.uninstallIntegration`](/apis/api-reference#uninstallintegration): Disconnects the user's account. * [`paragon.getIntegrationConfig`](/apis/api-reference#getintegrationconfig): Returns the configuration for an integration, including its available User Settings and Workflows. * [`paragon.getUser`](/apis/api-reference#getuser): Returns the current state of the user, with their integrations and account statuses. * [`paragon.updateIntegrationUserSettings`](/apis/api-reference#updateintegrationusersettings): Updates integration-level User Settings values. * [`paragon.updateWorkflowUserSettings`](/apis/api-reference#updateworkflowusersettings): Updates workflow-level User Settings values. * [`paragon.updateWorkflowState`](/apis/api-reference#updateworkflowstate): Enables or disables Workflows for a user. * [`paragon.setDataSources`](/apis/api-reference#setdatasources): Registers custom data sources for dropdown and field mapping inputs, globally or per-integration. *(SDK 2.3.0+)* * [`paragon.getSourcesForInput`](/apis/api-reference#getsourcesforinput): Returns the data sources needed to render a specific input, which can be passed directly to `paragon.getFieldOptions`. *(SDK 2.3.0+)* * [`paragon.getFieldOptions`](/apis/api-reference#getfieldoptions): Returns integration-specific options for dynamic User Settings, such as Dynamic Enum or Field Mapping inputs. * [`paragon.getDataSourceOptions`](/apis/api-reference#getdatasourceoptions): For compound inputs, returns the configuration for each data source needed to render the input. # Input Type Reference Source: https://docs.useparagon.com/connect-portal/input-types-reference Input types to render in the Connect Portal for User Settings. ## Overview This is a reference of all of the input types that are used in the Connect Portal for collecting user input for pre-OAuth options, post-OAuth options, or User Settings. Implement handlers for each input type to ensure that your UI can prompt your users with the right input types when needed by the integration. If your app uses React, we recommend starting with our [reference implementation](https://github.com/useparagon/connect-headless-example/blob/main/src/components/feature/serialized-connect-input-picker.tsx), which handles each of the input types below. You can adapt this code for your app or use it as a reference point as you implement. Some inputs will require loading integration data dynamically using the SDK (for example, loading a list of channels from Slack). See [Exposing User Settings](/connect-portal/headless-connect-portal#exposing-user-settings) for more guidance on loading dynamic data. ## Input Types
Input Type SidebarInputType Key(s) Example (click to expand) Used In Value Type
**Text input**
Set the type attribute of the text input based on the input type.
ValueText | Number | Email | URL | Password
  • PreOptionsStage
  • PostOptionsStage
  • User Settings
`string`
**Textarea input**
Note that by default, lines = 1 (in this case, this input should look identical to a text input).
ValueTextArea
  • PreOptionsStage
  • PostOptionsStage
  • User Settings
`string`
**Switch / toggle input** BooleanInput | Switch
  • PreOptionsStage
  • PostOptionsStage
  • User Settings
`boolean`
Dropdown input Enum | DynamicEnum | CustomDropdown
  • PreOptionsStage (`Enum` only)
  • PostOptionsStage (`Enum` and `DynamicEnum` only)
  • User Settings
`string`
Combo dropdown input
Dual dropdown input where items for the secondary dropdown are populated based on the input of the primary dropdown.
ComboInput
  • PostOptionsStage
  • User Settings
[`ComboDropdownValue`](#combodropdownvalue)
Field mapping input
Input to map fields between an Object Type in the connected integration and an Object Type in your application.
FieldMapper
  • User Settings
[`FieldMappingValue`](#fieldmappingvalue)
Default value mapping input
Input to map "default values" for each field of a particular object when it is created by your integration.

Note: This is currently only supported for the Jira: Issue Field Values input.
DynamicComboInput
  • User Settings
[`DefaultValueMapping`](#defaultvaluemappingvalue)
## Compound Value Types Most input types are saved with [`paragon.updateIntegrationUserSettings`](/apis/api-reference#updateintegrationusersettings) or [`paragon.updateWorkflowUserSettings`](/apis/api-reference#updateworkflowusersettings) as `string` or `boolean` values, but more complex inputs have an object value that must be used to save the state of the input. Below is a reference for those compound value types. ### ComboDropdownValue A combo dropdown input exposes a dual dropdown: the first input is the `mainInput`, and the second input is the `dependentInput`. Both values are saved as strings. ```json Example theme={null} { "mainInput": "JIRATEST", "dependentInput": "10005" } ``` The first input in the combo dropdown, for example: the Project input in a Project / Issue Type combo dropdown. The second input in the combo dropdown, for example: the Issue Type input in a Project / Issue Type combo dropdown. ### FieldMappingValue A field mapping input is a compound input which has an Object Type selection (which can be a combo dropdown input) and a list of fields mapped by a user between an Integration Object and an Application Object. ```json Example theme={null} { "objectType": "JIRATEST", "dependentInput": "10005", "mappingType": "STATIC", "fieldMappings": { "[Application Field Key]": "[Integration Field Key]" } } ``` The Integration Object Type that the user selects. If the Object Type selection is a combo dropdown input (you can determine this by checking for `dependentInputSource` on the Field Mapping input options returned by [`paragon.getDataSourceOptions`](/apis/api-reference#getdatasourceoptions)), this will be the value of the dependent input selected by the user. Otherwise, this key can be omitted. Set to `"STATIC"`. An object where the keys are field keys from the Application Object and the values are field keys from the Integration Object. A key/value pair represents a mapping between a field in the Application Object and a field in the Integration Object. ### DefaultValueMappingValue A default value mapping input is a compound input which has an Object Type selection (which can be a combo dropdown input) and a list of default values for specific fields of the object. ```json Example theme={null} { "mainInput": "JIRATEST", "dependentInput": "10005", "variableInput": { "[Integration Field Key]": "[Default Value]" } } ``` The Integration Object Type that the user selects to map default values for. If the Object Type selection is a combo dropdown input (you can determine this by checking for `dependentInputSource` on the Default Value Mapping input options returned by [`paragon.getDataSourceOptions`](/apis/api-reference#getdatasourceoptions)), this will be the value of the dependent input selected by the user. Otherwise, this key can be omitted. An object where the keys are field keys from the Integration Object and the values are default values for those fields, as provided by the user. # Overview Source: https://docs.useparagon.com/connect-portal/overview Focus on building out your integration logic and leave integration authentication to Paragon. # Paragon's Authentication Layer Paragon provides a robust, fully-managed authentication layer that makes it easy to connect your users to third-party applications securely and efficiently. It is designed to handle the complexities of OAuth and other authentication flows, so you can focus on building your product. ## Implementation Options You have the flexibility to bring Paragon's authentication layer into your application in the way that best fits your needs: ### Connect Portal Use Paragon's out-of-the-box React component to quickly embed a beautiful, secure authentication and integration experience in your app. This option requires minimal setup and provides a streamlined user experience with built-in UI, onboarding, and management tools. Paragon's out-of-the-box Connect Portal }> Learn more about Paragon's out-of-the-box authentication portal. ### Headless Connect Portal Prefer to design your own UI? Paragon's Headless option gives you full control over the user interface while still leveraging Paragon's secure authentication and integration logic behind the scenes. Ideal for teams who want a fully custom look and feel while offloading the complexity of authentication. Paragon's Headless Connect Portal }> Learn more about Paragon's headless authentication portal. Both options provide: * Secure handling of OAuth and other authentication flows * Management of user settings, field mapping, and workflow visibility * A scalable, reliable foundation for integrating with third-party integration providers Explore the pages in this section to learn how to set up, customize, and get the most out of Paragon's authentication layer—whether you choose the Connect Portal or build your own experience with the Headless version. # Workflow Permissions Source: https://docs.useparagon.com/connect-portal/workflow-permissions Restrict the visibility of workflows to specific users or groups with Workflow Permissions. You can restrict the visibility of workflows to specific users or groups with Workflow Permissions. Workflow Permissions can be defined for any workflow as a set of conditions that a user's [metadata](../apis/users#associate-connected-user-with-metadata) must match in order for the workflow to appear in their Connect Portal. For example, you can use Workflow Permissions to: * Limit the availability of workflows to users on specific pricing plans * Build a bespoke workflow for a specific user * Roll out a new workflow to a group of users, under a feature flag Workflow Permissions is available on our **Enterprise plan** and above. Please [contact us](mailto:sales@useparagon.com) to enable this option in your account. ## Using Workflow Permissions Workflow Permissions are available in the options for any Workflow on the [Customize Connect Portal](./connect-portal-customization) page. Navigate to **Configuration > Workflows**, and choose any workflow to set Workflow Permissions. To set Workflow Permissions, click **Update** and create conditions for the user's metadata object. The fields shown in the field selection menu are based on the [User Metadata](../apis/users#associate-connected-user-with-metadata) for the Test User, which you can update by clicking "Set User Metadata" at the bottom of the menu. Finally, click **Save** to update the permissions for this workflow. **Note:** If the workflow has already been enabled for existing users prior to this change, it will automatically be disabled if their metadata does not match the saved permissions. ## How Workflow Permissions are applied If a Connected User does not satisfy the Workflow Permissions with the [User Metadata](/apis/users#associate-connected-user-with-metadata) associated with them, the workflow: * Will not appear in the Connect Portal for this user * Cannot be enabled for this user using the [Users API](/apis/users), [Connected Users Dashboard](/monitoring/users), or [by default](./displaying-workflows#default-to-enabled) * Cannot be triggered or executed for this user Workflow Permissions are re-evaluated whenever the conditions change for the workflow *or* when the metadata for the user has changed. # Custom Dropdowns Source: https://docs.useparagon.com/connect-portal/workflow-user-settings/custom-dropdowns Provide your users with dropdown options from your application. ## Overview Custom Dropdowns allow you to include custom dropdown inputs in the Connect Portal as a part of the User Settings of your integration. You can use Custom Dropdowns to allow your users to select: * Data from your app, like a destination Project to sync Jira tickets into * A type of User Setting that Paragon does not support natively, like a custom Salesforce enum. ## Usage To get started with Custom Dropdowns, visit your User Settings and add a new type of **Custom Dropdown:** Set a key name to refer to the dropdown when populating its available options. After setting a key name, an example of the code you need to call from your application to populate the dropdown will appear in the dashboard: ```js theme={null} paragon.connect("jira", { dropdowns: { team: [ { label: "Team 1", value: "team-1" }, { label: "Team 2", value: "team-2" }, ], }, }); ``` Update your `paragon.connect` call to include the `dropdowns` parameter, which has the key names that you set above. This key can be set to an array of options with two keys: * `label` — The displayed text shown to the user for the dropdown option. * `value` — The value that will be saved (e.g. an option ID) when the user selects this dropdown option. * This value must be unique across all options in the array. If the value is found to be non-unique, the non-unique option will not be displayed in the list, and a console warning will appear. * If either `label` or `value` are missing, the option will not be displayed, and a console warning will appear. When reading the selection for this User Setting from the SDK or the Workflow Editor, the value will be set to the `value` property of the chosen option (or undefined if unselected). ## Pagination and search If your dropdown data is a large data set, consider defining pagination and search instead of passing a static list. Here is an example of a `loadOptions` function to paginate over a user's Google Drive folders: ```javascript Example: Custom Dropdown loading Google Drive folders expandable theme={null} paragon.connect("googledrive", { dropdowns: { drivefolder: { loadOptions: async (cursor, search) => { try { const encodedQuery = encodeURIComponent( `mimeType='application/vnd.google-apps.folder'${ search ? ` and name contains '${search}'` : "" }` ); const foldersUrl = `https://www.googleapis.com/drive/v3/files?q=${encodedQuery}&fields=nextPageToken,files(id,name)&supportsAllDrives=true&includeItemsFromAllDrives=true&pageSize=50${ cursor ? `&pageToken=${cursor}` : "" }`; const foldersResponse = await paragon.request("googledrive", foldersUrl, { method: "GET" }); const folders = foldersResponse.files.map((folder) => ({ label: folder.name, value: folder.id, })); return { options: folders, nextPageCursor: foldersResponse.nextPageToken, }; } catch (err) { console.error("Error fetching Drive options", err); } }, }, }, }); ``` When you provide an object that includes the `loadOptions` function instead of a static list, the dropdown will paginate through options as the user scrolls and allow for remote search across all available data. `loadOptions` will be called with 2 arguments: * `cursor`: The last cursor to be called by the dropdown. If loading for the first time, this value will be undefined. * `search`: The search term that the user typed into the dropdown. If no search term was provided, this value will be undefined or the empty string (`""`). ### Customizing dropdown refresh By default, dropdown options are loaded once when the Connect Portal is opened or when the `search` term changes. If your options change frequently and you want them to reload each time the user opens the dropdown, you can set the `refreshOnOpen` option to `true`: ```javascript theme={null} paragon.connect("googledrive", { dropdowns: { drivefolder: { refreshOnOpen: true, loadOptions: async (cursor, search) => { // Options will be reloaded each time the dropdown opens // ... }, }, }, }); ``` When `refreshOnOpen` is set to `true`, the `loadOptions` function will be called again each time the user opens the dropdown, ensuring they always see the most up-to-date options. # User Settings Source: https://docs.useparagon.com/connect-portal/workflow-user-settings/workflow-user-settings Provide settings in the Connect Portal to allow your users to configure their integration and workflows. **User Settings** provide options for your users to configure settings for their integration in the Connect Portal. This makes it easy for you to create integrations that work with custom objects or fields that may be specific to your users' third-party app accounts. For example, common use cases include: * **Slack** - choosing which channel that messages should be sent in * **Salesforce** - choosing a custom opportunity stage that new opportunities created in * **Hubspot** - choosing a custom lead status that new leads should be created with * **Jira** - choosing which Jira user that new issues should be assigned to User Settings can be defined globally at the integration level or locally at the workflow level. * If they are included at the integration level, the User Settings can be referenced from any workflow for that integration. * If they are included at the workflow level, the User Settings will appear when that workflow is enabled by your user and can only be referenced from the workflow it belongs to. ## Adding User Settings To add User Settings at the integration level: 1. Click **Customize Connect Portal** in any integration's Overview page to open the Connect Portal Editor. 2. Click the **Configuration** tab in the sidebar. 3. Under **Settings** in the sidebar, click **+ Add Setting.** 4. Enter options for Name, Field Type, Tooltip, and whether or not the field should be required for your user to enable the integration. To add User Settings at the workflow level: 1. Click **Customize Connect Portal** in any integration's Overview page to open the Connect Portal Editor. 2. Click the **Configuration** tab in the sidebar. 3. Click on the workflow you'd like to add User Settings to. 4. Under **User Settings** in the sidebar, click **+ Add Setting.** 5. Enter options for Name, Field Type, Tooltip, and whether or not the field should be required for your user to enable the integration. ## Referencing User Settings in the Workflow Editor Actions in Paragon will indicate when they accept User Settings as an input parameter. In these cases, you should first add the respective User Settings in the Connect Portal Editor, then use the **variable menu** to reference that User Setting in the Action sidebar. Enter two left curly braces `{{` to open the **dynamic** **variable menu.** ## Testing User Settings To test your Workflow User Settings, open the click the **Preview** button in the top-right of the navigation bar. This launches a live preview where you can test the end-user experience of your Connect Portal. ### Connecting a test account By clicking **Connect** in the Connect Portal Preview, you can connect a test account for that integration and configure any of its Workflow User Settings for that test account. ### Testing workflows with user settings Once you've enabled an integration in the Connect Portal Preview, you can test its workflows using the **Test Workflow** or **Test Step** button in the Workflow Editor. This will test the workflow on the account that you connected in the Connect Portal Preview, and any User Settings you configured in the Connect Portal Preview will be used as test data. # Hosted Demo Environment Source: https://docs.useparagon.com/demo Start testing your Paragon integrations without embedding our SDK ## Overview Paragon’s [Demo Environment](https://demo.useparagon.com/demo) is designed to serve as an example implementation of a website with the Paragon SDK embedded in it. This allows you to test your workflow logic in a production-like environment without adding more code to your application today. Use the Paragon Hosted Demo Environment to test integration logic for on-premise instances by adding the host query parameter with your instance URL: `https://demo.useparagon.com/demo?host=``{your_instance_url}` Example: `https://demo.useparagon.com/demo?host=https://integrations.tasklab.com` ## Getting Started To get started: 1. Click “**Open Configuration**” 2. Input your Paragon Project ID. Your Project ID can be found in the URL of your Paragon Dashboard. 3. Input a Signing Key. You can create a Signing Key if you don’t already have one by going to Settings > SDK Setup and select “**Generate a New Signing Key**”. 4. Input a User ID. This is an example id based on a user / company in your application. Your account will then be connected to the demo and you will be able to view any integrations marked “`Active`” in your Paragon Dashboard. You can quickly [send data](/workflows/triggers) to Paragon through your browser’s console to test the functionality of sending it from your application. Using the [Monitoring](/monitoring/overview) page, you can verify that your workflows were successfully triggered. ## Testing Workflows Once you've connected to an integration, you can test any of the workflows for the integration. ### Via SDK 1. In your browser, right-click anywhere on the page and select “**Inspect**” to open the Developer Console. 2. Within the Developer Console, click on the **Console** tab to access the JavaScript console. 3. Copy the SDK call that triggers the desired workflow and paste it into the Console. [View triggers](/workflows/triggers). 4. Press `Enter` to send the SDK call and trigger the workflow. ### Via REST API 1. Navigate to a website or application you can use to test API requests, like Postman. 2. Copy the REST API call that triggers the desired workflow and paste it into the URL input. [View triggers](/workflows/triggers). 3. Use [Paragon's JWT Generator](https://jwt.useparagon.com/) to generate a JWT for the example user / company ID you provided earlier. 4. Under **Authentication**, select **Bearer Token** and paste the created JWT. 5. Press `Send` to send the REST API call and trigger the workflow. ## Validating Executions After triggering a workflow, you can view your workflow execution in the [Monitoring](/workflows/viewing-workflow-executions) page. Monitoring page showing workflow executions in Paragon Connect # Working with Multiple Projects Source: https://docs.useparagon.com/deploying-integrations/projects Create unique spaces for different teams to collaborate. ## Overview Create projects in your Organization. This is great for creating unique spaces for different environments, such as production, staging, and development. Each one has its own workflows and authentication methods so you can test out new changes before going live to your customers. **Looking for **`read-only`** Projects?** [Release Environments](/deploying-integrations/release-environments) provides access to `staging` and `production` projects that are `read-only`, allowing you to safely test and deploy changes across your development pipeline. ## Creating Projects To create a new project: 1. Click the Project dropdown in the top-left corner. 2. Click "**+ Create**" ## Managing Projects To view and manage projects: 1. Click the Project dropdown in the top-left corner. 2. Click "**Manage projects**". ## Deleting Projects To delete a project: 1. Click the Project dropdown in the top-left corner. 2. Under **Development Projects**, select the triple-dot menu for the Project you want to delete. 3. Click "**Delete project**". ## Copying Workflows You can copy workflows between projects by clicking the settings menu inside the Workflow Editor, then selecting **Copy from Project**. When copying from another workflow, your current workflow state will be saved in Version History. # Release Environments Source: https://docs.useparagon.com/deploying-integrations/release-environments Use Release Environments to test and deploy new integrations and integration updates. **Release Environments** are environments that your team can use to control the development lifecycle of integrations: * **Development:** Make updates to your integrations and workflows in a development project that can be modified by any [Developer team member](/managing-account/teams). * **Staging:** Preview and test integrations in a read-only environment before deploying to Production. * **Production**: Deploy integrations and updates to live users. Each Release Environment is a separate project, with separate IDs, [Signing Keys](/getting-started/installing-the-connect-sdk#setup-with-your-own-authentication-backend), [Environment Secrets](/workflows/environment-secrets), and [Connected Users](/monitoring/users). **Note:** Release environments share the same underlying resources, such as servers and databases. Resource-intensive actions—like running heavy workflows or load testing—can impact the performance of other environments. If your account does not already have Release Environments enabled, follow the steps below to enable the feature. * **Note**: You can only set up one set of Release Environments (Development, Staging, Production) for your account. **Your selection is final and cannot be reversed.** 1. Start by navigating to your Paragon dashboard. At the end of your Integrations list, you will see a prompt to enable Release Environments. Click **Get started**. 2. You will be prompted to select the project that represents your Production Environment. **Once you make this selection:** 1. **The selected project will become read-only** (meaning that Integrations, Workflows, and App Events cannot be modified directly). To update a Production Environment, you will need to create a Versioned Release. 2. **Development and Staging environments will be automatically created**. If you have existing projects used for Staging or Development, these projects will still be available and unchanged, but they will not participate in the release pipeline. ## Usage With Release Environments, your team's integration development will start in the Development environment. Workflows and integrations in the Development environment can be added and modified directly. Once your team is ready to start testing the changes made in Development, you can create a Release from **Development -> Staging** to validate your changes. Staging can be used for code review and QA, prior to releasing changes to users in your Production environment. Finally, once your changes have been finalized in the Staging environment, you can create a Release from **Staging -> Production** to deploy your changes to live users. **Working with a large team?** Multiple team members can work together in the Development environment, or they can opt to create an isolated [Development Project](/deploying-integrations/projects) to start working on new changes. Development Projects cannot be involved in the Releases pipeline, but you can use our [Copying Workflows](/deploying-integrations/projects#copying-workflows) feature to replicate changes from Development Projects into Development. ## Creating a Release To start a new Release, you can click the Environment Selection menu in the top navigation bar and click **Deploy** on the environment you want to promote. When hovering over the **Deploy** button, a path will appear between the Release Environments that you are deploying to and from.