Skip to main content
Microsoft Dynamics 365 Sales logo

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

FieldDescriptionRequiredFormat
Client IDMicrosoft Entra (Azure AD) OAuth App Client IDYesxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Client SecretMicrosoft Entra (Azure AD) OAuth App Client SecretYesxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Dynamics 365 Instance URLYour Dynamics 365 org URL hostname (e.g. org12345.crm.dynamics.com)Yesorg12345.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

Parameters

subject
string
required
Title of the appointment
scheduledstart
string
required
Start date/time in ISO 8601 format (e.g. 2026-02-20T12:00:00Z)
scheduledend
string
required
End date/time in ISO 8601 format
regarding_account_id
string
required
Account ID the appointment is regarding
required_attendee_email
string
required
Email address of the Dynamics system user to add as attendee
category
integer
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"
}

Parameters

solution_id
string
required
Identifier of the solution to associate the entity with
display_name
string
required
Display name for the new entity (e.g. ‘Bank Account’)
primary_attribute
string
required
Primary name attribute of the new entity (e.g. ‘Account Name’)
language_code
integer
Language code (e.g. 1033 for English US) (Default: 1033)
additional_attributes
object
Array of attribute definition objects to add to the entity
description
string
Description of the new entity
has_activities
boolean
Whether the entity supports activities (Default: false)
has_notes
boolean
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"
}

Parameters

contact_id
string
Contact GUID to look up directly
name
string
Find contacts whose full name contains this value
filter
string
Custom OData $filter expression (e.g. “lastname eq ‘Smith’“)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "contacts": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Contacts",
      "type": "array"
    }
  },
  "required": [
    "success"
  ],
  "title": "FindContactOutput",
  "type": "object"
}

Parameters

account_id
string
required
Account GUID to retrieve

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"
}

Parameters

filter
string
Optional OData $filter (e.g. ‘statecode eq 0’ for active accounts)
records_per_page
integer
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"
}

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "category_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category Type"
    },
    "categories": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Categories",
      "type": "array"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListAppointmentCategoriesOutput",
  "type": "object"
}

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"
}

Parameters

filter
string
Optional OData $filter (e.g. ‘statecode eq 0’)
records_per_page
integer
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"
}

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"
}

Parameters

search_term
string
required
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"
}

Parameters

appointment_id
string
required
Appointment activity GUID to update
subject
string
Updated subject/title
scheduledstart
string
Updated start in ISO 8601
scheduledend
string
Updated end in ISO 8601
category
integer
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.

Insightly

Clay

Dropcontact