api-gateway-1-0-7API gateway for calling third-party APIs with managed auth. Use this skill when users want to interact with external services like Slack, HubSpot, Salesforce...
Install via ClawdBot CLI:
clawdbot install Makforce/api-gateway-1-0-7Passthrough proxy for direct access to third-party APIs using managed auth connections. The API gateway lets you call native API endpoints directly.
# Native Slack API call
curl -s -X POST "https://gateway.maton.ai/slack/api/chat.postMessage" -H "Content-Type: application/json" -H "Authorization: Bearer $MATON_API_KEY" -d '{"channel": "C0123456", "text": "Hello from gateway!"}'
IMPORTANT: If you receive a 500 Internal Server Error, this does NOT mean the service is unsupported. The most common cause is an expired OAuth refresh token (connections older than 1 month). See the "Troubleshooting 500 Internal Server Error" section below to create a new connection and retry with the new connection ID.
https://gateway.maton.ai/{app}/{native-api-path}
Replace {app} with the service name and {native-api-path} with the actual API endpoint path.
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
curl -s -X GET "https://ctrl.maton.ai/connections?app=slack&status=ACTIVE" -H "Authorization: Bearer $MATON_API_KEY"
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": {}
}
]
}
curl -s -X POST "https://ctrl.maton.ai/connections" -H "Content-Type: application/json" -H "Authorization: Bearer $MATON_API_KEY" -d '{"app": "slack"}'
curl -s -X GET "https://ctrl.maton.ai/connections/{connection_id}" -H "Authorization: Bearer $MATON_API_KEY"
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.
curl -s -X DELETE "https://ctrl.maton.ai/connections/{connection_id}" -H "Authorization: Bearer $MATON_API_KEY"
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:
curl -s -X POST "https://gateway.maton.ai/slack/api/chat.postMessage" -H "Content-Type: application/json" -H "Authorization: Bearer $MATON_API_KEY" -H "Maton-Connection: 21fd90f9-5935-43cd-b6c8-bde9d915ca80" -d '{"channel": "C0123456", "text": "Hello!"}'
If omitted, the gateway uses the default (oldest) active connection for that app.
| Service | App Name | Base URL Proxied |
|---------|----------|------------------|
| Airtable | airtable | api.airtable.com |
| Apollo | apollo | api.apollo.io |
| Asana | asana | app.asana.com |
| Calendly | calendly | api.calendly.com |
| Chargebee | chargebee | {subdomain}.chargebee.com |
| ClickUp | clickup | api.clickup.com |
| Fathom | fathom | api.fathom.ai |
| Google Ads | google-ads | googleads.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 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 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 |
| HubSpot | hubspot | api.hubapi.com |
| Jira | jira | api.atlassian.com |
| JotForm | jotform | api.jotform.com |
| Klaviyo | klaviyo | a.klaviyo.com |
| Mailchimp | mailchimp | {dc}.api.mailchimp.com |
| Notion | notion | api.notion.com |
| Outlook | outlook | graph.microsoft.com |
| Pipedrive | pipedrive | api.pipedrive.com |
| QuickBooks | quickbooks | quickbooks.api.intuit.com |
| Salesforce | salesforce | {instance}.salesforce.com |
| Slack | slack | slack.com |
| Stripe | stripe | api.stripe.com |
| Trello | trello | api.trello.com |
| Typeform | typeform | api.typeform.com |
| WhatsApp Business | whatsapp-business | graph.facebook.com |
| WooCommerce | woocommerce | {store-url}/wp-json/wc/v3 |
| Xero | xero | api.xero.com |
| YouTube | youtube | www.googleapis.com |
See references/ for detailed routing guides per provider:
# Native Slack API: POST https://slack.com/api/chat.postMessage
curl -s -X POST "https://gateway.maton.ai/slack/api/chat.postMessage" -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer $MATON_API_KEY" -d '{"channel": "C0123456", "text": "Hello!"}'
# Native HubSpot API: POST https://api.hubapi.com/crm/v3/objects/contacts
curl -s -X POST "https://gateway.maton.ai/hubspot/crm/v3/objects/contacts" -H "Content-Type: application/json" -H "Authorization: Bearer $MATON_API_KEY" -d '{"properties": {"email": "john@example.com", "firstname": "John", "lastname": "Doe"}}'
# Native Sheets API: GET https://sheets.googleapis.com/v4/spreadsheets/{id}/values/{range}
curl -s -X GET "https://gateway.maton.ai/google-sheets/v4/spreadsheets/122BS1sFN2RKL8AOUQjkLdubzOwgqzPT64KfZ2rvYI4M/values/Sheet1!A1:B2" -H "Authorization: Bearer $MATON_API_KEY"
# Native Salesforce API: GET https://{instance}.salesforce.com/services/data/v64.0/query?q=...
curl -s -X GET "https://gateway.maton.ai/salesforce/services/data/v64.0/query?q=SELECT+Id,Name+FROM+Contact+LIMIT+10" -H "Authorization: Bearer $MATON_API_KEY"
# Native Airtable API: GET https://api.airtable.com/v0/meta/bases/{id}/tables
curl -s -X GET "https://gateway.maton.ai/airtable/v0/meta/bases/appgqan2NzWGP5sBK/tables" -H "Authorization: Bearer $MATON_API_KEY"
# Native Notion API: POST https://api.notion.com/v1/data_sources/{id}/query
curl -s -X POST "https://gateway.maton.ai/notion/v1/data_sources/23702dc5-9a3b-8001-9e1c-000b5af0a980/query" -H "Content-Type: application/json" -H "Authorization: Bearer $MATON_API_KEY" -H "Notion-Version: 2025-09-03" -d '{}'
# Native Stripe API: GET https://api.stripe.com/v1/customers
curl -s -X GET "https://gateway.maton.ai/stripe/v1/customers?limit=10" -H "Authorization: Bearer $MATON_API_KEY"
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 (see troubleshooting below) |
| 4xx/5xx | Passthrough error from the target API |
Errors from the target API are passed through with their original status codes and response bodies.
IMPORTANT: A 500 Internal Server Error does NOT mean the service is unsupported. If the app is listed in the Supported Services table above, the error is likely due to an expired OAuth refresh token.
When you receive a 500 Internal Server Error, ALWAYS follow these steps before concluding there is an issue:
Connections that have been active for more than 1 month may have expired OAuth refresh tokens. To resolve:
curl -s -X POST "https://ctrl.maton.ai/connections" -H "Content-Type: application/json" -H "Authorization: Bearer $MATON_API_KEY" -d '{"app": "APP_NAME"}'
curl -s -X GET "https://ctrl.maton.ai/connections/NEW_CONNECTION_ID" -H "Authorization: Bearer $MATON_API_KEY"
url with the user and ask them to complete the OAuth flow in their browser.Maton-Connection header:
curl -s -X GET "https://gateway.maton.ai/APP_NAME/..." -H "Authorization: Bearer $MATON_API_KEY" -H "Maton-Connection: NEW_CONNECTION_ID"
ACTIVE and working, ask the user if they want to delete the old connection:
curl -s -X DELETE "https://ctrl.maton.ai/connections/OLD_CONNECTION_ID" -H "Authorization: Bearer $MATON_API_KEY"
curl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.Host and Authorization) are forwarded to the target API.:realmId in the path and it will be replaced with the connected realm ID.Generated Mar 1, 2026
A SaaS company uses the API Gateway to send automated Slack messages to internal support channels when new tickets are created in HubSpot. This ensures real-time alerts and faster response times, improving customer satisfaction and team coordination.
An online retailer integrates Stripe for payment processing and Google Sheets for order tracking via the API Gateway. It automates data syncing between systems, reducing manual entry errors and providing up-to-date sales reports for inventory management.
A marketing agency uses the API Gateway to connect Mailchimp for email campaigns and Salesforce for CRM data. It automates lead segmentation and campaign triggers based on customer interactions, enhancing targeting efficiency and campaign ROI.
A consulting firm integrates Asana for task management and Google Calendar for scheduling via the API Gateway. It syncs project deadlines and meeting schedules automatically, improving team productivity and reducing scheduling conflicts.
A financial services company uses the API Gateway to pull data from QuickBooks for accounting and Google Analytics for web traffic. It generates consolidated reports automatically, streamlining compliance checks and financial analysis.
Offer tiered subscription plans for businesses to access the API Gateway, with pricing based on usage volume or number of integrated services. This provides recurring revenue and scales with customer growth, appealing to SMEs needing managed API connections.
License the API Gateway as a white-label solution for other software providers to embed in their products. This generates licensing fees and expands market reach through partnerships, targeting industries like CRM or project management tools.
Charge customers based on the number of API calls made through the gateway, with volume discounts for high usage. This model aligns costs with value, attracting startups and enterprises with variable integration needs and encouraging adoption.
💬 Integration Tip
Start by testing with a single service like Slack to validate the setup, then gradually add more integrations while monitoring API usage to avoid rate limits.
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.
Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to...
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.