Claim this agent
Agent DossierCLAWHUBSafety 84/100

Xpersona Agent

API Gateway

Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to... Skill: API Gateway Owner: byungkyu Summary: Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to... Tags: latest:1.0.54 Version history: v1.0.54 | 2026-02-28T02:13:08.484Z | user - Minor update to documentation: GitHub is now highlighted in the API list in the skill description. - No changes to code or functionalit

29.8K downloadsTrust evidence available
clawhub skill install kn75240wq8bnv2qm2xgry748jd80b9r0:api-gateway

Overall rank

#62

Adoption

29.8K downloads

Trust

Unknown

Freshness

Feb 28, 2026

Freshness

Last checked Feb 28, 2026

Best For

API Gateway is best for general automation workflows where documented compatibility matters.

Not Ideal For

Contract metadata is missing or unavailable for deterministic execution.

Evidence Sources Checked

editorial-content, CLAWHUB, runtime-metrics, public facts pack

Overview

Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.

Verifiededitorial-content

Overview

Executive Summary

Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to... Skill: API Gateway Owner: byungkyu Summary: Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to... Tags: latest:1.0.54 Version history: v1.0.54 | 2026-02-28T02:13:08.484Z | user - Minor update to documentation: GitHub is now highlighted in the API list in the skill description. - No changes to code or functionalit Capability contract not published. No trust telemetry is available yet. 29.8K downloads reported by the source. Last updated 4/15/2026.

No verified compatibility signals29.8K downloads

Trust score

Unknown

Compatibility

Profile only

Freshness

Feb 28, 2026

Vendor

Clawhub

Artifacts

0

Benchmarks

0

Last release

1.0.54

Install & run

Setup Snapshot

clawhub skill install kn75240wq8bnv2qm2xgry748jd80b9r0:api-gateway
  1. 1

    Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.

  2. 2

    Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.

Evidence & Timeline

Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.

Verifiededitorial-content

Public facts

Evidence Ledger

Vendor (1)

Vendor

Clawhub

profilemedium
Observed Apr 15, 2026Source linkProvenance
Release (1)

Latest release

1.0.54

releasemedium
Observed Feb 28, 2026Source linkProvenance
Adoption (1)

Adoption signal

29.8K downloads

profilemedium
Observed Apr 15, 2026Source linkProvenance
Security (1)

Handshake status

UNKNOWN

trustmedium
Observed unknownSource linkProvenance

Artifacts & Docs

Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.

Self-declaredCLAWHUB

Captured outputs

Artifacts Archive

Extracted files

5

Examples

6

Snippets

0

Languages

Unknown

Executable Examples

bash

# 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

text

https://gateway.maton.ai/{app}/{native-api-path}

text

Authorization: Bearer $MATON_API_KEY

bash

export MATON_API_KEY="YOUR_API_KEY"

bash

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

json

{
  "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": {}
    }
  ]
}
Extracted Files

SKILL.md

---
name: api-gateway
description: |
  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).
compatibility: Requires network access and valid Maton API key
metadata:
  author: maton
  version: "1.0"
  clawdbot:
    emoji: đź§ 
    homepage: "https://maton.ai"
    requires:
      env:
        - MATON_API_KEY
---

# API Gateway

Passthrough 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.

## Quick Start

```bash
# 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:

```bash
export MATON_API_KEY="YOUR_API_KEY"
```

## Getting Your API Key

1. Sign in or create an account at [maton.ai](https://maton.ai)
2. Go to [maton.ai/settings](https://maton.ai/settings)
3. 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

```bash
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`, `hub

_meta.json

{
  "ownerId": "kn75240wq8bnv2qm2xgry748jd80b9r0",
  "slug": "api-gateway",
  "version": "1.0.54",
  "publishedAt": 1772244788484
}

references/active-campaign.md

# ActiveCampaign Routing Reference

**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": "user@example.com",
    "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": "150"
  }
}
```

## Notes

- All endpoints require `/api/3/` prefix
- Request bodies use singular resource names (e.g., `{"contact": {...}}`)
- IDs returned as strings
- Rate limit: 5 requests per second per account
- DELETE returns 200 OK (not 204)

## Resources

- 

references/acuity-scheduling.md

# Acuity Scheduling Routing Reference

**App name:** `acuity-scheduling`
**Base URL proxied:** `acuityscheduling.com`

## API Path Pattern

```
/acuity-scheduling/api/v1/{resource}
```

The gateway 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": "john@example.com"
}
```

### 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": "john@example.com"
}
```

### 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

## Resources

- [Acuity Scheduling API Quick Start](https://developers.acuityscheduling.com/reference/quick-start)
- [Appointments API](https://developers.acuityscheduling.com/reference/get-appointments)
- [Availability API](https://developers.acuityscheduling.com/refe

references/airtable.md

# Airtable Routing Reference

**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": "test@example.com"
      }
    }
  ]
}
```

### 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/web/api/list-records)
- [Create Records](https://airtable.com/developers/web/api/create-records)
- [Update Records](https://airtable.com/developers/web/api/update-record)
- [Delete Records](https://airtable.com/developers/web/api/delete-record)
- [Formula Reference](http

Editorial read

Docs & README

Docs source

CLAWHUB

Editorial quality

ready

Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to... Skill: API Gateway Owner: byungkyu Summary: Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to... Tags: latest:1.0.54 Version history: v1.0.54 | 2026-02-28T02:13:08.484Z | user - Minor update to documentation: GitHub is now highlighted in the API list in the skill description. - No changes to code or functionalit

Full README

Skill: API Gateway

Owner: byungkyu

Summary: Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to...

Tags: latest:1.0.54

Version history:

v1.0.54 | 2026-02-28T02:13:08.484Z | user

  • Minor update to documentation: GitHub is now highlighted in the API list in the skill description.
  • No changes to code or functionality.
  • Clarified supported services, with updated wording in the API overview.

v1.0.53 | 2026-02-28T02:03:23.039Z | user

No changes detected in this version.

  • Version 1.0.53 has no file changes compared to the previous release.

v1.0.52 | 2026-02-28T01:33:34.358Z | user

  • Added three new reference files: references/manus.md, references/reducto.md, and references/zoho-projects.md.
  • No changes were made to the existing documentation or code logic.

v1.0.51 | 2026-02-26T10:49:06.067Z | user

Version 1.0.51

  • Added squarespace.md to the references directory.

v1.0.50 | 2026-02-24T23:05:14.288Z | user

No file changes detected for version 1.0.50.

  • No updates or modifications were made in this version.
  • Functionality and documentation remain unchanged.

v1.0.49 | 2026-02-24T22:49:33.856Z | user

No file changes were detected in this release.

  • No updates or modifications were made to the skill's files or documentation.
  • Behavior and features remain the same as the previous version.

v1.0.48 | 2026-02-24T12:16:09.346Z | user

  • Added support for the Granola service (granola, proxied at mcp.granola.ai) to the API Gateway.
  • New documentation file references/granola.md included.
  • Updated the Supported Services table to reflect the addition.

v1.0.47 | 2026-02-23T23:05:36.862Z | user

  • Added documentation references for PostHog and Sentry integrations.
  • No changes to core functionality or API—documentation only.

v1.0.46 | 2026-02-22T07:55:07.722Z | user

  • Added guidance to use this skill when users want to interact with external services.
  • No other changes detected.

v1.0.45 | 2026-02-22T04:02:27.756Z | user

  • No file or documentation changes detected in this version.
  • Version update only; functionality and documentation remain unchanged.

v1.0.44 | 2026-02-21T22:07:51.000Z | user

  • Broader description: Now highlights support for 100+ APIs (including Google Workspace, Microsoft 365, Notion, Slack, Airtable, HubSpot, etc.).
  • Security description simplified for clarity; details about API key and OAuth remain.
  • The compatibility section has been streamlined and moved.
  • No code, behavioral, or API changes—documentation/metadata update only.

v1.0.43 | 2026-02-21T20:47:32.709Z | user

  • No changes detected in this release.
  • Version: 1.0.43 remains unchanged from the previous version.

v1.0.42 | 2026-02-20T22:58:56.489Z | user

  • Added YouTube to the list of supported third-party services in the description.
  • Updated description to highlight support for YouTube integration.
  • No code or logic changes detected.

v1.0.41 | 2026-02-19T22:10:23.459Z | user

  • Updated the description for greater clarity and brevity regarding OAuth integration.
  • No functional or behavioral changes; documentation only.

v1.0.40 | 2026-02-19T22:06:33.008Z | user

  • Updated the skill description to clarify that it enables easy integration with third-party APIs using managed OAuth connections.
  • No functional or behavioral changes introduced.

v1.0.39 | 2026-02-19T21:58:03.678Z | user

  • Clarified security model: The MATON_API_KEY alone cannot access any third-party services without explicit OAuth authorization by the user.
  • Improved skill description for clearer guidance on authentication and access control.
  • Removed references to some third-party services in the summary for accuracy.
  • No changes to code, features, or API endpoints.

v1.0.38 | 2026-02-19T20:29:21.415Z | user

  • Updated description to highlight support for 100+ APIs, including popular services (Google Workspace, Outlook, Notion, GitHub, Stripe, HubSpot, Salesforce, Airtable, LinkedIn, and more).
  • Improved clarity about OAuth-based access and security.
  • No code or functional changes detected; documentation only update.

v1.0.37 | 2026-02-19T19:32:18.739Z | user

No changes detected in this release.

  • Version 1.0.37 was published without any file changes.
  • No updates to features, documentation, or configuration.

v1.0.36 | 2026-02-19T11:49:31.848Z | user

  • Added new documentation file: references/microsoft-teams.md
  • No changes to core functionality or existing APIs.

v1.0.35 | 2026-02-18T07:03:20.201Z | user

  • No file changes detected in this version.
  • No user-facing or internal modifications introduced.
  • Functionality and documentation remain the same as the previous release.

v1.0.34 | 2026-02-18T02:09:18.447Z | user

  • Added initial documentation for Zoho Bookings integration in references/zoho-bookings.md.
  • No changes to core functionality or API; this release is documentation-focused.

v1.0.33 | 2026-02-17T20:12:00.709Z | user

No changes detected in this version.

  • No file changes were made in version 1.0.33.
  • No updates to features, documentation, or functionality.

v1.0.32 | 2026-02-16T22:48:24.108Z | auto

  • Updated documentation for the Google Drive API in references/google-drive.md.
  • No changes to functionality or code; this release contains documentation updates only.

v1.0.31 | 2026-02-15T09:45:55.023Z | user

  • Added support for Dropbox Business as a new third-party integration.
  • Added related documentation file: references/dropbox-business.md.
  • Updated the Supported Services table to include Dropbox Business.

v1.0.30 | 2026-02-14T21:09:05.947Z | user

  • Added four new reference files for Firebase, Google BigQuery, Google Classroom, and Snapchat APIs.
  • Updated supported services list to include Firebase, Google BigQuery, Google Classroom, and Snapchat.

v1.0.29 | 2026-02-14T02:53:06.180Z | user

  • Clarified in the description that access to third-party APIs is scoped to explicit OAuth connections; the API key alone does not grant access.
  • Updated description and instructions for improved clarity and emphasis on security and explicit authorization.
  • No functional changes; documentation enhancements only.

v1.0.28 | 2026-02-14T02:46:53.991Z | user

  • Added new third-party API references: Clockify, GetResponse, Motion, and Toggl Track.
  • Updated the Supported Services table to include Clockify, GetResponse, Motion, and Toggl Track.
  • No changes to core functionality or API; documentation and reference improvements only.

v1.0.27 | 2026-02-13T12:16:21.980Z | user

  • Added Confluence (confluence) to the list of supported services in the API gateway.
  • Created a new documentation file: references/confluence.md.

v1.0.26 | 2026-02-13T02:40:43.734Z | user

  • Added Cal.com integration as a supported service on the API gateway.
  • Introduced a new reference file: references/cal-com.md with usage details for Cal.com.
  • Updated the documentation to include Cal.com in the supported services table.

v1.0.25 | 2026-02-12T19:46:27.511Z | user

  • Added new reference documentation files for Clio, Netlify, PDF.co, and Podio APIs.
  • Improved skill coverage and resources for third-party API integrations.

v1.0.24 | 2026-02-12T11:24:28.854Z | user

  • Added support and documentation for new services: Coda, CompanyCam, ElevenLabs, Instantly, Lemlist, and Mailgun.
  • Updated the Supported Services table in SKILL.md to include these newly added integrations.
  • Included reference documentation files for each new service under the references/ directory.

v1.0.23 | 2026-02-11T11:50:58.465Z | user

  • Added homepage metadata field with the value "https://maton.ai".
  • No other functional or documentation changes detected.

v1.0.22 | 2026-02-11T11:48:37.065Z | user

  • Added support for Beehiiv, Fireflies, and SendGrid APIs.
  • New reference documentation files: references/beehiiv.md, references/fireflies.md, and references/sendgrid.md.
  • Updated the supported services table to include beehiiv and fireflies.

v1.0.21 | 2026-02-10T20:31:56.421Z | user

  • Added a clawdbot metadata block specifying required environment variable MATON_API_KEY.
  • No other changes to functionality or documentation.

v1.0.20 | 2026-02-10T12:33:51.746Z | user

  • No code or documentation changes detected in this version.
  • Version bumped to 1.0.20; functionality remains unchanged.

v1.0.19 | 2026-02-10T12:32:29.179Z | user

  • Added integration references for CallRail, ClickSend, and WordPress APIs.
  • Listed CallRail, ClickSend, and WordPress as supported services in the documentation.

v1.0.18 | 2026-02-10T02:14:33.335Z | user

  • Added support for ActiveCampaign, Brevo, Dropbox, and Twilio as new proxied apps.
  • Updated documentation to include the new services in the supported services table.
  • Introduced reference files for ActiveCampaign, Brevo, Dropbox, and Twilio with usage details.

v1.0.17 | 2026-02-09T11:51:21.158Z | user

  • Added support for 10 new third-party APIs: Box, ClickFunnels, Cognito Forms, MailerLite, ManyChat, Quo, SignNow, Systeme, Tally, and Vimeo.
  • Updated the Supported Services table in the documentation to include these new integrations.

v1.0.16 | 2026-02-08T09:49:16.598Z | user

  • Added support for Basecamp, Gumroad, and Keap services to the API gateway.
  • Updated documentation to include Basecamp (basecamp), Gumroad (gumroad), and Keap (keap) in the supported services table.
  • Added new reference files: references/basecamp.md, references/gumroad.md, and references/keap.md.

v1.0.15 | 2026-02-08T01:43:48.414Z | user

  • Added an important clarification that all gateway API paths must start with the connection's app name (e.g., /google-mail/gmail/v1/...).
  • Updated documentation to highlight this path requirement for correct routing to third-party APIs.

v1.0.14 | 2026-02-07T20:35:57.704Z | user

  • Added support for Microsoft To Do and Telegram third-party APIs.
  • Included new reference documentation files: microsoft-to-do.md and telegram.md.
  • Updated the supported services table to list Microsoft To Do and Telegram as available integrations.

v1.0.13 | 2026-02-07T11:24:18.063Z | user

  • Added support for new third-party integrations: Constant Contact, Eventbrite, Google Contacts, Google Merchant, Google Tasks, Jobber, LinkedIn, OneDrive, Square, and TickTick.
  • Expanded Supported Services table to include all new apps with corresponding routing and base URL details.
  • Added new API reference files for each of the newly supported services in the references directory.

v1.0.12 | 2026-02-07T02:36:47.173Z | user

  • Added support for Kit and Microsoft Excel as proxied services.
  • Included new reference guides: references/kit.md and references/microsoft-excel.md.
  • Updated the Supported Services table and references list to reflect the new services.

v1.0.11 | 2026-02-06T23:20:22.118Z | auto

  • Added support for Acuity Scheduling, Google Workspace Admin, and Todoist.
  • Updated the Supported Services table in documentation to reflect new providers.
  • Introduced new reference guides for each of the above services under the references/ directory.
  • Cleaned up documentation and removed outdated troubleshooting information.

v1.0.10 | 2026-02-06T12:16:27.295Z | user

Added support and documentation for Zoho business apps.

  • Added eight new reference guides: Zoho Bigin, Books, Calendar, CRM, Inventory, Mail, People, and Recruit.
  • Updated the Supported Services table to include Zoho Bigin, Books, Calendar, CRM, Inventory, Mail, People, and Recruit with their respective app names and base URLs.
  • Users can now proxy native API calls to these Zoho services using managed authentication.

v1.0.9 | 2026-02-06T04:06:33.456Z | user

  • Added support for Attio, GitHub, Linear, and Monday.com as new proxied services.
  • Provided new reference files for Attio, GitHub, Linear, and Monday.com integration details.
  • Updated the supported services table and routing guides to include the new providers.

v1.0.8 | 2026-02-06T02:20:15.846Z | user

  • Replaced all Bash/cURL API examples with equivalent Python (using urllib) scripts for usage, connection management, and authentication instructions.
  • Kept all endpoint details and responses unchanged, ensuring functionality is the same.
  • Updated the documentation to reflect example usage in Python throughout for a more programmatic workflow.

v1.0.7 | 2026-02-05T01:33:21.326Z | user

  • Added support and documentation for Klaviyo, Mailchimp, WhatsApp Business, and WooCommerce APIs.
  • Updated supported services table to include newly added providers.
  • Added new reference guides: klaviyo.md, mailchimp.md, whatsapp-business.md, and woocommerce.md.
  • Minor improvements to environment variable usage examples in authentication and connection sections.

v1.0.6 | 2026-02-04T08:32:14.258Z | user

  • Added support and documentation for Pipedrive, Trello, and YouTube APIs.
  • Updated the Supported Services table to include Pipedrive, Trello, and YouTube.
  • Included new routing guides: references/pipedrive.md, references/trello.md, and references/youtube.md.

v1.0.5 | 2026-02-03T23:10:44.977Z | user

  • Added a prominent troubleshooting section for 500 Internal Server Errors, explaining that these typically result from expired OAuth refresh tokens and detailing how to resolve by creating a new connection and retrying with its ID.
  • No functional or interface changes; documentation update only.
  • All usage instructions, API coverage, and connection management details remain unchanged.

v1.0.4 | 2026-02-03T19:27:43.151Z | user

  • Added detailed reference documentation for Asana, Calendly, ClickUp, Fathom, Google Meet, Google Play, Google Slides, and Outlook in the references directory.
  • Updated SKILL.md to include new supported services: Google Meet, Google Play, Google Slides, and Outlook.
  • Expanded supported services table and routing guide to reflect new integrations.
  • No breaking changes; existing API behavior is unchanged.

v1.0.3 | 2026-02-03T11:29:21.158Z | user

  • Added support and documentation for new services: Asana, Calendly, ClickUp, and Fathom.
  • Updated the Supported Services table and references section to include new providers.
  • No changes to existing API usage or connection management.

v1.0.2 | 2026-02-03T08:44:01.554Z | user

  • Removed the reference file for Shopify (references/shopify.md) from the documentation.
  • The Shopify-specific routing guide is no longer available in the references section.

v1.0.1 | 2026-02-01T08:46:56.692Z | user

https://github.com/maton-ai/api-gateway-skill

  • Removed CONTRIBUTING.md and README.md files for a leaner distribution.
  • Streamlined SKILL.md: greatly reduced the skill description, removing detailed usage scenarios, trigger phrases, and granular supported actions.
  • Left only a high-level overview of the API gateway's purpose and examples, focusing on essential usage and supported endpoints.
  • Documentation no longer lists specific triggers or user scenarios—refer to service docs for details.

v1.0.0 | 2026-02-01T08:37:47.126Z | user

https://github.com/maton-ai/api-gateway-skill

Initial release of the api-gateway skill.

  • Provides an API gateway to interact with third-party services using managed OAuth.
  • Supports a wide range of platforms: Slack, HubSpot, Salesforce, Google Workspace (Gmail, Sheets, Calendar, Drive, Docs, Forms), Stripe, Shopify, QuickBooks, Xero, Airtable, Notion, Jira, and more.
  • Enables automations such as sending messages, reading data, creating records, updating, and deleting across supported apps.
  • Automatically injects OAuth tokens for seamless authentication.
  • Includes guidance for when to invoke the skill and common user scenarios.

Archive index:

Archive v1.0.54: 123 files, 166508 bytes

Files: LICENSE.txt (1072b), references/active-campaign.md (3233b), references/acuity-scheduling.md (3108b), references/airtable.md (3054b), references/apollo.md (4131b), references/asana.md (2805b), references/attio.md (4912b), references/basecamp.md (2849b), references/beehiiv.md (2633b), references/box.md (2892b), references/brevo.md (3825b), references/cal-com.md (3463b), references/calendly.md (2685b), references/callrail.md (3152b), references/chargebee.md (5609b), references/clickfunnels.md (5461b), references/clicksend.md (2397b), references/clickup.md (2978b), references/clio.md (6245b), references/clockify.md (3805b), references/coda.md (3646b), references/cognito-forms.md (2477b), references/companycam.md (3693b), references/confluence.md (4703b), references/constant-contact.md (2536b), references/dropbox-business.md (11936b), references/dropbox.md (3130b), references/elevenlabs.md (1816b), references/eventbrite.md (4273b), references/fathom.md (1956b), references/firebase.md (3125b), references/fireflies.md (1892b), references/getresponse.md (2851b), references/github.md (2511b), references/google-ads.md (3954b), references/google-analytics-admin.md (5851b), references/google-analytics-data.md (4250b), references/google-bigquery.md (3994b), references/google-calendar.md (3814b), references/google-classroom.md (2689b), references/google-contacts.md (3340b), references/google-docs.md (3020b), references/google-drive.md (5252b), references/google-forms.md (4249b), references/google-mail.md (3647b), references/google-meet.md (2800b), references/google-merchant.md (5110b), references/google-play.md (3842b), references/google-search-console.md (3917b), references/google-sheets.md (6195b), references/google-slides.md (4609b), references/google-tasks.md (3121b), references/google-workspace-admin.md (4708b), references/granola.md (1875b), references/gumroad.md (3378b), references/hubspot.md (10065b), references/instantly.md (3024b), references/jira.md (4573b), references/jobber.md (3700b), references/jotform.md (3717b), references/keap.md (3134b), references/kit.md (3415b), references/klaviyo.md (3913b), references/lemlist.md (2490b), references/linear.md (4412b), references/linkedin.md (5546b), references/mailchimp.md (4197b), references/mailerlite.md (4108b), references/mailgun.md (4845b), references/manus.md (2426b), references/manychat.md (3674b), references/microsoft-excel.md (3895b), references/microsoft-teams.md (5999b), references/microsoft-to-do.md (3685b), references/monday.md (4550b), references/motion.md (2741b), references/netlify.md (3701b), references/notion.md (8043b), references/one-drive.md (2305b), references/outlook.md (4180b)

File v1.0.54:SKILL.md


name: api-gateway description: | 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). compatibility: Requires network access and valid Maton API key metadata: author: maton version: "1.0" clawdbot: emoji: đź§  homepage: "https://maton.ai" requires: env: - MATON_API_KEY

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

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. 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",
      "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

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 | | 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 | | Granola | granola | mcp.granola.ai (MCP) | | 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 | | Manus | manus | api.manus.ai | | 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 | | 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 | | Salesforce | salesforce | {instance}.salesforce.com | | Sentry | sentry | {subdomain}.sentry.io | | 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 | | 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 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
  • Apollo - People search, enrichment, contacts
  • Asana - Tasks, projects, workspaces, webhooks
  • Attio - People, companies, records, tasks
  • Basecamp - Projects, to-dos, messages, schedules, documents
  • beehiiv - Publications, subscriptions, posts, custom fields
  • Box - Files, folders, collaborations, shared links
  • Brevo - Contacts, email campaigns, transactional emails, templates
  • 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
  • Fathom - Meeting recordings, transcripts, summaries, webhooks
  • Firebase - Projects, web apps, Android apps, iOS apps, configurations
  • Fireflies - Meeting transcripts, summaries, AskFred AI, channels
  • GetResponse - Campaigns, contacts, newsletters, autoresponders, tags, segments
  • GitHub - Repositories, issues, pull requests, commits
  • Gumroad - Products, sales, subscribers, licenses, webhooks
  • Granola - Meeting notes, transcripts, queries (MCP)
  • 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
  • Keap - Contacts, companies, tags, tasks, opportunities, campaigns
  • 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
  • ManyChat - Subscribers, tags, flows, messaging
  • Manus - AI agent tasks, projects, files, webhooks
  • 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
  • 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
  • Salesforce - SOQL, sObjects, CRUD
  • SignNow - Documents, templates, invites, e-signatures
  • SendGrid - Email sending, contacts, templates, suppressions, statistics
  • Sentry - Issues, events, projects, teams, releases
  • 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
  • Systeme.io - Contacts, tags, courses, communities, webhooks
  • Tally - Forms, submissions, workspaces, webhooks
  • 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
  • Typeform - Forms, responses, insights
  • Vimeo - Videos, folders, albums, comments, likes
  • WhatsApp Business - Messages, templates, media
  • WooCommerce - Products, orders, customers, coupons
  • WordPress.com - Posts, pages, sites, users, settings
  • Xero - Contacts, invoices, reports
  • YouTube - Videos, playlists, channels, subscriptions
  • 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

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. 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

  1. 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
  1. 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

Tips

  1. Use native API docs: Refer to each service's official API documentation for endpoint paths and parameters.

  2. Headers are forwarded: Custom headers (except Host and Authorization) are forwarded to the target API.

  3. Query params work: URL query parameters are passed through to the target API.

  4. All HTTP methods supported: GET, POST, PUT, PATCH, DELETE are all supported.

  5. QuickBooks special case: Use :realmId in the path and it will be replaced with the connected realm ID.

Optional

File v1.0.54:_meta.json

{ "ownerId": "kn75240wq8bnv2qm2xgry748jd80b9r0", "slug": "api-gateway", "version": "1.0.54", "publishedAt": 1772244788484 }

File v1.0.54:references/active-campaign.md

ActiveCampaign Routing Reference

App name: active-campaign Base URL proxied: {account}.api-us1.com

API Path Pattern

/active-campaign/api/3/{resource}

Common Endpoints

Contacts

List Contacts

GET /active-campaign/api/3/contacts

Get Contact

GET /active-campaign/api/3/contacts/{contactId}

Create Contact

POST /active-campaign/api/3/contacts
Content-Type: application/json

{
  "contact": {
    "email": "user@example.com",
    "firstName": "John",
    "lastName": "Doe"
  }
}

Update Contact

PUT /active-campaign/api/3/contacts/{contactId}

Delete Contact

DELETE /active-campaign/api/3/contacts/{contactId}

Tags

List Tags

GET /active-campaign/api/3/tags

Create Tag

POST /active-campaign/api/3/tags
Content-Type: application/json

{
  "tag": {
    "tag": "Tag Name",
    "tagType": "contact"
  }
}

Contact Tags

Add Tag to Contact

POST /active-campaign/api/3/contactTags
Content-Type: application/json

{
  "contactTag": {
    "contact": "1",
    "tag": "1"
  }
}

Remove Tag from Contact

DELETE /active-campaign/api/3/contactTags/{contactTagId}

Lists

List All Lists

GET /active-campaign/api/3/lists

Create List

POST /active-campaign/api/3/lists

Deals

List Deals

GET /active-campaign/api/3/deals

Create Deal

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

GET /active-campaign/api/3/dealStages

List Pipelines (Deal Groups)

GET /active-campaign/api/3/dealGroups

Automations

List Automations

GET /active-campaign/api/3/automations

Campaigns

List Campaigns

GET /active-campaign/api/3/campaigns

Users

List Users

GET /active-campaign/api/3/users

Accounts

List Accounts

GET /active-campaign/api/3/accounts

Custom Fields

List Fields

GET /active-campaign/api/3/fields

Notes

List Notes

GET /active-campaign/api/3/notes

Webhooks

List Webhooks

GET /active-campaign/api/3/webhooks

Pagination

Uses offset-based pagination:

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:

{
  "contacts": [...],
  "meta": {
    "total": "150"
  }
}

Notes

  • All endpoints require /api/3/ prefix
  • Request bodies use singular resource names (e.g., {"contact": {...}})
  • IDs returned as strings
  • Rate limit: 5 requests per second per account
  • DELETE returns 200 OK (not 204)

Resources

File v1.0.54:references/acuity-scheduling.md

Acuity Scheduling Routing Reference

App name: acuity-scheduling Base URL proxied: acuityscheduling.com

API Path Pattern

/acuity-scheduling/api/v1/{resource}

The gateway automatically prepends /api/v1 when proxying to Acuity.

Common Endpoints

Get Account Info

GET /acuity-scheduling/api/v1/me

List Appointments

GET /acuity-scheduling/api/v1/appointments?max=100&minDate=2026-02-01

Get Appointment

GET /acuity-scheduling/api/v1/appointments/{id}

Create Appointment

POST /acuity-scheduling/api/v1/appointments
Content-Type: application/json

{
  "datetime": "2026-02-15T09:00",
  "appointmentTypeID": 123,
  "firstName": "John",
  "lastName": "Doe",
  "email": "john@example.com"
}

Update Appointment

PUT /acuity-scheduling/api/v1/appointments/{id}
Content-Type: application/json

{
  "firstName": "Jane",
  "lastName": "Smith"
}

Cancel Appointment

PUT /acuity-scheduling/api/v1/appointments/{id}/cancel

Reschedule Appointment

PUT /acuity-scheduling/api/v1/appointments/{id}/reschedule
Content-Type: application/json

{
  "datetime": "2026-02-20T10:00"
}

List Calendars

GET /acuity-scheduling/api/v1/calendars

List Appointment Types

GET /acuity-scheduling/api/v1/appointment-types

Get Available Dates

GET /acuity-scheduling/api/v1/availability/dates?month=2026-02&appointmentTypeID=123

Get Available Times

GET /acuity-scheduling/api/v1/availability/times?date=2026-02-04&appointmentTypeID=123

List Clients

GET /acuity-scheduling/api/v1/clients?search=John

Create Client

POST /acuity-scheduling/api/v1/clients
Content-Type: application/json

{
  "firstName": "John",
  "lastName": "Doe",
  "email": "john@example.com"
}

List Blocks

GET /acuity-scheduling/api/v1/blocks?calendarID=1234

Create Block

POST /acuity-scheduling/api/v1/blocks
Content-Type: application/json

{
  "start": "2026-02-15T12:00",
  "end": "2026-02-15T13:00",
  "calendarID": 1234
}

Delete Block

DELETE /acuity-scheduling/api/v1/blocks/{id}

List Forms

GET /acuity-scheduling/api/v1/forms

List Labels

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

Resources

File v1.0.54:references/airtable.md

Airtable Routing Reference

App name: airtable Base URL proxied: api.airtable.com

API Path Pattern

/airtable/v0/{baseId}/{tableIdOrName}

Common Endpoints

List Records

GET /airtable/v0/{baseId}/{tableIdOrName}?maxRecords=100

With view:

GET /airtable/v0/{baseId}/{tableIdOrName}?view=Grid%20view&maxRecords=100

With filter formula:

GET /airtable/v0/{baseId}/{tableIdOrName}?filterByFormula={Status}='Active'

With field selection:

GET /airtable/v0/{baseId}/{tableIdOrName}?fields[]=Name&fields[]=Status&fields[]=Email

With sorting:

GET /airtable/v0/{baseId}/{tableIdOrName}?sort[0][field]=Created&sort[0][direction]=desc

Get Record

GET /airtable/v0/{baseId}/{tableIdOrName}/{recordId}

Create Records

POST /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json

{
  "records": [
    {
      "fields": {
        "Name": "New Record",
        "Status": "Active",
        "Email": "test@example.com"
      }
    }
  ]
}

Update Records (PATCH - partial update)

PATCH /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json

{
  "records": [
    {
      "id": "recXXXXXXXXXXXXXX",
      "fields": {
        "Status": "Completed"
      }
    }
  ]
}

Update Records (PUT - full replace)

PUT /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json

{
  "records": [
    {
      "id": "recXXXXXXXXXXXXXX",
      "fields": {
        "Name": "Updated Name",
        "Status": "Active"
      }
    }
  ]
}

Delete Records

DELETE /airtable/v0/{baseId}/{tableIdOrName}?records[]=recXXXXX&records[]=recYYYYY

List Bases

GET /airtable/v0/meta/bases

Get Base Schema

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:

{
  "records": [...],
  "offset": "itrXXXXXXXXXXX"
}

Use offset for next page:

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

File v1.0.54:references/apollo.md

Apollo Routing Reference

App name: apollo Base URL proxied: api.apollo.io

API Path Pattern

/apollo/v1/{endpoint}

Common Endpoints

People

Search People

POST /apollo/v1/mixed_people/api_search
Content-Type: application/json

{
  "q_organization_name": "Google",
  "page": 1,
  "per_page": 25
}

Get Person

GET /apollo/v1/people/{personId}

Enrich Person

POST /apollo/v1/people/match
Content-Type: application/json

{
  "email": "john@example.com"
}

Or by LinkedIn:

POST /apollo/v1/people/match
Content-Type: application/json

{
  "linkedin_url": "https://linkedin.com/in/johndoe"
}

Organizations

Search Organizations

POST /apollo/v1/organizations/search
Content-Type: application/json

{
  "q_organization_name": "Google",
  "page": 1,
  "per_page": 25
}

Enrich Organization

POST /apollo/v1/organizations/enrich
Content-Type: application/json

{
  "domain": "google.com"
}

Contacts

Search Contacts

POST /apollo/v1/contacts/search
Content-Type: application/json

{
  "page": 1,
  "per_page": 25
}

Create Contact

POST /apollo/v1/contacts
Content-Type: application/json

{
  "first_name": "John",
  "last_name": "Doe",
  "email": "john@example.com",
  "organization_name": "Acme Corp"
}

Update Contact

PUT /apollo/v1/contacts/{contactId}
Content-Type: application/json

{
  "first_name": "Jane"
}

Accounts

Search Accounts

POST /apollo/v1/accounts/search
Content-Type: application/json

{
  "page": 1,
  "per_page": 25
}

Create Account

POST /apollo/v1/accounts
Content-Type: application/json

{
  "name": "Acme Corp",
  "domain": "acme.com"
}

Sequences

Search Sequences

POST /apollo/v1/emailer_campaigns/search
Content-Type: application/json

{
  "page": 1,
  "per_page": 25
}

Add Contact to Sequence

POST /apollo/v1/emailer_campaigns/{campaignId}/add_contact_ids
Content-Type: application/json

{
  "contact_ids": ["contact_id_1", "contact_id_2"]
}

Email

Search Email Messages

POST /apollo/v1/emailer_messages/search
Content-Type: application/json

{
  "contact_id": "{contactId}"
}

Labels

List Labels

GET /apollo/v1/labels

Search Filters

Common search parameters:

  • q_organization_name - Company name
  • q_person_title - Job title
  • person_locations - Array of locations
  • organization_num_employees_ranges - Employee count ranges
  • q_keywords - General keyword search

Notes

  • Authentication is automatic - the router injects the API key
  • Pagination uses page and per_page parameters in POST body
  • Most list endpoints use POST with /search suffix (not GET)
  • Email enrichment consumes credits
  • Rate limits apply per endpoint
  • people/search and mixed_people/search are deprecated - use mixed_people/api_search instead

Resources

File v1.0.54:references/asana.md

Asana Routing Reference

App name: asana Base URL proxied: app.asana.com

API Path Pattern

/asana/api/1.0/{resource}

Common Endpoints

Get Current User

GET /asana/api/1.0/users/me

List Workspaces

GET /asana/api/1.0/workspaces

List Tasks

GET /asana/api/1.0/tasks?project=PROJECT_GID&opt_fields=name,completed,due_on

Get a Task

GET /asana/api/1.0/tasks/{task_gid}

Create a Task

POST /asana/api/1.0/tasks
Content-Type: application/json

{
  "data": {
    "name": "New task",
    "projects": ["PROJECT_GID"],
    "assignee": "USER_GID",
    "due_on": "2025-03-20",
    "notes": "Task description"
  }
}

Update a Task

PUT /asana/api/1.0/tasks/{task_gid}
Content-Type: application/json

{
  "data": {
    "completed": true
  }
}

Delete a Task

DELETE /asana/api/1.0/tasks/{task_gid}

Get Subtasks

GET /asana/api/1.0/tasks/{task_gid}/subtasks

Create Subtask

POST /asana/api/1.0/tasks/{task_gid}/subtasks
Content-Type: application/json

{
  "data": {
    "name": "Subtask name"
  }
}

List Projects

GET /asana/api/1.0/projects?workspace=WORKSPACE_GID&opt_fields=name,owner,due_date

Get a Project

GET /asana/api/1.0/projects/{project_gid}

Create a Project

POST /asana/api/1.0/projects
Content-Type: application/json

{
  "data": {
    "name": "New Project",
    "workspace": "WORKSPACE_GID"
  }
}

List Users in Workspace

GET /asana/api/1.0/workspaces/{workspace_gid}/users?opt_fields=name,email

Create Webhook

POST /asana/api/1.0/webhooks
Content-Type: application/json

{
  "data": {
    "resource": "PROJECT_OR_TASK_GID",
    "target": "https://example.com/webhook",
    "filters": [
      {
        "resource_type": "task",
        "action": "changed",
        "fields": ["completed", "due_on"]
      }
    ]
  }
}

Delete Webhook

DELETE /asana/api/1.0/webhooks/{webhook_gid}

Notes

  • Resource IDs (GIDs) are strings
  • Timestamps are in ISO 8601 format
  • Use opt_fields to specify which fields to return in responses
  • Workspaces are the highest-level organizational unit
  • Use cursor-based pagination with offset parameter
  • Webhook creation requires the target URL to respond with 200 status

Resources

File v1.0.54:references/attio.md

Attio Routing Reference

App name: attio Base URL proxied: api.attio.com

API Path Pattern

/attio/v2/{resource}

Common Endpoints

List Objects

GET /attio/v2/objects

Get Object

GET /attio/v2/objects/{object}

List Attributes

GET /attio/v2/objects/{object}/attributes

Query Records

POST /attio/v2/objects/{object}/records/query
Content-Type: application/json

{
  "limit": 50,
  "offset": 0
}

Get Record

GET /attio/v2/objects/{object}/records/{record_id}

Create Record

POST /attio/v2/objects/{object}/records
Content-Type: application/json

{
  "data": {
    "values": {
      "name": [{"first_name": "John", "last_name": "Doe", "full_name": "John Doe"}],
      "email_addresses": ["john@example.com"]
    }
  }
}

Update Record

PATCH /attio/v2/objects/{object}/records/{record_id}
Content-Type: application/json

{
  "data": {
    "values": {
      "job_title": "Engineer"
    }
  }
}

Delete Record

DELETE /attio/v2/objects/{object}/records/{record_id}

List Tasks

GET /attio/v2/tasks?limit=50

Create Task

POST /attio/v2/tasks
Content-Type: application/json

{
  "data": {
    "content": "Task description",
    "format": "plaintext",
    "deadline_at": null,
    "assignees": [],
    "linked_records": []
  }
}

List Workspace Members

GET /attio/v2/workspace_members

Identify Self

GET /attio/v2/self

Notes

List Notes

GET /attio/v2/notes?limit=50&parent_object={object}&parent_record_id={record_id}

Get Note

GET /attio/v2/notes/{note_id}

Create Note

POST /attio/v2/notes
Content-Type: application/json

{
  "data": {
    "format": "plaintext",
    "title": "Meeting Summary",
    "content": "Note content here",
    "parent_object": "companies",
    "parent_record_id": "{record_id}",
    "created_by_actor": {
      "type": "workspace-member",
      "id": "{workspace_member_id}"
    }
  }
}

Delete Note

DELETE /attio/v2/notes/{note_id}

Comments

Create Comment on Record

POST /attio/v2/comments
Content-Type: application/json

{
  "data": {
    "format": "plaintext",
    "content": "Comment text",
    "author": {
      "type": "workspace-member",
      "id": "{workspace_member_id}"
    },
    "record": {
      "object": "companies",
      "record_id": "{record_id}"
    }
  }
}

Reply to Comment Thread

POST /attio/v2/comments
Content-Type: application/json

{
  "data": {
    "format": "plaintext",
    "content": "This is a reply",
    "author": {
      "type": "workspace-member",
      "id": "{workspace_member_id}"
    },
    "thread_id": "{thread_id}"
  }
}

Lists

List All Lists

GET /attio/v2/lists

Get List

GET /attio/v2/lists/{list_id}

List Entries

Query List Entries

POST /attio/v2/lists/{list}/entries/query
Content-Type: application/json

{
  "limit": 50,
  "offset": 0
}

Create List Entry

POST /attio/v2/lists/{list}/entries
Content-Type: application/json

{
  "data": {
    "parent_record_id": "{record_id}",
    "parent_object": "companies",
    "entry_values": {}
  }
}

Get List Entry

GET /attio/v2/lists/{list}/entries/{entry_id}

Update List Entry

PATCH /attio/v2/lists/{list}/entries/{entry_id}
Content-Type: application/json

{
  "data": {
    "entry_values": {
      "status": "Active"
    }
  }
}

Delete List Entry

DELETE /attio/v2/lists/{list}/entries/{entry_id}

Meetings

List Meetings

GET /attio/v2/meetings?limit=50

Get Meeting

GET /attio/v2/meetings/{meeting_id}

Call Recordings

List Call Recordings for Meeting

GET /attio/v2/meetings/{meeting_id}/call_recordings?limit=50

Get Call Recording

GET /attio/v2/meetings/{meeting_id}/call_recordings/{call_recording_id}

Usage Notes

  • Object slugs are lowercase snake_case (e.g., people, companies)
  • Record IDs are UUIDs
  • For personal-name attributes, include full_name when creating records
  • Task creation requires format, deadline_at, assignees, and linked_records fields
  • Note creation requires format, content, parent_object, and parent_record_id
  • Comment creation requires format, content, author, plus one of record, entry, or thread_id
  • Meetings use cursor-based pagination
  • Rate limits: 100 read/sec, 25 write/sec
  • Pagination uses limit and offset parameters (or cursor for meetings)

Resources

File v1.0.54:references/basecamp.md

Basecamp Routing Reference

App name: basecamp Base URL proxied: 3.basecampapi.com/{account_id}

Note: The gateway automatically injects the account ID from the OAuth connection.

API Path Pattern

/basecamp/{resource}.json

All paths must end with .json.

Common Endpoints

Get Current User

GET /basecamp/my/profile.json

List People

GET /basecamp/people.json

List Projects

GET /basecamp/projects.json

Get Project

GET /basecamp/projects/{project_id}.json

Returns project with dock array containing tool IDs.

Create Project

POST /basecamp/projects.json
Content-Type: application/json

{
  "name": "Project Name",
  "description": "Description"
}

Get Todoset

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}.json

List Todolists

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}/todolists.json

List Todos

GET /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json

Create Todo

POST /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json
Content-Type: application/json

{
  "content": "Todo content",
  "due_on": "2026-02-15",
  "assignee_ids": [123]
}

Complete Todo

POST /basecamp/buckets/{project_id}/todos/{todo_id}/completion.json

Get Message Board

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}.json

List Messages

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}/messages.json

Get Schedule

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}.json

List Schedule Entries

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}/entries.json

Get Vault (Documents)

GET /basecamp/buckets/{project_id}/vaults/{vault_id}.json

List Documents

GET /basecamp/buckets/{project_id}/vaults/{vault_id}/documents.json

List Campfires

GET /basecamp/chats.json

Trash Recording

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/trashed.json

Key Concepts

  • Bucket: Project content container (bucket_id = project_id)
  • Dock: Per-project tool list with id, name, enabled
  • Recording: Any content item (todos, messages, documents)

Pagination

Uses Link header with rel="next":

Link: <url>; rel="next"
X-Total-Count: 150

Notes

  • All paths must end with .json
  • Gateway injects account ID automatically
  • Uses Basecamp 4 API (bc3-api)
  • Rate limit: ~50 requests per 10 seconds per IP
  • Check enabled: true in dock before using tools

Resources

File v1.0.54:references/beehiiv.md

beehiiv Routing Reference

App name: beehiiv Base URL proxied: api.beehiiv.com

API Path Pattern

/beehiiv/v2/{resource}

Common Endpoints

Publications

List Publications

GET /beehiiv/v2/publications

Get Publication

GET /beehiiv/v2/publications/{publication_id}

Subscriptions

List Subscriptions

GET /beehiiv/v2/publications/{publication_id}/subscriptions

Get Subscription by ID

GET /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}

Get Subscription by Email

GET /beehiiv/v2/publications/{publication_id}/subscriptions/by_email/{email}

Create Subscription

POST /beehiiv/v2/publications/{publication_id}/subscriptions
Content-Type: application/json

{
  "email": "subscriber@example.com",
  "utm_source": "api"
}

Update Subscription

PATCH /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}

Delete Subscription

DELETE /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}

Posts

List Posts

GET /beehiiv/v2/publications/{publication_id}/posts

Get Post

GET /beehiiv/v2/publications/{publication_id}/posts/{post_id}

Custom Fields

List Custom Fields

GET /beehiiv/v2/publications/{publication_id}/custom_fields

Create Custom Field

POST /beehiiv/v2/publications/{publication_id}/custom_fields

Segments

GET /beehiiv/v2/publications/{publication_id}/segments
GET /beehiiv/v2/publications/{publication_id}/segments/{segment_id}

Tiers

GET /beehiiv/v2/publications/{publication_id}/tiers
POST /beehiiv/v2/publications/{publication_id}/tiers
PATCH /beehiiv/v2/publications/{publication_id}/tiers/{tier_id}

Automations

GET /beehiiv/v2/publications/{publication_id}/automations
GET /beehiiv/v2/publications/{publication_id}/automations/{automation_id}

Pagination

Cursor-based (recommended) or page-based (deprecated):

# Cursor-based
GET /beehiiv/v2/publications/{pub_id}/subscriptions?limit=10&cursor={next_cursor}

# Page-based (max 100 pages)
GET /beehiiv/v2/publications?page=2&limit=10

Notes

  • Publication IDs start with pub_
  • Subscription IDs start with sub_
  • Timestamps are Unix timestamps
  • Cursor-based pagination is recommended
  • Page-based pagination limited to 100 pages

Resources

File v1.0.54:references/box.md

Box Routing Reference

App name: box Base URL proxied: api.box.com

API Path Pattern

/box/2.0/{resource}

Common Endpoints

Get Current User

GET /box/2.0/users/me

Get User

GET /box/2.0/users/{user_id}

Get Folder

GET /box/2.0/folders/{folder_id}

Root folder ID is 0.

List Folder Items

GET /box/2.0/folders/{folder_id}/items
GET /box/2.0/folders/{folder_id}/items?limit=100&offset=0

Create Folder

POST /box/2.0/folders
Content-Type: application/json

{
  "name": "New Folder",
  "parent": {"id": "0"}
}

Update Folder

PUT /box/2.0/folders/{folder_id}
Content-Type: application/json

{
  "name": "Updated Name",
  "description": "Description"
}

Copy Folder

POST /box/2.0/folders/{folder_id}/copy
Content-Type: application/json

{
  "name": "Copied Folder",
  "parent": {"id": "0"}
}

Delete Folder

DELETE /box/2.0/folders/{folder_id}
DELETE /box/2.0/folders/{folder_id}?recursive=true

Get File

GET /box/2.0/files/{file_id}

Download File

GET /box/2.0/files/{file_id}/content

Update File

PUT /box/2.0/files/{file_id}

Copy File

POST /box/2.0/files/{file_id}/copy

Delete File

DELETE /box/2.0/files/{file_id}

Create Shared Link

PUT /box/2.0/folders/{folder_id}
Content-Type: application/json

{
  "shared_link": {"access": "open"}
}

List Collaborations

GET /box/2.0/folders/{folder_id}/collaborations

Create Collaboration

POST /box/2.0/collaborations
Content-Type: application/json

{
  "item": {"type": "folder", "id": "123"},
  "accessible_by": {"type": "user", "login": "user@example.com"},
  "role": "editor"
}

Search

GET /box/2.0/search?query=keyword

Events

GET /box/2.0/events

Trash

GET /box/2.0/folders/trash/items
DELETE /box/2.0/files/{file_id}/trash
DELETE /box/2.0/folders/{folder_id}/trash

Collections

GET /box/2.0/collections
GET /box/2.0/collections/{collection_id}/items

Recent Items

GET /box/2.0/recent_items

Webhooks

GET /box/2.0/webhooks
POST /box/2.0/webhooks
DELETE /box/2.0/webhooks/{webhook_id}

Pagination

Offset-based pagination:

GET /box/2.0/folders/0/items?limit=100&offset=0

Response:

{
  "total_count": 250,
  "entries": [...],
  "offset": 0,
  "limit": 100
}

Notes

  • Root folder ID is 0
  • File uploads use upload.box.com (different base URL)
  • Delete operations return 204 No Content
  • Some operations require enterprise admin permissions
  • Use fields parameter to select specific fields

Resources

File v1.0.54:references/brevo.md

Brevo Routing Reference

App name: brevo Base URL proxied: api.brevo.com

API Path Pattern

/brevo/v3/{resource}

Common Endpoints

Account

GET /brevo/v3/account

Contacts

List Contacts

GET /brevo/v3/contacts?limit=50&offset=0

Get Contact

GET /brevo/v3/contacts/{identifier}

Create Contact

POST /brevo/v3/contacts
Content-Type: application/json

{
  "email": "contact@example.com",
  "attributes": {"FIRSTNAME": "John", "LASTNAME": "Doe"},
  "listIds": [2]
}

Update Contact

PUT /brevo/v3/contacts/{identifier}
Content-Type: application/json

{
  "attributes": {"FIRSTNAME": "Updated"}
}

Delete Contact

DELETE /brevo/v3/contacts/{identifier}

Lists

List All Lists

GET /brevo/v3/contacts/lists

Create List

POST /brevo/v3/contacts/lists
Content-Type: application/json

{
  "name": "New List",
  "folderId": 1
}

Add Contacts to List

POST /brevo/v3/contacts/lists/{listId}/contacts/add
Content-Type: application/json

{
  "emails": ["contact@example.com"]
}

Folders

List Folders

GET /brevo/v3/contacts/folders

Create Folder

POST /brevo/v3/contacts/folders
Content-Type: application/json

{
  "name": "New Folder"
}

Transactional Emails

Send Email

POST /brevo/v3/smtp/email
Content-Type: application/json

{
  "sender": {"name": "John", "email": "john@example.com"},
  "to": [{"email": "recipient@example.com", "name": "Jane"}],
  "subject": "Hello!",
  "htmlContent": "<html><body><h1>Hi!</h1></body></html>"
}

Get Email Statistics

GET /brevo/v3/smtp/statistics/events?limit=50

Email Templates

List Templates

GET /brevo/v3/smtp/templates

Create Template

POST /brevo/v3/smtp/templates
Content-Type: application/json

{
  "sender": {"name": "Company", "email": "noreply@company.com"},
  "templateName": "Welcome Email",
  "subject": "Welcome {{params.name}}!",
  "htmlContent": "<html><body><h1>Hello {{params.name}}!</h1></body></html>"
}

Email Campaigns

List Campaigns

GET /brevo/v3/emailCampaigns

Create Campaign

POST /brevo/v3/emailCampaigns
Content-Type: application/json

{
  "name": "Newsletter",
  "subject": "Monthly Update",
  "sender": {"name": "Company", "email": "news@company.com"},
  "htmlContent": "<html><body><h1>News</h1></body></html>",
  "recipients": {"listIds": [2]}
}

Send Campaign

POST /brevo/v3/emailCampaigns/{campaignId}/sendNow

Senders

List Senders

GET /brevo/v3/senders

Create Sender

POST /brevo/v3/senders
Content-Type: application/json

{
  "name": "Marketing",
  "email": "marketing@company.com"
}

Attributes

List Attributes

GET /brevo/v3/contacts/attributes

Pagination

Brevo uses offset-based pagination:

GET /brevo/v3/contacts?limit=50&offset=0

Parameters:

  • limit - Results per page (max varies by endpoint, typically 500)
  • offset - Starting index (0-based)

Response includes count:

{
  "contacts": [...],
  "count": 150
}

Notes

  • All endpoints require /v3/ prefix
  • Attribute names must be UPPERCASE
  • Contact identifiers: email, phone, or ID
  • Template parameters: {{params.name}} syntax
  • PUT/DELETE return 204 No Content on success
  • Rate limit: 300 calls/min (free), higher on paid plans

Resources

Archive v1.0.53: 123 files, 166506 bytes

Files: LICENSE.txt (1072b), references/active-campaign.md (3233b), references/acuity-scheduling.md (3108b), references/airtable.md (3054b), references/apollo.md (4131b), references/asana.md (2805b), references/attio.md (4912b), references/basecamp.md (2849b), references/beehiiv.md (2633b), references/box.md (2892b), references/brevo.md (3825b), references/cal-com.md (3463b), references/calendly.md (2685b), references/callrail.md (3152b), references/chargebee.md (5609b), references/clickfunnels.md (5461b), references/clicksend.md (2397b), references/clickup.md (2978b), references/clio.md (6245b), references/clockify.md (3805b), references/coda.md (3646b), references/cognito-forms.md (2477b), references/companycam.md (3693b), references/confluence.md (4703b), references/constant-contact.md (2536b), references/dropbox-business.md (11936b), references/dropbox.md (3130b), references/elevenlabs.md (1816b), references/eventbrite.md (4273b), references/fathom.md (1956b), references/firebase.md (3125b), references/fireflies.md (1892b), references/getresponse.md (2851b), references/github.md (2511b), references/google-ads.md (3954b), references/google-analytics-admin.md (5851b), references/google-analytics-data.md (4250b), references/google-bigquery.md (3994b), references/google-calendar.md (3814b), references/google-classroom.md (2689b), references/google-contacts.md (3340b), references/google-docs.md (3020b), references/google-drive.md (5252b), references/google-forms.md (4249b), references/google-mail.md (3647b), references/google-meet.md (2800b), references/google-merchant.md (5110b), references/google-play.md (3842b), references/google-search-console.md (3917b), references/google-sheets.md (6195b), references/google-slides.md (4609b), references/google-tasks.md (3121b), references/google-workspace-admin.md (4708b), references/granola.md (1875b), references/gumroad.md (3378b), references/hubspot.md (10065b), references/instantly.md (3024b), references/jira.md (4573b), references/jobber.md (3700b), references/jotform.md (3717b), references/keap.md (3134b), references/kit.md (3415b), references/klaviyo.md (3913b), references/lemlist.md (2490b), references/linear.md (4412b), references/linkedin.md (5546b), references/mailchimp.md (4197b), references/mailerlite.md (4108b), references/mailgun.md (4845b), references/manus.md (2426b), references/manychat.md (3674b), references/microsoft-excel.md (3895b), references/microsoft-teams.md (5999b), references/microsoft-to-do.md (3685b), references/monday.md (4550b), references/motion.md (2741b), references/netlify.md (3701b), references/notion.md (8043b), references/one-drive.md (2305b), references/outlook.md (4180b)

File v1.0.53:SKILL.md


name: api-gateway description: | Connect to 100+ APIs (Google Workspace, Microsoft 365, 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). compatibility: Requires network access and valid Maton API key metadata: author: maton version: "1.0" clawdbot: emoji: đź§  homepage: "https://maton.ai" requires: env: - MATON_API_KEY

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

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. 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",
      "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

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 | | 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 | | Granola | granola | mcp.granola.ai (MCP) | | 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 | | Manus | manus | api.manus.ai | | 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 | | 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 | | Salesforce | salesforce | {instance}.salesforce.com | | Sentry | sentry | {subdomain}.sentry.io | | 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 | | 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 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
  • Apollo - People search, enrichment, contacts
  • Asana - Tasks, projects, workspaces, webhooks
  • Attio - People, companies, records, tasks
  • Basecamp - Projects, to-dos, messages, schedules, documents
  • beehiiv - Publications, subscriptions, posts, custom fields
  • Box - Files, folders, collaborations, shared links
  • Brevo - Contacts, email campaigns, transactional emails, templates
  • 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
  • Fathom - Meeting recordings, transcripts, summaries, webhooks
  • Firebase - Projects, web apps, Android apps, iOS apps, configurations
  • Fireflies - Meeting transcripts, summaries, AskFred AI, channels
  • GetResponse - Campaigns, contacts, newsletters, autoresponders, tags, segments
  • GitHub - Repositories, issues, pull requests, commits
  • Gumroad - Products, sales, subscribers, licenses, webhooks
  • Granola - Meeting notes, transcripts, queries (MCP)
  • 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
  • Keap - Contacts, companies, tags, tasks, opportunities, campaigns
  • 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
  • ManyChat - Subscribers, tags, flows, messaging
  • Manus - AI agent tasks, projects, files, webhooks
  • 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
  • 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
  • Salesforce - SOQL, sObjects, CRUD
  • SignNow - Documents, templates, invites, e-signatures
  • SendGrid - Email sending, contacts, templates, suppressions, statistics
  • Sentry - Issues, events, projects, teams, releases
  • 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
  • Systeme.io - Contacts, tags, courses, communities, webhooks
  • Tally - Forms, submissions, workspaces, webhooks
  • 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
  • Typeform - Forms, responses, insights
  • Vimeo - Videos, folders, albums, comments, likes
  • WhatsApp Business - Messages, templates, media
  • WooCommerce - Products, orders, customers, coupons
  • WordPress.com - Posts, pages, sites, users, settings
  • Xero - Contacts, invoices, reports
  • YouTube - Videos, playlists, channels, subscriptions
  • 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

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. 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

  1. 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
  1. 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

Tips

  1. Use native API docs: Refer to each service's official API documentation for endpoint paths and parameters.

  2. Headers are forwarded: Custom headers (except Host and Authorization) are forwarded to the target API.

  3. Query params work: URL query parameters are passed through to the target API.

  4. All HTTP methods supported: GET, POST, PUT, PATCH, DELETE are all supported.

  5. QuickBooks special case: Use :realmId in the path and it will be replaced with the connected realm ID.

Optional

File v1.0.53:_meta.json

{ "ownerId": "kn75240wq8bnv2qm2xgry748jd80b9r0", "slug": "api-gateway", "version": "1.0.53", "publishedAt": 1772244203039 }

File v1.0.53:references/active-campaign.md

ActiveCampaign Routing Reference

App name: active-campaign Base URL proxied: {account}.api-us1.com

API Path Pattern

/active-campaign/api/3/{resource}

Common Endpoints

Contacts

List Contacts

GET /active-campaign/api/3/contacts

Get Contact

GET /active-campaign/api/3/contacts/{contactId}

Create Contact

POST /active-campaign/api/3/contacts
Content-Type: application/json

{
  "contact": {
    "email": "user@example.com",
    "firstName": "John",
    "lastName": "Doe"
  }
}

Update Contact

PUT /active-campaign/api/3/contacts/{contactId}

Delete Contact

DELETE /active-campaign/api/3/contacts/{contactId}

Tags

List Tags

GET /active-campaign/api/3/tags

Create Tag

POST /active-campaign/api/3/tags
Content-Type: application/json

{
  "tag": {
    "tag": "Tag Name",
    "tagType": "contact"
  }
}

Contact Tags

Add Tag to Contact

POST /active-campaign/api/3/contactTags
Content-Type: application/json

{
  "contactTag": {
    "contact": "1",
    "tag": "1"
  }
}

Remove Tag from Contact

DELETE /active-campaign/api/3/contactTags/{contactTagId}

Lists

List All Lists

GET /active-campaign/api/3/lists

Create List

POST /active-campaign/api/3/lists

Deals

List Deals

GET /active-campaign/api/3/deals

Create Deal

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

GET /active-campaign/api/3/dealStages

List Pipelines (Deal Groups)

GET /active-campaign/api/3/dealGroups

Automations

List Automations

GET /active-campaign/api/3/automations

Campaigns

List Campaigns

GET /active-campaign/api/3/campaigns

Users

List Users

GET /active-campaign/api/3/users

Accounts

List Accounts

GET /active-campaign/api/3/accounts

Custom Fields

List Fields

GET /active-campaign/api/3/fields

Notes

List Notes

GET /active-campaign/api/3/notes

Webhooks

List Webhooks

GET /active-campaign/api/3/webhooks

Pagination

Uses offset-based pagination:

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:

{
  "contacts": [...],
  "meta": {
    "total": "150"
  }
}

Notes

  • All endpoints require /api/3/ prefix
  • Request bodies use singular resource names (e.g., {"contact": {...}})
  • IDs returned as strings
  • Rate limit: 5 requests per second per account
  • DELETE returns 200 OK (not 204)

Resources

File v1.0.53:references/acuity-scheduling.md

Acuity Scheduling Routing Reference

App name: acuity-scheduling Base URL proxied: acuityscheduling.com

API Path Pattern

/acuity-scheduling/api/v1/{resource}

The gateway automatically prepends /api/v1 when proxying to Acuity.

Common Endpoints

Get Account Info

GET /acuity-scheduling/api/v1/me

List Appointments

GET /acuity-scheduling/api/v1/appointments?max=100&minDate=2026-02-01

Get Appointment

GET /acuity-scheduling/api/v1/appointments/{id}

Create Appointment

POST /acuity-scheduling/api/v1/appointments
Content-Type: application/json

{
  "datetime": "2026-02-15T09:00",
  "appointmentTypeID": 123,
  "firstName": "John",
  "lastName": "Doe",
  "email": "john@example.com"
}

Update Appointment

PUT /acuity-scheduling/api/v1/appointments/{id}
Content-Type: application/json

{
  "firstName": "Jane",
  "lastName": "Smith"
}

Cancel Appointment

PUT /acuity-scheduling/api/v1/appointments/{id}/cancel

Reschedule Appointment

PUT /acuity-scheduling/api/v1/appointments/{id}/reschedule
Content-Type: application/json

{
  "datetime": "2026-02-20T10:00"
}

List Calendars

GET /acuity-scheduling/api/v1/calendars

List Appointment Types

GET /acuity-scheduling/api/v1/appointment-types

Get Available Dates

GET /acuity-scheduling/api/v1/availability/dates?month=2026-02&appointmentTypeID=123

Get Available Times

GET /acuity-scheduling/api/v1/availability/times?date=2026-02-04&appointmentTypeID=123

List Clients

GET /acuity-scheduling/api/v1/clients?search=John

Create Client

POST /acuity-scheduling/api/v1/clients
Content-Type: application/json

{
  "firstName": "John",
  "lastName": "Doe",
  "email": "john@example.com"
}

List Blocks

GET /acuity-scheduling/api/v1/blocks?calendarID=1234

Create Block

POST /acuity-scheduling/api/v1/blocks
Content-Type: application/json

{
  "start": "2026-02-15T12:00",
  "end": "2026-02-15T13:00",
  "calendarID": 1234
}

Delete Block

DELETE /acuity-scheduling/api/v1/blocks/{id}

List Forms

GET /acuity-scheduling/api/v1/forms

List Labels

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

Resources

File v1.0.53:references/airtable.md

Airtable Routing Reference

App name: airtable Base URL proxied: api.airtable.com

API Path Pattern

/airtable/v0/{baseId}/{tableIdOrName}

Common Endpoints

List Records

GET /airtable/v0/{baseId}/{tableIdOrName}?maxRecords=100

With view:

GET /airtable/v0/{baseId}/{tableIdOrName}?view=Grid%20view&maxRecords=100

With filter formula:

GET /airtable/v0/{baseId}/{tableIdOrName}?filterByFormula={Status}='Active'

With field selection:

GET /airtable/v0/{baseId}/{tableIdOrName}?fields[]=Name&fields[]=Status&fields[]=Email

With sorting:

GET /airtable/v0/{baseId}/{tableIdOrName}?sort[0][field]=Created&sort[0][direction]=desc

Get Record

GET /airtable/v0/{baseId}/{tableIdOrName}/{recordId}

Create Records

POST /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json

{
  "records": [
    {
      "fields": {
        "Name": "New Record",
        "Status": "Active",
        "Email": "test@example.com"
      }
    }
  ]
}

Update Records (PATCH - partial update)

PATCH /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json

{
  "records": [
    {
      "id": "recXXXXXXXXXXXXXX",
      "fields": {
        "Status": "Completed"
      }
    }
  ]
}

Update Records (PUT - full replace)

PUT /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json

{
  "records": [
    {
      "id": "recXXXXXXXXXXXXXX",
      "fields": {
        "Name": "Updated Name",
        "Status": "Active"
      }
    }
  ]
}

Delete Records

DELETE /airtable/v0/{baseId}/{tableIdOrName}?records[]=recXXXXX&records[]=recYYYYY

List Bases

GET /airtable/v0/meta/bases

Get Base Schema

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:

{
  "records": [...],
  "offset": "itrXXXXXXXXXXX"
}

Use offset for next page:

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

File v1.0.53:references/apollo.md

Apollo Routing Reference

App name: apollo Base URL proxied: api.apollo.io

API Path Pattern

/apollo/v1/{endpoint}

Common Endpoints

People

Search People

POST /apollo/v1/mixed_people/api_search
Content-Type: application/json

{
  "q_organization_name": "Google",
  "page": 1,
  "per_page": 25
}

Get Person

GET /apollo/v1/people/{personId}

Enrich Person

POST /apollo/v1/people/match
Content-Type: application/json

{
  "email": "john@example.com"
}

Or by LinkedIn:

POST /apollo/v1/people/match
Content-Type: application/json

{
  "linkedin_url": "https://linkedin.com/in/johndoe"
}

Organizations

Search Organizations

POST /apollo/v1/organizations/search
Content-Type: application/json

{
  "q_organization_name": "Google",
  "page": 1,
  "per_page": 25
}

Enrich Organization

POST /apollo/v1/organizations/enrich
Content-Type: application/json

{
  "domain": "google.com"
}

Contacts

Search Contacts

POST /apollo/v1/contacts/search
Content-Type: application/json

{
  "page": 1,
  "per_page": 25
}

Create Contact

POST /apollo/v1/contacts
Content-Type: application/json

{
  "first_name": "John",
  "last_name": "Doe",
  "email": "john@example.com",
  "organization_name": "Acme Corp"
}

Update Contact

PUT /apollo/v1/contacts/{contactId}
Content-Type: application/json

{
  "first_name": "Jane"
}

Accounts

Search Accounts

POST /apollo/v1/accounts/search
Content-Type: application/json

{
  "page": 1,
  "per_page": 25
}

Create Account

POST /apollo/v1/accounts
Content-Type: application/json

{
  "name": "Acme Corp",
  "domain": "acme.com"
}

Sequences

Search Sequences

POST /apollo/v1/emailer_campaigns/search
Content-Type: application/json

{
  "page": 1,
  "per_page": 25
}

Add Contact to Sequence

POST /apollo/v1/emailer_campaigns/{campaignId}/add_contact_ids
Content-Type: application/json

{
  "contact_ids": ["contact_id_1", "contact_id_2"]
}

Email

Search Email Messages

POST /apollo/v1/emailer_messages/search
Content-Type: application/json

{
  "contact_id": "{contactId}"
}

Labels

List Labels

GET /apollo/v1/labels

Search Filters

Common search parameters:

  • q_organization_name - Company name
  • q_person_title - Job title
  • person_locations - Array of locations
  • organization_num_employees_ranges - Employee count ranges
  • q_keywords - General keyword search

Notes

  • Authentication is automatic - the router injects the API key
  • Pagination uses page and per_page parameters in POST body
  • Most list endpoints use POST with /search suffix (not GET)
  • Email enrichment consumes credits
  • Rate limits apply per endpoint
  • people/search and mixed_people/search are deprecated - use mixed_people/api_search instead

Resources

File v1.0.53:references/asana.md

Asana Routing Reference

App name: asana Base URL proxied: app.asana.com

API Path Pattern

/asana/api/1.0/{resource}

Common Endpoints

Get Current User

GET /asana/api/1.0/users/me

List Workspaces

GET /asana/api/1.0/workspaces

List Tasks

GET /asana/api/1.0/tasks?project=PROJECT_GID&opt_fields=name,completed,due_on

Get a Task

GET /asana/api/1.0/tasks/{task_gid}

Create a Task

POST /asana/api/1.0/tasks
Content-Type: application/json

{
  "data": {
    "name": "New task",
    "projects": ["PROJECT_GID"],
    "assignee": "USER_GID",
    "due_on": "2025-03-20",
    "notes": "Task description"
  }
}

Update a Task

PUT /asana/api/1.0/tasks/{task_gid}
Content-Type: application/json

{
  "data": {
    "completed": true
  }
}

Delete a Task

DELETE /asana/api/1.0/tasks/{task_gid}

Get Subtasks

GET /asana/api/1.0/tasks/{task_gid}/subtasks

Create Subtask

POST /asana/api/1.0/tasks/{task_gid}/subtasks
Content-Type: application/json

{
  "data": {
    "name": "Subtask name"
  }
}

List Projects

GET /asana/api/1.0/projects?workspace=WORKSPACE_GID&opt_fields=name,owner,due_date

Get a Project

GET /asana/api/1.0/projects/{project_gid}

Create a Project

POST /asana/api/1.0/projects
Content-Type: application/json

{
  "data": {
    "name": "New Project",
    "workspace": "WORKSPACE_GID"
  }
}

List Users in Workspace

GET /asana/api/1.0/workspaces/{workspace_gid}/users?opt_fields=name,email

Create Webhook

POST /asana/api/1.0/webhooks
Content-Type: application/json

{
  "data": {
    "resource": "PROJECT_OR_TASK_GID",
    "target": "https://example.com/webhook",
    "filters": [
      {
        "resource_type": "task",
        "action": "changed",
        "fields": ["completed", "due_on"]
      }
    ]
  }
}

Delete Webhook

DELETE /asana/api/1.0/webhooks/{webhook_gid}

Notes

  • Resource IDs (GIDs) are strings
  • Timestamps are in ISO 8601 format
  • Use opt_fields to specify which fields to return in responses
  • Workspaces are the highest-level organizational unit
  • Use cursor-based pagination with offset parameter
  • Webhook creation requires the target URL to respond with 200 status

Resources

File v1.0.53:references/attio.md

Attio Routing Reference

App name: attio Base URL proxied: api.attio.com

API Path Pattern

/attio/v2/{resource}

Common Endpoints

List Objects

GET /attio/v2/objects

Get Object

GET /attio/v2/objects/{object}

List Attributes

GET /attio/v2/objects/{object}/attributes

Query Records

POST /attio/v2/objects/{object}/records/query
Content-Type: application/json

{
  "limit": 50,
  "offset": 0
}

Get Record

GET /attio/v2/objects/{object}/records/{record_id}

Create Record

POST /attio/v2/objects/{object}/records
Content-Type: application/json

{
  "data": {
    "values": {
      "name": [{"first_name": "John", "last_name": "Doe", "full_name": "John Doe"}],
      "email_addresses": ["john@example.com"]
    }
  }
}

Update Record

PATCH /attio/v2/objects/{object}/records/{record_id}
Content-Type: application/json

{
  "data": {
    "values": {
      "job_title": "Engineer"
    }
  }
}

Delete Record

DELETE /attio/v2/objects/{object}/records/{record_id}

List Tasks

GET /attio/v2/tasks?limit=50

Create Task

POST /attio/v2/tasks
Content-Type: application/json

{
  "data": {
    "content": "Task description",
    "format": "plaintext",
    "deadline_at": null,
    "assignees": [],
    "linked_records": []
  }
}

List Workspace Members

GET /attio/v2/workspace_members

Identify Self

GET /attio/v2/self

Notes

List Notes

GET /attio/v2/notes?limit=50&parent_object={object}&parent_record_id={record_id}

Get Note

GET /attio/v2/notes/{note_id}

Create Note

POST /attio/v2/notes
Content-Type: application/json

{
  "data": {
    "format": "plaintext",
    "title": "Meeting Summary",
    "content": "Note content here",
    "parent_object": "companies",
    "parent_record_id": "{record_id}",
    "created_by_actor": {
      "type": "workspace-member",
      "id": "{workspace_member_id}"
    }
  }
}

Delete Note

DELETE /attio/v2/notes/{note_id}

Comments

Create Comment on Record

POST /attio/v2/comments
Content-Type: application/json

{
  "data": {
    "format": "plaintext",
    "content": "Comment text",
    "author": {
      "type": "workspace-member",
      "id": "{workspace_member_id}"
    },
    "record": {
      "object": "companies",
      "record_id": "{record_id}"
    }
  }
}

Reply to Comment Thread

POST /attio/v2/comments
Content-Type: application/json

{
  "data": {
    "format": "plaintext",
    "content": "This is a reply",
    "author": {
      "type": "workspace-member",
      "id": "{workspace_member_id}"
    },
    "thread_id": "{thread_id}"
  }
}

Lists

List All Lists

GET /attio/v2/lists

Get List

GET /attio/v2/lists/{list_id}

List Entries

Query List Entries

POST /attio/v2/lists/{list}/entries/query
Content-Type: application/json

{
  "limit": 50,
  "offset": 0
}

Create List Entry

POST /attio/v2/lists/{list}/entries
Content-Type: application/json

{
  "data": {
    "parent_record_id": "{record_id}",
    "parent_object": "companies",
    "entry_values": {}
  }
}

Get List Entry

GET /attio/v2/lists/{list}/entries/{entry_id}

Update List Entry

PATCH /attio/v2/lists/{list}/entries/{entry_id}
Content-Type: application/json

{
  "data": {
    "entry_values": {
      "status": "Active"
    }
  }
}

Delete List Entry

DELETE /attio/v2/lists/{list}/entries/{entry_id}

Meetings

List Meetings

GET /attio/v2/meetings?limit=50

Get Meeting

GET /attio/v2/meetings/{meeting_id}

Call Recordings

List Call Recordings for Meeting

GET /attio/v2/meetings/{meeting_id}/call_recordings?limit=50

Get Call Recording

GET /attio/v2/meetings/{meeting_id}/call_recordings/{call_recording_id}

Usage Notes

  • Object slugs are lowercase snake_case (e.g., people, companies)
  • Record IDs are UUIDs
  • For personal-name attributes, include full_name when creating records
  • Task creation requires format, deadline_at, assignees, and linked_records fields
  • Note creation requires format, content, parent_object, and parent_record_id
  • Comment creation requires format, content, author, plus one of record, entry, or thread_id
  • Meetings use cursor-based pagination
  • Rate limits: 100 read/sec, 25 write/sec
  • Pagination uses limit and offset parameters (or cursor for meetings)

Resources

File v1.0.53:references/basecamp.md

Basecamp Routing Reference

App name: basecamp Base URL proxied: 3.basecampapi.com/{account_id}

Note: The gateway automatically injects the account ID from the OAuth connection.

API Path Pattern

/basecamp/{resource}.json

All paths must end with .json.

Common Endpoints

Get Current User

GET /basecamp/my/profile.json

List People

GET /basecamp/people.json

List Projects

GET /basecamp/projects.json

Get Project

GET /basecamp/projects/{project_id}.json

Returns project with dock array containing tool IDs.

Create Project

POST /basecamp/projects.json
Content-Type: application/json

{
  "name": "Project Name",
  "description": "Description"
}

Get Todoset

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}.json

List Todolists

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}/todolists.json

List Todos

GET /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json

Create Todo

POST /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json
Content-Type: application/json

{
  "content": "Todo content",
  "due_on": "2026-02-15",
  "assignee_ids": [123]
}

Complete Todo

POST /basecamp/buckets/{project_id}/todos/{todo_id}/completion.json

Get Message Board

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}.json

List Messages

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}/messages.json

Get Schedule

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}.json

List Schedule Entries

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}/entries.json

Get Vault (Documents)

GET /basecamp/buckets/{project_id}/vaults/{vault_id}.json

List Documents

GET /basecamp/buckets/{project_id}/vaults/{vault_id}/documents.json

List Campfires

GET /basecamp/chats.json

Trash Recording

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/trashed.json

Key Concepts

  • Bucket: Project content container (bucket_id = project_id)
  • Dock: Per-project tool list with id, name, enabled
  • Recording: Any content item (todos, messages, documents)

Pagination

Uses Link header with rel="next":

Link: <url>; rel="next"
X-Total-Count: 150

Notes

  • All paths must end with .json
  • Gateway injects account ID automatically
  • Uses Basecamp 4 API (bc3-api)
  • Rate limit: ~50 requests per 10 seconds per IP
  • Check enabled: true in dock before using tools

Resources

File v1.0.53:references/beehiiv.md

beehiiv Routing Reference

App name: beehiiv Base URL proxied: api.beehiiv.com

API Path Pattern

/beehiiv/v2/{resource}

Common Endpoints

Publications

List Publications

GET /beehiiv/v2/publications

Get Publication

GET /beehiiv/v2/publications/{publication_id}

Subscriptions

List Subscriptions

GET /beehiiv/v2/publications/{publication_id}/subscriptions

Get Subscription by ID

GET /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}

Get Subscription by Email

GET /beehiiv/v2/publications/{publication_id}/subscriptions/by_email/{email}

Create Subscription

POST /beehiiv/v2/publications/{publication_id}/subscriptions
Content-Type: application/json

{
  "email": "subscriber@example.com",
  "utm_source": "api"
}

Update Subscription

PATCH /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}

Delete Subscription

DELETE /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}

Posts

List Posts

GET /beehiiv/v2/publications/{publication_id}/posts

Get Post

GET /beehiiv/v2/publications/{publication_id}/posts/{post_id}

Custom Fields

List Custom Fields

GET /beehiiv/v2/publications/{publication_id}/custom_fields

Create Custom Field

POST /beehiiv/v2/publications/{publication_id}/custom_fields

Segments

GET /beehiiv/v2/publications/{publication_id}/segments
GET /beehiiv/v2/publications/{publication_id}/segments/{segment_id}

Tiers

GET /beehiiv/v2/publications/{publication_id}/tiers
POST /beehiiv/v2/publications/{publication_id}/tiers
PATCH /beehiiv/v2/publications/{publication_id}/tiers/{tier_id}

Automations

GET /beehiiv/v2/publications/{publication_id}/automations
GET /beehiiv/v2/publications/{publication_id}/automations/{automation_id}

Pagination

Cursor-based (recommended) or page-based (deprecated):

# Cursor-based
GET /beehiiv/v2/publications/{pub_id}/subscriptions?limit=10&cursor={next_cursor}

# Page-based (max 100 pages)
GET /beehiiv/v2/publications?page=2&limit=10

Notes

  • Publication IDs start with pub_
  • Subscription IDs start with sub_
  • Timestamps are Unix timestamps
  • Cursor-based pagination is recommended
  • Page-based pagination limited to 100 pages

Resources

File v1.0.53:references/box.md

Box Routing Reference

App name: box Base URL proxied: api.box.com

API Path Pattern

/box/2.0/{resource}

Common Endpoints

Get Current User

GET /box/2.0/users/me

Get User

GET /box/2.0/users/{user_id}

Get Folder

GET /box/2.0/folders/{folder_id}

Root folder ID is 0.

List Folder Items

GET /box/2.0/folders/{folder_id}/items
GET /box/2.0/folders/{folder_id}/items?limit=100&offset=0

Create Folder

POST /box/2.0/folders
Content-Type: application/json

{
  "name": "New Folder",
  "parent": {"id": "0"}
}

Update Folder

PUT /box/2.0/folders/{folder_id}
Content-Type: application/json

{
  "name": "Updated Name",
  "description": "Description"
}

Copy Folder

POST /box/2.0/folders/{folder_id}/copy
Content-Type: application/json

{
  "name": "Copied Folder",
  "parent": {"id": "0"}
}

Delete Folder

DELETE /box/2.0/folders/{folder_id}
DELETE /box/2.0/folders/{folder_id}?recursive=true

Get File

GET /box/2.0/files/{file_id}

Download File

GET /box/2.0/files/{file_id}/content

Update File

PUT /box/2.0/files/{file_id}

Copy File

POST /box/2.0/files/{file_id}/copy

Delete File

DELETE /box/2.0/files/{file_id}

Create Shared Link

PUT /box/2.0/folders/{folder_id}
Content-Type: application/json

{
  "shared_link": {"access": "open"}
}

List Collaborations

GET /box/2.0/folders/{folder_id}/collaborations

Create Collaboration

POST /box/2.0/collaborations
Content-Type: application/json

{
  "item": {"type": "folder", "id": "123"},
  "accessible_by": {"type": "user", "login": "user@example.com"},
  "role": "editor"
}

Search

GET /box/2.0/search?query=keyword

Events

GET /box/2.0/events

Trash

GET /box/2.0/folders/trash/items
DELETE /box/2.0/files/{file_id}/trash
DELETE /box/2.0/folders/{folder_id}/trash

Collections

GET /box/2.0/collections
GET /box/2.0/collections/{collection_id}/items

Recent Items

GET /box/2.0/recent_items

Webhooks

GET /box/2.0/webhooks
POST /box/2.0/webhooks
DELETE /box/2.0/webhooks/{webhook_id}

Pagination

Offset-based pagination:

GET /box/2.0/folders/0/items?limit=100&offset=0

Response:

{
  "total_count": 250,
  "entries": [...],
  "offset": 0,
  "limit": 100
}

Notes

  • Root folder ID is 0
  • File uploads use upload.box.com (different base URL)
  • Delete operations return 204 No Content
  • Some operations require enterprise admin permissions
  • Use fields parameter to select specific fields

Resources

File v1.0.53:references/brevo.md

Brevo Routing Reference

App name: brevo Base URL proxied: api.brevo.com

API Path Pattern

/brevo/v3/{resource}

Common Endpoints

Account

GET /brevo/v3/account

Contacts

List Contacts

GET /brevo/v3/contacts?limit=50&offset=0

Get Contact

GET /brevo/v3/contacts/{identifier}

Create Contact

POST /brevo/v3/contacts
Content-Type: application/json

{
  "email": "contact@example.com",
  "attributes": {"FIRSTNAME": "John", "LASTNAME": "Doe"},
  "listIds": [2]
}

Update Contact

PUT /brevo/v3/contacts/{identifier}
Content-Type: application/json

{
  "attributes": {"FIRSTNAME": "Updated"}
}

Delete Contact

DELETE /brevo/v3/contacts/{identifier}

Lists

List All Lists

GET /brevo/v3/contacts/lists

Create List

POST /brevo/v3/contacts/lists
Content-Type: application/json

{
  "name": "New List",
  "folderId": 1
}

Add Contacts to List

POST /brevo/v3/contacts/lists/{listId}/contacts/add
Content-Type: application/json

{
  "emails": ["contact@example.com"]
}

Folders

List Folders

GET /brevo/v3/contacts/folders

Create Folder

POST /brevo/v3/contacts/folders
Content-Type: application/json

{
  "name": "New Folder"
}

Transactional Emails

Send Email

POST /brevo/v3/smtp/email
Content-Type: application/json

{
  "sender": {"name": "John", "email": "john@example.com"},
  "to": [{"email": "recipient@example.com", "name": "Jane"}],
  "subject": "Hello!",
  "htmlContent": "<html><body><h1>Hi!</h1></body></html>"
}

Get Email Statistics

GET /brevo/v3/smtp/statistics/events?limit=50

Email Templates

List Templates

GET /brevo/v3/smtp/templates

Create Template

POST /brevo/v3/smtp/templates
Content-Type: application/json

{
  "sender": {"name": "Company", "email": "noreply@company.com"},
  "templateName": "Welcome Email",
  "subject": "Welcome {{params.name}}!",
  "htmlContent": "<html><body><h1>Hello {{params.name}}!</h1></body></html>"
}

Email Campaigns

List Campaigns

GET /brevo/v3/emailCampaigns

Create Campaign

POST /brevo/v3/emailCampaigns
Content-Type: application/json

{
  "name": "Newsletter",
  "subject": "Monthly Update",
  "sender": {"name": "Company", "email": "news@company.com"},
  "htmlContent": "<html><body><h1>News</h1></body></html>",
  "recipients": {"listIds": [2]}
}

Send Campaign

POST /brevo/v3/emailCampaigns/{campaignId}/sendNow

Senders

List Senders

GET /brevo/v3/senders

Create Sender

POST /brevo/v3/senders
Content-Type: application/json

{
  "name": "Marketing",
  "email": "marketing@company.com"
}

Attributes

List Attributes

GET /brevo/v3/contacts/attributes

Pagination

Brevo uses offset-based pagination:

GET /brevo/v3/contacts?limit=50&offset=0

Parameters:

  • limit - Results per page (max varies by endpoint, typically 500)
  • offset - Starting index (0-based)

Response includes count:

{
  "contacts": [...],
  "count": 150
}

Notes

  • All endpoints require /v3/ prefix
  • Attribute names must be UPPERCASE
  • Contact identifiers: email, phone, or ID
  • Template parameters: {{params.name}} syntax
  • PUT/DELETE return 204 No Content on success
  • Rate limit: 300 calls/min (free), higher on paid plans

Resources

API & Reliability

Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.

MissingCLAWHUB

Machine interfaces

Contract & API

Contract coverage

Status

missing

Auth

None

Streaming

No

Data region

Unspecified

Protocol support

No protocol metadata captured.

Requires: none

Forbidden: none

Guardrails

Operational confidence: low

No positive guardrails captured.
Invocation examples
curl -s "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/snapshot"
curl -s "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/contract"
curl -s "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/trust"

Operational fit

Reliability & Benchmarks

Trust signals

Handshake

UNKNOWN

Confidence

unknown

Attempts 30d

unknown

Fallback rate

unknown

Runtime metrics

Observed P50

unknown

Observed P95

unknown

Rate limit

unknown

Estimated cost

unknown

Do not use if

Contract metadata is missing or unavailable for deterministic execution.
No benchmark suites or observed failure patterns are available.

Machine Appendix

Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.

MissingCLAWHUB

Contract JSON

{
  "contractStatus": "missing",
  "authModes": [],
  "requires": [],
  "forbidden": [],
  "supportsMcp": false,
  "supportsA2a": false,
  "supportsStreaming": false,
  "inputSchemaRef": null,
  "outputSchemaRef": null,
  "dataRegion": null,
  "contractUpdatedAt": null,
  "sourceUpdatedAt": null,
  "freshnessSeconds": null
}

Invocation Guide

{
  "preferredApi": {
    "snapshotUrl": "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/snapshot",
    "contractUrl": "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/contract",
    "trustUrl": "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/trust"
  },
  "curlExamples": [
    "curl -s \"https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/snapshot\"",
    "curl -s \"https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/contract\"",
    "curl -s \"https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/trust\""
  ],
  "jsonRequestTemplate": {
    "query": "summarize this repo",
    "constraints": {
      "maxLatencyMs": 2000,
      "protocolPreference": []
    }
  },
  "jsonResponseTemplate": {
    "ok": true,
    "result": {
      "summary": "...",
      "confidence": 0.9
    },
    "meta": {
      "source": "CLAWHUB",
      "generatedAt": "2026-04-17T04:20:34.423Z"
    }
  },
  "retryPolicy": {
    "maxAttempts": 3,
    "backoffMs": [
      500,
      1500,
      3500
    ],
    "retryableConditions": [
      "HTTP_429",
      "HTTP_503",
      "NETWORK_TIMEOUT"
    ]
  }
}

Trust JSON

{
  "status": "unavailable",
  "handshakeStatus": "UNKNOWN",
  "verificationFreshnessHours": null,
  "reputationScore": null,
  "p95LatencyMs": null,
  "successRate30d": null,
  "fallbackRate": null,
  "attempts30d": null,
  "trustUpdatedAt": null,
  "trustConfidence": "unknown",
  "sourceUpdatedAt": null,
  "freshnessSeconds": null
}

Capability Matrix

{
  "rows": [],
  "flattenedTokens": ""
}

Facts JSON

[
  {
    "factKey": "vendor",
    "category": "vendor",
    "label": "Vendor",
    "value": "Clawhub",
    "href": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceType": "profile",
    "confidence": "medium",
    "observedAt": "2026-04-15T00:45:39.800Z",
    "isPublic": true
  },
  {
    "factKey": "traction",
    "category": "adoption",
    "label": "Adoption signal",
    "value": "29.8K downloads",
    "href": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceType": "profile",
    "confidence": "medium",
    "observedAt": "2026-04-15T00:45:39.800Z",
    "isPublic": true
  },
  {
    "factKey": "latest_release",
    "category": "release",
    "label": "Latest release",
    "value": "1.0.54",
    "href": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceType": "release",
    "confidence": "medium",
    "observedAt": "2026-02-28T02:13:08.484Z",
    "isPublic": true
  },
  {
    "factKey": "handshake_status",
    "category": "security",
    "label": "Handshake status",
    "value": "UNKNOWN",
    "href": "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/trust",
    "sourceUrl": "https://xpersona.co/api/v1/agents/clawhub-byungkyu-api-gateway/trust",
    "sourceType": "trust",
    "confidence": "medium",
    "observedAt": null,
    "isPublic": true
  }
]

Change Events JSON

[
  {
    "eventType": "release",
    "title": "Release 1.0.54",
    "description": "- Minor update to documentation: GitHub is now highlighted in the API list in the skill description. - No changes to code or functionality. - Clarified supported services, with updated wording in the API overview.",
    "href": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceUrl": "https://clawhub.ai/byungkyu/api-gateway",
    "sourceType": "release",
    "confidence": "medium",
    "observedAt": "2026-02-28T02:13:08.484Z",
    "isPublic": true
  }
]

Sponsored

Ads related to API Gateway and adjacent AI workflows.