API Gateway
Connect to external services through Maton-managed API routes. Use this skill only after the user names the target app, account, and task. Start with read/li...
Rank
62
Safety
84
Downloads
81k
Updated
May 31, 2026
Version
1.0.124
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 81K downloads reported by the source. Last updated 5/31/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed May 31, 2026
- Protocol compatibility
- OpenClawcompatibility · observed May 31, 2026
- Adoption signal
- 81K downloadsadoption · observed May 31, 2026
- Latest release
- 1.0.124release · observed May 28, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s174c3s2kc1ehqj1ytzntezj2983e2aj:api-gateway- Install using `clawhub skill install s174c3s2kc1ehqj1ytzntezj2983e2aj:api-gateway` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/byungkyu/api-gateway before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/snapshot"
Documentation
CLAWHUB
160,000 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: api-gateway
description: |
Connect to external services through Maton-managed API routes.
Use this skill only after the user names the target app, account, and task.
Start with read/list calls when possible and follow the app-specific reference before any change.
compatibility: Requires network access and Maton account setup
metadata:
author: maton
version: "1.0"
clawdbot:
emoji: 🧠
homepage: "https://maton.ai"
---
# API Gateway
Managed API routing for third-party services, provided by [Maton](https://maton.ai). Use this only for a user-requested app, account, and task.
## Quick Start
**CLI:**
```bash
maton slack channel list --types public_channel --limit 10
```
```bash
maton api '/slack/api/conversations.list?types=public_channel&limit=10'
```
**Python:**
```bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/slack/api/conversations.list?types=public_channel&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
```
## Routing
Use `https://api.maton.ai/` with the app-prefixed routes documented in the examples below or in the matching reference file.
**Usage protocol:**
1. Only invoke after the user specifies the exact app, account, and task.
2. Always start with read-only (GET) calls to verify the target account, resource identifiers, and current state.
3. **All non-GET requests are denied unless the user explicitly approves each one.** Before any POST, PUT, PATCH, or DELETE call, present the user with: the exact connection ID, the full endpoint path, the request body, and the expected outcome — then wait for approval.
4. If the user's request implies a non-GET operation, first show them what you intend to call and ask for confirmation. Do not infer approval from the original request.
Read-only route examples:
```text
https://api.maton.ai/slack/api/conversations.list?types=public_channel&limit=10
https://api.maton.ai/google-mail/gmail/v1/users/me/messages
```
The first path segment is the app identifier listed in Supported Services. For Gmail, use `/google-mail/gmail/v1/users/me/messages`.
## Installation
**NPM:**
```bash
npm install -g @maton-ai/cli
```
**Homebrew:**
```bash
brew install maton-ai/cli/maton
```
## Authentication
**IMPORTANT — Credential Safety:**
- Treat `MATON_API_KEY` as a secret. Never log it, echo it, paste it into prompts, or expose it in shared files, command output, or tool results.
- **Connection creation requires explicit user approval.** Before creating any connection, ask the user to confirm the specific service and confirm they intend to authorize access. Never create connections on the agent's own initiative.
- **Least-privilege scopes:** When a service offers scope selection during OAuth, select only the scopes the current task requires. Do not accept broader scopes for convenience.
- Remove connections immediately areferences/active-campaign/README.md
# ActiveCampaign Routing Reference
> **Safety:** All write operations (POST, PUT, PATCH, DELETE) require explicit user confirmation before execution. Verify the target resource and intended effect with the user first. See the main [SKILL.md](../SKILL.md#security--permissions) for full security policy.
**App name:** `active-campaign`
**Base URL proxied:** `{account}.api-us1.com`
## API Path Pattern
```
/active-campaign/api/3/{resource}
```
## Common Endpoints
### Contacts
#### List Contacts
```bash
GET /active-campaign/api/3/contacts
```
#### Get Contact
```bash
GET /active-campaign/api/3/contacts/{contactId}
```
#### Create Contact
```bash
POST /active-campaign/api/3/contacts
Content-Type: application/json
{
"contact": {
"email": "[email protected]",
"firstName": "John",
"lastName": "Doe"
}
}
```
#### Update Contact
```bash
PUT /active-campaign/api/3/contacts/{contactId}
```
#### Delete Contact
```bash
DELETE /active-campaign/api/3/contacts/{contactId}
```
### Tags
#### List Tags
```bash
GET /active-campaign/api/3/tags
```
#### Create Tag
```bash
POST /active-campaign/api/3/tags
Content-Type: application/json
{
"tag": {
"tag": "Tag Name",
"tagType": "contact"
}
}
```
### Contact Tags
#### Add Tag to Contact
```bash
POST /active-campaign/api/3/contactTags
Content-Type: application/json
{
"contactTag": {
"contact": "1",
"tag": "1"
}
}
```
#### Remove Tag from Contact
```bash
DELETE /active-campaign/api/3/contactTags/{contactTagId}
```
### Lists
#### List All Lists
```bash
GET /active-campaign/api/3/lists
```
#### Create List
```bash
POST /active-campaign/api/3/lists
```
### Deals
#### List Deals
```bash
GET /active-campaign/api/3/deals
```
#### Create Deal
```bash
POST /active-campaign/api/3/deals
Content-Type: application/json
{
"deal": {
"title": "New Deal",
"value": "10000",
"currency": "usd",
"contact": "1",
"stage": "1"
}
}
```
### Deal Stages & Pipelines
#### List Deal Stages
```bash
GET /active-campaign/api/3/dealStages
```
#### List Pipelines (Deal Groups)
```bash
GET /active-campaign/api/3/dealGroups
```
### Automations
#### List Automations
```bash
GET /active-campaign/api/3/automations
```
### Campaigns
#### List Campaigns
```bash
GET /active-campaign/api/3/campaigns
```
### Users
#### List Users
```bash
GET /active-campaign/api/3/users
```
### Accounts
#### List Accounts
```bash
GET /active-campaign/api/3/accounts
```
### Custom Fields
#### List Fields
```bash
GET /active-campaign/api/3/fields
```
### Notes
#### List Notes
```bash
GET /active-campaign/api/3/notes
```
### Webhooks
#### List Webhooks
```bash
GET /active-campaign/api/3/webhooks
```
## Pagination
Uses offset-based pagination:
```bash
GET /active-campaign/api/3/contacts?limit=20&offset=0
```
**Parameters:**
- `limit` - Results per page (default: 20)
- `offset` - Starting index
Response includes meta with total:
```json
{
"contacts": [...],
"meta": {
"total"references/acuity-scheduling/README.md
# Acuity Scheduling Routing Reference
> **Safety:** All write operations (POST, PUT, PATCH, DELETE) require explicit user confirmation before execution. Verify the target resource and intended effect with the user first. See the main [SKILL.md](../SKILL.md#security--permissions) for full security policy.
**App name:** `acuity-scheduling`
**Base URL proxied:** `acuityscheduling.com`
## API Path Pattern
```
/acuity-scheduling/api/v1/{resource}
```
Maton automatically prepends `/api/v1` when proxying to Acuity.
## Common Endpoints
### Get Account Info
```bash
GET /acuity-scheduling/api/v1/me
```
### List Appointments
```bash
GET /acuity-scheduling/api/v1/appointments?max=100&minDate=2026-02-01
```
### Get Appointment
```bash
GET /acuity-scheduling/api/v1/appointments/{id}
```
### Create Appointment
```bash
POST /acuity-scheduling/api/v1/appointments
Content-Type: application/json
{
"datetime": "2026-02-15T09:00",
"appointmentTypeID": 123,
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]"
}
```
### Update Appointment
```bash
PUT /acuity-scheduling/api/v1/appointments/{id}
Content-Type: application/json
{
"firstName": "Jane",
"lastName": "Smith"
}
```
### Cancel Appointment
```bash
PUT /acuity-scheduling/api/v1/appointments/{id}/cancel
```
### Reschedule Appointment
```bash
PUT /acuity-scheduling/api/v1/appointments/{id}/reschedule
Content-Type: application/json
{
"datetime": "2026-02-20T10:00"
}
```
### List Calendars
```bash
GET /acuity-scheduling/api/v1/calendars
```
### List Appointment Types
```bash
GET /acuity-scheduling/api/v1/appointment-types
```
### Get Available Dates
```bash
GET /acuity-scheduling/api/v1/availability/dates?month=2026-02&appointmentTypeID=123
```
### Get Available Times
```bash
GET /acuity-scheduling/api/v1/availability/times?date=2026-02-04&appointmentTypeID=123
```
### List Clients
```bash
GET /acuity-scheduling/api/v1/clients?search=John
```
### Create Client
```bash
POST /acuity-scheduling/api/v1/clients
Content-Type: application/json
{
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]"
}
```
### List Blocks
```bash
GET /acuity-scheduling/api/v1/blocks?calendarID=1234
```
### Create Block
```bash
POST /acuity-scheduling/api/v1/blocks
Content-Type: application/json
{
"start": "2026-02-15T12:00",
"end": "2026-02-15T13:00",
"calendarID": 1234
}
```
### Delete Block
```bash
DELETE /acuity-scheduling/api/v1/blocks/{id}
```
### List Forms
```bash
GET /acuity-scheduling/api/v1/forms
```
### List Labels
```bash
GET /acuity-scheduling/api/v1/labels
```
## Notes
- Datetime values must be parseable by PHP's `strtotime()` function
- Timezones use IANA format (e.g., "America/New_York")
- Use `max` parameter to limit results (default: 100)
- Use `minDate` and `maxDate` for date-range filtering
- Client update/delete only works for clients with existing appointments
- Rescheduling requires the new datetime to be an available time slot
## Resreferences/airtable/README.md
# Airtable Routing Reference
> **Safety:** All write operations (POST, PUT, PATCH, DELETE) require explicit user confirmation before execution. Verify the target resource and intended effect with the user first. See the main [SKILL.md](../SKILL.md#security--permissions) for full security policy.
**App name:** `airtable`
**Base URL proxied:** `api.airtable.com`
## API Path Pattern
```
/airtable/v0/{baseId}/{tableIdOrName}
```
## Common Endpoints
### List Records
```bash
GET /airtable/v0/{baseId}/{tableIdOrName}?maxRecords=100
```
With view:
```bash
GET /airtable/v0/{baseId}/{tableIdOrName}?view=Grid%20view&maxRecords=100
```
With filter formula:
```bash
GET /airtable/v0/{baseId}/{tableIdOrName}?filterByFormula={Status}='Active'
```
With field selection:
```bash
GET /airtable/v0/{baseId}/{tableIdOrName}?fields[]=Name&fields[]=Status&fields[]=Email
```
With sorting:
```bash
GET /airtable/v0/{baseId}/{tableIdOrName}?sort[0][field]=Created&sort[0][direction]=desc
```
### Get Record
```bash
GET /airtable/v0/{baseId}/{tableIdOrName}/{recordId}
```
### Create Records
```bash
POST /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json
{
"records": [
{
"fields": {
"Name": "New Record",
"Status": "Active",
"Email": "[email protected]"
}
}
]
}
```
### Update Records (PATCH - partial update)
```bash
PATCH /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json
{
"records": [
{
"id": "recXXXXXXXXXXXXXX",
"fields": {
"Status": "Completed"
}
}
]
}
```
### Update Records (PUT - full replace)
```bash
PUT /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json
{
"records": [
{
"id": "recXXXXXXXXXXXXXX",
"fields": {
"Name": "Updated Name",
"Status": "Active"
}
}
]
}
```
### Delete Records
```bash
DELETE /airtable/v0/{baseId}/{tableIdOrName}?records[]=recXXXXX&records[]=recYYYYY
```
### List Bases
```bash
GET /airtable/v0/meta/bases
```
### Get Base Schema
```bash
GET /airtable/v0/meta/bases/{baseId}/tables
```
## Pagination
**Parameters:**
- `pageSize` - Number of records per request (max 100, default 100)
- `maxRecords` - Maximum total records across all pages
- `offset` - Cursor for next page (returned in response)
Response includes `offset` when more records exist:
```json
{
"records": [...],
"offset": "itrXXXXXXXXXXX"
}
```
Use offset for next page:
```bash
GET /airtable/v0/{baseId}/{tableIdOrName}?pageSize=50&offset=itrXXXXXXXXXXX
```
## Notes
- Authentication is automatic via OAuth
- Base IDs start with `app`
- Table IDs start with `tbl` (can also use table name)
- Record IDs start with `rec`
- Maximum 100 records per request for create/update
- Maximum 10 records per delete request
- Filter formulas use Airtable formula syntax
## Resources
- [API Overview](https://airtable.com/developers/web/api/introduction)
- [List Records](https://airtable.com/developers/wereferences/apify/README.md
# Apify Routing Reference
> **Safety:** All write operations (POST, PUT, PATCH, DELETE) require explicit user confirmation before execution. Verify the target resource and intended effect with the user first. See the main [SKILL.md](../SKILL.md#security--permissions) for full security policy.
**App name:** `apify`
**Base URL proxied:** `api.apify.com`
## API Path Pattern
```
/apify/v2/{resource}
```
## Common Endpoints
### Users
#### Get Current User
```bash
GET /apify/v2/users/me
```
### Actors
#### List Actors
```bash
GET /apify/v2/acts
GET /apify/v2/acts?my=true
```
#### Get Actor
```bash
GET /apify/v2/acts/{actorId}
```
#### Run Actor
```bash
POST /apify/v2/acts/{actorId}/runs
Content-Type: application/json
{
"startUrls": [{"url": "https://example.com"}],
"maxItems": 100
}
```
### Actor Runs
#### List Runs
```bash
GET /apify/v2/actor-runs
GET /apify/v2/actor-runs?status=SUCCEEDED
```
#### Get Run
```bash
GET /apify/v2/actor-runs/{runId}
```
#### Abort Run
```bash
POST /apify/v2/actor-runs/{runId}/abort
```
### Actor Tasks
#### List Tasks
```bash
GET /apify/v2/actor-tasks
```
#### Get Task
```bash
GET /apify/v2/actor-tasks/{actorTaskId}
```
#### Run Task
```bash
POST /apify/v2/actor-tasks/{actorTaskId}/runs
```
### Datasets
#### List Datasets
```bash
GET /apify/v2/datasets
```
#### Get Dataset
```bash
GET /apify/v2/datasets/{datasetId}
```
#### Get Dataset Items
```bash
GET /apify/v2/datasets/{datasetId}/items
GET /apify/v2/datasets/{datasetId}/items?format=json&clean=true
```
#### Put Items
```bash
POST /apify/v2/datasets/{datasetId}/items
Content-Type: application/json
[{"field1": "value1"}, {"field2": "value2"}]
```
### Key-Value Stores
#### List Stores
```bash
GET /apify/v2/key-value-stores
```
#### Get Store
```bash
GET /apify/v2/key-value-stores/{storeId}
```
#### Get Record
```bash
GET /apify/v2/key-value-stores/{storeId}/records/{key}
```
#### Set Record
```bash
PUT /apify/v2/key-value-stores/{storeId}/records/{key}
Content-Type: application/json
{"data": "value"}
```
### Request Queues
#### List Queues
```bash
GET /apify/v2/request-queues
```
#### Get Queue
```bash
GET /apify/v2/request-queues/{queueId}
```
#### Add Request
```bash
POST /apify/v2/request-queues/{queueId}/requests
Content-Type: application/json
{
"url": "https://example.com",
"uniqueKey": "unique-key"
}
```
### Schedules
#### List Schedules
```bash
GET /apify/v2/schedules
```
#### Get Schedule
```bash
GET /apify/v2/schedules/{scheduleId}
```
#### Create Schedule
```bash
POST /apify/v2/schedules
Content-Type: application/json
{
"name": "My Schedule",
"cronExpression": "0 0 * * *",
"actorId": "actor-id"
}
```
### Webhooks
#### List Webhooks
```bash
GET /apify/v2/webhooks
```
#### Get Webhook
```bash
GET /apify/v2/webhooks/{webhookId}
```
#### Create Webhook
```bash
POST /apify/v2/webhooks
Content-Type: application/json
{
"eventTypes": ["ACTOR.RUN.SUCCEEDED"],
"requestUrl": "https://example.com/webhook"
}
``@x1pay/langchain
LangChain/LangGraph tools for AI agent x402 payments on X1
@langchain/langgraph-swarm
An implementation of a multi-agent swarm using LangGraph
@langchain/langgraph-supervisor
LangGraph Multi-Agent Supervisor
oceanbus-langchain
LangChain tools for OceanBus — give your LangChain and CrewAI agents a global identity, encrypted messaging, and Yellow Pages service discovery with a single import.
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"label": "Vendor",
"value": "Clawhub",
"category": "vendor",
"href": "https://clawhub.ai/byungkyu/api-gateway",
"sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-05-31T06:22:04.441Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "protocols",
"label": "Protocol compatibility",
"value": "OpenClaw",
"category": "compatibility",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-05-31T06:22:04.441Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "traction",
"label": "Adoption signal",
"value": "81K downloads",
"category": "adoption",
"href": "https://clawhub.ai/byungkyu/api-gateway",
"sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-05-31T06:22:04.441Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "latest_release",
"label": "Latest release",
"value": "1.0.124",
"category": "release",
"href": "https://clawhub.ai/byungkyu/api-gateway",
"sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-28T07:21:43.000Z",
"isPublic": true,
"metadata": {}
},
{
"factKey": "handshake_status",
"label": "Handshake status",
"value": "UNKNOWN",
"category": "security",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true,
"metadata": {}
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.0.124",
"description": "- Removed the file skill-card.md. - No other functional or documentation changes in this version.",
"href": "https://clawhub.ai/byungkyu/api-gateway",
"sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-28T07:21:43.000Z",
"isPublic": true,
"metadata": {}
}
]
}Record generated Oct 9, 2026.
