Application Nodes
5. Application Nodes
The nodes in this section connect to external services. For each node, the connection setup is described first, followed by operations and parameters.
Outlook Node
The Outlook node enables integration with your Microsoft Outlook email account in SkyStudio workflows. You can send emails and perform advanced searches in your inbox. Microsoft OAuth is used for the connection.
Connection Setup and Management
To use the Outlook node, you need to authorize your Microsoft account with OAuth. No API key or token entry is required; authorization is done through Microsoft's official login screen.
Connecting to Microsoft Outlook
1. Initiating the connection
- In SkyStudio, add the Outlook node to the canvas.
- Click the button to open the right panel.
- Choose an operation (Send Mail or Search Mail).
- Click the Connect to Microsoft Outlook button in the right panel.
2. Authorization with a Microsoft account
- On the Microsoft sign-in screen that opens, sign in with your corporate or personal Microsoft account.
- Approve SkyStudio's request for access to Outlook.
- Once authorization is complete, the connection will become active in the right panel and the fields will become visible.
Note: Authorization takes place via Microsoft's standard OAuth 2.0 flow. SkyStudio does not see or store your password.
Adding a Connection in SkyStudio (Alternative Method)
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Microsoft Outlook as your provider.
-
Enter a descriptive name in the Connection Name field (e.g.,
Company Outlook). -
Click the Authorize with Microsoft button and complete the Microsoft login steps.
-
Once authorization is complete, the connection will be automatically saved.
Assigning the Connection to the Node
After adding the Outlook node to the canvas, select the saved link from the Application Connections drop-down menu in the right panel.
Note: You can define separate links for different Microsoft accounts (e.g., personal and business).
Operations
The Outlook node offers two operations:
| Operation | Explanation |
|---|---|
| Send Email | Creates and sends a new email via Outlook |
| Email Search | Outlook performs advanced search and filtering in the inbox |
Send Mail
It sends emails through the linked Microsoft Outlook account. It is used in notification, report sharing, and automated reply scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook connection to use |
| To | Yes | Recipient email address (separate by commas for multiple addresses) |
| Subject | Yes | Email subject line |
| Body | Yes | Email content (plain text or HTML) |
| CC | No | Email addresses to include in the copy |
| BCC | No | Email addresses to be included in the confidential copy |
Usage Example
To send automated report emails from a workflow:
- To:
director@company.com - Subject:
Weekly Sales Report - Body:
{{llm.output}}
Sample Output
{
"id": "message-id-abc123",
"status": "sent",
"to": ["director@company.com"],
"subject": "Weekly Sales Report"
}
Search Mail
Outlook searches for emails in the inbox using keyword, sender, or subject filters. It is used in email tracking and content extraction workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook connection to use |
| Search Query | Yes | Search query (e.g., invoice, from:ahmet@company.com) |
| Folder | No | Folder to search (e.g., Inbox, Sent Items) |
| Limit | No | Maximum number of emails to return |
Search Query Examples
| Search Example | Description |
|---|---|
| Invoice | Emails containing the word "invoice" in their subject or content |
| from:ahmet@sirket.com | Emails from a specific sender |
| subject:meeting | Emails with the subject line "meeting" |
| hasAttachment:true | Emails with attachments |
Sample Output
{
"value": [
{
"id": "message-id-xyz",
"subject": "April Invoice Summary",
"from": { "emailAddress": { "address": "muhasebe@company.com" } },
"receivedDateTime": "2024-04-15T09:30:00Z",
"bodyPreview": "The invoice summary for April is attached..."
}
]
}
Example: Support Request Responder
A workflow that reads incoming support emails, generates responses using AI, and sends them:
Search Mail → LLM (Generate Response) → Send Mail
Email Search settings:
- Search Query:
subject:support - Folder:
Inbox - Limit:
5
Email Sending Settings:
- To:
Recipient email address - Subject:
Topic - Body:
{{llm.output}}
Outlook Calendar Node
The Outlook Calendar node integrates with the Microsoft Outlook calendar in SkyStudio workflows. You can list, create, update, and delete events; check availability; and run AI-powered calendar queries. The connection uses the same Azure App Registration method as the Teams node.
Connection Setup and Management
1. Connection Method
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Outlook Calendar as the provider.
-
Select OAuth 2.0 as the connection method.
-
Specify who can select and run this connection in workflows.
-
Click on the “Connect Calendar with Microsoft” option.
Authorization via Microsoft account
- On the Microsoft sign-in screen that opens, sign in with your corporate or personal Microsoft account.
- Approve SkyStudio's request for access to Outlook.
2. Connection Method
To use the Outlook Calendar node, you need to create an App Registration in the Azure Portal and enter the resulting Tenant ID, Client ID, and Client Secret into SkyStudio.
Note: The connection setup process for this node is exactly the same as for the Microsoft Teams node. If you have already created a Teams connection, you can use the same Azure App Registration information for Outlook Calendar.
Creating Azure App Registration
1. Registering a new application
-
Go to portal.azure.com.
-
Type
App registrationsin the search bar and go to the relevant service. -
Click the + New registration button.
-
Give the application a name (e.g.,
SkyStudio). -
Select Accounts in this organizational directory only (Single tenant).
-
Click the Register button.
2. Copying Client ID and Tenant ID
After the application is created, on the Overview page:
- Application (client) ID → Your Client ID
- Directory (tenant) ID → Your Tenant ID
Copy both of them. This information can be accessed again later.
3. Creating Client Secrets
-
Go to the Certificates & secrets section in the left-hand menu.
-
Click the + New client secret button.
-
Add a Description and Expiration Date, then click the Add button.
-
Immediately copy the Value field of the created secret.
Important Note: The Client Secret value is only visible when it is created. You will not be able to access its full value again after closing the page.
4. Adding API Permissions
-
Go to the API permissions section in the left-hand menu.
-
Select + Add a permission → Microsoft Graph → Application permissions.
-
Add the necessary permissions for Outlook Calendar:
| Permission | Explanation |
|---|---|
| Calendars.Read | To read calendar events |
| Calendars.ReadWrite | To create, update, and delete events |
| User.Read.All | To access user information for availability checking |
- Confirm permissions by clicking the Grant admin consent button.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Outlook Calendar as the provider.
-
Fill in the following fields:
| Area | Description |
|---|---|
| Link Name | A descriptive name (e.g., Company Outlook Calendar) |
| Tenant ID | Directory (tenant) ID you copied from Azure |
| Client ID | Application (client) ID you copied from Azure |
| Client Secret | The secret value you copied from Azure |
| User Email | The email address of the user for whom calendar operations will be performed |
- Click the Save button.
Assigning the Connection to the Node
After adding the Outlook Calendar node to the canvas, select the saved link from the Application Connections drop-down menu in the right panel.
Operations
The Outlook Calendar node offers 10 operations:
| Operation | Category | Description |
|---|---|---|
| Fetch Events | Featured | Filters and retrieves events from the calendar |
| Today's Events | Featured | Lists today's events |
| Upcoming Events | Featured | Lists events within a specific number of days |
| Availability Check | Featured | Checks users' availability for a specific time period |
| Outlook Calendar AI Assistant | Featured | Queries calendar data using natural language queries |
| List Calendars | Standard | Lists all calendars in the account |
| Get Event | Standard | Retrieves details of a specific event |
| Create Event | Standard | Creates a new calendar event |
| Update Event | Standard | Updates an existing event |
| Delete Event | Standard | Deletes a specific event |
Get Events
Retrieves events from the calendar by date range and search filter.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Calendar ID | No | The ID of the calendar from which events will be retrieved (if left blank, the primary calendar will be used) |
| Start Date | No | Start date (in YYYY-MM-DDTHH:MM:SS format) |
| End Date | No | End date (in YYYY-MM-DDTHH:MM:SS format) |
| Search Query | No | Keyword for search in event title |
| Max Results | No | Maximum number of events to return |
| Order By | No | Sorting criteria (selected from drop-down menu) |
Today's Events
Returns today's calendar events for the linked account.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Calendar ID | No | Calendar ID from which events will be retrieved (empty = primary calendar) |
Upcoming Events
Lists upcoming events within a specified number of days.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Calendar ID | No | Calendar ID (empty = primary calendar) |
| Days Ahead | No | How many days in advance will events be introduced (e.g., 7) |
| Max Results | No | Maximum number of events to return |
Availability Check
Checks the availability of specified users for a particular time period. Used in appointment and meeting scheduling workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| User Emails | Yes | Email addresses of users whose availability will be checked (separated by commas) |
| Start Date Time | Yes | Control start time (YYYY-MM-DDTHH:MM:SS) |
| End Date Time | Yes | Check end time (YYYY-MM-DDTHH:MM:SS) |
| Timezone | No | Time zone (e.g., Europe/Istanbul) |
Outlook Calendar AI Assistant
Outlook queries calendar data using natural language. As shown in the video, calendar data can be easily accessed with questions such as "What are my meetings this week?".
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Query | Yes | Calendar query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "Could you list my meetings for this week?"
System Prompt: "List only this week's events. Respond in Turkish, showing title and time."
List Calendars
Lists all calendars and Calendar IDs in the account.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
Get Event
Retrieves all the details of a specific event using its Event ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Event ID | Yes | Event ID to retrieve details |
Create Event
This adds a new event to your Outlook calendar. A Teams meeting link can also be created optionally.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Calendar ID | No | Calendar in which the event will be created (empty = primary calendar) |
| Subject | Yes | Event title |
| Body | No | Event Description |
| Start Date Time | Yes | Start time (YYYY-MM-DDTHH:MM:SS) |
| End Date Time | Yes | End time (YYYY-MM-DDTHH:MM:SS) |
| Timezone | No | Time zone (e.g., Europe/Istanbul) |
| Location | No | Event location |
| Attendees** | No | Email addresses of invited participants (separated by commas) |
| Teams Meeting | No | If enabled, a Teams meeting link is automatically added to the event |
| All Day Event | No | If enabled, it will be created as an all-day event |
Event Update
Updates information for an existing event.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Event ID | Yes | Event ID to be updated |
| Subject | No | New event title |
| Body | No | New statement |
| Start Date Time | No | New start time (YYYY-MM-DDTHH:MM:SS) |
| End Date Time | No | New end time (YYYY-MM-DDTHH:MM:SS) |
| Timezone | No | Time zone |
| Location | No | New location |
| Attendees** | No | Updated participant list |
Delete Event
Removes the specified event from the calendar.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Outlook Calendar link to use |
| Event ID | Yes | Event ID to be deleted |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Client Secret has expired | Create a new Client Secret from the Azure Portal |
| 403 Forbidden | Calendars.ReadWrite permission not granted | Add the necessary permission and grant admin consent from Azure → API Permissions |
| Event not found | Invalid Event ID | Find the correct Event ID with "Fetch Events" |
| Invalid datetime format | The date format is incorrect. Please ensure you are using the YYYY-MM-DDTHH:MM:SS format (e.g., 2024-06-01T10:00:00) | |
| Empty event list | Calendar ID is incorrect or there are no events on that date | Verify Calendar ID using "List Calendars" |
Notes
- When the Calendar ID field is left blank, all operations will automatically run on the primary calendar.
- When Teams Meeting is open during the Create Event operation, a Teams meeting link is automatically created; this feature requires Azure App Registration to also have the
OnlineMeetings.ReadWrite.Allpermission to work. - Date/time fields are filled with values in the format
YYYY-MM-DDTHH:MM:SS(e.g.,2024-06-01T10:00:00). Timezone is entered as a separate field. - The Availability Check operation can check the availability of multiple users simultaneously. You can enter email addresses separated by commas.
- The connection will stop working when the Client Secret of Azure App Registration expires. It is recommended to create a new secret and update the SkyStudio connection before it expires.
Google Calendar Node
The Google Calendar node enables integration with Google Calendar within SkyStudio workflows. You can read, create, update, and delete events; and run AI-powered natural language queries.
Connection Setup and Management
To use the Google Calendar node, you first need to create a Google account link.
Adding a New Connection
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Google Calendar as your provider.
-
Click the Authorize with Google button.
-
In the Google OAuth window that opens, select your account and grant the necessary permissions.
-
The connection is automatically saved once authorization is complete.
Note: The Google Calendar node uses the OAuth 2.0 protocol. Your password is not transmitted to SkyStudio; only the access token provided by Google is stored.
Assigning the Connection to the Node
After adding the Google Calendar node to the canvas, select the Google account link you created earlier from the App Links drop-down menu in the right panel.
What is Calendar ID?
Calendar ID specifies which calendar to use.
| Value | Description |
|---|---|
| primary | The default (primary) calendar in your Google account |
| user@gmail.com | Email address for a specific calendar |
| Special ID | Unique calendar ID copied from Google Calendar settings |
To find your calendar ID: Google Calendar → Calendar Settings → "Calendar integration" section → Calendar ID field.
Operations
The Google Calendar node offers 9 operations:
| Operation | Category | Description |
|---|---|---|
| Fetch Events | Featured | Lists events within a specific date range |
| Today's Events | Featured | Shows all of today's events |
| Upcoming Events | Featured | Lists upcoming events |
| Google Calendar AI Assistant | Featured | Queries calendar data using natural language queries |
| List Calendars | Standard | Lists all calendars in the account |
| Get Event | Standard | Retrieves details of a single event with its ID |
| Create Event | Standard | Creates a new calendar event |
| Update Event | Standard | Updates an existing event |
| Delete Event | Standard | Deletes an event from the calendar |
Get Events
Returns calendar events within a specified date range. Used in reporting and event filtering scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Calendar ID | Yes | Calendar ID from which events will be retrieved (e.g., primary) |
| Start Date | No | Search start date — can be entered manually, format: 2024-06-01T00:00:00 |
| End Date | No | Search end date — can be entered manually, format: 2024-06-30T23:59:59 |
| Search Query | No | Text to search in title or description |
| Max Results | No | Maximum number of events to return |
| Order By | No | Sorting criteria (startTime or updated) |
Sample Output
{
"items": [
{
"id": "abc123xyz",
"summary": "Project Meeting",
"start": { "dateTime": "2024-11-15T10:00:00" },
"end": { "dateTime": "2024-11-15T11:00:00" },
"location": "Meeting Room 1",
"status": "confirmed"
}
]
}
Today's Events
Automatically retrieves all events taking place today in the selected calendar. Ideal for getting a daily summary without entering a date parameter.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Calendar ID | Yes | Calendar ID from which events will be retrieved |
| Timezone | No | Time zone used to define the boundaries of the day (e.g., Europe/Istanbul) |
Note: If no time zone is specified, UTC will be used. For workflows running in Türkiye, enter Europe/Istanbul.
Upcoming Events
It retrieves events from the current timeframe within the specified number of days. Suitable for reminder and notification workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Calendar ID | Yes | Calendar ID from which events will be retrieved |
| Days Ahead | No | How many days ahead will be scanned (e.g., 7 = the next 1 week) |
| Max Results | No | Maximum number of events to return |
Google Calendar AI Assistant
It allows you to query calendar data using natural language. It's ideal for accessing information without typing complex date/time filters.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Query | Yes | Query question in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "How many meetings do I have this weekend?"
System Prompt: "Only count events that contain the word 'Meeting'."
Note: You can use System Prompt to define restrictions for the AI assistant, such as specific calendars, contacts, or event categories.
List Calendars
This returns all calendars linked to your Google account (personal, shared, team calendars, etc.). It's used to find out which calendars you have access to and their Calendar ID values.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
Sample Output
{
"items": [
{
"id": "primary",
"summary": "Ahmet Yılmaz",
"primary": true,
"accessRole": "owner"
},
{
"id": "tr.turkish#holiday@group.v.calendar.google.com",
"summary": "Holidays in Türkiye",
"accessRole": "reader"
}
]
}
Get Event
Retrieves all details of a single calendar event with a specific Event ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Calendar ID | Yes | Calendar ID where the event is located |
| Event ID | Yes | Google Calendar ID of the event to retrieve |
How to Find the Event ID?
The id field in the output returned from the "Fetch Events" or "Today's Events" operations is the Event ID of that event. It can also be copied from the URL by opening the event in the Google Calendar web interface.
Create Event
Creates a new event in Google Calendar. Invitations for participants, location, and all-day events are supported.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Calendar ID | Yes | Calendar ID for the event |
| Title | Yes | Event title |
| Description | No | Event description or notes |
| Start Date Time | Yes | Start date and time — can be entered manually, format: 2024-06-01T10:00:00 |
| End Date Time | Yes | End date and time — can be entered manually, format: 2024-06-01T11:00:00 |
| Timezone | No | Event time zone (e.g., Europe/Istanbul) |
| Location | No | Event location (address or venue name) |
| Attendees | No | Email addresses of invited participants (separated by commas) |
| All Day Event | No | Marks as an all-day event (time information is ignored if enabled) |
Attendees Usage
To add multiple participants, separate their email addresses with commas:
ali@company.com, ayse@company.com, mehmet@partner.com
Each participant will automatically receive a Google Calendar invitation.
All Day Event Mode
When the All Day Event is enabled, the Start Date Time and End Date Time fields will still use the same format (2024-12-31T00:00:00), but the time information will be ignored; the event will be marked as an all-day event.
Event Update
Updates the information for an existing calendar event. Only the entered fields are changed; unentered fields retain their current values.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Calendar ID | Yes | Calendar ID where the event is located |
| Event ID | Yes | Event ID to be updated |
| Title | No | New event title |
| Description | No | New description or notes |
| Start Date Time | No | New start date and time |
| End Date Time | No | New end date and time |
| Timezone | No | New time zone |
| Location | No | New location information |
| Attendees** | No | Updated participant list (emails separated by commas) |
Note: When the Attendees field is entered, the entire existing participant list will be replaced with the new list. If you want to keep your existing participants, first retrieve the existing list using "Get Event" and add them to the new list.
Delete Event
Permanently deletes a calendar event. This action is irreversible.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google account link to use |
| Calendar ID | Yes | Calendar ID where the event is located |
| Event ID | Yes | Event ID to be deleted |
Note: The deletion process is permanent and irreversible. Please ensure the Event ID is correct before deleting.
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | OAuth token has expired or been canceled | Re-authorize your Google account from the connection settings |
| 403 Forbidden | Write permission to calendar denied | Check calendar permissions in Google Calendar |
| 404 Not Found | Invalid Calendar ID or Event ID | Check the correct Calendar ID with "List Calendars" |
| 409 Conflict | Event conflicting with the same Event ID | Avoid using an existing Event ID when creating a new event |
| Invalid time range | Start Date Time is after End Date Time | Check that the start date is before the end date |
| Calendar not found | Incorrect or inaccessible Calendar ID | Verify that the account has permission to access the relevant calendar |
Notes
- All date/time values must be entered in the format
YYYY-MM-DDTHH:MM:SS, e.g.,2024-06-01T10:00:00. Values can be entered manually in these fields or parameters can be linked using/. Timezone offset (such as+03:00) is not added to the datetime string; the time zone is specified separately in the Timezone field. - The valid values for the Timezone field are based on the IANA time zone database. For Türkiye, use
Europe/Istanbul. - The Google Calendar API has a limit of 10 requests per second. For workflows processing a large number of events, it's recommended to add a delay between requests.
- For recurring events, Event Deletion will only delete the single relevant instance; use the Google Calendar interface to delete the entire series.
- When All Day Event is enabled, the Timezone setting is ignored.
Google Drive Node
The Google Drive node enables integration with Google Drive and Google Sheets within SkyStudio workflows. You can perform file reading, searching, folder management, and spreadsheet operations.
Connection Setup and Management
To use the Google Drive node, you first need to create a Google account link. Unlike Jira and Confluence, Google Drive uses OAuth 2.0 authentication.
Adding a New Connection
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click on the Google Drive option.
-
Ensure that OAuth 2.0 is selected as the connection method (default and recommended).
-
Enter a name for this link in the Connection Name field (required).
-
Click the Authorize with Google button.
| Field | Description | Example |
|---|---|---|
| Connection Name | Name you want to give this link | Company Google Drive |
| Connection method | Authentication type | OAuth 2.0 (recommended) |
Connection Methods
OAuth 2.0 (Recommended) Authorization is done via your Google account through the browser. Once the backend OAuth URL is configured, it opens with a single click. It is the most secure and easiest method.
API Key / Advanced You can manually enter the credentials in JSON format. Choose this method if you want to use your own Google Cloud OAuth client.
Authorization Steps
-
Click the Authorize with Google button.
-
In the Google sign-in window that opens, select your account.
-
Grant the permissions requested by SkyStudio.
-
The connection is automatically saved once authorization is successful.
Note: During authorization, Google will request permission to access Drive and Sheets. Approve all requested permissions for your workflows to function correctly.
Assigning the Connection to the Node
After dragging the Google Drive node to the canvas, select the link you created earlier from the App Links drop-down menu in the right panel.
Operations
The Google Drive node offers 13 operations:
| Operation | Category | Description |
|---|---|---|
| List Files | Featured | Lists files and folders in a specific folder |
| File Search | Featured | Searches for files in Drive using a search query |
| Google Drive AI Assistant | Featured | Queries Drive files using natural language |
| Retrieve Spreadsheet Rows | Featured | Retrieves row data from Google Sheets |
| Read File Contents | Featured | Reads the contents of a file (with AI analysis option) |
| Ask a File | Featured | Asks a question about a file in natural language |
| Retrieve File Information | Standard | Retrieves file metadata information |
| Create Folder | Standard | Creates a new folder in Drive |
| Spreadsheet Information | Standard | Retrieves metadata about Google Sheets |
| Add Row | Standard | Adds a new row to Google Sheets |
| Update Cell | Standard | Updates cell values in Google Sheets |
| Clean Cells | Standard | Clears cells in Google Sheets |
| Create Spreadsheet | Standard | Creates a new Google Sheets file |
List Files
Lists all files and subfolders in a specific folder. If no folder ID is provided, the root directory of Drive is listed.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Folder ID | No | Drive ID of the folder to list (empty = root directory) |
| Page Size | No | Number of files to load per page |
How to Find Folder ID?
Open the folder in Google Drive. The last segment in the URL is the Folder ID. Example: https://drive.google.com/drive/folders/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs → ID: 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs
File Search
Google Drive searches for files using search syntax. Filtering can be done based on criteria such as name, content, and MIME type.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Search Query | Yes | Drive search query |
| Page Size | No | Number of results per page |
Google Drive AI Assistant
It queries your Drive files using natural language. It's used to interpret file contents and extract information.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Query | Yes | Question or task in natural language |
| System Prompt | No | Instruction that customizes AI behavior |
Usage Example
Query: "Find and summarize the meeting notes shared last month"
System Prompt: "Only check the files in the 'Meeting Notes' folder. Provide your response in Turkish."
Get Spreadsheet Rows
Retrieves rows from Google Sheets within a specific range in JSON format.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Spreadsheet ID | Yes | Drive ID of the Google Sheets file |
| Range | No | Range of cells to read (e.g., Sheet1!A1:D100) |
| First Row is Header | No | Whether the first row is the header row |
How to Find Spreadsheet ID?
The part of the Google Sheets URL between /d/ and /edit is the Spreadsheet ID. Example: https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs/edit → ID: 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs
Range Format
- Entire page:
Sheet1orPage1 - Specific range:
Sheet1!A1:D50 - Entire column A:
Sheet1!A:A - First 10 lines:
Sheet1!1:10
Read File Contents
It reads the contents of a file in Google Drive. Depending on the reading method, it can return raw text, AI analysis, or structured data.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| File ID | Yes | Drive ID of the file to be read |
| Read Method | No | Reading method (raw, analyze, etc.) |
| After Reading | No | Action to be taken after reading |
| AI Prompt (if analyzing) | No | Instructions to be used for AI analysis |
| Response Language | No | Language of response |
Supported File Types
Google Docs, Google Sheets, Google Slides, PDF, TXT, DOCX, and other text-based files can be read.
Ask the File
It allows you to ask questions about a Drive file in natural language. The file contents are automatically uploaded and processed by AI.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| File ID | Yes | Drive ID of the file to be queried |
| Question | Yes | Natural language question to ask about the file |
| Response Language | No | Language of response |
Usage Example
File ID: 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs
Question: "What are the main findings in this report? List them point by point."
Response Language: Turkish
Get File Information
It retrieves metadata information about a file, such as its name, size, creation date, and MIME type. It does not read the file contents.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| File ID | Yes | Drive ID of the file from which metadata will be retrieved |
Sample Output
{
"id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs",
"name": "Q4 Sales Report.pdf",
"mimeType": "application/pdf",
"size": "245760",
"createdTime": "2024-10-01T09:00:00.000Z",
"modifiedTime": "2024-11-15T14:30:00.000Z",
"webViewLink": "https://drive.google.com/file/d/..."
}
Create Folder
Creates a new folder in Google Drive. It can also be created inside an existing folder.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Folder Name | Yes | Name of the folder to be created |
| Parent Folder ID | No | Drive ID of the parent folder (empty = root directory) |
Spreadsheet Information
This retrieves structural metadata information from a Google Sheets file, such as sheet names and row/column counts.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Spreadsheet ID | Yes | ID of the Sheets file to be retrieved |
Add Row
Adds new row(s) to an existing Google Sheets page.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Spreadsheet ID | Yes | ID of the target Sheets file |
| Sheet Name | Yes | Name of the sheet where the row will be added (e.g., Sheet1) |
| Rows (JSON) | Yes | Row data to be added (in JSON array format) |
Rows Format
[
{ "First Name": "Ayşe", "Last Name": "Kaya", "Department": "Marketing" },
{ "First Name": "Mehmet", "Last Name": "Demir", "Department": "Engineering" }
]
Cell Update
Updates cell values within a specific range in Google Sheets.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Spreadsheet ID | Yes | ID of the target Sheets file |
| Range | Yes | Range of cells to update (e.g., Sheet1!B2:C3) |
| Values (2D JSON Array) | Yes | Values to be written (in 2D array format) |
Values Format
[
["New Value 1", "New Value 2"],
["New Value 3", "New Value 4"]
]
Clear Cells
Deletes the contents of a specific range of cells in Google Sheets (format is preserved).
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Spreadsheet ID | Yes | ID of the target Sheets file |
| Range | Yes | Range of cells to clean (e.g., Sheet1!A2:Z1000) |
Note: This process only deletes the cell contents; it preserves cell formatting (color, font, etc.).
Create Spreadsheet
It creates a new Google Sheets file. You can define the desired sheet names at the beginning.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Drive link to use |
| Spreadsheet Title | Yes | Name of the Sheets file to be created |
| Sheet Names (CSV) | No | Comma-separated page names (e.g., January, February, March) |
Sample Output
{
"spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs",
"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/...",
"title": "2025 Sales Tracking Chart"
}
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | OAuth token has expired | Re-authorize with Google to renew the connection |
| 403 Forbidden | File access denied | Check sharing settings in Google Drive |
| 404 File not found | Invalid File ID or Spreadsheet ID | Recopy the ID from the Drive URL |
| Invalid range | Incorrect Range format | Make sure you are using the format Sheet1!A1:D10 |
| Quota exceeded | Google API daily limit exceeded | Add a delay between requests or try again next day |
| Token has expired | OAuth authorization has expired | Renew the connection from Application Connections |
Notes
- File ID and Spreadsheet ID are the same concept — every Google Sheets file is also a Drive file.
- The Google Drive API has daily request limits. When processing large datasets, consider Page Size and request intervals.
- Query File and Read File Contents (AI analysis) operations may take longer with large files.
- Binary files (images, videos, etc.) outside of Google Workspace (Docs, Sheets, Slides) may not be supported for reading content.
Google Maps Node
The Google Maps node enables integration with Google Maps Platform within SkyStudio workflows. You can automate tasks such as address/coordinate conversion, distance calculation, nearby place search, getting directions, and creating static map visualizations.
Connection Setup and Management
To use a Google Maps node, you need a Google Maps API key.
Obtaining API Key
-
Go to Google Cloud Console.
-
Create a project or select an existing one.
-
Enable the following APIs from the APIs & Services → Library section:
- Maps JavaScript API
- Geocoding API
- Places API
- Directions API
- Distance Matrix API
- Maps Static API
-
In the APIs & Services → Credentials section, select Create Credentials → API Key.
-
Copy the generated API key.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Google Maps as your provider.
-
Paste your API key into the appropriate field and save.
Assigning the Connection to the Node
After adding the Google Maps node to the canvas, select the link you created from the App Links drop-down menu in the right panel.
Note: The same connection is used for every operation. You can define multiple connections with different API keys for different projects.
Operations
The Google Maps node offers 9 operations:
| Operation | Category | Description |
|---|---|---|
| Address → Coordinates | Featured | Converts the text address to latitude/longitude coordinates |
| Distance & Time | Featured | Calculates the distance and travel time between two points |
| Nearby Places | Featured | Searches for places around a specific coordinate |
| Location Search | Featured | Searches for locations and addresses using text query |
| Map AI Assistant | Featured | Queries map data using natural language queries |
| Coordinates → Address | Standard | Converts latitude/longitude coordinates to a text address |
| Directions | Standard | Provides step-by-step directions between two points |
| Location Details | Standard | Retrieves detailed information about a location using Place ID |
| Map Image | Standard | Returns the specified location as a static image |
Address → Coordinates
It converts a text address into latitude and longitude coordinate values. This process is also known as geocoding.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Address | Yes | Address text to be converted to coordinates (e.g., Taksim Square, Istanbul) |
| Language | No | Language code for the results (e.g., tr, en) |
Sample Output
{
"lat": 41.0369,
"lng": 28.9850,
"formatted_address": "Taksim Square, Beyoğlu/Istanbul, Türkiye"
}
Distance & Time
Calculates the distance and estimated travel time from one or more starting points to one or more destinations (Distance Matrix).
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Origins | Yes | Starting point(s) (in address or latitude/longitude format) |
| Destinations | Yes | Destination(s) (address or latitude, longitude format) |
| Travel Mode | No | Transportation type: driving, walking, bicycling, transit |
| Language | No | Language code for the results to be returned |
Origins / Destinations Format
One single point: Kadıköy, Istanbul
Multiple locations: Kadıköy, Istanbul|Beşiktaş, Istanbul
Nearby Places
Lists locations within a specified radius around a given coordinate point. Filtering is possible by category, such as restaurants, pharmacies, ATMs, etc.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Latitude | Yes | Latitude value of the center point (e.g. 41.0082) |
| Longitude | Yes | Longitude of the central point (e.g., 28.9784) |
| Radius (meters) | Yes | Search radius (in meters, max. 50000) |
| Place Type | No | Location category (e.g., restaurant, pharmacy, ATM, hospital) |
| Keyword | No | Keyword that filters results (e.g., coffee, pizza) |
| Language | No | Language code for the results to be returned |
Place Type Examples
restaurant, cafe, hospital, pharmacy, bank, atm, gas_station, hotel, supermarket, school, park
Location Search
It searches for locations and addresses on Google Maps using text-based search queries. It is used in location search scenarios based on user input.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Search Query | Yes | Search text (e.g., Istanbul Airport, Antalya hotels) |
| Language | No | Language code for the results to be returned |
Sample Output
{
"results": [
{
"place_id": "ChIJLU7jZClu0xQRIOd2kzuSCZU",
"name": "Istanbul Airport",
"formatted_address": "Tayakadın, 34283 Arnavutköy/İstanbul",
"geometry": {
"location": { "lat": 41.2608, "lng": 28.7418 }
},
"rating": 4.3
}
]
}
Map AI Assistant
It queries Google Maps data using natural language. It performs complex search and filtering operations in a simple question format.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Query | Yes | Natural language query |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "Find the 3 pharmacies closest to Kadıköy"
System Prompt: "List only places that are open 24 hours and provide their addresses in Turkish."
Coordinates → Address
It converts latitude/longitude coordinates into a readable text address. This is a reverse geocoding process.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Latitude | Yes | Latitude value (e.g., 41.0082) |
| Longitude | Yes | Longitude value (e.g., 28.9784) |
| Language | No | Language code for the results to be returned |
Sample Output
{
"formatted_address": "Sultanahmet, Fatih/Istanbul 34122, Türkiye",
"address_components": [
{ "long_name": "Sultanahmet", "types": ["neighborhood"] },
{ "long_name": "Fatih", "types": ["sublocality"] },
{ "long_name": "Istanbul", "types": ["locality"] }
]
}
Directions
It generates step-by-step directions between two points. Waypoints can be added; different modes of transport are supported.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Origin | Yes | Starting point (address or latitude, longitude) |
| Destination | Yes | Destination point (address or latitude, longitude) |
| Waypoints | No | Intermediate stops along the route (pipe \ |
| Travel Mode | No | Transportation type: driving, walking, bicycling, transit |
| Language | No | Language code to return instructions |
Using Waypoints
Uskudar, Istanbul | Bostanci, Istanbul
Each waypoint creates an intermediate stop; the route passes through all the points in sequence.
Location Details
Using a place's Place ID, it retrieves detailed information about that place: phone number, opening hours, website, photos, reviews, and more.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Place ID | Yes | The Google Maps Place ID of the location (e.g., ChIJLU7jZClu0xQRIOd2kzuSCZU) |
| Fields | No | Fields to retrieve (comma separated, e.g., name, rating, opening_hours, formatted_phone_number) |
| Language | No | Language code for the results to be returned |
How to Find Place ID?
The place_id field in the output of the "Find Place" operation can be used directly. The Place ID can also be copied by right-clicking a place in the Google Maps web interface.
Fields Examples
name, rating, formatted_address, formatted_phone_number, website, opening_hours, photos, reviews, price_level, geometry
Map Image
Creates a static map image (PNG) centered on the specified location. Used to add maps to workflow outputs or reports.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Google Maps API connection to be used |
| Center | Yes | Map center point (address or latitude, longitude) |
| Zoom (1-20) | No | Zoom level: 1 = world, 10 = city, 15 = street, 20 = building (default: 13) |
| Width (px) | No | Image width in pixels (default: 600) |
| Height (px) | No | Image height in pixels (default: 400) |
| Map Type | No | Map type: roadmap, satellite, terrain, hybrid |
| Markers | No | Markers to be added to the map (address or latitude, longitude) |
Zoom Guide
| Value | Appearance |
|---|---|
| 1-3 | Continents / World |
| 4-6 | Country |
| 7-10 | City |
| 11-13 | District |
| 14-16 | Street |
| 17-20 | Building / Detail |
Quick Start Examples
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| REQUEST_DENIED | API key invalid or missing permissions | Check API key; verify that required APIs are enabled in Cloud Console |
| ZERO_RESULTS | Address or location not found | Please specify the search query or address more clearly |
| OVER_QUERY_LIMIT | API quota exceeded | Increase quota limits or reduce request frequency in Google Cloud Console |
| INVALID_REQUEST | Missing required parameter | Check that the Origin/Destination or Latitude/Longitude fields are filled |
| NOT_FOUND | Place ID not found | Verify that the Place ID is current and valid using "Search Place" |
| MAX_WAYPOINTS_EXCEEDED | Too many waypoints | Reduce the number of waypoints to 8 or below |
Notes
- For the Language field, ISO 639-1 language codes are used:
trfor Turkish,enfor English, anddefor German. - The Radius (Nearby Locations) can be a maximum of 50,000 meters; larger values will be automatically clipped.
- The Map Image operation can return a PNG binary directly instead of an image URL; it's possible to save it in the workflow using the "File Output" node.
- The Google Maps API uses a per-request pricing model. For high-volume workflows, consider caching results to optimize costs.
- The Place ID may change over time; instead of storing it long-term, it is recommended to retrieve the updated ID each time using "Search Location".
SharePoint Node
The SharePoint node lets you access list data, files, and pages from your Microsoft SharePoint site in SkyStudio workflows. You can read, create, and update list items; upload and download files; and run AI-powered content queries. Azure App Registration is used for connection.
Connection Setup and Management
1. Connection Method
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select SharePoint as your provider.
-
Select OAuth 2.0 as the connection method.
-
Specify who can select and run this connection in workflows.
-
Click on the “Connect SharePoint with Microsoft” option.
Authorization via Microsoft account
- On the Microsoft sign-in screen that opens, sign in with your corporate or personal Microsoft account.
- Approve SkyStudio's request for access permission from SharePoint.
2. Connection Method
To use the SharePoint node, you need to create an App Registration in the Azure Portal and enter the resulting Tenant ID, Client ID, and Client Secret along with your SharePoint Site URL into SkyStudio.
🎬 Click here to watch the video → How to set up a SharePoint connection?
Note: The Azure setup process for this node is exactly the same as for Microsoft Teams and Outlook Calendar nodes. If you have already created App Registration for one of these nodes, you can use the same information for SharePoint.
Creating Azure App Registration
1. Registering a new application
-
Go to portal.azure.com.
-
Type
App registrationsin the search bar and go to the relevant service. -
Click the + New registration button.
-
Give the application a name (e.g.,
SkyStudio). -
Select Accounts in this organizational directory only (Single tenant).
-
Click the Register button.
2. Copying Client ID and Tenant ID
After the application is created, on the Overview page:
- Application (client) ID → Your Client ID
- Directory (tenant) ID → Your Tenant ID
3. Creating Client Secrets
-
Go to the Certificates & secrets section in the left-hand menu.
-
Click the + New client secret button.
-
Add a Description and Expiration Date, then click the Add button.
-
Immediately copy the Value field of the created secret.
Note: The Client Secret value is only visible when it is created. You will not be able to access its full value again after closing the page.
4. Adding API Permissions
-
Go to the API permissions section in the left-hand menu.
-
Select + Add a permission → Microsoft Graph → Application permissions.
-
Add the necessary permissions for SharePoint:
| Permission | Explanation |
|---|---|
| Sites.Read.All | To read SharePoint sites and lists |
| Sites.ReadWrite.All | For creating, updating, and uploading files to list items |
| Files.Read.All | To read and download files |
| Files.ReadWrite.All | To upload files |
- Confirm permissions by clicking the Grant admin consent button.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select SharePoint as your provider.
-
Fill in the following fields:
| Area | Description |
|---|---|
| Link Name | A descriptive name (e.g., Company SharePoint) |
| Tenant ID | Directory (tenant) ID you copied from Azure |
| Client ID | Application (client) ID you copied from Azure |
| Client Secret | The secret value you copied from Azure |
| Site URL | The full URL of your SharePoint site (e.g., https://yourcompany.sharepoint.com/sites/mysite) |
- Click the Save button.
Assigning the Connection to the Node
After adding the SharePoint node to the canvas, select the link you saved from the Application Connections drop-down menu in the right panel.
Note: You can define separate links for different SharePoint sites. Use the same Tenant/Client information for each link and only change the Site URL.
Operations
The SharePoint node offers 11 operations:
| Operation | Category | Description |
|---|---|---|
| Fetch List Items | Featured | Retrieves items from a SharePoint list in a filtered manner |
| List Files | Featured | Lists files in a specific library or folder |
| Search | Featured | Searches content site-wide |
| SharePoint AI Assistant | Featured | Queries SharePoint data using natural language queries |
| List Sites | Standard | Lists SharePoint sites in the organization |
| Get List Item | Standard | Retrieves the details of a specific list item |
| Create List Item | Standard | Adds a new item to a list |
| Update List Item** | Standard | Updates an existing list item |
| Download/Read File | Standard | Downloads or reads a file's contents |
| Upload File | Standard | Uploads a file to a library |
| Read Page Content | Standard | Reads the content of a SharePoint page |
Retrieve List Items
Querying items in a SharePoint list using an OData filter. Used in project tracking, task management, or data reporting workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| List Name | Yes | Name of the list to be queried (e.g., Tasks, Projects) |
| Filter (OData) | No | OData filter expression (e.g., Status eq 'Active') |
| Select Fields | No | Return field names (comma separated, e.g., Title, Status, AssignedTo) |
| Order By | No | Sorting field (e.g., Created desc) |
| Limit | No | Maximum number of items to be returned |
| Get All (Auto Paginate) | No | If enabled, it automatically retrieves items from all pages |
OData Filter Examples
| Filter | Description |
|---|---|
| Status eq 'Completed' | Those whose Status field is "Completed" |
| Priority EQ 'High' | Items with high priority |
| Created ge '2024-01-01T00:00:00Z' | Created after 2024 |
| contains(Title, 'proje') | Those whose title contains "proje" |
List Files
Lists files in a specific document library or folder.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| Library Name | Yes | Name of the document library (e.g., Documents) |
| Folder Path | No | Subfolder path (e.g., 2024/Reports). If left blank, the library's root directory will be listed. |
| Limit | No | Maximum number of files to return |
Search
Searches content on a SharePoint site using keywords. Searches can be performed across all content, including list items, files, and pages.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| Search Query | Yes | Keyword or phrase to search for |
| Search In | No | Search scope (select from drop-down menu) |
| Limit | No | Maximum number of results to return |
SharePoint AI Assistant
This tool queries SharePoint content using natural language. As shown in the video, you can write queries in natural language such as "get folder names".
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| Query | Yes | SharePoint query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "Which files were uploaded to the Documents library this month?"
System Prompt: "Show only content created within the last 30 days. Respond in Turkish."
List Sites
It lists SharePoint sites within the organization based on the search query. It is used to discover site URLs.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| Search Query | No | Search filter by site name |
Get List Item
Retrieves all the details of a specific list item using its Item ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| List Name | Yes | The name of the list |
| Item ID | Yes | Numerical ID of the item to be retrieved |
| Select Fields | No | Field names to return (comma separated) |
Create List Item
Adds a new item to the specified SharePoint list.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| List Name | Yes | The name of the list to which the item will be added |
| Fields (JSON) | Yes | The fields of the element to be created are in JSON format |
Fields (JSON) Example
{
"Title": "New Project Assignment",
"Status": "Not started",
"Priority": "High",
"AssignedTo": "ahmet@company.com"
}
Update List Item
Updates the fields of an existing list item.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| List Name | Yes | The name of the list |
| Item ID | Yes | Item ID to be updated |
| Fields (JSON) | Yes | Fields to be updated must be in JSON format (enter only the fields to be changed) |
Download / Read File
It downloads a file from SharePoint or reads its contents as text. It is used in AI-based content analysis scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| Item ID (preferred) | No | SharePoint Item ID of the file (preferred method) |
| File Path (fallback) | No | Relative path of the file within the library (e.g., Documents/report.pdf) |
| After Download | No | Action to be taken after download (selected from the drop-down menu) |
| AI Prompt (if extracting) | No | AI instruction to extract content (e.g., "Extract summary") |
Upload File
Uploads files to a document library.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| Library Name | Yes | Name of the library where the file will be loaded (e.g., Documents) |
| Folder Path | No | Subfolder path where it will be uploaded (e.g., 2024/Reports) |
| File Name | Yes | File name and extension (e.g., weekly-report.pdf) |
| Content (base64 or text) | Yes | File content; base64 for binary files, plain text for text files |
Read Page Contents
It reads the content of the specified SharePoint page. It is used in knowledge base and content management workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | SharePoint link to use |
| Page Path | Yes | Relative path of the page within the site (e.g., /sites/mysite/SitePages/AboutUs.aspx) |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Client Secret has expired | Create a new Client Secret from the Azure Portal |
| 403 Forbidden | Sites.ReadWrite.All permission is missing | Add the necessary permission and grant admin consent from Azure → API Permissions |
| List not found | Incorrect List Name | Check the full list name in SharePoint (case-sensitive) |
| Item not found | Invalid Item ID | Find the correct Item ID with "Fetch List Items" |
| Site URL error | Site URL is incorrect or inaccessible | Verify that the Site URL in the link is in the format https://şirket.sharepoint.com/sites/siteniz |
| Empty result | No items matching the filter condition | Check the OData filter expression and field names |
Notes
- The Site URL field is entered only once during linking and applies to all operations used by that link. Define separate links to access different sites.
- The List Name field is case-sensitive. Use the full list name in SharePoint (e.g.,
DocumentsorBelgeler). - In the Fields (JSON) field, enter only the fields you wish to update. Other fields will remain unchanged.
- In the Download/Read File operation, if there is no
Item ID, theFile Path(relative path) can be used. If both are entered, the Item ID takes precedence. - For OData filter syntax, ensure you use SharePoint internal names for the field names; the display name can be different.
- The connection will stop working when the Azure App Registration Client Secret expires. It is recommended to renew it before it expires.
Microsoft Teams Node
The Microsoft Teams node integrates with your Microsoft Teams workspace in SkyStudio workflows. You can read and send channel messages, create meetings, share files, and run AI-powered queries. An App Registration on Azure is required for connection.
Connection Setup and Management
1. Connection Method
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Microsoft Teams as your provider.
-
Select OAuth 2.0 as the connection method.
-
Specify who can select and run this connection in workflows.
-
Click on the “Connect Teams with Microsoft” option.
Authorization via Microsoft account
- On the Microsoft sign-in screen that opens, sign in with your corporate or personal Microsoft account.
- Approve SkyStudio's request for access permission from Teams.
2. Connection Method
To use the Teams node, you need to create an App Registration in the Azure Portal, define the necessary permissions (Graph API permissions), and enter the resulting Tenant ID, Client ID, and Client Secret into SkyStudio.
🎬 Click here to watch the video → How to set up Microsoft Teams connection?
Creating Azure App Registration
1. Registering a new application
-
Go to portal.azure.com.
-
Type
App registrationsin the search bar to go to the App registrations service. -
Click the + New registration button.
-
Give the application a name (e.g.,
SkyStudio). -
Select Accounts in this organizational directory only (Single tenant) as Supported account types.
-
Click the Register button.
2. Copying Client ID and Tenant ID
The following information is displayed on the Overview page that opens after the application is created:
- Application (client) ID → this is your Client ID
- Directory (tenant) ID → this is your Tenant ID
Copy both and save them somewhere. You can access this information again later.
3. Creating Client Secrets
-
Go to the Certificates & secrets section in the left-hand menu.
-
On the Client secrets tab, click the + New client secret button.
-
Enter a Description and select an Expiration.
-
Click the Add button.
-
Immediately copy the value in the Value column of the newly created secret.
Note: The Client Secret value is only visible when it is created. You will not be able to access its full value again after closing the page. If you forget to copy it, you will need to delete the secret and create it again.
4. Adding API Permissions
-
Go to the API permissions section in the left-hand menu.
-
Click the + Add a permission button.
-
Select Microsoft Graph.
-
Select the Application permissions tab.
-
Search for and add the necessary permissions for the Teams node:
| Permission | Explanation |
|---|---|
| Team.ReadBasic.All | To read the team list |
| Channel.ReadBasic.All | To read the channel list |
| ChannelMessage.Read.All | To read channel messages |
| ChannelMessage.Send | To send a message to the channel |
| Chat.ReadWrite.All | To read and send chat messages |
| OnlineMeetings.ReadWrite.All | To create meetings and access their recordings |
| Files.ReadWrite.All | To send files |
| User.Read.All | To read user information |
- After adding the permissions, confirm them by clicking the Grant admin consent button.
Note: You need a Microsoft 365 administrator account to obtain admin consent. If you are not authorized, please contact your IT department.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Microsoft Teams as your provider.
-
Fill in the following fields:
| Area | Description |
|---|---|
| Link Name | A descriptive name (e.g., Company Teams) |
| Tenant ID | Directory (tenant) ID you copied from Azure |
| Client ID | Application (client) ID you copied from Azure |
| Client Secret | The secret value you copied from Azure |
| User Email | The email address of the user who will run the workflow on their behalf |
- Click the Save button.
Assigning the Connection to the Node
After adding the Microsoft Teams node to the canvas, select the saved link from the App Links drop-down menu in the right panel.
Operations
Microsoft Teams Node offers 12 operations:
| Operation | Category | Description |
|---|---|---|
| List Channels | Featured | Lists channels within a team |
| Read Channel Messages | Featured | Retrieves the message history of a specific channel |
| Send Message to Channel | Featured | Sends a message to a specific channel |
| Send Chat Message | Featured | Sends a message to a specific chat |
| Create Meeting | Featured | Creates a new Teams meeting |
| Teams AI Assistant | Featured | Queries Teams data using natural language queries |
| List Teams | Standard | Lists all teams in the organization |
| List Chats | Standard | Lists the user's chats |
| User Information | Standard | Retrieves information for a specific user |
| List Users | Standard | Lists users in the organization |
| Send File | Standard | Sends a file to a channel |
| Meeting Records | Standard | Retrieves the records of a meeting |
List Channels
Returns all channels in the specified team. Used to discover channel IDs.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Team ID | Yes | The ID of the team whose channels will be listed |
Read Channel Messages
Returns the message history for the specified channel.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Team ID | Yes | The ID of the team to which the channel whose messages will be read belongs |
| Channel ID | Yes | The ID of the channel whose messages will be read |
| Limit | No | Maximum number of messages to return |
Send a Message to the Channel
Sends a message to the specified Teams channel. Used in notification and report sharing workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Team ID | Yes | The ID of the team the target channel belongs to |
| Channel ID | Yes | Channel ID to send the message to |
| Message | Yes | Message content to be sent |
| Content Type | No | Message type: text (plain text) or html (HTML content) |
Send Chat Message
Sends a message to a specific Teams chat (one-on-one or group chat).
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Chat ID | Yes | The ID of the chat to which the message will be sent |
| Message | Yes | Message content to be sent |
| Content Type | No | Message type: text or html |
Create Meeting
It creates a new Microsoft Teams meeting and returns a join link.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Meeting Title | Yes | Meeting Name |
| Start | Yes | Meeting start date and time (in YYYY-MM-DDTHH:MM:SS format) |
| End | Yes | Meeting end date and time (in YYYY-MM-DDTHH:MM:SS format) |
| Timezone | No | Time zone (e.g., Europe/Istanbul) |
| Participants | No | Email addresses of invited participants (separated by commas) |
Teams AI Assistant
It queries Teams data using natural language. As you can see from the video transcript, you can, for example, ask for the title of the last meeting in natural language.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Query | Yes | Teams query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "What was the title of my last meeting?"
System Prompt: "Only consider meetings from the last 7 days. Respond in Turkish."
List Teams
Lists all teams in the organization. Used to discover Team IDs.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
List Chats
Lists the chats (one-on-one and group) the user is involved in.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Limit | No | Maximum number of chats to rotate |
User Information
Returns the Microsoft 365 profile information (by ID or email) of a specific user.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| User ID or Email | Yes | User ID or email address to retrieve information from |
List Users
It lists users within the organization, and can be searched by name.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Search | No | Search filter by username or email |
| Limit | No | Maximum number of users to be returned |
Send File
Sends a file to a Teams channel. The file content can be provided as base64 or plain text.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Team ID | Yes | The ID of the team the target channel belongs to |
| Channel ID | Yes | The ID of the channel to which the file will be sent |
| File Name | Yes | File name and extension (e.g., report.pdf) |
| Content (base64 or text) | Yes | File content; base64 for binary files, plain text for text files |
Meeting Records
Returns the registration information and access links for a specific meeting.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Teams link to use |
| Meeting ID | Yes | The ID of the meeting whose records will be retrieved |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Client Secret has expired or is incorrect | Create a new Client Secret from the Azure Portal and update the SkyStudio connection |
| 403 Forbidden | Required API permission not granted | Add the missing permission and grant admin consent in Azure Portal → App Registration → API Permissions |
| Team/Channel not found | Team ID or Channel ID is incorrect | Find the correct IDs using the "List Teams" and "List Channels" operations |
| Tenant ID error | Incorrect Tenant ID entered | Check the Directory (tenant) ID in the Azure Portal → App Registration → Overview page |
| AADSTS700016 | Client ID not found | Check that the Application (client) ID was copied correctly |
Notes
- The default validity period for Client Secrets in Azure is 6 months or 1 year. When it expires, you need to create a new secret in Azure and update the SkyStudio connection.
- The account entered in the User Email field must have access to Teams and must be a member of the organization.
- API permissions require Admin consent; this can only be done by users with the Microsoft 365 Global Admin or Application Admin role.
- In the Send File operation, you may need to convert the contents of large files to base64 format; you can do this in a previous node (e.g., LLM or Transform).
- The Teams AI Assistant operation can query all Teams data accessible to the connected account.
Slack Node
The Slack Node enables integration with your Slack workspace in SkyStudio workflows. You can send messages to channels, read channel history, search messages, pull up channel and user lists, and run natural language queries with the Slack AI Assistant. A Slack Bot Token is used for connection.
Connection Setup and Management
To use Slack Node, you need to create an application (Slack App) in your Slack workspace and obtain a Bot Token.
Obtaining Slack Bot Tokens
-
Go to
api.slack.com/appsin your browser and sign in with your Slack account. -
Click the Create New App button and select the From scratch option.
-
Give the application a name and select the Slack workspace you will use.
-
Go to OAuth & Permissions from the left menu.
-
Under the Scopes heading, add the following permissions to the Bot Token Scopes section:
| Permission (Scope) | What is it needed for? |
|---|---|
| chat:write | Send message |
| channels:history | Reading channel messages |
| channels:read | View channel list |
| groups:read | View private channels |
| users:read | View user list |
| search:read | Searching messages |
- Click the Install to Workspace button at the top of the page and approve the permissions.
- Once the installation is complete, the Bot User OAuth Token will be displayed (starting with
xoxb-). Copy this value.
Note: Bot Tokens start with the prefix xoxb-. Always use Bot Tokens, not User Tokens (xoxp-).
Adding a Bot to the Channel
The bot can only send messages to channels it's a member of and read the history of those channels.
- Open the relevant channel in the Slack app.
- Type
/invite @app_namein the message box and send it. - The process is complete when the bot is added to the channel.
Adding a Connection in SkyStudio
- Click the chain icon (Application Connections) in the bottom toolbar of the workflow canvas.
- In the window that opens, click the + New link button.
- Select Slack from the provider list (it's under the collaboration category).
- Fill in the following fields:
| Field | Required | Explanation |
|---|---|---|
| Connection Name | Yes | A descriptive name (e.g., Company Slack) |
| Who can use it | Yes | Only me / Workspace / Selected users / Integrations |
| Name | No | Identity tag |
| Bot token | Yes | Bot User OAuth Token starting with xoxb- |
- Click the Add link button.
Note: Instead of filling in all the fields individually, you can click the "Edit as Raw JSON" button to paste the configuration as JSON.
Access Level Selection
| Options | Who can use it? |
|---|---|
| Just me | Only the person who created the link |
| Workspace | All members in the workspace |
| Selected users | The people you specified |
| Integrations | Workflow integration flows |
Assigning the Connection to the Node
After adding the Slack node to the canvas, select the saved link from the App Links dropdown menu in the right panel.
Operations
The Slack node offers 7 operations:
| Operation | Category | Description |
|---|---|---|
| Retrieve Channel Messages | Featured | Retrieves the message history of a channel |
| Send Message | Featured | Send a message to a channel or person |
| Search Messages | Featured | Searches messages across the work area |
| Slack AI Assistant | Featured | Queries Slack data using natural language queries |
| List Channels | Standard | Lists channels in the workspace |
| Get Channel Members | Standard | Lists members of a channel |
| List Users | Standard | Lists users in the workspace |
Send Message
It sends a message to the specified channel or person. It is the most frequently used operation in notification, report sharing, and alert scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Slack link to use |
| Channel | Yes | Channel name (#general), channel ID (C0123ABC) or user ID |
| Text | Yes | Text of the message to be sent |
| Thread TS | No | Timestamp of the message to reply to (to reply within the thread) |
| Blocks | No | Slack Block Kit JSON for rich-format messaging |
Usage Example
To send automated alerts from a workflow:
- Channel:
#sales-notifications - Text:
Daily sales report ready: {{llm.output}}
Sample Output
{
"ok": true,
"channel": "C0123ABC456",
"ts": "1718352000.000100",
"message": {
"text": "Daily sales report ready",
"user": "U0BOT123"
}
}
Fetch Channel Messages
Retrieves the message history of the specified channel. Used in scenarios such as channel summarization and daily digest creation.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Slack link to use |
| Channel | Yes | Channel name or channel ID |
| Limit | No | Maximum number of messages to retrieve (default 100) |
| Oldest | No | Start timestamp (messages after this date) |
| Latest | No | End timestamp (messages prior to this date) |
Sample Output
{
"messages": [
{
"user": "U01ABCDEF",
"text": "The meeting has been postponed to 15:00",
"ts": "1718352000.000100"
}
],
"has_more": false
}
Search in Messages
Searches for messages across the workspace using keyword, channel, or person filters.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Slack link to use |
| Query | Yes | Search query |
| Count | No | Number of results to return |
| Sort | No | Sort criterion (score or timestamp) |
Search Query Examples
| Search Example | Description |
|---|---|
| budget | Messages containing the word "budget" |
| in:#finance budget | Budget messages only on the finance channel |
| from:@ahmet report | Report messages sent by Ahmet |
| presentation after:2026-06-01 | Presentation messages after June 1st |
Slack AI Assistant
It queries Slack data using natural language. It's used to ask what's being discussed in which channel.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Slack link to use |
| Query | Yes | Slack query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "What decisions were made in the product channel this week?"
System Prompt: "Display the results item by item, in Turkish and chronological order."
List Channels
Lists the channels in the workspace. Used to find out the channel IDs.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Slack link to use |
| Types | No | Channel type (public_channel, private_channel) |
| Limit | No | Number of channels to rotate |
Get Channel Members
Returns a list of members in the specified channel.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Slack link to use |
| Channel | Yes | Channel name or channel ID |
| Limit | No | Number of members to be returned |
List Users
Lists all users in the workspace. Used to find out user IDs.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Slack link to use |
| Limit | No | Number of users to return |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| not_in_channel | Bot not added to channel | Run the command /invite @app_name in the channel |
| channel_not_found | Channel name or ID is incorrect | Find the correct ID with List Channels |
| invalid_auth | Bot Token is invalid | Retrieve the token from the Slack App page |
| missing_scope | Required permission not added | Add the missing scope from OAuth & Permissions and reload |
| ratelimited | Too many requests sent | Add a delay between requests |
| not_allowed_token_type | User token used | Use Bot Token starting with xoxb- |
Notes
- The bot token is in the format
xoxb-and only works in channels where the bot has been added. - The Search Messages operation requires
search:readpermission; this permission may be limited in free Slack plans. - To access private channels, the bot must be manually invited to that channel.
- To send rich-format messages, you can provide Slack Block Kit JSON in the Blocks field.
- To reply to a message within a thread, enter the original message's
tsvalue in the Thread TS field. - It's safer to use a channel ID instead of a channel name; the ID remains the same even if the channel name is changed.
Jira Node
SkyStudio's Jira integration allows you to directly connect your Jira projects to your workflows. You can automate all essential Jira operations, from issue management and sprint tracking to commenting and worklogging.
Connection Setup and Management
To use Jira nodes, you first need to define a Jira connection. Connections are reusable across all your workflows; once defined, simply select them on each node.
Creating a New Connection
Go to the Application Connections screen. Select New Connection. Choose Jira from the provider list and fill in the following information:
Connection Form Fields
| Field | Required | Explanation |
|---|---|---|
| Connection Name | Yes | Name you want to give the link (e.g., Prod Jira, Test Environment) |
| Provider | Yes | Jira must be selected |
| Jira Cloud domain name | Yes | Your Atlassian website domain name (e.g., yourcompany.atlassian.net) |
| Yes | Your Atlassian account email address (e.g., user@company.com) | |
| API token | Yes | API token you generated from your Atlassian account |
Note: Follow these steps: id.atlassian.com → Security → API tokens, create a new token, and copy and paste it into this field.
Once you fill out the form and click Save, the link will be saved and become available on all Jira nodes.
Steps to Obtain Jira API Key
- Log in to your Jira account and click on the profile (avatar) icon in the upper right corner.
- From the menu that opens, click on "Account settings / Manage account".
- Go to the "Security" tab in the left menu.
- On the security page, find the "API tokens" section and click the "Create API token" button.
- In the window that opens, give the token a descriptive name indicating its purpose.
- Set a validity period for the token (between 1 and 365 days, default 1 year).
- Create the key by clicking the "Create" button.
- Copy the generated key using "Copy to clipboard" and save it in a safe place (preferably a password manager).
Note: You will not be able to view the token again after leaving this screen; therefore, you must copy and save it to a safe place immediately after creating it. If you want to create a token with specific permissions (scoped), you can use the "Create API token with scopes" option on the same page and select the relevant application (Jira/Confluence) and permission scopes.
Assigning the Connection to the Node
After establishing a connection, you can view and select your defined connections from the Application Connections dropdown menu on each Jira node. Once a connection is selected, credentials are automatically merged during the run and test processes; the Connection field on the node serves as an optional backup.
Viewing Active Connections
You can see all the tool connections used in the current workflow by clicking the Active Connections button in the upper right corner of Canvas. Published workflows run through these connections; it is recommended that you evaluate which access information is valid for external access scenarios according to your corporate policies.
Note: You can add dynamic values from other nodes in the workflow by typing / in the connection field.
Operations
The SkyStudio Jira node supports the following 14 operations. The first three operations are marked as Featured and are designed for the most frequently used scenarios.
| Operation | Category | Description |
|---|---|---|
| Get Issue | Featured | Retrieves a single issue by ID or key |
| Issue Search (JQL) | Featured | Searches for multiple issues using a JQL query |
| Jira AI Assistant | Featured | Queries Jira data using natural language queries |
| Create Issue | Issue Management | Creates a new Jira issue |
| Change Issue Status | Issue Management | Updates the status of an issue |
| Retrieve Issue Transitions | Issue Management | Lists current status transitions |
| List Projects | Project | Lists all accessible projects |
| Get Project | Project | Gets the details of a specific project |
| List Boards | Board | Lists project boards |
| Fetch Sprint Issues | Sprint | Retrieves all issues belonging to a sprint |
| Get Comments | Comments | Lists comments on an issue |
| Add Comment | Comment | Adds a new comment to an issue |
| Retrieve Worklogs | Worklog | Retrieves worklog records for an issue |
| Add Worklog | Worklog | Adds a new worklog entry to an issue |
Featured Operations
Get Issue
In Jira, this retrieves a specific issue using its key. Use it when you want to access all the details of a single issue.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Issue Key | Yes | Jira key for the issue (e.g., ENG-123, PROJ-456) |
| Fields | No | The fields to be retrieved must be comma-separated (e.g., summary, status, assignee). If left blank, all fields will be returned. |
Output
The issue returns a JSON object containing all the requested fields. This includes standard fields such as summary, status, assignee, priority, description, created, and updated.
Example Usage
To get only the summary and status information, enter ENG-101 in the Issue Key field and summary,status in the Fields field.
Search Issues (JQL)
Jira uses Query Language (JQL) to filter and list multiple issues. It's ideal for retrieving issues that match specific criteria in bulk.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| JQL Query | Yes | JQL query expression (e.g., project = ENG AND status = 'In Progress') |
| Fields | No | The fields to be retrieved must be comma-separated (e.g., summary, status, assignee). If left blank, all fields will be returned. |
| Get All (Auto Paginate) | No | If enabled, pagination is done automatically and all results are retrieved at once. |
| Limit | No | Maximum number of issues to rotate (default: 25). |
Output
It returns an array containing a list of issues that match the JQL query. Each element contains the requested fields.
JQL Examples
project = ENG AND status = "To Do"
assignee = currentUser() AND sprint in openSprints()
project = BUGS AND priority = High AND created >= -7d
labels = "backend" ORDER BY created DESC
Jira AI Assistant
Jira is an AI-powered assistant that lets you query your data using natural language. It allows you to run complex queries without requiring JQL knowledge.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Query | Yes | A Jira question or query written in natural language (e.g., List the bugs fixed this week) |
| System Prompt | No | System instruction to customize the assistant's behavior. Used to add project- or company-specific context. |
Output
The assistant interprets the query, retrieves the relevant Jira data, and generates a response in natural language format.
Example Usage
By typing "List critical bugs opened in the last 3 days" in the Query field, you can retrieve the relevant issues without writing any JQL.
Issue Management
Create Issue
It creates a new issue in Jira. It can be used in automated bug tracking, task generation, or support request workflows.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Project Key | Yes | The key for the project where the issue will be created (e.g., ENG, BUGS) |
| Summary | Yes | Issue title / summary |
| Issue Type | Yes | Issue type; one of the following options: Bug, Task, Story, Epic |
| Description | No | Detailed description of the issue |
| Assignee Account ID | No | The Jira account ID of the user to be assigned |
| Priority | No | Priority level; Highest, High, Medium, Low, Lowest |
| Labels | No | Labels to be added to the issue must be separated by commas (e.g., backend, urgent) |
Output
The generated issue returns a JSON object containing its id, key, and self (URL) information.
Change Issue Status
Updates the status of an existing issue. Used to automate workflow transitions.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Issue Key | Yes | Key for the issue whose status will be changed (e.g., ENG-123) |
| Transition ID | Yes | The ID of the transition to be applied. Use the Get Issue Transitions operation to find the existing transition IDs. |
Output
A successful operation returns an empty response (HTTP 204).
Note: If you don't know the Transition ID, first run the Get Issue Transitions operation to list the available transitions and their IDs for the relevant issue.
Get Issue Transitions
Lists the current status transitions and transition IDs for an issue. Used before the Change Issue Status operation.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Issue Key | Yes | Key to the issue to be queried (e.g., ENG-123) |
Output
For each pass, it returns an array containing id, name (e.g., "In Progress", "Done"), and to` (target status).
Project Operations
List Projects
Lists all accessible projects in the linked Jira account.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Get All (Auto Paginate) | No | If enabled, all projects will be retrieved with automatic pagination. |
| Limit | No | Maximum number of projects to rotate. |
Output
It returns an array containing the id, key, name, and projectTypeKey information for each project.
Get Project
Retrieves the details of a specific project using a key value.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Project Key | Yes | Key for the project to be queried (e.g., ENG, PROJ) |
Output
The project returns a JSON object containing the id, key, name, description, lead, and configuration information.
Board Operations
List Boards
Lists the Scrum or Kanban boards for a project.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Project Key | No | Key for the project to filter (e.g., ENG). If left blank, all boards will be listed. |
| Limit | No | Maximum number of boards to rotate (default: 50). |
Output
It returns a set of information for each board including id, name, and type (scrum or kanban).
Sprint Operations
Bring Sprint Issues
Lists all issues for a specific sprint. Used for sprint-based reporting and automation.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Sprint ID | Yes | Jira ID of the sprint to be queried (numeric value, e.g., 42) |
| Get All (Auto Paginate) | No | If enabled, all issues will be retrieved with automatic pagination. |
| Limit | No | Maximum number of issues to be rotated (default: 50). |
Output
It returns a list of issues related to the sprint.
Comment Operations
Get Comments
Lists all comments made on an issue.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Issue Key | Yes | Key to the issue from which comments will be retrieved (e.g., ENG-123) |
| Limit | No | Maximum number of comments to be returned. |
Output
For each comment, it returns an array containing information such as id, author, body (comment content), and created (date).
Add Comment
Adds a new comment to an existing issue. Can be used to send notifications, update status, or leave notes.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Issue Key | Yes | Key to the issue to add a comment (e.g., ENG-123) |
| Comment | Yes | Comment content (plain text or Jira formatting supported) |
Output
The generated comment returns a JSON object containing its id, author, body, and created information.
Worklog Operations
Get Worklogs
Lists all worklog records saved on an issue.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Issue Key | Yes | Worklog records will be retrieved for the issue key (e.g., ENG-123) |
Output
For each worklog entry, it returns an array containing information such as id, author, timeSpent, timeSpentSeconds, and started (start date).
Add Worklog
Adds a new time tracking record to an issue. Used to automatically log run times.
Input Parameters
| Field | Required | Explanation |
|---|---|---|
| Issue Key | Yes | Key of the issue to be added to the worklog (e.g., ENG-123) |
| Time Spent | Yes | Time spent, in Jira format (e.g., 2h 30m, 1d, 45m) |
| Comment | No | Note or explanation to be added to the Worklog |
| Started At | No | Date and time the study started (ISO 8601 format, e.g., 2024-04-14T09:00:00.000+0000). If left blank, the current time will be used. |
Output
The generated worklog record returns a JSON object containing the id, author, timeSpent, timeSpentSeconds, and started information.Example 1: Error Automation
Automatically open error information from a form as an issue in Jira:
-
Obtain error information from the user using the Text Input node.
-
Connect to the Create Issue node; set
Project Key: BUGS,Issue Type: Bug,Priority: High.
Add source information to the issue created with the 3. Add Comment node. Example 2: Sprint Status Report
Report the status of all issues in the active sprint:
-
Enter the sprint ID using the Fetch Sprint Issues node.
-
Summarize the data using the Jira AI Assistant or Data Analysis node.
3. Text Output Send the report to the user. Example 3: Automatic Worklog
Automatically create a time record when a task is completed:
-
Change the issue status to
Doneusing the Change Issue Status node. -
Using the Add Worklog node, record the values
Time Spent: 1handComment: Autocompleted.
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 404 Issue not found | Incorrect Issue Key entered | Check that the Issue Key is in the correct format (e.g., ENG-123) |
| 400 Invalid JQL | The JQL query is incorrect | Test the JQL syntax in Jira |
| 403 Forbidden | Insufficient permissions | Verify that the linked account has permissions for the relevant project |
| Transition not found | Invalid Transition ID | List existing transitions with Get Issue Transitions first |
Confluence Node
The Confluence node enables integration with Atlassian Confluence within SkyStudio workflows. You can read Confluence pages, fields, and blog posts; and run AI-powered natural language queries.
Connection Setup and Management
To use the Confluence node, you first need to establish an Atlassian connection.
Adding a New Connection
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Fill in the following information:
| Field | Description | Example |
|---|---|---|
| Connection Name | Name you want to give this link | Company Confluence |
| Provider | Connection type | Confluence |
| Confluence Cloud domain name | Subdomain of your Atlassian account | sirketim.atlassian.net |
| The email address registered with your Atlassian account | user@company.com | |
| API Token | Atlassian API token | ATATT3xFfGF0... |
API Token Generation
-
Click the Create API token button.
-
Give the token a label (e.g.,
SkyStudio) and create it. -
Copy the generated token and paste it into the API Token field in SkyStudio.
Note: The API token can only be viewed once. Don't forget to copy it immediately.
Assigning the Connection to the Node
After dragging the Confluence node onto the canvas, select the connection you created earlier from the Application Connections drop-down menu in the right panel. If manual mode is selected, you can enter the connection information directly into the field.
Operations
The confluence node offers 7 operations:
| Operation | Category | Description |
|---|---|---|
| List Spaces | Featured | Lists all spaces in Confluence |
| Confluence AI Assistant | Featured | Queries Confluence data using natural language queries |
| List pages | Standard | Lists pages in a specific field |
| Retrieve Page Content | Standard | Retrieves the content of a single page using its ID |
| Retrieve Subpages | Standard | Retrieves subpages of a given page |
| Retrieve Page History | Standard | Retrieves the revision history of a page |
| Fetch Blog Pages | Standard | Retrieves blog posts from a specific domain |
List Fields
Confluence returns all the spaces in your account. It's used to discover which spaces you have access to and learn their Space Key values.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Confluence connection to use |
| Space Type | No | Space type filter (global, personal, etc.) |
| Get All (Auto Paginate) | No | Automatically paginates all results |
| Limit | No | Maximum number of records that can be retrieved |
Sample Output
{
"results": [
{
"id": "123456",
"key": "TECH",
"name": "Technical Documentation",
"type": "global",
"status": "current"
}
]
}
Confluence AI Assistant
It allows you to query Confluence data using natural language. It's ideal for accessing information without writing complex Confluence queries.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Confluence connection to use |
| Query | Yes | Search question in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "Find pages related to the onboarding process"
System Prompt: "Only consider pages updated in the last 6 months"
Note: You can define specific restrictions for the AI assistant using System Prompt, such as a particular field, author, or time period.
List Pages
Returns a list of pages within a specific Confluence space.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Confluence connection to use |
| Space Key | No | Space key from which the page list will be retrieved (e.g., TECH) |
| Expand Fields | No | Additional fields to expand in the answer |
| Get All (Auto Paginate) | No | Automatically paginates all results |
| Limit | No | Maximum number of pages to be retrieved |
| File Path | No | The file path where the result will be saved |
Sample Output
{
"results": [
{
"id": "98765",
"title": "API Integration Guide",
"space": { "key": "TECH" },
"version": { "number": 5 },
"_links": { "webui": "/spaces/TECH/pages/98765" }
}
]
}
Retrieve Page Content
Retrieves the full content of a page in Confluence using its page ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Confluence connection to use |
| Page ID | Yes | Confluence ID of the page whose content will be retrieved |
| Body Format | No | Content format (storage, view, export_view, etc.) |
| File Path | No | The file path where the result will be saved |
How to Find Page ID?
Open the page in Confluence. The numerical value after /pages/ in the URL is the Page ID. Example: https://sirketim.atlassian.net/wiki/spaces/TECH/pages/98765 → Page ID: 98765
Body Format Options
- storage — Confluence's internal XML format (default)
- view — HTML view format
- export_view — HTML optimized for export.
Fetch Subpages
It retrieves all direct or entire hierarchical subpages of a parent page. Useful for mapping page trees.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Confluence connection to use |
| Page ID | Yes | ID of the parent page to list subpages |
| Recursive (All Children) | No | If enabled, it retrieves all subpages in the hierarchy |
| Limit | No | Maximum number of subpages to be displayed |
| File Path | No | The file path where the result will be saved |
About Recursive Mode
When the Recursive (All Children) option is disabled, only the direct subpages one level below are retrieved. When enabled, the entire hierarchy (including grandchildren) is retrieved.
Get Page History
Returns the entire revision history of a Confluence page. Suitable for audit and tracking scenarios with information on who modified it and when.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Confluence connection to use |
| Page ID | Yes | Confluence ID of the page whose history will be retrieved |
| File Path | No | The file path where the result will be saved |
Sample Output
{
"results": [
{
"number": 7,
"when": "2024-11-15T10:23:00.000Z",
"by": { "displayName": "Ahmet Yılmaz" },
"message": "Installation steps updated"
}
]
}
Retrieve Blog Pages
Lists blog posts from a specific Confluence area.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Confluence connection to use |
| Space Key | No | Space key from which blog posts will be retrieved (e.g., TEAM) |
| Limit | No | Maximum number of blog posts allowed |
| File Path | No | The file path where the result will be saved |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Invalid API token or email | Check connection settings, renew token |
| 403 Forbidden | Access to the page is denied | Check user permissions on Atlassian |
| 404 Not Found | Invalid Page ID or Space Key | Verify ID/Key values from Confluence URL |
| 429 Too Many Requests | API request limit exceeded | Add delays between requests or lower the limit value |
| Space not found | Incorrect Space Key | Check the list of spaces with "List Spaces" |
Notes
- The File Path parameter is used to save the result directly to a file in operations that return large amounts of data. You can then process this file within the workflow.
- The Get All (Auto Paginate) option may cause slowdowns in fields with a large number of records; it is recommended to use it in conjunction with Limit.
- Confluence Cloud and Confluence Server APIs are different; this node is designed for Confluence Cloud (Atlassian Cloud).
Notion Node
The Notion node enables integration with your Notion workspace in SkyStudio workflows. You can read page and database records, create new pages, add content to existing pages, and run AI-powered queries.
Connection Setup and Management
To use the Notion node, you need to create an Internal Integration in Notion and add the generated token to SkyStudio. You also need to share the pages and databases you want the integration to access with the integration itself.
Getting Notion Integration Tokens
1. Creating an Integration
-
Go to notion.so/my-integrations.
-
Click the + New integration button.
-
Give the integration a name (e.g.
SkyStudio). -
Choose which workspace to connect to.
-
Click the Submit button.
2. Copying the Token
After the integration is created, view and copy the token starting with secret_ in the Internal Integration Token field using the Show button.
Note: Keep this token safe. Even if you lose it, you can always view it again at notion.so/my-integrations.
3. Sharing pages and databases via integration
Creating an integration in Notion is not enough on its own. Sharing must be done separately for each page or database that needs to be accessed.
-
In Notion, open the page or database you wish to access.
-
Click the ... (three dots) menu in the upper right corner.
-
Select the Connections (or Add connections) option.
-
Find and click the integration you created (e.g., SkyStudio) in the list.
Note: When you grant access to a parent page, all subpages and databases below that page also become accessible automatically.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Notion as your provider.
-
Enter a descriptive name in the Connection Name field (e.g.,
Prod Notion). -
Paste the
secret_…token you copied into the Integration Token field. -
Click the Save button.
Assigning the Connection to the Node
After adding the Notion node to the canvas, select the saved link from the Application Connections drop-down menu in the right panel.
Operations
The Notion node offers 8 operations:
| Operation | Category | Description |
|---|---|---|
| Query Database | Featured | Query Notion database with filters and sorting |
| Notion AI Assistant | Featured | Queries Notion content using natural language queries |
| List Pages | Standard | Lists pages in Workspace |
| Fetch Page | Standard | Returns metadata for a specific page |
| Retrieve Page Content | Standard | Returns the content (block content) of a specific page |
| List Databases | Standard | Lists all databases in Workspace |
| Create Page | Standard | Creates a new Notion page |
| Add Content | Standard | Adds content to an existing page |
Database Query
Notion queries records in a database with filtering and sorting options. It is used in database-based applications such as CRM, task tracking, or content calendars.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Database ID | Yes | ID of the database to be queried |
| Filter Property | No | Name of the property to be filtered (e.g., Status, Assigned To) |
| Filter Value | No | Filter value (e.g., Done, Ahmet) |
| Sort By Property | No | Property name to be used to sort the results |
| Limit | No | Maximum number of records to return |
How to Find the Database ID?
Open the database in Notion. The structure in the URL is: notion.so/{workspace}/{database-id}?v=...
The Database ID is the 32-character section before the ?v= part in the URL. Alternatively, the ID can be used from a copied link obtained by selecting the Copy link option from the ... menu on the database page.
Sample Output
{
"results": [
{
"id": "page-id-123",
"properties": {
"Name": { "title": [{ "plain_text": "Project Meeting" }] },
"Status": { "select": { "name": "In Progress" } },
"Due Date": { "date": { "start": "2024-06-01" } }
}
}
]
}
Notion AI Assistant
It queries Notion content using natural language. It's ideal for accessing page and database analysis without writing complex filters.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Query | Yes | Notion query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "What tasks need to be completed this week?"
System Prompt: "Only consider records from the 'Tasks' database. List the results in Turkish and in order of priority."
List Pages
Lists the pages in the Notion workspace. Used to discover Page IDs and create a page inventory.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Limit | No | Maximum number of pages to rotate |
Sample Output
{
"results": [
{
"id": "abc123",
"properties": {
"title": [{ "plain_text": "Product Roadmap" }]
},
"url": "https://notion.so/abc123"
}
]
}
Get Page
Returns the metadata (title, creation date, last modified date, attributes) of a specific Notion page. It does not retrieve the block content of the page; use the Fetch Page Content operation for that.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Page ID | Yes | The ID of the page from which the information will be retrieved |
Get Page Content
Returns the block content (text, headings, lists, tables, etc.) of a specific Notion page. Used in scenarios for reading and summarizing page content.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Page ID | Yes | ID of the page whose content will be retrieved |
Sample Output
{
"results": [
{
"type": "heading_1",
"heading_1": { "rich_text": [{ "plain_text": "Project Summary" }] }
},
{
"type": "paragraph",
"paragraph": { "rich_text": [{ "plain_text": "The aim of this project is..." }] }
}
]
}
List Databases
Lists all Notion databases in the Workspace. Used to discover database IDs.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Limit | No | Maximum number of databases to return |
Create Page
Creates a new Notion page below the specified parent page or database.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Parent ID | Yes | ID of the parent page or database where the new page will be created |
| Parent Type | Yes | Type of parent element: page or database |
| Title | No | Title of the page to be created |
| Content | No | Initial content of the page (as plain text) |
Sample Output
{
"id": "new-page-id-456",
"url": "https://notion.so/new-page-id-456",
"properties": {
"title": [{ "plain_text": "Weekly Report - June 2024" }]
}
}
Add Content
Adds new content (block) to the end of an existing Notion page. Used in page logging and automated content accumulation workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Notion link to use |
| Page ID | Yes | The ID of the page where the content will be added |
| Content | Yes | Text content to be added to the page |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Invalid or incorrectly entered token | Check your Notion Integration Token; make sure it starts with secret_ |
| 404 Not Found | The page or database was not found or shared with the integration | Share the relevant page or database with the integration in Notion (Connections → SkyStudio) |
| 403 Forbidden | Integration does not have permission to access this content | You may have forgotten to share the page with integration; open the relevant page in Notion and go to the Connections section |
| Empty results | No records matching the filter condition | Check that the Filter Property and Filter Value values exactly match the field names in the database |
| validation_error | Database ID or Page ID format is incorrect | Verify that the ID is in UUID format, which is 32 characters including hyphens |
Notes
- The Notion Integration Token (
secret_…) does not expire; however, if the integration is deleted or the token is renewed, you will need to update your SkyStudio connection. - The List Pages and List Databases operations only return content shared via integration. Pages that are not shared will not be listed.
- Fetch Page retrieves the page's metadata (title, date, attributes), while Fetch Page Content retrieves the block content. These are two different operations and are not interchangeable.
- In the Create Page operation, if
databaseis selected for the Parent Type field, the created page is added to the database as a row; ifpageis selected, it is added as a subpage. - For large (multi-block) page content, the Fetch Page Content operation can be time-consuming; consider truncating or filtering the content before sending it to the LLM node.
HubSpot Node
The HubSpot node enables integration with HubSpot CRM in SkyStudio workflows. You can read, filter, and run AI-powered queries on contact, deal, and company records.
Connection Setup and Management
To use the HubSpot node, you need to create a Private App on HubSpot and add the access token to SkyStudio.
Obtaining Private App Tokens
-
Log in to your HubSpot account.
-
Go to Settings from the profile icon in the upper right corner.
-
Open Integrations → Private Apps from the left menu.
-
Click the Create Application button.
-
Give the application a name and select the necessary permission scopes:
- CRM →
crm.objects.contacts.read,crm.objects.deals.read,crm.objects.companies.read
-
Click the Create Application button.
-
Copy the generated Access Token (starting with
pat-eu1-…orpat-na1-…).
Note: The token can only be displayed fully once. If you forget to copy it, you will need to regenerate the token.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select HubSpot as your provider.
-
Enter a descriptive name in the Link Name field (e.g.,
Prod HubSpot). -
Paste the token you copied into the Private App Access Token field.
-
Click the Save button.
Assigning the Connection to the Node
After adding the HubSpot node to the canvas, select the saved link from the Application Connections drop-down menu in the right panel.
Note: You can define separate links for different HubSpot portals (e.g., test and live) and choose which one to use in your workflow.
Operations
The HubSpot node offers 7 operations:
| Operation | Category | Description |
|---|---|---|
| Retrieve Contacts | Featured | Lists all contact records in the CRM |
| Feature Deals | Featured | Lists all deal records in the CRM |
| Object Search | Featured | Searches for any CRM object using a filter |
| HubSpot AI Assistant | Featured | Queries CRM data using natural language queries |
| Retrieve Person (by ID) | Standard | Retrieves the details of a specific person by ID |
| Get Opportunity (by ID) | Standard | Retrieves details of a specific opportunity by ID |
| Retrieve Companies | Standard | Lists all company records in the CRM |
Get Contacts
Returns all contact records from HubSpot CRM. Used in bulk contact list retrieval and synchronization scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | HubSpot connection to use |
| Properties | No | Retrieve contact attributes (comma-separated domain names, e.g., firstname, lastname, email, phone) |
| Get All (Auto Paginate) | No | If enabled, it automatically retrieves records from all pages; if disabled, it only returns the first page. |
| Limit | No | Maximum number of people to rotate (valid when Get All is disabled) |
Properties Examples
firstname, lastname, email, phone, company, jobtitle, city, country, createdate, lastmodifieddate, hubspot_owner_id
Sample Output
{
"results": [
{
"id": "12345",
"properties": {
"firstname": "Ahmet",
"lastname": "Yılmaz",
"email": "ahmet@sirket.com",
"phone": "+905551234567",
"company": "Örnek A.Ş."
}
}
]
}
Get Deals
It returns all deal records from HubSpot CRM. It is used in sales pipeline tracking and reporting workflows.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | HubSpot connection to use |
| Properties | No | Opportunity features to be brought (comma-separated domain names) |
| Get All (Auto Paginate) | No | Automatically retrieves all pages |
| Limit | No | Maximum number of opportunities to spin |
Properties Examples
dealname, amount, dealstage, closedate, pipeline, hubspot_owner_id, createdate, hs_lastmodifieddate
Sample Output
{
"results": [
{
"id": "67890",
"properties": {
"dealname": "Corporate License - Example Inc.",
"amount": "15000",
"dealstage": "presentationscheduled",
"closedate": "2024-12-31T00:00:00.000Z"
}
}
]
}
Object Search
In HubSpot CRM, it searches for any object type (person, opportunity, company, ticket, etc.) using a specific filter. It is used for dynamic queries and conditional data retrieval scenarios.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | HubSpot connection to use |
| Object Type | Yes | Object type to search for: contacts, deals, companies, tickets |
| Filter Property | No | Name of the property to be filtered (e.g., email, dealstage) |
| Filter Operator | No | Filter operator (e.g., EQ, NEQ, CONTAINS_TOKEN, GT, LT) |
| Filter Value | No | Filter value (e.g., ahmet@company.com, closedwon) |
| Properties | No | Field names to return in results (comma separated) |
| Limit | No | Maximum number of records to return |
Filter Operator Values
| Operator | Description |
|---|---|
| EQ | Equals |
| NEQ | Not equal to |
| GT | Greater than |
| LT | Less than |
| GTE | Greater than or equal to |
| LTE | Less than or equal to |
| CONTAINS_TOKEN | Contains (text search) |
| NOT_CONTAINS_TOKEN | Does not contain |
Usage Example
To find closed (won) opportunities:
- Object Type:
deals - Filter Property:
dealstage - Filter Operator:
EQ - Filter Value:
closedwon
HubSpot AI Assistant
It queries HubSpot CRM data using natural language. It's ideal for accessing data analysis without writing complex filters.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | HubSpot connection to use |
| Query | Yes | CRM query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "What is the total value of opportunities expected to close this month?"
System Prompt: "Only consider opportunities in the active pipeline. Provide results in Turkish and in Turkish Lira."
Retrieve Person (by ID)
Returns detailed information for a single person with a specific HubSpot Contact ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | HubSpot connection to use |
| Contact ID | Yes | The numerical ID of the contact record on HubSpot |
| Properties | No | Domain names to retrieve (comma separated) |
How to Find Contact ID?
The id field in the output of "Fetch People" or "Search Object" operations can be used directly. It also appears in the URL when you open a contact record in the HubSpot web interface: app.hubspot.com/contacts/{portal-id}/contact/{contact-id}.
Get an Opportunity (with ID)
Returns detailed information for a single deal with a specific HubSpot Deal ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | HubSpot connection to use |
| Deal ID | Yes | The numerical ID of the deal listing on HubSpot |
| Properties | No | Domain names to retrieve (comma separated) |
How to Find Deal ID?
The id field in the output of the "Fetch Opportunities" or "Search Object" operations can be used. HubSpot URL: app.hubspot.com/contacts/{portal-id}/deal/{deal-id}.
Bring Companies
Returns all company records from HubSpot CRM.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | HubSpot connection to use |
| Properties | No | Company properties to retrieve (comma-separated domain names) |
| Get All (Auto Paginate) | No | Automatically retrieves all pages |
| Limit | No | Maximum number of companies to rotate |
Properties Examples
name, domain, industry, city, country, phone, numberofemployees, annualrevenue, createdate
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Token is invalid or expired | Check your Private App token on HubSpot; renew if necessary |
| 403 Forbidden | Token does not have the required scope permission | Add the necessary CRM permissions from Private App settings |
| 404 Not Found | Invalid Contact ID or Deal ID | Verify that the ID is correct using "Get Contacts" |
| 429 Too Many Requests | API rate limit exceeded | HubSpot API has a daily limit of 250,000 requests; reduce workflow frequency |
| INVALID_FILTER_VALUE | The filter value is not in the expected format | Check that the Filter Value matches the relevant field type (text, number, date) |
| Empty result (results: []) | No records matching the filter condition | Check the Filter Property and Filter Value |
Notes
- If the Properties field is left blank, HubSpot will only return the default fields (
id,createdate,lastmodifieddate). Explicitly specify the fields you need. - When Get All (Auto Paginate) is enabled, processing time may increase with very large CRM databases (10,000+ records). In this case, limit the number using the Limit parameter.
- The HubSpot Private App token does not automatically renew every 90 days; you need to update your SkyStudio link when it expires.
- Depending on the region of your HubSpot portal, the token will start with the prefix
pat-eu1-…(Europe) orpat-na1-…(North America).
Dynamics 365 Node
The Dynamics 365 node enables integration with your Microsoft Dynamics 365 CRM/ERP system in SkyStudio workflows. You can query, create, update, and delete records, and run advanced queries with FetchXML. Azure AD application registration (Client ID / Client Secret) is used for connection.
Connection Setup and Management
To use a Dynamics 365 node, you need to create an application registration in the Azure portal and grant that application Dynamics 365 access permissions.
Creating an Application Registration in Azure
-
Go to
portal.azure.comand log in with your corporate account. -
Go to the Microsoft Entra ID (formerly Azure Active Directory) service.
-
From the left menu, click App registrations → New registration.
-
Give the application a name (e.g.,
SkyStudio Dynamics) and click the Register button. -
On the page that opens, note the following values:
| Value | Where to find it |
|---|---|
| Application (client) ID | Top of the application overview page |
| Directory (tenant) ID | Top of the application overview page |
Creating Client Secrets
-
On the application page, go to the Certificates & secrets section in the left-hand menu.
-
Click the New client secret button.
-
Enter a description and select the validity period.
-
Click the Add button.
-
Copy the value in the resulting Value column.
Note: The Client Secret is only visible at the time of its creation. It cannot be seen again after leaving the page; keep it in a safe place.
Granting API Permissions
-
On the application page, go to the API permissions section.
-
Select Add a permission → Dynamics CRM.
-
Under Delegated permissions, check the
user_impersonationpermission. -
Click the Add permissions button.
-
Confirm by clicking the Grant admin consent button using your administrator account.
Defining Application Users in Dynamics 365
-
Go to the Dynamics 365 admin center.
-
Open Settings → Security → Users.
-
Select Application Users from the View list.
-
Create a new application user using New and enter the Azure Client ID in the Application ID field.
-
Assign the appropriate security role to the user (e.g.,
System Administratoror a limited custom role).
Finding the .org URL
This is the address of your Dynamics 365 environment. It appears in the address bar when you open Dynamics 365 in your browser:
- For Sales / Customer Service:
https://sirketiniz.crm4.dynamics.com - For Finance & Operations:
https://sirketiniz.operations.dynamics.com
Adding a Connection in SkyStudio
-
Click the chain icon (Application Connections) in the bottom toolbar of the workflow canvas.
-
Click the + New link button.
-
Select Dynamics 365 from the provider list.
-
Fill in the following fields:
| Field | Required | Explanation |
|---|---|---|
| Connection name | Yes | A descriptive name (e.g., Prod Dynamics) |
| Who can use it | Yes | Only me / Workspace / Selected users / Integrations |
| Name | No | Identity tag |
| Org URL | Yes | Dynamics environment address (e.g., https://sirket.operations.dynamics.com) |
| Tenant ID | Yes | Azure Directory (tenant) ID — in GUID or company.com.tr format |
| Client ID | Yes | Application (client) ID value of Azure application registration |
| Client Secret | Yes | The secret key you created in Azure |
| Resource (token) | No | Resource address for the token; if left blank, the Org URL will be used |
| API Type | Yes | API type to use (Dataverse / Finance & Operations) |
- Click the Add link button.
Note: Instead of filling in all the fields individually, you can click the "Edit as Raw JSON" button to paste the configuration as JSON.
Assigning the Connection to the Node
After adding the Dynamics 365 node to the canvas, select the saved connection from the Application Connections drop-down menu in the right panel.
Operations
The Dynamics 365 node offers 6 operations:
| Operation | Category | Description |
|---|---|---|
| Query Records | Featured | Runs a filtered record query on the entity |
| Create Account | Featured | Creates a new account |
| Retrieve Record | Standard | Retrieves a single record with an ID |
| Update Record** | Standard | Updates an existing record |
| Delete Record | Standard | Deletes a record |
| FetchXML Query | Standard | Runs advanced queries with FetchXML |
Check Record
It runs a filtered query on the specified entity and returns matching records.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Dynamics 365 connection to be used |
| Entity Name | Yes | Entity name (plural, e.g., accounts, contacts, opportunities) |
| Filter | No | OData filter expression (e.g., statuscode eq 1) |
| Select | No | Fields to return (comma separated) |
| Order By | No | Sorting field (e.g., createdon desc) |
| Top | No | Maximum number of records to rotate |
Frequently Used Entity Names
| Entity Name | Description |
|---|---|
| accounts | Companies / firms |
| contacts | People |
| leads | Potential customers |
| opportunities | Sales opportunities |
| incidents | Support requests |
| salesorders | Sales orders |
Filter Examples
| Filter | Description |
|---|---|
| statuscode eq 1 | Records with the status active |
| revenue > 100,000 | Companies with a turnover greater than 100,000 |
| contains(name,'Teknoloji') | Users whose name includes "Teknoloji" |
| created on ge 2026-01-01 | Created after January 1, 2026 |
Sample Output
{
"value": [
{
"accountid": "a1b2c3d4-1234-5678-90ab-cdef12345678",
"name": "Örnek Teknoloji A.Ş.",
"revenue": 2500000,
"statuscode": 1
}
],
"@odata.count": 1
}
Create Account
Creates a new record for the specified entity.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Dynamics 365 connection to be used |
| Entity Name | Yes | Entity name (e.g., contacts) |
| Data (JSON) | Yes | Field values of the record to be created (in JSON format) |
Usage Example
To create a new contact record:
- Entity Name:
contacts - Data (JSON):
{
"firstname": "Ayşe",
"lastname": "Kaya",
"emailaddress1": "ayse@company.com",
"telephone1": "+90 212 000 00 00"
}
Sample Output
{
"contactid": "b2c3d4e5-2345-6789-01bc-def234567890",
"created": true
}
Get Record
Retrieves all fields of a single record using its ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Dynamics 365 connection to be used |
| Entity Name | Yes | Entity name |
| Record ID | Yes | GUID value of the record |
| Select | No | Fields to return (comma separated) |
Update Registration
Updates the specified fields of an existing record.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Dynamics 365 connection to be used |
| Entity Name | Yes | Entity name |
| Record ID | Yes | GUID value of the record to be updated |
| Data (JSON) | Yes | Fields to be updated (in JSON format) |
Note: Only the fields you submit will be updated; other fields will remain unchanged.
Delete Record
It deletes the specified record.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Dynamics 365 connection to be used |
| Entity Name | Yes | Entity name |
| Record ID | Yes | GUID value of the record to be deleted |
Note: Deletion is irreversible. It is recommended to add a check with an If-Else condition before adding this node to the flow.
FetchXML Query
It runs advanced queries in the FetchXML format. It is used for queries that join multiple entities and involve grouping.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Dynamics 365 connection to be used |
| Entity Name | Yes | Main entity name |
| FetchXML | Yes | FetchXML query text |
Usage Example
<fetch top="10">
<entity name="opportunity">
<attribute name="name" />
<attribute name="estimatedvalue" />
<filter>
<condition attribute="statecode" operator="eq" value="0" />
</filter>
<order attribute="estimatedvalue" descending="true" />
</entity>
</fetch>
Note: You can visually generate FetchXML queries in the Dynamics 365 Advanced Find screen and export them using Download FetchXML.
Quick Start Examples
Example 1: Weekly Sales Opportunity Report
A workflow that summarizes open opportunities and emails them to the manager:
Webhook (Every Monday) → Check Registration → LLM (report) → Send Mail (Outlook)
Record Query settings:
- Entity Name:
opportunities - Filter:
statecode eq 0 - Order By:
estimatedvalue desc - Top:
20
Example 2: Creating a CRM Record from a Form
A workflow that registers people in Dynamics using data from a web form:
Webhook → Transform → Create Account → Send Message (Slack)
Create Record settings:
- Entity Name:
leads - Data (JSON): Fields matched with
/from the previous step.
Example 3: CRM Query Chatbot
A chatbot that enables sales teams to query CRM data using natural language:
Text Input → LLM (convert query to OData) → Query Record → LLM (respond) → Text Output
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Client Secret has expired | Create a new Client Secret in Azure and update the connection |
| 403 Forbidden | Application user not assigned a role | Assign a security role to Application User in Dynamics 365 |
| 404 Not Found | Incorrect entity name or Record ID | Make sure you entered the entity name in the plural (accounts, not account) |
| Resource not found for the segment | Incorrect Org URL or API Type | Check the Org URL and API Type selection |
| Invalid filter clause | OData filter syntax is incorrect | Write the filter expression according to the OData standard |
| AADSTS7000215 | Client Secret was copied incorrectly | Ensure that the Secret is the correct value in the Value column |
| Admin consent required | API permission not approved | Click the Grant admin consent button in Azure |
Notes
- Entity names in the API are plural:
accountsnotaccount,contactsnotcontact. - The Client Secret has an expiration date. Remember to renew it and update your SkyStudio connection before it expires.
- The API Type selection depends on your environment: Dataverse for customer relations (Sales, Customer Service), and Finance & Operations for enterprise resource planning.
- The Delete Record operation is irreversible; test it in a test environment before using it in a production environment.
- For large datasets, limit the number of results by using the Top parameter; otherwise, the query may time out.
- It is safer to export FetchXML queries from the Dynamics 365 Advanced Find screen instead of writing them manually.
Freshdesk Query Node
The Freshdesk Query node enables integration with your Freshdesk support system within SkyStudio workflows. You can query, filter, and use support requests (tickets) in your workflow. The connection uses your Freshdesk portal address and API key.
Connection Setup and Management
To use the Freshdesk node, you need to obtain an API Key from your Freshdesk account.
Obtaining Freshdesk API Key
-
Log in to your Freshdesk account.
-
Click on your profile picture in the upper right corner and select Profile Settings.
-
Locate the Your API Key section on the right side of the page that opens.
-
Click the View API Key link; security verification may be requested.
-
Copy the displayed API key.
Note: The API Key is unique to each user and operates under that user's permissions. It is recommended to create a separate service user with restricted permissions for integration.
Finding the Portal URL
This is the address of your Freshdesk account. It appears in the address bar when you open Freshdesk in your browser:
https://yourcompany.freshdesk.com
Enter the complete address in the URL field.
Adding a Connection in SkyStudio
-
Click the chain icon (Application Connections) in the bottom toolbar of the workflow canvas.
-
Click the + New link button.
-
Select Freshdesk from the provider list (it's under the CRM & Support category).
-
Fill in the following fields:
| Field | Required | Explanation |
|---|---|---|
| Connection Name | Yes | A descriptive name (e.g., Company Freshdesk) |
| Who can use it | Yes | Only me / Workspace / Selected users / Integrations |
| Name | No | Identity tag |
| URL | Yes | Freshdesk portal address (e.g., https://sirket.freshdesk.com) |
| Username | Yes | API Key value (enter API Key in the username field) |
| Password | Yes | X is entered as a fixed value |
- Click the Add link button.
Note: The Freshdesk API uses HTTP Basic Authentication. This method uses an API Key instead of a username and an X character instead of a password. This is Freshdesk's standard authentication method.
Assigning the Connection to the Node
After adding the Freshdesk Query node to the canvas, select the saved link from the Application Connections dropdown menu in the right panel.
Operations
The Freshdesk Query node offers a single operation:
| Operation | Explanation |
|---|---|
| Freshdesk Query | Filters support requests through queries |
Freshdesk Query
Freshdesk searches for support requests using filters such as status, priority, date, and customer.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Freshdesk connection to be used |
| Query | No | Filter query (Freshdesk query syntax) |
| Status | No | Request status filter |
| Priority | No | Priority filter |
| Page Number | No | Page number for pagination (default: 1) |
| Page Size | No | Number of records to return per page |
Status Codes
| Code | Status |
|---|---|
| 2 | Open |
| 3 | Pending |
| 4 | Resolved |
| 5 | Closed |
Priority Codes
| Code | Priority |
|---|---|
| 1 | Low |
| 2 | Medium |
| 3 | High |
| 4 | Urgent |
Query Examples
| Query | Explanation |
|---|---|
| status:2 | Open requests |
| priority:4 | Urgent requests |
| status:2 AND priority:4 | Open and urgent requests |
| created_at:>'2026-08-01' | Requests created after August 1st |
| agent_id:12345 | Requests assigned to a specific agent |
Sample Output
{
"results": [
{
"id": 4521,
"subject": "I can't log in",
"status": 2,
"priority": 3,
"requester_id": 88012,
"created_at": "2026-08-10T09:14:00Z",
"updated_at": "2026-08-11T11:02:00Z"
}
],
"total": 37
}
Quick Start Examples
Example 1: Daily Open Demand Report
A workflow that summarizes open support requests and sends them to the team leader:
Webhook (Every morning) → Freshdesk Query → LLM (in summary) → Send Message (Slack)
Freshdesk Query settings:
- Query:
status:2 - Page Size: 100
Example 2: Urgent Request Alert
A workflow that instantly notifies the team of urgent priority requests:
Webhook → Freshdesk Query → If-Else Condition → Send Message (Slack)
Freshdesk Query settings:
- Query:
status:2 AND priority:4
Example 3: Jira Mission from Support Request
The workflow that forwards technical support requests to Jira:
Freshdesk Query → LLM (Classify) → If-Else Condition → Create Issue (Jira)
Example 4: Monthly Support Analysis
Workflow analyzing monthly support performance:
Webhook (Month 1st) → Freshdesk Query → Data Analysis (Python) → Create Graphs → Artifacts → Send Mail
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | API Key is incorrect or Password field is wrong | Make sure you enter API Key in Username field and X in Password field |
| 403 Forbidden | User lacks permission | Check that the user has permission to view requests in Freshdesk |
| 404 Not Found | Portal URL is incorrect | Enter the URL in the format https://sirket.freshdesk.com |
| Returning empty results | Filter is too narrow | Empty the query field and try again |
| Invalid query format | Query syntax is incorrect | Enter the field name and value in the format field:value |
| 429 Too Many Requests | Hourly request limit exceeded | Increase page size to reduce request count |
Notes
- The Freshdesk API uses Basic Authentication: The API Key is entered in the Username field, and
X** is entered in the Password field. - The API Key is unique to each user and operates under that user's permissions; a separate service user is recommended for integration.
- Freshdesk applies an hourly request limit; the limit varies depending on your package. For large queries, reduce the number of requests by increasing the page size.
- Status and priority values are numerical codes; use codes instead of text (not
status:2,status:open). - Date filters use the format
YYYY-MM-DD. - This node only handles queries; for creating or updating requests, you can send requests directly to the Freshdesk API using the HTTP Call node.
Paraşüt Node
The Parachute node enables integration with your Parachute accounting software in SkyStudio workflows. You can list and create customers, manage purchase invoices, record payments, list accounts, and run natural language queries with the Parachute AI Assistant. The Parachute API application (Client ID / Client Secret) is used for the connection.
Connection Setup and Management
To use the Parachute node, you need to create an API application from your Parachute account.
Obtaining Parachute API Information
-
Log in to Parachute and go to Settings from the account menu in the upper right corner.
-
Click on the Integrations → API tab.
-
Click the Create New Application button.
-
Give the application a name and save it.
-
The following values are displayed for the created application:
| Value | Description |
|---|---|
| Client ID | Application ID |
| Client Secret | Application secret key |
- Copy both values and store them in a safe place.
Note: API access is offered in certain Paraşüt packages. If you don't see the Integrations → API menu, a package upgrade may be required; please contact the Paraşüt support team.
Finding the Company ID
When you log in to Parachute, the URL in the address bar is in this format:
https://uygulama.parasut.com/123456/satislar
The number 123456 here is your Company ID.
User Information
The Parachute connection uses API application information as well as a Parachute user's email and password. This user must have access authorization to the relevant company.
Note: It is recommended to create a separate service user for integration. This ensures that the integration is not disrupted when the personal account password is changed.
Adding a Connection in SkyStudio
-
Click the chain icon (Application Connections) in the bottom toolbar of the workflow canvas.
-
Click the + New link button.
-
Select Parachute from the provider list (it's under the CRM & Support category).
-
Fill in the following fields:
| Field | Required | Explanation |
|---|---|---|
| Connection Name | Yes | A descriptive name (e.g., Company Parachute) |
| Who can use it | Yes | Only me / Workspace / Selected users / Integrations |
| Name | No | Identity tag |
| Client ID | Yes | Client ID value of the Parachute API application |
| Client Secret | Yes | Client Secret value of the Parachute API application |
| Username (Email) | Yes | Parachute user email address |
| Password | Yes | Parachute user password |
| Company ID | Yes | Company number obtained from the URL (e.g., 123456) |
- Click the Add link button.
Note: Instead of filling in all the fields individually, you can click the "Edit as Raw JSON" button to paste the configuration as JSON.
Assigning the Connection to the Node
After adding the parachute node to the canvas, select the saved link from the Application Connections drop-down menu in the right panel.
Operations
The parachute knot offers 13 operations:
| Operation | Category | Description |
|---|---|---|
| List People | Featured | Lists current people (customers/suppliers) |
| List Purchase Invoices | Featured | Lists purchase invoices in a filtered manner |
| Create Purchase Invoice (Basic) | Featured | Creates a simple purchase invoice with a single item |
| Add Payment | Featured | Records a payment to an invoice |
| Parachute AI Assistant | Featured | Queries Parachute data using natural language queries |
| Profile Information | Standard | Retrieves profile information of the affiliated company |
| Person Details | Standard | Retrieves details of a single current person with an ID |
| Create Person | Standard | Creates a new current person (customer/supplier) |
| Purchase Invoice Details | Standard | Retrieves the details of a single purchase invoice with an ID |
| Create Purchase Invoice (Detailed) | Standard | Creates a multi-item, detailed purchase invoice |
| Update Purchase Invoice | Standard | Updates an existing purchase invoice |
| Delete Purchase Invoice | Standard | Deletes a purchase invoice |
| List Accounts | Standard | Lists cash and bank accounts |
List People
This lists the current contacts (customers and suppliers) in Paraşüt. It is used to find their contact IDs.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Filter | No | Filter by address, email, or tax number |
| Page Number | No | Page number for pagination (default: 1) |
| Page Size | No | Number of records to return per page |
Sample Output
{
"data": [
{
"id": "1234567",
"name": "Sample Supplier Ltd. Co.",
"email": "muhasebe@tedarikci.com",
"tax_number": "1234567890",
"account_type": "supplier",
"balance": -15000.00
}
],
"meta": { "total_count": 148, "current_page": 1 }
}
List Purchase Invoices
It lists purchase invoices by date range and status filter.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Start Date | No | Filter start date (e.g., 2026-01-01) |
| Expiration Date | No | Filter expiration date (e.g., 2026-01-31) |
| Status | No | Invoice status (paid / unpaid / partial) |
| Page Number | No | Page number for pagination |
| Page Size | No | Number of records to return per page |
Sample Output
{
"data": [
{
"id": "9876543",
"issue_date": "2026-01-15",
"due_date": "2026-02-15",
"net_total": 12500.00,
"gross_total": 15000.00,
"remaining": 15000.00,
"payment_status": "unpaid"
}
]
}
Generate Purchase Invoice (Basic)
It creates a simple, single-item purchase invoice. It is used for quick invoice entry.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Customer ID | Yes | Supplier ID to which the invoice will be issued |
| Invoice Date | Yes | Invoice date (YYYY-MM-DD) |
| Due Date | No | Payment due date (YYYY-MM-DD) |
| Description | No | Invoice description |
| Amount | Yes | Invoice amount (excluding VAT) |
| VAT Rate | No | VAT percentage (e.g., 20) |
Usage Example
- Account ID:
1234567 - Invoice Date:
2026-08-11 - Expiration Date:
2026-09-11 - Description:
Consulting service for the month of August - Amount: 10000
- VAT Rate: 20%
Add Payment
It adds a payment entry to an existing invoice. It reduces the remaining amount on the invoice.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Invoice ID | Yes | The ID of the invoice to be paid |
| Account ID | Yes | ID of the cash/bank account from which the payment was made |
| Amount | Yes | Payment amount |
| Date | Yes | Payment date (YYYY-MM-DD) |
| Description | No | Payment description |
Note: You can find the Account ID value using the List Accounts operation.
Parachute AI Assistant
Parachute queries data using natural language. It is used to query accounting data without requiring technical knowledge.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Query | Yes | Parachute query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "List the overdue and unpaid invoices for this month"
System Prompt: "Sort the results by amount and display them in Turkish Lira format."
Profile Information
It returns the profile information of the parachute company you are connected with. It can also be used to test that the connection is working correctly.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
Person Details
It retrieves all the details (balance, contact information, tax information) of a single customer using their ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Person ID | Yes | Current person's ID |
Create Person
It creates a new current entity (customer or supplier).
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Name / Title | Yes | Person or company title |
| Customer Type | Yes | customer or supplier |
| No | Contact email address | |
| Phone | No | Contact phone |
| Tax Office | No | Tax office name |
| Tax Number | No | Tax identification number or Turkish Republic identity number |
| Address | No | Billing address |
Purchase Invoice Details
It retrieves all the details (items, payments, balance) of a single purchase invoice using the ID.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Invoice ID | Yes | Purchase invoice ID |
Generate Purchase Invoice (Detailed)
It creates a detailed purchase invoice containing multiple items, with separate VAT and discounts defined for each item.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Customer ID | Yes | Supplier ID to which the invoice will be issued |
| Invoice Date | Yes | Invoice issuance date |
| Due Date | No | Payment due date |
| Items (JSON) | Yes | Invoice item list (in JSON format) |
| Currency | No | Billing currency (default: TRL) |
| Description | No | Invoice description |
Items JSON Example
[
{
"description": "Consulting service",
"quantity": 1,
"unit_price": 10000,
"vat_rate": 20
},
{
"description": "License fee",
"quantity": 5,
"unit_price": 800,
"vat_rate": 20
}
]
Update Purchase Invoice
Updates the information of an existing purchase invoice.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Invoice ID | Yes | Invoice ID to be updated |
| Fields to Update (JSON) | Yes | Fields to be changed |
Note: Some fields cannot be updated on invoices that have already been paid.
Delete Purchase Invoice
It deletes the specified purchase invoice.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Invoice ID | Yes | Invoice ID to be deleted |
Note: Deletion is irreversible and will affect accounting records. Invoices with existing payment records cannot be deleted.
List Accounts
It lists cash and bank accounts. It is used to find the Account ID values required for the Add Payment operation.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Parachute connection to be used |
| Page Number | No | Page number for pagination |
| Page Size | No | Number of records to return per page |
Sample Output
{
"data": [
{ "id": "111222", "name": "Central Vault", "currency": "TRL", "balance": 45000.00 },
{ "id": "111333", "name": "Ziraat Bankası TL", "currency": "TRL", "balance": 320000.00 }
]
}
Quick Start Examples
Example 1: Reminder for Upcoming Bill Due Dates
A workflow that notifies Slack of invoices due in 3 days:
Webhook (Every morning) → List Purchase Invoices → LLM (filter and summarize) → Send Message (Slack)
Settings for Listing Purchase Invoices:
- Status: Unpaid
- End Date:
{{today_plus_3}}
Example 2: Saving an Invoice Received via Email
The workflow that reads the incoming invoice email and saves it to Paraşüt:
Mail Search (Outlook) → File Entry → Data Analysis (extract invoice information) → Generate Purchase Invoice (Basic)
Example 3: Accounting Query Chatbot
A chatbot that allows managers to query accounting data using natural language:
Text Input → Parachute AI Assistant → Text Output
Parachute AI Assistant settings:
- Query:
{{input.text}} - System Prompt:
"You are the company's accounting assistant. Enter the amounts in TL format and specify the source invoice numbers."
Example 4: Monthly Supplier Spending Report
Workflow reporting monthly supplier-based expenses:
Webhook (1st of the Month) → List Purchase Invoices → Data Analysis (grouping) → Artifact (report) → Send Email
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Client ID/Secret or user password is incorrect | Check the information in Parachute Settings → Integrations → API section |
| 403 Forbidden | User does not have permission to access the company | Verify that the user is authorized to access the relevant company on Parachute |
| 404 Not Found | Company ID is incorrect | Enter the number from the Parachute URL into the Company ID field |
| 422 Unprocessable Entity | Required field missing or formatted incorrectly | Check that date fields are in YYYY-MM-DD format |
| Customer not found | Invalid Customer ID | Find the correct ID using List People |
| Invoice could not be deleted | Payment record has been processed for the invoice | Delete the payment record first, then delete the invoice |
| Rate limit exceeded | Too many requests sent | Add delays between requests, use pagination |
Notes
- Your Company ID is the number in the URL in the address bar when you log in to Paraşüt.
- It is recommended that you define a separate service user instead of a personal account for integration; this way, password changes will not disrupt the integration.
- Date fields should be entered in the format
YYYY-MM-DD(e.g.,2026-08-11). - To perform the Add Payment operation, the Account ID must first be obtained using List Accounts.
- The Delete Purchase Invoice and Update Purchase Invoice operations affect accounting records; use them carefully in a production environment.
- Use the Create Purchase Invoice (Basic) version for simple invoices, and the Detailed version for multi-item invoices.
- API access is offered in certain Paraşüt packages; if you don't see the API section in the menu, a package upgrade may be required.
Fireflies Node
The Fireflies node enables integration with the Fireflies.ai meeting recording and transcript platform within SkyStudio workflows. You can read meeting transcripts, access summaries and action items, search transcripts, and upload audio files. A Fireflies API Key is used for the connection.
Connection Setup and Management
To use the Fireflies node, you need to obtain an API Key from your Fireflies account and add it to SkyStudio.
🎬 Click here to watch the video → How to set up Fireflies connection?
Obtaining Fireflies API Key
-
Go to fireflies.ai.
-
Go to Settings from the profile menu in the bottom left corner or from the top menu.
-
Click on Integrations in the left menu.
-
Select the Fireflies API.
-
Click the Get API Key button.
-
Copy the generated API Key.
Note: Keep your API Key in a safe place. You can always return to the Fireflies API page to view your key.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select Fireflies as your provider.
-
Fill in the following fields:
| Area | Description |
|---|---|
| Link Name | A descriptive name (e.g., Company Fireflies) |
| API Key | Key obtained from the Fireflies dashboard → API page |
- Click the Save button.
Assigning the Connection to the Node
After adding the Fireflies node to the canvas, select the saved link from the Application Connections drop-down menu in the right panel.
Operations
The Fireflies node offers 9 operations:
| Operation | Category | Description |
|---|---|---|
| List Transcripts | Featured | Lists meeting transcripts from the account sorted by date |
| Transcript Details | Featured | Retrieves the full content of a specific transcript |
| Meeting Summary | Featured | Retrieves an AI-generated summary of a meeting |
| Get Action Items | Featured | Lists action items derived from a meeting |
| Search Transcripts | Featured | Searches all transcripts by keyword |
| Fireflies AI Assistant | Featured | Queries Fireflies data using natural language queries |
| User Information | Standard | Retrieves user information for the linked account |
| Get Participants | Standard | Retrieves the participant list of a meeting |
| Upload Audio File | Standard | Creates a transcript by uploading an external audio file to Fireflies |
List Transcripts
Lists meeting transcripts from the account, sorted by date range and pagination options.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Limit | No | Maximum number of transcripts to return |
| Skip | No | Number of records to skip (for pagination, e.g., 10) |
| From Date | No | Start date (e.g., 2024-06-01) |
| To Date | No | End date (e.g., 2024-06-30) |
Sample Output
{
"transcripts": [
{
"id": "abc123",
"title": "Sprint Review Meeting",
"date": "2024-06-15T10:00:00Z",
"duration": 3600,
"participants": ["ahmet@company.com", "ayse@company.com"]
}
]
}
Transcript Details
It retrieves the complete transcript of a specific meeting (speaker-based dialogue text).
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Transcript ID | Yes | The ID of the transcript whose details will be retrieved |
How to Find Transcript ID?
Use the id field in the output of the List Transcripts operation. It will also appear in the URL when you open a transcript in the Fireflies web interface.
Meeting Summary
This retrieves the meeting summary automatically generated by Fireflies using AI. It's used to quickly summarize long meetings.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Transcript ID | Yes | ID of the transcript to be summarized |
Sample Output
{
"summary": {
"overview": "Team pace and technical debt issues were discussed at the Sprint 23 retrospective meeting...",
"action_items": ["Technical debt plan will be prepared", "Performance tests will be run"],
"keywords": ["sprint", "retrospective", "technical debt"]
}
}
Get Action Items
This lists the action items that Fireflies automatically extracts from a meeting transcript.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Transcript ID | Yes | Action items will be brought in. Transcript ID |
Sample Output
{
"action_items": [
{
"text": "Ahmet will prepare the design documentation",
"assignee": "ahmet@company.com",
"due_date": null
}
]
}
Search in Transcripts
It searches all transcripts using keywords. It is used to find out which meeting a specific conversation took place in.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Search Query | Yes | Keyword or phrase to search for |
| Limit | No | Maximum number of results to return |
Fireflies AI Assistant
Fireflies queries data using natural language. You can write free-text queries like "get the title of the last meeting" as shown in the video.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Query | Yes | Fireflies query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "Get the title of my last meeting"
System Prompt: "Only consider meetings from the last 7 days. Respond in Turkish."
User Information
Returns the user profile information for the linked Fireflies account.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
Get Participants
Returns the list of participants (names and email addresses) for a specific meeting.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Transcript ID | Yes | The ID of the transcript to be brought by the participants |
Upload Audio File
Sending the URL of an external audio or video file to Fireflies initiates automatic transcript generation.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Fireflies connection to use |
| Audio URL | Yes | The accessible public URL of the audio file (mp3, mp4, m4a, wav, etc.) |
| Meeting Title | Yes | Title of the transcript to be generated |
| Meeting Link (optional) | No | Relevant meeting link (Zoom, Teams, Meet URL) |
Note: The audio file URL must be accessible to Fireflies servers. Private or authentication-required URLs will not work.
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | API Key invalid | Check API Key on Fireflies dashboard → API page |
| 404 Not Found | Invalid Transcript ID | Find the correct ID using the "List Transcripts" operation |
| Empty transcript list | No records found within the specified date range | Expand the From Date / To Date range |
| Audio upload failed | URL inaccessible | Check if the audio file is publicly accessible |
| Summary is empty | Meeting not yet processed | It may take Fireflies a few minutes to generate the transcript; run the workflow with a delay |
Notes
- The Fireflies API uses the GraphQL API to access meeting recordings. Transcript IDs can be retrieved from the List Transcripts operation.
- Meeting summaries and action items are automatically generated by Fireflies' AI; results vary depending on the meeting content.
- It may take a few minutes for files uploaded via the Upload Audio File operation to be transcribed. Add a delay to the workflow to check when the transcript is ready.
- API access may be limited in the Fireflies free plan. For heavy usage, you may need to upgrade to a Pro or Business plan.
- Remember to update the link in SkyStudio when your API Key needs to be renewed.
GitHub Node
The GitHub node enables integration with your GitHub repositories within SkyStudio workflows. You can manage issues and pull requests, access file contents, trigger workflows, and create releases.
Connection Setup and Management
To use the GitHub node, you need to create a Personal Access Token in your GitHub account. OAuth or App Registration is not required; only the token and default owner information are needed.
🎬 Click here to watch the video → How to set up a GitHub link?
Creating a GitHub Personal Access Token
-
Log in to your GitHub account and click on your profile picture in the upper right corner.
-
Go to Settings.
-
Scroll down the left menu to find Developer settings.
-
Click on Personal access tokens → Fine-grained tokens.
-
Click the Generate new token button.
-
Give the token a Name.
-
Optionally, add a Description and Expiration date.
-
Select the relevant user or organization as the Resource owner.
-
In the Repository access section, select the repositories you wish to grant access to.
-
Add the required permissions in the Permissions section:
| Permission | Explanation |
|---|---|
| Contents → Read & Write | For reading and writing files |
| Issues → Read & Write | Issues for reading, creating and updating |
| Pull requests → Read | Pull Request for listing |
| Actions → Write | To trigger the workflow |
| Metadata → Read | To access repository information |
| Releases → Read & Write | Release for listing and creation |
- Click the Generate token button and copy the generated token (starting with
ghp_).
Note: The token is only fully displayed at the time of its creation. If you lose it, you will need to recreate it.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the left-hand menu of SkyStudio.
-
Click the Add New Connection button.
-
Select GitHub as the provider.
-
Fill in the following fields:
| Area | Description |
|---|---|
| Link Name | A descriptive name (e.g., Company GitHub) |
| Personal Access Token | The ghp_... token you created |
| Default Owner (user/org) | Default GitHub username or organization name (e.g., myorg or myusername) |
- Click the Save button.
Assigning the Connection to the Node
After adding the GitHub node to the canvas, select the link you saved from the Application Connections dropdown menu in the right panel.
Note: The Default Owner field is used by default when the Owner field in operations is left blank. You can create separate links for multiple organizations.
Operations
The GitHub node offers 15 operations:
| Operation | Category | Description |
|---|---|---|
| Repository List | Featured | Lists the repositories of a user or organization |
| Issue List | Featured | Lists issues in the repository |
| List Pull Requests | Featured | Lists Pull Requests in the Repository |
| Trigger Workflow | Featured | Triggers the GitHub Actions workflow |
| GitHub AI Assistant | Featured | Queries GitHub data using natural language queries |
| Repository Details | Standard | Retrieves detailed information for a repository |
| Create Issue | Standard | Creates a new issue |
| Update Issue | Standard | Updates an existing issue |
| Add Comment | Standard | Adds a comment to an Issue or PR |
| Commit List | Standard | Lists the commit history in the repository |
| List Branches | Standard | Lists branches in the repository |
| Retrieve File Contents | Standard | Retrieves the contents of a file in the repository |
| Create/Update File | Standard | Creates a file or updates an existing file |
| Release List | Standard | Lists releases in the repository |
| Create Release | Standard | Creates a new release |
Repository Listing
Lists the repositories owned by a user or organization.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner (user/org) | No | Name of the user or organization to list (empty = Default Owner) |
| Type | No | Repository type: all, public, private, forks, sources |
| Limit | No | Maximum number of repositories to rotate |
Issue List
Lists the issues in the repository in a filtered manner.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner (empty = Default Owner) |
| Repository | Yes | Repository name (e.g., my-repo) |
| State | No | Issue status: open, closed, all |
| Labels (CSV) | No | Labels to filter (comma separated, e.g., bug, enhancement) |
| Assignee | No | Assigned person's username |
| Limit | No | Maximum number of issues to rotate |
Pull Request List
Lists the Pull Requests in the Repository.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner (empty = Default Owner) |
| Repository | Yes | Repository name |
| State | No | PR status: open, closed, all |
| Base Branch | No | Target branch (e.g., main) |
| Limit | No | Maximum number of PRs to be rotated |
Trigger Workflow
It triggers a workflow defined in GitHub Actions using the workflow_dispatch event.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Workflow ID or Filename | Yes | Workflow ID or YAML filename (e.g., deploy.yml) |
| Branch / Tag | No | Branch or tag to trigger (e.g., main) |
| Inputs (JSON) | No | Input parameters to be sent to the workflow (in JSON format) |
GitHub AI Assistant
It queries GitHub data using natural language. As shown in the video, you can retrieve repository and issue information using a free-text query.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Query | Yes | GitHub query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "List the most recent open bug issues"
System Prompt: "Retrieve only open issues tagged with 'bug'. Write a summary in Turkish."
Repository Details
Returns detailed information (number of stars, language, description, etc.) for a specific repository.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
Create Issue
Creates a new issue in the specified repository.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Title | Yes | Issue title |
| Body | No | Issue description (Supports Markdown) |
| Labels (CSV) | No | Tags to add (e.g., bug, enhancement) |
| Assignees (CSV) | No | Usernames to be assigned (e.g., user1, user2) |
Issue Update
Updates the title, description, status, or tags of an existing issue.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Issue Number | Yes | Issue number to be updated |
| Title | No | New title |
| Body | No | New statement |
| State | No | New status: open or closed |
| Labels (CSV) | No | Updated labels |
| Assignees (CSV) | No | Updated assignees |
Add Comment
Adds a comment to an issue or pull request.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Issue Number | Yes | Issue or PR number to add comment to |
| Body | Yes | Comment content (Supports Markdown) |
Commit List
Lists the commit history in the repository.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Branch | No | Branch name (empty = default branch) |
| Limit | No | Maximum number of commits to return |
Branch List
Lists all branches in the repository.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Limit | No | Maximum number of branches to return |
Get File Contents
Retrieves the contents of a specific file in the repository.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| File Path | Yes | The path to the file within the repository (e.g., src/main.py) |
| Branch / Ref | No | Branch or commit SHA (empty = default branch) |
Create / Update File
It adds new files to the repository or updates existing files and automatically creates commits.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| File Path | Yes | The path to the file to be created or updated |
| Content | Yes | File content (plain text or base64) |
| Commit Message | Yes | Commit message (e.g., chore: update config) |
| Branch | No | Target branch (empty = default branch) |
Release List
Lists the releases in the repository.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Limit | No | Maximum number of releases to spin |
Create Release
It creates a new GitHub release.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | GitHub link to use |
| Owner | No | Repository owner |
| Repository | Yes | Repository name |
| Tag Name | Yes | Release tag (e.g. v1.2.0) |
| Name | No | Release title (e.g., v1.2.0 - New Features) |
| Body | No | Release notes (Markdown supported) |
| Draft | No | If enabled, the release will be saved as a draft |
| Prerelease | No | Marked as pre-release if enabled |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Token is invalid or expired | Create a new Fine-grained token from GitHub Settings |
| 403 Forbidden | Token lacks the necessary permission | Check token permissions; add the required permission |
| 404 Not Found | Repository not found or inaccessible | Check that the Owner and Repository names are correct |
| 422 Unprocessable Entity | Invalid field value (e.g., non-existent label) | Verify label, branch, or username on GitHub |
| Repository listing is empty | Owner entered incorrectly | Check the default owner setting or the owner field |
Notes
- If the Owner field is left blank, the Default Owner value in the link will be used. To access a different organization, explicitly fill in the Owner field.
- Fine-grained tokens can be created for a specific repository or all repositories. Be selective if you only intend to work with specific repositories.
- The Create/Update File operation automatically retrieves the last SHA value of a file when updating it; no manual SHA entry is required.
- The default validity period for this token is 90 days (Fine-grained tokens). Renewing before expiration is recommended.
- The Labels (CSV) and Assignees (CSV) fields accept comma-separated values; JSON formatting is not required (e.g.,
bug,wontfix).
Cursor Node
The Cursor node enables integration with the Cursor AI code editor platform within SkyStudio workflows. You can list team members, query spending and usage data, generate analytical reports, and query the Cursor AI assistant using natural language. The Cursor API Key is used for connection.
Connection Setup and Management
To use the cursor node, you need to obtain an API Key from your cursor account and add it to SkyStudio.
🎬 Click here to watch the video → How to set up a cursor connection?
Obtaining Cursor API Key
-
Open the Cursor application.
-
Click on Dashboard from the top menu.
-
Go to the API Key section at the bottom of the dashboard.
-
Click the New API Key button.
-
Give the API Key a name and click the Save button.
-
Copy the generated API Key (in the format
key_xxx...).
Note: The API Key is only visible when it is generated. If you forget to save it, you will need to generate a new key.
Adding a Connection in SkyStudio
-
Go to the Application Connections section from the SkyStudio top menu.
-
Click the New Link button.
-
Select Cursor as the provider.
-
Fill in the following fields:
| Area | Description |
|---|---|
| Link Name | A descriptive name (e.g., Company Cursor) |
| API Key | The API Key you received from the Cursor Dashboard (in key_xxx... format) |
- Click the Save button.
Assigning the Connection to the Node
After adding the cursor node to the canvas, select the saved link from the Application Connections drop-down menu in the right panel.
Operations
The cursor node offers 7 operations:
| Operation | Category | Description |
|---|---|---|
| Fetch Team Members | Featured | Lists all users in the Cursor team |
| Spending Data | Featured | Retrieves user-based spending data with pagination support |
| Daily Usage | Featured | Returns daily usage statistics for a specific date range |
| Analytics (Team) | Featured | Retrieves team-wide analytics metrics filtered by date and user |
| Cursor AI Assistant | Featured | Queries Cursor data using natural language queries |
| Usage Events (Details) | Standard | Lists detailed usage events by user |
| Analytics (Person-Based) | Standard | Retrieves individual user analytics metrics with a date filter |
Get Team Members
This list includes all team members (name, email, role information) in your cursor account.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Cursor connection to be used |
Sample Output
{
"members": [
{
"id": "user_abc123",
"email": "ahmet@sirket.com",
"name": "Ahmet Yılmaz",
"role": "member"
},
{
"id": "user_def456",
"email": "ayse@sirket.com",
"name": "Ayşe Kaya",
"role": "admin"
}
]
}
Spending Data
It lists spending data by user. You can filter by a specific user and apply sorting and pagination.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Cursor connection to be used |
| User Filter | No | User information to filter (e.g., user email) |
| Sorting | No | Sorting direction of results |
| Page Number | No | Page number for pagination (default: 1) |
| Page Size | No | Number of records to return per page |
Sample Output
{
"data": [
{
"user_email": "ahmet@company.com",
"total_cost": 12.50,
"currency": "USD",
"period": "2024-06"
}
],
"total": 15,
"page": 1
}
Daily Usage
Returns daily cursor usage statistics for the specified date range. Used to track how much usage occurred on each day.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Cursor connection to be used |
| Start Date | No | Start date (e.g., 2024-06-01) |
| End Date | No | End date (e.g., 2024-06-30) |
| Page Number | No | Page number for pagination |
| Page Size | No | Number of records to return per page |
Sample Output
{
"usage": [
{
"date": "2024-06-15",
"total_requests": 342,
"total_tokens": 128500,
"active_users": 8
}
]
}
Analytics (Team)
It retrieves analytical data for a specific metric across the team, using a date range and user filter.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Cursor connection to be used |
| Metric | No | Analytical metric to query (e.g., requests, tokens) |
| Start Date | No | Start date (e.g., 2024-06-01) |
| End Date | No | End date (e.g., 2024-06-30) |
| User Filter (CSV) | No | Comma-separated user email list (e.g., ahmet@company.com, ayse@company.com) |
| Page Number | No | Page number for pagination |
| Page Size | No | Number of records to return per page |
Cursor AI Assistant
It queries Cursor data using natural language. As shown in the video, you can write free-text queries such as "show the top 5 people who used Cursor the most this month".
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Cursor connection to be used |
| Query | Yes | Cursor query in natural language |
| System Prompt | No | System instruction that customizes the behavior of the AI assistant |
Usage Example
Query: "Show the top 5 people who used Cursor the most this month"
System Prompt: "Use only this month's data. Present the results in Turkish and sorted by usage volume."
Usage Events (Details)
It lists detailed cursor usage events on a user-by-user basis. It is used to examine the activities of a specific user.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Cursor connection to be used |
| User Email (optional) | No | Email address of the user whose events will be filtered |
| Page Number | No | Page number for pagination |
| Page Size | No | Number of records to return per page |
Analytics (Person-Based)
It retrieves analytical metrics for individual users by date range and user filtering. It is used for comparing individual performance and usage within a team.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | Cursor connection to be used |
| Metric | No | Analytical metric to query |
| Start Date | No | Start date (e.g., 2024-06-01) |
| End Date | No | End date (e.g., 2024-06-30) |
| User Filter (CSV) | No | Comma-separated user email list |
| Page Number | No | Page number for pagination |
| Page Size | No | Number of records to return per page |
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | API Key is invalid or expired | Create a new key from the Cursor Dashboard → API Key section and update the SkyStudio connection |
| 403 Forbidden | API Key permissions are insufficient | Ensure you have administrator permissions on the cursor account |
| Returning empty data | No records found in the date range | Expand the Start Date / End Date range |
| 404 Not Found | User filter is incorrect | Check that the email address is registered with the Cursor team |
| AI Assistant is not responding | Query field is empty | Enter a valid text query in the Query field |
Notes
- The Cursor API Key is in the format
key_xxx.... It is only displayed once when generated from the Dashboard; keep it in a safe place. - In the Analytics (Team) and Analytics (Person-Based) operations, the User Filter field accepts multiple email addresses separated by commas (e.g.,
a@company.com, b@company.com). - The Cursor AI Assistant operation works similarly to the Fireflies AI Assistant; it interprets team usage data using natural language queries.
- If a Start Date and End Date are not specified in the Daily Usage and Expenditure Data operations, the API may return all historical data; use pagination parameters for large teams.
- When you need to renew your API Key, remember to also update the link in SkyStudio.
Excel Node
The Excel node allows you to read Excel files (.xlsx, .xls) and convert their contents to structured data in SkyStudio workflows. You can import the file either as Base64 from a previous step in the workflow or directly as file input. This node requires no connection.
Connection Setup
The Excel node does not require an identity connection. Because the file comes directly from within the workflow, you don't need to connect to an external account.
After adding the node to the canvas, the "Application Connections" field will not appear in the right panel; you can fill in the parameters directly.
Note: If you want to import Excel files from SharePoint or Google Drive, first download the file using the relevant node, then attach the output to the Excel node.
Operations
Excel node offers 2 operations:
| Operation | Category | Description |
|---|---|---|
| Read Excel (Base64) | Featured | Reads Base64 encoded Excel content |
| Read Excel File | Standard | Reads Excel files received from the file input field |
Read Excel (Base64)
It reads the Excel content in Base64 format from the previous step of the workflow and converts the rows into structured data. It is used for Excel files received from email attachments or API responses.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Base64 Content | Yes | Base64 encoded Excel file content |
| Sheet Name | No | Page name to read (if left blank, only the first page will be read) |
| Header Row | No | Header row number (default: 1) |
| Range | No | Range of cells to read (e.g., A1:F100) |
| Skip Empty Rows | No | Skip empty rows |
Usage Example
To read the invoice attachment from Outlook:
- Click on Base64 Content:, press the
/key, and select the additional output of the Outlook node. - Sheet Name:
Invoices - Header Row:
1
Sample Output
{
"sheet_name": "Invoices",
"row_count": 3,
"columns": ["Date", "Company", "Amount", "VAT"],
"rows": [
{ "Date": "2026-08-01", "Company": "Örnek A.Ş.", "Amount": 12500, "VAT": 2500 },
{ "Date": "2026-08-03", "Company": "Test Ltd.", "Amount": 8400, "VAT": 1680 },
{ "Date": "2026-08-07", "Company": "Demo San.", "Amount": 31000, "VAT": 6200 }
]
}
Read Excel Files
It reads an Excel file from a File Input node or a file download node. It is used for flows where the user directly uploads a file.
Parameters
| Parameter | Required | Description |
|---|---|---|
| File | Yes | Excel file to read (selected with / in the previous step) |
| Sheet Name | No | Page name to read (if left blank, only the first page will be read) |
| Header Row | No | Header row number (default: 1) |
| Range | No | Cell range to read (e.g., A1:F100) |
| Skip Empty Rows | No | Skip empty rows |
Usage Example
To read the sales table uploaded by the user:
-
Add a File Input node to the stream.
-
Add the Read Excel (File) node and link it to File Entry.
-
Click on the File area, press the
/key, and select the File Entry output.
Using Cell Range
The Range parameter allows you to read only a specific portion of the page. This significantly improves performance with large files.
| Range Example | Description |
|---|---|
| A1:F100 | Area from A1 to F100 |
| A:D | All columns from A to D |
| A5:Z5 | Only row 5 |
| If left blank | All filled space on the page will be read |
Using the Header Row
In Excel files, data doesn't always start from row 1. If your file contains rows for logos, titles, or descriptions, set the Header Row value to the row containing the actual column headers.
| Status | Header Row Value |
|---|---|
| Column headings in the 1st row | 1 (default) |
| First 3 rows are logo/heading, column names are on the 4th row | 4 |
| No header line, direct data | 0 |
Note: If Header Row is set to 0, the columns will be named column_1, column_2, etc.
Quick Start Examples
Example 1: Analyzing the Uploaded Excel File
A workflow that analyzes the sales table uploaded by the user and generates a report:
File Input → Read Excel File → Data Analysis → Artifact (Report) → Text Output
Excel Read (File) settings:
- File: File Input output (selected with
/) - Skip Empty Rows: Open
Example 2: Processing an Excel File Attached to an Email
The workflow reads the Excel file attached to the incoming email and saves it to the database:
Search Mail (Outlook) → Read Excel (Base64) → Convert File to Table → Send Message (Slack)
Excel Reader (Base64) settings:
- Base64 Content: Outlook attachment output (selected with
/) - Sheet Name:
Page1
Example 3: Reporting from Excel in SharePoint
A workflow that reads the monthly file in SharePoint and sends a summary to the administrator:
Webhook (1st of the Month) → Download File (SharePoint) → Read Excel (File) → LLM (Summary) → Send Mail (Outlook)
Example 4: Creating Multiple Records from Excel
A workflow that creates a CRM record for each row in Excel:
File Input → Read Excel (File) → Transform → Create Record (Dynamics 365)
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| Sheet not found | Sheet name misspelled | Enter the sheet name exactly as it appears in Excel or leave it blank |
| Invalid file format | The file is not Excel or is corrupted | Verify that the file is a .xlsx or .xls |
| Invalid range | Cell range format is incorrect | Use the format A1:F100 |
| Returning an empty result | Header Row is incorrectly set | Check which row the column headers are on |
| Column names are in the format column_1 | Header Row is set to 0 | Set Header Row to the number of the header row |
| File too large | File size limit exceeded | Read only the required area with the Range parameter |
| Numbers appear as text | Cell format in Excel is text | Set cell format to number in Excel file |
Notes
- The Excel node does not require a connection; it processes the file directly within the workflow.
- Supported formats:
.xlsxand.xls. - If Sheet Name is left blank, the first page in the file will be read.
- To read multiple pages, add a separate Excel node for each page name.
- Using the Range parameter on large files significantly reduces processing time.
- In cells containing formulas, only the calculated result is read, not the formula itself.
- Date cells are read according to Excel's internal date format; if necessary, convert them to your desired format using the Transform node.
- To permanently store the data you've read, link the output to the File to Table or Save Data node.
Python Node
The Python node allows you to perform data analysis, forecasting, visualization, and machine learning by running Python code in the background within SkyStudio workflows. You can perform analysis without writing code using pre-built operations, or you can run your own Python code if you prefer. This node requires no connection.
Connection Setup
Python node does not require identity connection. The code runs in an isolated environment managed by SkyStudio; you don't need to connect to an external account.
After adding the node to the canvas, the "Application Connections" field will not appear in the right panel; you can fill in the parameters directly.
Note: The environment in which the Python node is running is closed to internet access. If you need to send a request to an external service, use the HTTP Call node.
Available Libraries
Built-in operations use the following libraries. You can also import these when writing your own code:
| Library | Area of use |
|---|---|
| pandas | Table data processing |
| numpy | Numerical computation |
| matplotlib | Graphic plotting |
| scikit-learn | Machine learning |
| scipy | Scientific calculation |
| statsmodels | Statistical modeling and time series |
Operations
Python's node program offers 8 operations:
| Operation | Category | Description |
|---|---|---|
| Data Analysis | Featured | Performs statistical analysis on data |
| Forecast | Featured | Generates future forecasts from time series data |
| Generate Chart | Featured | Generates visual charts from data |
| Clean Data | Featured | Cleans missing and erroneous data |
| Python AI Assistant | Featured | Generates and executes Python code from natural language requests |
| Classification (ML) | Standard | Trains a classification model with machine learning |
| Clustering (ML) | Standard | Groups data based on their similarities |
| Run Python Script | Standard | Runs your own custom Python code |
Data Analysis
It performs statistical analysis on the given tabular data. It calculates metrics such as mean, median, standard deviation, and correlation.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data | Yes | Data to be analyzed (selected with / from the previous step) |
| Analysis Type | No | Analysis type (summary statistics, correlation, distribution) |
| Columns | No | Columns to analyze (comma separated) |
| Group By | No | Column to be grouped |
Usage Example
To analyze sales data by product group:
- Data: Excel Read Output (selected with
/) - Analysis Type: Summary statistics
- Group By:
UrunGrubu
Sample Output
{
"summary": {
"Amount": { "mean": 15420.5, "median": 12000, "std": 8340.2, "min": 1200, "max": 48000 }
},
"group_stats": [
{ "UrunGrubu": "Yazılım", "count": 45, "total": 693922.5 },
{ "UrunGrubu": "Donanım", "count": 32, "total": 412600.0 }
]
}
Forecast
It generates future forecasts from historical time series data. It is used for sales forecasting, demand planning, and budget projection.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data | Yes | Time series data |
| Date Column | Yes | Column name containing date information |
| Value Column | Yes | Column for predicting the value |
| Periods | Yes | How many periods ahead will the forecast be made? |
| Frequency | No | Time interval (daily / weekly / monthly) |
Usage Example
To predict sales for the next 6 months:
- Date Column:
Date - Value Column:
Revenue - Periods:
6 - Frequency: monthly
Sample Output
{
"forecast": [
{ "date": "2026-09-01", "predicted": 182400, "lower": 165200, "upper": 199600 },
{ "date": "2026-10-01", "predicted": 191300, "lower": 171800, "upper": 210800 }
]
}
Note: For reliable predictions, it is recommended to provide at least 12–24 periods of historical data.
Create a Graph
It generates visual graphs from the data. These visuals can then be added to reports or sent via email in subsequent steps of the workflow.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data | Yes | Data to be graphed |
| Chart Type | Yes | Chart type (line / column / pie / scatter) |
| X Column | Yes | Column to be displayed on the horizontal axis |
| Y Column | Yes | Column to be displayed on the vertical axis |
| Title | No | Graphic title |
| Color | No | Graphic color |
Graphic Type Selection
| Graphic Type | When to use it |
|---|---|
| Line | To show change over time |
| Column (bar) | For comparison between categories |
| Pasta (pie) | To show the portions inside |
| Scatter | To show the relationship between two variables |
Clear Data
It fills in missing values, deletes duplicate rows, cleans up outliers, and corrects data types.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data | Yes | Data to be cleared |
| Drop Duplicates | No | Delete duplicate lines |
| Fill Missing | No | Method for filling in missing values (mean / median / zero / delete) |
| Remove Outliers | No | Remove outliers |
| Columns | No | Columns to be processed |
Usage Example
To clean the raw data before analysis:
- Drop Duplicates: Enabled
- Fill Missing: median
- Remove Outliers: Open
Note: Place the Data Cleanup node before the analysis and forecasting nodes. Dirty data significantly reduces forecasting accuracy.
Python AI Assistant
You type what you want to do in natural language; the assistant generates and runs the appropriate Python code. It's used to perform custom analyses without knowing how to code.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data | No | Data to be processed |
| Query | Yes | What you want done in natural language |
| System Prompt | No | System instruction that customizes the assistant's behavior |
Usage Example
Query: "Calculate the monthly growth rate for each region and list the top 3 fastest growing regions"
System Prompt: "Return the results as a table. Display percentages with two decimal places."
Classification (ML)
It trains a classification model with labeled data and generates predictions. It is used in scenarios such as customer churn prediction and demand categorization.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data | Yes | Training data |
| Target Column | Yes | Target column (label) to predict |
| Feature Columns | No | Feature columns to be used in the model |
| Model Type | No | Model type (decision tree / random forest / logistic regression) |
| Test Size | No | Test data ratio (default: 0.2) |
Sample Output
{
"accuracy": 0.87,
"precision": 0.84,
"recall": 0.89,
"feature_importance": [
{ "feature": "LastOrderDay", "importance": 0.42 },
{ "feature": "TotalExpenditure", "importance": 0.31 }
]
}
Clustering (ML)
It groups data based on their similarities. It is used for customer segmentation and product grouping.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data | Yes | Data to be clustered |
| Feature Columns | Yes | Columns to be used for clustering |
| Number of Clusters | No | Number of clusters to create |
| Algorithm | No | Clustering algorithm (K-Means / DBSCAN / Hierarchical) |
Note: If you don't know the number of clusters, leave the field blank; the algorithm will try to determine the appropriate number of clusters itself.
Run Python Script
It executes your own custom Python code. It's used for special operations that aren't covered by standard operations.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Code | Yes | Python code to execute |
| Input Data | No | Data to be passed to code |
| Timeout | No | Maximum operating time (seconds) |
Code Writing Rules
- You access the incoming data using the
input_datavariable. - You need to assign the result to the
outputvariable. - The code runs in an isolated environment; it has no file system or internet access.
Usage Example
import pandas as pd
df = pd.DataFrame(input_data)
# Total turnover by month
df['Date'] = pd.to_datetime(df['Date'])
result = df.groupby(df['Date'].dt.to_period('M'))['Amount'].sum()
output = result.reset_index().to_dict('records')
Quick Start Examples
Example 1: Sales Forecast Report
A workflow that predicts the next 6 months based on past sales and reports it graphically:
File Insert → Read Excel → Clear Data → Forecast → Create Chart → Artifact → Send Mail
Prediction settings:
- Date Column:
Date - Value Column:
Revenue - Periods:
6 - Frequency: monthly
Example 2: Customer Segmentation
A workflow that extracts customer segments from CRM data:
Query Records (Dynamics) → Clear Data → Clustering (ML) → Artifact (report) → Text Output
Clustering settings:
- Feature Columns:
TotalSpending,NumberOfOrders,LastOrderDay - Algorithm: K-Means
Example 3: Customer Churn Estimation
A workflow that predicts which customers are at risk of leaving:
Query Records (CRM) → Clear Data → Classify (ML) → LLM (interpret) → Send Message (Slack)
Example 4: Natural Language Analysis Chatbot
A chatbot that enables users to analyze data using natural language:
File Input → Read Excel → Python AI Assistant → Text Output
Python AI Assistant settings:
- Query:
{{input.text}} - System Prompt:
"Explain the results in Turkish and present them in a table if possible."
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| KeyError: 'column_name' | The specified column does not exist in the data | Type the column name exactly as it appears in Excel (case-sensitive) |
| Timeout exceeded | The code took too long | Reduce the data size or increase the Timeout value |
| ModuleNotFoundError | Unused library called | Use only supported libraries |
| Not enough data for forecast | Time series is too short | Please provide at least 12 periods of historical data |
| output is not defined | Code result not assigned | Add the line output = ... at the end of the code |
| Prediction results are meaningless | Data is not cleaned | Add a Data Clean node before prediction |
| ValueError: could not convert string to float | Text exists in the numeric column | Perform type correction using Clear Data |
Notes
- Python node does not require a connection; the code runs in an isolated environment managed by SkyStudio.
- The environment where the code runs has no internet access or file system access. Use the HTTP Call node for requests to the external service.
- In the Run Python Script operation, the incoming data is accessed using the
input_datavariable, and the result is accessed using theoutputvariable. - Running the Data Cleanup operation before analysis and forecasting significantly improves result quality.
- For forecasting operations, at least 12–24 periods of historical data are recommended.
- Column names are case-sensitive; they must be exactly the same as how they appear in Excel.
- If you don't know how to code, use the Python AI Assistant operation; it will generate the code itself from your natural language request.
- To convert the generated graphs into a report, link the output to the Artifact node.
REST API (Generic) Node
The REST API (Generic) node allows you to connect to any service that doesn't have a pre-defined node in SkyStudio. You define the service's endpoints once; after that, you can use them either with natural language or a direct call. This is the node you'll refer to when you need to work with an application that isn't on the list.
Connection Setup and Management
The REST API node operates with a configuration that includes the address of the service you will connect to and authentication information.
Prepare Before You Begin
Obtain the following information from the API documentation of the service you will be connecting to:
| Information | Explanation |
|---|---|
| Base URL | The root address of the API (e.g., https://api.servis.com/v1) |
| Authentication method | API Key, Bearer Token, Basic Auth or OAuth |
| Credential information | Key, token, or username/password |
| Endpoints | Paths and HTTP methods you will use |
Adding a Connection in SkyStudio
-
Click the chain icon (Application Connections) in the bottom toolbar of the workflow canvas.
-
Click the + New link button.
-
Select REST API (Generic) from the provider list (it is under the Other category).
-
Fill in the following fields:
| Field | Required | Explanation |
|---|---|---|
| Connection Name | Yes | A descriptive name (e.g., Shipping Tracking API) |
| Who can use it | Yes | Only me / Workspace / Selected users / Integrations |
| Name | No | Identity tag |
| Base URL | Yes | API root address |
| Auth Type | Yes | Authentication method |
| Token / API Key | Depending on the situation | Authentication value |
| Headers | No | Additional headers (JSON) to be sent with each request |
- Click the Add link button.
Note: Instead of entering complex configurations one by one, you can paste all the settings as JSON by clicking the "Edit as Raw JSON" button. This is the most practical way to prepare endpoint definitions.
Authentication Methods
| Method | How it works | When to use it |
|---|---|---|
| Bearer Token | The Authorization: Bearer <token> header is sent | Most modern APIs |
| API Key (Header) | The key will be sent in the header you specify | For services requiring a custom header such as X-API-Key |
| API Key (Query) | ?api_key=... is added to the end of the address | Simple services |
| Basic Auth | Username and password are base64 encoded | Legacy or enterprise services |
| None | No authentication | Public APIs |
Endpoint (Tool) Definition
The power of a REST API node comes from pre-defining the service endpoints. Each endpoint is registered as a "tool," and the node uses them.
For each endpoint, you define the following:
| Area | Description |
|---|---|
| name | Vehicle name (e.g., cargo_inquiry) |
| description | What it does — It's important for the AI assistant to choose the right tool |
| method | HTTP method (GET, POST, PUT, DELETE) |
| path | The path to be added to the base URL (e.g., /shipments/{id}) |
| parameters | Parameters accepted by the vehicle |
Example Configuration (Raw JSON)
{
"base_url": "https://api.kargofirmasi.com/v1",
"auth_type": "bearer",
"token": "YOUR_TOKEN_HERE",
"tools": [
{
"name": "kargo_sorgula",
"description": "Checkes the shipment status using the tracking number",
"method": "GET",
"path": "/shipments/{tracking_number}",
"parameters": {
"tracking_number": { "type": "string", "required": true }
}
},
{
"name": "kargo_olustur",
"description": "Creates a new shipping post",
"method": "POST",
"path": "/shipments",
"parameters": {
"receiver_name": { "type": "string", "required": true },
"address": { "type": "string", "required": true },
"weight": { "type": "number", "required": false }
}
}
]
}
Note: Please write the description carefully. In REST API (Natural Language) operations, the AI assistant decides which tool to call by looking at these descriptions.
Assigning the Connection to the Node
After adding the REST API node to the canvas, select the saved connection from the Application Connections dropdown menu in the right panel.
Operations
The REST API (Generic) node offers two operations:
| Operation | Explanation |
|---|---|
| REST API (Natural Language) | You ask a question in natural language; the assistant selects and calls the appropriate tool |
| REST API (Direct Call) | Calls the specified tool with fixed parameters |
REST API (Natural Language)
You ask a question in natural language. The assistant selects the appropriate tool from those defined in the ymap, fills in the parameters, makes the call, and responds by interpreting the result.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | REST API connection to be used |
| Query | Yes | Ask your question in natural language |
| System Prompt | No | System instruction that customizes the assistant's behavior |
Usage Example
Query: "What is the status of shipment number 1Z999AA10123456784?"
System Prompt: "Please provide your response in Turkish. Specify the shipping status and estimated delivery date."
The assistant selects the cargo_tracking tool from this request, enters the tracking number into the parameter, and summarizes the returned response in Turkish.
When to Use
- When free text comes from the user (chatbot scenarios)
- Which endpoint is called can be changed optionally.
- When the answer needs to be interpreted and summarized
REST API (Direct Call)
It calls a specific tool in the configuration with the fixed parameters you provide. The assistant is not involved; the call is made directly.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Connection | Yes | REST API connection to be used |
| Tool Name | Yes | Name of the tool to be called (name value in configuration) |
| Arguments (JSON) | Yes | Parameters to be sent to the vehicle |
Usage Example
- Tool Name:
cargo_create - Arguments (JSON):
{
"receiver_name": "Ayşe Kaya",
"address": "Örnek Mah. Test Sok. No:5 İstanbul",
"weight": 2.4
}
To retrieve the parameter values from the previous step, click on the area and press the / key.
When to Use
- When it is fixed which endpoint will be called
- When the result does not need to be interpreted
- When it needs to work faster and more predictably
Natural Language or Direct Call?
| Status | Which operation |
|---|---|
| User is typing free text | Natural Language |
| The flow does the same thing every time | Direct Call |
| The answer needs to be summarized | Natural Language |
| You will pass the raw data to the next step | Direct Call |
| Speed and predictability are important | Direct Call |
| Multiple endpoints may be required | Natural Language |
REST API or HTTP Call?
SkyStudio also includes an HTTP Call node for one-time requests. The difference between them is:
| Feature | REST API (Generic) | HTTP Call |
|---|---|---|
| Configuration | Endpoints are predefined | Addresses are entered manually at each node |
| Credential information | Stored and reused in the connection | Re-entered at each node |
| Natural language support | Yes | No |
| Usage | Multiple calls to the same service | One-time or simple request |
If you're going to connect to a service multiple times within a single request, a REST API (Generic) is more suitable; if you're making a single request, an HTTP Call is better.
Quick Start Examples
Example 1: Cargo Tracking Chatbot
Chatbot that allows customers to check the status of their shipments:
Text Input → REST API (Natural Language) → Text Output
REST API (Natural Language) settings:
- Query:
{{input.text}} - System Prompt:
"You are a cargo tracking assistant. Please provide answers in Turkish and highlight the delivery date."
Example 2: Creating a Shipment After Ordering
Workflow that automatically creates a shipping record when a new order arrives:
Webhook → Transform → REST API (Direct Call) → Send Mail (Outlook)
REST API (Direct Call) settings:
- Tool Name:
cargo_create - Arguments: Fields matched with
/from the previous step.
Example 3: Connecting to Internal Service
A workflow that pulls data from an on-premises API and generates reports:
Webhook (Every morning) → REST API (Direct Call) → Data Analysis (Python) → Artifact → Send Messages (Slack)
Example 4: Multiple Service Query
An assistant that answers complex queries requiring multiple endpoints:
Text Input → REST API (Natural Language) → LLM (Format) → Text Output
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| 401 Unauthorized | Token is invalid or expired | Renew the token value in the link |
| 403 Forbidden | The token is not authorized for this endpoint | Check token permissions on the service side |
| 404 Not Found | Base URL or path is incorrect | Check if there is a redundant / at the end of the base URL |
| Tool not found | Tool Name not found in configuration | Verify tool name from raw JSON view |
| Assistant selects the wrong vehicle | Description fields are unclear | Write clearer and more distinctive descriptions for each vehicle |
| Missing required parameter | Required parameter not sent | Fill in the required fields in the Arguments JSON |
| Invalid JSON | Arguments field is malformed | Check JSON syntax (quotation marks, commas) |
| Connection timeout | Service is not responding | Verify that the service is accessible and the address is correct |
Notes
- The REST API (Generic) allows you to connect to any service that doesn't have a ready-made node in SkyStudio.
- The
descriptionfield in endpoint definitions is not just documentation; it directly influences the assistant's tool selection in Natural Language operations. - Do not add a
/to the end of the base URL; path definitions already start with a/. - The credentials are stored in the connection and are not visible to the nodes; you don't need to re-enter the token within the stream.
- Define separate connections for different environments (test/production) of the same service.
- For simple, one-time requests, the HTTP Call node is more practical.
- Using the Edit as Raw JSON button instead of manually entering the configuration is much faster when defining a large number of endpoints.
- If your tokens have an expiration date, remember to renew them and update the link before they expire.
Artifact Node
The Artifact node is used in SkyStudio workflows to generate visual outputs (HTML pages, charts, tables). It processes incoming data and instructions with the help of artificial intelligence, presenting the user with an interactive visualization. It does not require an external service connection.
Operations
The Artifact node offers 4 operations:
| Operation | Category | Description |
|---|---|---|
| Generate HTML Page | Featured | Generates AI-powered HTML pages from prompts and data |
| Generate Chart | Featured | Creates AI-powered charts from prompts and data |
| HTML from Template | Standard | Generates an HTML page by injecting data into a ready-made template |
| Auto Chart from Data | Standard | Automatically converts JSON data into a chart |
Generate HTML Page
It generates an AI-powered, customizable HTML page from a prompt and JSON data source. It is used to create reports, dashboards, and dynamic content pages.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Prompt | Yes | Instructions describing how the page should look (e.g., "Show sales data in card layout") |
| Data (JSON) | No | Data in JSON format to be displayed on the page |
| Style | No | General style preference (selected from drop-down menu) |
| CSS Framework | No | CSS framework to use (e.g., Tailwind, Bootstrap) |
| System Prompt Override | No | A custom system instruction that overrides the AI's default behavior |
Usage Example
Prompt: "Display monthly sales figures as a professional report page with headings, summary cards, and tables"
Data (JSON):
{
"month": "April 2024",
"total_sales": 125000,
"top_product": "Premium License",
"deals": [
{ "name": "ABC A.Ş.", "amount": 45000 },
{ "name": "XYZ Ltd.", "amount": 30000 }
]
}
Sample Output
When the workflow runs, the user is presented with an interactive HTML page. The page is displayed formatted according to the specified style and CSS framework.
Generate Chart
It creates AI-powered charts from a prompt and JSON data source. It supports different chart types such as line, bar, and pie charts, and is used in data visualization scenarios like sales analysis and performance tracking.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Prompt | Yes | Instructions describing how to create the graph |
| Data (JSON) | No | Data in JSON format to be used in the graph |
| Chart Type | No | Chart type (selected from drop-down menu: Bar, Line, Pie, etc.) |
| Chart Title | No | Chart title |
| Style | No | General style preference |
| System Prompt Override | No | A custom system instruction that overrides the AI's default behavior |
Usage Example
Prompt: "Show the last 6 months' income in a bar graph broken down by month"
Chart Type: Bar
Chart Title: "2024 Monthly Revenue Performance"
Data (JSON):
[
{ "month": "January", "revenue": 85000 },
{ "month": "February", "revenue": 92000 },
{ "month": "March", "revenue": 110000 },
{ "month": "April", "revenue": 125000 }
]
HTML from Template
It generates a static HTML page by injecting JSON data into a pre-prepared HTML template. It's ideal for achieving deterministic, consistent output without using AI.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Template | Yes | HTML template containing data variables (e.g., with placeholders like {{name}}, {{amount}}) |
| Data (JSON) | No | JSON data to be injected into placeholders in the template |
| Style | No | General style preference |
| Language | No | Output language (selected from drop-down menu) |
Usage Example
Template:
<h1>Welcome, {{firstname}}!</h1>
<p>Company: {{company}}</p>
<p>Offer Amount: {{amount}} TL</p>
Data (JSON):
{
"firstname": "Ahmet",
"company": "Örnek A.Ş.",
"amount": "15,000"
}
Auto Chart from Data
It automatically selects and visualizes the most suitable chart type by analyzing JSON data. It is used for quick data visualization without the need to specify a prompt or chart type.
Parameters
| Parameter | Required | Description |
|---|---|---|
| Data (JSON) | Yes | Data in JSON format to be converted into a graph |
| Title (optional) | No | Chart title |
| Style | No | General style preference |
Usage Example
Data (JSON):
[
{ "category": "Software", "sales": 45000 },
{ "category": "Hardware", "sales": 30000 },
{ "category": "Service", "sales": 20000 }
]
Title: "Sales by Product Category"
The node automatically analyzes the data and produces output by selecting the most appropriate chart type (pie chart or bar chart in this example).
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| Empty or corrupted HTML output | Data in the Data (JSON) field is in invalid JSON format | Convert the data to JSON format in a previous node; note the quotation marks for valid JSON |
| Graph not being generated | No numeric fields found in JSON data | Ensure the graph data contains numerical values |
| Template placeholders are not being filled | Variable names in the template do not match field names in the JSON | Check that {{firstname}} is exactly the same as the "firstname" key in the JSON |
| Style not applied | CSS Framework selection left blank | Specify an option from the CSS Framework dropdown menu |
Notes
- The Artifact node does not require any external service connections; there is no special authentication step for use.
- Since the Generate HTML Page and Generate Chart operations use AI, response times may increase with very large JSON data. Filter large datasets before sending them.
- The HTML from Template operation does not use AI; it produces deterministic and fast results because it works with a fixed template.
- The Auto Chart from Data operation automatically selects the chart type. If you want a specific chart type, use the Generate Chart operation instead and fill in the Chart Type field.
- The output of all operations is rendered in SkyStudio's Artifact rendering component and presented interactively to the user.
Form Builder Node
The Form Builder node provides interactive forms to users within conversational workflows. The form is automatically triggered when a specified condition is met; the user fills out the form, and the responses are passed to the next steps of the workflow. It does not require an external service connection.
Operation
The Form Builder node offers a single operation: form display and data collection. All configuration of the node is done through the main panel.
Parameters
| Parameter | Required | Description |
|---|---|---|
| What data will you feed to Form Builder? | No | Data processed before the form is triggered (typically the output of the previous node, e.g., {{node.output}}) |
| Form ID | Yes | The unique identifier of the form. If there is more than one form in the same workflow, each must be given a different ID (e.g., application_form, customer_survey) |
| When will the form be displayed? | No | A condition or statement that defines when the form will be displayed. It can be written in natural language or dynamically determined based on previous node output. |
| Fields | No | List of fields to be included in the form. + New fields are added with the Add button, and a type and label are defined for each field. |
Field Types
The following are the types of fields that can be added to Form Builder:
| Type | Description | Usage Scenario |
|---|---|---|
| Text | Single-line text input | Name, city, short answers |
| TextArea | Multi-line text area | Long descriptions, notes, biographies |
| Date | Date selector | Appointment date, date of birth, start date |
| Select | Drop-down list (single selection) | Specialization, city, category |
| Radio | Radio buttons (single selection) | Level, confirm/reject, preference |
| Checkbox | Checkboxes (multiple selections) | Interests, permissions, multiple preferences |
Form Output
When a form is submitted, the responses are returned in the data.agentic_form object. The Text Output node, which is connected to the Form Builder node, is used to output this data. The Data parameter of Text Output is referenced as follows:
data.agentic_form.fields[0] → The entire first field
data.agentic_form.fields[0].label → Field label
data.agentic_form.fields[0].value → The value entered by the user (Text, TextArea, Date)
data.agentic_form.fields[0].options → Selected options (Select, Radio, Checkbox)
Typical Output Structure
The Form Builder node is typically connected as follows:
Form Builder → Text Output (Data: data.agentic_form.fields[N].value)
In the Data field of the Text Output node, enter the reference to the field you want to extract. For example, to retrieve field 3 (index 2) of the form:
data.agentic_form.fields[2].value
For multiple selection fields such as Checkbox and Select:
data.agentic_form.fields[4].options
How to Configure a Form?
1. Define the Form ID
Enter a unique identifier in the Form ID field that does not contain spaces or Turkish characters (e.g., basvuru_formu, musteri_anketi). This ID is used to reference the form within the workflow.
2. Define the Display Condition
In the When will the form be displayed? field, describe when the form should be triggered. This field can be written in natural language:
"When the user initiates the conversation""When the user wants to make an appointment""When the user types 'start' or 'register'"
3. Adding a field
Click the + Add Field button, select the field type from the Select Field Type menu that opens, and enter the field label. You can add as many fields as you want. The order of the fields can be changed using drag-and-drop.
Common Errors
| Error | Possible Cause | Solution |
|---|---|---|
| Form not displayed | The condition "When will the form be displayed?" is not met | Check that the condition text matches the user's input |
| Form responses are inaccessible | Output reference is incorrectly entered | Ensure you are using the data.agentic_form.fields[index].value format; index starts at 0 |
| Same Form ID Conflict | Two different forms in the same workflow use the same Form ID | Define a unique Form ID for each form |
| Field order is mixed up | Fields were added in the wrong order | Rearrange the fields using drag-and-drop |
| Multiple selection values cannot be retrieved | Checkbox results are under options instead of value | Use data.agentic_form.fields[index].options |
Notes
- The Form Builder node does not require any external service connections; there is no special authentication step.
- The Form ID field is mandatory. If left blank, the workflow will not work.
- The When will the form be displayed? field can be written in natural language; the system interprets this description using AI and triggers the form under the appropriate conditions.
- Multiple Form Builder nodes can be used in the same workflow; each must have a unique Form ID.
- The output index of form fields follows the order of the fields in the node. If the field order is changed, the index references must also be updated.
- Large forms (10+ fields) can negatively impact user experience; it's recommended to break long forms into multiple steps.
