api-gatewayConnect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to...
Install via ClawdBot CLI:
clawdbot install byungkyu/api-gatewayPassthrough 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.
# 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
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.
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"
Connection management uses a separate base URL: https://ctrl.maton.ai
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",
"metadata": {}
}
]
}
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
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.
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
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.
| Service | App Name | Base URL Proxied |
|---------|----------|------------------|
| ActiveCampaign | active-campaign | {account}.api-us1.com |
| Acuity Scheduling | acuity-scheduling | acuityscheduling.com |
| Airtable | airtable | api.airtable.com |
| Apollo | apollo | api.apollo.io |
| Asana | asana | app.asana.com |
| Attio | attio | api.attio.com |
| Basecamp | basecamp | 3.basecampapi.com |
| beehiiv | beehiiv | api.beehiiv.com |
| Box | box | api.box.com |
| Brevo | brevo | api.brevo.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 |
| Fathom | fathom | api.fathom.ai |
| Firebase | firebase | firebase.googleapis.com |
| Fireflies | fireflies | api.fireflies.ai |
| GetResponse | getresponse | api.getresponse.com |
| GitHub | github | api.github.com |
| Gumroad | gumroad | api.gumroad.com |
| 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 |
| Keap | keap | api.infusionsoft.com |
| 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 |
| ManyChat | manychat | api.manychat.com |
| Microsoft Excel | microsoft-excel | 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 |
| 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 |
| QuickBooks | quickbooks | quickbooks.api.intuit.com |
| Quo | quo | api.openphone.com |
| Salesforce | salesforce | {instance}.salesforce.com |
| SignNow | signnow | api.signnow.com |
| Slack | slack | slack.com |
| Snapchat | snapchat | adsapi.snapchat.com |
| Square | squareup | connect.squareup.com |
| Stripe | stripe | api.stripe.com |
| Systeme.io | systeme | api.systeme.io |
| Tally | tally | api.tally.so |
| 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 |
| Typeform | typeform | api.typeform.com |
| Vimeo | vimeo | api.vimeo.com |
| WhatsApp Business | whatsapp-business | graph.facebook.com |
| WooCommerce | woocommerce | {store-url}/wp-json/wc/v3 |
| WordPress.com | wordpress | public-api.wordpress.com |
| Xero | xero | api.xero.com |
| YouTube | youtube | www.googleapis.com |
| Zoho Bigin | zoho-bigin | 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 Recruit | zoho-recruit | recruit.zoho.com |
See references/ for detailed routing guides per provider:
# 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
# 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
# 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
# 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
# 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
# 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
# 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
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!' })
});
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!'}
)
| 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.
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
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
/google-mail/. For example:https://gateway.maton.ai/google-mail/gmail/v1/users/me/messageshttps://gateway.maton.ai/gmail/v1/users/me/messagespython <<'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
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.
fields[], sort[], records[]), use the -g flag to disable glob parsingjq, environment variables may not expand correctly in some shells, which can cause "Invalid API key" errorsHost and Authorization) are forwarded to the target API.:realmId in the path and it will be replaced with the connected realm ID.Generated Feb 24, 2026
A support team uses the API Gateway to automatically create tickets in HubSpot from Slack messages and send follow-up emails via Google Workspace when issues are resolved. This streamlines cross-platform workflows without managing OAuth tokens manually.
An online retailer integrates Stripe for payment processing and Salesforce for CRM to sync customer purchase data and trigger automated invoicing. The gateway handles API calls to both services securely, reducing development overhead.
A marketing agency uses the gateway to pull lead data from Apollo into ActiveCampaign for email campaigns and track engagement metrics in Airtable. This enables real-time data synchronization across tools for targeted outreach.
A consulting firm connects Asana for task management with Basecamp for client communication, automating status updates and file sharing between platforms. The gateway simplifies API interactions to keep projects aligned across teams.
A healthcare provider uses Acuity Scheduling for appointment bookings and Attio for patient relationship management, syncing appointment details and follow-up tasks automatically. This improves operational efficiency and patient care coordination.
A company builds a middleware service that uses the API Gateway to offer pre-built connectors for popular apps like Slack and Salesforce, charging subscription fees based on API call volume or number of integrated services. This reduces integration costs for clients.
A digital marketing agency develops internal tools leveraging the gateway to automate client reporting by pulling data from HubSpot and Google Workspace, saving hours of manual work and allowing them to scale services without additional hires.
A freelancer creates a custom dashboard that uses the gateway to manage tasks across Asana, Stripe invoices, and Airtable databases, selling it as a packaged solution to other freelancers for streamlined workflow management.
💬 Integration Tip
Start by testing with a single service like Slack to understand the base URL structure, then gradually add connections for other apps to avoid complexity. Use the Maton-Connection header to manage multiple accounts per service.
Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.
Build, debug, and deploy websites using HTML, CSS, JavaScript, and modern frameworks following production best practices.
YouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Scaffold, test, document, and debug REST and GraphQL APIs. Use when the user needs to create API endpoints, write integration tests, generate OpenAPI specs, test with curl, mock APIs, or troubleshoot HTTP issues.
Search for jobs across LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, and BDJobs using the JobSpy MCP server.
This skill should be used when analyzing HTML/CSS websites for SEO optimization, fixing SEO issues, generating SEO reports, or implementing SEO best practices. Use when the user requests SEO audits, optimization, meta tag improvements, schema markup implementation, sitemap generation, or general search engine optimization tasks.