Skip to content

microsoftgraph/msgraph-sdk-go

Folders and files

NameName
Last commit message
Last commit date
Jan 27, 2025
Sep 11, 2024
Jun 5, 2024
Jun 5, 2024
Dec 17, 2024
Feb 4, 2025
Apr 16, 2024
Apr 16, 2024
Nov 25, 2024
Jul 15, 2024
Apr 16, 2024
Jul 15, 2024
Apr 16, 2024
Feb 13, 2025
Feb 13, 2025
Apr 16, 2024
Jul 15, 2024
Feb 4, 2025
Feb 4, 2025
Apr 16, 2024
Feb 13, 2025
Feb 13, 2025
Feb 4, 2025
Apr 16, 2024
Feb 4, 2025
Feb 4, 2025
Feb 4, 2025
Apr 16, 2024
Feb 4, 2025
Apr 16, 2024
Oct 17, 2024
Feb 13, 2025
Aug 6, 2024
Nov 25, 2024
Feb 13, 2025
Apr 16, 2024
Apr 16, 2024
Dec 31, 2024
Feb 13, 2025
Apr 16, 2024
Feb 4, 2025
Dec 11, 2024
Feb 13, 2025
Feb 13, 2025
Jul 15, 2024
Jul 15, 2024
Dec 11, 2024
Oct 17, 2024
Feb 13, 2025
Nov 25, 2024
Feb 13, 2025
Feb 4, 2025
Jul 15, 2024
Jul 15, 2024
Feb 13, 2025
Jul 15, 2024
Nov 25, 2024
Jan 8, 2025
Aug 6, 2024
Apr 16, 2024
Apr 16, 2024
May 8, 2024
Feb 4, 2025
Feb 13, 2025
Apr 16, 2024
Jul 15, 2024
Feb 13, 2025
Jan 21, 2025
Dec 17, 2024
Jun 5, 2024
Jun 5, 2024
Feb 13, 2025
Apr 16, 2024
Feb 13, 2025
Feb 13, 2025
Jun 12, 2023
Feb 13, 2025
Feb 13, 2025
Apr 25, 2023
Feb 13, 2025
Feb 13, 2025
May 14, 2024
May 24, 2024
Oct 21, 2021
Nov 12, 2024
Sep 8, 2022
Oct 27, 2021
Jan 8, 2025
Jan 8, 2025
Feb 13, 2025
Feb 13, 2025
Mar 28, 2023
Feb 13, 2025
Feb 13, 2025
May 27, 2024

Repository files navigation

Microsoft Graph SDK for Go

PkgGoDev

Get started with the Microsoft Graph SDK for Go by integrating the Microsoft Graph API into your Go application!

Note: this SDK allows you to build applications using the v1.0 of Microsoft Graph. If you want to try the latest Microsoft Graph APIs under beta, use our beta SDK instead.

Note: The Microsoft Graph Go SDK is currently in General Availability version starting from version 1.0.0. The SDK is considered stable, regular releases and updates to the SDK will however continue weekly..

1. Installation

go get github.com/microsoftgraph/msgraph-sdk-go
go get github.com/microsoft/kiota-authentication-azure-go

2. Getting started

2.1 Register your application

Register your application by following the steps at Register your app with the Microsoft Identity Platform.

2.2 Create an AuthenticationProvider object

An instance of the GraphRequestAdapter class handles building client. To create a new instance of this class, you need to provide an instance of AuthenticationProvider, which can authenticate requests to Microsoft Graph.

For an example of how to get an authentication provider, see choose a Microsoft Graph authentication provider.

Note: we are working to add the getting started information for Go to our public documentation, in the meantime the following sample should help you getting started.

This example uses the DeviceCodeCredential class, which uses the device code flow to authenticate the user and acquire an access token. This authentication method is not enabled on app registrations by default. In order to use this example, you must enable public client flows on the app registation in the Azure portal by selecting Authentication under Manage, and setting the Allow public client flows toggle to Yes.

import (
    azidentity "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "context"
)

cred, err := azidentity.NewDeviceCodeCredential(&azidentity.DeviceCodeCredentialOptions{
    TenantID: "<the tenant id from your app registration>",
    ClientID: "<the client id from your app registration>",
    UserPrompt: func(ctx context.Context, message azidentity.DeviceCodeMessage) error {
        fmt.Println(message.Message)
        return nil
    },
})

if err != nil {
    fmt.Printf("Error creating credentials: %v\n", err)
}

2.3 Get a Graph Service Client and Adapter object

You must get a GraphRequestAdapter object to make requests against the service.

import msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"

client , err  := msgraphsdk.NewGraphServiceClientWithCredentials(cred, []string{"Files.Read"})
if err != nil {
    fmt.Printf("Error creating client: %v\n", err)
    return
}

3. Make requests against the service

After you have a GraphServiceClient that is authenticated, you can begin making calls against the service. The requests against the service look like our REST API.

3.1 Get the user's drive

To retrieve the user's drive:

import (
    "github.com/microsoftgraph/msgraph-sdk-go/models/odataerrors"
)

result, err := client.Me().Drive().Get(context.Background(), nil)
if err != nil {
    fmt.Printf("Error getting the drive: %v\n", err)
    printOdataError(err)
}
fmt.Printf("Found Drive : %v\n", *result.GetId())

// omitted for brevity

func printOdataError(err error) {
	switch err.(type) {
	case *odataerrors.ODataError:
		typed := err.(*odataerrors.ODataError)
		fmt.Printf("error:", typed.Error())
		if terr := typed.GetErrorEscaped(); terr != nil {
			fmt.Printf("code: %s", *terr.GetCode())
			fmt.Printf("msg: %s", *terr.GetMessage())
		}
	default:
		fmt.Printf("%T > error: %#v", err, err)
	}
}

4. Getting results that span across multiple pages

Items in a collection response can span across multiple pages. To get the complete set of items in the collection, your application must make additional calls to get the subsequent pages until no more next link is provided in the response.

4.1 Get all the users in an environment

To retrieve the users:

import (
    msgraphcore "github.com/microsoftgraph/msgraph-sdk-go-core"
    "github.com/microsoftgraph/msgraph-sdk-go/users"
    "github.com/microsoftgraph/msgraph-sdk-go/models"
    "github.com/microsoftgraph/msgraph-sdk-go/models/odataerrors"
)

result, err := client.Users().Get(context.Background(), nil)
if err != nil {
    fmt.Printf("Error getting users: %v\n", err)
    printOdataError(err)
    return err
}

// Use PageIterator to iterate through all users
pageIterator, err := msgraphcore.NewPageIterator[models.Userable](result, client.GetAdapter(), models.CreateUserCollectionResponseFromDiscriminatorValue)

err = pageIterator.Iterate(context.Background(), func(user models.Userable) bool {
    fmt.Printf("%s\n", *user.GetDisplayName())
    // Return true to continue the iteration
    return true
})

// omitted for brevity

func printOdataError(err error) {
        switch err.(type) {
        case *odataerrors.ODataError:
                typed := err.(*odataerrors.ODataError)
                fmt.Printf("error: %s", typed.Error())
                if terr := typed.GetErrorEscaped(); terr != nil {
                        fmt.Printf("code: %s", *terr.GetCode())
                        fmt.Printf("msg: %s", *terr.GetMessage())
                }
        default:
                fmt.Printf("%T > error: %#v", err, err)
        }
}

5. Documentation

For more detailed documentation, see:

6. Issues

For known issues, see issues.

7. Contributions

The Microsoft Graph SDK is open for contribution. To contribute to this project, see Contributing.

8. License

Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT license.

9. Third-party notices

Third-party notices