Overview
Add Microsoft Dynamics 365 Sales to any ModuleX agent or workflow. CRM platform integration for managing accounts, contacts, appointments, and custom entities via the Dynamics 365 Web API (https://{org}.crm.dynamics.com/api/data/v9.2).
Categories : CRM · Sales · Productivity & Collaboration · Auth : OAuth2 · Actions : 11
Authentication
OAuth2 Authentication
Connect using Microsoft OAuth2 (recommended)
Required Credentials
Field Description Required Format Client ID Microsoft Entra (Azure AD) OAuth App Client ID Yes xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxClient Secret Microsoft Entra (Azure AD) OAuth App Client Secret Yes xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxDynamics 365 Instance URL Your Dynamics 365 org URL hostname (e.g. org12345.crm.dynamics.com) Yes org12345.crm.dynamics.com
OAuth Configuration
Authorization URL : https://login.microsoftonline.com/common/oauth2/v2.0/authorize
Token URL : https://login.microsoftonline.com/common/oauth2/v2.0/token
Scopes : https://dynamics.microsoft.com/user_impersonation, offline_access
Available Actions
create_appointment — Create a new appointment linked to an account with a required attendee (system user)
Parameters Start date/time in ISO 8601 format (e.g. 2026-02-20T12:00:00Z)
End date/time in ISO 8601 format
Account ID the appointment is regarding
Email address of the Dynamics system user to add as attendee
Optional category value (numeric). Use list_appointment_categories to discover valid values
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"appointment_id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Appointment Id"
},
"deep_link" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Deep Link"
},
"appointment" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Appointment"
}
},
"required" : [
"success"
],
"title" : "CreateAppointmentOutput" ,
"type" : "object"
}
create_custom_entity — Create a custom entity definition in Dynamics 365
Parameters Identifier of the solution to associate the entity with
Display name for the new entity (e.g. ‘Bank Account’)
Primary name attribute of the new entity (e.g. ‘Account Name’)
Language code (e.g. 1033 for English US) (Default: 1033)
Array of attribute definition objects to add to the entity
Description of the new entity
Whether the entity supports activities (Default: false)
Whether the entity supports notes (Default: false)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"entity" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Entity"
}
},
"required" : [
"success"
],
"title" : "CreateCustomEntityOutput" ,
"type" : "object"
}
find_contact — Search for a contact by ID, name, or custom OData filter
get_account — Retrieve a single account by its GUID
Parameters Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"account" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Account"
}
},
"required" : [
"success"
],
"title" : "GetAccountOutput" ,
"type" : "object"
}
list_accounts — List accounts with optional OData filter and pagination
Parameters Optional OData $filter (e.g. ‘statecode eq 0’ for active accounts)
Number of records per page (max 5000) (Default: 50)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"accounts" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Accounts" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "ListAccountsOutput" ,
"type" : "object"
}
list_appointment_categories — List available appointment category values from metadata or existing rows
list_appointment_category_options — Retrieve available options for the appointment Category picklist field
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"options" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Options" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "ListAppointmentCategoryOptionsOutput" ,
"type" : "object"
}
list_appointments — List appointments ordered by scheduled start descending
Parameters Optional OData $filter (e.g. ‘statecode eq 0’)
Number of appointments to return (max 100) (Default: 25)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"appointments" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Appointments" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "ListAppointmentsOutput" ,
"type" : "object"
}
list_solution_id_options — Retrieve available solutions with their IDs and names
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"solutions" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Solutions" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "ListSolutionIdOptionsOutput" ,
"type" : "object"
}
search_accounts — Search accounts by company name substring
Parameters Substring to match against account name
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"accounts" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Accounts" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "SearchAccountsOutput" ,
"type" : "object"
}
update_appointment — Update an existing appointment (only supplied fields are modified)
Parameters Appointment activity GUID to update
Updated start in ISO 8601
Updated category value (numeric). Use list_appointment_categories to discover valid values
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"appointment_id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Appointment Id"
},
"updated_fields" : {
"items" : {
"type" : "string"
},
"title" : "Updated Fields" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "UpdateAppointmentOutput" ,
"type" : "object"
}
Limits & Quotas
API limits : Dynamics 365 enforces per-org service protection limits (typically 6,000 requests per 5-minute sliding window per user).
Throttling : Returns HTTP 429 when limits are exceeded; retry after the Retry-After header value.
Error model : Non-2xx responses are caught and returned as success=False + error rather than raising.
Links