ClawSkills logoClawSkills

Gmail

Gmail API integration with managed OAuth. Read, send, and manage emails, threads, labels, and drafts. Use this skill when users want to interact with Gmail. For

Introduction

# Gmail

Access the Gmail API with managed OAuth authentication. Read, send, and manage emails, threads, labels, and drafts.

## Quick Start

```bash # List messages python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/google-mail/gmail/v1/users/me/messages?maxResults=10') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

## Base URL

``` https://gateway.maton.ai/google-mail/{native-api-path} ```

Replace `{native-api-path}` with the actual Gmail API endpoint path. The gateway proxies requests to `gmail.googleapis.com` and automatically injects your OAuth token.

## Authentication

All requests require the Maton API key in the Authorization header:

``` Authorization: Bearer $MATON_API_KEY ```

**Environment Variable:** Set your API key as `MATON_API_KEY`:

```bash export MATON_API_KEY="YOUR_API_KEY" ```

### Getting Your API Key

1. Sign in or create an account at [maton.ai](https://maton.ai) 2. Go to [maton.ai/settings](https://maton.ai/settings) 3. Copy your API key

## Connection Management

Manage your Google OAuth connections at `https://ctrl.maton.ai`.

### List Connections

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=google-mail&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Create Connection

```bash python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'google-mail'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Get Connection

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

**Response:** ```json { "connection": { "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80", "status": "ACTIVE", "creation_time": "2025-12-08T07:20:53.488460Z", "last_updated_time": "2026-01-31T20:03:32.593153Z", "url": "https://connect.maton.ai/?session_token=...", "app": "google-mail", "metadata": {} } } ```

Open the returned `url` in a browser to complete OAuth authorization.

### Delete Connection

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Specifying Connection

If you have multiple Gmail connections, specify which one to use with the `Maton-Connection` header:

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/google-mail/gmail/v1/users/me/messages') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

If omitted, the gateway uses the default (oldest) active connection.

## API Reference

### List Messages

```bash GET /google-mail/gmail/v1/users/me/messages?maxResults=10 ```

With query filter:

```bash GET /google-mail/gmail/v1/users/me/messages?q=is:unread&maxResults=10 ```

### Get Message

```bash GET /google-mail/gmail/v1/users/me/messages/{messageId} ```

With metadata only:

```bash GET /google-mail/gmail/v1/users/me/messages/{messageId}?format=metadata&metadataHeaders=From&metadataHeaders=Subject&metadataHeaders=Date ```

### Send Message

```bash POST /google-mail/gmail/v1/users/me/messages/send Content-Type: application/json

{ "raw": "BASE64_ENCODED_EMAIL" } ```

### List Labels

```bash GET /google-mail/gmail/v1/users/me/labels ```

### List Threads

```bash GET /google-mail/gmail/v1/users/me/threads?maxResults=10 ```

### Get Thread

```bash GET /google-mail/gmail/v1/users/me/threads/{threadId} ```

### Modify Message Labels

```bash POST /google-mail/gmail/v1/users/me/messages/{messageId}/modify Content-Type: application/json

{ "addLabelIds": ["STARRED"], "removeLabelIds": ["UNREAD"] } ```

### Trash Message

```bash POST /google-mail/gmail/v1/users/me/messages/{messageId}/trash ```

### Create Draft

```bash POST /google-mail/gmail/v1/users/me/drafts Content-Type: application/json

{ "message": { "raw": "BASE64URL_ENCODED_EMAIL" } } ```

### Send Draft

```bash POST /google-mail/gmail/v1/users/me/drafts/send Content-Type: application/json

{ "id": "{draftId}" } ```

### Get Profile

```bash GET /google-mail/gmail/v1/users/me/profile ```

## Query Operators

Use in the `q` parameter: - `is:unread` - Unread messages - `is:starred` - Starred messages - `from:[email protected]` - From specific sender - `to:[email protected]` - To specific recipient - `subject:keyword` - Subject contains keyword - `after:2024/01/01` - After date - `before:2024/12/31` - Before date - `has:attachment` - Has attachments

## Code Examples

### JavaScript

```javascript const response = await fetch( 'https://gateway.maton.ai/google-mail/gmail/v1/users/me/messages?maxResults=10', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); ```

### Python

```python import os import requests

response = requests.get( 'https://gateway.maton.ai/google-mail/gmail/v1/users/me/messages', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, params={'maxResults': 10, 'q': 'is:unread'} ) ```

## Notes

- Use `me` as userId for the authenticated user - Message body is base64url encoded in the `raw` field - Common labels: `INBOX`, `SENT`, `DRAFT`, `STARRED`, `UNREAD`, `TRASH` - IMPORTANT: When using curl commands, use `curl -g` when URLs contain brackets (`fields[]`, `sort[]`, `records[]`) to disable glob parsing - IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.

## Error Handling

| Status | Meaning | |--------|---------| | 400 | Missing Gmail connection | | 401 | Invalid or missing Maton API key | | 429 | Rate limited (10 req/sec per account) | | 4xx/5xx | Passthrough error from Gmail API |

### Troubleshooting: API Key Issues

1. Check that the `MATON_API_KEY` environment variable is set:

```bash echo $MATON_API_KEY ```

2. Verify the API key is valid by listing connections:

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Troubleshooting: Invalid App Name

1. Ensure your URL path starts with `google-mail`. For example:

- Correct: `https://gateway.maton.ai/google-mail/gmail/v1/users/me/messages` - Incorrect: `https://gateway.maton.ai/gmail/v1/users/me/messages`

## Resources

- [Gmail API Overview](https://developers.google.com/gmail/api/reference/rest) - [List Messages](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/list) - [Get Message](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/get) - [Send Message](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/send) - [List Threads](https://developers.google.com/gmail/api/reference/rest/v1/users.threads/list) - [List Labels](https://developers.google.com/gmail/api/reference/rest/v1/users.labels/list) - [Create Draft](https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/create) - [Maton Community](https://discord.com/invite/dBfFAcefs2) - [Maton Support](mailto:[email protected])

More Products