Skip to content
Talk to an Engineer Dashboard

Outlook

Connect to Microsoft Outlook. Manage emails, calendar events, contacts, and tasks

Connect to Microsoft Outlook. Manage emails, calendar events, contacts, and tasks

Outlook logo

Supports authentication: OAuth 2.0

Register your Scalekit environment with the Outlook connector so Scalekit handles the authentication flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically. Then complete the configuration in your application as follows:

  1. Create the Outlook connection in Scalekit

    • In Scalekit dashboard, go to Agent ActionsConnections and click + Create Connection. Search for Outlook and click Create.

      Search for Outlook and create a new connection

    • In the Configure Outlook Connection dialog, copy the Redirect URI. You will need this when registering your app in Azure.

      Copy the redirect URI from the Configure Outlook Connection dialog

  2. Register an application in Azure

    • Sign into portal.azure.com and go to Microsoft Entra IDApp registrations.

      App registrations page in Azure portal

    • Click New registration. Enter a name for your app (for example, “Scalekit Outlook Connector”).

    • Under Supported account types, select Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts.

    • Under Redirect URI, select Web and paste the redirect URI you copied from the Scalekit dashboard. Click Register.

      Paste the Scalekit redirect URI in Azure

  3. Get your client credentials

    • From the app’s Overview page, copy the Application (client) ID.

      Copy the Application (client) ID from the Azure app overview

    • Go to Certificates & secrets in the left sidebar, then click + New client secret.

      Certificates and secrets page in Azure portal

    • Enter a description (for example, “Secret for Scalekit Agent Actions”), set an expiry period, and click Add. Copy the secret Value immediately — it is only shown once.

      Add a client secret in Azure portal

  4. Add credentials in Scalekit

    • In Scalekit dashboard, go to Agent ActionsConnections and open the Outlook connection you created.

    • Enter your credentials:

      • Client ID — the Application (client) ID from the Azure app overview
      • Client Secret — the secret value from Certificates & secrets
      • Scopes — select the permissions your app needs (for example, Calendars.Read, Calendars.ReadWrite, Mail.Read, Mail.ReadWrite, Mail.Send, Contacts.Read, Contacts.ReadWrite, User.Read, offline_access). See Microsoft Graph permissions reference for the full list.
    • Click Save.

Connect a user’s Outlook account and make API calls on their behalf — Scalekit handles OAuth and token management automatically.

You can interact with Outlook in two ways — via direct proxy API calls or via Scalekit optimized tool calls. Scroll down to see the list of available Scalekit tools.

Proxy API Calls

import { ScalekitClient } from '@scalekit-sdk/node';
import 'dotenv/config';
const connectionName = 'outlook'; // get your connection name from connection configurations
const identifier = 'user_123'; // your unique user identifier
// Get your credentials from app.scalekit.com → Developers → Settings → API Credentials
const scalekit = new ScalekitClient(
process.env.SCALEKIT_ENV_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;
// Authenticate the user
const { link } = await actions.getAuthorizationLink({
connectionName,
identifier,
});
console.log('🔗 Authorize Outlook:', link);
process.stdout.write('Press Enter after authorizing...');
await new Promise(r => process.stdin.once('data', r));
// Make a request via Scalekit proxy
const result = await actions.request({
connectionName,
identifier,
path: '/v1.0/me/messages',
method: 'GET',
});
console.log(result);

Scalekit Tools

Create a new calendar event in the user’s Outlook calendar. Supports attendees, recurrence, reminders, online meetings, multiple locations, and event properties.

NameTypeRequiredDescription
attendees_optionalstringNoArray of email addresses for optional attendees
attendees_requiredstringNoArray of email addresses for required attendees
attendees_resourcestringNoArray of email addresses for resources (meeting rooms, equipment)
body_contentstringNoNo description
body_contentTypestringNoNo description
end_datetimestringYesNo description
end_timezonestringYesNo description
hideAttendeesbooleanNoWhen true, each attendee only sees themselves
importancestringNoEvent importance level
isAllDaybooleanNoMark as all-day event
isOnlineMeetingbooleanNoCreate an online meeting (Teams/Skype)
isReminderOnbooleanNoEnable or disable reminder
locationstringNoNo description
locationsstringNoJSON array of location objects with displayName, address, coordinates
onlineMeetingProviderstringNoOnline meeting provider
recurrence_days_of_weekstringNoDays of week for weekly recurrence (comma-separated)
recurrence_end_datestringNoEnd date for recurrence (YYYY-MM-DD), required if range_type is endDate
recurrence_intervalintegerNoHow often the event recurs (e.g., every 2 weeks = 2)
recurrence_occurrencesintegerNoNumber of occurrences, required if range_type is numbered
recurrence_range_typestringNoHow the recurrence ends
recurrence_start_datestringNoStart date for recurrence (YYYY-MM-DD)
recurrence_typestringNoRecurrence pattern type
reminderMinutesBeforeStartintegerNoMinutes before event start to show reminder
sensitivitystringNoEvent sensitivity/privacy level
showAsstringNoFree/busy status
start_datetimestringYesNo description
start_timezonestringYesNo description
subjectstringYesNo description

Create a new contact in the user’s mailbox with name, email addresses, and phone numbers.

NameTypeRequiredDescription
businessPhonesarray<string>NoArray of business phone numbers
companyNamestringNoCompany name
emailAddressesarray<object>NoArray of email address objects with ‘address’ and optional ‘name’ fields
givenNamestringYesFirst name of the contact
jobTitlestringNoJob title
mobilePhonestringNoMobile phone number
surnamestringYesLast name of the contact

Delete a calendar event by ID.

NameTypeRequiredDescription
event_idstringYesNo description

Download a specific attachment from an Outlook email message by attachment ID. Returns the full attachment including base64-encoded file content in the contentBytes field. Use List Attachments to get the attachment ID first.

NameTypeRequiredDescription
attachment_idstringYesThe ID of the attachment to download.
message_idstringYesThe ID of the message containing the attachment.

Retrieve an existing calendar event by ID from the user’s Outlook calendar.

NameTypeRequiredDescription
event_idstringYesNo description

Retrieve a specific email message by ID from the user’s Outlook mailbox, including full body content, sender, recipients, attachments info, and metadata.

NameTypeRequiredDescription
message_idstringYesThe ID of the message to retrieve.

List all attachments on a specific Outlook email message. Returns attachment metadata including ID, name, size, and content type. Use the attachment ID with Get Attachment to download the file content.

NameTypeRequiredDescription
message_idstringYesThe ID of the message to list attachments for.

List calendar events from the user’s Outlook calendar with filtering, sorting, pagination, and field selection.

NameTypeRequiredDescription
filterstringNoOData filter expression to filter events (e.g., startsWith(subject,‘All’))
orderbystringNoOData orderby expression to sort events (e.g., start/dateTime desc)
selectstringNoComma-separated list of properties to include in the response
skipnumberNoNumber of events to skip for pagination
topnumberNoMaximum number of events to return

List all contacts in the user’s mailbox with support for filtering, pagination, and field selection.

NameTypeRequiredDescription
$filterstringNoFilter expression to narrow results (e.g., “emailAddresses/any(a:a/address eq ‘user@example.com’)“)
$orderbystringNoProperty to sort by (e.g., “displayName”)
$selectstringNoComma-separated list of properties to return (e.g., “displayName,emailAddresses,phoneNumbers”)
$skipintegerNoNumber of contacts to skip for pagination
$topintegerNoNumber of contacts to return (default: 10)

List all messages in the user’s mailbox with support for filtering, pagination, and field selection. Returns 10 messages by default.

NameTypeRequiredDescription
$filterstringNoFilter expression to narrow results (e.g., “from/emailAddress/address eq ‘user@example.com’“)
$orderbystringNoProperty to sort by (e.g., “receivedDateTime desc”)
$selectstringNoComma-separated list of properties to return (e.g., “subject,from,receivedDateTime”)
$skipintegerNoNumber of messages to skip for pagination
$topintegerNoNumber of messages to return (1-1000, default: 10)

Retrieve the mailbox settings for the signed-in user. Returns automatic replies (out-of-office) configuration, language, timezone, working hours, date/time format, and delegate meeting message delivery preferences.

Update mailbox settings for the signed-in user. Supports configuring automatic replies (out-of-office), language, timezone, working hours, date/time format, and delegate meeting message delivery preferences. Only fields provided will be updated.

NameTypeRequiredDescription
automaticRepliesSettingobjectNoConfiguration for automatic replies (out-of-office). Set status, internal/external reply messages, and optional scheduled time window.
dateFormatstringNoPreferred date format string for the mailbox (e.g., ‘MM/dd/yyyy’, ‘dd/MM/yyyy’, ‘yyyy-MM-dd’).
delegateMeetingMessageDeliveryOptionsstringNoControls how meeting messages are delivered when a delegate is configured.
languageobjectNoLanguage and locale for the mailbox. Object with locale (e.g., ‘en-US’) and displayName.
timeFormatstringNoPreferred time format string for the mailbox (e.g., ‘hh:mm tt’ for 12-hour, ‘HH:mm’ for 24-hour).
timeZonestringNoPreferred time zone for the mailbox (e.g., ‘UTC’, ‘Pacific Standard Time’, ‘Eastern Standard Time’).
workingHoursobjectNoWorking hours configuration including days of week, start/end times, and time zone.

Reply to an existing email message. The reply is automatically sent to the original sender and saved in the Sent Items folder.

NameTypeRequiredDescription
commentstringYesReply message content
messageIdstringYesThe unique identifier of the message to reply to

Search messages by keywords across subject, body, sender, and other fields. Returns matching messages with support for pagination.

NameTypeRequiredDescription
$selectstringNoComma-separated list of properties to return (e.g., “subject,from,receivedDateTime”)
$skipintegerNoNumber of messages to skip for pagination
$topintegerNoNumber of messages to return (1-1000, default: 10)
querystringYesSearch query string (searches across subject, body, from, to)

Send an email message using Microsoft Graph API. The message is saved in the Sent Items folder by default.

NameTypeRequiredDescription
bccRecipientsarray<string>NoArray of email addresses to BCC
bodystringYesBody content of the email
bodyTypestringNoContent type of the body (Text or HTML)
ccRecipientsarray<string>NoArray of email addresses to CC
saveToSentItemsbooleanNoSave the message in Sent Items folder (default: true)
subjectstringYesSubject line of the email
toRecipientsarray<string>YesArray of email addresses to send to

Create a new Microsoft To Do task list.

NameTypeRequiredDescription
display_namestringYesThe name of the task list.

Permanently delete a Microsoft To Do task list and all its tasks.

NameTypeRequiredDescription
list_idstringYesThe ID of the task list to delete.

Get a specific Microsoft To Do task list by ID.

NameTypeRequiredDescription
list_idstringYesThe ID of the task list.

List all Microsoft To Do task lists for the current user.

Rename a Microsoft To Do task list.

NameTypeRequiredDescription
display_namestringYesThe new name for the task list.
list_idstringYesThe ID of the task list to update.

Create a new task in a Microsoft To Do task list with optional body, due date, importance, and reminder.

NameTypeRequiredDescription
bodystringNoThe body/notes of the task (plain text).
categoriesarray<string>NoArray of category names to assign to the task.
due_datestringNoDue date in YYYY-MM-DD format (e.g. “2026-04-15”).
due_time_zonestringNoTime zone for the due date (e.g. “UTC”, “America/New_York”). Defaults to UTC.
importancestringNoThe importance of the task: low, normal, or high.
list_idstringYesThe ID of the task list to add the task to.
reminder_date_timestringNoReminder date and time in ISO 8601 format (e.g. “2026-04-15T09:00:00”).
reminder_time_zonestringNoTime zone for the reminder (e.g. “UTC”). Defaults to UTC.
statusstringNoThe status of the task: notStarted, inProgress, completed, waitingOnOthers, or deferred.
titlestringYesThe title of the task.

Permanently delete a task from a Microsoft To Do task list.

NameTypeRequiredDescription
list_idstringYesThe ID of the task list.
task_idstringYesThe ID of the task to delete.

Get a specific task from a Microsoft To Do task list.

NameTypeRequiredDescription
list_idstringYesThe ID of the task list.
task_idstringYesThe ID of the task.

List all tasks in a Microsoft To Do task list with optional filtering and pagination.

NameTypeRequiredDescription
$filterstringNoOData filter expression (e.g. “status eq ‘notStarted’”).
$orderbystringNoProperty to sort by (e.g. “createdDateTime desc”).
$skipintegerNoNumber of tasks to skip for pagination.
$topintegerNoNumber of tasks to return (default: 10).
list_idstringYesThe ID of the task list.

Update a task in a Microsoft To Do task list. Only provided fields are changed.

NameTypeRequiredDescription
bodystringNoNew body/notes for the task (plain text).
categoriesarray<string>NoArray of category names to assign to the task.
due_datestringNoDue date in YYYY-MM-DD format.
due_time_zonestringNoTime zone for the due date. Defaults to UTC.
importancestringNoThe importance: low, normal, or high.
list_idstringYesThe ID of the task list.
statusstringNoThe status: notStarted, inProgress, completed, waitingOnOthers, or deferred.
task_idstringYesThe ID of the task to update.
titlestringNoNew title for the task.

Update an existing Outlook calendar event. Only provided fields will be updated. Supports time, attendees, location, reminders, online meetings, recurrence, and event properties.

NameTypeRequiredDescription
attendees_optionalstringNoComma-separated optional attendee emails
attendees_requiredstringNoComma-separated required attendee emails
attendees_resourcestringNoComma-separated resource emails (meeting rooms, equipment)
body_contentstringNoEvent description/body
body_contentTypestringNoContent type of body
categoriesstringNoComma-separated categories
end_datetimestringNoEvent end time in RFC3339 format
end_timezonestringNoTimezone for end time
event_idstringYesThe ID of the calendar event to update
hideAttendeesbooleanNoWhen true, each attendee only sees themselves
importancestringNoEvent importance level
isAllDaybooleanNoMark as all-day event
isOnlineMeetingbooleanNoCreate an online meeting (Teams/Skype)
isReminderOnbooleanNoEnable or disable reminder
locationstringNoPhysical or virtual location
locationsstringNoJSON array of location objects with displayName, address, coordinates
onlineMeetingProviderstringNoOnline meeting provider
recurrence_days_of_weekstringNoDays of week for weekly recurrence (comma-separated)
recurrence_end_datestringNoEnd date for recurrence (YYYY-MM-DD)
recurrence_intervalintegerNoHow often the event recurs (e.g., every 2 weeks = 2)
recurrence_occurrencesintegerNoNumber of occurrences
recurrence_range_typestringNoHow the recurrence ends
recurrence_start_datestringNoStart date for recurrence (YYYY-MM-DD)
recurrence_typestringNoRecurrence pattern type
reminderMinutesBeforeStartintegerNoMinutes before event start to show reminder
sensitivitystringNoEvent sensitivity/privacy level
showAsstringNoFree/busy status
start_datetimestringNoEvent start time in RFC3339 format
start_timezonestringNoTimezone for start time
subjectstringNoEvent title/summary