<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Windows Azure Active Directory Graph Team</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/aadgraphteam/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/feed.xml</link>
    <description />
    <lastBuildDate>Sat, 24 Mar 2018 21:49:20 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Microsoft Graph or Azure AD Graph</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/microsoft-graph-or-azure-ad-graph</link>
      <pubDate>Fri, 08 Jul 2016 22:14:38 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/?p=485</guid>
      <description><![CDATA[Howdy folks,

We've seen a few posts recently on Stack Overflow from developers asking whether...]]></description>
      <content:encoded><![CDATA[Howdy folks,

We've seen a few posts recently on Stack Overflow from developers asking whether they should be using <a href="https://graph.microsoft.io/">Microsoft Graph</a> (graph.microsoft.com) vs <a href="https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-operations-overview">Azure AD Graph</a> (graph.windows.net).  So we thought we'd provide some guidance, as well as a bit of a roadmap to clarify things, for new and existing developers who require directory-based features. <strong>In general, we recommend the use of Microsoft Graph over Azure AD Graph, as Microsoft Graph is where we are investing for Microsoft cloud services.</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/07/MSGraph_Graphic.png"><img width="1377" height="689" class="alignnone wp-image-486" alt="MSGraph_Graphic" src="https://msdnshared.blob.core.windows.net/media/2016/07/MSGraph_Graphic.png" /></a>

<strong>Roadmap for AAD Graph and Microsoft Graph</strong>

First of all, we'll lay out the roadmap for Microsoft Graph (as it is related to Azure AD Graph functionality).  In each of the sections below we'll also highlight the opportunities and implications for developers.

<strong>Two endpoints, different functionality</strong>

Currently (as of 10 May, 2017) Microsoft Graph supports most of the directory features that Azure AD Graph supports, but not all.  In some cases, Microsoft Graph supports functionality that is not in Azure AD Graph (such as ability to make $select projection queries, open extensions, Office 365 groups and much more).

Even with those gaps, we <strong>strongly</strong> recommend that developers start using Microsoft Graph over Azure AD Graph, unless those specific gaps prevent you from using Microsoft Graph right now.  For a list of the high level gaps, as of 7 April, 2017, please see the end of this blog post for more details.

<strong>Microsoft Graph closing the gap with Azure AD Graph</strong>

The Microsoft Graph team is working hard to close the gap between Microsoft Graph and Azure AD Graph functionality, making it easier for developers to choose Microsoft Graph.  We will also start to introduce newer directory features on Microsoft Graph (and in some cases <strong>only</strong> on Microsoft Graph).  You'll start to see the gap closure and new features over the coming months.  Please monitor both <a href="https://dev.office.com/blogs">https://dev.office.com/blogs</a> and the Microsoft Graph <a href="https://graph.microsoft.io/en-us/changelog">changelog</a> to see this happen real-time so to speak!

<strong>Microsoft Graph supports all functionality exposed by Azure AD Graph</strong>

At some point in the near future (we hope within 6 months) Microsoft Graph will support <strong>all</strong> functionality that Azure AD Graph offers to access directory data (and more).  At this point developers building new apps (or integrating an existing app with Microsoft cloud services) will be directed to use Microsoft Graph in favor of Azure AD Graph.  For newly registered apps we may prevent the app from calling Azure AD Graph.

<strong>NOTE:  </strong>For existing applications that already use Azure AD Graph<strong>, nothing changes </strong>and it's business as usual<strong>.</strong>  The Azure AD Graph GA endpoint will remain fully available for all applications including production applications.  We will continue to closely monitor this API, fix service issues and strive to continue to provide 99.99% service availability.

For developers with existing apps that call Azure AD Graph, we will provide guidance for those who want to switch their apps over to Microsoft Graph (from Azure AD Graph).  Additionally, we'll do it in such a way that existing users for your applications won’t need to re-consent to your application to access directory data through Microsoft Graph.

<b>Client libraries</b>

While we continue to support the Azure AD Graph client library, this is only available for .Net applications and it is maintenance mode.  On the other hand, Microsoft Graph client libraries are available on <a href="https://developer.microsoft.com/en-us/graph/code-samples-and-sdks">multiple platforms and languages</a>, that enables you to have more choice in how you can use directory data in apps for your customers.

<strong>We'd like to hear from you</strong>

We hope this post clarifies the future of both Microsoft Graph and Azure AD Graph, and how you should think about developing against these APIs.  In general, we recommend the use of Microsoft Graph over Azure AD Graph, as Microsoft Graph is where we are investing for Microsoft cloud services. As always, we'd like to hear what you think of our roadmap plan.

<strong>Gaps between Microsoft Graph and Azure AD Graph</strong>
<table width="810" border="1">
<tbody>
<tr>
<td width="450"><strong>AAD Graph Capability</strong></td>
<td width="450"><strong>Status in Microsoft Graph (March 23, 2018)</strong></td>
</tr>
<tr>
<td width="450">1. Differential query (aka delta sync) for users, groups and organizational contacts</td>
<td width="450"><strong>GA availability</strong> with <a href="https://developer.microsoft.com/en-us/graph/docs/concepts/delta_query_overview">Delta Query</a>.

Delta query on organizational contacts is not available but is planned (see below).

Additionally, certain optimization headers, sync from now and some other parameters are not yet supported in Delta Query, but will be available soon.</td>
</tr>
<tr>
<td width="450">2. Organizational contact resource type</td>
<td width="450">In preview.  Move to GA is planned.</td>
</tr>
<tr>
<td width="450">3.     Management of applications including:
<p style="padding-left: 30px">a. Application and service principal entity types</p>
<p style="padding-left: 30px">b. Managing assignment of applications to users and groups</p>
<p style="padding-left: 30px">c. Assigning OAuth permissions to apps</p>
</td>
<td width="450">This capability is available in preview.

Extensive breaking changes are planned over the coming few months for application APIs, in preview, before this rolls out to Microsoft Graph v1.0.</td>
</tr>
<tr>
<td width="450">4.     Partner admin on behalf of capability (for resellers and syndicators who are part of the <a href="https://partner.microsoft.com/en-US/cloud-solution-provider">Cloud Solution Provider program</a>)</td>
<td width="450"> <strong>GA availability</strong>.  See <a href="https://developer.microsoft.com/en-us/graph/docs/concepts/auth_cloudsolutionprovider">CSP support in Microsoft Graph</a>.</td>
</tr>
<tr>
<td width="450">5.     Domain resource type (mainly relevant for Cloud Solution Providers)</td>
<td width="450"><strong>GA availability</strong>. See <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/domain">Domain</a>.</td>
</tr>
<tr>
<td width="450">6.     Contracts resource type (only relevant for Cloud Solution Providers)</td>
<td width="450"><strong>GA availability</strong>. See <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/contract">Contract</a>.</td>
</tr>
<tr>
<td width="450">7.     Registering directory schema extension definitions</td>
<td width="450"><strong>GA availability.</strong> Extending resources with application data is available with <a href="https://developer.microsoft.com/en-us/graph/docs/concepts/extensibility_overview">Extensions</a> and schema extensions.

NOTE: Not available for extending application or service principal resource types.</td>
</tr>
<tr>
<td width="450">8.     Batching</td>
<td width="450"><b>GA availability</b><span style="float: none;background-color: transparent;color: #333333;cursor: text;font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size: 16px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;line-height: 24px;text-align: left;text-decoration: none;text-indent: 0px">: </span>See <a href="https://developer.microsoft.com/en-us/graph/docs/concepts/json_batching">JSON batching</a></td>
</tr>
<tr>
<td width="450">9.     Missing properties on the User resources (sipProxyAddress, otherMails, licenseDetails)</td>
<td width="450"><strong>GA availability</strong>: See <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user">User</a> for imAddresses and licenseDetails.

otherMails is still not available, but coming soon.</td>
</tr>
<tr>
<td width="450">10.  GetObjectsByObjectIds method</td>
<td width="450"><strong>GA availability</strong>. See <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/directoryobject_getbyids">getByIds method</a>.</td>
</tr>
<tr>
<td width="450">11.  IsMemberOf method</td>
<td width="450">Not planned.  Use checkMemberGroups method instead.</td>
</tr>
<tr>
<td width="450">12.  Manage users in a B2C tenant (set local accounts, sign in names)</td>
<td width="450">Coming soon (preview)</td>
</tr>
</tbody>
</table>
<ol></ol>
<em>Thanks,</em>

<em>Dan Kershaw on behalf of the Microsoft Graph and Azure AD Graph teams</em>]]></content:encoded>
    </item>
    <item>
      <title>Azure AD will now record consent for mobile client apps</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/azure-ad-will-now-record-consent-for-mobile-client-apps</link>
      <pubDate>Fri, 04 Mar 2016 23:26:38 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/?p=481</guid>
      <description><![CDATA[We'll be rolling out an update to the way that we record consent grants in the coming weeks. With...]]></description>
      <content:encoded><![CDATA[We'll be rolling out an update to the way that we record consent grants in the coming weeks. With this change, we will start to centrally record consent given by users to mobile or native client apps (like applications on mobile devices like laptops, PCs, iOS and Android) that access Microsoft APIs (like Microsoft Graph, Office 365 and Azure AD). Recording consent centrally is something that already happens for web apps. Now we are extending this to mobile client apps so that end users and administrators can have a consistent experience for using and managing both types of app.
<h3>What does this mean for end users?</h3>
<ol>
	<li>Consent is required one-time only per app, and is good across all devices for the same app, which was not the case previously.</li>
	<li>App revocation is now possible. Revocation is performed once, and revokes the app across all devices.  End user revocation (of the mobile app's access to user data) can be accomplished through the Office 365 portal: <a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fportal.office.com%2faccount%2f%23apps&amp;data=01%7c01%7cdkershaw%40microsoft.com%7c9004c0f966a240a2c7f808d3422ff481%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=XcOG%2fRFC%2fUO3bXmkj8u1lxpufYcj3Kt9bXei1uBL774%3d">https://portal.office.com/account/#apps</a>.</li>
	<li>For existing mobile apps that users have already consented (prior to this change), the app continues to work as before.  The app will only show up in the Office 365 portal after the user has been asked to re-consent.</li>
</ol>
<h3>What does this mean for administrators?</h3>
<ol type="1">
	<li value="1">Admins can now consent for mobile client apps on behalf of their organization.</li>
	<li>The mobile application will now appear in the <a href="https://manage.windowsazure.com/">Azure Management Portal</a> applications list.
<ol type="a">
	<li value="1">The app dashboard shows app usage</li>
	<li>Admins can apply policy for the app (conditional access and assigning the app to users to control access)</li>
</ol>
</li>
	<li>Any operations on mobile client apps (consent, revocation, app assignment, conditional access, sign in etc) will now show up in audit logs.</li>
</ol>
<h3>What does this mean for developers?</h3>
Developers will now be able to write apps that can query Azure AD (through Azure AD or Microsoft Graph) to get consented mobile app and any consent or assignment links for those applications.]]></content:encoded>
    </item>
    <item>
      <title>New graph API consent permissions</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/new-graph-api-consent-permissions</link>
      <pubDate>Tue, 06 Oct 2015 16:37:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/10/06/new-graph-api-consent-permissions/</guid>
      <description><![CDATA[Today we're glad to announce a few updates to our Azure AD Graph API permission scopes.&nbsp; Some...]]></description>
      <content:encoded><![CDATA[<p>Today we're glad to announce a few updates to our Azure AD Graph API permission scopes.&nbsp; Some of these new permission scopes can be consented by&nbsp;non-admin users, enabling greater reach for your applications.&nbsp; This is something the team is really excited about.&nbsp;</p>
<h2>The new permission scopes</h2>
<p>In addition to the four existing permission scopes (the four listed at the bottom in the Azure Management Portal screenshot below), we've now added four new delegated scopes (and an additional app-only permission scope which is not shown).</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/45/3513.new%20graph%20permissions.JPG" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-45/3513.new-graph-permissions.JPG"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/45/3513.new%20graph%20permissions.JPG" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-45/3513.new-graph-permissions.JPG" alt="" border="0" /></a></p>
<p>In order to enable a number of key scenarios, developers previously needed to request privileged permissions that required an administrator to consent.&nbsp; By introducing a new set of more granular permissions, we've allowed some key scenarios to be enabled for your app that can either be consented by a non-admin user.&nbsp;For example with the "Read all users' basic profiles" you can now build a people picking experience to control access to resources in your application, that non-admin users can consent to.&nbsp;While introducing this additional flexibility for you, we still&nbsp;ensure that privileged operations can only be consented by an administrator. This allows you to create applications that can reach a larger audience, while protecting privileged operations<strong>.</strong> Additional permissions around groups still require admin consent, but are now less privileged in nature than the pre-existing permission scopes.&nbsp;</p>
<div>
<table style="width: 600px;" border="2" cellspacing="2" cellpadding="2">
<tbody>
<tr>
<td width="50%">
<p><span style="background-color: #ffffff;"><strong>Scenario</strong></span></p>
</td>
<td width="30%">
<p><span style="background-color: #ffffff;"><strong>Permission scopes required</strong></span></p>
</td>
<td width="20%">
<p><span style="background-color: #ffffff;"><strong>Admin consent required?</strong></span></p>
</td>
</tr>
<tr>
<td>
<p>People picker - core to many applications is the ability to pick users to control access to resources in your application.</p>
</td>
<td>
<p>Read all users' basic profiles</p>
</td>
<td>
<p>No</p>
</td>
</tr>
<tr>
<td>
<p>Org chart navigator -&nbsp; see a user's reports and their management chain.</p>
</td>
<td>
<p>Read all users' full profiles</p>
</td>
<td>
<p>Yes</p>
</td>
</tr>
<tr>
<td>
<p>Groups and memberships viewer</p>
</td>
<td>
<p>Read all users' basic profiles</p>
<p>Read all groups</p>
</td>
<td>
<p>Yes</p>
</td>
</tr>
<tr>
<td>
<p>Group management service that allows users to create, manage and delete groups.&nbsp; (NOTE the user of the app would need to be in a role that allows for group creation and management).</p>
</td>
<td>
<p>Read all users' basic profiles</p>
<p>Read and write all groups</p>
</td>
<td>
<p>Yes</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>So you might ask - how can we allow an end user to consent to release&nbsp; information to an application about other users in their organization?&nbsp; The new permission "Read all users' basic profiles"&nbsp;(which has the scope claim value "user.readbasic.all") releases only limited information about other users.&nbsp;When querying the user entity, it exposes&nbsp;only enough information to make a people picker useful, without releasing information like phone numbers or location.&nbsp; To be specific, it allows the calling application to get the first name, last name, display name, photo and email address of other users in the organization of the signed-in user.</p>
<p>We've also updated a few of the existing permission scopes:</p>
<ol>
<li value="1">We've restricted the "Read and write directory data" permission so that it no longer allows the application to reset other user passwords.</li>
<li>We've extended the "Sign in and read user profile" permission to also allow the application to read some basic information about the company (company display name and verified domains) through the tenantDetails entity.&nbsp; NOTE:&nbsp;For any users who have already consented to this permission (prior to this update), the application will not have access to the tenantDetails entity.</li>
</ol>
<h2>Great new permissions topic</h2>
<p>To go with this release, we've updated our <a href="https://msdn.microsoft.com/en-us/Library/Azure/Ad/Graph/api/graph-api-permission-scopes">Azure AD Graph API permissions topic</a>.&nbsp; This topic goes into greater detail on all our permission scopes, describing:</p>
<ul>
<li>Concepts such as delegated vs app-only permissions, and full vs basic profiles for users and groups.</li>
<li>Permission scope details highlighting what each scope is capable of, if it's app-only or delegated, and whether it requires an admin to consent.</li>
</ul>
<h2>What's next?</h2>
<p>This change not only introduced new permission scopes, but also an update to our underlying platform that will allow our team to introduce&nbsp;additional permission scopes more quickly.&nbsp; New scopes will be driven by developer and application scenarios and by our principles to align permission scopes along the entities in our API and to explicitly split out new permission scopes for privileged operations (such as changing or resetting passwords).</p>
<h2>What do you think?</h2>
<p>As always, we'd love to hear more from you all.&nbsp; Are these new permission scopes useful?&nbsp; Are there any permission scopes you'd like to see and why those are important for your scenarios?</p>]]></content:encoded>
    </item>
    <item>
      <title>Announcing the preview of Domain Management API</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/announcing-the-preview-of-domain-management-api</link>
      <pubDate>Fri, 24 Jul 2015 15:40:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/07/24/announcing-the-preview-of-domain-management-api/</guid>
      <description><![CDATA[Hi all,
It is my pleasure to announce the availability of the Domain Management Preview feature in...]]></description>
      <content:encoded><![CDATA[<p>Hi all,</p>
<p>It is my pleasure to announce the availability of the Domain Management Preview feature in the beta version of Azure AD Graph API. Domain Management allows you to add, verify, update and remove domains associated with your Azure AD tenant. This article shows you how to add a new domain (contoso.com) to an existing Azure AD tenant (contoso.onmicrosoft.com) using the Graph API, and configure it for use with Exchange Online for mail routing.</p>
<p>If you&rsquo;re not familiar with the Graph API, you may want to review the <a href="https://msdn.microsoft.com/en-us/library/azure/dn835136.aspx">Quickstart for the Azure AD Graph API</a> article to get an overview of prerequisites and requirements for using the API.</p>
<p>&nbsp;</p>
<p><strong>Optional: List existing domains in my Azure AD tenant</strong></p>
<p>Here, I issue a request to fetch the list of Domain entities&nbsp;in my Azure AD tenant, which returns a single domain named contoso.onmicrosoft.com:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>REQUEST</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p><strong>GET</strong> https://graph.windows.net/contoso.onmicrosoft.com/domains?api-version=beta</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>RESPONSE</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.metadata":"https://graph.windows.net/contoso.onmicrosoft.com<br />&nbsp; /$metadata#domains",
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "value":[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "authenticationType":"Managed",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "availabilityStatus":null,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isAdminManaged":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isDefault":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isInitial":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isRoot":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isVerified":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"contoso.onmicrosoft.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedServices":["Email","OfficeCommunicationsOnline"]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p><strong></strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Step 1: Add a new domain (contoso.com) to Azure AD tenant</strong></p>
<p>To add a new Domain entity, issue a POST request with the required properties in the request body.&nbsp;Here is an example of creating a new domain named contoso.com:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>REQUEST</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p><strong>POST</strong> <a href="https://graph.windows.net/contoso.onmicrosoft.com/domains?api-version=beta">https://graph.windows.net/contoso.onmicrosoft.com/domains?api-version=beta</a></p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>BODY</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name" : "contoso.com"</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>RESPONSE</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.metadata":"https://graph.windows.net/contoso.onmicrosoft.com/$metadata#domains/@Element",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "authenticationType":"Managed",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "availabilityStatus":null,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isAdminManaged":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isDefault":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isInitial":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isRoot":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<span style="background-color: #ffff99;">isVerified":false</span>,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedServices":[]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Once the Domain entity is created for contoso.com, its properties are returned with the <strong>isVerified </strong>property set to &ldquo;false&rdquo;, indicating that it is an unverified domain.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Step 2: Request the verification DNS records required to verify the domain</strong></p>
<p>You can&rsquo;t use the domain with your Azure AD tenant until you have successfully verified that you own this domain. To verify the ownership of the domain, first, use the verificationDnsRecord navigation property to retrieve the DNS verification records:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>REQUEST</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p><strong>GET</strong> <a href="https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com/verificationDnsRecords?api-version=beta">https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com/verificationDnsRecords?api-version=beta</a></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>RESPONSE</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.metadata":"https://graph.windows.net/contoso.onmicrosoft.com/$metadata#domainDnsRecords",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "value":[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.type":"Microsoft.DirectoryServices.DomainDnsTxtRecord",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dnsRecordId":"aceff52c-06a5-447f-ac5f-256ad243cc5c",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isOptional":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "label":"contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "recordType":"Txt",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedService":null,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ttl":3600,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "text":"MS=ms86120656"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.type":"Microsoft.DirectoryServices.DomainDnsMxRecord",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dnsRecordId":"5fbde38c-0865-497f-82b1-126f596bcee9",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isOptional":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "label":"contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "recordType":"Mx",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedService":null,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ttl":3600,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mailExchange":"ms86120656.msv1.invalid",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "preference":32767</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>To prove that you own the domain, you need to sign in to your account at your DNS host to create either a TXT or MX record based on the verification DNS records returned.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Step 3: Invoke verify function to verify domain ownership</strong></p>
<p>Once you have created the necessary DNS record at your DNS host, invoke the <strong>Verify</strong> function to start the verification process:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>REQUEST</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p><strong>POST</strong>&nbsp; <a href="https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com/verify?api-version=beta">https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com/verify?api-version=beta</a></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>RESPONSE</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.metadata":"https://graph.windows.net/contoso.onmicrosoft.com/$metadata#domains/@Element",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "authenticationType":"Managed",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "availabilityStatus":"AvailableImmediately",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isAdminManaged":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isDefault":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isInitial":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isRoot":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: #ffff99;">"isVerified":true</span>,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedServices":[]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Upon successful verification, the contoso.com Domain properties are returned, with <strong>isVerified </strong>set to &ldquo;true&rdquo;.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Step 4: Indicate which services will be using this domain (e.g., Email)</strong></p>
<p>Indicate what you will be using this domain for by configuring the supportedServices attribute on the domain entity. To do so, you must first retrieve the Domain entity for the contoso.com domain:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>REQUEST</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p><strong>GET</strong> <a href="https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com?api-version=beta">https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com?api-version=beta</a></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>RESPONSE</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.metadata":"https://graph.windows.net/contoso.onmicrosoft.com/$metadata#domains/@Element",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "authenticationType":"Managed",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "availabilityStatus":null,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isAdminManaged":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isDefault":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isInitial":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isRoot":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isVerified":true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedServices":[]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>In this case, the domain has not yet been configured for any use. To enable the domain for use with Exchange Online for mail routing, add &ldquo;Email&rdquo; to the supportedServices attribute array and issue a PATCH request on the attribute:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>REQUEST</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p><strong>PATCH</strong>&nbsp; <a href="https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com?api-version=beta">https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com?api-version=beta</a></p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>BODY</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedServices":["Email"]</p>
<p>}<strong></strong></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Verified domains can be configured for various uses. For example, a tenant admin can configure a verified domain for <a href="https://support.office.com/en-us/article/Yammer-activation-guide-4f924c74-87d2-49d0-a4f6-cba3ce2b0e7c">Yammer service activation</a> and multiple domains for <a href="https://support.office.com/en-US/article/How-Office-365-manages-DNS-records-5980474A-097F-4F21-A864-21245314957F">O365 domain full redelegation</a> in O365 admin portal. These configurations will be reflected in the supportedServices attribute on the Domain entity. These values are read-only. You cannot use Graph API to add/remove them. Values which you can add/remove using Graph API includes:</p>
<ol>
<li><strong>Email </strong>&ndash; For Exchange Online mail routing</li>
<li><strong>OfficeCommunicationsOnline </strong>&ndash; For use with Skype for Business</li>
<li><strong>Intune </strong>&ndash; For use with Intune Online Service.</li>
</ol>
<p>I will not cover the list of read-only values in this article, but they will be made available shortly through MSDN documentation.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Step 5: Request for DNS configuration </strong><strong>based on domain usage configured</strong></p>
<p>Now that you have updated the supportedServices attribute on the Domain entity, you can request for a list of DNS records&nbsp;which you need to configure at your DNS host by using the serviceConfigurationRecords navigation property:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>REQUEST</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p><strong>GET</strong>&nbsp; <a href="https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com?api-version=beta">https://graph.windows.net/contoso.onmicrosoft.com/domains/contoso.com/serviceConfigurationRecords?api-version=beta</a></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="623">
<p>RESPONSE</p>
</td>
</tr>
<tr>
<td valign="top" width="623">
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.metadata":"https://graph.windows.net/contoso.onmicrosoft.com/$metadata#domainDnsRecords",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "value":[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.type":"Microsoft.DirectoryServices.DomainDnsMxRecord",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dnsRecordId":"2b672ab0-0bee-476f-b334-be436f2449bd",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isOptional":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "label":"contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "recordType":"Mx",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedService":"Email",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ttl":3600,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mailExchange":"contoso-com.mail.protection.outlook.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "preference":0</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.type":"Microsoft.DirectoryServices.DomainDnsTxtRecord",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dnsRecordId":"62bea837-a0d7-4466-b6d9-ff6bd1db8671",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isOptional":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "label":"contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "recordType":"Txt",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedServices":"Email",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ttl":3600,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "text":"v=spf1 include: spf.protection.outlook.com&nbsp;~all"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "odata.type":"Microsoft.DirectoryServices.DomainDnsCnameRecord",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dnsRecordId":"eea5ce9e-8deb-4ab7-a114-13ed6215774f",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isOptional":false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "label":"autodiscover.contoso.com",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "recordType":"CName",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "supportedServices":"Email",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ttl":3600,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "canonicalName":"autodiscover.outlook.com"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Features that are not supported</strong></p>
<p>You cannot use Graph API to enable a verified domain for federation, nor configure federation settings for an existing federated domain. You have to do so via Azure AD PowerShell. However, any domain changes made via Azure AD PowerShell will be reflected in Graph API.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Feedback</strong></p>
<p>We'd love to hear from you.&nbsp; Please give us feedback through our <a href="https://social.msdn.microsoft.com/Forums/en-US/home?forum=WindowsAzureAD">forums</a>&nbsp;or through comments below.</p>
<p>&nbsp;&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Graph API updates: api-version=1.6 and a new Graph client library</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/graph-api-updates-api-version1-6-and-a-new-graph-client-library</link>
      <pubDate>Tue, 23 Jun 2015 16:32:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/06/23/graph-api-updates-api-version1-6-and-a-new-graph-client-library/</guid>
      <description><![CDATA[Api-version 1.6
The Azure AD Graph team is very pleased to announce the availability of the next...]]></description>
      <content:encoded><![CDATA[<h2>Api-version 1.6</h2>
<p>The Azure AD Graph team is very pleased to announce the availability of the next version of Azure AD Graph REST API, api-version=1.6.&nbsp;There are no major changes from 1.5 to 1.6.</p>
<p>So you might ask why we&rsquo;ve revved the version here.&nbsp; In March of this year, we made some changes to the 1.5 API, believing that these were non-breaking changes.&nbsp; However, due to an issue with a Graph client library dependency, this service side change caused a breaking change in the Graph client library (versions 2.0.5 and earlier).&nbsp; We were forced to roll back the service side change, and pause any API changes on the service side.&nbsp; More details can be found in this <a href="https://stackoverflow.com/questions/29030118/odata-error-a-value-without-a-type-name-was-found-and-no-expected-type-is-avai">stack overflow question</a>.</p>
<p>Since March, we&rsquo;ve:</p>
<ol>
<li>introduced more validation testing gates before releasing new client libraries and</li>
<li>introduced a fix in Graph client library version 2.0.8 that allows updates to the Graph REST API without breaking the client (by ignoring any unknown collections)</li>
</ol>
<p>Now we&rsquo;re releasing a new API version &ndash; api-version=1.6 &ndash; that will allow our team to release additional directory functionality and capabilities through the Graph REST API, without breaking any existing clients (2.0.6 and earlier).&nbsp; As usual, you can try it out through <a href="https://graphexplorer.cloudapp.net/">Graph Explorer</a>.</p>
<p>We will document the version changes through our regular MSDN documentation channels in our <a href="https://msdn.microsoft.com/en-us/library/azure/dn835125.aspx">versioning document</a>, as well as within our <a href="https://msdn.microsoft.com/en-us/Library/Azure/Ad/Graph/api/api-catalog">interactive reference documentation</a>.</p>
<h2>A new Azure AD graph client library</h2>
<p>As part of this update, we&rsquo;ll also be releasing graph client library version 2.1.0.&nbsp; Versions 2.1.x will be tied to REST API version 1.6 (while graph client library 2.0.x will be<br />tied to REST API version 1.5).</p>
<p>We&rsquo;ll be updating the graph client library on a regular basis to make new functionality (and bug fixes) available to developers who prefer to use a client library vs pure REST API calls.</p>
<p>You can find the latest .Net (portable) client library on nuget.org <a href="https://www.nuget.org/packages/Microsoft.Azure.ActiveDirectory.GraphClient/">here</a>.</p>
<h2>Feedback</h2>
<p>We&rsquo;re always interested to hear what you think, so please let us know if you have any feedback or suggestions for the Graph API or client library.</p>]]></content:encoded>
    </item>
    <item>
      <title>Graph Explorer gets a new look</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/graph-explorer-gets-a-new-look</link>
      <pubDate>Mon, 01 Jun 2015 20:07:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/06/01/graph-explorer-gets-a-new-look/</guid>
      <description><![CDATA[Folks,
You may have noticed that Graph Explorer looks a little different these days.&nbsp; We've...]]></description>
      <content:encoded><![CDATA[<p>Folks,</p>
<p>You may have noticed that <a title="Graph Explorer" href="https://graphexplorer.cloudapp.net/">Graph Explorer</a> looks a little different these days.&nbsp; We've made a few alterations and changes, together with a new improved UI, and we hope to put the source code on Github pretty soon.&nbsp; The main changes that you'll see are:</p>
<ol>
<li>Graph Explorer requires users to consent to&nbsp;allow it access to their directory</li>
<li>It has autocomplete capability for entities (to see it click Use Demo Company, and click in the text box)</li>
<li>Support for /me and /myorganization aliases</li>
<ol>
<li><a href="https://graph.windows.net/me">https://graph.windows.net/me</a></li>
<li><a href="https://graph.windows.net/myorganization/users">https://graph.windows.net/myorganization/users</a></li>
</ol>
<li>You can now&nbsp;press Enter/Carriage Return to execute request (small but great addition)</li>
<li>Additional&nbsp;response headers&nbsp;section &ndash; we can use this for troubleshooting issues you might have when running queries against Azure AD Graph API</li>
<li>There's now a JSON viewer</li>
<li>No support for displaying thumbnail photo</li>
</ol>
<p>We hope you'll enjoy using the new version.&nbsp; We're looking to add some more improvements,&nbsp;like making appropriate responses navigable, and displaying thumbnail photo.</p>
<p>Let us know what you think and if you have any new suggestions.</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Announcing the preview of Graph Reports and Events API</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/announcing-the-preview-of-graph-reports-and-events-api</link>
      <pubDate>Fri, 15 May 2015 15:51:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/05/15/announcing-the-preview-of-graph-reports-and-events-api/</guid>
      <description><![CDATA[We&rsquo;re pleased to announce that Activity and Events Reporting data is now available, in...]]></description>
      <content:encoded><![CDATA[<p>We&rsquo;re pleased to announce that Activity and Events Reporting data is now available, in preview, through the Azure AD Graph API.&nbsp;&nbsp; You may have seen some of this information already surfaced through the Azure Management Portal, under the <strong>Reports</strong> tab in the Active Directory extension.&nbsp; These reports and activity logs are now also available to developers through the Graph API with this release. For more details, check out the MSDN documentation here: <a href="https://msdn.microsoft.com/en-us/library/azure/mt126081.aspx">Azure AD Reports and Events (Preview)</a></p>
<p>Like other applications using the Graph API, access is available through requesting permission scopes to Graph API through the Azure Management Portal.&nbsp; To access reporting data, your application will need to either:</p>
<ul>
<li>request the <strong>Read directory data</strong> delegated permission AND the user needs to be a company administrator, OR</li>
<li>in the case of application-only, the application needs to be given application permissions to <strong>Read directory data</strong>.</li>
</ul>
<h2>Example REST API calls</h2>
<p>Here are a couple of examples for you, so you can see how easy it is to get this rich information.&nbsp;<strong>Note</strong>: since this is a preview feature, these queries are ONLY available using api-version=beta.</p>
<h3>Viewing the list of reports</h3>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="779">
<p><strong>GET</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="779">
<p><a href="https://graph.windows.net/contoso.com/reports?api-version=beta">https://graph.windows.net/contoso.com/reports?api-version=beta</a></p>
</td>
</tr>
<tr>
<td valign="top" width="779">
<p><strong>HEADERS</strong></p>
<p><strong>Authorization: Bearer</strong><strong><br /><br />&nbsp; <strong>&nbsp; eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1T&hellip;.</strong></strong></p>
</td>
</tr>
<tr>
<td valign="top" width="779">
<p><strong>RESPONSE: 200</strong></p>
<p>{<br />&nbsp; "@odata.context":"https://graph.windows.net/contoso.com/$metadata#reports","value":[</p>
<p>&nbsp;&nbsp; {<br />&nbsp; "Name":"auditEvents","LicenseRequired":"False"</p>
<p>&nbsp;&nbsp;&nbsp; },{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "Name":"accountProvisioningEvents","LicenseRequired":"False"</p>
<p>&nbsp;&nbsp;&nbsp; },{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "Name":"signInsFromUnknownSourcesEvents","LicenseRequired":"False"</p>
<p>&nbsp;&nbsp;&nbsp; },{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp; &ldquo;Name":"signInsFromIPAddressesWithSuspiciousActivityEvents","LicenseRequired":"True"</p>
<p>&nbsp;&nbsp;&nbsp; },{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "Name":"signInsFromMultipleGeographiesEvents","LicenseRequired":"False"</p>
<p>&nbsp;&nbsp;&nbsp; },{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "Name":"signInsFromPossiblyInfectedDevicesEvents","LicenseRequired":"True"</p>
<p>&nbsp;&nbsp;&nbsp; },{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "Name":"irregularSignInActivityEvents","LicenseRequired":"True"</p>
<p>&nbsp;&nbsp;&nbsp; },{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "Name":"allUsersWithAnomalousSignInActivityEvents","LicenseRequired":"True"</p>
<p>&nbsp;&nbsp;&nbsp; },{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "Name":"signInsAfterMultipleFailuresEvents","LicenseRequired":"False"</p>
<p>&nbsp;&nbsp;&nbsp; }&nbsp;<br />&nbsp; ]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3>Viewing a specific report type</h3>
<p>To view data in a specific report type, query /reports/&lt;reportName&gt;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="889">
<p><strong>GET</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="889">
<p><a href="https://graph.windows.net/contoso.com/reports/auditEvents?api-version=beta">https://graph.windows.net/contoso.com/reports/auditEvents?api-version=beta</a></p>
</td>
</tr>
<tr>
<td valign="top" width="889">
<p><strong>HEADERS</strong></p>
<p><strong>Authorization: Bearer</strong><strong><br /><br />&nbsp; <strong>&nbsp; eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1T&hellip;.</strong></strong></p>
</td>
</tr>
<tr>
<td valign="top" width="889">
<p><strong>RESPONSE: 200</strong></p>
<p>{<br />&nbsp; "@odata.context":"https://graph.windows.net/contoso.com/reports/auditEvents?api-version=beta","value":[</p>
<p>{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "id":"BL2GR1RDS122.GRN001.msoprd.msft.net_4751480","eventTime":"2015-05-13T19:02:01.8779138Z","actor":"00000014-0000-0000-c000-000000000000","action":"Add<br />&nbsp; User.","target":"fpeeters@contosobuild.com","actorDetail":"Other=a7e1a631-462a-4d9c-992d-5fcf04e94e4b;<br />&nbsp; SPN=00000014-0000-0000-c000-000000000000","targetDetail":"UPN=fpeeters@contosobuild.com","updatedProperties":null</p>
<p>&nbsp;&nbsp;&nbsp; },{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; "id":"BL2GR1RDS122.GRN001.msoprd.msft.net_4751479","eventTime":"2015-05-13T19:02:01.8779138Z","actor":"00000014-0000-0000-c000-000000000000","action":"Add<br />&nbsp; User.","target":"lgundersen@contosobuild.com","actorDetail":"Other=a7e1a631-462a-4d9c-992d-5fcf04e94e4b;<br />&nbsp; SPN=00000014-0000-0000-c000-000000000000","targetDetail":"UPN=lgundersen@contosobuild.com","updatedProperties":null</p>
<p>&nbsp;&nbsp;&nbsp; },{<br />&nbsp; "id":"BL2GR1RDS122.GRN001.msoprd.msft.net_4751477","eventTime":"2015-05-13T19:02:01.8622897Z","actor":"00000014-0000-0000-c000-000000000000","action":"Add<br />&nbsp; User.","target":"omakinen@contosobuild.com","actorDetail":"Other=a7e1a631-462a-4d9c-992d-5fcf04e94e4b;<br />&nbsp; SPN=00000014-0000-0000-c000-000000000000","targetDetail":"UPN=omakinen@contosobuild.com","updatedProperties":null</p>
<p>&nbsp;&nbsp;&nbsp; }&nbsp;<br />&nbsp; ]</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3>To view a report type by a date range</h3>
<p>Most datetime fields are filterable. Use $filter OData querying format to query different intervals. For example:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="889">
<p><strong>GET</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="889">
<p><a href="https://graph.windows.net/contoso,com/reports/auditEvents?api-version=beta&amp;$filter=eventTime%20gt%202015-05-08%20and%20eventTime%20lt%202015-05-11">https://graph.windows.net/contoso,com/reports/auditEvents?api-version=beta&amp;$filter=eventTime<br />&nbsp; gt 2015-05-08 and eventTime lt 2015-05-11</a></p>
</td>
</tr>
</tbody>
</table>
<p>Pretty simple &ndash; but if you want to find out more, check out our simple <a href="https://github.com/AzureADSamples/WebApp-GraphAPI-Reporting">Report API Sample</a> to see how to get all the reports as well as to filter the reports on dateTime. &nbsp;We also have a <a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-reporting-api-getting-started/">Reporting API getting started guide</a> for simple rest calls. Using only REST calls, this API can easily be integrated into SEIM tools such as splunk and arcsight.</p>
<h2>Feedback</h2>
<p>We'd love to hear from you.&nbsp; Please give us feedback through our <a href="https://social.msdn.microsoft.com/Forums/en-US/home?forum=WindowsAzureAD">forums</a>&nbsp;or through comments below.</p>
<p>Get rolling and rocking soon. Analyze activity logs to protect your users and optimize your app purchase and usage.</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>New interactive documentation for Azure AD Graph API</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/new-interactive-documentation-for-azure-ad-graph-api</link>
      <pubDate>Wed, 29 Apr 2015 18:51:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/04/29/new-interactive-documentation-for-azure-ad-graph-api/</guid>
      <description><![CDATA[Folks,
We wanted to point your attention to some great new documentation for Graph API&nbsp;that...]]></description>
      <content:encoded><![CDATA[<p>Folks,</p>
<p>We wanted to point your attention to some great new documentation for Graph API&nbsp;that we've just lit up on MSDN here: <a href="https://msdn.microsoft.com/en-us/Library/Azure/Ad/Graph/api/api-catalog">https://msdn.microsoft.com/en-us/Library/Azure/Ad/Graph/api/api-catalog</a>.&nbsp; Now you&nbsp;can interactively try out some of our operations (currently only on user and group entities, and the "me" alias) and see the requests and responses inline, right there&nbsp;within the online&nbsp;documentation!</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/45/8054.new%20docs1.JPG" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-45/8054.new-docs1.JPG"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/45/8054.new%20docs1.JPG" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-45/8054.new-docs1.JPG" alt="" border="0" /></a></p>
<p>What's more, you can even get code snippets for the operation in your favorite language.&nbsp; cURL anyone?</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/45/2425.cURL.JPG" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-45/2425.cURL.JPG"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/45/2425.cURL.JPG" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-45/2425.cURL.JPG" alt="" border="0" /></a></p>
<p>We've also moved our reference documentation to this new documentation platform, making it easier to see all of our entities and complex types all in one place.</p>
<p>We hope you like this change, and we'll be adding more operations entries for our other entities over time.&nbsp; Please let us know what you think!&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Full Text Search Capabilities in Azure AD Graph API (preview)</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/full-text-search-capabilities-in-azure-ad-graph-api-preview</link>
      <pubDate>Fri, 10 Apr 2015 06:50:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/04/10/full-text-search-capabilities-in-azure-ad-graph-api-preview/</guid>
      <description><![CDATA[Advanced warning notice:  The Azure AD Graph team will be shutting off this preview capability.  As...]]></description>
      <content:encoded><![CDATA[<span style="color: #ff0000"><strong>Advanced warning notice</strong>:  The Azure AD Graph team will be shutting off this preview capability.  As of September 19th 2016, this feature will no longer be available.  We'd like to hear from you if you have been using this capability, and what you think about it.  We are currently investigating some options around introducing this type of capability again at a future (unspecified) date.</span>

&nbsp;

The Azure AD Graph team is pleased to announce the public preview of full text search capabilities. Until now, searching AAD entities was limited to $filter searches and had a number of limitations developers found constraining. With this preview functionality we add more powerful search mechanisms to the AAD Graph.
<h1>What this enables</h1>
In this section we’ll talk about different scenarios that can be achieved using this new full text search capability, together with some example REST calls.
<h3>Using full text search</h3>
AAD Graph now has the ability to leverage a full text index to move beyond the limitation of only being able to search for words that appeared at the start of the property text and words which followed immediately after one another.

As an example, if you wanted to discover all the company discussion groups you might do a search for “Contoso discussions” across group name and description. However, using filter searches, you’d miss groups titled “Discussions about Contoso”, “Contoso Social Discussions”, “DL for Contoso Discussions” etc. This is not the case for full text searches where it will search the two tokens “Contoso” and “discussions” across all of the objects in scope.

To perform a full text search, you must be targeting either Users, Contacts, or Groups and you must use the <a href="https://blogs.msdn.com/b/aadgraphteam/archive/2015/04/10/graph-api-versioning-and-the-new-beta-version.aspx">api-version “beta”</a>, then use the $search argument to pass your search text.

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=beta&amp;$search=search text</span>
<h3>Searching across all fields at once</h3>
The default for $search will be to search across all indexed fields.  This means it’s no longer necessary to form a query such as:

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=1.5&amp;$filter=startswith(displayName,'james') or startswith(givenName,'james')</span>

Instead, you can simply make the query:

<span style="font-family: courier new,courier;background-color: #ffffff">GET /contoso.com/users?api-version=beta&amp;$search=james</span>

<strong>NOTE:</strong> These searches are not identical. In this case the full text search would return a user with the name of “John James” as well as “James Doe”
<h3>Searching across specified fields</h3>
Even though the default for search is to evaluate all fields there are scenarios where it is useful to restrict the fields. This can be accomplished using the “searchable-fields” argument when making the search.  For example you may want to search for all the users named James that are in building 2 but you don’t want to pull up users with 2 in another field:

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=beta&amp;$search=james+2&amp;searchable-fields=displayName,physicalDeliveryOfficeName </span>
<h3>Ordering by any property</h3>
Previously if you wanted to sort by a property that was the only property you could do your filtering with. Another valuable capability that also gets introduced is searching on one field but sorting on another.

To search for all users with James showing up on their user object but ordered by jobTitle, the following search can be performed:

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=beta&amp;$search=james&amp;$orderby=jobTitle</span>

Of course searchable-fields could be used to restrict the properties the $search is relevant for and it doesn’t have to contain jobTitle.
<h3>Paging</h3>
Previously filtering, sorting and paging through a single AAD Graph API REST request was not possible. However, paging is now possible in all types of search through the use of the $top and $skip arguments.

For example, you can fetch a page of 10 users containing “James”, ordered by job title:

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=beta&amp;$search=james&amp;$orderby=jobTitle&amp;$top=10</span>

Then, subsequently use this query to get the next set:

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=beta&amp;$search=james&amp;$orderby=jobTitle&amp;$top=10&amp;$skip=10</span>

<strong>NOTE:  </strong>Unlike regular Graph API calls, when using $top with full-text search, an @odata.nextLink will not show up in the response.  For paging, you’ll need to use $skip.
<h3>Text-Mode</h3>
By default all terms in the search text must be contained in the object, for the object to be returned. However this can be controlled with the “text-mode” parameter. So if you want to simply ensure that any of the search terms match, you can set “text-mode” to “any”.

Using the “any” mode, a search for “John Doe” would return all the John’s and all the Doe’s.

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=beta&amp;$search=john doe&amp;text-mode=any</span>
<h3>More complex queries</h3>
<table style="width: 800px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="42" valign="top">+</td>
<td width="758" valign="top">AND Operator. James+developer would find all the objects with James and Developer.</td>
</tr>
<tr>
<td width="42" valign="top">|</td>
<td width="758" valign="top">OR Operator. James|Karl would find all the objects with James or Karl.</td>
</tr>
<tr>
<td width="42" valign="top">-</td>
<td width="758" valign="top">NOT Operator. James -developer would find all the objects with James which don’t have developer</td>
</tr>
<tr>
<td width="42" valign="top">*</td>
<td width="758" valign="top">Suffix Operator. Dev* would find objects with Dev, Development, Developer, etc.</td>
</tr>
<tr>
<td width="42" valign="top">( )</td>
<td width="758" valign="top">Precedence operators. Discussions+(Contoso|Fabrikam) will find objects containing “Discussions” and either “Contoso” or “Fabrikam” (or both).</td>
</tr>
<tr>
<td width="42" valign="top">“</td>
<td width="758" valign="top">Phrase indicator. Indicates that order should be respected. "Contoso Discussions" won’t find "Contoso Technical Discussions" but would find "DL for Contoso Discussions"</td>
</tr>
</tbody>
</table>
As an example of a more complex search, the following would search for objects which contained James and either developer or the string ‘project manager’ but not Doe:

<span style="font-family: courier new,courier">GET /contoso.com/users?api-version=beta&amp;$search=james+(developer|”project manager”) -doe</span>
<h1>Limitations</h1>
<h3>Read-Write Consistency</h3>
This full text search offering is made possible by an index separate from the main data storage. That means that changes made to the directory must replicate to the index. This generally happens in just a few seconds however it can lead to some inconsistencies when doing lots of edits and interactively performing searches expecting the edits you just made to be reflected.

<strong>NOTE</strong>: This has the consequence of, in certain race conditions, to return objects which used to match the search terms but no longer do. The search results will however always eventually converge with the data store and this behavior should be rare.
<h3>Object Limitations</h3>
Currently this full text search capability is limited to only Users, Contacts and Groups. Other objects types (Applications, Devices, etc.) may have support added to them depending on community feedback.
<h3>Suffix searches</h3>
Suffix searches suffer from a few problems:
<ul>
 	<li>Suffix searches have very poor performance especially when using only a few letters before the suffix operator. Suffix searches using only one or two characters are <strong>not </strong>recommended.</li>
 	<li>Suffix searches fail when the search text contains word breaking characters. If someone’s email address is <a href="mailto:James-Doe@contoso.com">James-Doe@contoso.com</a> or <a href="mailto:James.Doe@contoso.com">James.Doe@contoso.com</a> a search for James.D* or James-D* will not find these objects.</li>
</ul>
<h3>Paging</h3>
As noted earlier, unlike regular Graph API calls, when using $top with full-text search, an @odata.nextLink will not show up in the response.  For paging, you’ll need to use $skip.  We’ll look to rectify this in the future.
<h1>Upcoming additions</h1>
The following additions to search capability are being investigated. We welcome community feedback on which are the most valuable.
<h3>Multi-object search support</h3>
Currently only one object can be searched at a time. In the future we will provide the ability to search across multiple types of objects.  This will allow you to write one query to give you a true <strong>people picking</strong> search capability (that does full text search across multiple objects like users and groups, ordering by display name and getting back paged results).
<h3>Performance Improvements</h3>
Performance improvements for search in general as well as specifically for suffix searching capabilities are being investigate.
<h3>Additional object type support</h3>
Adding the ability to perform searches for objects other than Users, Contacts and Groups.
<h3>Fuzzy Search</h3>
The ability to search with a fuzzy edit distance. This takes care of most types of misspellings (e.g. ‘Hames’ finds ‘James’).
<h3>Phonetic Search</h3>
The ability to specify a phonetic search so terms that sound alike can be returned (e.g. ‘John’ and ‘Jon’ could be returned with a phonetic search of ‘Jawn’).
<h3>Graph client library support</h3>
Currently full-text search is only available through the REST API.  This feature would expose full-text search capabilities through the Graph Client Library
<h1>Feedback</h1>
We'd love to hear what you think about the new full text search capability, any issues you see and any suggestions you might have for improvements or new features and additions.
<div>

<hr width="33%" size="1" align="left" />

<div>
<div>

&nbsp;

</div>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Graph API versioning and the new beta version</title>
      <link>https://docs.microsoft.com/archive/blogs/aadgraphteam/graph-api-versioning-and-the-new-beta-version</link>
      <pubDate>Thu, 09 Apr 2015 17:05:00 GMT</pubDate>
      <dc:creator><![CDATA[AAD Graph team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/aadgraphteam/2015/04/09/graph-api-versioning-and-the-new-beta-version/</guid>
      <description><![CDATA[Folks,
We wanted to provide a few details on our API versioning strategy and our contract with...]]></description>
      <content:encoded><![CDATA[<p>Folks,</p>
<p>We wanted to provide a few details on our API versioning strategy and our contract with application developers who consume our APIs (and client libraries).&nbsp; This became a concern recently when a change on the REST API (addition of the new <em>alternativeSignInNamesInfo </em>collection on the User entity) lead to a break in our Azure AD Graph client library (see this <a href="https://stackoverflow.com/questions/29030118/odata-error-a-value-without-a-type-name-was-found-and-no-expected-type-is-avai">Stack Overflow post</a>).&nbsp; For this particular case, the Graph team did not envisage that this change would cause a break.&nbsp; However, it brought to light the importance of being very clear about our versioning contract with application developers.</p>
<h2>API contract, versioning and breaking changes</h2>
<p>Any breaking change to the API will result in an increment to the API version number to protect client applications. We may choose to increment the API version for non-breaking changes too (for example if we add some significantly large new capabilities).&nbsp;&nbsp;</p>
<p>So, what constitutes a breaking change?</p>
<ol>
<li>Removing or Renaming APIs or API parameters</li>
<li>Changes in behavior for an existing API</li>
<li>Changes in Error Codes &amp; Fault Contracts</li>
<li>Anything that would violate the <a href="https://en.wikipedia.org/wiki/Principle_of_least_astonishment">Principal of Least Astonishment</a></li>
</ol>
<p><strong>NOTE:</strong>&nbsp;For Azure AD Graph API, you may notice that the addition of new JSON fields to responses does not constitute a breaking change.&nbsp; For developers that generate their own client proxies (like WCF clients) our guidance is that clients should be prepared to receive properties and derived types not previously defined by the Azure AD Graph API service.&nbsp; Although Azure AD Graph API is not yet OData V4 compliant (this is in our future plans), it still follows the guidance described in the Model Versioning section in the OData V4 spec.</p>
<p>We're also exploring the&nbsp;<a title="Azure Service Updates" href="https://azure.microsoft.com/en-us/updates/">Azure Service Updates</a>&nbsp;feed for promoting more visibility into Azure AD Graph API version changes.</p>
<h2>API version lifetime</h2>
<p>When we increment the major version of the API (for example from 1.5 to 2.0), we are signaling that all support for existing clients using previous 1.x or earlier versions will be deprecated.&nbsp; We will however continue to support these previous versions for a minimum of 12 months. &nbsp;Please see the <a href="https://support.microsoft.com/en-us/gp/lifecycle#gp/osslpolicy">Microsoft online services support policy</a> for more details.</p>
<h2>&nbsp;Introducing version=beta</h2>
<p>We&rsquo;re also introducing a brand new version &ndash; api-version=<strong>beta</strong>.&nbsp; This version of the Azure AD Graph API will provide you with an endpoint where you can try out our latest and greatest <strong>preview </strong>features, and provide the Azure AD Graph team with feedback. When our team believes that a preview feature is ready for GA, we will add that feature to the latest existing GA version (or if it constitutes a breaking change this would result in an incremented new version number). &nbsp;However, we make no guarantees that a preview feature will be promoted to GA.</p>
<p>For the beta version, we will try to avoid any breaking changes on this version as much as possible, but we will not guarantee it.&nbsp; Client applications using the beta version should expect breaking changes from time to time. &nbsp;Please see <a href="https://azure.microsoft.com/en-us/support/legal/preview-supplemental-terms/">preview terms of use</a> for more information.</p>
<p>We will also look to produce Azure AD Graph Client Library&nbsp;(preview) on top of the beta Graph REST&nbsp;API version.&nbsp; Alternatively you can use <a title="Vipr" href="https://github.com/Microsoft/Vipr">Vipr </a>to generate your own client library if you so desire.&nbsp;</p>
<p>&nbsp;</p>
<p>As ever - please let us know what you think, and if anything's unclear here.</p>]]></content:encoded>
    </item>
  </channel>
</rss>