> ## Documentation Index
> Fetch the complete documentation index at: https://docs.atako.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Dynamics 365

> Connect Microsoft Dynamics 365 to your Atako agents — 9 read and 6 write actions.

Let your agents read and write your Dynamics 365 / Dataverse data — query any table with OData, look up accounts, contacts, leads and opportunities, create and update records and add notes.

## Connection

* **Authentication**: OAuth 2.0 — you authorize Atako via Microsoft Dynamics 365's consent screen; no key to copy.
* **Required settings**:
  * **Environment host** — The host of your Dynamics 365 / Power Platform environment, without https\:// — e.g. orgabc.crm4.dynamics.com.
* **Scopes requested**:
  * `https://{environment}/.default`
  * `offline_access`

<Note>
  Nothing to paste: enter your environment host, click Connect and sign in with your Microsoft 365 work account that has a Dynamics 365 / Power Apps license and a security role in that environment. Your environment host is in Power Platform admin center → Environments → your environment → Environment URL (e.g. orgabc.crm4.dynamics.com), or Power Apps → Settings → Developer resources. Prerequisite on the Atako side — an administrator adds the delegated permission Entra → App registrations → Atako → API permissions → Add a permission → Dynamics CRM → user\_impersonation ("Access Dynamics 365 as organization users"), and sets INTEGRATION\_OAUTH\_DYNAMICS\_365\_CLIENT\_ID / \_CLIENT\_SECRET (the Outlook Entra app can be reused once it has that permission).

  See [Microsoft Dynamics 365's documentation](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/overview).
</Note>

## Read actions (9)

| Action               | Description                                                                                                                                                                                                                                                                                                                                                                                                 |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `get_record`         | Read one row by id, optionally limited with select and joined with expand.                                                                                                                                                                                                                                                                                                                                  |
| `list_accounts`      | List accounts (default columns: accountid,name,telephone1,emailaddress1,websiteurl,address1\_city,address1\_country,\_primarycontactid\_value,modifiedon). Optional OData filter, e.g. "contains(name,'contoso')" or "address1\_city eq 'Paris'"; orderby; top 1–500 (default 50). Use query\_records for other columns or tables.                                                                          |
| `list_columns`       | List the columns of one table: LogicalName (the key to use in select/filter/attributes), AttributeType (Lookup, Picklist, String, Money…), DisplayName, RequiredLevel, IsValidForCreate, IsValidForUpdate. Use it before creating or updating records.                                                                                                                                                      |
| `list_contacts`      | List contacts (default columns: contactid,fullname,firstname,lastname,emailaddress1,telephone1,jobtitle,\_parentcustomerid\_value,modifiedon). Optional OData filter, e.g. "emailaddress1 eq '[jane@contoso.com](mailto:jane@contoso.com)'" or "\_parentcustomerid\_value eq \<account guid>"; orderby; top 1–500 (default 50). Use query\_records for other columns or tables.                             |
| `list_leads`         | List leads (Dynamics 365 Sales) (default columns: leadid,fullname,subject,companyname,emailaddress1,telephone1,statecode,statuscode,leadsourcecode,createdon). Optional OData filter, e.g. "statecode eq 0" (open) or "companyname eq 'Contoso'"; orderby; top 1–500 (default 50). Use query\_records for other columns or tables.                                                                          |
| `list_opportunities` | List opportunities (Dynamics 365 Sales) (default columns: opportunityid,name,estimatedvalue,estimatedclosedate,closeprobability,statecode,statuscode,\_customerid\_value,\_parentaccountid\_value,modifiedon). Optional OData filter, e.g. "statecode eq 0" (open) or "estimatedclosedate le 2026-12-31"; orderby; top 1–500 (default 50). Use query\_records for other columns or tables.                  |
| `list_tables`        | List the tables of the environment with LogicalName, EntitySetName (the name every record action takes), DisplayName, PrimaryIdAttribute, PrimaryNameAttribute and IsCustomEntity. Start here to find a table. Optional OData filter on primitive properties only — e.g. "IsCustomEntity eq true", "LogicalName eq 'account'" (DisplayName cannot be filtered). No paging: everything matching is returned. |
| `query_records`      | Query rows of any table with OData: select, filter (e.g. "statecode eq 0 and contains(name,'contoso')"), orderby, top (1–500, default 50) and expand. Lookup values come back as \_\<column>\_value; choice columns also carry their label (…@OData.Community.Display.V1.FormattedValue). For more rows than top, narrow the filter (e.g. by createdon range).                                              |
| `who_am_i`           | Return the connected user's ids in this environment: UserId (systemuser), BusinessUnitId and OrganizationId.                                                                                                                                                                                                                                                                                                |

## Write actions (6)

| Action           | Description                                                                                                                                                                                                        |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `create_account` | Create an account (company) and return it with its accountid.                                                                                                                                                      |
| `create_contact` | Create a contact, optionally linked to its company (account\_id → parentcustomerid\_account), and return it with its contactid.                                                                                    |
| `create_lead`    | Create a lead (Dynamics 365 Sales) and return it with its leadid.                                                                                                                                                  |
| `create_note`    | Add a text note (annotation) to an account, contact, lead, opportunity or task, and return it.                                                                                                                     |
| `create_record`  | Create a row in any table and return it. attributes: column values by logical name; lookups via "\<navigation property>@odata.bind": "/\<entityset>(\<guid>)". Optional select limits the returned columns.        |
| `update_record`  | Update an existing row (never creates one: sent with If-Match: \*) and return it. Send only the columns you change; lookups via "\<navigation property>@odata.bind". When changing statecode, also set statuscode. |

## Permissions

Every action above must be explicitly granted to an agent before it can be used. See [Permissions](/integrations/permissions) for the grant model and [Security](/integrations/security) for how credentials are protected.

***

*Last reviewed against the provider API: September 2026.*
