# Future support for Microsoft Graph in EasyMorph

**URL:** <https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303>\
**Category:** Feature requests\
**Created:** [August 14, 2025, 2:02pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303 "2025-08-14T14:02:48Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 14, 2025, 2:02pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/1 "2025-08-14T14:02:48Z")

</div>

Hi everyone,

As an application maintenance integrator, I’m exploring ways to streamline data access across Microsoft 365 services. One feature that would be incredibly useful is the ability to query the **Microsoft Graph API** directly from EasyMorph.

This would open up powerful possibilities for automating tasks and retrieving data from Outlook, Teams, SharePoint, OneDrive, and Azure AD — all within EasyMorph workflows.

Is native support for Microsoft Graph something that’s being considered for future development?  
Alternatively, has anyone successfully implemented a workaround using HTTP requests or external scripting to interact with Microsoft Graph from EasyMorph?

Thanks in advance for your insights and suggestions!

Best regards,  
Alain Dumont

---

<div class="post-metadata">

**Author:** ![mattf](https://community.easymorph.com/user_avatar/community.easymorph.com/mattf/32/7015_2.png) [@mattf](https://community.easymorph.com/u/mattf)\
**Post date:** [August 20, 2025, 8:35am UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/2 "2025-08-20T08:35:24Z")

</div>

Hi Alain  
I think the MS Graph API is just a RESTful API so you should be able to access it like any other web API in EasyMorph.

Regards  
Matt

---

<div class="post-metadata">

**Author:** ![mattf](https://community.easymorph.com/user_avatar/community.easymorph.com/mattf/32/7015_2.png) [@mattf](https://community.easymorph.com/u/mattf)\
**Post date:** [August 20, 2025, 12:45pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/3 "2025-08-20T12:45:04Z")

</div>

Actually, The "Import from OData" action and connector already supports Microsoft Graph OData provider so you can likely use that.

 ![image](https://community.easymorph.com/uploads/default/original/2X/f/f8411c2579d390515c6831a00eb8e6137df00cc0.png)

---

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 25, 2025, 1:59pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/4 "2025-08-25T13:59:44Z")

</div>

Thank you MAttf,  
The OdData Connector allows me to make certain queries correctly.  
Even if it doesn't work for all entities.  
And for the rest, you must be right and it's up to me to see how to set up the REST api on our tenant in order to be able to query it.  
If you've already done this, I'd be grateful for any advice, but I'm not sure where to start.

---

<div class="post-metadata">

**Author:** ![AndreaM](https://community.easymorph.com/user_avatar/community.easymorph.com/andream/32/771_2.png) [@AndreaM](https://community.easymorph.com/u/AndreaM)\
**Post date:** [August 25, 2025, 2:26pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/5 "2025-08-25T14:26:51Z")

</div>

Hello @adt32 ,

Just for information: what kind of query you'll run in Microsoft Graph? I'm curious to know if there are some kind of checks I can implement in my company.

---

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 25, 2025, 2:42pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/6 "2025-08-25T14:42:17Z")

</div>

We currently use powershell scripts to retrieve logs from the tenant (SignInLogs) in csv format.  
and then save them in a database for analysis.  
this is not effective as the :  
[https://graph.microsoft.com/v1.0/auditLogs/signIns](https://graph.microsoft.com/v1.0/auditLogs/signIns)  
should return what I need!  
This is just a small example of the possibilities it will give me when I have Easymorph to interface with...

 ![image](https://community.easymorph.com/uploads/default/original/2X/9/9a65e7687c99ccd79afe4f246cc107becbd77040.png)

---

<div class="post-metadata">

**Author:** ![AndreaM](https://community.easymorph.com/user_avatar/community.easymorph.com/andream/32/771_2.png) [@AndreaM](https://community.easymorph.com/u/AndreaM)\
**Post date:** [August 25, 2025, 3:05pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/7 "2025-08-25T15:05:33Z")

</div>

Thanks for the reply, we do the same thing through a Powershell and Easymorph, searching for succeeded logins attemp in geographical zone/IP/Network not trusted.

I generate an Excel file with the records that have to be checked and in a column we inserted an URL to whitelist the specified record (or the specified IP address), using an Easymorph project exposed as an API.

---

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 25, 2025, 3:40pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/8 "2025-08-25T15:40:43Z")

</div>

i just found the solution 🙂 1.  
Creating an application in Azure AD  
Go to the Azure portal: [https://portal.azure.com](https://portal.azure.com)

Go to Azure Active Directory \> Application Registrations.  
Click on New Registration.  
Give the application a name (e.g. EasyMorphGraphConnector).  
Choose the account type (often "accounts in this organisational directory").  
Define a redirection URL if necessary (for interactive feeds).  
Click Save.  
2. Generate a secret key (secret client)  
In the application file, go to Certificates and secrets.  
Click on New client secret.  
Give a description and a validity period.  
Copy the secret value immediately (it will not be visible afterwards).  
3. Retrieve the identifiers  
Client ID: in the application file.  
Tenant ID: in Azure Active Directory \> Overview.  
4. Configure API authorisations  
Go to API Authorisations \> Add an authorisation \> Microsoft Graph.  
Choose Application or Delegated depending on your use.  
For example, add :  
User.Read.All  
Directory.Read.All  
AuditLog.Read.All  
Click on Grant administrator consent.

---

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 25, 2025, 3:43pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/9 "2025-08-25T15:43:52Z")

</div>

🧰 EasyMorph workflow steps  
🟦 1 Calculate the reference date  
Use the "Calculate date" action to obtain the date three months before today :

Format: yyyy-MM-ddTHH:mm:ssZ  
Example: 2025-05-25T00:00:00Z  
🟦 2. Obtain the OAuth token (API key)  
Use the "Web Request" action with the following parameters:

Method: POST

URL:

> **[Sign in to your account](https://login.microsoftonline.com/%7Btenant_id%7D/oauth2/v2.0/token)**

Headers :

Content-Type: application/x-www-form-urlencoded  
Body (form) :

grant\_type=client\_credentials  
&client\_id={your\_client\_id}  
&client\_secret={your\_client\_secret}  
&scope=[https://graph.microsoft.com/.default](https://graph.microsoft.com/.default)  
Output: store the access\_token field in an EasyMorph variable.

🟦 3. Building the OData request  
Use another "Web Request" action:

Method: GET

URL :

[https://graph.microsoft.com/v1.0/users?$filter=createdDateTime](https://graph.microsoft.com/v1.0/users?$filter=createdDateTime) ge 2025-05-25T00:00:00Z  
Headers :

Authorization: Bearer {access\_token}  
Content-Type: application/json  
Output: retrieve the JSON data and transform it into an array using the "Parse JSON" action.

 ![image](https://community.easymorph.com/uploads/default/original/2X/2/2818a9a166b342a6d43d6d7a4ceb48f7f8748e02.png)

---

<div class="post-metadata">

**Author:** ![dgudkov](https://community.easymorph.com/user_avatar/community.easymorph.com/dgudkov/32/5_2.png) [@dgudkov](https://community.easymorph.com/u/dgudkov)\
**Post date:** [August 25, 2025, 4:06pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/10 "2025-08-25T16:06:55Z")

</div>

> [@adt32](#):
>
> Even if it doesn't work for all entities.

The "Microsoft Graph OData" connector does pretty much what you described in the post above, but automatically. What entities didn't it work for?

---

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 25, 2025, 4:21pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/11 "2025-08-25T16:21:50Z")

</div>

I tried odata to get the signinlog, but I couldn't.

 ![image](https://community.easymorph.com/uploads/default/original/2X/6/62c45139c606f0d5da6c037ff62304d61c53f879.png)  
 ![image](https://community.easymorph.com/uploads/default/original/2X/e/ecaf1aac5386d340ab3830323bd22d4b6f6f8e70.png)  
 ![image](https://community.easymorph.com/uploads/default/original/2X/5/58680fc4d5f23c4275546f3ba3c412943171f298.png)

Maybe I'm not doing it right...

---

<div class="post-metadata">

**Author:** ![dgudkov](https://community.easymorph.com/user_avatar/community.easymorph.com/dgudkov/32/5_2.png) [@dgudkov](https://community.easymorph.com/u/dgudkov)\
**Post date:** [August 25, 2025, 4:36pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/12 "2025-08-25T16:36:20Z")

</div>

Entity names might be case-sensitive. Make sure you write the entity name exactly as it appears in the list. Try `signin` instead of `signIn`.

---

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 26, 2025, 7:50am UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/13 "2025-08-26T07:50:37Z")

</div>

Hi, thanks but  
i didn't think that case is the problem, signIn and signin don't work

 ![image](https://community.easymorph.com/uploads/default/original/2X/4/491349baf4165ecf849a6b3502c0e48b7757de24.png)  
 ![image](https://community.easymorph.com/uploads/default/original/2X/a/ad4197ae4e90e68f6b77d7e228b596c22c249628.png)

---

<div class="post-metadata">

**Author:** ![dgudkov](https://community.easymorph.com/user_avatar/community.easymorph.com/dgudkov/32/5_2.png) [@dgudkov](https://community.easymorph.com/u/dgudkov)\
**Post date:** [August 26, 2025, 1:15pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/14 "2025-08-26T13:15:44Z")

</div>

Thanks for the update. We'll investigate what might cause this behavior.

---

<div class="post-metadata">

**Author:** ![adt32](https://community.easymorph.com/letter_avatar_proxy/v4/letter/a/839c29/32.png) [@adt32](https://community.easymorph.com/u/adt32)\
**Post date:** [August 28, 2025, 9:00am UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/15 "2025-08-28T09:00:34Z")

</div>

Hello and thank you Dimitry,  
However, I have another question for you,  
The following microsoft graph request works correctly,  
[https://graph.microsoft.com/v1.0/auditLogs/signIns](https://graph.microsoft.com/v1.0/auditLogs/signIns)  
However, I can't get a table containing more than 1000 records in easymorph in an elegant and/or efficient way.  
In fact, these queries return the first thousand records, with a field  
@odata.nextLink field containing the url containing the query to obtain the next 1000 records, and so on until @odata.nextLink is empty ... .

 ![image](https://community.easymorph.com/uploads/default/original/2X/d/d8acbaa442995403283c19671d40c57db1d1914e.png)

I know the iterate functions, but in this particular case, I can't see how to go about it properly. Have you ever come across this type of problem and how did you resolve it, thanking you in advance for your help, as I think the case is going to become more widespread for me.  
I haven't found anything on the forum .

---

<div class="post-metadata">

**Author:** ![dgudkov](https://community.easymorph.com/user_avatar/community.easymorph.com/dgudkov/32/5_2.png) [@dgudkov](https://community.easymorph.com/u/dgudkov)\
**Post date:** [August 28, 2025, 5:31pm UTC](https://community.easymorph.com/t/future-support-for-microsoft-graph-in-easymorph/6303/16 "2025-08-28T17:31:43Z")

</div>

Check out this topic: [GraphQL API endpoint with pagination](https://community.easymorph.com/t/graphql-api-endpoint-with-pagination/4958)
