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

# Microsoft 365

> Microsoft Graph API for Outlook email, Calendar, OneDrive, and Teams.

Microsoft Graph API for Outlook email, Calendar, OneDrive, and Teams. Best for workflows that read or send email, manage calendar events, access files on OneDrive, or interact with Teams channels. Covers the entire Microsoft 365 suite — unlike Google Workspace (Google-native) or Slack (messaging-only), Microsoft 365 is the dominant enterprise productivity stack.

22 example endpoints available through Lava's AI Gateway. See the [Microsoft 365 API docs](https://learn.microsoft.com/en-us/graph/overview) for full documentation.

<Warning>This provider requires your own credentials — connect your API key or OAuth account before use.</Warning>

<Info>This is a **catch-all provider** — any valid URL under `https://graph.microsoft.com/v1.0` is supported. Any Microsoft Graph v1.0 endpoint. Construct URL as [https://graph.microsoft.com/v1.0/\&#123;path\&#125](https://graph.microsoft.com/v1.0/\&#123;path\&#125);. See [https://learn.microsoft.com/en-us/graph/api/overview](https://learn.microsoft.com/en-us/graph/api/overview) for full reference. To read an Excel workbook the user has open (Excel Online paints the grid on a canvas, so cells are not in the page DOM): (1) get the open file's URL from read\_active\_tab; (2) call\_api GET [https://graph.microsoft.com/v1.0/shares/from-url/driveItem?\$select=id,name,parentReference](https://graph.microsoft.com/v1.0/shares/from-url/driveItem?\$select=id,name,parentReference) with the header x-lava-resolve-url set to that URL — Lava encodes it for you, so do NOT base64url-encode anything yourself — then read itemId from `id` and driveId from `parentReference.driveId`; (3) call\_api GET /drives/\{driveId}/items/\{itemId}/workbook/worksheets/\{name}/range(address='B14')?\$select=address,text,values, where `text` holds formatted display values and `values` the calculated ones. If step 2 returns 403 or 404, the connected Microsoft account is not the one that owns the open file — call GET /me to see the connected account, tell the user, and offer to reconnect Microsoft with the account that has the file. The endpoints below are curated examples.</Info>

## Connecting Your Microsoft 365 Account

Lava supports two ways to connect a Microsoft 365 account. Both end in the same place — Lava stores an encrypted OAuth token scoped to your wallet and uses it only to forward your own API calls.

**Via MCP (automatic):**

1. An agent connected to Lava's MCP calls a Microsoft 365 endpoint for the first time.
2. Lava detects no stored credential and returns a `browser_flow_required` response containing an authorization URL.
3. Open the URL in a browser — you land on Microsoft 365's consent screen.
4. Review the requested scopes (listed below) and click **Allow**.
5. Microsoft 365 redirects back to Lava. Your token is stored and the original agent call can now proceed.

**Via dashboard:**

1. Sign in at [lava.so/dashboard](https://lava.so/dashboard) and open **Connected Services** (`/dashboard/wallet/connected-services`).
2. Find **Microsoft 365** in the list of available providers and click **Connect**.
3. Authorize in Microsoft 365's consent screen.
4. You're redirected back to the Connected Services page, where Microsoft 365 now appears under **Stored Credentials**.

## Requested Permissions

Lava requests only the scopes needed to route your API calls. You see this list on Microsoft 365's consent screen before you authorize.

| Scope                     | What It Enables                                    |
| ------------------------- | -------------------------------------------------- |
| `offline_access`          | Refresh tokens                                     |
| `User.Read`               | Read user profile                                  |
| `Mail.ReadWrite`          | Read and manage email                              |
| `Mail.Send`               | Send email                                         |
| `Calendars.ReadWrite`     | Read and manage calendar                           |
| `Files.ReadWrite`         | Read and manage OneDrive files                     |
| `Team.ReadBasic.All`      | List joined Teams                                  |
| `ChannelMessage.Read.All` | Read Teams channel messages                        |
| `Sites.ReadWrite.All`     | Read and manage SharePoint sites, lists, and files |

## Using Microsoft 365

Once connected, your credential is available to any agent or SDK call routed through Lava's gateway — no token passing required. Call Microsoft 365 endpoints through `https://api.lava.so/v1/forward` and Lava injects your stored token automatically. See the **Endpoints** section below for example calls.

## Removing Microsoft 365

Disconnecting removes Lava's stored token immediately. Subsequent API calls return an auth error until you reconnect.

**Via dashboard:**

1. Open [Connected Services](https://lava.so/dashboard/wallet/connected-services).
2. Find **Microsoft 365** under **Stored Credentials**.
3. Click the trash icon and confirm.

**Via API or MCP:**

* REST: `DELETE https://api.lava.so/v1/credentials/microsoft_o365` (returns 204 No Content).
* MCP: call the `disconnect_service` tool with `service: "microsoft_o365"`.

**Also revoke from Microsoft 365:** visit [https://myapps.microsoft.com/](https://myapps.microsoft.com/), find the Lava app, and click **Remove**. This revokes the token on Microsoft 365's side in addition to deleting it from Lava.

## Data Handling

Lava stores your Microsoft 365 OAuth access and refresh tokens encrypted at rest, scoped to your wallet. Tokens are used only to forward your own API calls to [https://graph.microsoft.com/v1.0](https://graph.microsoft.com/v1.0). Refresh tokens rotate automatically; if a refresh fails, your next call prompts you to reconnect. Lava does not read, cache, or redistribute Microsoft 365 content beyond what's needed to proxy a single request.

## Support

Questions about this integration: [support@lava.so](mailto:support@lava.so).

## Endpoints

### Get the signed-in user profile

**GET** `https://graph.microsoft.com/v1.0/me` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List inbox messages

**GET** `https://graph.microsoft.com/v1.0/me/messages?$top=10&$orderby=receivedDateTime%20desc` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/messages?$top=10&$orderby=receivedDateTime%20desc', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fmessages%3F%24top%3D10%26%24orderby%3DreceivedDateTime%2520desc" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Send an email

**POST** `https://graph.microsoft.com/v1.0/me/sendMail` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/sendMail', {
      body: {
    "message": {
      "subject": "Hello from Lava",
      "body": {
        "contentType": "Text",
        "content": "This email was sent via the Microsoft Graph API."
      },
      "toRecipients": [
        {
          "emailAddress": {
            "address": "recipient@example.com"
          }
        }
      ]
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2FsendMail" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"message":{"subject":"Hello from Lava","body":{"contentType":"Text","content":"This email was sent via the Microsoft Graph API."},"toRecipients":[{"emailAddress":{"address":"recipient@example.com"}}]}}'
    ```
  </Tab>
</Tabs>

### List calendar events

**GET** `https://graph.microsoft.com/v1.0/me/events?$top=10&$orderby=start/dateTime` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/events?$top=10&$orderby=start/dateTime', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fevents%3F%24top%3D10%26%24orderby%3Dstart%2FdateTime" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create a calendar event

**POST** `https://graph.microsoft.com/v1.0/me/events` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/events', {
      body: {
    "subject": "Team Sync",
    "start": {
      "dateTime": "2026-05-01T10:00:00",
      "timeZone": "UTC"
    },
    "end": {
      "dateTime": "2026-05-01T10:30:00",
      "timeZone": "UTC"
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fevents" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"subject":"Team Sync","start":{"dateTime":"2026-05-01T10:00:00","timeZone":"UTC"},"end":{"dateTime":"2026-05-01T10:30:00","timeZone":"UTC"}}'
    ```
  </Tab>
</Tabs>

### List files in OneDrive root

**GET** `https://graph.microsoft.com/v1.0/me/drive/root/children` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/drive/root/children', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fdrive%2Froot%2Fchildren" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List joined Teams

**GET** `https://graph.microsoft.com/v1.0/me/joinedTeams` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/joinedTeams', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2FjoinedTeams" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Update a calendar event

**PATCH** `https://graph.microsoft.com/v1.0/me/events/{event-id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/events/{event-id}', {
      method: 'PATCH',
      body: {
    "subject": "Updated Meeting Title",
    "start": {
      "dateTime": "2026-05-01T11:00:00",
      "timeZone": "UTC"
    },
    "end": {
      "dateTime": "2026-05-01T11:30:00",
      "timeZone": "UTC"
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PATCH "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fevents%2F%7Bevent-id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"subject":"Updated Meeting Title","start":{"dateTime":"2026-05-01T11:00:00","timeZone":"UTC"},"end":{"dateTime":"2026-05-01T11:30:00","timeZone":"UTC"}}'
    ```
  </Tab>
</Tabs>

### Upload or replace a file in OneDrive

**PUT** `https://graph.microsoft.com/v1.0/me/drive/root:/{filename}:/content` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/drive/root:/{filename}:/content', { method: 'PUT' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PUT "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fdrive%2Froot%3A%2F%7Bfilename%7D%3A%2Fcontent" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json"
    ```
  </Tab>
</Tabs>

### Delete a calendar event

**DELETE** `https://graph.microsoft.com/v1.0/me/events/{event-id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/events/{event-id}', { method: 'DELETE' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fevents%2F%7Bevent-id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json"
    ```
  </Tab>
</Tabs>

### Search for SharePoint sites by keyword

**GET** `https://graph.microsoft.com/v1.0/sites?search=marketing` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/sites?search=marketing', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fsites%3Fsearch%3Dmarketing" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Get a SharePoint site by ID

**GET** `https://graph.microsoft.com/v1.0/sites/{site-id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/sites/{site-id}', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fsites%2F%7Bsite-id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List the document libraries (drives) in a SharePoint site

**GET** `https://graph.microsoft.com/v1.0/sites/{site-id}/drives` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/sites/{site-id}/drives', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fsites%2F%7Bsite-id%7D%2Fdrives" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List files in a SharePoint site's default document library

**GET** `https://graph.microsoft.com/v1.0/sites/{site-id}/drive/root/children` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/sites/{site-id}/drive/root/children', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fsites%2F%7Bsite-id%7D%2Fdrive%2Froot%2Fchildren" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List the SharePoint lists in a site

**GET** `https://graph.microsoft.com/v1.0/sites/{site-id}/lists` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/sites/{site-id}/lists', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fsites%2F%7Bsite-id%7D%2Flists" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List items in a SharePoint list, expanding column values

**GET** `https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items?$expand=fields` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items?$expand=fields', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fsites%2F%7Bsite-id%7D%2Flists%2F%7Blist-id%7D%2Fitems%3F%24expand%3Dfields" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create an item in a SharePoint list

**POST** `https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items', { body: {"fields":{"Title":"Q2 Planning","Status":"In progress"}} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fsites%2F%7Bsite-id%7D%2Flists%2F%7Blist-id%7D%2Fitems" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"fields":{"Title":"Q2 Planning","Status":"In progress"}}'
    ```
  </Tab>
</Tabs>

### Resolve the file the user has open (Excel/Word on OneDrive or SharePoint) to its Graph drive item. Pass the open file's URL (from read\_active\_tab) in the x-lava-resolve-url request header — Lava base64url-encodes it into the share token, so do NOT encode it yourself. Returns the drive item: use `id` as itemId and `parentReference.driveId` as driveId for the workbook endpoints. A 403/404 means the connected Microsoft account differs from the account that owns the file.

**GET** `https://graph.microsoft.com/v1.0/shares/from-url/driveItem?$select=id,name,parentReference` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/shares/from-url/driveItem?$select=id,name,parentReference', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fshares%2Ffrom-url%2FdriveItem%3F%24select%3Did%2Cname%2CparentReference" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Find a file by name in OneDrive (alternative to share-token resolution). Use the open tab title as the query, then read the matching item id.

**GET** `https://graph.microsoft.com/v1.0/me/drive/root/search(q='Mortgage.xlsx')` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/me/drive/root/search(q='Mortgage.xlsx')', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fme%2Fdrive%2Froot%2Fsearch(q%3D'Mortgage.xlsx')" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List the worksheets (tabs) in an Excel workbook

**GET** `https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/workbook/worksheets` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/workbook/worksheets', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fdrives%2F%7Bdrive-id%7D%2Fitems%2F%7Bitem-id%7D%2Fworkbook%2Fworksheets" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Read a specific cell or range from an Excel worksheet. The range carries `text` (formatted display strings) and `values` (calculated values). Excel Online paints the grid on a canvas, so this is the only way to read cell contents.

**GET** `https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/workbook/worksheets/Sheet1/range(address='B14')?$select=address,text,values` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/workbook/worksheets/Sheet1/range(address='B14')?$select=address,text,values', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fdrives%2F%7Bdrive-id%7D%2Fitems%2F%7Bitem-id%7D%2Fworkbook%2Fworksheets%2FSheet1%2Frange(address%3D'B14')%3F%24select%3Daddress%2Ctext%2Cvalues" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Read the whole populated area of an Excel worksheet (usedRange). Use \$select=address,text,values to bound the payload.

**GET** `https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/workbook/worksheets/Sheet1/usedRange?$select=address,text,values` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/workbook/worksheets/Sheet1/usedRange?$select=address,text,values', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fgraph.microsoft.com%2Fv1.0%2Fdrives%2F%7Bdrive-id%7D%2Fitems%2F%7Bitem-id%7D%2Fworkbook%2Fworksheets%2FSheet1%2FusedRange%3F%24select%3Daddress%2Ctext%2Cvalues" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={2}>
  <Card title="All Providers" icon="grid" href="/gateway/supported-providers">
    Browse all supported AI providers
  </Card>

  <Card title="Forward Proxy" icon="route" href="/gateway/forward-proxy">
    Learn how to construct proxy URLs and authenticate requests
  </Card>
</CardGroup>
