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