API Gateway
Passthrough proxy for direct access to third-party APIs using managed OAuth connections, provided by Maton. The API gateway lets you call native API endpoints directly.
Quick Start
# Native Slack API call
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'channel': 'C0123456', 'text': 'Hello from gateway!'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/slack/api/chat.postMessage', 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
Base URL
https://gateway.maton.ai/{app}/{native-api-path}
Replace {app} with the service name and {native-api-path} with the actual API endpoint path.
IMPORTANT: The URL path MUST start with the connection's app name (eg. /google-mail/...). This prefix tells the gateway which app connection to use. For example, the native Gmail API path starts with gmail/v1/, so full paths look like /google-mail/gmail/v1/users/me/messages.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
The API gateway automatically injects the appropriate OAuth token for the target service.
Environment Variable: You can set your API key as the MATON_API_KEY environment variable:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Click the copy button on the right side of API Key section to copy it
Connection Management
Connection management uses a separate base URL: https://ctrl.maton.ai
List Connections
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=slack&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
Query Parameters (optional):
app - Filter by service name (e.g., slack, hubspot, salesforce)
status - Filter by connection status (ACTIVE, PENDING, FAILED)
Response:
{
"connections": [
{
"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=5e9...",
"app": "slack",
"method": "OAUTH2",
"metadata": {}
}
]
}
Create Connection
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'slack'}).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
Request Body:
app (required) - Service name (e.g., slack, notion)
method (optional) - Connection method (API_KEY, BASIC, OAUTH1, OAUTH2, MCP)
Get Connection
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:
{
"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=5e9...",
"app": "slack",
"metadata": {}
}
}
Open the returned URL in a browser to complete OAuth.
Delete Connection
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 connections for the same app, you can specify which connection to use by adding the Maton-Connection header with the connection ID:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'channel': 'C0123456', 'text': 'Hello!'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/slack/api/chat.postMessage', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
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 for that app.
Supported Services
| Service |
App Name |
Base URL Proxied |
| ActiveCampaign |
active-campaign |
{account}.api-us1.com |
| Acuity Scheduling |
acuity-scheduling |
acuityscheduling.com |
| Airtable |
airtable |
api.airtable.com |
| Apify |
apify |
api.apify.com |
| Apollo |
apollo |
api.apollo.io |
| Asana |
asana |
app.asana.com |
| Attio |
attio |
api.attio.com |
| Basecamp |
basecamp |
3.basecampapi.com |
| Baserow |
baserow |
api.baserow.io |
| beehiiv |
beehiiv |
api.beehiiv.com |
| Box |
box |
api.box.com |
| Brevo |
brevo |
api.brevo.com |
| Brave Search |
brave-search |
api.search.brave.com |
| Buffer |
buffer |
api.buffer.com |
| Calendly |
calendly |
api.calendly.com |
| Cal.com |
cal-com |
api.cal.com |
| CallRail |
callrail |
api.callrail.com |
| Chargebee |
chargebee |
{subdomain}.chargebee.com |
| ClickFunnels |
clickfunnels |
{subdomain}.myclickfunnels.com |
| ClickSend |
clicksend |
rest.clicksend.com |
| ClickUp |
clickup |
api.clickup.com |
| Clockify |
clockify |
api.clockify.me |
| Coda |
coda |
coda.io |
| Confluence |
confluence |
api.atlassian.com |
| CompanyCam |
companycam |
api.companycam.com |
| Cognito Forms |
cognito-forms |
www.cognitoforms.com |
| Constant Contact |
constant-contact |
api.cc.email |
| Dropbox |
dropbox |
api.dropboxapi.com |
| Dropbox Business |
dropbox-business |
api.dropboxapi.com |
| ElevenLabs |
elevenlabs |
api.elevenlabs.io |
| Eventbrite |
eventbrite |
www.eventbriteapi.com |
| Exa |
exa |
api.exa.ai |
| fal.ai |
fal-ai |
queue.fal.run |
| Fathom |
fathom |
api.fathom.ai |
| Firecrawl |
firecrawl |
api.firecrawl.dev |
| Firebase |
firebase |
firebase.googleapis.com |
| Fireflies |
fireflies |
api.fireflies.ai |
| Front |
front |
api2.frontapp.com |
| GetResponse |
getresponse |
api.getresponse.com |
| Grafana |
grafana |
User's Grafana instance |
| GitHub |
github |
api.github.com |
| Gumroad |
gumroad |
api.gumroad.com |
| Granola MCP |
granola |
mcp.granola.ai |
| Google Ads |
google-ads |
googleads.googleapis.com |
| Google BigQuery |
google-bigquery |
bigquery.googleapis.com |
| Google Analytics Admin |
google-analytics-admin |
analyticsadmin.googleapis.com |
| Google Analytics Data |
google-analytics-data |
analyticsdata.googleapis.com |
| Google Calendar |
google-calendar |
www.googleapis.com |
| Google Classroom |
google-classroom |
classroom.googleapis.com |
| Google Contacts |
google-contacts |
people.googleapis.com |
| Google Docs |
google-docs |
docs.googleapis.com |
| Google Drive |
google-drive |
www.googleapis.com |
| Google Forms |
google-forms |
forms.googleapis.com |
| Gmail |
google-mail |
gmail.googleapis.com |
| Google Merchant |
google-merchant |
merchantapi.googleapis.com |
| Google Meet |
google-meet |
meet.googleapis.com |
| Google Play |
google-play |
androidpublisher.googleapis.com |
| Google Search Console |
google-search-console |
www.googleapis.com |
| Google Sheets |
google-sheets |
sheets.googleapis.com |
| Google Slides |
google-slides |
slides.googleapis.com |
| Google Tasks |
google-tasks |
tasks.googleapis.com |
| Google Workspace Admin |
google-workspace-admin |
admin.googleapis.com |
| HubSpot |
hubspot |
api.hubapi.com |
| Instantly |
instantly |
api.instantly.ai |
| Jira |
jira |
api.atlassian.com |
| Jobber |
jobber |
api.getjobber.com |
| JotForm |
jotform |
api.jotform.com |
| Kaggle |
kaggle |
api.kaggle.com |
| Keap |
keap |
api.infusionsoft.com |
| Kibana |
kibana |
User's Kibana instance |
| Kit |
kit |
api.kit.com |
| Klaviyo |
klaviyo |
a.klaviyo.com |
| Lemlist |
lemlist |
api.lemlist.com |
| Linear |
linear |
api.linear.app |
| LinkedIn |
linkedin |
api.linkedin.com |
| Mailchimp |
mailchimp |
{dc}.api.mailchimp.com |
| MailerLite |
mailerlite |
connect.mailerlite.com |
| Mailgun |
mailgun |
api.mailgun.net |
| Make |
make |
{zone}.make.com |
| ManyChat |
manychat |
api.manychat.com |
| Manus |
manus |
api.manus.ai |
| Memelord |
memelord |
www.memelord.com |
| Microsoft Excel |
microsoft-excel |
graph.microsoft.com |
| Microsoft Teams |
microsoft-teams |
graph.microsoft.com |
| Microsoft To Do |
microsoft-to-do |
graph.microsoft.com |
| Monday.com |
monday |
api.monday.com |
| Motion |
motion |
api.usemotion.com |
| Netlify |
netlify |
api.netlify.com |
| Notion |
notion |
api.notion.com |
| Notion MCP |
notion |
mcp.notion.com |
| OneNote |
one-note |
graph.microsoft.com |
| OneDrive |
one-drive |
graph.microsoft.com |
| Outlook |
outlook |
graph.microsoft.com |
| PDF.co |
pdf-co |
api.pdf.co |
| Pipedrive |
pipedrive |
api.pipedrive.com |
| Podio |
podio |
api.podio.com |
| PostHog |
posthog |
{subdomain}.posthog.com |
| QuickBooks |
quickbooks |
quickbooks.api.intuit.com |
| Quo |
quo |
api.openphone.com |
| Reducto |
reducto |
platform.reducto.ai |
| Resend |
resend |
api.resend.com |
| Salesforce |
salesforce |
{instance}.salesforce.com |
| Sentry |
sentry |
{subdomain}.sentry.io |
| SharePoint |
sharepoint |
graph.microsoft.com |
| SignNow |
signnow |
api.signnow.com |
| Slack |
slack |
slack.com |
| Snapchat |
snapchat |
adsapi.snapchat.com |
| Square |
squareup |
connect.squareup.com |
| Squarespace |
squarespace |
api.squarespace.com |
| Stripe |
stripe |
api.stripe.com |
| Sunsama MCP |
sunsama |
MCP server |
| Supabase |
supabase |
{project_ref}.supabase.co |
| Systeme.io |
systeme |
api.systeme.io |
| Tally |
tally |
api.tally.so |
| Tavily |
tavily |
api.tavily.com |
| Telegram |
telegram |
api.telegram.org |
| TickTick |
ticktick |
api.ticktick.com |
| Todoist |
todoist |
api.todoist.com |
| Toggl Track |
toggl-track |
api.track.toggl.com |
| Trello |
trello |
api.trello.com |
| Twilio |
twilio |
api.twilio.com |
| Twenty CRM |
twenty |
api.twenty.com |
| Typeform |
typeform |
api.typeform.com |
| Unbounce |
unbounce |
api.unbounce.com |
| Vercel |
vercel |
api.vercel.com |
| Vimeo |
vimeo |
api.vimeo.com |
| WATI |
wati |
{tenant}.wati.io |
| WhatsApp Business |
whatsapp-business |
graph.facebook.com |
| WooCommerce |
woocommerce |
{store-url}/wp-json/wc/v3 |
| WordPress.com |
wordpress |
public-api.wordpress.com |
| Wrike |
wrike |
www.wrike.com |
| Xero |
xero |
api.xero.com |
| YouTube |
youtube |
www.googleapis.com |
| Zoom |
zoom |
api.zoom.us |
| Zoho Bigin |
zoho-bigin |
www.zohoapis.com |
| Zoho Bookings |
zoho-bookings |
www.zohoapis.com |
| Zoho Books |
zoho-books |
www.zohoapis.com |
| Zoho Calendar |
zoho-calendar |
calendar.zoho.com |
| Zoho CRM |
zoho-crm |
www.zohoapis.com |
| Zoho Inventory |
zoho-inventory |
www.zohoapis.com |
| Zoho Mail |
zoho-mail |
mail.zoho.com |
| Zoho People |
zoho-people |
people.zoho.com |
| Zoho Projects |
zoho-projects |
projectsapi.zoho.com |
| Zoho Recruit |
zoho-recruit |
recruit.zoho.com |
See references/ for detailed routing guides per provider:
- ActiveCampaign - Contacts, deals, tags, lists, automations, campaigns
- Acuity Scheduling - Appointments, calendars, clients, availability
- Airtable - Records, bases, tables
- Apify - Actors, runs, datasets, key-value stores, request queues, schedules
- Apollo - People search, enrichment, contacts
- Asana - Tasks, projects, workspaces, webhooks
- Attio - People, companies, records, tasks
- Basecamp - Projects, to-dos, messages, schedules, documents
- Baserow - Database rows, fields, tables, batch operations
- beehiiv - Publications, subscriptions, posts, custom fields
- Box - Files, folders, collaborations, shared links
- Brevo - Contacts, email campaigns, transactional emails, templates
- Brave Search - Web search, image search, news search, video search
- Buffer - Social media posts, channels, organizations, scheduling
- Calendly - Event types, scheduled events, availability, webhooks
- Cal.com - Event types, bookings, schedules, availability slots, webhooks
- CallRail - Calls, trackers, companies, tags, analytics
- Chargebee - Subscriptions, customers, invoices
- ClickFunnels - Contacts, products, orders, courses, webhooks
- ClickSend - SMS, MMS, voice messages, contacts, lists
- ClickUp - Tasks, lists, folders, spaces, webhooks
- Clockify - Time tracking, projects, clients, tasks, workspaces
- Coda - Docs, pages, tables, rows, formulas, controls
- Confluence - Pages, spaces, blogposts, comments, attachments
- CompanyCam - Projects, photos, users, tags, groups, documents
- Cognito Forms - Forms, entries, documents, files
- Constant Contact - Contacts, email campaigns, lists, segments
- Dropbox - Files, folders, search, metadata, revisions, tags
- Dropbox Business - Team members, groups, team folders, devices, audit logs
- ElevenLabs - Text-to-speech, voice cloning, sound effects, audio processing
- Eventbrite - Events, venues, tickets, orders, attendees
- Exa - Neural web search, content extraction, similar pages, AI answers, research tasks
- fal.ai - AI model inference (image generation, video, audio, upscaling)
- Fathom - Meeting recordings, transcripts, summaries, webhooks
- Firecrawl - Web scraping, crawling, site mapping, web search
- Firebase - Projects, web apps, Android apps, iOS apps, configurations
- Fireflies - Meeting transcripts, summaries, AskFred AI, channels
- Front - Conversations, messages, contacts, tags, inboxes, teammates
- GetResponse - Campaigns, contacts, newsletters, autoresponders, tags, segments
- Grafana - Dashboards, data sources, folders, annotations, alerts, teams
- GitHub - Repositories, issues, pull requests, commits
- Gumroad - Products, sales, subscribers, licenses, webhooks
- Granola MCP - MCP-based interface for meeting notes, transcripts, queries
- Google Ads - Campaigns, ad groups, GAQL queries
- Google Analytics Admin - Reports, dimensions, metrics
- Google Analytics Data - Reports, dimensions, metrics
- Google BigQuery - Datasets, tables, jobs, SQL queries
- Google Calendar - Events, calendars, free/busy
- Google Classroom - Courses, coursework, students, teachers, announcements
- Google Contacts - Contacts, contact groups, people search
- Google Docs - Document creation, batch updates
- Google Drive - Files, folders, permissions
- Google Forms - Forms, questions, responses
- Gmail - Messages, threads, labels
- Google Meet - Spaces, conference records, participants
- Google Merchant - Products, inventories, promotions, reports
- Google Play - In-app products, subscriptions, reviews
- Google Search Console - Search analytics, sitemaps
- Google Sheets - Values, ranges, formatting
- Google Slides - Presentations, slides, formatting
- Google Tasks - Task lists, tasks, subtasks
- Google Workspace Admin - Users, groups, org units, domains, roles
- HubSpot - Contacts, companies, deals
- Instantly - Campaigns, leads, accounts, email outreach
- Jira - Issues, projects, JQL queries
- Jobber - Clients, jobs, invoices, quotes (GraphQL)
- JotForm - Forms, submissions, webhooks
- Kaggle - Datasets, models, competitions, kernels
- Keap - Contacts, companies, tags, tasks, opportunities, campaigns
- Kibana - Saved objects, dashboards, data views, spaces, alerts, fleet
- Kit - Subscribers, tags, forms, sequences, broadcasts
- Klaviyo - Profiles, lists, campaigns, flows, events
- Lemlist - Campaigns, leads, activities, schedules, unsubscribes
- Linear - Issues, projects, teams, cycles (GraphQL)
- LinkedIn - Profile, posts, shares, media uploads
- Mailchimp - Audiences, campaigns, templates, automations
- MailerLite - Subscribers, groups, campaigns, automations, forms
- Mailgun - Email sending, domains, routes, templates, mailing lists, suppressions
- Make - Scenarios, organizations, teams, connections, data stores, hooks
- ManyChat - Subscribers, tags, flows, messaging
- Manus - AI agent tasks, projects, files, webhooks
- Memelord - AI meme generation, video memes, template editing
- Microsoft Excel - Workbooks, worksheets, ranges, tables, charts
- Microsoft Teams - Teams, channels, messages, members, chats
- Microsoft To Do - Task lists, tasks, checklist items, linked resources
- Monday.com - Boards, items, columns, groups (GraphQL)
- Motion - Tasks, projects, workspaces, schedules
- Netlify - Sites, deploys, builds, DNS, environment variables
- Notion - Pages, databases, blocks
- Notion MCP - MCP-based interface for pages, databases, comments, teams, users
- OneNote - Notebooks, sections, section groups, pages via Microsoft Graph
- OneDrive - Files, folders, drives, sharing
- Outlook - Mail, calendar, contacts
- PDF.co - PDF conversion, merge, split, edit, text extraction, barcodes
- Pipedrive - Deals, persons, organizations, activities
- Podio - Organizations, workspaces, apps, items, tasks, comments
- PostHog - Product analytics, feature flags, session recordings, experiments, HogQL queries
- QuickBooks - Customers, invoices, reports
- Quo - Calls, messages, contacts, conversations, webhooks
- Reducto - Document parsing, extraction, splitting, editing
- Resend - Transactional emails, domains, audiences, contacts, broadcasts, webhooks
- Salesforce - SOQL, sObjects, CRUD
- SignNow - Documents, templates, invites, e-signatures
- SendGrid - Email sending, contacts, templates, suppressions, statistics
- Sentry - Issues, events, projects, teams, releases
- SharePoint - Sites, lists, document libraries, files, folders, versions
- Slack - Messages, channels, users
- Snapchat - Ad accounts, campaigns, ad squads, ads, creatives, audiences
- Square - Payments, customers, orders, catalog, inventory, invoices
- Squarespace - Products, inventory, orders, profiles, transactions
- Stripe - Customers, subscriptions, payments
- Sunsama MCP - MCP-based interface for tasks, calendar, backlog, objectives, time tracking
- Supabase - Database tables, auth users, storage buckets
- Systeme.io - Contacts, tags, courses, communities, webhooks
- Tally - Forms, submissions, workspaces, webhooks
- Tavily - AI web search, content extraction, crawling, research tasks
- Telegram - Messages, chats, bots, updates, polls
- TickTick - Tasks, projects, task lists
- Todoist - Tasks, projects, sections, labels, comments
- Toggl Track - Time entries, projects, clients, tags, workspaces
- Trello - Boards, lists, cards, checklists
- Twilio - SMS, voice calls, phone numbers, messaging
- Twenty CRM - Companies, people, opportunities, notes, tasks
- Typeform - Forms, responses, insights
- Unbounce - Landing pages, leads, accounts, sub-accounts, domains
- Vercel - Projects, deployments, domains, environment variables
- Vimeo - Videos, folders, albums, comments, likes
- WATI - WhatsApp messages, contacts, templates, interactive messages
- WhatsApp Business - Messages, templates, media
- WooCommerce - Products, orders, customers, coupons
- WordPress.com - Posts, pages, sites, users, settings
- Wrike - Tasks, folders, projects, spaces, comments, timelogs, workflows
- Xero - Contacts, invoices, reports
- YouTube - Videos, playlists, channels, subscriptions
- Zoom - Meetings, recordings, webinars, users
- Zoho Bigin - Contacts, companies, pipelines, products
- Zoho Bookings - Appointments, services, staff, workspaces
- Zoho Books - Invoices, contacts, bills, expenses
- Zoho Calendar - Calendars, events, attendees, reminders
- Zoho CRM - Leads, contacts, accounts, deals, search
- Zoho Inventory - Items, sales orders, invoices, purchase orders, bills
- Zoho Mail - Messages, folders, labels, attachments
- Zoho People - Employees, departments, designations, attendance, leave
- Zoho Projects - Projects, tasks, milestones, tasklists, comments
- Zoho Recruit - Candidates, job openings, interviews, applications
Examples
Slack - Post Message (Native API)
# Native Slack API: POST https://slack.com/api/chat.postMessage
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'channel': 'C0123456', 'text': 'Hello!'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/slack/api/chat.postMessage', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json; charset=utf-8')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
HubSpot - Create Contact (Native API)
# Native HubSpot API: POST https://api.hubapi.com/crm/v3/objects/contacts
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'properties': {'email': 'john@example.com', 'firstname': 'John', 'lastname': 'Doe'}}).encode()
req = urllib.request.Request('https://gateway.maton.ai/hubspot/crm/v3/objects/contacts', 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
Google Sheets - Get Spreadsheet Values (Native API)
# Native Sheets API: GET https://sheets.googleapis.com/v4/spreadsheets/{id}/values/{range}
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/google-sheets/v4/spreadsheets/122BS1sFN2RKL8AOUQjkLdubzOwgqzPT64KfZ2rvYI4M/values/Sheet1!A1:B2')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Salesforce - SOQL Query (Native API)
# Native Salesforce API: GET https://{instance}.salesforce.com/services/data/v64.0/query?q=...
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/salesforce/services/data/v64.0/query?q=SELECT+Id,Name+FROM+Contact+LIMIT+10')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Airtable - List Tables (Native API)
# Native Airtable API: GET https://api.airtable.com/v0/meta/bases/{id}/tables
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/airtable/v0/meta/bases/appgqan2NzWGP5sBK/tables')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Notion - Query Database (Native API)
# Native Notion API: POST https://api.notion.com/v1/data_sources/{id}/query
python <<'EOF'
import urllib.request, os, json
data = json.dumps({}).encode()
req = urllib.request.Request('https://gateway.maton.ai/notion/v1/data_sources/23702dc5-9a3b-8001-9e1c-000b5af0a980/query', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('Notion-Version', '2025-09-03')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Stripe - List Customers (Native API)
# Native Stripe API: GET https://api.stripe.com/v1/customers
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/stripe/v1/customers?limit=10')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Code Examples
JavaScript (Node.js)
const response = await fetch('https://gateway.maton.ai/slack/api/chat.postMessage', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
},
body: JSON.stringify({ channel: 'C0123456', text: 'Hello!' })
});
Python
import os
import requests
response = requests.post(
'https://gateway.maton.ai/slack/api/chat.postMessage',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
json={'channel': 'C0123456', 'text': 'Hello!'}
)
Error Handling
| Status |
Meaning |
| 400 |
Missing connection for the requested app |
| 401 |
Invalid or missing Maton API key |
| 429 |
Rate limited (10 requests/second per account) |
| 500 |
Internal Server Error |
| 4xx/5xx |
Passthrough error from the target API |
Errors from the target API are passed through with their original status codes and response bodies.
Troubleshooting: API Key Issues
- Check that the
MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
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
- Verify your URL path starts with the correct app name. The path must begin 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
- Ensure you have an active connection for the app. List your connections to verify:
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
Troubleshooting: Server Error
A 500 error may indicate an expired OAuth token. Try creating a new connection via the Connection Management section above and completing OAuth authorization. If the new connection is "ACTIVE", delete the old connection to ensure the gateway uses the new one.
Rate Limits
- 10 requests per second per account
- Target API rate limits also apply
Notes
- When using curl with URLs containing brackets (
fields[], sort[], records[]), use the -g flag to disable glob parsing
- When piping curl output to
jq, environment variables may not expand correctly in some shells, which can cause "Invalid API key" errors
- Media upload URLs (LinkedIn, etc.): Some APIs return pre-signed upload URLs that point to a different host than the gateway proxies (e.g., LinkedIn returns
www.linkedin.com upload URLs, but the gateway proxies api.linkedin.com). These upload URLs are pre-signed and do NOT require an Authorization header — upload the binary directly to the returned URL without going through the gateway. You MUST use Python urllib for these uploads because the URLs contain encoded characters (e.g., %253D) that get corrupted when passed through shell variables or curl. Always parse the JSON response with json.load() and use the URL directly in Python.
Tips
Use native API docs: Refer to each service's official API documentation for endpoint paths and parameters.
Headers are forwarded: Custom headers (except Host and Authorization) are forwarded to the target API.
Query params work: URL query parameters are passed through to the target API.
All HTTP methods supported: GET, POST, PUT, PATCH, DELETE are all supported.
QuickBooks special case: Use :realmId in the path and it will be replaced with the connected realm ID.
Optional
1---
2name: api-gateway
3description: 'Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth.
4
5 Use this skill when users want to interact with external services.
6
7 Security: The MATON_API_KEY authenticates with Maton.ai but grants NO access to third-party services by itself. Each service requires explicit OAuth authorization by the user through Maton''s connect
8 flow. Access is strictly scoped to connections the user has authorized. Provided by Maton (https://maton.ai).
9
10 '
11description_zh: 连接 100+ API 服务(Google、Microsoft、GitHub 等),通过 OAuth 管理授权
12description_en: Connect to 100+ APIs (Google, Microsoft, GitHub, etc.) with managed OAuth
13version: 1.0.80
14metadata:
15 author: maton
16 version: '1.0'
17 clawdbot:
18 emoji: 🧠
19 homepage: https://maton.ai
20 requires:
21 env:
22 - MATON_API_KEY
23compatibility: Requires network access and valid Maton API key
24---
25
26# API Gateway
27
28Passthrough proxy for direct access to third-party APIs using managed OAuth connections, provided by [Maton](https://maton.ai). The API gateway lets you call native API endpoints directly.
29
30## Quick Start
31
32```bash
33# Native Slack API call
34python <<'EOF'
35import urllib.request, os, json
36data = json.dumps({'channel': 'C0123456', 'text': 'Hello from gateway!'}).encode()
37req = urllib.request.Request('https://gateway.maton.ai/slack/api/chat.postMessage', data=data, method='POST')
38req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
39req.add_header('Content-Type', 'application/json')
40print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
41EOF
42```
43
44
45## Base URL
46
47```
48https://gateway.maton.ai/{app}/{native-api-path}
49```
50
51Replace `{app}` with the service name and `{native-api-path}` with the actual API endpoint path.
52
53IMPORTANT: The URL path MUST start with the connection's app name (eg. `/google-mail/...`). This prefix tells the gateway which app connection to use. For example, the native Gmail API path starts with `gmail/v1/`, so full paths look like `/google-mail/gmail/v1/users/me/messages`.
54
55## Authentication
56
57All requests require the Maton API key in the Authorization header:
58
59```
60Authorization: Bearer $MATON_API_KEY
61```
62
63The API gateway automatically injects the appropriate OAuth token for the target service.
64
65**Environment Variable:** You can set your API key as the `MATON_API_KEY` environment variable:
66
67```bash
68export MATON_API_KEY="YOUR_API_KEY"
69```
70
71## Getting Your API Key
72
731. Sign in or create an account at [maton.ai](https://maton.ai)
742. Go to [maton.ai/settings](https://maton.ai/settings)
753. Click the copy button on the right side of API Key section to copy it
76
77## Connection Management
78
79Connection management uses a separate base URL: `https://ctrl.maton.ai`
80
81### List Connections
82
83```bash
84python <<'EOF'
85import urllib.request, os, json
86req = urllib.request.Request('https://ctrl.maton.ai/connections?app=slack&status=ACTIVE')
87req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
88print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
89EOF
90```
91
92**Query Parameters (optional):**
93- `app` - Filter by service name (e.g., `slack`, `hubspot`, `salesforce`)
94- `status` - Filter by connection status (`ACTIVE`, `PENDING`, `FAILED`)
95
96**Response:**
97```json
98{
99 "connections": [
100 {
101 "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
102 "status": "ACTIVE",
103 "creation_time": "2025-12-08T07:20:53.488460Z",
104 "last_updated_time": "2026-01-31T20:03:32.593153Z",
105 "url": "https://connect.maton.ai/?session_token=5e9...",
106 "app": "slack",
107 "method": "OAUTH2",
108 "metadata": {}
109 }
110 ]
111}
112```
113
114### Create Connection
115
116```bash
117python <<'EOF'
118import urllib.request, os, json
119data = json.dumps({'app': 'slack'}).encode()
120req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
121req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
122req.add_header('Content-Type', 'application/json')
123print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
124EOF
125```
126
127**Request Body:**
128- `app` (required) - Service name (e.g., `slack`, `notion`)
129- `method` (optional) - Connection method (`API_KEY`, `BASIC`, `OAUTH1`, `OAUTH2`, `MCP`)
130
131### Get Connection
132
133```bash
134python <<'EOF'
135import urllib.request, os, json
136req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
137req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
138print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
139EOF
140```
141
142**Response:**
143```json
144{
145 "connection": {
146 "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
147 "status": "ACTIVE",
148 "creation_time": "2025-12-08T07:20:53.488460Z",
149 "last_updated_time": "2026-01-31T20:03:32.593153Z",
150 "url": "https://connect.maton.ai/?session_token=5e9...",
151 "app": "slack",
152 "metadata": {}
153 }
154}
155```
156
157Open the returned URL in a browser to complete OAuth.
158
159### Delete Connection
160
161```bash
162python <<'EOF'
163import urllib.request, os, json
164req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
165req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
166print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
167EOF
168```
169
170### Specifying Connection
171
172If you have multiple connections for the same app, you can specify which connection to use by adding the `Maton-Connection` header with the connection ID:
173
174```bash
175python <<'EOF'
176import urllib.request, os, json
177data = json.dumps({'channel': 'C0123456', 'text': 'Hello!'}).encode()
178req = urllib.request.Request('https://gateway.maton.ai/slack/api/chat.postMessage', data=data, method='POST')
179req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
180req.add_header('Content-Type', 'application/json')
181req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
182print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
183EOF
184```
185
186If omitted, the gateway uses the default (oldest) active connection for that app.
187
188## Supported Services
189
190| Service | App Name | Base URL Proxied |
191|---------|----------|------------------|
192| ActiveCampaign | `active-campaign` | `{account}.api-us1.com` |
193| Acuity Scheduling | `acuity-scheduling` | `acuityscheduling.com` |
194| Airtable | `airtable` | `api.airtable.com` |
195| Apify | `apify` | `api.apify.com` |
196| Apollo | `apollo` | `api.apollo.io` |
197| Asana | `asana` | `app.asana.com` |
198| Attio | `attio` | `api.attio.com` |
199| Basecamp | `basecamp` | `3.basecampapi.com` |
200| Baserow | `baserow` | `api.baserow.io` |
201| beehiiv | `beehiiv` | `api.beehiiv.com` |
202| Box | `box` | `api.box.com` |
203| Brevo | `brevo` | `api.brevo.com` |
204| Brave Search | `brave-search` | `api.search.brave.com` |
205| Buffer | `buffer` | `api.buffer.com` |
206| Calendly | `calendly` | `api.calendly.com` |
207| Cal.com | `cal-com` | `api.cal.com` |
208| CallRail | `callrail` | `api.callrail.com` |
209| Chargebee | `chargebee` | `{subdomain}.chargebee.com` |
210| ClickFunnels | `clickfunnels` | `{subdomain}.myclickfunnels.com` |
211| ClickSend | `clicksend` | `rest.clicksend.com` |
212| ClickUp | `clickup` | `api.clickup.com` |
213| Clockify | `clockify` | `api.clockify.me` |
214| Coda | `coda` | `coda.io` |
215| Confluence | `confluence` | `api.atlassian.com` |
216| CompanyCam | `companycam` | `api.companycam.com` |
217| Cognito Forms | `cognito-forms` | `www.cognitoforms.com` |
218| Constant Contact | `constant-contact` | `api.cc.email` |
219| Dropbox | `dropbox` | `api.dropboxapi.com` |
220| Dropbox Business | `dropbox-business` | `api.dropboxapi.com` |
221| ElevenLabs | `elevenlabs` | `api.elevenlabs.io` |
222| Eventbrite | `eventbrite` | `www.eventbriteapi.com` |
223| Exa | `exa` | `api.exa.ai` |
224| fal.ai | `fal-ai` | `queue.fal.run` |
225| Fathom | `fathom` | `api.fathom.ai` |
226| Firecrawl | `firecrawl` | `api.firecrawl.dev` |
227| Firebase | `firebase` | `firebase.googleapis.com` |
228| Fireflies | `fireflies` | `api.fireflies.ai` |
229| Front | `front` | `api2.frontapp.com` |
230| GetResponse | `getresponse` | `api.getresponse.com` |
231| Grafana | `grafana` | User's Grafana instance |
232| GitHub | `github` | `api.github.com` |
233| Gumroad | `gumroad` | `api.gumroad.com` |
234| Granola MCP | `granola` | `mcp.granola.ai` |
235| Google Ads | `google-ads` | `googleads.googleapis.com` |
236| Google BigQuery | `google-bigquery` | `bigquery.googleapis.com` |
237| Google Analytics Admin | `google-analytics-admin` | `analyticsadmin.googleapis.com` |
238| Google Analytics Data | `google-analytics-data` | `analyticsdata.googleapis.com` |
239| Google Calendar | `google-calendar` | `www.googleapis.com` |
240| Google Classroom | `google-classroom` | `classroom.googleapis.com` |
241| Google Contacts | `google-contacts` | `people.googleapis.com` |
242| Google Docs | `google-docs` | `docs.googleapis.com` |
243| Google Drive | `google-drive` | `www.googleapis.com` |
244| Google Forms | `google-forms` | `forms.googleapis.com` |
245| Gmail | `google-mail` | `gmail.googleapis.com` |
246| Google Merchant | `google-merchant` | `merchantapi.googleapis.com` |
247| Google Meet | `google-meet` | `meet.googleapis.com` |
248| Google Play | `google-play` | `androidpublisher.googleapis.com` |
249| Google Search Console | `google-search-console` | `www.googleapis.com` |
250| Google Sheets | `google-sheets` | `sheets.googleapis.com` |
251| Google Slides | `google-slides` | `slides.googleapis.com` |
252| Google Tasks | `google-tasks` | `tasks.googleapis.com` |
253| Google Workspace Admin | `google-workspace-admin` | `admin.googleapis.com` |
254| HubSpot | `hubspot` | `api.hubapi.com` |
255| Instantly | `instantly` | `api.instantly.ai` |
256| Jira | `jira` | `api.atlassian.com` |
257| Jobber | `jobber` | `api.getjobber.com` |
258| JotForm | `jotform` | `api.jotform.com` |
259| Kaggle | `kaggle` | `api.kaggle.com` |
260| Keap | `keap` | `api.infusionsoft.com` |
261| Kibana | `kibana` | User's Kibana instance |
262| Kit | `kit` | `api.kit.com` |
263| Klaviyo | `klaviyo` | `a.klaviyo.com` |
264| Lemlist | `lemlist` | `api.lemlist.com` |
265| Linear | `linear` | `api.linear.app` |
266| LinkedIn | `linkedin` | `api.linkedin.com` |
267| Mailchimp | `mailchimp` | `{dc}.api.mailchimp.com` |
268| MailerLite | `mailerlite` | `connect.mailerlite.com` |
269| Mailgun | `mailgun` | `api.mailgun.net` |
270| Make | `make` | `{zone}.make.com` |
271| ManyChat | `manychat` | `api.manychat.com` |
272| Manus | `manus` | `api.manus.ai` |
273| Memelord | `memelord` | `www.memelord.com` |
274| Microsoft Excel | `microsoft-excel` | `graph.microsoft.com` |
275| Microsoft Teams | `microsoft-teams` | `graph.microsoft.com` |
276| Microsoft To Do | `microsoft-to-do` | `graph.microsoft.com` |
277| Monday.com | `monday` | `api.monday.com` |
278| Motion | `motion` | `api.usemotion.com` |
279| Netlify | `netlify` | `api.netlify.com` |
280| Notion | `notion` | `api.notion.com` |
281| Notion MCP | `notion` | `mcp.notion.com` |
282| OneNote | `one-note` | `graph.microsoft.com` |
283| OneDrive | `one-drive` | `graph.microsoft.com` |
284| Outlook | `outlook` | `graph.microsoft.com` |
285| PDF.co | `pdf-co` | `api.pdf.co` |
286| Pipedrive | `pipedrive` | `api.pipedrive.com` |
287| Podio | `podio` | `api.podio.com` |
288| PostHog | `posthog` | `{subdomain}.posthog.com` |
289| QuickBooks | `quickbooks` | `quickbooks.api.intuit.com` |
290| Quo | `quo` | `api.openphone.com` |
291| Reducto | `reducto` | `platform.reducto.ai` |
292| Resend | `resend` | `api.resend.com` |
293| Salesforce | `salesforce` | `{instance}.salesforce.com` |
294| Sentry | `sentry` | `{subdomain}.sentry.io` |
295| SharePoint | `sharepoint` | `graph.microsoft.com` |
296| SignNow | `signnow` | `api.signnow.com` |
297| Slack | `slack` | `slack.com` |
298| Snapchat | `snapchat` | `adsapi.snapchat.com` |
299| Square | `squareup` | `connect.squareup.com` |
300| Squarespace | `squarespace` | `api.squarespace.com` |
301| Stripe | `stripe` | `api.stripe.com` |
302| Sunsama MCP | `sunsama` | MCP server |
303| Supabase | `supabase` | `{project_ref}.supabase.co` |
304| Systeme.io | `systeme` | `api.systeme.io` |
305| Tally | `tally` | `api.tally.so` |
306| Tavily | `tavily` | `api.tavily.com` |
307| Telegram | `telegram` | `api.telegram.org` |
308| TickTick | `ticktick` | `api.ticktick.com` |
309| Todoist | `todoist` | `api.todoist.com` |
310| Toggl Track | `toggl-track` | `api.track.toggl.com` |
311| Trello | `trello` | `api.trello.com` |
312| Twilio | `twilio` | `api.twilio.com` |
313| Twenty CRM | `twenty` | `api.twenty.com` |
314| Typeform | `typeform` | `api.typeform.com` |
315| Unbounce | `unbounce` | `api.unbounce.com` |
316| Vercel | `vercel` | `api.vercel.com` |
317| Vimeo | `vimeo` | `api.vimeo.com` |
318| WATI | `wati` | `{tenant}.wati.io` |
319| WhatsApp Business | `whatsapp-business` | `graph.facebook.com` |
320| WooCommerce | `woocommerce` | `{store-url}/wp-json/wc/v3` |
321| WordPress.com | `wordpress` | `public-api.wordpress.com` |
322| Wrike | `wrike` | `www.wrike.com` |
323| Xero | `xero` | `api.xero.com` |
324| YouTube | `youtube` | `www.googleapis.com` |
325| Zoom | `zoom` | `api.zoom.us` |
326| Zoho Bigin | `zoho-bigin` | `www.zohoapis.com` |
327| Zoho Bookings | `zoho-bookings` | `www.zohoapis.com` |
328| Zoho Books | `zoho-books` | `www.zohoapis.com` |
329| Zoho Calendar | `zoho-calendar` | `calendar.zoho.com` |
330| Zoho CRM | `zoho-crm` | `www.zohoapis.com` |
331| Zoho Inventory | `zoho-inventory` | `www.zohoapis.com` |
332| Zoho Mail | `zoho-mail` | `mail.zoho.com` |
333| Zoho People | `zoho-people` | `people.zoho.com` |
334| Zoho Projects | `zoho-projects` | `projectsapi.zoho.com` |
335| Zoho Recruit | `zoho-recruit` | `recruit.zoho.com` |
336
337See [references/](references/) for detailed routing guides per provider:
338- [ActiveCampaign](references/active-campaign/README.md) - Contacts, deals, tags, lists, automations, campaigns
339- [Acuity Scheduling](references/acuity-scheduling/README.md) - Appointments, calendars, clients, availability
340- [Airtable](references/airtable/README.md) - Records, bases, tables
341- [Apify](references/apify/README.md) - Actors, runs, datasets, key-value stores, request queues, schedules
342- [Apollo](references/apollo/README.md) - People search, enrichment, contacts
343- [Asana](references/asana/README.md) - Tasks, projects, workspaces, webhooks
344- [Attio](references/attio/README.md) - People, companies, records, tasks
345- [Basecamp](references/basecamp/README.md) - Projects, to-dos, messages, schedules, documents
346- [Baserow](references/baserow/README.md) - Database rows, fields, tables, batch operations
347- [beehiiv](references/beehiiv/README.md) - Publications, subscriptions, posts, custom fields
348- [Box](references/box/README.md) - Files, folders, collaborations, shared links
349- [Brevo](references/brevo/README.md) - Contacts, email campaigns, transactional emails, templates
350- [Brave Search](references/brave-search/README.md) - Web search, image search, news search, video search
351- [Buffer](references/buffer/README.md) - Social media posts, channels, organizations, scheduling
352- [Calendly](references/calendly/README.md) - Event types, scheduled events, availability, webhooks
353- [Cal.com](references/cal-com/README.md) - Event types, bookings, schedules, availability slots, webhooks
354- [CallRail](references/callrail/README.md) - Calls, trackers, companies, tags, analytics
355- [Chargebee](references/chargebee/README.md) - Subscriptions, customers, invoices
356- [ClickFunnels](references/clickfunnels/README.md) - Contacts, products, orders, courses, webhooks
357- [ClickSend](references/clicksend/README.md) - SMS, MMS, voice messages, contacts, lists
358- [ClickUp](references/clickup/README.md) - Tasks, lists, folders, spaces, webhooks
359- [Clockify](references/clockify/README.md) - Time tracking, projects, clients, tasks, workspaces
360- [Coda](references/coda/README.md) - Docs, pages, tables, rows, formulas, controls
361- [Confluence](references/confluence/README.md) - Pages, spaces, blogposts, comments, attachments
362- [CompanyCam](references/companycam/README.md) - Projects, photos, users, tags, groups, documents
363- [Cognito Forms](references/cognito-forms/README.md) - Forms, entries, documents, files
364- [Constant Contact](references/constant-contact/README.md) - Contacts, email campaigns, lists, segments
365- [Dropbox](references/dropbox/README.md) - Files, folders, search, metadata, revisions, tags
366- [Dropbox Business](references/dropbox-business/README.md) - Team members, groups, team folders, devices, audit logs
367- [ElevenLabs](references/elevenlabs/README.md) - Text-to-speech, voice cloning, sound effects, audio processing
368- [Eventbrite](references/eventbrite/README.md) - Events, venues, tickets, orders, attendees
369- [Exa](references/exa/README.md) - Neural web search, content extraction, similar pages, AI answers, research tasks
370- [fal.ai](references/fal-ai/README.md) - AI model inference (image generation, video, audio, upscaling)
371- [Fathom](references/fathom/README.md) - Meeting recordings, transcripts, summaries, webhooks
372- [Firecrawl](references/firecrawl/README.md) - Web scraping, crawling, site mapping, web search
373- [Firebase](references/firebase/README.md) - Projects, web apps, Android apps, iOS apps, configurations
374- [Fireflies](references/fireflies/README.md) - Meeting transcripts, summaries, AskFred AI, channels
375- [Front](references/front/README.md) - Conversations, messages, contacts, tags, inboxes, teammates
376- [GetResponse](references/getresponse/README.md) - Campaigns, contacts, newsletters, autoresponders, tags, segments
377- [Grafana](references/grafana/README.md) - Dashboards, data sources, folders, annotations, alerts, teams
378- [GitHub](references/github/README.md) - Repositories, issues, pull requests, commits
379- [Gumroad](references/gumroad/README.md) - Products, sales, subscribers, licenses, webhooks
380- [Granola MCP](references/granola-mcp/README.md) - MCP-based interface for meeting notes, transcripts, queries
381- [Google Ads](references/google-ads/README.md) - Campaigns, ad groups, GAQL queries
382- [Google Analytics Admin](references/google-analytics-admin/README.md) - Reports, dimensions, metrics
383- [Google Analytics Data](references/google-analytics-data/README.md) - Reports, dimensions, metrics
384- [Google BigQuery](references/google-bigquery/README.md) - Datasets, tables, jobs, SQL queries
385- [Google Calendar](references/google-calendar/README.md) - Events, calendars, free/busy
386- [Google Classroom](references/google-classroom/README.md) - Courses, coursework, students, teachers, announcements
387- [Google Contacts](references/google-contacts/README.md) - Contacts, contact groups, people search
388- [Google Docs](references/google-docs/README.md) - Document creation, batch updates
389- [Google Drive](references/google-drive/README.md) - Files, folders, permissions
390- [Google Forms](references/google-forms/README.md) - Forms, questions, responses
391- [Gmail](references/google-mail/README.md) - Messages, threads, labels
392- [Google Meet](references/google-meet/README.md) - Spaces, conference records, participants
393- [Google Merchant](references/google-merchant/README.md) - Products, inventories, promotions, reports
394- [Google Play](references/google-play/README.md) - In-app products, subscriptions, reviews
395- [Google Search Console](references/google-search-console/README.md) - Search analytics, sitemaps
396- [Google Sheets](references/google-sheets/README.md) - Values, ranges, formatting
397- [Google Slides](references/google-slides/README.md) - Presentations, slides, formatting
398- [Google Tasks](references/google-tasks/README.md) - Task lists, tasks, subtasks
399- [Google Workspace Admin](references/google-workspace-admin/README.md) - Users, groups, org units, domains, roles
400- [HubSpot](references/hubspot/README.md) - Contacts, companies, deals
401- [Instantly](references/instantly/README.md) - Campaigns, leads, accounts, email outreach
402- [Jira](references/jira/README.md) - Issues, projects, JQL queries
403- [Jobber](references/jobber/README.md) - Clients, jobs, invoices, quotes (GraphQL)
404- [JotForm](references/jotform/README.md) - Forms, submissions, webhooks
405- [Kaggle](references/kaggle/README.md) - Datasets, models, competitions, kernels
406- [Keap](references/keap/README.md) - Contacts, companies, tags, tasks, opportunities, campaigns
407- [Kibana](references/kibana/README.md) - Saved objects, dashboards, data views, spaces, alerts, fleet
408- [Kit](references/kit/README.md) - Subscribers, tags, forms, sequences, broadcasts
409- [Klaviyo](references/klaviyo/README.md) - Profiles, lists, campaigns, flows, events
410- [Lemlist](references/lemlist/README.md) - Campaigns, leads, activities, schedules, unsubscribes
411- [Linear](references/linear/README.md) - Issues, projects, teams, cycles (GraphQL)
412- [LinkedIn](references/linkedin/README.md) - Profile, posts, shares, media uploads
413- [Mailchimp](references/mailchimp/README.md) - Audiences, campaigns, templates, automations
414- [MailerLite](references/mailerlite/README.md) - Subscribers, groups, campaigns, automations, forms
415- [Mailgun](references/mailgun/README.md) - Email sending, domains, routes, templates, mailing lists, suppressions
416- [Make](references/make/README.md) - Scenarios, organizations, teams, connections, data stores, hooks
417- [ManyChat](references/manychat/README.md) - Subscribers, tags, flows, messaging
418- [Manus](references/manus/README.md) - AI agent tasks, projects, files, webhooks
419- [Memelord](references/memelord/README.md) - AI meme generation, video memes, template editing
420- [Microsoft Excel](references/microsoft-excel/README.md) - Workbooks, worksheets, ranges, tables, charts
421- [Microsoft Teams](references/microsoft-teams/README.md) - Teams, channels, messages, members, chats
422- [Microsoft To Do](references/microsoft-to-do/README.md) - Task lists, tasks, checklist items, linked resources
423- [Monday.com](references/monday/README.md) - Boards, items, columns, groups (GraphQL)
424- [Motion](references/motion/README.md) - Tasks, projects, workspaces, schedules
425- [Netlify](references/netlify/README.md) - Sites, deploys, builds, DNS, environment variables
426- [Notion](references/notion/README.md) - Pages, databases, blocks
427- [Notion MCP](references/notion-mcp/README.md) - MCP-based interface for pages, databases, comments, teams, users
428- [OneNote](references/one-note/README.md) - Notebooks, sections, section groups, pages via Microsoft Graph
429- [OneDrive](references/one-drive/README.md) - Files, folders, drives, sharing
430- [Outlook](references/outlook/README.md) - Mail, calendar, contacts
431- [PDF.co](references/pdf-co/README.md) - PDF conversion, merge, split, edit, text extraction, barcodes
432- [Pipedrive](references/pipedrive/README.md) - Deals, persons, organizations, activities
433- [Podio](references/podio/README.md) - Organizations, workspaces, apps, items, tasks, comments
434- [PostHog](references/posthog/README.md) - Product analytics, feature flags, session recordings, experiments, HogQL queries
435- [QuickBooks](references/quickbooks/README.md) - Customers, invoices, reports
436- [Quo](references/quo/README.md) - Calls, messages, contacts, conversations, webhooks
437- [Reducto](references/reducto/README.md) - Document parsing, extraction, splitting, editing
438- [Resend](references/resend/README.md) - Transactional emails, domains, audiences, contacts, broadcasts, webhooks
439- [Salesforce](references/salesforce/README.md) - SOQL, sObjects, CRUD
440- [SignNow](references/signnow/README.md) - Documents, templates, invites, e-signatures
441- [SendGrid](references/sendgrid/README.md) - Email sending, contacts, templates, suppressions, statistics
442- [Sentry](references/sentry/README.md) - Issues, events, projects, teams, releases
443- [SharePoint](references/sharepoint/README.md) - Sites, lists, document libraries, files, folders, versions
444- [Slack](references/slack/README.md) - Messages, channels, users
445- [Snapchat](references/snapchat/README.md) - Ad accounts, campaigns, ad squads, ads, creatives, audiences
446- [Square](references/squareup/README.md) - Payments, customers, orders, catalog, inventory, invoices
447- [Squarespace](references/squarespace/README.md) - Products, inventory, orders, profiles, transactions
448- [Stripe](references/stripe/README.md) - Customers, subscriptions, payments
449- [Sunsama MCP](references/sunsama-mcp/README.md) - MCP-based interface for tasks, calendar, backlog, objectives, time tracking
450- [Supabase](references/supabase/README.md) - Database tables, auth users, storage buckets
451- [Systeme.io](references/systeme/README.md) - Contacts, tags, courses, communities, webhooks
452- [Tally](references/tally/README.md) - Forms, submissions, workspaces, webhooks
453- [Tavily](references/tavily/README.md) - AI web search, content extraction, crawling, research tasks
454- [Telegram](references/telegram/README.md) - Messages, chats, bots, updates, polls
455- [TickTick](references/ticktick/README.md) - Tasks, projects, task lists
456- [Todoist](references/todoist/README.md) - Tasks, projects, sections, labels, comments
457- [Toggl Track](references/toggl-track/README.md) - Time entries, projects, clients, tags, workspaces
458- [Trello](references/trello/README.md) - Boards, lists, cards, checklists
459- [Twilio](references/twilio/README.md) - SMS, voice calls, phone numbers, messaging
460- [Twenty CRM](references/twenty/README.md) - Companies, people, opportunities, notes, tasks
461- [Typeform](references/typeform/README.md) - Forms, responses, insights
462- [Unbounce](references/unbounce/README.md) - Landing pages, leads, accounts, sub-accounts, domains
463- [Vercel](references/vercel/README.md) - Projects, deployments, domains, environment variables
464- [Vimeo](references/vimeo/README.md) - Videos, folders, albums, comments, likes
465- [WATI](references/wati/README.md) - WhatsApp messages, contacts, templates, interactive messages
466- [WhatsApp Business](references/whatsapp-business/README.md) - Messages, templates, media
467- [WooCommerce](references/woocommerce/README.md) - Products, orders, customers, coupons
468- [WordPress.com](references/wordpress/README.md) - Posts, pages, sites, users, settings
469- [Wrike](references/wrike/README.md) - Tasks, folders, projects, spaces, comments, timelogs, workflows
470- [Xero](references/xero/README.md) - Contacts, invoices, reports
471- [YouTube](references/youtube/README.md) - Videos, playlists, channels, subscriptions
472- [Zoom](references/zoom/README.md) - Meetings, recordings, webinars, users
473- [Zoho Bigin](references/zoho-bigin/README.md) - Contacts, companies, pipelines, products
474- [Zoho Bookings](references/zoho-bookings/README.md) - Appointments, services, staff, workspaces
475- [Zoho Books](references/zoho-books/README.md) - Invoices, contacts, bills, expenses
476- [Zoho Calendar](references/zoho-calendar/README.md) - Calendars, events, attendees, reminders
477- [Zoho CRM](references/zoho-crm/README.md) - Leads, contacts, accounts, deals, search
478- [Zoho Inventory](references/zoho-inventory/README.md) - Items, sales orders, invoices, purchase orders, bills
479- [Zoho Mail](references/zoho-mail/README.md) - Messages, folders, labels, attachments
480- [Zoho People](references/zoho-people/README.md) - Employees, departments, designations, attendance, leave
481- [Zoho Projects](references/zoho-projects/README.md) - Projects, tasks, milestones, tasklists, comments
482- [Zoho Recruit](references/zoho-recruit/README.md) - Candidates, job openings, interviews, applications
483
484## Examples
485
486### Slack - Post Message (Native API)
487
488```bash
489# Native Slack API: POST https://slack.com/api/chat.postMessage
490python <<'EOF'
491import urllib.request, os, json
492data = json.dumps({'channel': 'C0123456', 'text': 'Hello!'}).encode()
493req = urllib.request.Request('https://gateway.maton.ai/slack/api/chat.postMessage', data=data, method='POST')
494req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
495req.add_header('Content-Type', 'application/json; charset=utf-8')
496print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
497EOF
498```
499
500### HubSpot - Create Contact (Native API)
501
502```bash
503# Native HubSpot API: POST https://api.hubapi.com/crm/v3/objects/contacts
504python <<'EOF'
505import urllib.request, os, json
506data = json.dumps({'properties': {'email': 'john@example.com', 'firstname': 'John', 'lastname': 'Doe'}}).encode()
507req = urllib.request.Request('https://gateway.maton.ai/hubspot/crm/v3/objects/contacts', data=data, method='POST')
508req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
509req.add_header('Content-Type', 'application/json')
510print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
511EOF
512```
513
514### Google Sheets - Get Spreadsheet Values (Native API)
515
516```bash
517# Native Sheets API: GET https://sheets.googleapis.com/v4/spreadsheets/{id}/values/{range}
518python <<'EOF'
519import urllib.request, os, json
520req = urllib.request.Request('https://gateway.maton.ai/google-sheets/v4/spreadsheets/122BS1sFN2RKL8AOUQjkLdubzOwgqzPT64KfZ2rvYI4M/values/Sheet1!A1:B2')
521req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
522print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
523EOF
524```
525
526### Salesforce - SOQL Query (Native API)
527
528```bash
529# Native Salesforce API: GET https://{instance}.salesforce.com/services/data/v64.0/query?q=...
530python <<'EOF'
531import urllib.request, os, json
532req = urllib.request.Request('https://gateway.maton.ai/salesforce/services/data/v64.0/query?q=SELECT+Id,Name+FROM+Contact+LIMIT+10')
533req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
534print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
535EOF
536```
537
538### Airtable - List Tables (Native API)
539
540```bash
541# Native Airtable API: GET https://api.airtable.com/v0/meta/bases/{id}/tables
542python <<'EOF'
543import urllib.request, os, json
544req = urllib.request.Request('https://gateway.maton.ai/airtable/v0/meta/bases/appgqan2NzWGP5sBK/tables')
545req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
546print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
547EOF
548```
549
550### Notion - Query Database (Native API)
551
552```bash
553# Native Notion API: POST https://api.notion.com/v1/data_sources/{id}/query
554python <<'EOF'
555import urllib.request, os, json
556data = json.dumps({}).encode()
557req = urllib.request.Request('https://gateway.maton.ai/notion/v1/data_sources/23702dc5-9a3b-8001-9e1c-000b5af0a980/query', data=data, method='POST')
558req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
559req.add_header('Content-Type', 'application/json')
560req.add_header('Notion-Version', '2025-09-03')
561print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
562EOF
563```
564
565### Stripe - List Customers (Native API)
566
567```bash
568# Native Stripe API: GET https://api.stripe.com/v1/customers
569python <<'EOF'
570import urllib.request, os, json
571req = urllib.request.Request('https://gateway.maton.ai/stripe/v1/customers?limit=10')
572req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
573print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
574EOF
575```
576
577## Code Examples
578
579### JavaScript (Node.js)
580
581```javascript
582const response = await fetch('https://gateway.maton.ai/slack/api/chat.postMessage', {
583 method: 'POST',
584 headers: {
585 'Content-Type': 'application/json',
586 'Authorization': `Bearer ${process.env.MATON_API_KEY}`
587 },
588 body: JSON.stringify({ channel: 'C0123456', text: 'Hello!' })
589});
590```
591
592### Python
593
594```python
595import os
596import requests
597
598response = requests.post(
599 'https://gateway.maton.ai/slack/api/chat.postMessage',
600 headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
601 json={'channel': 'C0123456', 'text': 'Hello!'}
602)
603```
604
605## Error Handling
606
607| Status | Meaning |
608|--------|---------|
609| 400 | Missing connection for the requested app |
610| 401 | Invalid or missing Maton API key |
611| 429 | Rate limited (10 requests/second per account) |
612| 500 | Internal Server Error |
613| 4xx/5xx | Passthrough error from the target API |
614
615Errors from the target API are passed through with their original status codes and response bodies.
616
617### Troubleshooting: API Key Issues
618
6191. Check that the `MATON_API_KEY` environment variable is set:
620
621```bash
622echo $MATON_API_KEY
623```
624
6252. Verify the API key is valid by listing connections:
626
627```bash
628python <<'EOF'
629import urllib.request, os, json
630req = urllib.request.Request('https://ctrl.maton.ai/connections')
631req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
632print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
633EOF
634```
635
636### Troubleshooting: Invalid App Name
637
6381. Verify your URL path starts with the correct app name. The path must begin with `/google-mail/`. For example:
639
640- Correct: `https://gateway.maton.ai/google-mail/gmail/v1/users/me/messages`
641- Incorrect: `https://gateway.maton.ai/gmail/v1/users/me/messages`
642
6432. Ensure you have an active connection for the app. List your connections to verify:
644
645```bash
646python <<'EOF'
647import urllib.request, os, json
648req = urllib.request.Request('https://ctrl.maton.ai/connections?app=google-mail&status=ACTIVE')
649req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
650print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
651EOF
652```
653
654### Troubleshooting: Server Error
655
656A 500 error may indicate an expired OAuth token. Try creating a new connection via the Connection Management section above and completing OAuth authorization. If the new connection is "ACTIVE", delete the old connection to ensure the gateway uses the new one.
657
658## Rate Limits
659
660- 10 requests per second per account
661- Target API rate limits also apply
662
663## Notes
664
665- When using curl with URLs containing brackets (`fields[]`, `sort[]`, `records[]`), use the `-g` flag to disable glob parsing
666- When piping curl output to `jq`, environment variables may not expand correctly in some shells, which can cause "Invalid API key" errors
667- **Media upload URLs (LinkedIn, etc.):** Some APIs return pre-signed upload URLs that point to a different host than the gateway proxies (e.g., LinkedIn returns `www.linkedin.com` upload URLs, but the gateway proxies `api.linkedin.com`). These upload URLs are pre-signed and do NOT require an Authorization header — upload the binary directly to the returned URL without going through the gateway. **You MUST use Python `urllib`** for these uploads because the URLs contain encoded characters (e.g., `%253D`) that get corrupted when passed through shell variables or `curl`. Always parse the JSON response with `json.load()` and use the URL directly in Python.
668
669## Tips
670
6711. **Use native API docs**: Refer to each service's official API documentation for endpoint paths and parameters.
672
6732. **Headers are forwarded**: Custom headers (except `Host` and `Authorization`) are forwarded to the target API.
674
6753. **Query params work**: URL query parameters are passed through to the target API.
676
6774. **All HTTP methods supported**: GET, POST, PUT, PATCH, DELETE are all supported.
678
6795. **QuickBooks special case**: Use `:realmId` in the path and it will be replaced with the connected realm ID.
680
681## Optional
682
683- [Github](https://github.com/maton-ai/api-gateway-skill)
684- [API Reference](https://www.maton.ai/docs/api-reference)
685- [Maton Community](https://discord.com/invite/dBfFAcefs2)
686- [Maton Support](mailto:support@maton.ai)