Fresh start - excluded large ROM JSON files
This commit is contained in:
21
skills/api-gateway/LICENSE.txt
Normal file
21
skills/api-gateway/LICENSE.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2026 Maton
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
555
skills/api-gateway/SKILL.md
Normal file
555
skills/api-gateway/SKILL.md
Normal file
@@ -0,0 +1,555 @@
|
||||
---
|
||||
name: api-gateway
|
||||
description: |
|
||||
API gateway for calling third-party APIs with managed auth. Use this skill when users want to interact with external services like Slack, HubSpot, Salesforce, Google Workspace, Stripe, and more.
|
||||
compatibility: Requires network access and valid Maton API key
|
||||
metadata:
|
||||
author: maton
|
||||
version: "1.0"
|
||||
clawdbot:
|
||||
emoji: 🧠
|
||||
requires:
|
||||
env:
|
||||
- MATON_API_KEY
|
||||
---
|
||||
|
||||
# API Gateway
|
||||
|
||||
Passthrough proxy for direct access to third-party APIs using managed auth connections. 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`, `hubspot`, `salesforce`)
|
||||
- `status` - Filter by connection status (`ACTIVE`, `PENDING`, `FAILED`)
|
||||
|
||||
**Response:**
|
||||
```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": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Create Connection
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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:**
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
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` |
|
||||
| Box | `box` | `api.box.com` |
|
||||
| Brevo | `brevo` | `api.brevo.com` |
|
||||
| Calendly | `calendly` | `api.calendly.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` |
|
||||
| Cognito Forms | `cognito-forms` | `www.cognitoforms.com` |
|
||||
| Constant Contact | `constant-contact` | `api.cc.email` |
|
||||
| Dropbox | `dropbox` | `api.dropboxapi.com` |
|
||||
| Eventbrite | `eventbrite` | `www.eventbriteapi.com` |
|
||||
| Fathom | `fathom` | `api.fathom.ai` |
|
||||
| GitHub | `github` | `api.github.com` |
|
||||
| Gumroad | `gumroad` | `api.gumroad.com` |
|
||||
| Google Ads | `google-ads` | `googleads.googleapis.com` |
|
||||
| Google Analytics Admin | `google-analytics-admin` | `analyticsadmin.googleapis.com` |
|
||||
| Google Analytics Data | `google-analytics-data` | `analyticsdata.googleapis.com` |
|
||||
| Google Calendar | `google-calendar` | `www.googleapis.com` |
|
||||
| Google 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` |
|
||||
| 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` |
|
||||
| Linear | `linear` | `api.linear.app` |
|
||||
| LinkedIn | `linkedin` | `api.linkedin.com` |
|
||||
| Mailchimp | `mailchimp` | `{dc}.api.mailchimp.com` |
|
||||
| MailerLite | `mailerlite` | `connect.mailerlite.com` |
|
||||
| ManyChat | `manychat` | `api.manychat.com` |
|
||||
| Microsoft Excel | `microsoft-excel` | `graph.microsoft.com` |
|
||||
| Microsoft To Do | `microsoft-to-do` | `graph.microsoft.com` |
|
||||
| Monday.com | `monday` | `api.monday.com` |
|
||||
| Notion | `notion` | `api.notion.com` |
|
||||
| OneDrive | `one-drive` | `graph.microsoft.com` |
|
||||
| Outlook | `outlook` | `graph.microsoft.com` |
|
||||
| Pipedrive | `pipedrive` | `api.pipedrive.com` |
|
||||
| QuickBooks | `quickbooks` | `quickbooks.api.intuit.com` |
|
||||
| Quo | `quo` | `api.openphone.com` |
|
||||
| Salesforce | `salesforce` | `{instance}.salesforce.com` |
|
||||
| SignNow | `signnow` | `api.signnow.com` |
|
||||
| Slack | `slack` | `slack.com` |
|
||||
| Square | `squareup` | `connect.squareup.com` |
|
||||
| Stripe | `stripe` | `api.stripe.com` |
|
||||
| Systeme.io | `systeme` | `api.systeme.io` |
|
||||
| Tally | `tally` | `api.tally.so` |
|
||||
| Telegram | `telegram` | `api.telegram.org` |
|
||||
| TickTick | `ticktick` | `api.ticktick.com` |
|
||||
| Todoist | `todoist` | `api.todoist.com` |
|
||||
| Trello | `trello` | `api.trello.com` |
|
||||
| Twilio | `twilio` | `api.twilio.com` |
|
||||
| Typeform | `typeform` | `api.typeform.com` |
|
||||
| Vimeo | `vimeo` | `api.vimeo.com` |
|
||||
| WhatsApp Business | `whatsapp-business` | `graph.facebook.com` |
|
||||
| WooCommerce | `woocommerce` | `{store-url}/wp-json/wc/v3` |
|
||||
| WordPress.com | `wordpress` | `public-api.wordpress.com` |
|
||||
| Xero | `xero` | `api.xero.com` |
|
||||
| YouTube | `youtube` | `www.googleapis.com` |
|
||||
| Zoho Bigin | `zoho-bigin` | `www.zohoapis.com` |
|
||||
| Zoho Books | `zoho-books` | `www.zohoapis.com` |
|
||||
| Zoho Calendar | `zoho-calendar` | `calendar.zoho.com` |
|
||||
| Zoho CRM | `zoho-crm` | `www.zohoapis.com` |
|
||||
| Zoho Inventory | `zoho-inventory` | `www.zohoapis.com` |
|
||||
| Zoho Mail | `zoho-mail` | `mail.zoho.com` |
|
||||
| Zoho People | `zoho-people` | `people.zoho.com` |
|
||||
| Zoho Recruit | `zoho-recruit` | `recruit.zoho.com` |
|
||||
|
||||
See [references/](references/) for detailed routing guides per provider:
|
||||
- [ActiveCampaign](references/active-campaign.md) - Contacts, deals, tags, lists, automations, campaigns
|
||||
- [Acuity Scheduling](references/acuity-scheduling.md) - Appointments, calendars, clients, availability
|
||||
- [Airtable](references/airtable.md) - Records, bases, tables
|
||||
- [Apollo](references/apollo.md) - People search, enrichment, contacts
|
||||
- [Asana](references/asana.md) - Tasks, projects, workspaces, webhooks
|
||||
- [Attio](references/attio.md) - People, companies, records, tasks
|
||||
- [Basecamp](references/basecamp.md) - Projects, to-dos, messages, schedules, documents
|
||||
- [Box](references/box.md) - Files, folders, collaborations, shared links
|
||||
- [Brevo](references/brevo.md) - Contacts, email campaigns, transactional emails, templates
|
||||
- [Calendly](references/calendly.md) - Event types, scheduled events, availability, webhooks
|
||||
- [CallRail](references/callrail.md) - Calls, trackers, companies, tags, analytics
|
||||
- [Chargebee](references/chargebee.md) - Subscriptions, customers, invoices
|
||||
- [ClickFunnels](references/clickfunnels.md) - Contacts, products, orders, courses, webhooks
|
||||
- [ClickSend](references/clicksend.md) - SMS, MMS, voice messages, contacts, lists
|
||||
- [ClickUp](references/clickup.md) - Tasks, lists, folders, spaces, webhooks
|
||||
- [Cognito Forms](references/cognito-forms.md) - Forms, entries, documents, files
|
||||
- [Constant Contact](references/constant-contact.md) - Contacts, email campaigns, lists, segments
|
||||
- [Dropbox](references/dropbox.md) - Files, folders, search, metadata, revisions, tags
|
||||
- [Eventbrite](references/eventbrite.md) - Events, venues, tickets, orders, attendees
|
||||
- [Fathom](references/fathom.md) - Meeting recordings, transcripts, summaries, webhooks
|
||||
- [GitHub](references/github.md) - Repositories, issues, pull requests, commits
|
||||
- [Gumroad](references/gumroad.md) - Products, sales, subscribers, licenses, webhooks
|
||||
- [Google Ads](references/google-ads.md) - Campaigns, ad groups, GAQL queries
|
||||
- [Google Analytics Admin](references/google-analytics-admin.md) - Reports, dimensions, metrics
|
||||
- [Google Analytics Data](references/google-analytics-data.md) - Reports, dimensions, metrics
|
||||
- [Google Calendar](references/google-calendar.md) - Events, calendars, free/busy
|
||||
- [Google Contacts](references/google-contacts.md) - Contacts, contact groups, people search
|
||||
- [Google Docs](references/google-docs.md) - Document creation, batch updates
|
||||
- [Google Drive](references/google-drive.md) - Files, folders, permissions
|
||||
- [Google Forms](references/google-forms.md) - Forms, questions, responses
|
||||
- [Gmail](references/google-mail.md) - Messages, threads, labels
|
||||
- [Google Meet](references/google-meet.md) - Spaces, conference records, participants
|
||||
- [Google Merchant](references/google-merchant.md) - Products, inventories, promotions, reports
|
||||
- [Google Play](references/google-play.md) - In-app products, subscriptions, reviews
|
||||
- [Google Search Console](references/google-search-console.md) - Search analytics, sitemaps
|
||||
- [Google Sheets](references/google-sheets.md) - Values, ranges, formatting
|
||||
- [Google Slides](references/google-slides.md) - Presentations, slides, formatting
|
||||
- [Google Tasks](references/google-tasks.md) - Task lists, tasks, subtasks
|
||||
- [Google Workspace Admin](references/google-workspace-admin.md) - Users, groups, org units, domains, roles
|
||||
- [HubSpot](references/hubspot.md) - Contacts, companies, deals
|
||||
- [Jira](references/jira.md) - Issues, projects, JQL queries
|
||||
- [Jobber](references/jobber.md) - Clients, jobs, invoices, quotes (GraphQL)
|
||||
- [JotForm](references/jotform.md) - Forms, submissions, webhooks
|
||||
- [Keap](references/keap.md) - Contacts, companies, tags, tasks, opportunities, campaigns
|
||||
- [Kit](references/kit.md) - Subscribers, tags, forms, sequences, broadcasts
|
||||
- [Klaviyo](references/klaviyo.md) - Profiles, lists, campaigns, flows, events
|
||||
- [Linear](references/linear.md) - Issues, projects, teams, cycles (GraphQL)
|
||||
- [LinkedIn](references/linkedin.md) - Profile, posts, shares, media uploads
|
||||
- [Mailchimp](references/mailchimp.md) - Audiences, campaigns, templates, automations
|
||||
- [MailerLite](references/mailerlite.md) - Subscribers, groups, campaigns, automations, forms
|
||||
- [ManyChat](references/manychat.md) - Subscribers, tags, flows, messaging
|
||||
- [Microsoft Excel](references/microsoft-excel.md) - Workbooks, worksheets, ranges, tables, charts
|
||||
- [Microsoft To Do](references/microsoft-to-do.md) - Task lists, tasks, checklist items, linked resources
|
||||
- [Monday.com](references/monday.md) - Boards, items, columns, groups (GraphQL)
|
||||
- [Notion](references/notion.md) - Pages, databases, blocks
|
||||
- [OneDrive](references/one-drive.md) - Files, folders, drives, sharing
|
||||
- [Outlook](references/outlook.md) - Mail, calendar, contacts
|
||||
- [Pipedrive](references/pipedrive.md) - Deals, persons, organizations, activities
|
||||
- [QuickBooks](references/quickbooks.md) - Customers, invoices, reports
|
||||
- [Quo](references/quo.md) - Calls, messages, contacts, conversations, webhooks
|
||||
- [Salesforce](references/salesforce.md) - SOQL, sObjects, CRUD
|
||||
- [SignNow](references/signnow.md) - Documents, templates, invites, e-signatures
|
||||
- [Slack](references/slack.md) - Messages, channels, users
|
||||
- [Square](references/squareup.md) - Payments, customers, orders, catalog, inventory, invoices
|
||||
- [Stripe](references/stripe.md) - Customers, subscriptions, payments
|
||||
- [Systeme.io](references/systeme.md) - Contacts, tags, courses, communities, webhooks
|
||||
- [Tally](references/tally.md) - Forms, submissions, workspaces, webhooks
|
||||
- [Telegram](references/telegram.md) - Messages, chats, bots, updates, polls
|
||||
- [TickTick](references/ticktick.md) - Tasks, projects, task lists
|
||||
- [Todoist](references/todoist.md) - Tasks, projects, sections, labels, comments
|
||||
- [Trello](references/trello.md) - Boards, lists, cards, checklists
|
||||
- [Twilio](references/twilio.md) - SMS, voice calls, phone numbers, messaging
|
||||
- [Typeform](references/typeform.md) - Forms, responses, insights
|
||||
- [Vimeo](references/vimeo.md) - Videos, folders, albums, comments, likes
|
||||
- [WhatsApp Business](references/whatsapp-business.md) - Messages, templates, media
|
||||
- [WooCommerce](references/woocommerce.md) - Products, orders, customers, coupons
|
||||
- [WordPress.com](references/wordpress.md) - Posts, pages, sites, users, settings
|
||||
- [Xero](references/xero.md) - Contacts, invoices, reports
|
||||
- [YouTube](references/youtube.md) - Videos, playlists, channels, subscriptions
|
||||
- [Zoho Bigin](references/zoho-bigin.md) - Contacts, companies, pipelines, products
|
||||
- [Zoho Books](references/zoho-books.md) - Invoices, contacts, bills, expenses
|
||||
- [Zoho Calendar](references/zoho-calendar.md) - Calendars, events, attendees, reminders
|
||||
- [Zoho CRM](references/zoho-crm.md) - Leads, contacts, accounts, deals, search
|
||||
- [Zoho Inventory](references/zoho-inventory.md) - Items, sales orders, invoices, purchase orders, bills
|
||||
- [Zoho Mail](references/zoho-mail.md) - Messages, folders, labels, attachments
|
||||
- [Zoho People](references/zoho-people.md) - Employees, departments, designations, attendance, leave
|
||||
- [Zoho Recruit](references/zoho-recruit.md) - Candidates, job openings, interviews, applications
|
||||
|
||||
## Examples
|
||||
|
||||
### Slack - Post Message (Native API)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```javascript
|
||||
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
|
||||
|
||||
```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:
|
||||
|
||||
```bash
|
||||
echo $MATON_API_KEY
|
||||
```
|
||||
|
||||
2. Verify the API key is valid by listing connections:
|
||||
|
||||
```bash
|
||||
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`
|
||||
|
||||
2. Ensure you have an active connection for the app. List your connections to verify:
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
- [Github](https://github.com/maton-ai/api-gateway-skill)
|
||||
- [API Reference](https://www.maton.ai/docs/api-reference)
|
||||
- [Maton Community](https://discord.com/invite/dBfFAcefs2)
|
||||
- [Maton Support](mailto:support@maton.ai)
|
||||
6
skills/api-gateway/_meta.json
Normal file
6
skills/api-gateway/_meta.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"ownerId": "kn75240wq8bnv2qm2xgry748jd80b9r0",
|
||||
"slug": "api-gateway",
|
||||
"version": "1.0.21",
|
||||
"publishedAt": 1770755516421
|
||||
}
|
||||
220
skills/api-gateway/references/active-campaign.md
Normal file
220
skills/api-gateway/references/active-campaign.md
Normal file
@@ -0,0 +1,220 @@
|
||||
# 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
|
||||
|
||||
- [ActiveCampaign API Overview](https://developers.activecampaign.com/reference/overview)
|
||||
- [Developer Portal](https://developers.activecampaign.com/)
|
||||
- [Contacts API](https://developers.activecampaign.com/reference/list-all-contacts)
|
||||
154
skills/api-gateway/references/acuity-scheduling.md
Normal file
154
skills/api-gateway/references/acuity-scheduling.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# 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/reference/get-availability-dates)
|
||||
- [OAuth2 Documentation](https://developers.acuityscheduling.com/docs/oauth2)
|
||||
149
skills/api-gateway/references/airtable.md
Normal file
149
skills/api-gateway/references/airtable.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# 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](https://support.airtable.com/docs/formula-field-reference)
|
||||
213
skills/api-gateway/references/apollo.md
Normal file
213
skills/api-gateway/references/apollo.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# Apollo Routing Reference
|
||||
|
||||
**App name:** `apollo`
|
||||
**Base URL proxied:** `api.apollo.io`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/apollo/v1/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### People
|
||||
|
||||
#### Search People
|
||||
```bash
|
||||
POST /apollo/v1/mixed_people/api_search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"q_organization_name": "Google",
|
||||
"page": 1,
|
||||
"per_page": 25
|
||||
}
|
||||
```
|
||||
|
||||
#### Get Person
|
||||
```bash
|
||||
GET /apollo/v1/people/{personId}
|
||||
```
|
||||
|
||||
#### Enrich Person
|
||||
```bash
|
||||
POST /apollo/v1/people/match
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email": "john@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
Or by LinkedIn:
|
||||
```bash
|
||||
POST /apollo/v1/people/match
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"linkedin_url": "https://linkedin.com/in/johndoe"
|
||||
}
|
||||
```
|
||||
|
||||
### Organizations
|
||||
|
||||
#### Search Organizations
|
||||
```bash
|
||||
POST /apollo/v1/organizations/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"q_organization_name": "Google",
|
||||
"page": 1,
|
||||
"per_page": 25
|
||||
}
|
||||
```
|
||||
|
||||
#### Enrich Organization
|
||||
```bash
|
||||
POST /apollo/v1/organizations/enrich
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"domain": "google.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Contacts
|
||||
|
||||
#### Search Contacts
|
||||
```bash
|
||||
POST /apollo/v1/contacts/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"page": 1,
|
||||
"per_page": 25
|
||||
}
|
||||
```
|
||||
|
||||
#### Create Contact
|
||||
```bash
|
||||
POST /apollo/v1/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"first_name": "John",
|
||||
"last_name": "Doe",
|
||||
"email": "john@example.com",
|
||||
"organization_name": "Acme Corp"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Contact
|
||||
```bash
|
||||
PUT /apollo/v1/contacts/{contactId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"first_name": "Jane"
|
||||
}
|
||||
```
|
||||
|
||||
### Accounts
|
||||
|
||||
#### Search Accounts
|
||||
```bash
|
||||
POST /apollo/v1/accounts/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"page": 1,
|
||||
"per_page": 25
|
||||
}
|
||||
```
|
||||
|
||||
#### Create Account
|
||||
```bash
|
||||
POST /apollo/v1/accounts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Acme Corp",
|
||||
"domain": "acme.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Sequences
|
||||
|
||||
#### Search Sequences
|
||||
```bash
|
||||
POST /apollo/v1/emailer_campaigns/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"page": 1,
|
||||
"per_page": 25
|
||||
}
|
||||
```
|
||||
|
||||
#### Add Contact to Sequence
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
POST /apollo/v1/emailer_messages/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contact_id": "{contactId}"
|
||||
}
|
||||
```
|
||||
|
||||
### Labels
|
||||
|
||||
#### List Labels
|
||||
```bash
|
||||
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
|
||||
|
||||
- [API Overview](https://docs.apollo.io/reference/introduction)
|
||||
- [Search People](https://docs.apollo.io/reference/people-api-search.md)
|
||||
- [Enrich Person](https://docs.apollo.io/reference/people-enrichment.md)
|
||||
- [Search Organizations](https://docs.apollo.io/reference/organization-search.md)
|
||||
- [Enrich Organization](https://docs.apollo.io/reference/organization-enrichment.md)
|
||||
- [Search Contacts](https://docs.apollo.io/reference/search-for-contacts.md)
|
||||
- [Create Contact](https://docs.apollo.io/reference/create-a-contact.md)
|
||||
- [Update Contact](https://docs.apollo.io/reference/update-a-contact.md)
|
||||
- [Search Accounts](https://docs.apollo.io/reference/search-for-accounts.md)
|
||||
- [Create Account](https://docs.apollo.io/reference/create-an-account.md)
|
||||
- [Search Sequences](https://docs.apollo.io/reference/search-for-sequences.md)
|
||||
- [Add Contacts to Sequence](https://docs.apollo.io/reference/add-contacts-to-sequence.md)
|
||||
- [Search Email Messages](https://docs.apollo.io/reference/search-for-outreach-emails.md)
|
||||
- [List Labels](https://docs.apollo.io/reference/get-a-list-of-all-lists.md)
|
||||
- [LLM Reference](https://docs.apollo.io/llms.txt)
|
||||
154
skills/api-gateway/references/asana.md
Normal file
154
skills/api-gateway/references/asana.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# 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
|
||||
```bash
|
||||
GET /asana/api/1.0/users/me
|
||||
```
|
||||
|
||||
### List Workspaces
|
||||
```bash
|
||||
GET /asana/api/1.0/workspaces
|
||||
```
|
||||
|
||||
### List Tasks
|
||||
```bash
|
||||
GET /asana/api/1.0/tasks?project=PROJECT_GID&opt_fields=name,completed,due_on
|
||||
```
|
||||
|
||||
### Get a Task
|
||||
```bash
|
||||
GET /asana/api/1.0/tasks/{task_gid}
|
||||
```
|
||||
|
||||
### Create a Task
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
PUT /asana/api/1.0/tasks/{task_gid}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"completed": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete a Task
|
||||
```bash
|
||||
DELETE /asana/api/1.0/tasks/{task_gid}
|
||||
```
|
||||
|
||||
### Get Subtasks
|
||||
```bash
|
||||
GET /asana/api/1.0/tasks/{task_gid}/subtasks
|
||||
```
|
||||
|
||||
### Create Subtask
|
||||
```bash
|
||||
POST /asana/api/1.0/tasks/{task_gid}/subtasks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"name": "Subtask name"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Projects
|
||||
```bash
|
||||
GET /asana/api/1.0/projects?workspace=WORKSPACE_GID&opt_fields=name,owner,due_date
|
||||
```
|
||||
|
||||
### Get a Project
|
||||
```bash
|
||||
GET /asana/api/1.0/projects/{project_gid}
|
||||
```
|
||||
|
||||
### Create a Project
|
||||
```bash
|
||||
POST /asana/api/1.0/projects
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"name": "New Project",
|
||||
"workspace": "WORKSPACE_GID"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Users in Workspace
|
||||
```bash
|
||||
GET /asana/api/1.0/workspaces/{workspace_gid}/users?opt_fields=name,email
|
||||
```
|
||||
|
||||
### Create Webhook
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
|
||||
- [Asana API Overview](https://developers.asana.com)
|
||||
- [API Reference](https://developers.asana.com/reference)
|
||||
- [Tasks](https://developers.asana.com/reference/tasks)
|
||||
- [Projects](https://developers.asana.com/reference/projects)
|
||||
- [Workspaces](https://developers.asana.com/reference/workspaces)
|
||||
- [Webhooks](https://developers.asana.com/reference/webhooks)
|
||||
- [LLM Reference](https://developers.asana.com/llms.txt)
|
||||
122
skills/api-gateway/references/attio.md
Normal file
122
skills/api-gateway/references/attio.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Attio Routing Reference
|
||||
|
||||
**App name:** `attio`
|
||||
**Base URL proxied:** `api.attio.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/attio/v2/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Objects
|
||||
```bash
|
||||
GET /attio/v2/objects
|
||||
```
|
||||
|
||||
### Get Object
|
||||
```bash
|
||||
GET /attio/v2/objects/{object}
|
||||
```
|
||||
|
||||
### List Attributes
|
||||
```bash
|
||||
GET /attio/v2/objects/{object}/attributes
|
||||
```
|
||||
|
||||
### Query Records
|
||||
```bash
|
||||
POST /attio/v2/objects/{object}/records/query
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"limit": 50,
|
||||
"offset": 0
|
||||
}
|
||||
```
|
||||
|
||||
### Get Record
|
||||
```bash
|
||||
GET /attio/v2/objects/{object}/records/{record_id}
|
||||
```
|
||||
|
||||
### Create Record
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
PATCH /attio/v2/objects/{object}/records/{record_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"values": {
|
||||
"job_title": "Engineer"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Record
|
||||
```bash
|
||||
DELETE /attio/v2/objects/{object}/records/{record_id}
|
||||
```
|
||||
|
||||
### List Tasks
|
||||
```bash
|
||||
GET /attio/v2/tasks?limit=50
|
||||
```
|
||||
|
||||
### Create Task
|
||||
```bash
|
||||
POST /attio/v2/tasks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"content": "Task description",
|
||||
"format": "plaintext",
|
||||
"assignees": [],
|
||||
"linked_records": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Workspace Members
|
||||
```bash
|
||||
GET /attio/v2/workspace_members
|
||||
```
|
||||
|
||||
### Identify Self
|
||||
```bash
|
||||
GET /attio/v2/self
|
||||
```
|
||||
|
||||
## 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` and `assignees` fields
|
||||
- Rate limits: 100 read/sec, 25 write/sec
|
||||
- Pagination uses `limit` and `offset` parameters
|
||||
|
||||
## Resources
|
||||
|
||||
- [Attio API Overview](https://docs.attio.com/rest-api/overview)
|
||||
- [Attio API Reference](https://docs.attio.com/rest-api/endpoint-reference)
|
||||
- [Records API](https://docs.attio.com/rest-api/endpoint-reference/records)
|
||||
148
skills/api-gateway/references/basecamp.md
Normal file
148
skills/api-gateway/references/basecamp.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# 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
|
||||
```bash
|
||||
GET /basecamp/my/profile.json
|
||||
```
|
||||
|
||||
### List People
|
||||
```bash
|
||||
GET /basecamp/people.json
|
||||
```
|
||||
|
||||
### List Projects
|
||||
```bash
|
||||
GET /basecamp/projects.json
|
||||
```
|
||||
|
||||
### Get Project
|
||||
```bash
|
||||
GET /basecamp/projects/{project_id}.json
|
||||
```
|
||||
|
||||
Returns project with `dock` array containing tool IDs.
|
||||
|
||||
### Create Project
|
||||
```bash
|
||||
POST /basecamp/projects.json
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Project Name",
|
||||
"description": "Description"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Todoset
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/todosets/{todoset_id}.json
|
||||
```
|
||||
|
||||
### List Todolists
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/todosets/{todoset_id}/todolists.json
|
||||
```
|
||||
|
||||
### List Todos
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json
|
||||
```
|
||||
|
||||
### Create Todo
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
POST /basecamp/buckets/{project_id}/todos/{todo_id}/completion.json
|
||||
```
|
||||
|
||||
### Get Message Board
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}.json
|
||||
```
|
||||
|
||||
### List Messages
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}/messages.json
|
||||
```
|
||||
|
||||
### Get Schedule
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/schedules/{schedule_id}.json
|
||||
```
|
||||
|
||||
### List Schedule Entries
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/schedules/{schedule_id}/entries.json
|
||||
```
|
||||
|
||||
### Get Vault (Documents)
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/vaults/{vault_id}.json
|
||||
```
|
||||
|
||||
### List Documents
|
||||
```bash
|
||||
GET /basecamp/buckets/{project_id}/vaults/{vault_id}/documents.json
|
||||
```
|
||||
|
||||
### List Campfires
|
||||
```bash
|
||||
GET /basecamp/chats.json
|
||||
```
|
||||
|
||||
### Trash Recording
|
||||
```bash
|
||||
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
|
||||
|
||||
- [Basecamp 4 API Documentation](https://github.com/basecamp/bc3-api)
|
||||
- [API Endpoints](https://github.com/basecamp/bc3-api#endpoints)
|
||||
191
skills/api-gateway/references/box.md
Normal file
191
skills/api-gateway/references/box.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# Box Routing Reference
|
||||
|
||||
**App name:** `box`
|
||||
**Base URL proxied:** `api.box.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/box/2.0/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /box/2.0/users/me
|
||||
```
|
||||
|
||||
### Get User
|
||||
```bash
|
||||
GET /box/2.0/users/{user_id}
|
||||
```
|
||||
|
||||
### Get Folder
|
||||
```bash
|
||||
GET /box/2.0/folders/{folder_id}
|
||||
```
|
||||
|
||||
Root folder ID is `0`.
|
||||
|
||||
### List Folder Items
|
||||
```bash
|
||||
GET /box/2.0/folders/{folder_id}/items
|
||||
GET /box/2.0/folders/{folder_id}/items?limit=100&offset=0
|
||||
```
|
||||
|
||||
### Create Folder
|
||||
```bash
|
||||
POST /box/2.0/folders
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Folder",
|
||||
"parent": {"id": "0"}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Folder
|
||||
```bash
|
||||
PUT /box/2.0/folders/{folder_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Updated Name",
|
||||
"description": "Description"
|
||||
}
|
||||
```
|
||||
|
||||
### Copy Folder
|
||||
```bash
|
||||
POST /box/2.0/folders/{folder_id}/copy
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Copied Folder",
|
||||
"parent": {"id": "0"}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Folder
|
||||
```bash
|
||||
DELETE /box/2.0/folders/{folder_id}
|
||||
DELETE /box/2.0/folders/{folder_id}?recursive=true
|
||||
```
|
||||
|
||||
### Get File
|
||||
```bash
|
||||
GET /box/2.0/files/{file_id}
|
||||
```
|
||||
|
||||
### Download File
|
||||
```bash
|
||||
GET /box/2.0/files/{file_id}/content
|
||||
```
|
||||
|
||||
### Update File
|
||||
```bash
|
||||
PUT /box/2.0/files/{file_id}
|
||||
```
|
||||
|
||||
### Copy File
|
||||
```bash
|
||||
POST /box/2.0/files/{file_id}/copy
|
||||
```
|
||||
|
||||
### Delete File
|
||||
```bash
|
||||
DELETE /box/2.0/files/{file_id}
|
||||
```
|
||||
|
||||
### Create Shared Link
|
||||
```bash
|
||||
PUT /box/2.0/folders/{folder_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"shared_link": {"access": "open"}
|
||||
}
|
||||
```
|
||||
|
||||
### List Collaborations
|
||||
```bash
|
||||
GET /box/2.0/folders/{folder_id}/collaborations
|
||||
```
|
||||
|
||||
### Create Collaboration
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
GET /box/2.0/search?query=keyword
|
||||
```
|
||||
|
||||
### Events
|
||||
```bash
|
||||
GET /box/2.0/events
|
||||
```
|
||||
|
||||
### Trash
|
||||
```bash
|
||||
GET /box/2.0/folders/trash/items
|
||||
DELETE /box/2.0/files/{file_id}/trash
|
||||
DELETE /box/2.0/folders/{folder_id}/trash
|
||||
```
|
||||
|
||||
### Collections
|
||||
```bash
|
||||
GET /box/2.0/collections
|
||||
GET /box/2.0/collections/{collection_id}/items
|
||||
```
|
||||
|
||||
### Recent Items
|
||||
```bash
|
||||
GET /box/2.0/recent_items
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
```bash
|
||||
GET /box/2.0/webhooks
|
||||
POST /box/2.0/webhooks
|
||||
DELETE /box/2.0/webhooks/{webhook_id}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Offset-based pagination:
|
||||
```bash
|
||||
GET /box/2.0/folders/0/items?limit=100&offset=0
|
||||
```
|
||||
|
||||
Response:
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
- [Box API Reference](https://developer.box.com/reference)
|
||||
- [Box Developer Documentation](https://developer.box.com/guides)
|
||||
229
skills/api-gateway/references/brevo.md
Normal file
229
skills/api-gateway/references/brevo.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# Brevo Routing Reference
|
||||
|
||||
**App name:** `brevo`
|
||||
**Base URL proxied:** `api.brevo.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/brevo/v3/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Account
|
||||
|
||||
```bash
|
||||
GET /brevo/v3/account
|
||||
```
|
||||
|
||||
### Contacts
|
||||
|
||||
#### List Contacts
|
||||
```bash
|
||||
GET /brevo/v3/contacts?limit=50&offset=0
|
||||
```
|
||||
|
||||
#### Get Contact
|
||||
```bash
|
||||
GET /brevo/v3/contacts/{identifier}
|
||||
```
|
||||
|
||||
#### Create Contact
|
||||
```bash
|
||||
POST /brevo/v3/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email": "contact@example.com",
|
||||
"attributes": {"FIRSTNAME": "John", "LASTNAME": "Doe"},
|
||||
"listIds": [2]
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Contact
|
||||
```bash
|
||||
PUT /brevo/v3/contacts/{identifier}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"attributes": {"FIRSTNAME": "Updated"}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Contact
|
||||
```bash
|
||||
DELETE /brevo/v3/contacts/{identifier}
|
||||
```
|
||||
|
||||
### Lists
|
||||
|
||||
#### List All Lists
|
||||
```bash
|
||||
GET /brevo/v3/contacts/lists
|
||||
```
|
||||
|
||||
#### Create List
|
||||
```bash
|
||||
POST /brevo/v3/contacts/lists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New List",
|
||||
"folderId": 1
|
||||
}
|
||||
```
|
||||
|
||||
#### Add Contacts to List
|
||||
```bash
|
||||
POST /brevo/v3/contacts/lists/{listId}/contacts/add
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"emails": ["contact@example.com"]
|
||||
}
|
||||
```
|
||||
|
||||
### Folders
|
||||
|
||||
#### List Folders
|
||||
```bash
|
||||
GET /brevo/v3/contacts/folders
|
||||
```
|
||||
|
||||
#### Create Folder
|
||||
```bash
|
||||
POST /brevo/v3/contacts/folders
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Folder"
|
||||
}
|
||||
```
|
||||
|
||||
### Transactional Emails
|
||||
|
||||
#### Send Email
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
GET /brevo/v3/smtp/statistics/events?limit=50
|
||||
```
|
||||
|
||||
### Email Templates
|
||||
|
||||
#### List Templates
|
||||
```bash
|
||||
GET /brevo/v3/smtp/templates
|
||||
```
|
||||
|
||||
#### Create Template
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
GET /brevo/v3/emailCampaigns
|
||||
```
|
||||
|
||||
#### Create Campaign
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
POST /brevo/v3/emailCampaigns/{campaignId}/sendNow
|
||||
```
|
||||
|
||||
### Senders
|
||||
|
||||
#### List Senders
|
||||
```bash
|
||||
GET /brevo/v3/senders
|
||||
```
|
||||
|
||||
#### Create Sender
|
||||
```bash
|
||||
POST /brevo/v3/senders
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Marketing",
|
||||
"email": "marketing@company.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Attributes
|
||||
|
||||
#### List Attributes
|
||||
```bash
|
||||
GET /brevo/v3/contacts/attributes
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Brevo uses offset-based pagination:
|
||||
|
||||
```bash
|
||||
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:
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
- [Brevo API Overview](https://developers.brevo.com/)
|
||||
- [API Key Concepts](https://developers.brevo.com/docs/how-it-works)
|
||||
- [Manage Contacts](https://developers.brevo.com/docs/synchronise-contact-lists)
|
||||
- [Send Transactional Email](https://developers.brevo.com/docs/send-a-transactional-email)
|
||||
108
skills/api-gateway/references/calendly.md
Normal file
108
skills/api-gateway/references/calendly.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Calendly Routing Reference
|
||||
|
||||
**App name:** `calendly`
|
||||
**Base URL proxied:** `api.calendly.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/calendly/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /calendly/users/me
|
||||
```
|
||||
|
||||
### List Event Types
|
||||
```bash
|
||||
GET /calendly/event_types?user=USER_URI&active=true
|
||||
```
|
||||
|
||||
### Get an Event Type
|
||||
```bash
|
||||
GET /calendly/event_types/{uuid}
|
||||
```
|
||||
|
||||
### List Scheduled Events
|
||||
```bash
|
||||
GET /calendly/scheduled_events?user=USER_URI&status=active&min_start_time=2025-03-01T00:00:00Z
|
||||
```
|
||||
|
||||
### Get a Scheduled Event
|
||||
```bash
|
||||
GET /calendly/scheduled_events/{uuid}
|
||||
```
|
||||
|
||||
### Cancel a Scheduled Event
|
||||
```bash
|
||||
POST /calendly/scheduled_events/{uuid}/cancellation
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"reason": "Meeting rescheduled"
|
||||
}
|
||||
```
|
||||
|
||||
### List Event Invitees
|
||||
```bash
|
||||
GET /calendly/scheduled_events/{event_uuid}/invitees
|
||||
```
|
||||
|
||||
### Get Available Times
|
||||
```bash
|
||||
GET /calendly/event_type_available_times?event_type=EVENT_TYPE_URI&start_time=2025-03-15T00:00:00Z&end_time=2025-03-22T00:00:00Z
|
||||
```
|
||||
|
||||
### Get User Busy Times
|
||||
```bash
|
||||
GET /calendly/user_busy_times?user=USER_URI&start_time=2025-03-15T00:00:00Z&end_time=2025-03-22T00:00:00Z
|
||||
```
|
||||
|
||||
### List Organization Memberships
|
||||
```bash
|
||||
GET /calendly/organization_memberships?organization=ORGANIZATION_URI
|
||||
```
|
||||
|
||||
### List Webhook Subscriptions
|
||||
```bash
|
||||
GET /calendly/webhook_subscriptions?organization=ORGANIZATION_URI&scope=organization
|
||||
```
|
||||
|
||||
### Create Webhook Subscription
|
||||
```bash
|
||||
POST /calendly/webhook_subscriptions
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"url": "https://example.com/webhook",
|
||||
"events": ["invitee.created", "invitee.canceled"],
|
||||
"organization": "ORGANIZATION_URI",
|
||||
"scope": "organization"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Webhook Subscription
|
||||
```bash
|
||||
DELETE /calendly/webhook_subscriptions/{uuid}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Resource identifiers are full URIs (e.g., `https://api.calendly.com/users/AAAA`)
|
||||
- Timestamps are in ISO 8601 format
|
||||
- Availability endpoints have a 7-day maximum range per request
|
||||
- Webhooks require a paid Calendly plan (Standard, Teams, or Enterprise)
|
||||
- Available webhook events: `invitee.created`, `invitee.canceled`, `routing_form_submission.created`
|
||||
- Use `page_token` for pagination
|
||||
|
||||
## Resources
|
||||
|
||||
- [Calendly Developer Portal](https://developer.calendly.com/)
|
||||
- [API Reference](https://developer.calendly.com/api-docs)
|
||||
- [Event Types](https://developer.calendly.com/api-docs/e2f95ebd44914-list-user-s-event-types)
|
||||
- [Scheduled Events](https://developer.calendly.com/api-docs/d61a40b4ea90e-list-events)
|
||||
- [Availability](https://developer.calendly.com/api-docs/4241cf0f7f0d4-get-event-type-available-times)
|
||||
- [Webhooks](https://developer.calendly.com/api-docs/c1ddc06ce1f1a-create-webhook-subscription)
|
||||
178
skills/api-gateway/references/callrail.md
Normal file
178
skills/api-gateway/references/callrail.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# CallRail Routing Reference
|
||||
|
||||
**App name:** `callrail`
|
||||
**Base URL proxied:** `api.callrail.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/callrail/v3/a/{account_id}/{resource}.json
|
||||
```
|
||||
|
||||
**Important:** All CallRail API endpoints end with `.json`. Account IDs start with `ACC`.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Accounts
|
||||
|
||||
#### List Accounts
|
||||
```bash
|
||||
GET /callrail/v3/a.json
|
||||
```
|
||||
|
||||
#### Get Account
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}.json
|
||||
```
|
||||
|
||||
### Companies
|
||||
|
||||
#### List Companies
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/companies.json
|
||||
```
|
||||
|
||||
#### Get Company
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/companies/{company_id}.json
|
||||
```
|
||||
|
||||
### Calls
|
||||
|
||||
#### List Calls
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/calls.json
|
||||
```
|
||||
|
||||
Query parameters: `page`, `per_page`, `date_range`, `start_date`, `end_date`, `company_id`, `tracker_id`, `search`, `fields`, `sort`, `order`
|
||||
|
||||
#### Get Call
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/calls/{call_id}.json
|
||||
```
|
||||
|
||||
#### Update Call
|
||||
```bash
|
||||
PUT /callrail/v3/a/{account_id}/calls/{call_id}.json
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"customer_name": "John Smith",
|
||||
"note": "Follow up scheduled",
|
||||
"lead_status": "good_lead"
|
||||
}
|
||||
```
|
||||
|
||||
#### Call Summary
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/calls/summary.json
|
||||
```
|
||||
|
||||
#### Call Timeseries
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/calls/timeseries.json
|
||||
```
|
||||
|
||||
### Trackers
|
||||
|
||||
#### List Trackers
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/trackers.json
|
||||
```
|
||||
|
||||
#### Get Tracker
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/trackers/{tracker_id}.json
|
||||
```
|
||||
|
||||
### Tags
|
||||
|
||||
#### List Tags
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/tags.json
|
||||
```
|
||||
|
||||
#### Create Tag
|
||||
```bash
|
||||
POST /callrail/v3/a/{account_id}/tags.json
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Tag",
|
||||
"tag_level": "account",
|
||||
"color": "blue1"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Tag
|
||||
```bash
|
||||
PUT /callrail/v3/a/{account_id}/tags/{tag_id}.json
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Updated Name",
|
||||
"color": "green1"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Tag
|
||||
```bash
|
||||
DELETE /callrail/v3/a/{account_id}/tags/{tag_id}.json
|
||||
```
|
||||
|
||||
### Users
|
||||
|
||||
#### List Users
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/users.json
|
||||
```
|
||||
|
||||
#### Get User
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/users/{user_id}.json
|
||||
```
|
||||
|
||||
### Integrations
|
||||
|
||||
#### List Integrations
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/integrations.json?company_id={company_id}
|
||||
```
|
||||
|
||||
### Notifications
|
||||
|
||||
#### List Notifications
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/notifications.json
|
||||
```
|
||||
|
||||
## ID Prefixes
|
||||
|
||||
- Account IDs: `ACC`
|
||||
- Company IDs: `COM`
|
||||
- Call IDs: `CAL`
|
||||
- Tracker IDs: `TRK`
|
||||
- User IDs: `USR`
|
||||
|
||||
## Pagination
|
||||
|
||||
Uses offset-based pagination with `page` and `per_page` parameters:
|
||||
|
||||
```bash
|
||||
GET /callrail/v3/a/{account_id}/calls.json?page=2&per_page=50
|
||||
# Response includes page, per_page, total_pages, total_records
|
||||
```
|
||||
|
||||
For calls endpoint, relative pagination is available via `relative_pagination=true`.
|
||||
|
||||
## Notes
|
||||
|
||||
- All endpoints end with `.json`
|
||||
- Communication records retained for 25 months
|
||||
- Rate limits: 1,000/hour, 10,000/day for general API
|
||||
- ISO 8601 date format with timezone
|
||||
|
||||
## Resources
|
||||
|
||||
- [CallRail API Documentation](https://apidocs.callrail.com/)
|
||||
- [CallRail Help Center - API](https://support.callrail.com/hc/en-us/sections/4426797289229-API)
|
||||
203
skills/api-gateway/references/chargebee.md
Normal file
203
skills/api-gateway/references/chargebee.md
Normal file
@@ -0,0 +1,203 @@
|
||||
# Chargebee Routing Reference
|
||||
|
||||
**App name:** `chargebee`
|
||||
**Base URL proxied:** `{subdomain}.chargebee.com`
|
||||
|
||||
The router automatically handles the subdomain from your connection.
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/chargebee/api/v2/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Customers
|
||||
|
||||
#### List Customers
|
||||
```bash
|
||||
GET /chargebee/api/v2/customers?limit=10
|
||||
```
|
||||
|
||||
#### Get Customer
|
||||
```bash
|
||||
GET /chargebee/api/v2/customers/{customerId}
|
||||
```
|
||||
|
||||
#### Create Customer
|
||||
```bash
|
||||
POST /chargebee/api/v2/customers
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
first_name=John&last_name=Doe&email=john@example.com
|
||||
```
|
||||
|
||||
#### Update Customer
|
||||
```bash
|
||||
POST /chargebee/api/v2/customers/{customerId}
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
first_name=Jane
|
||||
```
|
||||
|
||||
### Subscriptions
|
||||
|
||||
#### List Subscriptions
|
||||
```bash
|
||||
GET /chargebee/api/v2/subscriptions?limit=10
|
||||
```
|
||||
|
||||
#### Get Subscription
|
||||
```bash
|
||||
GET /chargebee/api/v2/subscriptions/{subscriptionId}
|
||||
```
|
||||
|
||||
#### Create Subscription
|
||||
```bash
|
||||
POST /chargebee/api/v2/subscriptions
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
plan_id=basic-plan&customer[email]=john@example.com&customer[first_name]=John
|
||||
```
|
||||
|
||||
#### Cancel Subscription
|
||||
```bash
|
||||
POST /chargebee/api/v2/subscriptions/{subscriptionId}/cancel
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
end_of_term=true
|
||||
```
|
||||
|
||||
### Item Prices (Product Catalog 2.0)
|
||||
|
||||
#### List Item Prices
|
||||
```bash
|
||||
GET /chargebee/api/v2/item_prices?limit=10
|
||||
```
|
||||
|
||||
#### Get Item Price
|
||||
```bash
|
||||
GET /chargebee/api/v2/item_prices/{itemPriceId}
|
||||
```
|
||||
|
||||
### Items (Product Catalog 2.0)
|
||||
|
||||
#### List Items
|
||||
```bash
|
||||
GET /chargebee/api/v2/items?limit=10
|
||||
```
|
||||
|
||||
#### Get Item
|
||||
```bash
|
||||
GET /chargebee/api/v2/items/{itemId}
|
||||
```
|
||||
|
||||
### Plans (Product Catalog 1.0 - Legacy)
|
||||
|
||||
#### List Plans
|
||||
```bash
|
||||
GET /chargebee/api/v2/plans?limit=10
|
||||
```
|
||||
|
||||
#### Get Plan
|
||||
```bash
|
||||
GET /chargebee/api/v2/plans/{planId}
|
||||
```
|
||||
|
||||
### Invoices
|
||||
|
||||
#### List Invoices
|
||||
```bash
|
||||
GET /chargebee/api/v2/invoices?limit=10
|
||||
```
|
||||
|
||||
#### Get Invoice
|
||||
```bash
|
||||
GET /chargebee/api/v2/invoices/{invoiceId}
|
||||
```
|
||||
|
||||
#### Download Invoice PDF
|
||||
```bash
|
||||
POST /chargebee/api/v2/invoices/{invoiceId}/pdf
|
||||
```
|
||||
|
||||
### Transactions
|
||||
|
||||
#### List Transactions
|
||||
```bash
|
||||
GET /chargebee/api/v2/transactions?limit=10
|
||||
```
|
||||
|
||||
### Hosted Pages
|
||||
|
||||
#### Checkout New Subscription
|
||||
```bash
|
||||
POST /chargebee/api/v2/hosted_pages/checkout_new_for_items
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
subscription[plan_id]=basic-plan&customer[email]=john@example.com
|
||||
```
|
||||
|
||||
#### Manage Payment Sources
|
||||
```bash
|
||||
POST /chargebee/api/v2/hosted_pages/manage_payment_sources
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
customer[id]=cust_123
|
||||
```
|
||||
|
||||
### Portal Sessions
|
||||
|
||||
#### Create Portal Session
|
||||
```bash
|
||||
POST /chargebee/api/v2/portal_sessions
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
customer[id]=cust_123
|
||||
```
|
||||
|
||||
## Filtering
|
||||
|
||||
Use filter parameters:
|
||||
```bash
|
||||
GET /chargebee/api/v2/subscriptions?status[is]=active
|
||||
GET /chargebee/api/v2/customers?email[is]=john@example.com
|
||||
GET /chargebee/api/v2/invoices?date[after]=1704067200
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects Basic auth from your API key
|
||||
- Subdomain is automatically determined from your connection
|
||||
- Uses form-urlencoded data for POST requests
|
||||
- Nested objects use bracket notation: `customer[email]`
|
||||
- Timestamps are Unix timestamps
|
||||
- List responses include `next_offset` for pagination
|
||||
- Status values: `active`, `cancelled`, `non_renewing`, etc.
|
||||
- **Product Catalog versions**: Use `item_prices` and `items` for PC 2.0, or `plans` and `addons` for PC 1.0
|
||||
|
||||
## Resources
|
||||
|
||||
- [Getting Started](https://apidocs.chargebee.com/docs/api)
|
||||
- [List Customers](https://apidocs.chargebee.com/docs/api/customers/list-customers.md)
|
||||
- [Retrieve a Customer](https://apidocs.chargebee.com/docs/api/customers/retrieve-a-customer.md)
|
||||
- [Create a Customer](https://apidocs.chargebee.com/docs/api/customers/create-a-customer.md)
|
||||
- [Update a Customer](https://apidocs.chargebee.com/docs/api/customers/update-a-customer.md)
|
||||
- [List Subscriptions](https://apidocs.chargebee.com/docs/api/subscriptions/list-subscriptions.md)
|
||||
- [Retrieve a Subscription](https://apidocs.chargebee.com/docs/api/subscriptions/retrieve-a-subscription.md)
|
||||
- [Create a Subscription](https://apidocs.chargebee.com/docs/api/subscriptions/create-subscription-for-items.md)
|
||||
- [Cancel a Subscription](https://apidocs.chargebee.com/docs/api/subscriptions/cancel-subscription-for-items.md)
|
||||
- [List Items](https://apidocs.chargebee.com/docs/api/items/list-items.md)
|
||||
- [Retrieve an Item](https://apidocs.chargebee.com/docs/api/items/retrieve-an-item.md)
|
||||
- [List Item Prices](https://apidocs.chargebee.com/docs/api/item_prices/list-item-prices.md)
|
||||
- [Retrieve an Item Price](https://apidocs.chargebee.com/docs/api/item_prices/retrieve-an-item-price.md)
|
||||
- [List Plans](https://apidocs.chargebee.com/docs/api/v2/pcv-1/plans/list-plans.md)
|
||||
- [Retrieve a Plan](https://apidocs.chargebee.com/docs/api/v2/pcv-1/plans/retrieve-a-plan.md)
|
||||
- [List Invoices](https://apidocs.chargebee.com/docs/api/invoices/list-invoices.md)
|
||||
- [Retrieve an Invoice](https://apidocs.chargebee.com/docs/api/invoices/retrieve-an-invoice.md)
|
||||
- [Download Invoice as PDF](https://apidocs.chargebee.com/docs/api/invoices/download-e-invoice.md)
|
||||
- [List Transactions](https://apidocs.chargebee.com/docs/api/transactions/list-transactions.md)
|
||||
- [Checkout New Subscription](https://apidocs.chargebee.com/docs/api/hosted_pages/create-checkout-for-a-new-subscription.md)
|
||||
- [Manage Payment Sources](https://apidocs.chargebee.com/docs/api/hosted_pages/manage-payment-sources.md)
|
||||
- [Create a Portal Session](https://apidocs.chargebee.com/docs/api/portal_sessions/create-a-portal-session.md)
|
||||
274
skills/api-gateway/references/clickfunnels.md
Normal file
274
skills/api-gateway/references/clickfunnels.md
Normal file
@@ -0,0 +1,274 @@
|
||||
# ClickFunnels Routing Reference
|
||||
|
||||
**App name:** `clickfunnels`
|
||||
**Base URL proxied:** `{subdomain}.myclickfunnels.com`
|
||||
|
||||
The router automatically handles the subdomain from your OAuth connection.
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/clickfunnels/api/v2/{resource}
|
||||
```
|
||||
|
||||
## Required Headers
|
||||
|
||||
THe `User-Agent` header is required to avoid Cloudflare blocks:
|
||||
|
||||
```
|
||||
User-Agent: Maton/1.0
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Teams
|
||||
|
||||
#### List Teams
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/teams
|
||||
```
|
||||
|
||||
#### Get Team
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/teams/{team_id}
|
||||
```
|
||||
|
||||
### Workspaces
|
||||
|
||||
#### List Workspaces
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/teams/{team_id}/workspaces
|
||||
```
|
||||
|
||||
#### Get Workspace
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}
|
||||
```
|
||||
|
||||
### Contacts
|
||||
|
||||
#### List Contacts
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts
|
||||
```
|
||||
|
||||
#### Get Contact
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/contacts/{contact_id}
|
||||
```
|
||||
|
||||
#### Create Contact
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/workspaces/{workspace_id}/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contact": {
|
||||
"email_address": "user@example.com",
|
||||
"first_name": "John",
|
||||
"last_name": "Doe"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Contact
|
||||
```bash
|
||||
PUT /clickfunnels/api/v2/contacts/{contact_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contact": {
|
||||
"first_name": "Updated"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Contact
|
||||
```bash
|
||||
DELETE /clickfunnels/api/v2/contacts/{contact_id}
|
||||
```
|
||||
|
||||
#### Upsert Contact
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/workspaces/{workspace_id}/contacts/upsert
|
||||
```
|
||||
|
||||
### Products
|
||||
|
||||
#### List Products
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/products
|
||||
```
|
||||
|
||||
#### Get Product
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/products/{product_id}
|
||||
```
|
||||
|
||||
#### Create Product
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/workspaces/{workspace_id}/products
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"product": {
|
||||
"name": "New Product",
|
||||
"visible_in_store": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Archive/Unarchive Product
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/products/{product_id}/archive
|
||||
POST /clickfunnels/api/v2/products/{product_id}/unarchive
|
||||
```
|
||||
|
||||
### Orders
|
||||
|
||||
#### List Orders
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/orders
|
||||
```
|
||||
|
||||
#### Get Order
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/orders/{order_id}
|
||||
```
|
||||
|
||||
### Fulfillments
|
||||
|
||||
#### List Fulfillments
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/fulfillments
|
||||
```
|
||||
|
||||
#### Create Fulfillment
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/workspaces/{workspace_id}/fulfillments
|
||||
```
|
||||
|
||||
#### Cancel Fulfillment
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/fulfillments/{fulfillment_id}/cancel
|
||||
```
|
||||
|
||||
### Courses & Enrollments
|
||||
|
||||
#### List Courses
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/courses
|
||||
```
|
||||
|
||||
#### List Enrollments
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/courses/{course_id}/enrollments
|
||||
```
|
||||
|
||||
#### Create Enrollment
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/courses/{course_id}/enrollments
|
||||
```
|
||||
|
||||
### Forms & Submissions
|
||||
|
||||
#### List Forms
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/forms
|
||||
```
|
||||
|
||||
#### List Submissions
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/forms/{form_id}/submissions
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
|
||||
#### List Webhook Endpoints
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/webhooks/outgoing/endpoints
|
||||
```
|
||||
|
||||
#### Create Webhook Endpoint
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/workspaces/{workspace_id}/webhooks/outgoing/endpoints
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"webhooks_outgoing_endpoint": {
|
||||
"url": "https://example.com/webhook",
|
||||
"name": "My Webhook",
|
||||
"event_type_ids": ["contact.created"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Webhook Endpoint
|
||||
```bash
|
||||
DELETE /clickfunnels/api/v2/webhooks/outgoing/endpoints/{endpoint_id}
|
||||
```
|
||||
|
||||
### Images
|
||||
|
||||
#### List Images
|
||||
```bash
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/images
|
||||
```
|
||||
|
||||
#### Upload Image via URL
|
||||
```bash
|
||||
POST /clickfunnels/api/v2/workspaces/{workspace_id}/images
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"image": {
|
||||
"upload_source_url": "https://example.com/image.png"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Cursor-based pagination with 20 items per page:
|
||||
|
||||
```bash
|
||||
# First page
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts
|
||||
|
||||
# Next page (use ID from Pagination-Next header)
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?after=1087091674
|
||||
```
|
||||
|
||||
Response headers:
|
||||
- `Pagination-Next`: ID of last item
|
||||
- `Link`: Full URL for next page
|
||||
|
||||
## Filtering
|
||||
|
||||
```bash
|
||||
# Single filter
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?filter[email_address]=user@example.com
|
||||
|
||||
# Multiple values (OR)
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?filter[email_address]=a@example.com,b@example.com
|
||||
|
||||
# Multiple filters (AND)
|
||||
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?filter[email_address]=user@example.com&filter[id]=123
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Subdomain is automatically determined from your OAuth connection
|
||||
- IDs are integers; each resource also has a `public_id` string
|
||||
- Request bodies use nested keys: `{"contact": {...}}`, `{"product": {...}}`
|
||||
- List endpoints: use `workspaces/{id}/{resource}` pattern
|
||||
- Single resource: use `/{resource}/{id}` pattern (no workspace prefix)
|
||||
- Delete operations return HTTP 204 with empty body
|
||||
- Max 20 items per page, use `after` parameter for pagination
|
||||
|
||||
## Resources
|
||||
|
||||
- [ClickFunnels API Introduction](https://developers.myclickfunnels.com/docs/intro)
|
||||
- [ClickFunnels API Reference](https://developers.myclickfunnels.com/reference)
|
||||
- [Pagination Guide](https://developers.myclickfunnels.com/docs/pagination)
|
||||
- [Filtering Guide](https://developers.myclickfunnels.com/docs/filtering)
|
||||
152
skills/api-gateway/references/clicksend.md
Normal file
152
skills/api-gateway/references/clicksend.md
Normal file
@@ -0,0 +1,152 @@
|
||||
# ClickSend Routing Reference
|
||||
|
||||
**App name:** `clicksend`
|
||||
**Base URL proxied:** `rest.clicksend.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/clicksend/v3/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Account
|
||||
|
||||
#### Get Account
|
||||
```bash
|
||||
GET /clicksend/v3/account
|
||||
```
|
||||
|
||||
### SMS
|
||||
|
||||
#### Send SMS
|
||||
```bash
|
||||
POST /clicksend/v3/sms/send
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messages": [
|
||||
{
|
||||
"to": "+15551234567",
|
||||
"body": "Hello!",
|
||||
"source": "api"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### SMS History
|
||||
```bash
|
||||
GET /clicksend/v3/sms/history
|
||||
```
|
||||
|
||||
#### SMS Templates
|
||||
```bash
|
||||
GET /clicksend/v3/sms/templates
|
||||
POST /clicksend/v3/sms/templates
|
||||
PUT /clicksend/v3/sms/templates/{template_id}
|
||||
DELETE /clicksend/v3/sms/templates/{template_id}
|
||||
```
|
||||
|
||||
### MMS
|
||||
|
||||
#### Send MMS
|
||||
```bash
|
||||
POST /clicksend/v3/mms/send
|
||||
```
|
||||
|
||||
#### MMS History
|
||||
```bash
|
||||
GET /clicksend/v3/mms/history
|
||||
```
|
||||
|
||||
### Voice
|
||||
|
||||
#### Send Voice
|
||||
```bash
|
||||
POST /clicksend/v3/voice/send
|
||||
```
|
||||
|
||||
#### Voice Languages
|
||||
```bash
|
||||
GET /clicksend/v3/voice/lang
|
||||
```
|
||||
|
||||
### Contact Lists
|
||||
|
||||
#### List All Lists
|
||||
```bash
|
||||
GET /clicksend/v3/lists
|
||||
```
|
||||
|
||||
#### CRUD Operations
|
||||
```bash
|
||||
GET /clicksend/v3/lists/{list_id}
|
||||
POST /clicksend/v3/lists
|
||||
PUT /clicksend/v3/lists/{list_id}
|
||||
DELETE /clicksend/v3/lists/{list_id}
|
||||
```
|
||||
|
||||
### Contacts
|
||||
|
||||
#### List Contacts
|
||||
```bash
|
||||
GET /clicksend/v3/lists/{list_id}/contacts
|
||||
```
|
||||
|
||||
#### CRUD Operations
|
||||
```bash
|
||||
GET /clicksend/v3/lists/{list_id}/contacts/{contact_id}
|
||||
POST /clicksend/v3/lists/{list_id}/contacts
|
||||
PUT /clicksend/v3/lists/{list_id}/contacts/{contact_id}
|
||||
DELETE /clicksend/v3/lists/{list_id}/contacts/{contact_id}
|
||||
```
|
||||
|
||||
### Email Addresses
|
||||
|
||||
```bash
|
||||
GET /clicksend/v3/email/addresses
|
||||
POST /clicksend/v3/email/addresses
|
||||
DELETE /clicksend/v3/email/addresses/{email_address_id}
|
||||
```
|
||||
|
||||
### Utility
|
||||
|
||||
```bash
|
||||
GET /clicksend/v3/countries
|
||||
```
|
||||
|
||||
## Response Format
|
||||
|
||||
All responses follow this structure:
|
||||
|
||||
```json
|
||||
{
|
||||
"http_code": 200,
|
||||
"response_code": "SUCCESS",
|
||||
"response_msg": "Description",
|
||||
"data": { ... }
|
||||
}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Uses page-based pagination:
|
||||
|
||||
```bash
|
||||
GET /clicksend/v3/lists?page=2&limit=50
|
||||
# Response includes total, per_page, current_page, last_page
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Phone numbers must be E.164 format
|
||||
- Timestamps are Unix timestamps
|
||||
- Voice access requires account permissions
|
||||
- SMS over 160 chars split into segments
|
||||
|
||||
## Resources
|
||||
|
||||
- [ClickSend Developer Portal](https://developers.clicksend.com/)
|
||||
- [ClickSend REST API v3](https://developers.clicksend.com/docs)
|
||||
155
skills/api-gateway/references/clickup.md
Normal file
155
skills/api-gateway/references/clickup.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# ClickUp Routing Reference
|
||||
|
||||
**App name:** `clickup`
|
||||
**Base URL proxied:** `api.clickup.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/clickup/api/v2/{resource}
|
||||
```
|
||||
|
||||
## ClickUp Hierarchy
|
||||
|
||||
Workspace (team) → Space → Folder → List → Task
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /clickup/api/v2/user
|
||||
```
|
||||
|
||||
### Get Workspaces (Teams)
|
||||
```bash
|
||||
GET /clickup/api/v2/team
|
||||
```
|
||||
|
||||
### Get Spaces
|
||||
```bash
|
||||
GET /clickup/api/v2/team/{team_id}/space
|
||||
```
|
||||
|
||||
### Get Folders
|
||||
```bash
|
||||
GET /clickup/api/v2/space/{space_id}/folder
|
||||
```
|
||||
|
||||
### Get Lists
|
||||
```bash
|
||||
GET /clickup/api/v2/folder/{folder_id}/list
|
||||
```
|
||||
|
||||
### Get Folderless Lists
|
||||
```bash
|
||||
GET /clickup/api/v2/space/{space_id}/list
|
||||
```
|
||||
|
||||
### Get Tasks
|
||||
```bash
|
||||
GET /clickup/api/v2/list/{list_id}/task?include_closed=true
|
||||
```
|
||||
|
||||
### Get a Task
|
||||
```bash
|
||||
GET /clickup/api/v2/task/{task_id}
|
||||
```
|
||||
|
||||
### Create a Task
|
||||
```bash
|
||||
POST /clickup/api/v2/list/{list_id}/task
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Task name",
|
||||
"description": "Task description",
|
||||
"assignees": [123],
|
||||
"status": "to do",
|
||||
"priority": 2,
|
||||
"due_date": 1709251200000,
|
||||
"tags": ["api", "backend"]
|
||||
}
|
||||
```
|
||||
|
||||
### Update a Task
|
||||
```bash
|
||||
PUT /clickup/api/v2/task/{task_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"status": "complete",
|
||||
"priority": null
|
||||
}
|
||||
```
|
||||
|
||||
### Delete a Task
|
||||
```bash
|
||||
DELETE /clickup/api/v2/task/{task_id}
|
||||
```
|
||||
|
||||
### Get Filtered Team Tasks
|
||||
```bash
|
||||
GET /clickup/api/v2/team/{team_id}/task?statuses[]=to%20do&assignees[]=123
|
||||
```
|
||||
|
||||
### Create Space
|
||||
```bash
|
||||
POST /clickup/api/v2/team/{team_id}/space
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Space",
|
||||
"multiple_assignees": true
|
||||
}
|
||||
```
|
||||
|
||||
### Create Folder
|
||||
```bash
|
||||
POST /clickup/api/v2/space/{space_id}/folder
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "New Folder"}
|
||||
```
|
||||
|
||||
### Create List
|
||||
```bash
|
||||
POST /clickup/api/v2/folder/{folder_id}/list
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "New List"}
|
||||
```
|
||||
|
||||
### Create Webhook
|
||||
```bash
|
||||
POST /clickup/api/v2/team/{team_id}/webhook
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"endpoint": "https://example.com/webhook",
|
||||
"events": ["taskCreated", "taskUpdated", "taskDeleted"]
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Webhook
|
||||
```bash
|
||||
DELETE /clickup/api/v2/webhook/{webhook_id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Task IDs are strings, timestamps are Unix milliseconds
|
||||
- Priority values: 1=urgent, 2=high, 3=normal, 4=low, null=none
|
||||
- Workspaces are called "teams" in the API
|
||||
- Status values must match exact status names configured in the list
|
||||
- Use page-based pagination with `page` parameter (0-indexed)
|
||||
- Responses are limited to 100 items per page
|
||||
|
||||
## Resources
|
||||
|
||||
- [ClickUp API Overview](https://developer.clickup.com/docs/Getting%20Started.md)
|
||||
- [Tasks](https://developer.clickup.com/reference/gettasks.md)
|
||||
- [Spaces](https://developer.clickup.com/reference/getspaces.md)
|
||||
- [Lists](https://developer.clickup.com/reference/getlists.md)
|
||||
- [Webhooks](https://developer.clickup.com/reference/createwebhook.md)
|
||||
- [Rate Limits](https://developer.clickup.com/docs/rate-limits.md)
|
||||
- [LLM Reference](https://developer.clickup.com/llms.txt)
|
||||
121
skills/api-gateway/references/cognito-forms.md
Normal file
121
skills/api-gateway/references/cognito-forms.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# Cognito Forms Routing Reference
|
||||
|
||||
**App name:** `cognito-forms`
|
||||
**Base URL proxied:** `www.cognitoforms.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/cognito-forms/api/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Forms
|
||||
|
||||
#### List Forms
|
||||
```bash
|
||||
GET /cognito-forms/api/forms
|
||||
```
|
||||
|
||||
#### Get Form
|
||||
```bash
|
||||
GET /cognito-forms/api/forms/{formId}
|
||||
```
|
||||
|
||||
### Entries
|
||||
|
||||
#### List Entries
|
||||
```bash
|
||||
GET /cognito-forms/api/forms/{formId}/entries
|
||||
```
|
||||
|
||||
#### Get Entry
|
||||
```bash
|
||||
GET /cognito-forms/api/forms/{formId}/entries/{entryId}
|
||||
```
|
||||
|
||||
#### Create Entry
|
||||
```bash
|
||||
POST /cognito-forms/api/forms/{formId}/entries
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Name": {
|
||||
"First": "John",
|
||||
"Last": "Doe"
|
||||
},
|
||||
"Email": "john.doe@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Entry
|
||||
```bash
|
||||
PUT /cognito-forms/api/forms/{formId}/entries/{entryId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Name": {
|
||||
"First": "Jane",
|
||||
"Last": "Doe"
|
||||
},
|
||||
"Email": "jane.doe@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Entry
|
||||
```bash
|
||||
DELETE /cognito-forms/api/forms/{formId}/entries/{entryId}
|
||||
```
|
||||
|
||||
### Documents
|
||||
|
||||
#### Get Document
|
||||
```bash
|
||||
GET /cognito-forms/api/forms/{formId}/entries/{entryId}/documents/{templateNumber}
|
||||
```
|
||||
|
||||
### Files
|
||||
|
||||
#### Get File
|
||||
```bash
|
||||
GET /cognito-forms/api/files/{fileId}
|
||||
```
|
||||
|
||||
### Form Availability
|
||||
|
||||
#### Set Form Availability
|
||||
```bash
|
||||
PUT /cognito-forms/api/forms/{formId}/availability
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"start": "2026-03-01T00:00:00Z",
|
||||
"end": "2026-03-31T23:59:59Z",
|
||||
"message": "This form is currently unavailable."
|
||||
}
|
||||
```
|
||||
|
||||
## Field Types
|
||||
|
||||
Complex fields use nested JSON objects:
|
||||
|
||||
- **Name**: `{"First": "...", "Last": "..."}`
|
||||
- **Address**: `{"Line1": "...", "Line2": "...", "City": "...", "State": "...", "PostalCode": "..."}`
|
||||
- **Choice (single)**: `"OptionValue"`
|
||||
- **Choice (multiple)**: `["Option1", "Option2"]`
|
||||
|
||||
## Notes
|
||||
|
||||
- Form IDs can be internal form name (string) or numeric ID
|
||||
- Entry IDs can be entry number (integer) or entry ID (GUID)
|
||||
- Authentication is automatic - the router injects OAuth token
|
||||
- Rate limit: 100 requests per 60 seconds
|
||||
- File and document endpoints return temporary download URLs
|
||||
- API scopes: Read, Read/Write, or Read/Write/Delete
|
||||
|
||||
## Resources
|
||||
|
||||
- [Cognito Forms API Overview](https://www.cognitoforms.com/support/475/data-integration/cognito-forms-api)
|
||||
- [REST API Reference](https://www.cognitoforms.com/support/476/data-integration/cognito-forms-api/rest-api-reference)
|
||||
- [API Reference](https://www.cognitoforms.com/support/476/data-integration/cognito-forms-api/api-reference)
|
||||
130
skills/api-gateway/references/constant-contact.md
Normal file
130
skills/api-gateway/references/constant-contact.md
Normal file
@@ -0,0 +1,130 @@
|
||||
# Constant Contact Routing Reference
|
||||
|
||||
**App name:** `constant-contact`
|
||||
**Base URL proxied:** `api.cc.email`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/constant-contact/v3/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Contacts
|
||||
```bash
|
||||
GET /constant-contact/v3/contacts
|
||||
```
|
||||
|
||||
### Get Contact
|
||||
```bash
|
||||
GET /constant-contact/v3/contacts/{contact_id}
|
||||
```
|
||||
|
||||
### Create Contact
|
||||
```bash
|
||||
POST /constant-contact/v3/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email_address": {
|
||||
"address": "john@example.com",
|
||||
"permission_to_send": "implicit"
|
||||
},
|
||||
"first_name": "John",
|
||||
"last_name": "Doe",
|
||||
"list_memberships": ["list-uuid"]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Contact
|
||||
```bash
|
||||
PUT /constant-contact/v3/contacts/{contact_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"first_name": "John",
|
||||
"last_name": "Smith"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Contact
|
||||
```bash
|
||||
DELETE /constant-contact/v3/contacts/{contact_id}
|
||||
```
|
||||
|
||||
### List Contact Lists
|
||||
```bash
|
||||
GET /constant-contact/v3/contact_lists
|
||||
```
|
||||
|
||||
### Create Contact List
|
||||
```bash
|
||||
POST /constant-contact/v3/contact_lists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Newsletter Subscribers",
|
||||
"description": "Main newsletter list"
|
||||
}
|
||||
```
|
||||
|
||||
### List Email Campaigns
|
||||
```bash
|
||||
GET /constant-contact/v3/emails
|
||||
```
|
||||
|
||||
### Create Email Campaign
|
||||
```bash
|
||||
POST /constant-contact/v3/emails
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "March Newsletter",
|
||||
"email_campaign_activities": [
|
||||
{
|
||||
"format_type": 5,
|
||||
"from_name": "Company",
|
||||
"from_email": "marketing@example.com",
|
||||
"reply_to_email": "reply@example.com",
|
||||
"subject": "Newsletter",
|
||||
"html_content": "<html><body>Hello</body></html>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### List Segments
|
||||
```bash
|
||||
GET /constant-contact/v3/segments
|
||||
```
|
||||
|
||||
### List Tags
|
||||
```bash
|
||||
GET /constant-contact/v3/contact_tags
|
||||
```
|
||||
|
||||
### Get Account Summary
|
||||
```bash
|
||||
GET /constant-contact/v3/account/summary
|
||||
```
|
||||
|
||||
### Email Campaign Summaries
|
||||
```bash
|
||||
GET /constant-contact/v3/reports/summary_reports/email_campaign_summaries
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Resource IDs use UUID format (36 characters with hyphens)
|
||||
- All dates use ISO-8601 format
|
||||
- Uses cursor-based pagination with `limit` and `cursor` parameters
|
||||
- Maximum 1,000 contact lists per account
|
||||
- Bulk operations are asynchronous
|
||||
|
||||
## Resources
|
||||
|
||||
- [V3 API Overview](https://developer.constantcontact.com/api_guide/getting_started.html)
|
||||
- [API Reference](https://developer.constantcontact.com/api_reference/index.html)
|
||||
- [Technical Overview](https://developer.constantcontact.com/api_guide/v3_technical_overview.html)
|
||||
204
skills/api-gateway/references/dropbox.md
Normal file
204
skills/api-gateway/references/dropbox.md
Normal file
@@ -0,0 +1,204 @@
|
||||
# Dropbox Routing Reference
|
||||
|
||||
**App name:** `dropbox`
|
||||
**Base URL proxied:** `api.dropboxapi.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/dropbox/2/{endpoint}
|
||||
```
|
||||
|
||||
**Important:** All Dropbox API v2 endpoints use HTTP POST with JSON request bodies.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Users
|
||||
|
||||
#### Get Current Account
|
||||
```bash
|
||||
POST /dropbox/2/users/get_current_account
|
||||
Content-Type: application/json
|
||||
|
||||
null
|
||||
```
|
||||
|
||||
#### Get Space Usage
|
||||
```bash
|
||||
POST /dropbox/2/users/get_space_usage
|
||||
Content-Type: application/json
|
||||
|
||||
null
|
||||
```
|
||||
|
||||
### Files
|
||||
|
||||
#### List Folder
|
||||
```bash
|
||||
POST /dropbox/2/files/list_folder
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": ""
|
||||
}
|
||||
```
|
||||
|
||||
Use empty string `""` for root folder.
|
||||
|
||||
#### Continue Listing
|
||||
```bash
|
||||
POST /dropbox/2/files/list_folder/continue
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"cursor": "..."
|
||||
}
|
||||
```
|
||||
|
||||
#### Get Metadata
|
||||
```bash
|
||||
POST /dropbox/2/files/get_metadata
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": "/document.pdf"
|
||||
}
|
||||
```
|
||||
|
||||
#### Create Folder
|
||||
```bash
|
||||
POST /dropbox/2/files/create_folder_v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": "/New Folder",
|
||||
"autorename": false
|
||||
}
|
||||
```
|
||||
|
||||
#### Copy
|
||||
```bash
|
||||
POST /dropbox/2/files/copy_v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"from_path": "/source/file.pdf",
|
||||
"to_path": "/destination/file.pdf"
|
||||
}
|
||||
```
|
||||
|
||||
#### Move
|
||||
```bash
|
||||
POST /dropbox/2/files/move_v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"from_path": "/old/file.pdf",
|
||||
"to_path": "/new/file.pdf"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete
|
||||
```bash
|
||||
POST /dropbox/2/files/delete_v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": "/file-to-delete.pdf"
|
||||
}
|
||||
```
|
||||
|
||||
#### Get Temporary Link
|
||||
```bash
|
||||
POST /dropbox/2/files/get_temporary_link
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": "/document.pdf"
|
||||
}
|
||||
```
|
||||
|
||||
### Search
|
||||
|
||||
#### Search Files
|
||||
```bash
|
||||
POST /dropbox/2/files/search_v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "document"
|
||||
}
|
||||
```
|
||||
|
||||
### Revisions
|
||||
|
||||
#### List Revisions
|
||||
```bash
|
||||
POST /dropbox/2/files/list_revisions
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": "/document.pdf"
|
||||
}
|
||||
```
|
||||
|
||||
### Tags
|
||||
|
||||
#### Get Tags
|
||||
```bash
|
||||
POST /dropbox/2/files/tags/get
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"paths": ["/document.pdf"]
|
||||
}
|
||||
```
|
||||
|
||||
#### Add Tag
|
||||
```bash
|
||||
POST /dropbox/2/files/tags/add
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": "/document.pdf",
|
||||
"tag_text": "important"
|
||||
}
|
||||
```
|
||||
|
||||
#### Remove Tag
|
||||
```bash
|
||||
POST /dropbox/2/files/tags/remove
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"path": "/document.pdf",
|
||||
"tag_text": "important"
|
||||
}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Dropbox uses cursor-based pagination:
|
||||
|
||||
```bash
|
||||
POST /dropbox/2/files/list_folder
|
||||
# Response includes "cursor" and "has_more": true/false
|
||||
|
||||
POST /dropbox/2/files/list_folder/continue
|
||||
# Use cursor from previous response
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- All endpoints use POST method
|
||||
- Request bodies are JSON
|
||||
- Use empty string `""` for root folder path
|
||||
- Paths are case-insensitive but case-preserving
|
||||
- Tag text must match pattern `[\w]+` (alphanumeric and underscores)
|
||||
- Temporary links expire after 4 hours
|
||||
|
||||
## Resources
|
||||
|
||||
- [Dropbox HTTP API Overview](https://www.dropbox.com/developers/documentation/http/overview)
|
||||
- [Dropbox API Explorer](https://dropbox.github.io/dropbox-api-v2-explorer/)
|
||||
- [DBX File Access Guide](https://developers.dropbox.com/dbx-file-access-guide)
|
||||
214
skills/api-gateway/references/eventbrite.md
Normal file
214
skills/api-gateway/references/eventbrite.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# Eventbrite Routing Reference
|
||||
|
||||
**App name:** `eventbrite`
|
||||
**Base URL proxied:** `www.eventbriteapi.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/eventbrite/v3/{resource}/
|
||||
```
|
||||
|
||||
Note: All Eventbrite API paths should end with a trailing slash.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /eventbrite/v3/users/me/
|
||||
```
|
||||
|
||||
### List User Organizations
|
||||
```bash
|
||||
GET /eventbrite/v3/users/me/organizations/
|
||||
```
|
||||
|
||||
### List User Orders
|
||||
```bash
|
||||
GET /eventbrite/v3/users/me/orders/
|
||||
```
|
||||
|
||||
### List Organization Events
|
||||
```bash
|
||||
GET /eventbrite/v3/organizations/{organization_id}/events/
|
||||
```
|
||||
|
||||
Query parameters:
|
||||
- `status` - Filter: `draft`, `live`, `started`, `ended`, `completed`, `canceled`
|
||||
- `order_by` - Sort: `start_asc`, `start_desc`, `created_asc`, `created_desc`
|
||||
- `time_filter` - Filter: `current_future`, `past`
|
||||
|
||||
### Create Event
|
||||
```bash
|
||||
POST /eventbrite/v3/organizations/{organization_id}/events/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"event": {
|
||||
"name": {"html": "My Event"},
|
||||
"start": {"timezone": "America/Los_Angeles", "utc": "2026-03-01T19:00:00Z"},
|
||||
"end": {"timezone": "America/Los_Angeles", "utc": "2026-03-01T22:00:00Z"},
|
||||
"currency": "USD"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Get Event
|
||||
```bash
|
||||
GET /eventbrite/v3/events/{event_id}/
|
||||
```
|
||||
|
||||
### Update Event
|
||||
```bash
|
||||
POST /eventbrite/v3/events/{event_id}/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"event": {
|
||||
"name": {"html": "Updated Name"}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Publish Event
|
||||
```bash
|
||||
POST /eventbrite/v3/events/{event_id}/publish/
|
||||
```
|
||||
|
||||
### Cancel Event
|
||||
```bash
|
||||
POST /eventbrite/v3/events/{event_id}/cancel/
|
||||
```
|
||||
|
||||
### Delete Event
|
||||
```bash
|
||||
DELETE /eventbrite/v3/events/{event_id}/
|
||||
```
|
||||
|
||||
### List Ticket Classes
|
||||
```bash
|
||||
GET /eventbrite/v3/events/{event_id}/ticket_classes/
|
||||
```
|
||||
|
||||
### Create Ticket Class
|
||||
```bash
|
||||
POST /eventbrite/v3/events/{event_id}/ticket_classes/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"ticket_class": {
|
||||
"name": "General Admission",
|
||||
"quantity_total": 100,
|
||||
"cost": "USD,2500"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Event Attendees
|
||||
```bash
|
||||
GET /eventbrite/v3/events/{event_id}/attendees/
|
||||
```
|
||||
|
||||
### List Event Orders
|
||||
```bash
|
||||
GET /eventbrite/v3/events/{event_id}/orders/
|
||||
```
|
||||
|
||||
### Get Order
|
||||
```bash
|
||||
GET /eventbrite/v3/orders/{order_id}/
|
||||
```
|
||||
|
||||
### List Organization Venues
|
||||
```bash
|
||||
GET /eventbrite/v3/organizations/{organization_id}/venues/
|
||||
```
|
||||
|
||||
### Create Venue
|
||||
```bash
|
||||
POST /eventbrite/v3/organizations/{organization_id}/venues/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"venue": {
|
||||
"name": "Conference Center",
|
||||
"address": {
|
||||
"address_1": "123 Main St",
|
||||
"city": "San Francisco",
|
||||
"region": "CA",
|
||||
"postal_code": "94105",
|
||||
"country": "US"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Get Venue
|
||||
```bash
|
||||
GET /eventbrite/v3/venues/{venue_id}/
|
||||
```
|
||||
|
||||
### List Categories
|
||||
```bash
|
||||
GET /eventbrite/v3/categories/
|
||||
```
|
||||
|
||||
### Get Category
|
||||
```bash
|
||||
GET /eventbrite/v3/categories/{category_id}/
|
||||
```
|
||||
|
||||
### List Subcategories
|
||||
```bash
|
||||
GET /eventbrite/v3/subcategories/
|
||||
```
|
||||
|
||||
### List Formats
|
||||
```bash
|
||||
GET /eventbrite/v3/formats/
|
||||
```
|
||||
|
||||
### List Countries
|
||||
```bash
|
||||
GET /eventbrite/v3/system/countries/
|
||||
```
|
||||
|
||||
### List Regions
|
||||
```bash
|
||||
GET /eventbrite/v3/system/regions/
|
||||
```
|
||||
|
||||
## Expansions
|
||||
|
||||
Include related data with the `expand` parameter:
|
||||
|
||||
```bash
|
||||
GET /eventbrite/v3/events/{event_id}/?expand=venue,ticket_classes,category
|
||||
```
|
||||
|
||||
Available expansions: `venue`, `ticket_classes`, `category`, `subcategory`, `format`, `organizer`
|
||||
|
||||
## Pagination
|
||||
|
||||
Use `continuation` token for pagination:
|
||||
|
||||
```bash
|
||||
GET /eventbrite/v3/organizations/{org_id}/events/?page_size=50
|
||||
GET /eventbrite/v3/organizations/{org_id}/events/?continuation=eyJwYWdlIjogMn0
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- All endpoint paths must end with a trailing slash (`/`)
|
||||
- Event creation requires an organization - use `/organizations/{org_id}/events/`
|
||||
- Legacy user-based event endpoints (e.g., `/users/me/owned_events/`) are deprecated
|
||||
- Timestamps are in ISO 8601 format (UTC)
|
||||
- Currency amounts use format "CURRENCY,AMOUNT" where amount is in cents (e.g., "USD,2500" = $25.00)
|
||||
- Rate limit: 1,000 calls per hour, 48,000 calls per day
|
||||
- Event Search API is no longer publicly available (deprecated February 2020)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Eventbrite API Documentation](https://www.eventbrite.com/platform/api)
|
||||
- [API Basics](https://www.eventbrite.com/platform/docs/api-basics)
|
||||
- [API Explorer](https://www.eventbrite.com/platform/docs/api-explorer)
|
||||
85
skills/api-gateway/references/fathom.md
Normal file
85
skills/api-gateway/references/fathom.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Fathom Routing Reference
|
||||
|
||||
**App name:** `fathom`
|
||||
**Base URL proxied:** `api.fathom.ai`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/fathom/external/v1/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Meetings
|
||||
```bash
|
||||
GET /fathom/external/v1/meetings
|
||||
```
|
||||
|
||||
With filters:
|
||||
```bash
|
||||
GET /fathom/external/v1/meetings?created_after=2025-01-01T00:00:00Z&teams[]=Sales
|
||||
```
|
||||
|
||||
### Get Summary
|
||||
```bash
|
||||
GET /fathom/external/v1/recordings/{recording_id}/summary
|
||||
```
|
||||
|
||||
Async callback:
|
||||
```bash
|
||||
GET /fathom/external/v1/recordings/{recording_id}/summary?destination_url=https://example.com/webhook
|
||||
```
|
||||
|
||||
### Get Transcript
|
||||
```bash
|
||||
GET /fathom/external/v1/recordings/{recording_id}/transcript
|
||||
```
|
||||
|
||||
Async callback:
|
||||
```bash
|
||||
GET /fathom/external/v1/recordings/{recording_id}/transcript?destination_url=https://example.com/webhook
|
||||
```
|
||||
|
||||
### List Teams
|
||||
```bash
|
||||
GET /fathom/external/v1/teams
|
||||
```
|
||||
|
||||
### List Team Members
|
||||
```bash
|
||||
GET /fathom/external/v1/team_members?team=Sales
|
||||
```
|
||||
|
||||
### Create Webhook
|
||||
```bash
|
||||
POST /fathom/external/v1/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"destination_url": "https://example.com/webhook",
|
||||
"triggered_for": ["my_recordings", "my_shared_with_team_recordings"],
|
||||
"include_transcript": true,
|
||||
"include_summary": true,
|
||||
"include_action_items": true
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Webhook
|
||||
```bash
|
||||
DELETE /fathom/external/v1/webhooks/{id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Recording IDs are integers
|
||||
- Timestamps are in ISO 8601 format
|
||||
- OAuth users cannot use inline transcript/summary parameters on `/meetings` endpoint - use dedicated `/recordings/{id}/summary` and `/recordings/{id}/transcript` endpoints instead
|
||||
- Use cursor-based pagination with `cursor` parameter
|
||||
- Webhook `triggered_for` options: `my_recordings`, `shared_external_recordings`, `my_shared_with_team_recordings`, `shared_team_recordings`
|
||||
- Webhook secrets are used to verify webhook signatures
|
||||
|
||||
## Resources
|
||||
|
||||
- [Fathom API Documentation](https://developers.fathom.ai)
|
||||
- [LLM Reference](https://developers.fathom.ai/llms.txt)
|
||||
125
skills/api-gateway/references/github.md
Normal file
125
skills/api-gateway/references/github.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# GitHub Routing Reference
|
||||
|
||||
**App name:** `github`
|
||||
**Base URL proxied:** `api.github.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/github/{resource}
|
||||
```
|
||||
|
||||
GitHub API does not use a version prefix in paths. Versioning is handled via the `X-GitHub-Api-Version` header.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Authenticated User
|
||||
```bash
|
||||
GET /github/user
|
||||
```
|
||||
|
||||
### Get User by Username
|
||||
```bash
|
||||
GET /github/users/{username}
|
||||
```
|
||||
|
||||
### List User Repositories
|
||||
```bash
|
||||
GET /github/user/repos?per_page=30&sort=updated
|
||||
```
|
||||
|
||||
### Get Repository
|
||||
```bash
|
||||
GET /github/repos/{owner}/{repo}
|
||||
```
|
||||
|
||||
### List Repository Contents
|
||||
```bash
|
||||
GET /github/repos/{owner}/{repo}/contents/{path}
|
||||
```
|
||||
|
||||
### List Branches
|
||||
```bash
|
||||
GET /github/repos/{owner}/{repo}/branches
|
||||
```
|
||||
|
||||
### List Commits
|
||||
```bash
|
||||
GET /github/repos/{owner}/{repo}/commits?per_page=30
|
||||
```
|
||||
|
||||
### List Repository Issues
|
||||
```bash
|
||||
GET /github/repos/{owner}/{repo}/issues?state=open&per_page=30
|
||||
```
|
||||
|
||||
### Create Issue
|
||||
```bash
|
||||
POST /github/repos/{owner}/{repo}/issues
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Issue title",
|
||||
"body": "Issue description",
|
||||
"labels": ["bug"]
|
||||
}
|
||||
```
|
||||
|
||||
### List Pull Requests
|
||||
```bash
|
||||
GET /github/repos/{owner}/{repo}/pulls?state=open&per_page=30
|
||||
```
|
||||
|
||||
### Create Pull Request
|
||||
```bash
|
||||
POST /github/repos/{owner}/{repo}/pulls
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "PR title",
|
||||
"body": "PR description",
|
||||
"head": "feature-branch",
|
||||
"base": "main"
|
||||
}
|
||||
```
|
||||
|
||||
### Merge Pull Request
|
||||
```bash
|
||||
PUT /github/repos/{owner}/{repo}/pulls/{pull_number}/merge
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"merge_method": "squash"
|
||||
}
|
||||
```
|
||||
|
||||
### Search Repositories
|
||||
```bash
|
||||
GET /github/search/repositories?q={query}&per_page=30
|
||||
```
|
||||
|
||||
### Search Issues
|
||||
```bash
|
||||
GET /github/search/issues?q={query}&per_page=30
|
||||
```
|
||||
|
||||
### Get Rate Limit
|
||||
```bash
|
||||
GET /github/rate_limit
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Repository names are case-insensitive but the API preserves case
|
||||
- Issue numbers and PR numbers share the same sequence per repository
|
||||
- File content must be Base64 encoded when creating/updating files
|
||||
- Rate limits: 5000 requests/hour for authenticated users, 30 searches/minute
|
||||
- Pagination uses `per_page` (max 100, default 30) and `page` parameters
|
||||
- Some endpoints require specific OAuth scopes (e.g., `read:org` for organization operations)
|
||||
|
||||
## Resources
|
||||
|
||||
- [GitHub REST API Documentation](https://docs.github.com/en/rest)
|
||||
- [Repositories API](https://docs.github.com/en/rest/repos/repos)
|
||||
- [Issues API](https://docs.github.com/en/rest/issues/issues)
|
||||
- [Pull Requests API](https://docs.github.com/en/rest/pulls/pulls)
|
||||
172
skills/api-gateway/references/google-ads.md
Normal file
172
skills/api-gateway/references/google-ads.md
Normal file
@@ -0,0 +1,172 @@
|
||||
# Google Ads Routing Reference
|
||||
|
||||
**App name:** `google-ads`
|
||||
**Base URL proxied:** `googleads.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-ads/v23/customers/{customerId}/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Accessible Customers
|
||||
```bash
|
||||
GET /google-ads/v23/customers:listAccessibleCustomers
|
||||
```
|
||||
|
||||
### Search (GAQL Query)
|
||||
```bash
|
||||
POST /google-ads/v23/customers/{customerId}/googleAds:search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "SELECT campaign.id, campaign.name, campaign.status FROM campaign ORDER BY campaign.id"
|
||||
}
|
||||
```
|
||||
|
||||
### Search Stream (for large result sets)
|
||||
```bash
|
||||
POST /google-ads/v23/customers/{customerId}/googleAds:searchStream
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "SELECT campaign.id, campaign.name FROM campaign"
|
||||
}
|
||||
```
|
||||
|
||||
## Common GAQL Queries
|
||||
|
||||
### List Campaigns
|
||||
```sql
|
||||
SELECT
|
||||
campaign.id,
|
||||
campaign.name,
|
||||
campaign.status,
|
||||
campaign.advertising_channel_type
|
||||
FROM campaign
|
||||
WHERE campaign.status != 'REMOVED'
|
||||
ORDER BY campaign.name
|
||||
```
|
||||
|
||||
### Campaign Performance
|
||||
```sql
|
||||
SELECT
|
||||
campaign.id,
|
||||
campaign.name,
|
||||
metrics.impressions,
|
||||
metrics.clicks,
|
||||
metrics.cost_micros,
|
||||
metrics.conversions
|
||||
FROM campaign
|
||||
WHERE segments.date DURING LAST_30_DAYS
|
||||
ORDER BY metrics.impressions DESC
|
||||
```
|
||||
|
||||
### List Ad Groups
|
||||
```sql
|
||||
SELECT
|
||||
ad_group.id,
|
||||
ad_group.name,
|
||||
ad_group.status,
|
||||
campaign.id,
|
||||
campaign.name
|
||||
FROM ad_group
|
||||
WHERE ad_group.status != 'REMOVED'
|
||||
```
|
||||
|
||||
### Ad Group Performance
|
||||
```sql
|
||||
SELECT
|
||||
ad_group.id,
|
||||
ad_group.name,
|
||||
metrics.impressions,
|
||||
metrics.clicks,
|
||||
metrics.average_cpc
|
||||
FROM ad_group
|
||||
WHERE segments.date DURING LAST_7_DAYS
|
||||
```
|
||||
|
||||
### List Keywords
|
||||
```sql
|
||||
SELECT
|
||||
ad_group_criterion.keyword.text,
|
||||
ad_group_criterion.keyword.match_type,
|
||||
ad_group_criterion.status,
|
||||
metrics.impressions,
|
||||
metrics.clicks
|
||||
FROM keyword_view
|
||||
WHERE segments.date DURING LAST_30_DAYS
|
||||
```
|
||||
|
||||
### List Ads
|
||||
```sql
|
||||
SELECT
|
||||
ad_group_ad.ad.id,
|
||||
ad_group_ad.ad.name,
|
||||
ad_group_ad.status,
|
||||
ad_group_ad.ad.type
|
||||
FROM ad_group_ad
|
||||
WHERE ad_group_ad.status != 'REMOVED'
|
||||
```
|
||||
|
||||
## Mutate Operations
|
||||
|
||||
### Create Campaign
|
||||
```bash
|
||||
POST /google-ads/v23/customers/{customerId}/campaigns:mutate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"operations": [
|
||||
{
|
||||
"create": {
|
||||
"name": "New Campaign",
|
||||
"advertisingChannelType": "SEARCH",
|
||||
"status": "PAUSED",
|
||||
"manualCpc": {},
|
||||
"campaignBudget": "customers/{customerId}/campaignBudgets/{budgetId}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Campaign Status
|
||||
```bash
|
||||
POST /google-ads/v23/customers/{customerId}/campaigns:mutate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"operations": [
|
||||
{
|
||||
"update": {
|
||||
"resourceName": "customers/{customerId}/campaigns/{campaignId}",
|
||||
"status": "ENABLED"
|
||||
},
|
||||
"updateMask": "status"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects OAuth token and developer-token headers
|
||||
- Use `listAccessibleCustomers` first to get available customer IDs
|
||||
- Customer IDs are 10-digit numbers (remove dashes if formatted as XXX-XXX-XXXX)
|
||||
- Monetary values are in micros (divide by 1,000,000)
|
||||
- Use GAQL (Google Ads Query Language) for querying
|
||||
- Date ranges: `LAST_7_DAYS`, `LAST_30_DAYS`, `THIS_MONTH`, etc.
|
||||
- Status values: `ENABLED`, `PAUSED`, `REMOVED`
|
||||
- API version updates frequently - check release notes for latest (currently v23)
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/google-ads/api/docs/start)
|
||||
- [List Accessible Customers](https://developers.google.com/google-ads/api/reference/rpc/v23/CustomerService/ListAccessibleCustomers?transport=rest)
|
||||
- [Search](https://developers.google.com/google-ads/api/reference/rpc/v23/GoogleAdsService/Search?transport=rest)
|
||||
- [Search Stream](https://developers.google.com/google-ads/api/reference/rpc/v23/GoogleAdsService/SearchStream?transport=rest)
|
||||
- [GAQL Reference](https://developers.google.com/google-ads/api/docs/query/overview)
|
||||
- [Metrics Reference](https://developers.google.com/google-ads/api/fields/v23/metrics)
|
||||
210
skills/api-gateway/references/google-analytics-admin.md
Normal file
210
skills/api-gateway/references/google-analytics-admin.md
Normal file
@@ -0,0 +1,210 @@
|
||||
# Google Analytics Admin Routing Reference
|
||||
|
||||
**App name:** `google-analytics-admin`
|
||||
**Base URL proxied:** `analyticsadmin.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-analytics-admin/v1beta/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Accounts
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/accounts
|
||||
```
|
||||
|
||||
### Get Account
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/accounts/{accountId}
|
||||
```
|
||||
|
||||
### List Properties
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties?filter=parent:accounts/{accountId}
|
||||
```
|
||||
|
||||
### Get Property
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties/{propertyId}
|
||||
```
|
||||
|
||||
### Create Property
|
||||
```bash
|
||||
POST /google-analytics-admin/v1beta/properties
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"parent": "accounts/{accountId}",
|
||||
"displayName": "My New Property",
|
||||
"timeZone": "America/Los_Angeles",
|
||||
"currencyCode": "USD",
|
||||
"industryCategory": "TECHNOLOGY"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Property
|
||||
```bash
|
||||
PATCH /google-analytics-admin/v1beta/properties/{propertyId}?updateMask=displayName
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"displayName": "Updated Property Name"
|
||||
}
|
||||
```
|
||||
|
||||
### List Data Streams
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties/{propertyId}/dataStreams
|
||||
```
|
||||
|
||||
### Get Data Stream
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties/{propertyId}/dataStreams/{dataStreamId}
|
||||
```
|
||||
|
||||
### Create Web Data Stream
|
||||
```bash
|
||||
POST /google-analytics-admin/v1beta/properties/{propertyId}/dataStreams
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"type": "WEB_DATA_STREAM",
|
||||
"displayName": "My Website",
|
||||
"webStreamData": {
|
||||
"defaultUri": "https://example.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Custom Dimensions
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties/{propertyId}/customDimensions
|
||||
```
|
||||
|
||||
### Create Custom Dimension
|
||||
```bash
|
||||
POST /google-analytics-admin/v1beta/properties/{propertyId}/customDimensions
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"parameterName": "user_type",
|
||||
"displayName": "User Type",
|
||||
"scope": "USER",
|
||||
"description": "Type of user (free, premium, enterprise)"
|
||||
}
|
||||
```
|
||||
|
||||
### List Custom Metrics
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties/{propertyId}/customMetrics
|
||||
```
|
||||
|
||||
### Create Custom Metric
|
||||
```bash
|
||||
POST /google-analytics-admin/v1beta/properties/{propertyId}/customMetrics
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"parameterName": "points_earned",
|
||||
"displayName": "Points Earned",
|
||||
"scope": "EVENT",
|
||||
"measurementUnit": "STANDARD",
|
||||
"description": "Number of loyalty points earned"
|
||||
}
|
||||
```
|
||||
|
||||
### List Conversion Events
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties/{propertyId}/conversionEvents
|
||||
```
|
||||
|
||||
### Create Conversion Event
|
||||
```bash
|
||||
POST /google-analytics-admin/v1beta/properties/{propertyId}/conversionEvents
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"eventName": "purchase"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Measurement Protocol Secret
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/properties/{propertyId}/dataStreams/{dataStreamId}/measurementProtocolSecrets
|
||||
```
|
||||
|
||||
### Create Measurement Protocol Secret
|
||||
```bash
|
||||
POST /google-analytics-admin/v1beta/properties/{propertyId}/dataStreams/{dataStreamId}/measurementProtocolSecrets
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"displayName": "Server-side tracking"
|
||||
}
|
||||
```
|
||||
|
||||
## Account Summaries
|
||||
|
||||
### List Account Summaries
|
||||
```bash
|
||||
GET /google-analytics-admin/v1beta/accountSummaries
|
||||
```
|
||||
Returns a lightweight summary of all accounts and properties the user has access to.
|
||||
|
||||
## Data Stream Types
|
||||
|
||||
- `WEB_DATA_STREAM` - Website tracking
|
||||
- `ANDROID_APP_DATA_STREAM` - Android app
|
||||
- `IOS_APP_DATA_STREAM` - iOS app
|
||||
|
||||
## Custom Dimension Scopes
|
||||
|
||||
- `EVENT` - Dimension applies to events
|
||||
- `USER` - Dimension applies to users
|
||||
|
||||
## Custom Metric Scopes
|
||||
|
||||
- `EVENT` - Metric applies to events
|
||||
|
||||
## Measurement Units (Custom Metrics)
|
||||
|
||||
- `STANDARD` - Integer or decimal
|
||||
- `CURRENCY` - Currency value
|
||||
- `FEET`, `METERS` - Distance
|
||||
- `MILES`, `KILOMETERS` - Distance
|
||||
- `MILLISECONDS`, `SECONDS`, `MINUTES`, `HOURS` - Time
|
||||
|
||||
## Industry Categories
|
||||
|
||||
- `AUTOMOTIVE`, `BUSINESS_AND_INDUSTRIAL_MARKETS`, `FINANCE`, `HEALTHCARE`
|
||||
- `TECHNOLOGY`, `TRAVEL`, `RETAIL`, `REAL_ESTATE`, `GAMES`
|
||||
- `ARTS_AND_ENTERTAINMENT`, `BEAUTY_AND_FITNESS`, `BOOKS_AND_LITERATURE`
|
||||
- `FOOD_AND_DRINK`, `HOBBIES_AND_LEISURE`, `HOME_AND_GARDEN`
|
||||
- `INTERNET_AND_TELECOM`, `JOBS_AND_EDUCATION`, `LAW_AND_GOVERNMENT`
|
||||
- `NEWS`, `ONLINE_COMMUNITIES`, `PEOPLE_AND_SOCIETY`, `PETS_AND_ANIMALS`
|
||||
- `REFERENCE`, `SCIENCE`, `SHOPPING`, `SPORTS`
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Property IDs are numeric (e.g., `properties/521310447`)
|
||||
- Account IDs are numeric (e.g., `accounts/123456789`)
|
||||
- GA4 properties only (Universal Analytics not supported)
|
||||
- Use `accountSummaries` endpoint to quickly list all accessible properties
|
||||
- The `filter` parameter on list properties uses format: `parent:accounts/{accountId}`
|
||||
- Use `updateMask` query parameter to specify which fields to update in PATCH requests
|
||||
- This API is for property/account management - use the Data API for running reports
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/analytics/devguides/config/admin/v1)
|
||||
- [List Accounts](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/accounts/list)
|
||||
- [List Properties](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties/list)
|
||||
- [Create Property](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties/create)
|
||||
- [Data Streams](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties.dataStreams)
|
||||
- [Custom Dimensions](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties.customDimensions)
|
||||
- [Custom Metrics](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties.customMetrics)
|
||||
- [Conversion Events](https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties.conversionEvents)
|
||||
151
skills/api-gateway/references/google-analytics-data.md
Normal file
151
skills/api-gateway/references/google-analytics-data.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# Google Analytics Data Routing Reference
|
||||
|
||||
**App name:** `google-analytics-data`
|
||||
**Base URL proxied:** `analyticsdata.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-analytics-data/v1beta/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Run Report
|
||||
```bash
|
||||
POST /google-analytics-data/v1beta/properties/{propertyId}:runReport
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"dateRanges": [{"startDate": "30daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "city"}],
|
||||
"metrics": [{"name": "activeUsers"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Run Realtime Report
|
||||
```bash
|
||||
POST /google-analytics-data/v1beta/properties/{propertyId}:runRealtimeReport
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"dimensions": [{"name": "country"}],
|
||||
"metrics": [{"name": "activeUsers"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Batch Run Reports
|
||||
```bash
|
||||
POST /google-analytics-data/v1beta/properties/{propertyId}:batchRunReports
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"dateRanges": [{"startDate": "7daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "country"}],
|
||||
"metrics": [{"name": "sessions"}]
|
||||
},
|
||||
{
|
||||
"dateRanges": [{"startDate": "7daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "deviceCategory"}],
|
||||
"metrics": [{"name": "sessions"}]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Get Metadata (available dimensions/metrics)
|
||||
```bash
|
||||
GET /google-analytics-data/v1beta/properties/{propertyId}/metadata
|
||||
```
|
||||
|
||||
## Common Report Examples
|
||||
|
||||
### Page Views by Page
|
||||
```json
|
||||
{
|
||||
"dateRanges": [{"startDate": "30daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "pagePath"}],
|
||||
"metrics": [{"name": "screenPageViews"}],
|
||||
"orderBys": [{"metric": {"metricName": "screenPageViews"}, "desc": true}],
|
||||
"limit": 10
|
||||
}
|
||||
```
|
||||
|
||||
### Users by Country
|
||||
```json
|
||||
{
|
||||
"dateRanges": [{"startDate": "30daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "country"}],
|
||||
"metrics": [{"name": "activeUsers"}, {"name": "sessions"}],
|
||||
"orderBys": [{"metric": {"metricName": "activeUsers"}, "desc": true}]
|
||||
}
|
||||
```
|
||||
|
||||
### Traffic Sources
|
||||
```json
|
||||
{
|
||||
"dateRanges": [{"startDate": "30daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "sessionSource"}, {"name": "sessionMedium"}],
|
||||
"metrics": [{"name": "sessions"}, {"name": "conversions"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Device Breakdown
|
||||
```json
|
||||
{
|
||||
"dateRanges": [{"startDate": "7daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "deviceCategory"}],
|
||||
"metrics": [{"name": "activeUsers"}, {"name": "sessions"}, {"name": "bounceRate"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Daily Sessions Trend
|
||||
```json
|
||||
{
|
||||
"dateRanges": [{"startDate": "30daysAgo", "endDate": "today"}],
|
||||
"dimensions": [{"name": "date"}],
|
||||
"metrics": [{"name": "sessions"}, {"name": "activeUsers"}],
|
||||
"orderBys": [{"dimension": {"dimensionName": "date"}}]
|
||||
}
|
||||
```
|
||||
|
||||
## Common Dimensions
|
||||
|
||||
- `date`, `dateHour`, `dateHourMinute`
|
||||
- `country`, `city`, `region`
|
||||
- `deviceCategory`, `browser`, `operatingSystem`
|
||||
- `pagePath`, `pageTitle`, `landingPage`
|
||||
- `sessionSource`, `sessionMedium`, `sessionCampaignName`
|
||||
- `eventName`
|
||||
|
||||
## Common Metrics
|
||||
|
||||
- `activeUsers`, `newUsers`, `totalUsers`
|
||||
- `sessions`, `sessionsPerUser`
|
||||
- `screenPageViews`, `screenPageViewsPerSession`
|
||||
- `bounceRate`, `averageSessionDuration`
|
||||
- `conversions`, `eventCount`
|
||||
|
||||
## Date Formats
|
||||
|
||||
- Relative: `today`, `yesterday`, `7daysAgo`, `30daysAgo`
|
||||
- Absolute: `2026-01-01`
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Property IDs are numeric (e.g., `521310447` from URL `p521310447`)
|
||||
- GA4 properties only (Universal Analytics not supported)
|
||||
- Use metadata endpoint to discover available dimensions/metrics
|
||||
- Results are paginated with `limit` and `offset`
|
||||
- This API is for running reports only - listing properties requires the Admin API
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/analytics/devguides/reporting/data/v1)
|
||||
- [Run Report](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport)
|
||||
- [Run Realtime Report](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runRealtimeReport)
|
||||
- [Batch Run Reports](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/batchRunReports)
|
||||
- [Get Metadata](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/getMetadata)
|
||||
139
skills/api-gateway/references/google-calendar.md
Normal file
139
skills/api-gateway/references/google-calendar.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# Google Calendar Routing Reference
|
||||
|
||||
**App name:** `google-calendar`
|
||||
**Base URL proxied:** `www.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-calendar/calendar/v3/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Calendars
|
||||
```bash
|
||||
GET /google-calendar/calendar/v3/users/me/calendarList
|
||||
```
|
||||
|
||||
### Get Calendar
|
||||
```bash
|
||||
GET /google-calendar/calendar/v3/calendars/{calendarId}
|
||||
```
|
||||
|
||||
Use `primary` for the user's primary calendar.
|
||||
|
||||
### List Events
|
||||
```bash
|
||||
GET /google-calendar/calendar/v3/calendars/primary/events?maxResults=10&orderBy=startTime&singleEvents=true
|
||||
```
|
||||
|
||||
With time bounds:
|
||||
```bash
|
||||
GET /google-calendar/calendar/v3/calendars/primary/events?timeMin=2024-01-01T00:00:00Z&timeMax=2024-12-31T23:59:59Z&singleEvents=true&orderBy=startTime
|
||||
```
|
||||
|
||||
### Get Event
|
||||
```bash
|
||||
GET /google-calendar/calendar/v3/calendars/primary/events/{eventId}
|
||||
```
|
||||
|
||||
### Insert Event
|
||||
```bash
|
||||
POST /google-calendar/calendar/v3/calendars/primary/events
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"summary": "Team Meeting",
|
||||
"description": "Weekly sync",
|
||||
"start": {
|
||||
"dateTime": "2024-01-15T10:00:00",
|
||||
"timeZone": "America/Los_Angeles"
|
||||
},
|
||||
"end": {
|
||||
"dateTime": "2024-01-15T11:00:00",
|
||||
"timeZone": "America/Los_Angeles"
|
||||
},
|
||||
"attendees": [
|
||||
{"email": "attendee@example.com"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
All-day event:
|
||||
```bash
|
||||
POST /google-calendar/calendar/v3/calendars/primary/events
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"summary": "All Day Event",
|
||||
"start": {"date": "2024-01-15"},
|
||||
"end": {"date": "2024-01-16"}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Event
|
||||
```bash
|
||||
PUT /google-calendar/calendar/v3/calendars/primary/events/{eventId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"summary": "Updated Meeting Title",
|
||||
"start": {"dateTime": "2024-01-15T10:00:00Z"},
|
||||
"end": {"dateTime": "2024-01-15T11:00:00Z"}
|
||||
}
|
||||
```
|
||||
|
||||
### Patch Event (partial update)
|
||||
```bash
|
||||
PATCH /google-calendar/calendar/v3/calendars/primary/events/{eventId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"summary": "New Title Only"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Event
|
||||
```bash
|
||||
DELETE /google-calendar/calendar/v3/calendars/primary/events/{eventId}
|
||||
```
|
||||
|
||||
### Quick Add Event (natural language)
|
||||
```bash
|
||||
POST /google-calendar/calendar/v3/calendars/primary/events/quickAdd?text=Meeting+with+John+tomorrow+at+3pm
|
||||
```
|
||||
|
||||
### Free/Busy Query
|
||||
```bash
|
||||
POST /google-calendar/calendar/v3/freeBusy
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"timeMin": "2024-01-15T00:00:00Z",
|
||||
"timeMax": "2024-01-16T00:00:00Z",
|
||||
"items": [{"id": "primary"}]
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Use `primary` as calendarId for the user's main calendar
|
||||
- Times must be in RFC3339 format (e.g., `2026-01-15T10:00:00Z`)
|
||||
- For recurring events, use `singleEvents=true` to expand instances
|
||||
- `orderBy=startTime` requires `singleEvents=true`
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/calendar/api/v3/reference)
|
||||
- [List Calendars](https://developers.google.com/workspace/calendar/api/v3/reference/calendarList/list)
|
||||
- [Get Calendar](https://developers.google.com/workspace/calendar/api/v3/reference/calendarList/get)
|
||||
- [List Events](https://developers.google.com/workspace/calendar/api/v3/reference/events/list)
|
||||
- [Get Event](https://developers.google.com/workspace/calendar/api/v3/reference/events/get)
|
||||
- [Insert Event](https://developers.google.com/workspace/calendar/api/v3/reference/events/insert)
|
||||
- [Update Event](https://developers.google.com/workspace/calendar/api/v3/reference/events/update)
|
||||
- [Patch Event](https://developers.google.com/workspace/calendar/api/v3/reference/events/patch)
|
||||
- [Delete Event](https://developers.google.com/workspace/calendar/api/v3/reference/events/delete)
|
||||
- [Quick Add Event](https://developers.google.com/workspace/calendar/api/v3/reference/events/quickAdd)
|
||||
- [Free/Busy Query](https://developers.google.com/workspace/calendar/api/v3/reference/freebusy/query)
|
||||
139
skills/api-gateway/references/google-contacts.md
Normal file
139
skills/api-gateway/references/google-contacts.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# Google Contacts Routing Reference
|
||||
|
||||
**App name:** `google-contacts`
|
||||
**Base URL proxied:** `people.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-contacts/v1/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Contacts
|
||||
```bash
|
||||
GET /google-contacts/v1/people/me/connections?personFields=names,emailAddresses,phoneNumbers&pageSize=100
|
||||
```
|
||||
|
||||
### Get Contact
|
||||
```bash
|
||||
GET /google-contacts/v1/people/{resourceName}?personFields=names,emailAddresses,phoneNumbers
|
||||
```
|
||||
|
||||
Example: `GET /google-contacts/v1/people/c1234567890?personFields=names,emailAddresses`
|
||||
|
||||
### Create Contact
|
||||
```bash
|
||||
POST /google-contacts/v1/people:createContact
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"names": [{"givenName": "John", "familyName": "Doe"}],
|
||||
"emailAddresses": [{"value": "john@example.com"}],
|
||||
"phoneNumbers": [{"value": "+1-555-0123"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Contact
|
||||
```bash
|
||||
PATCH /google-contacts/v1/people/{resourceName}:updateContact?updatePersonFields=names,emailAddresses
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"etag": "%EgcBAgkLLjc9...",
|
||||
"names": [{"givenName": "John", "familyName": "Smith"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Contact
|
||||
```bash
|
||||
DELETE /google-contacts/v1/people/{resourceName}:deleteContact
|
||||
```
|
||||
|
||||
### Batch Get Contacts
|
||||
```bash
|
||||
GET /google-contacts/v1/people:batchGet?resourceNames=people/c123&resourceNames=people/c456&personFields=names
|
||||
```
|
||||
|
||||
### Batch Create Contacts
|
||||
```bash
|
||||
POST /google-contacts/v1/people:batchCreateContacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contacts": [{"contactPerson": {"names": [{"givenName": "Alice"}]}}],
|
||||
"readMask": "names"
|
||||
}
|
||||
```
|
||||
|
||||
### Batch Delete Contacts
|
||||
```bash
|
||||
POST /google-contacts/v1/people:batchDeleteContacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"resourceNames": ["people/c123", "people/c456"]
|
||||
}
|
||||
```
|
||||
|
||||
### Search Contacts
|
||||
```bash
|
||||
GET /google-contacts/v1/people:searchContacts?query=John&readMask=names,emailAddresses
|
||||
```
|
||||
|
||||
### List Contact Groups
|
||||
```bash
|
||||
GET /google-contacts/v1/contactGroups?pageSize=100
|
||||
```
|
||||
|
||||
### Get Contact Group
|
||||
```bash
|
||||
GET /google-contacts/v1/contactGroups/{resourceName}?maxMembers=100
|
||||
```
|
||||
|
||||
### Create Contact Group
|
||||
```bash
|
||||
POST /google-contacts/v1/contactGroups
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contactGroup": {"name": "Work Contacts"}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Contact Group
|
||||
```bash
|
||||
DELETE /google-contacts/v1/contactGroups/{resourceName}?deleteContacts=false
|
||||
```
|
||||
|
||||
### Modify Group Members
|
||||
```bash
|
||||
POST /google-contacts/v1/contactGroups/{resourceName}/members:modify
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"resourceNamesToAdd": ["people/c123"],
|
||||
"resourceNamesToRemove": ["people/c456"]
|
||||
}
|
||||
```
|
||||
|
||||
### List Other Contacts
|
||||
```bash
|
||||
GET /google-contacts/v1/otherContacts?readMask=names,emailAddresses&pageSize=100
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Resource names for contacts: `people/c{id}` (e.g., `people/c1234567890`)
|
||||
- Resource names for groups: `contactGroups/{id}` (e.g., `contactGroups/starred`)
|
||||
- System groups: `starred`, `friends`, `family`, `coworkers`, `myContacts`, `all`, `blocked`
|
||||
- `personFields` parameter is required for most read operations
|
||||
- Include `etag` when updating to prevent concurrent modification issues
|
||||
- Pagination uses `pageToken` parameter
|
||||
|
||||
## Resources
|
||||
|
||||
- [Google People API Overview](https://developers.google.com/people/api/rest)
|
||||
- [People Resource](https://developers.google.com/people/api/rest/v1/people)
|
||||
- [Contact Groups Resource](https://developers.google.com/people/api/rest/v1/contactGroups)
|
||||
158
skills/api-gateway/references/google-docs.md
Normal file
158
skills/api-gateway/references/google-docs.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# Google Docs Routing Reference
|
||||
|
||||
**App name:** `google-docs`
|
||||
**Base URL proxied:** `docs.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-docs/v1/documents/{documentId}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Document
|
||||
```bash
|
||||
GET /google-docs/v1/documents/{documentId}
|
||||
```
|
||||
|
||||
### Create Document
|
||||
```bash
|
||||
POST /google-docs/v1/documents
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "New Document"
|
||||
}
|
||||
```
|
||||
|
||||
### Batch Update Document
|
||||
```bash
|
||||
POST /google-docs/v1/documents/{documentId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"insertText": {
|
||||
"location": {"index": 1},
|
||||
"text": "Hello, World!"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Common Requests for batchUpdate
|
||||
|
||||
### Insert Text
|
||||
```json
|
||||
{
|
||||
"insertText": {
|
||||
"location": {"index": 1},
|
||||
"text": "Text to insert"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Content
|
||||
```json
|
||||
{
|
||||
"deleteContentRange": {
|
||||
"range": {
|
||||
"startIndex": 1,
|
||||
"endIndex": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Replace All Text
|
||||
```json
|
||||
{
|
||||
"replaceAllText": {
|
||||
"containsText": {
|
||||
"text": "{{placeholder}}",
|
||||
"matchCase": true
|
||||
},
|
||||
"replaceText": "replacement value"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Insert Table
|
||||
```json
|
||||
{
|
||||
"insertTable": {
|
||||
"location": {"index": 1},
|
||||
"rows": 3,
|
||||
"columns": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Insert Inline Image
|
||||
```json
|
||||
{
|
||||
"insertInlineImage": {
|
||||
"location": {"index": 1},
|
||||
"uri": "https://example.com/image.png",
|
||||
"objectSize": {
|
||||
"height": {"magnitude": 100, "unit": "PT"},
|
||||
"width": {"magnitude": 100, "unit": "PT"}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Text Style
|
||||
```json
|
||||
{
|
||||
"updateTextStyle": {
|
||||
"range": {
|
||||
"startIndex": 1,
|
||||
"endIndex": 10
|
||||
},
|
||||
"textStyle": {
|
||||
"bold": true,
|
||||
"fontSize": {"magnitude": 14, "unit": "PT"}
|
||||
},
|
||||
"fields": "bold,fontSize"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Insert Page Break
|
||||
```json
|
||||
{
|
||||
"insertPageBreak": {
|
||||
"location": {"index": 1}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Document Structure
|
||||
|
||||
The document body contains:
|
||||
- `content` - Array of structural elements
|
||||
- `body.content[].paragraph` - Paragraph element
|
||||
- `body.content[].table` - Table element
|
||||
- `body.content[].sectionBreak` - Section break
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Index positions are 1-based (document starts at index 1)
|
||||
- Use `endOfSegmentLocation` to append at end
|
||||
- Multiple requests in batchUpdate are applied atomically
|
||||
- Get document first to find correct indices for updates
|
||||
- The `fields` parameter in style updates uses field mask syntax
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/docs/api/how-tos/overview)
|
||||
- [Get Document](https://developers.google.com/docs/api/reference/rest/v1/documents/get)
|
||||
- [Create Document](https://developers.google.com/docs/api/reference/rest/v1/documents/create)
|
||||
- [Batch Update](https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate)
|
||||
- [Request Types Reference](https://developers.google.com/docs/api/reference/rest/v1/documents/request)
|
||||
- [Document Structure Guide](https://developers.google.com/docs/api/concepts/structure)
|
||||
158
skills/api-gateway/references/google-drive.md
Normal file
158
skills/api-gateway/references/google-drive.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# Google Drive Routing Reference
|
||||
|
||||
**App name:** `google-drive`
|
||||
**Base URL proxied:** `www.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-drive/drive/v3/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Files
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files?pageSize=10
|
||||
```
|
||||
|
||||
With query:
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files?q=name%20contains%20'report'&pageSize=10
|
||||
```
|
||||
|
||||
Only folders:
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files?q=mimeType='application/vnd.google-apps.folder'
|
||||
```
|
||||
|
||||
Files in specific folder:
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files?q='FOLDER_ID'+in+parents
|
||||
```
|
||||
|
||||
With fields:
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files?fields=files(id,name,mimeType,createdTime,modifiedTime,size)
|
||||
```
|
||||
|
||||
### Get File Metadata
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files/{fileId}?fields=id,name,mimeType,size,createdTime
|
||||
```
|
||||
|
||||
### Download File Content
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files/{fileId}?alt=media
|
||||
```
|
||||
|
||||
### Export Google Docs (to PDF, DOCX, etc.)
|
||||
```bash
|
||||
GET /google-drive/drive/v3/files/{fileId}/export?mimeType=application/pdf
|
||||
```
|
||||
|
||||
### Create File (metadata only)
|
||||
```bash
|
||||
POST /google-drive/drive/v3/files
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Document",
|
||||
"mimeType": "application/vnd.google-apps.document"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Folder
|
||||
```bash
|
||||
POST /google-drive/drive/v3/files
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Folder",
|
||||
"mimeType": "application/vnd.google-apps.folder"
|
||||
}
|
||||
```
|
||||
|
||||
### Update File Metadata
|
||||
```bash
|
||||
PATCH /google-drive/drive/v3/files/{fileId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Renamed File"
|
||||
}
|
||||
```
|
||||
|
||||
### Move File to Folder
|
||||
```bash
|
||||
PATCH /google-drive/drive/v3/files/{fileId}?addParents=NEW_FOLDER_ID&removeParents=OLD_FOLDER_ID
|
||||
```
|
||||
|
||||
### Delete File
|
||||
```bash
|
||||
DELETE /google-drive/drive/v3/files/{fileId}
|
||||
```
|
||||
|
||||
### Copy File
|
||||
```bash
|
||||
POST /google-drive/drive/v3/files/{fileId}/copy
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Copy of File"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Permission (Share File)
|
||||
```bash
|
||||
POST /google-drive/drive/v3/files/{fileId}/permissions
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"role": "reader",
|
||||
"type": "user",
|
||||
"emailAddress": "user@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
## Query Operators
|
||||
|
||||
Use in the `q` parameter:
|
||||
- `name = 'exact name'`
|
||||
- `name contains 'partial'`
|
||||
- `mimeType = 'application/pdf'`
|
||||
- `'folderId' in parents`
|
||||
- `trashed = false`
|
||||
- `modifiedTime > '2024-01-01T00:00:00'`
|
||||
|
||||
Combine with `and`:
|
||||
```
|
||||
name contains 'report' and mimeType = 'application/pdf'
|
||||
```
|
||||
|
||||
## Common MIME Types
|
||||
|
||||
- `application/vnd.google-apps.document` - Google Docs
|
||||
- `application/vnd.google-apps.spreadsheet` - Google Sheets
|
||||
- `application/vnd.google-apps.presentation` - Google Slides
|
||||
- `application/vnd.google-apps.folder` - Folder
|
||||
- `application/pdf` - PDF
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Use `fields` parameter to limit response data
|
||||
- Pagination uses `pageToken` from previous response's `nextPageToken`
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/workspace/drive/api/reference/rest/v3#rest-resource:-v3.about)
|
||||
- [List Files](https://developers.google.com/drive/api/reference/rest/v3/files/list)
|
||||
- [Get File](https://developers.google.com/drive/api/reference/rest/v3/files/get)
|
||||
- [Create File](https://developers.google.com/drive/api/reference/rest/v3/files/create)
|
||||
- [Update File](https://developers.google.com/drive/api/reference/rest/v3/files/update)
|
||||
- [Delete File](https://developers.google.com/drive/api/reference/rest/v3/files/delete)
|
||||
- [Copy File](https://developers.google.com/drive/api/reference/rest/v3/files/copy)
|
||||
- [Export File](https://developers.google.com/drive/api/reference/rest/v3/files/export)
|
||||
- [Create Permission](https://developers.google.com/workspace/drive/api/reference/rest/v3/permissions/create)
|
||||
- [Search Query Syntax](https://developers.google.com/drive/api/guides/search-files)
|
||||
206
skills/api-gateway/references/google-forms.md
Normal file
206
skills/api-gateway/references/google-forms.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# Google Forms Routing Reference
|
||||
|
||||
**App name:** `google-forms`
|
||||
**Base URL proxied:** `forms.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-forms/v1/forms/{formId}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Form
|
||||
```bash
|
||||
GET /google-forms/v1/forms/{formId}
|
||||
```
|
||||
|
||||
### Create Form
|
||||
```bash
|
||||
POST /google-forms/v1/forms
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"info": {
|
||||
"title": "Customer Feedback Survey"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Batch Update Form
|
||||
```bash
|
||||
POST /google-forms/v1/forms/{formId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"createItem": {
|
||||
"item": {
|
||||
"title": "What is your name?",
|
||||
"questionItem": {
|
||||
"question": {
|
||||
"required": true,
|
||||
"textQuestion": {
|
||||
"paragraph": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {"index": 0}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### List Responses
|
||||
```bash
|
||||
GET /google-forms/v1/forms/{formId}/responses
|
||||
```
|
||||
|
||||
### Get Response
|
||||
```bash
|
||||
GET /google-forms/v1/forms/{formId}/responses/{responseId}
|
||||
```
|
||||
|
||||
## Common Requests for batchUpdate
|
||||
|
||||
### Create Text Question
|
||||
```json
|
||||
{
|
||||
"createItem": {
|
||||
"item": {
|
||||
"title": "Question text",
|
||||
"questionItem": {
|
||||
"question": {
|
||||
"required": true,
|
||||
"textQuestion": {"paragraph": false}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {"index": 0}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Create Multiple Choice Question
|
||||
```json
|
||||
{
|
||||
"createItem": {
|
||||
"item": {
|
||||
"title": "Select an option",
|
||||
"questionItem": {
|
||||
"question": {
|
||||
"required": true,
|
||||
"choiceQuestion": {
|
||||
"type": "RADIO",
|
||||
"options": [
|
||||
{"value": "Option A"},
|
||||
{"value": "Option B"},
|
||||
{"value": "Option C"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {"index": 0}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Create Checkbox Question
|
||||
```json
|
||||
{
|
||||
"createItem": {
|
||||
"item": {
|
||||
"title": "Select all that apply",
|
||||
"questionItem": {
|
||||
"question": {
|
||||
"choiceQuestion": {
|
||||
"type": "CHECKBOX",
|
||||
"options": [
|
||||
{"value": "Option 1"},
|
||||
{"value": "Option 2"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {"index": 0}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Create Scale Question
|
||||
```json
|
||||
{
|
||||
"createItem": {
|
||||
"item": {
|
||||
"title": "Rate your experience",
|
||||
"questionItem": {
|
||||
"question": {
|
||||
"scaleQuestion": {
|
||||
"low": 1,
|
||||
"high": 5,
|
||||
"lowLabel": "Poor",
|
||||
"highLabel": "Excellent"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {"index": 0}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Form Info
|
||||
```json
|
||||
{
|
||||
"updateFormInfo": {
|
||||
"info": {
|
||||
"title": "New Form Title",
|
||||
"description": "Form description"
|
||||
},
|
||||
"updateMask": "title,description"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Item
|
||||
```json
|
||||
{
|
||||
"deleteItem": {
|
||||
"location": {"index": 0}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Question Types
|
||||
|
||||
- `textQuestion` - Short or paragraph text
|
||||
- `choiceQuestion` - Radio, checkbox, or dropdown
|
||||
- `scaleQuestion` - Linear scale
|
||||
- `dateQuestion` - Date picker
|
||||
- `timeQuestion` - Time picker
|
||||
- `fileUploadQuestion` - File upload
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Form IDs can be found in the form URL
|
||||
- Responses include `answers` keyed by question ID
|
||||
- Use `updateMask` to specify which fields to update
|
||||
- Location index is 0-based for item positioning
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/workspace/forms/api/reference/rest)
|
||||
- [Get Form](https://developers.google.com/workspace/forms/api/reference/rest/v1/forms/get)
|
||||
- [Create Form](https://developers.google.com/workspace/forms/api/reference/rest/v1/forms/create)
|
||||
- [Batch Update Form](https://developers.google.com/workspace/forms/api/reference/rest/v1/forms/batchUpdate)
|
||||
- [Batch Update Request Types](https://developers.google.com/workspace/forms/api/reference/rest/v1/forms/batchUpdate#request)
|
||||
- [List Responses](https://developers.google.com/workspace/forms/api/reference/rest/v1/forms.responses/list)
|
||||
- [Get Response](https://developers.google.com/workspace/forms/api/reference/rest/v1/forms.responses/get)
|
||||
- [Form Resource](https://developers.google.com/workspace/forms/api/reference/rest/v1/forms)
|
||||
146
skills/api-gateway/references/google-mail.md
Normal file
146
skills/api-gateway/references/google-mail.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Gmail Routing Reference
|
||||
|
||||
**App name:** `google-mail`
|
||||
**Base URL proxied:** `gmail.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-mail/gmail/v1/users/me/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Messages
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/messages?maxResults=10
|
||||
```
|
||||
|
||||
With query filter:
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/messages?q=is:unread&maxResults=10
|
||||
```
|
||||
|
||||
### Get Message
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/messages/{messageId}
|
||||
```
|
||||
|
||||
With metadata only:
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/messages/{messageId}?format=metadata&metadataHeaders=From&metadataHeaders=Subject&metadataHeaders=Date
|
||||
```
|
||||
|
||||
### Send Message
|
||||
```bash
|
||||
POST /google-mail/gmail/v1/users/me/messages/send
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"raw": "BASE64_ENCODED_EMAIL"
|
||||
}
|
||||
```
|
||||
|
||||
### List Labels
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/labels
|
||||
```
|
||||
|
||||
### List Threads
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/threads?maxResults=10
|
||||
```
|
||||
|
||||
### Get Thread
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/threads/{threadId}
|
||||
```
|
||||
|
||||
### Modify Message Labels
|
||||
```bash
|
||||
POST /google-mail/gmail/v1/users/me/messages/{messageId}/modify
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"addLabelIds": ["STARRED"],
|
||||
"removeLabelIds": ["UNREAD"]
|
||||
}
|
||||
```
|
||||
|
||||
### Trash Message
|
||||
```bash
|
||||
POST /google-mail/gmail/v1/users/me/messages/{messageId}/trash
|
||||
```
|
||||
|
||||
### Create Draft
|
||||
```bash
|
||||
POST /google-mail/gmail/v1/users/me/drafts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"message": {
|
||||
"raw": "BASE64URL_ENCODED_EMAIL"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Draft
|
||||
```bash
|
||||
PUT /google-mail/gmail/v1/users/me/drafts/{draftId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"message": {
|
||||
"raw": "BASE64URL_ENCODED_EMAIL"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Send Draft
|
||||
```bash
|
||||
POST /google-mail/gmail/v1/users/me/drafts/send
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"id": "{draftId}"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Profile
|
||||
```bash
|
||||
GET /google-mail/gmail/v1/users/me/profile
|
||||
```
|
||||
|
||||
## Query Operators
|
||||
|
||||
Use in the `q` parameter:
|
||||
- `is:unread` - Unread messages
|
||||
- `is:starred` - Starred messages
|
||||
- `from:email@example.com` - From specific sender
|
||||
- `to:email@example.com` - To specific recipient
|
||||
- `subject:keyword` - Subject contains keyword
|
||||
- `after:2024/01/01` - After date
|
||||
- `before:2024/12/31` - Before date
|
||||
- `has:attachment` - Has attachments
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Use `me` as userId for the authenticated user
|
||||
- Message body is base64url encoded in the `raw` field
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/gmail/api/reference/rest)
|
||||
- [List Messages](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/list)
|
||||
- [Get Message](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/get)
|
||||
- [Send Message](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/send)
|
||||
- [Modify Message Labels](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify)
|
||||
- [Trash Message](https://developers.google.com/gmail/api/reference/rest/v1/users.messages/trash)
|
||||
- [List Threads](https://developers.google.com/gmail/api/reference/rest/v1/users.threads/list)
|
||||
- [Get Thread](https://developers.google.com/gmail/api/reference/rest/v1/users.threads/get)
|
||||
- [List Labels](https://developers.google.com/gmail/api/reference/rest/v1/users.labels/list)
|
||||
- [Create Draft](https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/create)
|
||||
- [Update Draft](https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/update)
|
||||
- [Send Draft](https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/send)
|
||||
- [Get Profile](https://developers.google.com/gmail/api/reference/rest/v1/users/getProfile)
|
||||
121
skills/api-gateway/references/google-meet.md
Normal file
121
skills/api-gateway/references/google-meet.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# Google Meet Routing Reference
|
||||
|
||||
**App name:** `google-meet`
|
||||
**Base URL proxied:** `meet.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-meet/v2/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Create Space
|
||||
```bash
|
||||
POST /google-meet/v2/spaces
|
||||
Content-Type: application/json
|
||||
|
||||
{}
|
||||
```
|
||||
|
||||
Response:
|
||||
```json
|
||||
{
|
||||
"name": "spaces/abc123",
|
||||
"meetingUri": "https://meet.google.com/abc-defg-hij",
|
||||
"meetingCode": "abc-defg-hij",
|
||||
"config": {
|
||||
"accessType": "OPEN",
|
||||
"entryPointAccess": "ALL"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Get Space
|
||||
```bash
|
||||
GET /google-meet/v2/spaces/{spaceId}
|
||||
```
|
||||
|
||||
### Update Space
|
||||
```bash
|
||||
PATCH /google-meet/v2/spaces/{spaceId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"config": {
|
||||
"accessType": "TRUSTED"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### End Active Call
|
||||
```bash
|
||||
POST /google-meet/v2/spaces/{spaceId}:endActiveConference
|
||||
```
|
||||
|
||||
### List Conference Records
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords
|
||||
```
|
||||
|
||||
With filter:
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords?filter=space.name="spaces/abc123"
|
||||
```
|
||||
|
||||
### Get Conference Record
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}
|
||||
```
|
||||
|
||||
### List Participants
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}/participants
|
||||
```
|
||||
|
||||
### Get Participant
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}/participants/{participantId}
|
||||
```
|
||||
|
||||
### List Recordings
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}/recordings
|
||||
```
|
||||
|
||||
### Get Recording
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}/recordings/{recordingId}
|
||||
```
|
||||
|
||||
### List Transcripts
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}/transcripts
|
||||
```
|
||||
|
||||
### Get Transcript
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}/transcripts/{transcriptId}
|
||||
```
|
||||
|
||||
### List Transcript Entries
|
||||
```bash
|
||||
GET /google-meet/v2/conferenceRecords/{conferenceRecordId}/transcripts/{transcriptId}/entries
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Spaces are persistent meeting rooms that can be reused
|
||||
- Conference records are created when a meeting starts and track meeting history
|
||||
- Access types: `OPEN` (anyone with link), `TRUSTED` (organization members only), `RESTRICTED` (invited only)
|
||||
- Recordings and transcripts require Google Workspace with recording enabled
|
||||
|
||||
## Resources
|
||||
|
||||
- [Google Meet API Overview](https://developers.google.com/meet/api/reference/rest)
|
||||
- [Spaces](https://developers.google.com/meet/api/reference/rest/v2/spaces)
|
||||
- [Conference Records](https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords)
|
||||
- [Participants](https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords.participants)
|
||||
- [Recordings](https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords.recordings)
|
||||
- [Transcripts](https://developers.google.com/meet/api/reference/rest/v2/conferenceRecords.transcripts)
|
||||
96
skills/api-gateway/references/google-merchant.md
Normal file
96
skills/api-gateway/references/google-merchant.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# Google Merchant Routing Reference
|
||||
|
||||
**App name:** `google-merchant`
|
||||
**Base URL proxied:** `merchantapi.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-merchant/{sub-api}/{version}/accounts/{accountId}/{resource}
|
||||
```
|
||||
|
||||
The Merchant API uses sub-APIs: `products`, `accounts`, `datasources`, `reports`, `promotions`, `inventories`, `notifications`, `conversions`, `lfp`
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Products
|
||||
```bash
|
||||
GET /google-merchant/products/v1/accounts/{accountId}/products
|
||||
```
|
||||
|
||||
### Get Product
|
||||
```bash
|
||||
GET /google-merchant/products/v1/accounts/{accountId}/products/{productId}
|
||||
```
|
||||
|
||||
Product ID format: `contentLanguage~feedLabel~offerId` (e.g., `en~US~sku123`)
|
||||
|
||||
### Insert Product Input
|
||||
```bash
|
||||
POST /google-merchant/products/v1/accounts/{accountId}/productInputs:insert?dataSource=accounts/{accountId}/dataSources/{dataSourceId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"offerId": "sku123",
|
||||
"contentLanguage": "en",
|
||||
"feedLabel": "US",
|
||||
"attributes": {
|
||||
"title": "Product Title",
|
||||
"link": "https://example.com/product",
|
||||
"imageLink": "https://example.com/image.jpg",
|
||||
"availability": "in_stock",
|
||||
"price": {"amountMicros": "19990000", "currencyCode": "USD"}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Product Input
|
||||
```bash
|
||||
DELETE /google-merchant/products/v1/accounts/{accountId}/productInputs/{productId}?dataSource=accounts/{accountId}/dataSources/{dataSourceId}
|
||||
```
|
||||
|
||||
### List Data Sources
|
||||
```bash
|
||||
GET /google-merchant/datasources/v1/accounts/{accountId}/dataSources
|
||||
```
|
||||
|
||||
### Search Reports
|
||||
```bash
|
||||
POST /google-merchant/reports/v1/accounts/{accountId}/reports:search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "SELECT offer_id, title, clicks FROM product_performance_view WHERE date BETWEEN '2026-01-01' AND '2026-01-31'"
|
||||
}
|
||||
```
|
||||
|
||||
### List Promotions
|
||||
```bash
|
||||
GET /google-merchant/promotions/v1/accounts/{accountId}/promotions
|
||||
```
|
||||
|
||||
### Get Account
|
||||
```bash
|
||||
GET /google-merchant/accounts/v1/accounts/{accountId}
|
||||
```
|
||||
|
||||
### List Local Inventories
|
||||
```bash
|
||||
GET /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/localInventories
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Account ID is your Merchant Center numeric ID (visible in MC URL)
|
||||
- Product IDs use format `contentLanguage~feedLabel~offerId`
|
||||
- Monetary values use micros (divide by 1,000,000)
|
||||
- Products can only be inserted in data sources of type `API`
|
||||
- Uses token-based pagination with `pageSize` and `pageToken`
|
||||
|
||||
## Resources
|
||||
|
||||
- [Merchant API Overview](https://developers.google.com/merchant/api/overview)
|
||||
- [Merchant API Reference](https://developers.google.com/merchant/api/reference/rest)
|
||||
- [Products Guide](https://developers.google.com/merchant/api/guides/products/overview)
|
||||
- [Reports Guide](https://developers.google.com/merchant/api/guides/reports)
|
||||
147
skills/api-gateway/references/google-play.md
Normal file
147
skills/api-gateway/references/google-play.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# Google Play Routing Reference
|
||||
|
||||
**App name:** `google-play`
|
||||
**Base URL proxied:** `androidpublisher.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-play/androidpublisher/v3/applications/{packageName}/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### In-App Products
|
||||
|
||||
#### List In-App Products
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/inappproducts
|
||||
```
|
||||
|
||||
#### Get In-App Product
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}
|
||||
```
|
||||
|
||||
#### Create In-App Product
|
||||
```bash
|
||||
POST /google-play/androidpublisher/v3/applications/{packageName}/inappproducts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"packageName": "com.example.app",
|
||||
"sku": "premium_upgrade",
|
||||
"status": "active",
|
||||
"purchaseType": "managedUser",
|
||||
"defaultPrice": {
|
||||
"priceMicros": "990000",
|
||||
"currency": "USD"
|
||||
},
|
||||
"listings": {
|
||||
"en-US": {
|
||||
"title": "Premium Upgrade",
|
||||
"description": "Unlock all premium features"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete In-App Product
|
||||
```bash
|
||||
DELETE /google-play/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}
|
||||
```
|
||||
|
||||
### Subscriptions
|
||||
|
||||
#### List Subscriptions
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/subscriptions
|
||||
```
|
||||
|
||||
#### Get Subscription
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/subscriptions/{productId}
|
||||
```
|
||||
|
||||
### Purchases
|
||||
|
||||
#### Get Product Purchase
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}
|
||||
```
|
||||
|
||||
#### Acknowledge Purchase
|
||||
```bash
|
||||
POST /google-play/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:acknowledge
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"developerPayload": "optional payload"
|
||||
}
|
||||
```
|
||||
|
||||
#### Get Subscription Purchase
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}
|
||||
```
|
||||
|
||||
#### Cancel Subscription
|
||||
```bash
|
||||
POST /google-play/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel
|
||||
```
|
||||
|
||||
### Reviews
|
||||
|
||||
#### List Reviews
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/reviews
|
||||
```
|
||||
|
||||
#### Get Review
|
||||
```bash
|
||||
GET /google-play/androidpublisher/v3/applications/{packageName}/reviews/{reviewId}
|
||||
```
|
||||
|
||||
#### Reply to Review
|
||||
```bash
|
||||
POST /google-play/androidpublisher/v3/applications/{packageName}/reviews/{reviewId}:reply
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"replyText": "Thank you for your feedback!"
|
||||
}
|
||||
```
|
||||
|
||||
### Edits (App Updates)
|
||||
|
||||
#### Create Edit
|
||||
```bash
|
||||
POST /google-play/androidpublisher/v3/applications/{packageName}/edits
|
||||
```
|
||||
|
||||
#### Commit Edit
|
||||
```bash
|
||||
POST /google-play/androidpublisher/v3/applications/{packageName}/edits/{editId}:commit
|
||||
```
|
||||
|
||||
#### Delete Edit
|
||||
```bash
|
||||
DELETE /google-play/androidpublisher/v3/applications/{packageName}/edits/{editId}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace `{packageName}` with your app's package name (e.g., `com.example.app`)
|
||||
- The Google Play Developer API requires the app to be published on Google Play
|
||||
- Subscription management requires the app to have active subscriptions configured
|
||||
- Edits are transactional - create an edit, make changes, then commit
|
||||
- Prices are in micros (1,000,000 micros = 1 unit of currency)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Android Publisher API Overview](https://developers.google.com/android-publisher)
|
||||
- [In-App Products](https://developers.google.com/android-publisher/api-ref/rest/v3/inappproducts)
|
||||
- [Subscriptions](https://developers.google.com/android-publisher/api-ref/rest/v3/monetization.subscriptions)
|
||||
- [Purchases](https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.products)
|
||||
- [Reviews](https://developers.google.com/android-publisher/api-ref/rest/v3/reviews)
|
||||
- [Edits](https://developers.google.com/android-publisher/api-ref/rest/v3/edits)
|
||||
189
skills/api-gateway/references/google-search-console.md
Normal file
189
skills/api-gateway/references/google-search-console.md
Normal file
@@ -0,0 +1,189 @@
|
||||
# Google Search Console Routing Reference
|
||||
|
||||
**App name:** `google-search-console`
|
||||
**Base URL proxied:** `www.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-search-console/webmasters/v3/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Sites
|
||||
```bash
|
||||
GET /google-search-console/webmasters/v3/sites
|
||||
```
|
||||
|
||||
### Get Site
|
||||
```bash
|
||||
GET /google-search-console/webmasters/v3/sites/{siteUrl}
|
||||
```
|
||||
|
||||
Note: Site URL must be URL-encoded (e.g., `https%3A%2F%2Fexample.com%2F`)
|
||||
|
||||
### Search Analytics Query
|
||||
```bash
|
||||
POST /google-search-console/webmasters/v3/sites/{siteUrl}/searchAnalytics/query
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["query"],
|
||||
"rowLimit": 100
|
||||
}
|
||||
```
|
||||
|
||||
### List Sitemaps
|
||||
```bash
|
||||
GET /google-search-console/webmasters/v3/sites/{siteUrl}/sitemaps
|
||||
```
|
||||
|
||||
### Get Sitemap
|
||||
```bash
|
||||
GET /google-search-console/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}
|
||||
```
|
||||
|
||||
### Submit Sitemap
|
||||
```bash
|
||||
PUT /google-search-console/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}
|
||||
```
|
||||
|
||||
### Delete Sitemap
|
||||
```bash
|
||||
DELETE /google-search-console/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}
|
||||
```
|
||||
|
||||
## Search Analytics Query Examples
|
||||
|
||||
### Top Queries
|
||||
```json
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["query"],
|
||||
"rowLimit": 25,
|
||||
"startRow": 0
|
||||
}
|
||||
```
|
||||
|
||||
### Top Pages
|
||||
```json
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["page"],
|
||||
"rowLimit": 25
|
||||
}
|
||||
```
|
||||
|
||||
### Queries by Country
|
||||
```json
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["query", "country"],
|
||||
"rowLimit": 100
|
||||
}
|
||||
```
|
||||
|
||||
### Device Breakdown
|
||||
```json
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["device"],
|
||||
"rowLimit": 10
|
||||
}
|
||||
```
|
||||
|
||||
### Daily Performance
|
||||
```json
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["date"],
|
||||
"rowLimit": 31
|
||||
}
|
||||
```
|
||||
|
||||
### Filtered Query
|
||||
```json
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["query"],
|
||||
"dimensionFilterGroups": [{
|
||||
"filters": [{
|
||||
"dimension": "query",
|
||||
"operator": "contains",
|
||||
"expression": "keyword"
|
||||
}]
|
||||
}],
|
||||
"rowLimit": 100
|
||||
}
|
||||
```
|
||||
|
||||
### Search Type Filter
|
||||
```json
|
||||
{
|
||||
"startDate": "2024-01-01",
|
||||
"endDate": "2024-01-31",
|
||||
"dimensions": ["query"],
|
||||
"type": "image",
|
||||
"rowLimit": 25
|
||||
}
|
||||
```
|
||||
|
||||
## Dimensions
|
||||
|
||||
- `query` - Search query
|
||||
- `page` - Page URL
|
||||
- `country` - Country code (ISO 3166-1 alpha-3)
|
||||
- `device` - DESKTOP, MOBILE, TABLET
|
||||
- `date` - Date in YYYY-MM-DD format
|
||||
- `searchAppearance` - Rich result types
|
||||
|
||||
## Metrics (returned automatically)
|
||||
|
||||
- `clicks` - Number of clicks
|
||||
- `impressions` - Number of impressions
|
||||
- `ctr` - Click-through rate
|
||||
- `position` - Average position
|
||||
|
||||
## Filter Operators
|
||||
|
||||
- `equals`
|
||||
- `contains`
|
||||
- `notContains`
|
||||
- `includingRegex`
|
||||
- `excludingRegex`
|
||||
|
||||
## Search Types
|
||||
|
||||
- `web` - Web search (default)
|
||||
- `image` - Image search
|
||||
- `video` - Video search
|
||||
- `news` - News search
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Site URLs must be URL-encoded in the path (e.g., `sc-domain%3Aexample.com`)
|
||||
- Date range is limited to 16 months of data
|
||||
- Maximum 25,000 rows per request
|
||||
- Use `startRow` for pagination
|
||||
- Data has a 2-3 day delay
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Reference](https://developers.google.com/webmaster-tools/v1/api_reference_index)
|
||||
- [List Sites](https://developers.google.com/webmaster-tools/v1/sites/list)
|
||||
- [Get Site](https://developers.google.com/webmaster-tools/v1/sites/get)
|
||||
- [Search Analytics Query](https://developers.google.com/webmaster-tools/v1/searchanalytics/query)
|
||||
- [List Sitemaps](https://developers.google.com/webmaster-tools/v1/sitemaps/list)
|
||||
- [Get Sitemap](https://developers.google.com/webmaster-tools/v1/sitemaps/get)
|
||||
- [Submit Sitemap](https://developers.google.com/webmaster-tools/v1/sitemaps/submit)
|
||||
- [Delete Sitemap](https://developers.google.com/webmaster-tools/v1/sitemaps/delete)
|
||||
240
skills/api-gateway/references/google-sheets.md
Normal file
240
skills/api-gateway/references/google-sheets.md
Normal file
@@ -0,0 +1,240 @@
|
||||
# Google Sheets Routing Reference
|
||||
|
||||
**App name:** `google-sheets`
|
||||
**Base URL proxied:** `sheets.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-sheets/v4/spreadsheets/{spreadsheetId}/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Spreadsheet Metadata
|
||||
```bash
|
||||
GET /google-sheets/v4/spreadsheets/{spreadsheetId}
|
||||
```
|
||||
|
||||
### Get Values
|
||||
```bash
|
||||
GET /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}
|
||||
```
|
||||
|
||||
Example:
|
||||
```bash
|
||||
GET /google-sheets/v4/spreadsheets/SHEET_ID/values/Sheet1!A1:D10
|
||||
```
|
||||
|
||||
### Get Multiple Ranges
|
||||
```bash
|
||||
GET /google-sheets/v4/spreadsheets/{spreadsheetId}/values:batchGet?ranges=Sheet1!A1:B10&ranges=Sheet2!A1:C5
|
||||
```
|
||||
|
||||
### Update Values
|
||||
```bash
|
||||
PUT /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"values": [
|
||||
["A1", "B1", "C1"],
|
||||
["A2", "B2", "C2"]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Append Values
|
||||
```bash
|
||||
POST /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"values": [
|
||||
["New Row 1", "Data", "More Data"],
|
||||
["New Row 2", "Data", "More Data"]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Batch Update Values
|
||||
```bash
|
||||
POST /google-sheets/v4/spreadsheets/{spreadsheetId}/values:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"valueInputOption": "USER_ENTERED",
|
||||
"data": [
|
||||
{"range": "Sheet1!A1:B2", "values": [["A1", "B1"], ["A2", "B2"]]},
|
||||
{"range": "Sheet1!D1:E2", "values": [["D1", "E1"], ["D2", "E2"]]}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Clear Values
|
||||
```bash
|
||||
POST /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}:clear
|
||||
```
|
||||
|
||||
### Create Spreadsheet
|
||||
```bash
|
||||
POST /google-sheets/v4/spreadsheets
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {"title": "New Spreadsheet"},
|
||||
"sheets": [{"properties": {"title": "Sheet1"}}]
|
||||
}
|
||||
```
|
||||
|
||||
### Batch Update (formatting, add sheets, etc.)
|
||||
```bash
|
||||
POST /google-sheets/v4/spreadsheets/{spreadsheetId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{"addSheet": {"properties": {"title": "New Sheet"}}}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Common batchUpdate Requests
|
||||
|
||||
See [full list of request types](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request).
|
||||
|
||||
### Update Cells with Formatting
|
||||
```json
|
||||
{
|
||||
"updateCells": {
|
||||
"rows": [
|
||||
{"values": [{"userEnteredValue": {"stringValue": "Name"}}, {"userEnteredValue": {"numberValue": 100}}]}
|
||||
],
|
||||
"fields": "userEnteredValue",
|
||||
"start": {"sheetId": 0, "rowIndex": 0, "columnIndex": 0}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Format Header Row (Bold + Background Color)
|
||||
```json
|
||||
{
|
||||
"repeatCell": {
|
||||
"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 1, "startColumnIndex": 0, "endColumnIndex": 3},
|
||||
"cell": {
|
||||
"userEnteredFormat": {
|
||||
"backgroundColor": {"red": 0.2, "green": 0.6, "blue": 0.9},
|
||||
"textFormat": {"bold": true}
|
||||
}
|
||||
},
|
||||
"fields": "userEnteredFormat(backgroundColor,textFormat)"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Auto-Resize Columns
|
||||
```json
|
||||
{
|
||||
"autoResizeDimensions": {
|
||||
"dimensions": {"sheetId": 0, "dimension": "COLUMNS", "startIndex": 0, "endIndex": 3}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Rename Sheet
|
||||
```json
|
||||
{
|
||||
"updateSheetProperties": {
|
||||
"properties": {"sheetId": 0, "title": "NewName"},
|
||||
"fields": "title"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Insert Rows/Columns
|
||||
```json
|
||||
{
|
||||
"insertDimension": {
|
||||
"range": {"sheetId": 0, "dimension": "ROWS", "startIndex": 1, "endIndex": 3},
|
||||
"inheritFromBefore": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Sort Range
|
||||
```json
|
||||
{
|
||||
"sortRange": {
|
||||
"range": {"sheetId": 0, "startRowIndex": 1, "endRowIndex": 10, "startColumnIndex": 0, "endColumnIndex": 3},
|
||||
"sortSpecs": [{"dimensionIndex": 1, "sortOrder": "DESCENDING"}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Add Conditional Formatting
|
||||
```json
|
||||
{
|
||||
"addConditionalFormatRule": {
|
||||
"rule": {
|
||||
"ranges": [{"sheetId": 0, "startRowIndex": 1, "endRowIndex": 10, "startColumnIndex": 1, "endColumnIndex": 2}],
|
||||
"booleanRule": {
|
||||
"condition": {"type": "NUMBER_GREATER_THAN_EQ", "values": [{"userEnteredValue": "90"}]},
|
||||
"format": {"backgroundColor": {"red": 0.7, "green": 1, "blue": 0.7}}
|
||||
}
|
||||
},
|
||||
"index": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Add Filter
|
||||
```json
|
||||
{
|
||||
"setBasicFilter": {
|
||||
"filter": {
|
||||
"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 100, "startColumnIndex": 0, "endColumnIndex": 5}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Sheet
|
||||
```json
|
||||
{
|
||||
"deleteSheet": {"sheetId": 123456789}
|
||||
}
|
||||
```
|
||||
|
||||
## Value Input Options
|
||||
|
||||
- `RAW` - Values are stored as-is
|
||||
- `USER_ENTERED` - Values are parsed as if typed into the UI (formulas executed, numbers parsed)
|
||||
|
||||
## Range Notation
|
||||
|
||||
- `Sheet1!A1:D10` - Specific range
|
||||
- `Sheet1!A:D` - Entire columns A through D
|
||||
- `Sheet1!1:10` - Entire rows 1 through 10
|
||||
- `Sheet1` - Entire sheet
|
||||
- `A1:D10` - Range in first sheet
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Range in URL path must be URL-encoded (`!` → `%21`, `:` → `%3A`)
|
||||
- Use `valueInputOption=USER_ENTERED` to parse formulas and numbers
|
||||
- Delete spreadsheets via Google Drive API
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.google.com/workspace/sheets/api/reference/rest)
|
||||
- [Get Spreadsheet](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/get)
|
||||
- [Create Spreadsheet](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/create)
|
||||
- [Batch Update](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/batchUpdate)
|
||||
- [Batch Update Request Types](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request)
|
||||
- [Get Values](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/get)
|
||||
- [Update Values](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/update)
|
||||
- [Append Values](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/append)
|
||||
- [Batch Get Values](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchGet)
|
||||
- [Batch Update Values](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdate)
|
||||
- [Clear Values](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/clear)
|
||||
215
skills/api-gateway/references/google-slides.md
Normal file
215
skills/api-gateway/references/google-slides.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# Google Slides Routing Reference
|
||||
|
||||
**App name:** `google-slides`
|
||||
**Base URL proxied:** `slides.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-slides/v1/presentations/{presentationId}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Create Presentation
|
||||
```bash
|
||||
POST /google-slides/v1/presentations
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "My Presentation"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Presentation
|
||||
```bash
|
||||
GET /google-slides/v1/presentations/{presentationId}
|
||||
```
|
||||
|
||||
### Get Page (Slide)
|
||||
```bash
|
||||
GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}
|
||||
```
|
||||
|
||||
### Get Page Thumbnail
|
||||
```bash
|
||||
GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}/thumbnail
|
||||
```
|
||||
|
||||
### Batch Update (All Modifications)
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [...]
|
||||
}
|
||||
```
|
||||
|
||||
### Create Slide
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"createSlide": {
|
||||
"objectId": "slide_001",
|
||||
"slideLayoutReference": {
|
||||
"predefinedLayout": "TITLE_AND_BODY"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Predefined layouts: `BLANK`, `TITLE`, `TITLE_AND_BODY`, `TITLE_AND_TWO_COLUMNS`, `TITLE_ONLY`, `SECTION_HEADER`, `ONE_COLUMN_TEXT`, `MAIN_POINT`, `BIG_NUMBER`
|
||||
|
||||
### Insert Text
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"insertText": {
|
||||
"objectId": "{shapeId}",
|
||||
"text": "Hello, World!",
|
||||
"insertionIndex": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Create Shape (Text Box)
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"createShape": {
|
||||
"objectId": "shape_001",
|
||||
"shapeType": "TEXT_BOX",
|
||||
"elementProperties": {
|
||||
"pageObjectId": "{slideId}",
|
||||
"size": {
|
||||
"width": {"magnitude": 300, "unit": "PT"},
|
||||
"height": {"magnitude": 100, "unit": "PT"}
|
||||
},
|
||||
"transform": {
|
||||
"scaleX": 1,
|
||||
"scaleY": 1,
|
||||
"translateX": 100,
|
||||
"translateY": 100,
|
||||
"unit": "PT"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Create Image
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"createImage": {
|
||||
"objectId": "image_001",
|
||||
"url": "https://example.com/image.png",
|
||||
"elementProperties": {
|
||||
"pageObjectId": "{slideId}",
|
||||
"size": {
|
||||
"width": {"magnitude": 200, "unit": "PT"},
|
||||
"height": {"magnitude": 200, "unit": "PT"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Object
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"deleteObject": {
|
||||
"objectId": "{objectId}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Replace All Text (Template Substitution)
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"replaceAllText": {
|
||||
"containsText": {
|
||||
"text": "{{placeholder}}",
|
||||
"matchCase": true
|
||||
},
|
||||
"replaceText": "Actual Value"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Text Style
|
||||
```bash
|
||||
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"requests": [
|
||||
{
|
||||
"updateTextStyle": {
|
||||
"objectId": "{shapeId}",
|
||||
"textRange": {"type": "ALL"},
|
||||
"style": {
|
||||
"bold": true,
|
||||
"fontSize": {"magnitude": 24, "unit": "PT"}
|
||||
},
|
||||
"fields": "bold,fontSize"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Object IDs must be unique within a presentation
|
||||
- Use batchUpdate for all modifications (adding slides, text, shapes, etc.)
|
||||
- Multiple requests in a batchUpdate are applied atomically
|
||||
- Sizes and positions use PT (points) as the unit (72 points = 1 inch)
|
||||
- Use `replaceAllText` for template-based presentation generation
|
||||
|
||||
## Resources
|
||||
|
||||
- [Slides API Overview](https://developers.google.com/slides/api/reference/rest)
|
||||
- [Presentations](https://developers.google.com/slides/api/reference/rest/v1/presentations)
|
||||
- [Pages](https://developers.google.com/slides/api/reference/rest/v1/presentations.pages)
|
||||
- [BatchUpdate Requests](https://developers.google.com/slides/api/reference/rest/v1/presentations/batchUpdate)
|
||||
- [Page Layouts](https://developers.google.com/slides/api/reference/rest/v1/presentations/create#predefinedlayout)
|
||||
156
skills/api-gateway/references/google-tasks.md
Normal file
156
skills/api-gateway/references/google-tasks.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# Google Tasks Routing Reference
|
||||
|
||||
**App name:** `google-tasks`
|
||||
**Base URL proxied:** `tasks.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-tasks/tasks/v1/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Task Lists
|
||||
|
||||
#### List Task Lists
|
||||
```bash
|
||||
GET /google-tasks/tasks/v1/users/@me/lists
|
||||
```
|
||||
|
||||
With pagination:
|
||||
```bash
|
||||
GET /google-tasks/tasks/v1/users/@me/lists?maxResults=20
|
||||
```
|
||||
|
||||
#### Get Task List
|
||||
```bash
|
||||
GET /google-tasks/tasks/v1/users/@me/lists/{tasklistId}
|
||||
```
|
||||
|
||||
#### Create Task List
|
||||
```bash
|
||||
POST /google-tasks/tasks/v1/users/@me/lists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "New Task List"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Task List
|
||||
```bash
|
||||
PATCH /google-tasks/tasks/v1/users/@me/lists/{tasklistId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Updated Title"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Task List
|
||||
```bash
|
||||
DELETE /google-tasks/tasks/v1/users/@me/lists/{tasklistId}
|
||||
```
|
||||
|
||||
### Tasks
|
||||
|
||||
#### List Tasks
|
||||
```bash
|
||||
GET /google-tasks/tasks/v1/lists/{tasklistId}/tasks
|
||||
```
|
||||
|
||||
With filters:
|
||||
```bash
|
||||
GET /google-tasks/tasks/v1/lists/{tasklistId}/tasks?showCompleted=true&showHidden=true&maxResults=50
|
||||
```
|
||||
|
||||
With date filters:
|
||||
```bash
|
||||
GET /google-tasks/tasks/v1/lists/{tasklistId}/tasks?dueMin=2026-01-01T00:00:00Z&dueMax=2026-12-31T23:59:59Z
|
||||
```
|
||||
|
||||
#### Get Task
|
||||
```bash
|
||||
GET /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
|
||||
```
|
||||
|
||||
#### Create Task
|
||||
```bash
|
||||
POST /google-tasks/tasks/v1/lists/{tasklistId}/tasks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "New Task",
|
||||
"notes": "Task description",
|
||||
"due": "2026-03-01T00:00:00.000Z"
|
||||
}
|
||||
```
|
||||
|
||||
Create subtask:
|
||||
```bash
|
||||
POST /google-tasks/tasks/v1/lists/{tasklistId}/tasks?parent={parentTaskId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Subtask"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Task (partial)
|
||||
```bash
|
||||
PATCH /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Updated Title",
|
||||
"status": "completed"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Task (full replace)
|
||||
```bash
|
||||
PUT /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Replaced Task",
|
||||
"notes": "New notes",
|
||||
"status": "needsAction"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Task
|
||||
```bash
|
||||
DELETE /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
|
||||
```
|
||||
|
||||
#### Move Task
|
||||
```bash
|
||||
POST /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}/move?previous={previousTaskId}
|
||||
```
|
||||
|
||||
Make subtask:
|
||||
```bash
|
||||
POST /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}/move?parent={parentTaskId}
|
||||
```
|
||||
|
||||
#### Clear Completed Tasks
|
||||
```bash
|
||||
POST /google-tasks/tasks/v1/lists/{tasklistId}/clear
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Task list and task IDs are opaque base64-encoded strings
|
||||
- Status values: "needsAction" or "completed"
|
||||
- Dates must be in RFC 3339 format (e.g., `2026-01-15T00:00:00.000Z`)
|
||||
- Maximum title length: 1024 characters
|
||||
- Maximum notes length: 8192 characters
|
||||
|
||||
## Resources
|
||||
|
||||
- [Google Tasks API Overview](https://developers.google.com/workspace/tasks)
|
||||
- [Tasks Reference](https://developers.google.com/workspace/tasks/reference/rest/v1/tasks)
|
||||
- [TaskLists Reference](https://developers.google.com/workspace/tasks/reference/rest/v1/tasklists)
|
||||
236
skills/api-gateway/references/google-workspace-admin.md
Normal file
236
skills/api-gateway/references/google-workspace-admin.md
Normal file
@@ -0,0 +1,236 @@
|
||||
# Google Workspace Admin Routing Reference
|
||||
|
||||
**App name:** `google-workspace-admin`
|
||||
**Base URL proxied:** `admin.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/google-workspace-admin/admin/directory/v1/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Users
|
||||
|
||||
#### List Users
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/users?customer=my_customer&maxResults=100
|
||||
```
|
||||
|
||||
With search query:
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/users?customer=my_customer&query=email:john*
|
||||
```
|
||||
|
||||
#### Get User
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/users/{userKey}
|
||||
```
|
||||
|
||||
`userKey` can be the user's primary email or unique user ID.
|
||||
|
||||
#### Create User
|
||||
```bash
|
||||
POST /google-workspace-admin/admin/directory/v1/users
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"primaryEmail": "newuser@example.com",
|
||||
"name": {
|
||||
"givenName": "Jane",
|
||||
"familyName": "Smith"
|
||||
},
|
||||
"password": "temporaryPassword123!",
|
||||
"changePasswordAtNextLogin": true,
|
||||
"orgUnitPath": "/Engineering"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update User
|
||||
```bash
|
||||
PUT /google-workspace-admin/admin/directory/v1/users/{userKey}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": {
|
||||
"givenName": "Jane",
|
||||
"familyName": "Smith-Johnson"
|
||||
},
|
||||
"suspended": false
|
||||
}
|
||||
```
|
||||
|
||||
#### Patch User (partial update)
|
||||
```bash
|
||||
PATCH /google-workspace-admin/admin/directory/v1/users/{userKey}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"suspended": true
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete User
|
||||
```bash
|
||||
DELETE /google-workspace-admin/admin/directory/v1/users/{userKey}
|
||||
```
|
||||
|
||||
#### Make User Admin
|
||||
```bash
|
||||
POST /google-workspace-admin/admin/directory/v1/users/{userKey}/makeAdmin
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"status": true
|
||||
}
|
||||
```
|
||||
|
||||
### Groups
|
||||
|
||||
#### List Groups
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/groups?customer=my_customer
|
||||
```
|
||||
|
||||
#### Get Group
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/groups/{groupKey}
|
||||
```
|
||||
|
||||
#### Create Group
|
||||
```bash
|
||||
POST /google-workspace-admin/admin/directory/v1/groups
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email": "engineering@example.com",
|
||||
"name": "Engineering Team",
|
||||
"description": "All engineering staff"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Group
|
||||
```bash
|
||||
PUT /google-workspace-admin/admin/directory/v1/groups/{groupKey}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Engineering Department",
|
||||
"description": "Updated description"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Group
|
||||
```bash
|
||||
DELETE /google-workspace-admin/admin/directory/v1/groups/{groupKey}
|
||||
```
|
||||
|
||||
### Group Members
|
||||
|
||||
#### List Members
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/groups/{groupKey}/members
|
||||
```
|
||||
|
||||
#### Add Member
|
||||
```bash
|
||||
POST /google-workspace-admin/admin/directory/v1/groups/{groupKey}/members
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"role": "MEMBER"
|
||||
}
|
||||
```
|
||||
|
||||
Roles: `OWNER`, `MANAGER`, `MEMBER`
|
||||
|
||||
#### Update Member Role
|
||||
```bash
|
||||
PATCH /google-workspace-admin/admin/directory/v1/groups/{groupKey}/members/{memberKey}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"role": "MANAGER"
|
||||
}
|
||||
```
|
||||
|
||||
#### Remove Member
|
||||
```bash
|
||||
DELETE /google-workspace-admin/admin/directory/v1/groups/{groupKey}/members/{memberKey}
|
||||
```
|
||||
|
||||
### Organizational Units
|
||||
|
||||
#### List Org Units
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/customer/my_customer/orgunits
|
||||
```
|
||||
|
||||
#### Get Org Unit
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/customer/my_customer/orgunits/{orgUnitPath}
|
||||
```
|
||||
|
||||
#### Create Org Unit
|
||||
```bash
|
||||
POST /google-workspace-admin/admin/directory/v1/customer/my_customer/orgunits
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Engineering",
|
||||
"parentOrgUnitPath": "/",
|
||||
"description": "Engineering department"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Org Unit
|
||||
```bash
|
||||
DELETE /google-workspace-admin/admin/directory/v1/customer/my_customer/orgunits/{orgUnitPath}
|
||||
```
|
||||
|
||||
### Domains
|
||||
|
||||
#### List Domains
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/customer/my_customer/domains
|
||||
```
|
||||
|
||||
#### Get Domain
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/customer/my_customer/domains/{domainName}
|
||||
```
|
||||
|
||||
### Roles
|
||||
|
||||
#### List Roles
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/customer/my_customer/roles
|
||||
```
|
||||
|
||||
#### List Role Assignments
|
||||
```bash
|
||||
GET /google-workspace-admin/admin/directory/v1/customer/my_customer/roleassignments
|
||||
```
|
||||
|
||||
#### Create Role Assignment
|
||||
```bash
|
||||
POST /google-workspace-admin/admin/directory/v1/customer/my_customer/roleassignments
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"roleId": "123456789",
|
||||
"assignedTo": "user_id",
|
||||
"scopeType": "CUSTOMER"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Use `my_customer` as the customer ID for your own domain
|
||||
- User keys can be primary email or unique user ID
|
||||
- Group keys can be group email or unique group ID
|
||||
- Org unit paths start with `/` (e.g., `/Engineering/Frontend`)
|
||||
- Admin privileges are required for most operations
|
||||
- Password must meet Google's complexity requirements
|
||||
147
skills/api-gateway/references/gumroad.md
Normal file
147
skills/api-gateway/references/gumroad.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# Gumroad Routing Reference
|
||||
|
||||
**App name:** `gumroad`
|
||||
**Base URL proxied:** `api.gumroad.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/gumroad/v2/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /gumroad/v2/user
|
||||
```
|
||||
|
||||
### List Products
|
||||
```bash
|
||||
GET /gumroad/v2/products
|
||||
```
|
||||
|
||||
### Get Product
|
||||
```bash
|
||||
GET /gumroad/v2/products/{product_id}
|
||||
```
|
||||
|
||||
### Update Product
|
||||
```bash
|
||||
PUT /gumroad/v2/products/{product_id}
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
name=Updated%20Name
|
||||
```
|
||||
|
||||
### Delete Product
|
||||
```bash
|
||||
DELETE /gumroad/v2/products/{product_id}
|
||||
```
|
||||
|
||||
### List Sales
|
||||
```bash
|
||||
GET /gumroad/v2/sales
|
||||
GET /gumroad/v2/sales?after=2026-01-01&before=2026-12-31
|
||||
```
|
||||
|
||||
### Get Sale
|
||||
```bash
|
||||
GET /gumroad/v2/sales/{sale_id}
|
||||
```
|
||||
|
||||
### List Subscribers
|
||||
```bash
|
||||
GET /gumroad/v2/products/{product_id}/subscribers
|
||||
```
|
||||
|
||||
### Get Subscriber
|
||||
```bash
|
||||
GET /gumroad/v2/subscribers/{subscriber_id}
|
||||
```
|
||||
|
||||
### Verify License
|
||||
```bash
|
||||
POST /gumroad/v2/licenses/verify
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
product_id={product_id}&license_key={license_key}
|
||||
```
|
||||
|
||||
### Enable/Disable License
|
||||
```bash
|
||||
PUT /gumroad/v2/licenses/enable
|
||||
PUT /gumroad/v2/licenses/disable
|
||||
```
|
||||
|
||||
### List Resource Subscriptions (Webhooks)
|
||||
```bash
|
||||
GET /gumroad/v2/resource_subscriptions?resource_name=sale
|
||||
```
|
||||
|
||||
Resource names: `sale`, `refund`, `dispute`, `dispute_won`, `cancellation`, `subscription_updated`, `subscription_ended`, `subscription_restarted`
|
||||
|
||||
### Create Resource Subscription
|
||||
```bash
|
||||
PUT /gumroad/v2/resource_subscriptions
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
resource_name=sale&post_url=https://example.com/webhook
|
||||
```
|
||||
|
||||
### Delete Resource Subscription
|
||||
```bash
|
||||
DELETE /gumroad/v2/resource_subscriptions/{resource_subscription_id}
|
||||
```
|
||||
|
||||
### Offer Codes
|
||||
```bash
|
||||
GET /gumroad/v2/products/{product_id}/offer_codes
|
||||
POST /gumroad/v2/products/{product_id}/offer_codes
|
||||
PUT /gumroad/v2/products/{product_id}/offer_codes/{offer_code_id}
|
||||
DELETE /gumroad/v2/products/{product_id}/offer_codes/{offer_code_id}
|
||||
```
|
||||
|
||||
### Variant Categories
|
||||
```bash
|
||||
GET /gumroad/v2/products/{product_id}/variant_categories
|
||||
POST /gumroad/v2/products/{product_id}/variant_categories
|
||||
DELETE /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}
|
||||
```
|
||||
|
||||
### Variants
|
||||
```bash
|
||||
GET /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variants
|
||||
POST /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variants
|
||||
PUT /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variants/{variant_id}
|
||||
DELETE /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variants/{variant_id}
|
||||
```
|
||||
|
||||
### Custom Fields
|
||||
```bash
|
||||
GET /gumroad/v2/products/{product_id}/custom_fields
|
||||
POST /gumroad/v2/products/{product_id}/custom_fields
|
||||
PUT /gumroad/v2/products/{product_id}/custom_fields/{name}
|
||||
DELETE /gumroad/v2/products/{product_id}/custom_fields/{name}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Page-based pagination:
|
||||
```bash
|
||||
GET /gumroad/v2/sales?page=1
|
||||
GET /gumroad/v2/sales?page=2
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- All responses include `success` boolean field
|
||||
- Product creation not available via API
|
||||
- POST/PUT use `application/x-www-form-urlencoded` (not JSON)
|
||||
- Prices in cents (500 = $5.00)
|
||||
- License keys are case-insensitive
|
||||
|
||||
## Resources
|
||||
|
||||
- [Gumroad API Documentation](https://gumroad.com/api)
|
||||
- [Create API Application](https://help.gumroad.com/article/280-create-application-api)
|
||||
357
skills/api-gateway/references/hubspot.md
Normal file
357
skills/api-gateway/references/hubspot.md
Normal file
@@ -0,0 +1,357 @@
|
||||
# HubSpot Routing Reference
|
||||
|
||||
**App name:** `hubspot`
|
||||
**Base URL proxied:** `api.hubapi.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/hubspot/crm/v3/objects/{objectType}/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Contacts
|
||||
|
||||
#### List Contacts
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/contacts?limit=100
|
||||
```
|
||||
|
||||
With properties:
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/contacts?limit=100&properties=email,firstname,lastname,phone
|
||||
```
|
||||
|
||||
With pagination:
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/contacts?limit=100&properties=email,firstname&after={cursor}
|
||||
```
|
||||
|
||||
#### Get Contact
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/contacts/{contactId}?properties=email,firstname,lastname
|
||||
```
|
||||
|
||||
#### Create Contact
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"email": "john@example.com",
|
||||
"firstname": "John",
|
||||
"lastname": "Doe",
|
||||
"phone": "+1234567890"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Contact
|
||||
```bash
|
||||
PATCH /hubspot/crm/v3/objects/contacts/{contactId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"phone": "+0987654321"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Contact
|
||||
```bash
|
||||
DELETE /hubspot/crm/v3/objects/contacts/{contactId}
|
||||
```
|
||||
|
||||
#### Search Contacts
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/contacts/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"filterGroups": [{
|
||||
"filters": [{
|
||||
"propertyName": "email",
|
||||
"operator": "EQ",
|
||||
"value": "john@example.com"
|
||||
}]
|
||||
}],
|
||||
"properties": ["email", "firstname", "lastname"]
|
||||
}
|
||||
```
|
||||
|
||||
### Companies
|
||||
|
||||
#### List Companies
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/companies?limit=100&properties=name,domain,industry
|
||||
```
|
||||
|
||||
#### Get Company
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/companies/{companyId}?properties=name,domain,industry
|
||||
```
|
||||
|
||||
#### Create Company
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/companies
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"name": "Acme Corp",
|
||||
"domain": "acme.com",
|
||||
"industry": "COMPUTER_SOFTWARE"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Note:** The `industry` property requires specific enum values (e.g., `COMPUTER_SOFTWARE`, `FINANCE`, `HEALTHCARE`), not free text like "Technology". Use the List Properties endpoint to get valid values.
|
||||
|
||||
#### Update Company
|
||||
```bash
|
||||
PATCH /hubspot/crm/v3/objects/companies/{companyId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"industry": "COMPUTER_SOFTWARE",
|
||||
"numberofemployees": "50"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Company
|
||||
```bash
|
||||
DELETE /hubspot/crm/v3/objects/companies/{companyId}
|
||||
```
|
||||
|
||||
#### Search Companies
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/companies/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"filterGroups": [{
|
||||
"filters": [{
|
||||
"propertyName": "domain",
|
||||
"operator": "CONTAINS_TOKEN",
|
||||
"value": "*"
|
||||
}]
|
||||
}],
|
||||
"properties": ["name", "domain"],
|
||||
"limit": 10
|
||||
}
|
||||
```
|
||||
|
||||
### Deals
|
||||
|
||||
#### List Deals
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/deals?limit=100&properties=dealname,amount,dealstage
|
||||
```
|
||||
|
||||
#### Get Deal
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/deals/{dealId}?properties=dealname,amount,dealstage
|
||||
```
|
||||
|
||||
#### Create Deal
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/deals
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"dealname": "New Deal",
|
||||
"amount": "10000",
|
||||
"dealstage": "appointmentscheduled"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Deal
|
||||
```bash
|
||||
PATCH /hubspot/crm/v3/objects/deals/{dealId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"amount": "15000",
|
||||
"dealstage": "qualifiedtobuy"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Deal
|
||||
```bash
|
||||
DELETE /hubspot/crm/v3/objects/deals/{dealId}
|
||||
```
|
||||
|
||||
#### Search Deals
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/deals/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"filterGroups": [{
|
||||
"filters": [{
|
||||
"propertyName": "amount",
|
||||
"operator": "GTE",
|
||||
"value": "1000"
|
||||
}]
|
||||
}],
|
||||
"properties": ["dealname", "amount", "dealstage"],
|
||||
"limit": 10
|
||||
}
|
||||
```
|
||||
|
||||
### Associations (v4 API)
|
||||
|
||||
#### Associate Objects
|
||||
```bash
|
||||
PUT /hubspot/crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/{toObjectType}/{toObjectId}
|
||||
Content-Type: application/json
|
||||
|
||||
[{"associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 279}]
|
||||
```
|
||||
|
||||
Common association type IDs:
|
||||
- `279` - Contact to Company
|
||||
- `3` - Deal to Contact
|
||||
- `341` - Deal to Company
|
||||
|
||||
#### List Associations
|
||||
```bash
|
||||
GET /hubspot/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}
|
||||
```
|
||||
|
||||
### Batch Operations
|
||||
|
||||
#### Batch Read
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/{objectType}/batch/read
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": ["email", "firstname"],
|
||||
"inputs": [{"id": "123"}, {"id": "456"}]
|
||||
}
|
||||
```
|
||||
|
||||
#### Batch Create
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/{objectType}/batch/create
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"inputs": [
|
||||
{"properties": {"email": "one@example.com", "firstname": "One"}},
|
||||
{"properties": {"email": "two@example.com", "firstname": "Two"}}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Batch Update
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/{objectType}/batch/update
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"inputs": [
|
||||
{"id": "123", "properties": {"firstname": "Updated"}},
|
||||
{"id": "456", "properties": {"firstname": "Also Updated"}}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Batch Archive
|
||||
```bash
|
||||
POST /hubspot/crm/v3/objects/{objectType}/batch/archive
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"inputs": [{"id": "123"}, {"id": "456"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Properties
|
||||
|
||||
#### List Properties
|
||||
```bash
|
||||
GET /hubspot/crm/v3/properties/{objectType}
|
||||
```
|
||||
|
||||
## Search Operators
|
||||
|
||||
- `EQ` - Equal to
|
||||
- `NEQ` - Not equal to
|
||||
- `LT` - Less than
|
||||
- `LTE` - Less than or equal to
|
||||
- `GT` - Greater than
|
||||
- `GTE` - Greater than or equal to
|
||||
- `CONTAINS_TOKEN` - Contains token
|
||||
- `NOT_CONTAINS_TOKEN` - Does not contain token
|
||||
|
||||
## Pagination
|
||||
|
||||
List endpoints return a `paging.next.after` cursor for pagination:
|
||||
```json
|
||||
{
|
||||
"results": [...],
|
||||
"paging": {
|
||||
"next": {
|
||||
"after": "12345",
|
||||
"link": "https://api.hubapi.com/..."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Use the `after` query parameter to fetch the next page:
|
||||
```bash
|
||||
GET /hubspot/crm/v3/objects/contacts?limit=100&after=12345
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- The `industry` property on companies requires specific enum values
|
||||
- Batch operations support up to 100 records per request
|
||||
- Archive/Delete is a soft delete - records can be restored within 90 days
|
||||
- Delete endpoints return HTTP 204 (No Content) on success
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developers.hubspot.com/docs/api/overview)
|
||||
- [List Contacts](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/basic/get-crm-v3-objects-contacts.md)
|
||||
- [Get Contact](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/basic/get-crm-v3-objects-contacts-contactId.md)
|
||||
- [Create Contact](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/basic/post-crm-v3-objects-contacts.md)
|
||||
- [Update Contact](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/basic/patch-crm-v3-objects-contacts-contactId.md)
|
||||
- [Archive Contact](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/basic/delete-crm-v3-objects-contacts-contactId.md)
|
||||
- [Merge Contacts](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/basic/post-crm-v3-objects-contacts-merge.md)
|
||||
- [GDPR Delete Contact](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/basic/post-crm-v3-objects-contacts-gdpr-delete.md)
|
||||
- [Search Contacts](https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/search/post-crm-v3-objects-contacts-search.md)
|
||||
- [List Companies](https://developers.hubspot.com/docs/api-reference/crm-companies-v3/basic/get-crm-v3-objects-companies.md)
|
||||
- [Get Company](https://developers.hubspot.com/docs/api-reference/crm-companies-v3/basic/get-crm-v3-objects-companies-companyId.md)
|
||||
- [Create Company](https://developers.hubspot.com/docs/api-reference/crm-companies-v3/basic/post-crm-v3-objects-companies.md)
|
||||
- [Update Company](https://developers.hubspot.com/docs/api-reference/crm-companies-v3/basic/patch-crm-v3-objects-companies-companyId.md)
|
||||
- [Archive Company](https://developers.hubspot.com/docs/api-reference/crm-companies-v3/basic/delete-crm-v3-objects-companies-companyId.md)
|
||||
- [Merge Companies](https://developers.hubspot.com/docs/api-reference/crm-companies-v3/basic/post-crm-v3-objects-companies-merge.md)
|
||||
- [Search Companies](https://developers.hubspot.com/docs/api-reference/crm-companies-v3/search/post-crm-v3-objects-companies-search.md)
|
||||
- [List Deals](https://developers.hubspot.com/docs/api-reference/crm-deals-v3/basic/get-crm-v3-objects-0-3.md)
|
||||
- [Get Deal](https://developers.hubspot.com/docs/api-reference/crm-deals-v3/basic/get-crm-v3-objects-0-3-dealId.md)
|
||||
- [Create Deal](https://developers.hubspot.com/docs/api-reference/crm-deals-v3/basic/post-crm-v3-objects-0-3.md)
|
||||
- [Update Deal](https://developers.hubspot.com/docs/api-reference/crm-deals-v3/basic/patch-crm-v3-objects-0-3-dealId.md)
|
||||
- [Archive Deal](https://developers.hubspot.com/docs/api-reference/crm-deals-v3/basic/delete-crm-v3-objects-0-3-dealId.md)
|
||||
- [Merge Deals](https://developers.hubspot.com/docs/api-reference/crm-deals-v3/basic/post-crm-v3-objects-0-3-merge.md)
|
||||
- [Search Deals](https://developers.hubspot.com/docs/api-reference/crm-deals-v3/search/post-crm-v3-objects-0-3-search.md)
|
||||
- [List Associations](https://developers.hubspot.com/docs/api-reference/crm-associations-v4/basic/get-crm-v4-objects-objectType-objectId-associations-toObjectType.md)
|
||||
- [Create Association](https://developers.hubspot.com/docs/api-reference/crm-associations-v4/basic/put-crm-v4-objects-objectType-objectId-associations-toObjectType-toObjectId.md)
|
||||
- [Delete Association](https://developers.hubspot.com/docs/api-reference/crm-associations-v4/basic/delete-crm-v4-objects-objectType-objectId-associations-toObjectType-toObjectId.md)
|
||||
- [List Properties](https://developers.hubspot.com/docs/api-reference/crm-properties-v3/core/get-crm-v3-properties-objectType.md)
|
||||
- [Get Property](https://developers.hubspot.com/docs/api-reference/crm-properties-v3/core/get-crm-v3-properties-objectType-propertyName.md)
|
||||
- [Create Property](https://developers.hubspot.com/docs/api-reference/crm-properties-v3/core/post-crm-v3-properties-objectType.md)
|
||||
- [Search Reference](https://developers.hubspot.com/docs/api/crm/search)
|
||||
181
skills/api-gateway/references/jira.md
Normal file
181
skills/api-gateway/references/jira.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# Jira Routing Reference
|
||||
|
||||
**App name:** `jira`
|
||||
**Base URL proxied:** `api.atlassian.com`
|
||||
|
||||
## Getting Cloud ID
|
||||
|
||||
Jira Cloud requires a cloud ID in the API path. First, get accessible resources:
|
||||
|
||||
```bash
|
||||
GET /jira/oauth/token/accessible-resources
|
||||
```
|
||||
|
||||
Response:
|
||||
```json
|
||||
[{
|
||||
"id": "62909843-b784-4c35-b770-e4e2a26f024b",
|
||||
"url": "https://yoursite.atlassian.net",
|
||||
"name": "yoursite",
|
||||
"scopes": ["read:jira-user", "read:jira-work", "write:jira-work"]
|
||||
}]
|
||||
```
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/jira/ex/jira/{cloudId}/rest/api/3/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Projects
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/project
|
||||
```
|
||||
|
||||
### Get Project
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}
|
||||
```
|
||||
|
||||
### Search Issues (JQL)
|
||||
Note: The old `/search` endpoint is deprecated. Use `/search/jql` with a bounded query.
|
||||
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/search/jql?jql=project%3DKEY%20order%20by%20created%20DESC&maxResults=20&fields=summary,status,assignee,created,priority
|
||||
```
|
||||
|
||||
### Get Issue
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}
|
||||
```
|
||||
|
||||
### Create Issue
|
||||
```bash
|
||||
POST /jira/ex/jira/{cloudId}/rest/api/3/issue
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"fields": {
|
||||
"project": {"key": "PROJ"},
|
||||
"summary": "Issue summary",
|
||||
"issuetype": {"name": "Task"}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Issue
|
||||
```bash
|
||||
PUT /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"fields": {
|
||||
"summary": "Updated summary"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Issue
|
||||
```bash
|
||||
DELETE /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}
|
||||
```
|
||||
|
||||
### Assign Issue
|
||||
```bash
|
||||
PUT /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/assignee
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"accountId": "712020:5aff718e-6fe0-4548-82f4-f44ec481e5e7"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Transitions
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions
|
||||
```
|
||||
|
||||
### Transition Issue (change status)
|
||||
```bash
|
||||
POST /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"transition": {"id": "31"}
|
||||
}
|
||||
```
|
||||
|
||||
### Add Comment
|
||||
```bash
|
||||
POST /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"body": {
|
||||
"type": "doc",
|
||||
"version": 1,
|
||||
"content": [{"type": "paragraph", "content": [{"type": "text", "text": "Comment text"}]}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Get Comments
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment
|
||||
```
|
||||
|
||||
### Users
|
||||
|
||||
#### Get Current User
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/myself
|
||||
```
|
||||
|
||||
#### Search Users
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/user/search?query=john
|
||||
```
|
||||
|
||||
### Metadata
|
||||
|
||||
#### List Issue Types
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/issuetype
|
||||
```
|
||||
|
||||
#### List Priorities
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/priority
|
||||
```
|
||||
|
||||
#### List Statuses
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/status
|
||||
```
|
||||
|
||||
#### List Fields
|
||||
```bash
|
||||
GET /jira/ex/jira/{cloudId}/rest/api/3/field
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Always fetch cloud ID first using `/oauth/token/accessible-resources`
|
||||
- JQL queries must be bounded (e.g., `project=KEY`) - unbounded queries are rejected
|
||||
- Use URL encoding for JQL query parameters
|
||||
- Update, Delete, Transition, and Assign endpoints return HTTP 204 (No Content) on success
|
||||
- Agile API (`/rest/agile/1.0/...`) requires additional OAuth scopes beyond the basic Jira scopes
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Introduction](https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/)
|
||||
- [Search Issues (JQL)](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-jql-get)
|
||||
- [Get Issue](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-issueidorkey-get)
|
||||
- [Create Issue](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-post)
|
||||
- [Update Issue](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-issueidorkey-put)
|
||||
- [Transition Issue](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-issueidorkey-transitions-post)
|
||||
- [Add Comment](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comments/#api-rest-api-3-issue-issueidorkey-comment-post)
|
||||
- [Get Projects](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-get)
|
||||
- [JQL Reference](https://support.atlassian.com/jira-service-management-cloud/docs/use-advanced-search-with-jira-query-language-jql/)
|
||||
168
skills/api-gateway/references/jobber.md
Normal file
168
skills/api-gateway/references/jobber.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# Jobber Routing Reference
|
||||
|
||||
**App name:** `jobber`
|
||||
**Base URL proxied:** `api.getjobber.com/api/`
|
||||
|
||||
## API Type
|
||||
|
||||
Jobber uses a GraphQL API exclusively. All requests are POST requests to the `/graphql` endpoint.
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/jobber/graphql
|
||||
```
|
||||
|
||||
All operations use POST with a JSON body containing the `query` field.
|
||||
|
||||
## Version Header
|
||||
|
||||
The gateway automatically injects the `X-JOBBER-GRAPHQL-VERSION` header (currently `2025-04-16`).
|
||||
|
||||
## Common Operations
|
||||
|
||||
### Get Account
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ account { id name } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Clients
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ clients(first: 20) { nodes { id name emails { address } phones { number } } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Client
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "query($id: EncodedId!) { client(id: $id) { id name emails { address } } }",
|
||||
"variables": { "id": "CLIENT_ID" }
|
||||
}
|
||||
```
|
||||
|
||||
### Create Client
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation($input: ClientCreateInput!) { clientCreate(input: $input) { client { id name } userErrors { message path } } }",
|
||||
"variables": {
|
||||
"input": {
|
||||
"firstName": "John",
|
||||
"lastName": "Doe",
|
||||
"emails": [{"address": "john@example.com"}]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Jobs
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ jobs(first: 20) { nodes { id title jobNumber jobStatus client { name } } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Job
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation($input: JobCreateInput!) { jobCreate(input: $input) { job { id jobNumber } userErrors { message path } } }",
|
||||
"variables": {
|
||||
"input": {
|
||||
"clientId": "CLIENT_ID",
|
||||
"title": "Service Job"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Invoices
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ invoices(first: 20) { nodes { id invoiceNumber total invoiceStatus } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Quotes
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ quotes(first: 20) { nodes { id quoteNumber title quoteStatus } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Properties
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ properties(first: 20) { nodes { id address { street city } client { name } } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Users
|
||||
```bash
|
||||
POST /jobber/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ users(first: 50) { nodes { id name { full } email { raw } } } }"
|
||||
}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Jobber uses Relay-style cursor-based pagination:
|
||||
|
||||
```bash
|
||||
# First page
|
||||
{
|
||||
"query": "{ clients(first: 20) { nodes { id name } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
|
||||
# Next page
|
||||
{
|
||||
"query": "{ clients(first: 20, after: \"CURSOR\") { nodes { id name } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Jobber uses GraphQL exclusively (no REST API)
|
||||
- Gateway injects version header automatically (`2025-04-16`)
|
||||
- IDs use `EncodedId` type (base64 encoded) - pass as strings
|
||||
- Field naming: `emails`/`phones` (arrays), `jobStatus`/`invoiceStatus`/`quoteStatus`
|
||||
- Rate limits: 2,500 requests per 5 minutes, plus query cost limits (max 10,000 points)
|
||||
- Old API versions supported for 12-18 months
|
||||
- Available resources: Clients, Jobs, Invoices, Quotes, Requests, Properties, Users, Custom Fields
|
||||
|
||||
## Resources
|
||||
|
||||
- [Jobber Developer Documentation](https://developer.getjobber.com/docs/)
|
||||
- [API Changelog](https://developer.getjobber.com/docs/changelog)
|
||||
- [API Support](mailto:api-support@getjobber.com)
|
||||
190
skills/api-gateway/references/jotform.md
Normal file
190
skills/api-gateway/references/jotform.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# JotForm Routing Reference
|
||||
|
||||
**App name:** `jotform`
|
||||
**Base URL proxied:** `api.jotform.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/jotform/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### User
|
||||
|
||||
#### Get User Info
|
||||
```bash
|
||||
GET /jotform/user
|
||||
```
|
||||
|
||||
#### Get User Forms
|
||||
```bash
|
||||
GET /jotform/user/forms?limit=20&offset=0
|
||||
```
|
||||
|
||||
#### Get User Submissions
|
||||
```bash
|
||||
GET /jotform/user/submissions?limit=20&offset=0
|
||||
```
|
||||
|
||||
#### Get User Usage
|
||||
```bash
|
||||
GET /jotform/user/usage
|
||||
```
|
||||
|
||||
#### Get User History
|
||||
```bash
|
||||
GET /jotform/user/history?limit=20
|
||||
```
|
||||
|
||||
### Forms
|
||||
|
||||
#### Get Form
|
||||
```bash
|
||||
GET /jotform/form/{formId}
|
||||
```
|
||||
|
||||
#### Get Form Questions
|
||||
```bash
|
||||
GET /jotform/form/{formId}/questions
|
||||
```
|
||||
|
||||
#### Get Form Properties
|
||||
```bash
|
||||
GET /jotform/form/{formId}/properties
|
||||
```
|
||||
|
||||
#### Get Form Submissions
|
||||
```bash
|
||||
GET /jotform/form/{formId}/submissions?limit=20&offset=0
|
||||
```
|
||||
|
||||
With filter:
|
||||
```bash
|
||||
GET /jotform/form/{formId}/submissions?filter={"created_at:gt":"2024-01-01"}
|
||||
```
|
||||
|
||||
#### Get Form Files
|
||||
```bash
|
||||
GET /jotform/form/{formId}/files
|
||||
```
|
||||
|
||||
#### Create Form
|
||||
```bash
|
||||
POST /jotform/user/forms
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"title": "Contact Form"
|
||||
},
|
||||
"questions": {
|
||||
"1": {
|
||||
"type": "control_textbox",
|
||||
"text": "Name",
|
||||
"name": "name"
|
||||
},
|
||||
"2": {
|
||||
"type": "control_email",
|
||||
"text": "Email",
|
||||
"name": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Form
|
||||
```bash
|
||||
DELETE /jotform/form/{formId}
|
||||
```
|
||||
|
||||
### Submissions
|
||||
|
||||
#### Get Submission
|
||||
```bash
|
||||
GET /jotform/submission/{submissionId}
|
||||
```
|
||||
|
||||
#### Update Submission
|
||||
```bash
|
||||
POST /jotform/submission/{submissionId}
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
submission[3][first]=John&submission[3][last]=Doe
|
||||
```
|
||||
|
||||
Note: Use question IDs from the form questions endpoint. The submission field format is `submission[questionId][subfield]=value`.
|
||||
|
||||
#### Delete Submission
|
||||
```bash
|
||||
DELETE /jotform/submission/{submissionId}
|
||||
```
|
||||
|
||||
### Reports
|
||||
|
||||
#### Get Form Reports
|
||||
```bash
|
||||
GET /jotform/form/{formId}/reports
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
|
||||
#### Get Form Webhooks
|
||||
```bash
|
||||
GET /jotform/form/{formId}/webhooks
|
||||
```
|
||||
|
||||
#### Create Webhook
|
||||
```bash
|
||||
POST /jotform/form/{formId}/webhooks
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
webhookURL=https://example.com/webhook
|
||||
```
|
||||
|
||||
#### Delete Webhook
|
||||
```bash
|
||||
DELETE /jotform/form/{formId}/webhooks/{webhookIndex}
|
||||
```
|
||||
|
||||
## Question Types
|
||||
|
||||
- `control_textbox` - Single line text
|
||||
- `control_textarea` - Multi-line text
|
||||
- `control_email` - Email
|
||||
- `control_phone` - Phone number
|
||||
- `control_dropdown` - Dropdown
|
||||
- `control_radio` - Radio buttons
|
||||
- `control_checkbox` - Checkboxes
|
||||
- `control_datetime` - Date/time picker
|
||||
- `control_fileupload` - File upload
|
||||
- `control_signature` - Signature
|
||||
|
||||
## Filter Syntax
|
||||
|
||||
Filters use JSON format:
|
||||
- `{"field:gt":"value"}` - Greater than
|
||||
- `{"field:lt":"value"}` - Less than
|
||||
- `{"field:eq":"value"}` - Equal to
|
||||
- `{"field:ne":"value"}` - Not equal to
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the `APIKEY` header
|
||||
- Form IDs are numeric
|
||||
- Submissions include all answers as key-value pairs
|
||||
- Use `orderby` parameter to sort results (e.g., `orderby=created_at`)
|
||||
- Pagination uses `limit` and `offset` parameters
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://api.jotform.com/docs/)
|
||||
- [Get User Info](https://api.jotform.com/docs/#user)
|
||||
- [Get User Forms](https://api.jotform.com/docs/#user-forms)
|
||||
- [Get User Submissions](https://api.jotform.com/docs/#user-submissions)
|
||||
- [Get Form Details](https://api.jotform.com/docs/#form-id)
|
||||
- [Get Form Questions](https://api.jotform.com/docs/#form-id-questions)
|
||||
- [Get Form Submissions](https://api.jotform.com/docs/#form-id-submissions)
|
||||
- [Get Submission](https://api.jotform.com/docs/#submission-id)
|
||||
- [Webhooks](https://api.jotform.com/docs/#form-id-webhooks)
|
||||
190
skills/api-gateway/references/keap.md
Normal file
190
skills/api-gateway/references/keap.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# Keap Routing Reference
|
||||
|
||||
**App name:** `keap`
|
||||
**Base URL proxied:** `api.infusionsoft.com/crm/rest`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/keap/crm/rest/v2/{resource}
|
||||
```
|
||||
|
||||
Note: The `/crm/rest` prefix is required in the path.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/oauth/connect/userinfo
|
||||
```
|
||||
|
||||
### List Contacts
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/contacts
|
||||
```
|
||||
|
||||
Query parameters: `page_size`, `page_token`, `filter`, `order_by`, `fields`
|
||||
|
||||
### Get Contact
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/contacts/{contact_id}
|
||||
```
|
||||
|
||||
### Create Contact
|
||||
```bash
|
||||
POST /keap/crm/rest/v2/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"given_name": "John",
|
||||
"family_name": "Doe",
|
||||
"email_addresses": [{"email": "john@example.com", "field": "EMAIL1"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Contact
|
||||
```bash
|
||||
PATCH /keap/crm/rest/v2/contacts/{contact_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"given_name": "Jane"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Contact
|
||||
```bash
|
||||
DELETE /keap/crm/rest/v2/contacts/{contact_id}
|
||||
```
|
||||
|
||||
### List Companies
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/companies
|
||||
```
|
||||
|
||||
### List Tags
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/tags
|
||||
```
|
||||
|
||||
### Apply Tags to Contacts
|
||||
```bash
|
||||
POST /keap/crm/rest/v2/tags/{tag_id}/contacts:applyTags
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contact_ids": ["1", "2", "3"]
|
||||
}
|
||||
```
|
||||
|
||||
### List Tasks
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/tasks
|
||||
```
|
||||
|
||||
### Create Task
|
||||
```bash
|
||||
POST /keap/crm/rest/v2/tasks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Follow up call",
|
||||
"due_date": "2026-02-15T10:00:00Z",
|
||||
"contact": {"id": "9"}
|
||||
}
|
||||
```
|
||||
|
||||
### List Opportunities
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/opportunities
|
||||
```
|
||||
|
||||
### List Orders
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/orders
|
||||
```
|
||||
|
||||
### List Products
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/products
|
||||
```
|
||||
|
||||
### List Campaigns
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/campaigns
|
||||
```
|
||||
|
||||
### Add Contacts to Campaign Sequence
|
||||
```bash
|
||||
POST /keap/crm/rest/v2/campaigns/{campaign_id}/sequences/{sequence_id}:addContacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contact_ids": ["1", "2"]
|
||||
}
|
||||
```
|
||||
|
||||
### List Emails
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/emails
|
||||
```
|
||||
|
||||
### Send Email
|
||||
```bash
|
||||
POST /keap/crm/rest/v2/emails:send
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contacts": [{"id": "9"}],
|
||||
"subject": "Hello",
|
||||
"html_content": "<p>Email body</p>"
|
||||
}
|
||||
```
|
||||
|
||||
### List Automations
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/automations
|
||||
```
|
||||
|
||||
### List Affiliates
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/affiliates
|
||||
```
|
||||
|
||||
### List Subscriptions
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/subscriptions
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Uses token-based pagination:
|
||||
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/contacts?page_size=50
|
||||
GET /keap/crm/rest/v2/contacts?page_size=50&page_token=NEXT_TOKEN
|
||||
```
|
||||
|
||||
Response includes `next_page_token` (empty when no more pages).
|
||||
|
||||
## Filtering
|
||||
|
||||
Use the `filter` parameter:
|
||||
|
||||
```bash
|
||||
GET /keap/crm/rest/v2/contacts?filter=given_name==John
|
||||
GET /keap/crm/rest/v2/tasks?filter=completed==false
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- API version is v2 (v1 is deprecated)
|
||||
- Path must include `/crm/rest` prefix
|
||||
- IDs are returned as strings
|
||||
- Maximum `page_size` is 1000
|
||||
- Timestamps use ISO 8601 format
|
||||
|
||||
## Resources
|
||||
|
||||
- [Keap Developer Portal](https://developer.infusionsoft.com/)
|
||||
- [Keap REST API V2 Documentation](https://developer.infusionsoft.com/docs/restv2/)
|
||||
221
skills/api-gateway/references/kit.md
Normal file
221
skills/api-gateway/references/kit.md
Normal file
@@ -0,0 +1,221 @@
|
||||
# Kit Routing Reference
|
||||
|
||||
**App name:** `kit`
|
||||
**Base URL proxied:** `api.kit.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/kit/v4/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Subscribers
|
||||
```bash
|
||||
GET /kit/v4/subscribers
|
||||
```
|
||||
|
||||
Query parameters:
|
||||
- `per_page` - Results per page (default: 500, max: 1000)
|
||||
- `after` - Cursor for next page
|
||||
- `before` - Cursor for previous page
|
||||
- `status` - Filter by: `active`, `inactive`, `bounced`, `complained`, `cancelled`, or `all`
|
||||
- `email_address` - Filter by specific email
|
||||
|
||||
### Get Subscriber
|
||||
```bash
|
||||
GET /kit/v4/subscribers/{id}
|
||||
```
|
||||
|
||||
### Create Subscriber
|
||||
```bash
|
||||
POST /kit/v4/subscribers
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email_address": "user@example.com",
|
||||
"first_name": "John"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Subscriber
|
||||
```bash
|
||||
PUT /kit/v4/subscribers/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"first_name": "Updated Name"
|
||||
}
|
||||
```
|
||||
|
||||
### List Tags
|
||||
```bash
|
||||
GET /kit/v4/tags
|
||||
```
|
||||
|
||||
### Create Tag
|
||||
```bash
|
||||
POST /kit/v4/tags
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "new-tag"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Tag
|
||||
```bash
|
||||
PUT /kit/v4/tags/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "updated-tag-name"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Tag
|
||||
```bash
|
||||
DELETE /kit/v4/tags/{id}
|
||||
```
|
||||
|
||||
### Tag a Subscriber
|
||||
```bash
|
||||
POST /kit/v4/tags/{tag_id}/subscribers
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email_address": "user@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Remove Tag from Subscriber
|
||||
```bash
|
||||
DELETE /kit/v4/tags/{tag_id}/subscribers/{subscriber_id}
|
||||
```
|
||||
|
||||
### List Subscribers with Tag
|
||||
```bash
|
||||
GET /kit/v4/tags/{tag_id}/subscribers
|
||||
```
|
||||
|
||||
### List Forms
|
||||
```bash
|
||||
GET /kit/v4/forms
|
||||
```
|
||||
|
||||
### Add Subscriber to Form
|
||||
```bash
|
||||
POST /kit/v4/forms/{form_id}/subscribers
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email_address": "user@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
### List Form Subscribers
|
||||
```bash
|
||||
GET /kit/v4/forms/{form_id}/subscribers
|
||||
```
|
||||
|
||||
### List Sequences
|
||||
```bash
|
||||
GET /kit/v4/sequences
|
||||
```
|
||||
|
||||
### Add Subscriber to Sequence
|
||||
```bash
|
||||
POST /kit/v4/sequences/{sequence_id}/subscribers
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email_address": "user@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
### List Broadcasts
|
||||
```bash
|
||||
GET /kit/v4/broadcasts
|
||||
```
|
||||
|
||||
### List Segments
|
||||
```bash
|
||||
GET /kit/v4/segments
|
||||
```
|
||||
|
||||
### List Custom Fields
|
||||
```bash
|
||||
GET /kit/v4/custom_fields
|
||||
```
|
||||
|
||||
### Create Custom Field
|
||||
```bash
|
||||
POST /kit/v4/custom_fields
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"label": "Company"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Custom Field
|
||||
```bash
|
||||
PUT /kit/v4/custom_fields/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"label": "Company Name"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Custom Field
|
||||
```bash
|
||||
DELETE /kit/v4/custom_fields/{id}
|
||||
```
|
||||
|
||||
### List Email Templates
|
||||
```bash
|
||||
GET /kit/v4/email_templates
|
||||
```
|
||||
|
||||
### List Purchases
|
||||
```bash
|
||||
GET /kit/v4/purchases
|
||||
```
|
||||
|
||||
### List Webhooks
|
||||
```bash
|
||||
GET /kit/v4/webhooks
|
||||
```
|
||||
|
||||
### Create Webhook
|
||||
```bash
|
||||
POST /kit/v4/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"target_url": "https://example.com/webhook",
|
||||
"event": {"name": "subscriber.subscriber_activate"}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Webhook
|
||||
```bash
|
||||
DELETE /kit/v4/webhooks/{id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Kit API uses V4 (V3 is deprecated)
|
||||
- Subscriber IDs are integers
|
||||
- Custom field keys are auto-generated from labels
|
||||
- Uses cursor-based pagination with `after` and `before` parameters
|
||||
- Delete operations return 204 No Content
|
||||
- Bulk operations (>100 items) are processed asynchronously
|
||||
|
||||
## Resources
|
||||
|
||||
- [Kit API Overview](https://developers.kit.com/api-reference/overview)
|
||||
- [Kit API Reference](https://developers.kit.com/api-reference)
|
||||
- [Kit Developer Documentation](https://developers.kit.com)
|
||||
237
skills/api-gateway/references/klaviyo.md
Normal file
237
skills/api-gateway/references/klaviyo.md
Normal file
@@ -0,0 +1,237 @@
|
||||
# Klaviyo Routing Reference
|
||||
|
||||
**App name:** `klaviyo`
|
||||
**Base URL proxied:** `a.klaviyo.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/klaviyo/api/{resource}
|
||||
```
|
||||
|
||||
## API Versioning
|
||||
|
||||
Include the `revision` header in all requests:
|
||||
|
||||
```
|
||||
revision: 2024-10-15
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Profiles
|
||||
```bash
|
||||
GET /klaviyo/api/profiles
|
||||
```
|
||||
|
||||
Query parameters:
|
||||
- `filter` - Filter profiles (e.g., `filter=equals(email,"test@example.com")`)
|
||||
- `fields[profile]` - Comma-separated list of fields to include
|
||||
- `page[size]` - Number of results per page (max 100)
|
||||
|
||||
### Get a Profile
|
||||
```bash
|
||||
GET /klaviyo/api/profiles/{profile_id}
|
||||
```
|
||||
|
||||
### Create a Profile
|
||||
```bash
|
||||
POST /klaviyo/api/profiles
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"type": "profile",
|
||||
"attributes": {
|
||||
"email": "newuser@example.com",
|
||||
"first_name": "John",
|
||||
"last_name": "Doe"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update a Profile
|
||||
```bash
|
||||
PATCH /klaviyo/api/profiles/{profile_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"type": "profile",
|
||||
"id": "PROFILE_ID",
|
||||
"attributes": {
|
||||
"first_name": "Jane"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Get Lists
|
||||
```bash
|
||||
GET /klaviyo/api/lists
|
||||
```
|
||||
|
||||
### Create a List
|
||||
```bash
|
||||
POST /klaviyo/api/lists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"type": "list",
|
||||
"attributes": {
|
||||
"name": "VIP Customers"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Add Profiles to List
|
||||
```bash
|
||||
POST /klaviyo/api/lists/{list_id}/relationships/profiles
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [
|
||||
{"type": "profile", "id": "PROFILE_ID"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Get Segments
|
||||
```bash
|
||||
GET /klaviyo/api/segments
|
||||
```
|
||||
|
||||
### Get Campaigns
|
||||
```bash
|
||||
GET /klaviyo/api/campaigns
|
||||
```
|
||||
|
||||
### Create a Campaign
|
||||
```bash
|
||||
POST /klaviyo/api/campaigns
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"type": "campaign",
|
||||
"attributes": {
|
||||
"name": "Summer Newsletter",
|
||||
"audiences": {
|
||||
"included": ["LIST_ID"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Get Flows
|
||||
```bash
|
||||
GET /klaviyo/api/flows
|
||||
```
|
||||
|
||||
### Update Flow Status
|
||||
```bash
|
||||
PATCH /klaviyo/api/flows/{flow_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"type": "flow",
|
||||
"id": "FLOW_ID",
|
||||
"attributes": {
|
||||
"status": "live"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Create an Event
|
||||
```bash
|
||||
POST /klaviyo/api/events
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"type": "event",
|
||||
"attributes": {
|
||||
"profile": {
|
||||
"data": {
|
||||
"type": "profile",
|
||||
"attributes": {
|
||||
"email": "customer@example.com"
|
||||
}
|
||||
}
|
||||
},
|
||||
"metric": {
|
||||
"data": {
|
||||
"type": "metric",
|
||||
"attributes": {
|
||||
"name": "Viewed Product"
|
||||
}
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"product_id": "SKU123",
|
||||
"product_name": "Blue T-Shirt"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Get Metrics
|
||||
```bash
|
||||
GET /klaviyo/api/metrics
|
||||
```
|
||||
|
||||
### Get Templates
|
||||
```bash
|
||||
GET /klaviyo/api/templates
|
||||
```
|
||||
|
||||
### Create Webhook
|
||||
```bash
|
||||
POST /klaviyo/api/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"type": "webhook",
|
||||
"attributes": {
|
||||
"name": "Order Placed Webhook",
|
||||
"endpoint_url": "https://example.com/webhooks/klaviyo",
|
||||
"enabled": true
|
||||
},
|
||||
"relationships": {
|
||||
"webhook-topics": {
|
||||
"data": [
|
||||
{"type": "webhook-topic", "id": "campaign:sent"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Webhook
|
||||
```bash
|
||||
DELETE /klaviyo/api/webhooks/{webhook_id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- All requests use JSON:API specification
|
||||
- Timestamps are in ISO 8601 RFC 3339 format
|
||||
- Resource IDs are strings (often base64-encoded)
|
||||
- Use sparse fieldsets to optimize response size (e.g., `fields[profile]=email,first_name`)
|
||||
- Include `revision` header for API versioning
|
||||
- Use cursor-based pagination with `page[cursor]` parameter
|
||||
|
||||
## Resources
|
||||
|
||||
- [Klaviyo API Documentation](https://developers.klaviyo.com)
|
||||
- [API Reference](https://developers.klaviyo.com/en/reference/api_overview)
|
||||
- [Klaviyo Developer Portal](https://developers.klaviyo.com/en)
|
||||
203
skills/api-gateway/references/linear.md
Normal file
203
skills/api-gateway/references/linear.md
Normal file
@@ -0,0 +1,203 @@
|
||||
# Linear Routing Reference
|
||||
|
||||
**App name:** `linear`
|
||||
**Base URL proxied:** `api.linear.app`
|
||||
|
||||
## API Type
|
||||
|
||||
Linear uses a GraphQL API exclusively. All requests are POST requests to the `/graphql` endpoint.
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/linear/graphql
|
||||
```
|
||||
|
||||
All operations use POST with a JSON body containing the `query` field.
|
||||
|
||||
## Common Operations
|
||||
|
||||
### Get Current User (Viewer)
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ viewer { id name email } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Organization
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ organization { id name urlKey } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Teams
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ teams { nodes { id name key } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Issues
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ issues(first: 20) { nodes { id identifier title state { name } priority } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Issue by Identifier
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ issue(id: \"MTN-527\") { id identifier title description state { name } priority assignee { name } team { key } createdAt } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Filter Issues by State
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ issues(first: 20, filter: { state: { type: { eq: \"started\" } } }) { nodes { id identifier title state { name } } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Search Issues
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ searchIssues(first: 20, term: \"search term\") { nodes { id identifier title } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Issue
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { issueCreate(input: { teamId: \"TEAM_ID\", title: \"Issue title\", description: \"Description\" }) { success issue { id identifier title } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Issue
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { issueUpdate(id: \"ISSUE_ID\", input: { title: \"Updated title\", priority: 2 }) { success issue { id identifier title priority } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Comment
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { commentCreate(input: { issueId: \"ISSUE_ID\", body: \"Comment text\" }) { success comment { id body } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Projects
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ projects(first: 20) { nodes { id name state createdAt } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Labels
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ issueLabels(first: 50) { nodes { id name color } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Workflow States
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ workflowStates(first: 50) { nodes { id name type team { key } } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Users
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ users(first: 50) { nodes { id name email active } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Cycles
|
||||
```bash
|
||||
POST /linear/graphql
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ cycles(first: 20) { nodes { id name number startsAt endsAt } } }"
|
||||
}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Linear uses Relay-style cursor-based pagination:
|
||||
|
||||
```bash
|
||||
# First page
|
||||
POST /linear/graphql
|
||||
{
|
||||
"query": "{ issues(first: 20) { nodes { id identifier title } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
|
||||
# Next page
|
||||
POST /linear/graphql
|
||||
{
|
||||
"query": "{ issues(first: 20, after: \"CURSOR_VALUE\") { nodes { id identifier title } pageInfo { hasNextPage endCursor } } }"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Linear uses GraphQL exclusively (no REST API)
|
||||
- Issue identifiers (e.g., `MTN-527`) can be used in place of UUIDs for the `id` parameter
|
||||
- Priority values: 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low
|
||||
- Workflow state types: `backlog`, `unstarted`, `started`, `completed`, `canceled`
|
||||
- Some mutations (delete, create labels/projects) may require additional OAuth scopes
|
||||
- Use `searchIssues(term: "...")` for full-text search
|
||||
- Filter operators: `eq`, `neq`, `in`, `nin`, `containsIgnoreCase`, etc.
|
||||
|
||||
## Resources
|
||||
|
||||
- [Linear API Overview](https://linear.app/developers)
|
||||
- [Linear GraphQL Getting Started](https://linear.app/developers/graphql)
|
||||
- [Linear GraphQL Schema (Apollo Studio)](https://studio.apollographql.com/public/Linear-API/schema/reference?variant=current)
|
||||
- [Linear API and Webhooks](https://linear.app/docs/api-and-webhooks)
|
||||
278
skills/api-gateway/references/linkedin.md
Normal file
278
skills/api-gateway/references/linkedin.md
Normal file
@@ -0,0 +1,278 @@
|
||||
# LinkedIn Routing Reference
|
||||
|
||||
**App name:** `linkedin`
|
||||
**Base URL proxied:** `api.linkedin.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/linkedin/v2/{resource}
|
||||
```
|
||||
|
||||
## Required Headers
|
||||
|
||||
```
|
||||
X-Restli-Protocol-Version: 2.0.0
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get User Info (OpenID Connect)
|
||||
```bash
|
||||
GET /linkedin/v2/userinfo
|
||||
```
|
||||
|
||||
### Get Current User Profile
|
||||
```bash
|
||||
GET /linkedin/v2/me
|
||||
```
|
||||
|
||||
With projection:
|
||||
```bash
|
||||
GET /linkedin/v2/me?projection=(id,firstName,lastName)
|
||||
```
|
||||
|
||||
### Create Text Post
|
||||
```bash
|
||||
POST /linkedin/v2/ugcPosts
|
||||
Content-Type: application/json
|
||||
X-Restli-Protocol-Version: 2.0.0
|
||||
|
||||
{
|
||||
"author": "urn:li:person:{personId}",
|
||||
"lifecycleState": "PUBLISHED",
|
||||
"specificContent": {
|
||||
"com.linkedin.ugc.ShareContent": {
|
||||
"shareCommentary": {"text": "Hello LinkedIn!"},
|
||||
"shareMediaCategory": "NONE"
|
||||
}
|
||||
},
|
||||
"visibility": {
|
||||
"com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Create Article/URL Share
|
||||
```bash
|
||||
POST /linkedin/v2/ugcPosts
|
||||
Content-Type: application/json
|
||||
X-Restli-Protocol-Version: 2.0.0
|
||||
|
||||
{
|
||||
"author": "urn:li:person:{personId}",
|
||||
"lifecycleState": "PUBLISHED",
|
||||
"specificContent": {
|
||||
"com.linkedin.ugc.ShareContent": {
|
||||
"shareCommentary": {"text": "Check this out!"},
|
||||
"shareMediaCategory": "ARTICLE",
|
||||
"media": [{
|
||||
"status": "READY",
|
||||
"originalUrl": "https://example.com",
|
||||
"title": {"text": "Title"},
|
||||
"description": {"text": "Description"}
|
||||
}]
|
||||
}
|
||||
},
|
||||
"visibility": {
|
||||
"com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Register Image Upload
|
||||
```bash
|
||||
POST /linkedin/v2/assets?action=registerUpload
|
||||
Content-Type: application/json
|
||||
X-Restli-Protocol-Version: 2.0.0
|
||||
|
||||
{
|
||||
"registerUploadRequest": {
|
||||
"recipes": ["urn:li:digitalmediaRecipe:feedshare-image"],
|
||||
"owner": "urn:li:person:{personId}",
|
||||
"serviceRelationships": [{
|
||||
"relationshipType": "OWNER",
|
||||
"identifier": "urn:li:userGeneratedContent"
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Ad Library - Search Ads
|
||||
```bash
|
||||
GET /linkedin/rest/adLibrary?q=criteria&keyword=linkedin
|
||||
```
|
||||
|
||||
Required headers:
|
||||
- `LinkedIn-Version: 202502`
|
||||
|
||||
### Job Library - Search Jobs
|
||||
```bash
|
||||
GET /linkedin/rest/jobLibrary?q=criteria&keyword=software
|
||||
```
|
||||
|
||||
Required headers:
|
||||
- `LinkedIn-Version: 202506`
|
||||
|
||||
## Marketing API (Advertising)
|
||||
|
||||
Required headers for all Marketing API calls:
|
||||
```
|
||||
X-Restli-Protocol-Version: 2.0.0
|
||||
LinkedIn-Version: 202502
|
||||
```
|
||||
|
||||
### List Ad Accounts
|
||||
```bash
|
||||
GET /linkedin/rest/adAccounts?q=search
|
||||
```
|
||||
|
||||
### Get Ad Account
|
||||
```bash
|
||||
GET /linkedin/rest/adAccounts/{adAccountId}
|
||||
```
|
||||
|
||||
### Create Ad Account
|
||||
```bash
|
||||
POST /linkedin/rest/adAccounts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Ad Account Name",
|
||||
"currency": "USD",
|
||||
"reference": "urn:li:organization:{orgId}",
|
||||
"type": "BUSINESS"
|
||||
}
|
||||
```
|
||||
|
||||
### List Campaign Groups
|
||||
```bash
|
||||
GET /linkedin/rest/adAccounts/{adAccountId}/adCampaignGroups
|
||||
```
|
||||
|
||||
### Create Campaign Group
|
||||
```bash
|
||||
POST /linkedin/rest/adAccounts/{adAccountId}/adCampaignGroups
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Campaign Group Name",
|
||||
"status": "DRAFT"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Campaign Group
|
||||
```bash
|
||||
GET /linkedin/rest/adAccounts/{adAccountId}/adCampaignGroups/{campaignGroupId}
|
||||
```
|
||||
|
||||
### List Campaigns
|
||||
```bash
|
||||
GET /linkedin/rest/adAccounts/{adAccountId}/adCampaigns
|
||||
```
|
||||
|
||||
### Create Campaign
|
||||
```bash
|
||||
POST /linkedin/rest/adAccounts/{adAccountId}/adCampaigns
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"campaignGroup": "urn:li:sponsoredCampaignGroup:{groupId}",
|
||||
"name": "Campaign Name",
|
||||
"status": "DRAFT",
|
||||
"objectiveType": "BRAND_AWARENESS"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Campaign
|
||||
```bash
|
||||
GET /linkedin/rest/adAccounts/{adAccountId}/adCampaigns/{campaignId}
|
||||
```
|
||||
|
||||
### List Organization ACLs
|
||||
```bash
|
||||
GET /linkedin/v2/organizationAcls?q=roleAssignee
|
||||
```
|
||||
|
||||
### Lookup Organization by Vanity Name
|
||||
```bash
|
||||
GET /linkedin/rest/organizations?q=vanityName&vanityName=microsoft
|
||||
```
|
||||
|
||||
### Get Organization Share Statistics
|
||||
```bash
|
||||
GET /linkedin/rest/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn:li:organization:12345
|
||||
```
|
||||
|
||||
### Get Organization Posts
|
||||
```bash
|
||||
GET /linkedin/rest/posts?q=author&author=urn:li:organization:12345
|
||||
```
|
||||
|
||||
## Media Upload (REST API)
|
||||
|
||||
Required headers:
|
||||
- `LinkedIn-Version: 202502`
|
||||
|
||||
### Initialize Image Upload
|
||||
```bash
|
||||
POST /linkedin/rest/images?action=initializeUpload
|
||||
Content-Type: application/json
|
||||
|
||||
{"initializeUploadRequest": {"owner": "urn:li:person:{personId}"}}
|
||||
```
|
||||
|
||||
### Initialize Video Upload
|
||||
```bash
|
||||
POST /linkedin/rest/videos?action=initializeUpload
|
||||
Content-Type: application/json
|
||||
|
||||
{"initializeUploadRequest": {"owner": "urn:li:person:{personId}", "fileSizeBytes": 10000000}}
|
||||
```
|
||||
|
||||
### Initialize Document Upload
|
||||
```bash
|
||||
POST /linkedin/rest/documents?action=initializeUpload
|
||||
Content-Type: application/json
|
||||
|
||||
{"initializeUploadRequest": {"owner": "urn:li:person:{personId}"}}
|
||||
```
|
||||
|
||||
## Ad Targeting
|
||||
|
||||
### Get Targeting Facets
|
||||
```bash
|
||||
GET /linkedin/rest/adTargetingFacets
|
||||
```
|
||||
|
||||
Returns 31 targeting facets (skills, industries, titles, locations, etc.)
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Include `X-Restli-Protocol-Version: 2.0.0` header for all v2 API calls
|
||||
- Author URN format: `urn:li:person:{personId}`
|
||||
- Get person ID from `/v2/me` endpoint
|
||||
- Image uploads are 3-step: register, upload binary, create post
|
||||
- Rate limits: 150 requests/day per member, 100K/day per app
|
||||
|
||||
## Visibility Options
|
||||
|
||||
- `PUBLIC` - Viewable by anyone
|
||||
- `CONNECTIONS` - 1st-degree connections only
|
||||
|
||||
## Share Media Categories
|
||||
|
||||
- `NONE` - Text only
|
||||
- `ARTICLE` - URL share
|
||||
- `IMAGE` - Image post
|
||||
- `VIDEO` - Video post
|
||||
|
||||
## Resources
|
||||
|
||||
- [LinkedIn API Overview](https://learn.microsoft.com/en-us/linkedin/)
|
||||
- [Share on LinkedIn](https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/share-on-linkedin)
|
||||
- [Profile API](https://learn.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api)
|
||||
- [Marketing API](https://learn.microsoft.com/en-us/linkedin/marketing/)
|
||||
- [Ad Accounts](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-accounts)
|
||||
- [Campaigns](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-campaigns)
|
||||
213
skills/api-gateway/references/mailchimp.md
Normal file
213
skills/api-gateway/references/mailchimp.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# Mailchimp Routing Reference
|
||||
|
||||
**App name:** `mailchimp`
|
||||
**Base URL proxied:** `{dc}.api.mailchimp.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/mailchimp/3.0/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get All Lists (Audiences)
|
||||
```bash
|
||||
GET /mailchimp/3.0/lists
|
||||
```
|
||||
|
||||
Query parameters:
|
||||
- `count` - Number of records to return (default 10, max 1000)
|
||||
- `offset` - Number of records to skip (for pagination)
|
||||
|
||||
### Get a List
|
||||
```bash
|
||||
GET /mailchimp/3.0/lists/{list_id}
|
||||
```
|
||||
|
||||
### Create a List
|
||||
```bash
|
||||
POST /mailchimp/3.0/lists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Newsletter",
|
||||
"contact": {
|
||||
"company": "Acme Corp",
|
||||
"address1": "123 Main St",
|
||||
"city": "New York",
|
||||
"state": "NY",
|
||||
"zip": "10001",
|
||||
"country": "US"
|
||||
},
|
||||
"permission_reminder": "You signed up for our newsletter",
|
||||
"campaign_defaults": {
|
||||
"from_name": "Acme Corp",
|
||||
"from_email": "newsletter@acme.com",
|
||||
"subject": "",
|
||||
"language": "en"
|
||||
},
|
||||
"email_type_option": true
|
||||
}
|
||||
```
|
||||
|
||||
### Get List Members
|
||||
```bash
|
||||
GET /mailchimp/3.0/lists/{list_id}/members?status=subscribed&count=50
|
||||
```
|
||||
|
||||
### Add a Member
|
||||
```bash
|
||||
POST /mailchimp/3.0/lists/{list_id}/members
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email_address": "newuser@example.com",
|
||||
"status": "subscribed",
|
||||
"merge_fields": {
|
||||
"FNAME": "Jane",
|
||||
"LNAME": "Smith"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update a Member
|
||||
```bash
|
||||
PATCH /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"merge_fields": {
|
||||
"FNAME": "Jane",
|
||||
"LNAME": "Doe"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Add or Update a Member (Upsert)
|
||||
```bash
|
||||
PUT /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email_address": "user@example.com",
|
||||
"status_if_new": "subscribed",
|
||||
"merge_fields": {
|
||||
"FNAME": "Jane",
|
||||
"LNAME": "Smith"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Delete a Member
|
||||
```bash
|
||||
DELETE /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}
|
||||
```
|
||||
|
||||
### Add or Remove Tags
|
||||
```bash
|
||||
POST /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}/tags
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"tags": [
|
||||
{"name": "VIP", "status": "active"},
|
||||
{"name": "Old Tag", "status": "inactive"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Get Segments
|
||||
```bash
|
||||
GET /mailchimp/3.0/lists/{list_id}/segments
|
||||
```
|
||||
|
||||
### Get All Campaigns
|
||||
```bash
|
||||
GET /mailchimp/3.0/campaigns?status=sent&count=20
|
||||
```
|
||||
|
||||
### Create a Campaign
|
||||
```bash
|
||||
POST /mailchimp/3.0/campaigns
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"type": "regular",
|
||||
"recipients": {
|
||||
"list_id": "LIST_ID"
|
||||
},
|
||||
"settings": {
|
||||
"subject_line": "Your Monthly Update",
|
||||
"from_name": "Acme Corp",
|
||||
"reply_to": "hello@acme.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Set Campaign Content
|
||||
```bash
|
||||
PUT /mailchimp/3.0/campaigns/{campaign_id}/content
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"html": "<html><body><h1>Hello!</h1><p>Newsletter content here.</p></body></html>",
|
||||
"plain_text": "Hello! Newsletter content here."
|
||||
}
|
||||
```
|
||||
|
||||
### Send a Campaign
|
||||
```bash
|
||||
POST /mailchimp/3.0/campaigns/{campaign_id}/actions/send
|
||||
```
|
||||
|
||||
### Schedule a Campaign
|
||||
```bash
|
||||
POST /mailchimp/3.0/campaigns/{campaign_id}/actions/schedule
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"schedule_time": "2025-03-01T10:00:00+00:00"
|
||||
}
|
||||
```
|
||||
|
||||
### Get All Templates
|
||||
```bash
|
||||
GET /mailchimp/3.0/templates?type=user
|
||||
```
|
||||
|
||||
### Get All Automations
|
||||
```bash
|
||||
GET /mailchimp/3.0/automations
|
||||
```
|
||||
|
||||
### Start an Automation
|
||||
```bash
|
||||
POST /mailchimp/3.0/automations/{workflow_id}/actions/start-all-emails
|
||||
```
|
||||
|
||||
### Get Campaign Reports
|
||||
```bash
|
||||
GET /mailchimp/3.0/reports?count=20
|
||||
```
|
||||
|
||||
### Get Campaign Report
|
||||
```bash
|
||||
GET /mailchimp/3.0/reports/{campaign_id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- List IDs are 10-character alphanumeric strings
|
||||
- Subscriber hashes are MD5 hashes of lowercase email addresses
|
||||
- Timestamps are in ISO 8601 format
|
||||
- Maximum 1000 records per request for list endpoints
|
||||
- "Audience" and "list" are used interchangeably (app vs API terminology)
|
||||
- "Contact" and "member" are used interchangeably (app vs API terminology)
|
||||
- Use offset-based pagination with `count` and `offset` parameters
|
||||
|
||||
## Resources
|
||||
|
||||
- [Mailchimp Marketing API Documentation](https://mailchimp.com/developer/marketing/)
|
||||
- [API Reference](https://mailchimp.com/developer/marketing/api/)
|
||||
- [Quick Start Guide](https://mailchimp.com/developer/marketing/guides/quick-start/)
|
||||
238
skills/api-gateway/references/mailerlite.md
Normal file
238
skills/api-gateway/references/mailerlite.md
Normal file
@@ -0,0 +1,238 @@
|
||||
# MailerLite Routing Reference
|
||||
|
||||
**App name:** `mailerlite`
|
||||
**Base URL proxied:** `connect.mailerlite.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/mailerlite/api/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Subscribers
|
||||
|
||||
#### List Subscribers
|
||||
```bash
|
||||
GET /mailerlite/api/subscribers
|
||||
```
|
||||
|
||||
Query parameters: `filter[status]`, `limit`, `cursor`, `include`
|
||||
|
||||
#### Get Subscriber
|
||||
```bash
|
||||
GET /mailerlite/api/subscribers/{subscriber_id_or_email}
|
||||
```
|
||||
|
||||
#### Create/Upsert Subscriber
|
||||
```bash
|
||||
POST /mailerlite/api/subscribers
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email": "subscriber@example.com",
|
||||
"fields": {"name": "John Doe"},
|
||||
"groups": ["12345678901234567"],
|
||||
"status": "active"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Subscriber
|
||||
```bash
|
||||
PUT /mailerlite/api/subscribers/{subscriber_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"fields": {"name": "Jane Doe"}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Subscriber
|
||||
```bash
|
||||
DELETE /mailerlite/api/subscribers/{subscriber_id}
|
||||
```
|
||||
|
||||
### Groups
|
||||
|
||||
#### List Groups
|
||||
```bash
|
||||
GET /mailerlite/api/groups
|
||||
```
|
||||
|
||||
Query parameters: `limit`, `page`, `filter[name]`, `sort`
|
||||
|
||||
#### Create Group
|
||||
```bash
|
||||
POST /mailerlite/api/groups
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Newsletter Subscribers"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Group
|
||||
```bash
|
||||
PUT /mailerlite/api/groups/{group_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Updated Group Name"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Group
|
||||
```bash
|
||||
DELETE /mailerlite/api/groups/{group_id}
|
||||
```
|
||||
|
||||
#### Get Group Subscribers
|
||||
```bash
|
||||
GET /mailerlite/api/groups/{group_id}/subscribers
|
||||
```
|
||||
|
||||
### Campaigns
|
||||
|
||||
#### List Campaigns
|
||||
```bash
|
||||
GET /mailerlite/api/campaigns
|
||||
```
|
||||
|
||||
Query parameters: `filter[status]`, `filter[type]`, `limit`, `page`
|
||||
|
||||
#### Get Campaign
|
||||
```bash
|
||||
GET /mailerlite/api/campaigns/{campaign_id}
|
||||
```
|
||||
|
||||
#### Create Campaign
|
||||
```bash
|
||||
POST /mailerlite/api/campaigns
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "My Newsletter",
|
||||
"type": "regular",
|
||||
"emails": [
|
||||
{
|
||||
"subject": "Weekly Update",
|
||||
"from_name": "Newsletter",
|
||||
"from": "newsletter@example.com"
|
||||
}
|
||||
],
|
||||
"groups": ["12345678901234567"]
|
||||
}
|
||||
```
|
||||
|
||||
#### Schedule Campaign
|
||||
```bash
|
||||
POST /mailerlite/api/campaigns/{campaign_id}/schedule
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"delivery": "instant"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Campaign
|
||||
```bash
|
||||
DELETE /mailerlite/api/campaigns/{campaign_id}
|
||||
```
|
||||
|
||||
### Automations
|
||||
|
||||
#### List Automations
|
||||
```bash
|
||||
GET /mailerlite/api/automations
|
||||
```
|
||||
|
||||
Query parameters: `filter[enabled]`, `filter[name]`, `page`, `limit`
|
||||
|
||||
#### Get Automation
|
||||
```bash
|
||||
GET /mailerlite/api/automations/{automation_id}
|
||||
```
|
||||
|
||||
#### Delete Automation
|
||||
```bash
|
||||
DELETE /mailerlite/api/automations/{automation_id}
|
||||
```
|
||||
|
||||
### Fields
|
||||
|
||||
#### List Fields
|
||||
```bash
|
||||
GET /mailerlite/api/fields
|
||||
```
|
||||
|
||||
#### Create Field
|
||||
```bash
|
||||
POST /mailerlite/api/fields
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Company",
|
||||
"type": "text"
|
||||
}
|
||||
```
|
||||
|
||||
### Segments
|
||||
|
||||
#### List Segments
|
||||
```bash
|
||||
GET /mailerlite/api/segments
|
||||
```
|
||||
|
||||
#### Get Segment Subscribers
|
||||
```bash
|
||||
GET /mailerlite/api/segments/{segment_id}/subscribers
|
||||
```
|
||||
|
||||
### Forms
|
||||
|
||||
#### List Forms
|
||||
```bash
|
||||
GET /mailerlite/api/forms/{type}
|
||||
```
|
||||
|
||||
Path parameters: `type` - `popup`, `embedded`, or `promotion`
|
||||
|
||||
#### Get Form Subscribers
|
||||
```bash
|
||||
GET /mailerlite/api/forms/{form_id}/subscribers
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
|
||||
#### List Webhooks
|
||||
```bash
|
||||
GET /mailerlite/api/webhooks
|
||||
```
|
||||
|
||||
#### Create Webhook
|
||||
```bash
|
||||
POST /mailerlite/api/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Subscriber Updates",
|
||||
"events": ["subscriber.created", "subscriber.updated"],
|
||||
"url": "https://example.com/webhook"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Rate limit: 120 requests per minute
|
||||
- Subscriber emails serve as unique identifiers (POST creates or updates existing)
|
||||
- Only draft campaigns can be updated
|
||||
- Pagination: cursor-based for subscribers, page-based for groups/campaigns
|
||||
- API versioning can be overridden via `X-Version: YYYY-MM-DD` header
|
||||
|
||||
## Resources
|
||||
|
||||
- [MailerLite API Documentation](https://developers.mailerlite.com/docs/)
|
||||
- [MailerLite Subscribers API](https://developers.mailerlite.com/docs/subscribers.html)
|
||||
- [MailerLite Groups API](https://developers.mailerlite.com/docs/groups.html)
|
||||
- [MailerLite Campaigns API](https://developers.mailerlite.com/docs/campaigns.html)
|
||||
212
skills/api-gateway/references/manychat.md
Normal file
212
skills/api-gateway/references/manychat.md
Normal file
@@ -0,0 +1,212 @@
|
||||
# ManyChat Routing Reference
|
||||
|
||||
**App name:** `manychat`
|
||||
**Base URL proxied:** `api.manychat.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/manychat/fb/{category}/{action}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Page Operations
|
||||
|
||||
#### Get Page Info
|
||||
```bash
|
||||
GET /manychat/fb/page/getInfo
|
||||
```
|
||||
|
||||
#### List Tags
|
||||
```bash
|
||||
GET /manychat/fb/page/getTags
|
||||
```
|
||||
|
||||
#### Create Tag
|
||||
```bash
|
||||
POST /manychat/fb/page/createTag
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Tag"
|
||||
}
|
||||
```
|
||||
|
||||
#### Remove Tag
|
||||
```bash
|
||||
POST /manychat/fb/page/removeTag
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"tag_id": 123
|
||||
}
|
||||
```
|
||||
|
||||
#### List Custom Fields
|
||||
```bash
|
||||
GET /manychat/fb/page/getCustomFields
|
||||
```
|
||||
|
||||
#### Create Custom Field
|
||||
```bash
|
||||
POST /manychat/fb/page/createCustomField
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"caption": "Phone Number",
|
||||
"type": "text",
|
||||
"description": "Customer phone number"
|
||||
}
|
||||
```
|
||||
|
||||
#### List Bot Fields
|
||||
```bash
|
||||
GET /manychat/fb/page/getBotFields
|
||||
```
|
||||
|
||||
#### Set Bot Field
|
||||
```bash
|
||||
POST /manychat/fb/page/setBotField
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"field_id": 123,
|
||||
"field_value": 42
|
||||
}
|
||||
```
|
||||
|
||||
#### List Flows
|
||||
```bash
|
||||
GET /manychat/fb/page/getFlows
|
||||
```
|
||||
|
||||
#### List Growth Tools
|
||||
```bash
|
||||
GET /manychat/fb/page/getGrowthTools
|
||||
```
|
||||
|
||||
#### List OTN Topics
|
||||
```bash
|
||||
GET /manychat/fb/page/getOtnTopics
|
||||
```
|
||||
|
||||
### Subscriber Operations
|
||||
|
||||
#### Get Subscriber Info
|
||||
```bash
|
||||
GET /manychat/fb/subscriber/getInfo?subscriber_id=123456789
|
||||
```
|
||||
|
||||
#### Find Subscriber by Name
|
||||
```bash
|
||||
GET /manychat/fb/subscriber/findByName?name=John%20Doe
|
||||
```
|
||||
|
||||
#### Find Subscriber by Email/Phone
|
||||
```bash
|
||||
GET /manychat/fb/subscriber/findBySystemField?email=john@example.com
|
||||
```
|
||||
|
||||
#### Create Subscriber
|
||||
```bash
|
||||
POST /manychat/fb/subscriber/createSubscriber
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"first_name": "John",
|
||||
"last_name": "Doe",
|
||||
"phone": "+1234567890",
|
||||
"email": "john@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Subscriber
|
||||
```bash
|
||||
POST /manychat/fb/subscriber/updateSubscriber
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subscriber_id": 123456789,
|
||||
"first_name": "John",
|
||||
"last_name": "Smith"
|
||||
}
|
||||
```
|
||||
|
||||
#### Add Tag to Subscriber
|
||||
```bash
|
||||
POST /manychat/fb/subscriber/addTag
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subscriber_id": 123456789,
|
||||
"tag_id": 1
|
||||
}
|
||||
```
|
||||
|
||||
#### Set Custom Field
|
||||
```bash
|
||||
POST /manychat/fb/subscriber/setCustomField
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subscriber_id": 123456789,
|
||||
"field_id": 1,
|
||||
"field_value": "value"
|
||||
}
|
||||
```
|
||||
|
||||
### Sending Operations
|
||||
|
||||
#### Send Content
|
||||
```bash
|
||||
POST /manychat/fb/sending/sendContent
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subscriber_id": 123456789,
|
||||
"data": {
|
||||
"version": "v2",
|
||||
"content": {
|
||||
"messages": [
|
||||
{"type": "text", "text": "Hello!"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Send Flow
|
||||
```bash
|
||||
POST /manychat/fb/sending/sendFlow
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subscriber_id": 123456789,
|
||||
"flow_ns": "content123456"
|
||||
}
|
||||
```
|
||||
|
||||
## Rate Limits
|
||||
|
||||
| Endpoint Category | Rate Limit |
|
||||
|------------------|------------|
|
||||
| Page GET endpoints | 100 queries/second |
|
||||
| Page POST endpoints | 10 queries/second |
|
||||
| Subscriber operations | 10-50 queries/second |
|
||||
| Sending content | 25 queries/second |
|
||||
| Sending flows | 20 queries/second |
|
||||
|
||||
## Notes
|
||||
|
||||
- Subscriber IDs are integers unique within a page
|
||||
- Flow namespaces (flow_ns) identify automation flows
|
||||
- Message tags are required for sending outside the 24-hour window
|
||||
- All responses include `{"status": "success"}` or `{"status": "error"}`
|
||||
- Custom field types: `text`, `number`, `date`, `datetime`, `boolean`
|
||||
|
||||
## Resources
|
||||
|
||||
- [ManyChat API Documentation](https://api.manychat.com/swagger)
|
||||
- [ManyChat API Key Generation](https://help.manychat.com/hc/en-us/articles/14959510331420)
|
||||
- [ManyChat Dev Program](https://help.manychat.com/hc/en-us/articles/14281269835548)
|
||||
174
skills/api-gateway/references/microsoft-excel.md
Normal file
174
skills/api-gateway/references/microsoft-excel.md
Normal file
@@ -0,0 +1,174 @@
|
||||
# Microsoft Excel Routing Reference
|
||||
|
||||
**App name:** `microsoft-excel`
|
||||
**Base URL proxied:** `graph.microsoft.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/microsoft-excel/v1.0/me/drive/items/{file-id}/workbook/{resource}
|
||||
/microsoft-excel/v1.0/me/drive/root:/{path}:/workbook/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Drive Operations
|
||||
|
||||
#### Get Drive Info
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive
|
||||
```
|
||||
|
||||
#### List Root Files
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root/children
|
||||
```
|
||||
|
||||
#### Search Files
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root/search(q='.xlsx')
|
||||
```
|
||||
|
||||
### Session Management
|
||||
|
||||
#### Create Session
|
||||
```bash
|
||||
POST /microsoft-excel/v1.0/me/drive/root:/{path}:/workbook/createSession
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"persistChanges": true
|
||||
}
|
||||
```
|
||||
|
||||
### Worksheet Operations
|
||||
|
||||
#### List Worksheets
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets
|
||||
```
|
||||
|
||||
#### Create Worksheet
|
||||
```bash
|
||||
POST /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "NewSheet"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Worksheet
|
||||
```bash
|
||||
DELETE /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('{id}')
|
||||
```
|
||||
|
||||
### Range Operations
|
||||
|
||||
#### Get Range
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('Sheet1')/range(address='A1:B2')
|
||||
```
|
||||
|
||||
#### Update Range
|
||||
```bash
|
||||
PATCH /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('Sheet1')/range(address='A1:B2')
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"values": [
|
||||
["Value1", "Value2"],
|
||||
[100, 200]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Get Used Range
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('Sheet1')/usedRange
|
||||
```
|
||||
|
||||
### Table Operations
|
||||
|
||||
#### List Tables
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('Sheet1')/tables
|
||||
```
|
||||
|
||||
#### Create Table
|
||||
```bash
|
||||
POST /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('Sheet1')/tables/add
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"address": "A1:C4",
|
||||
"hasHeaders": true
|
||||
}
|
||||
```
|
||||
|
||||
#### Get Table Rows
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/tables('Table1')/rows
|
||||
```
|
||||
|
||||
#### Add Table Row
|
||||
```bash
|
||||
POST /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/tables('Table1')/rows
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"values": [["Data1", "Data2", "Data3"]]
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Table Row
|
||||
```bash
|
||||
DELETE /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/tables('Table1')/rows/itemAt(index=0)
|
||||
```
|
||||
|
||||
#### Get Table Columns
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/tables('Table1')/columns
|
||||
```
|
||||
|
||||
### Named Items
|
||||
|
||||
#### List Named Items
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/names
|
||||
```
|
||||
|
||||
### Charts
|
||||
|
||||
#### List Charts
|
||||
```bash
|
||||
GET /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('Sheet1')/charts
|
||||
```
|
||||
|
||||
#### Add Chart
|
||||
```bash
|
||||
POST /microsoft-excel/v1.0/me/drive/root:/workbook.xlsx:/workbook/worksheets('Sheet1')/charts/add
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"type": "ColumnClustered",
|
||||
"sourceData": "A1:C4",
|
||||
"seriesBy": "Auto"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Only `.xlsx` files are supported (not legacy `.xls`)
|
||||
- Use path-based access (`/drive/root:/{path}:`) or ID-based access (`/drive/items/{id}`)
|
||||
- Table/worksheet IDs with `{` and `}` must be URL-encoded
|
||||
- Sessions improve performance for multiple operations
|
||||
- Sessions expire after ~5 minutes (persistent) or ~7 minutes (non-persistent)
|
||||
- Range addresses use A1 notation
|
||||
|
||||
## Resources
|
||||
|
||||
- [Microsoft Graph Excel API](https://learn.microsoft.com/en-us/graph/api/resources/excel)
|
||||
- [Excel Workbook Resource](https://learn.microsoft.com/en-us/graph/api/resources/workbook)
|
||||
- [Excel Worksheet Resource](https://learn.microsoft.com/en-us/graph/api/resources/worksheet)
|
||||
- [Excel Range Resource](https://learn.microsoft.com/en-us/graph/api/resources/range)
|
||||
166
skills/api-gateway/references/microsoft-to-do.md
Normal file
166
skills/api-gateway/references/microsoft-to-do.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# Microsoft To Do Routing Reference
|
||||
|
||||
**App name:** `microsoft-to-do`
|
||||
**Base URL proxied:** `graph.microsoft.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/microsoft-to-do/v1.0/me/todo/{resource}
|
||||
```
|
||||
|
||||
All Microsoft To Do endpoints use the Microsoft Graph API under the `/me/todo/` path.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Task Lists
|
||||
|
||||
#### List All Task Lists
|
||||
```bash
|
||||
GET /microsoft-to-do/v1.0/me/todo/lists
|
||||
```
|
||||
|
||||
#### Get Task List
|
||||
```bash
|
||||
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}
|
||||
```
|
||||
|
||||
#### Create Task List
|
||||
```bash
|
||||
POST /microsoft-to-do/v1.0/me/todo/lists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"displayName": "My New List"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Task List
|
||||
```bash
|
||||
PATCH /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"displayName": "Updated List Name"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Task List
|
||||
```bash
|
||||
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}
|
||||
```
|
||||
|
||||
### Tasks
|
||||
|
||||
#### List Tasks
|
||||
```bash
|
||||
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks
|
||||
```
|
||||
|
||||
#### Get Task
|
||||
```bash
|
||||
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}
|
||||
```
|
||||
|
||||
#### Create Task
|
||||
```bash
|
||||
POST /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "New Task",
|
||||
"importance": "high",
|
||||
"status": "notStarted",
|
||||
"dueDateTime": {
|
||||
"dateTime": "2024-12-31T17:00:00",
|
||||
"timeZone": "UTC"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Task
|
||||
```bash
|
||||
PATCH /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"status": "completed"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Task
|
||||
```bash
|
||||
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}
|
||||
```
|
||||
|
||||
### Checklist Items
|
||||
|
||||
#### List Checklist Items
|
||||
```bash
|
||||
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems
|
||||
```
|
||||
|
||||
#### Create Checklist Item
|
||||
```bash
|
||||
POST /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"displayName": "Subtask name"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Checklist Item
|
||||
```bash
|
||||
PATCH /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems/{checklistItemId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"isChecked": true
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Checklist Item
|
||||
```bash
|
||||
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems/{checklistItemId}
|
||||
```
|
||||
|
||||
### Linked Resources
|
||||
|
||||
#### List Linked Resources
|
||||
```bash
|
||||
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/linkedResources
|
||||
```
|
||||
|
||||
#### Create Linked Resource
|
||||
```bash
|
||||
POST /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/linkedResources
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"webUrl": "https://example.com/item",
|
||||
"applicationName": "MyApp",
|
||||
"displayName": "Related Item"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Linked Resource
|
||||
```bash
|
||||
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/linkedResources/{linkedResourceId}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Task list IDs and task IDs are opaque base64-encoded strings
|
||||
- Timestamps use ISO 8601 format in UTC by default
|
||||
- The `dateTimeTimeZone` type requires both `dateTime` and `timeZone` fields
|
||||
- Task `status` values: `notStarted`, `inProgress`, `completed`, `waitingOnOthers`, `deferred`
|
||||
- Task `importance` values: `low`, `normal`, `high`
|
||||
- Supports OData query parameters: `$select`, `$filter`, `$orderby`, `$top`, `$skip`
|
||||
- Pagination uses `@odata.nextLink` for continuation
|
||||
|
||||
## Resources
|
||||
|
||||
- [Microsoft To Do API Overview](https://learn.microsoft.com/en-us/graph/api/resources/todo-overview)
|
||||
- [todoTaskList Resource](https://learn.microsoft.com/en-us/graph/api/resources/todotasklist)
|
||||
- [todoTask Resource](https://learn.microsoft.com/en-us/graph/api/resources/todotask)
|
||||
207
skills/api-gateway/references/monday.md
Normal file
207
skills/api-gateway/references/monday.md
Normal file
@@ -0,0 +1,207 @@
|
||||
# Monday.com Routing Reference
|
||||
|
||||
**App name:** `monday`
|
||||
**Base URL proxied:** `api.monday.com`
|
||||
|
||||
## API Type
|
||||
|
||||
Monday.com uses a GraphQL API exclusively. All requests are POST requests to the `/v2` endpoint.
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/monday/v2
|
||||
```
|
||||
|
||||
All operations use POST with a JSON body containing the `query` field.
|
||||
|
||||
## Common Operations
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ me { id name email } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Workspaces
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ workspaces(limit: 20) { id name kind } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Boards
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ boards(limit: 20) { id name state board_kind workspace { id name } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Board with Items
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ boards(ids: [BOARD_ID]) { id name columns { id title type } groups { id title } items_page(limit: 50) { cursor items { id name state column_values { id text } } } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Board
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { create_board(board_name: \"New Board\", board_kind: public) { id name } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Board
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { update_board(board_id: BOARD_ID, board_attribute: description, new_value: \"Description\") }"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Board
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { delete_board(board_id: BOARD_ID) { id } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Items by ID
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ items(ids: [ITEM_ID]) { id name created_at state board { id name } group { id title } column_values { id text value } } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Item
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { create_item(board_id: BOARD_ID, group_id: \"GROUP_ID\", item_name: \"New item\") { id name } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Item with Column Values
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { create_item(board_id: BOARD_ID, group_id: \"GROUP_ID\", item_name: \"Task\", column_values: \"{\\\"status\\\": {\\\"label\\\": \\\"Working on it\\\"}}\") { id name } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Item
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { change_simple_column_value(board_id: BOARD_ID, item_id: ITEM_ID, column_id: \"name\", value: \"Updated name\") { id name } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Item
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { delete_item(item_id: ITEM_ID) { id } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Column
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { create_column(board_id: BOARD_ID, title: \"Status\", column_type: status) { id title type } }"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Group
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "mutation { create_group(board_id: BOARD_ID, group_name: \"New Group\") { id title } }"
|
||||
}
|
||||
```
|
||||
|
||||
### List Users
|
||||
```bash
|
||||
POST /monday/v2
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": "{ users(limit: 50) { id name email } }"
|
||||
}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Monday.com uses cursor-based pagination for items:
|
||||
|
||||
```bash
|
||||
# First page
|
||||
POST /monday/v2
|
||||
{
|
||||
"query": "{ boards(ids: [BOARD_ID]) { items_page(limit: 50) { cursor items { id name } } } }"
|
||||
}
|
||||
|
||||
# Next page
|
||||
POST /monday/v2
|
||||
{
|
||||
"query": "{ next_items_page(cursor: \"CURSOR_VALUE\", limit: 50) { cursor items { id name } } }"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Monday.com uses GraphQL exclusively (no REST API)
|
||||
- Board IDs, item IDs, and user IDs are numeric strings
|
||||
- Column IDs are alphanumeric (e.g., `color_mm09e48w`)
|
||||
- Group IDs are alphanumeric (e.g., `group_mm0939df`, `topics`)
|
||||
- Column values must be passed as JSON strings
|
||||
- Board kinds: `public`, `private`, `share`
|
||||
- Board states: `active`, `archived`, `deleted`, `all`
|
||||
- Column types: `status`, `text`, `numbers`, `date`, `people`, `dropdown`, `checkbox`, `email`, `phone`, `link`, `timeline`, `tags`, `rating`
|
||||
- Default limit is 25, maximum is 100
|
||||
- Cursors are valid for 60 minutes
|
||||
|
||||
## Resources
|
||||
|
||||
- [Monday.com API Basics](https://developer.monday.com/api-reference/docs/basics)
|
||||
- [GraphQL Overview](https://developer.monday.com/api-reference/docs/introduction-to-graphql)
|
||||
- [Boards Reference](https://developer.monday.com/api-reference/reference/boards)
|
||||
- [Items Reference](https://developer.monday.com/api-reference/reference/items)
|
||||
- [Columns Reference](https://developer.monday.com/api-reference/reference/columns)
|
||||
345
skills/api-gateway/references/notion.md
Normal file
345
skills/api-gateway/references/notion.md
Normal file
@@ -0,0 +1,345 @@
|
||||
# Notion Routing Reference
|
||||
|
||||
**App name:** `notion`
|
||||
**Base URL proxied:** `api.notion.com`
|
||||
|
||||
## Required Headers
|
||||
|
||||
All Notion API requests require:
|
||||
```
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/notion/v1/{endpoint}
|
||||
```
|
||||
|
||||
## Key Concept: Databases vs Data Sources
|
||||
|
||||
In API version 2025-09-03, databases and data sources are separate concepts:
|
||||
|
||||
| Concept | Description | Use For |
|
||||
|---------|-------------|---------|
|
||||
| **Database** | Container that can hold multiple data sources | Creating databases, getting data_source IDs |
|
||||
| **Data Source** | Schema and data within a database | Querying, updating schema, updating properties |
|
||||
|
||||
Most existing databases have one data source. Use `GET /databases/{id}` to get the `data_source_id`, then use `/data_sources/` endpoints for all operations.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Search
|
||||
|
||||
Search for pages:
|
||||
```bash
|
||||
POST /notion/v1/search
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"query": "meeting notes",
|
||||
"filter": {"property": "object", "value": "page"}
|
||||
}
|
||||
```
|
||||
|
||||
Search for data sources:
|
||||
```bash
|
||||
POST /notion/v1/search
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"filter": {"property": "object", "value": "data_source"}
|
||||
}
|
||||
```
|
||||
|
||||
With pagination:
|
||||
```bash
|
||||
POST /notion/v1/search
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"page_size": 10,
|
||||
"start_cursor": "CURSOR_FROM_PREVIOUS_RESPONSE"
|
||||
}
|
||||
```
|
||||
|
||||
### Data Sources
|
||||
|
||||
Use data source endpoints for querying, getting schema, and updates.
|
||||
|
||||
#### Get Data Source
|
||||
```bash
|
||||
GET /notion/v1/data_sources/{dataSourceId}
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
Returns full schema with `properties` field.
|
||||
|
||||
#### Query Data Source
|
||||
```bash
|
||||
POST /notion/v1/data_sources/{dataSourceId}/query
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"filter": {
|
||||
"property": "Status",
|
||||
"select": {"equals": "Active"}
|
||||
},
|
||||
"sorts": [
|
||||
{"property": "Created", "direction": "descending"}
|
||||
],
|
||||
"page_size": 100
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Data Source (title, schema, properties)
|
||||
```bash
|
||||
PATCH /notion/v1/data_sources/{dataSourceId}
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"title": [{"type": "text", "text": {"content": "Updated Title"}}],
|
||||
"properties": {
|
||||
"NewColumn": {"rich_text": {}}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Databases
|
||||
|
||||
Database endpoints are only needed for **creating** databases and **discovering** data source IDs.
|
||||
|
||||
#### Get Database (to find data_source_id)
|
||||
```bash
|
||||
GET /notion/v1/databases/{databaseId}
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
Response includes `data_sources` array:
|
||||
```json
|
||||
{
|
||||
"id": "database-id",
|
||||
"object": "database",
|
||||
"data_sources": [{"id": "data-source-id", "name": "Database Name"}]
|
||||
}
|
||||
```
|
||||
|
||||
**Note:** This endpoint returns `properties: null`. Use `GET /data_sources/{id}` to get the schema.
|
||||
|
||||
#### Create Database
|
||||
```bash
|
||||
POST /notion/v1/databases
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"parent": {"type": "page_id", "page_id": "PARENT_PAGE_ID"},
|
||||
"title": [{"type": "text", "text": {"content": "New Database"}}],
|
||||
"properties": {
|
||||
"Name": {"title": {}},
|
||||
"Status": {"select": {"options": [{"name": "Active"}, {"name": "Done"}]}}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Important:** Cannot create databases via `/data_sources` endpoint.
|
||||
|
||||
### Pages
|
||||
|
||||
#### Get Page
|
||||
```bash
|
||||
GET /notion/v1/pages/{pageId}
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
#### Create Page in Data Source
|
||||
Use `data_source_id` (not `database_id`) as parent:
|
||||
```bash
|
||||
POST /notion/v1/pages
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"parent": {"data_source_id": "DATA_SOURCE_ID"},
|
||||
"properties": {
|
||||
"Name": {"title": [{"text": {"content": "New Page"}}]},
|
||||
"Status": {"select": {"name": "Active"}}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Create Child Page (under another page)
|
||||
```bash
|
||||
POST /notion/v1/pages
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"parent": {"page_id": "PARENT_PAGE_ID"},
|
||||
"properties": {
|
||||
"title": {"title": [{"text": {"content": "Child Page"}}]}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Page Properties
|
||||
```bash
|
||||
PATCH /notion/v1/pages/{pageId}
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"properties": {
|
||||
"Status": {"select": {"name": "Done"}}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Archive Page
|
||||
```bash
|
||||
PATCH /notion/v1/pages/{pageId}
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"archived": true
|
||||
}
|
||||
```
|
||||
|
||||
### Blocks
|
||||
|
||||
#### Get Block
|
||||
```bash
|
||||
GET /notion/v1/blocks/{blockId}
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
#### Get Block Children
|
||||
```bash
|
||||
GET /notion/v1/blocks/{blockId}/children
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
#### Append Block Children
|
||||
```bash
|
||||
PATCH /notion/v1/blocks/{blockId}/children
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"object": "block",
|
||||
"type": "paragraph",
|
||||
"paragraph": {
|
||||
"rich_text": [{"type": "text", "text": {"content": "New paragraph"}}]
|
||||
}
|
||||
},
|
||||
{
|
||||
"object": "block",
|
||||
"type": "heading_2",
|
||||
"heading_2": {
|
||||
"rich_text": [{"type": "text", "text": {"content": "Heading"}}]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Block
|
||||
```bash
|
||||
PATCH /notion/v1/blocks/{blockId}
|
||||
Content-Type: application/json
|
||||
Notion-Version: 2025-09-03
|
||||
|
||||
{
|
||||
"paragraph": {
|
||||
"rich_text": [{"text": {"content": "Updated text"}}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Block
|
||||
```bash
|
||||
DELETE /notion/v1/blocks/{blockId}
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
### Users
|
||||
|
||||
#### List Users
|
||||
```bash
|
||||
GET /notion/v1/users
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
#### Get User by ID
|
||||
```bash
|
||||
GET /notion/v1/users/{userId}
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
#### Get Current User (Bot)
|
||||
```bash
|
||||
GET /notion/v1/users/me
|
||||
Notion-Version: 2025-09-03
|
||||
```
|
||||
|
||||
## Filter Operators
|
||||
|
||||
- `equals`, `does_not_equal`
|
||||
- `contains`, `does_not_contain`
|
||||
- `starts_with`, `ends_with`
|
||||
- `is_empty`, `is_not_empty`
|
||||
- `greater_than`, `less_than`, `greater_than_or_equal_to`, `less_than_or_equal_to`
|
||||
|
||||
## Block Types
|
||||
|
||||
Common block types for appending:
|
||||
- `paragraph` - Text paragraph
|
||||
- `heading_1`, `heading_2`, `heading_3` - Headings
|
||||
- `bulleted_list_item`, `numbered_list_item` - List items
|
||||
- `to_do` - Checkbox item
|
||||
- `code` - Code block
|
||||
- `quote` - Quote block
|
||||
- `divider` - Horizontal divider
|
||||
|
||||
## Migration from Older API Versions
|
||||
|
||||
| Old (2022-06-28) | New (2025-09-03) |
|
||||
|------------------|------------------|
|
||||
| `POST /databases/{id}/query` | `POST /data_sources/{id}/query` |
|
||||
| `GET /databases/{id}` for schema | `GET /data_sources/{id}` for schema |
|
||||
| `PATCH /databases/{id}` for schema | `PATCH /data_sources/{id}` for schema |
|
||||
| Parent: `{"database_id": "..."}` | Parent: `{"data_source_id": "..."}` |
|
||||
| Search filter: `"database"` | Search filter: `"data_source"` |
|
||||
|
||||
## Notes
|
||||
|
||||
- Use `GET /databases/{id}` to discover `data_source_id`, then use `/data_sources/` for all operations
|
||||
- Creating databases still requires `POST /databases` endpoint
|
||||
- Parent objects for create database require `type` field: `{"type": "page_id", "page_id": "..."}`
|
||||
- All IDs are UUIDs (with or without hyphens)
|
||||
- Delete blocks returns the block with `archived: true`
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Introduction](https://developers.notion.com/reference/intro)
|
||||
- [Search](https://developers.notion.com/reference/post-search.md)
|
||||
- [Query Database](https://developers.notion.com/reference/post-database-query.md)
|
||||
- [Get Database](https://developers.notion.com/reference/retrieve-a-database.md)
|
||||
- [Create Database](https://developers.notion.com/reference/create-a-database.md)
|
||||
- [Get Page](https://developers.notion.com/reference/retrieve-a-page.md)
|
||||
- [Create Page](https://developers.notion.com/reference/post-page.md)
|
||||
- [Update Page](https://developers.notion.com/reference/patch-page.md)
|
||||
- [Get Block Children](https://developers.notion.com/reference/get-block-children.md)
|
||||
- [Append Block Children](https://developers.notion.com/reference/patch-block-children.md)
|
||||
- [List Users](https://developers.notion.com/reference/get-users.md)
|
||||
- [Filter Reference](https://developers.notion.com/reference/post-database-query-filter.md)
|
||||
- [LLM Reference](https://developers.notion.com/llms.txt)
|
||||
- [Version Reference](https://developers.notion.com/guides/get-started/upgrade-guide-2025-09-03)
|
||||
118
skills/api-gateway/references/one-drive.md
Normal file
118
skills/api-gateway/references/one-drive.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# OneDrive Routing Reference
|
||||
|
||||
**App name:** `one-drive`
|
||||
**Base URL proxied:** `graph.microsoft.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/one-drive/v1.0/me/drive/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get User's Drive
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive
|
||||
```
|
||||
|
||||
### List Drives
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drives
|
||||
```
|
||||
|
||||
### Get Drive Root
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/root
|
||||
```
|
||||
|
||||
### List Root Children
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/root/children
|
||||
```
|
||||
|
||||
### Get Item by ID
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/items/{item-id}
|
||||
```
|
||||
|
||||
### Get Item by Path
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/root:/Documents/file.txt
|
||||
```
|
||||
|
||||
### List Folder Children by Path
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/root:/Documents:/children
|
||||
```
|
||||
|
||||
### Create Folder
|
||||
```bash
|
||||
POST /one-drive/v1.0/me/drive/root/children
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Folder",
|
||||
"folder": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Upload File (Simple - up to 4MB)
|
||||
```bash
|
||||
PUT /one-drive/v1.0/me/drive/root:/filename.txt:/content
|
||||
Content-Type: text/plain
|
||||
|
||||
{file content}
|
||||
```
|
||||
|
||||
### Delete Item
|
||||
```bash
|
||||
DELETE /one-drive/v1.0/me/drive/items/{item-id}
|
||||
```
|
||||
|
||||
### Create Sharing Link
|
||||
```bash
|
||||
POST /one-drive/v1.0/me/drive/items/{item-id}/createLink
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"type": "view",
|
||||
"scope": "anonymous"
|
||||
}
|
||||
```
|
||||
|
||||
### Search Files
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/root/search(q='query')
|
||||
```
|
||||
|
||||
### Special Folders
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/special/documents
|
||||
GET /one-drive/v1.0/me/drive/special/photos
|
||||
```
|
||||
|
||||
### Recent Files
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/recent
|
||||
```
|
||||
|
||||
### Shared With Me
|
||||
```bash
|
||||
GET /one-drive/v1.0/me/drive/sharedWithMe
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router injects the OAuth token
|
||||
- Uses Microsoft Graph API (`graph.microsoft.com`)
|
||||
- Use colon (`:`) syntax for path-based addressing
|
||||
- Simple uploads limited to 4MB; use resumable upload for larger files
|
||||
- Download URLs in `@microsoft.graph.downloadUrl` are pre-authenticated
|
||||
- Supports OData query parameters: `$select`, `$expand`, `$filter`, `$orderby`, `$top`
|
||||
|
||||
## Resources
|
||||
|
||||
- [OneDrive Developer Documentation](https://learn.microsoft.com/en-us/onedrive/developer/)
|
||||
- [Microsoft Graph API Reference](https://learn.microsoft.com/en-us/graph/api/overview)
|
||||
- [DriveItem Resource](https://learn.microsoft.com/en-us/graph/api/resources/driveitem)
|
||||
238
skills/api-gateway/references/outlook.md
Normal file
238
skills/api-gateway/references/outlook.md
Normal file
@@ -0,0 +1,238 @@
|
||||
# Outlook Routing Reference
|
||||
|
||||
**App name:** `outlook`
|
||||
**Base URL proxied:** `graph.microsoft.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/outlook/v1.0/me/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### User Profile
|
||||
```bash
|
||||
GET /outlook/v1.0/me
|
||||
```
|
||||
|
||||
### Mail Folders
|
||||
|
||||
#### List Mail Folders
|
||||
```bash
|
||||
GET /outlook/v1.0/me/mailFolders
|
||||
```
|
||||
|
||||
Well-known folder names: `Inbox`, `Drafts`, `SentItems`, `DeletedItems`, `Archive`, `JunkEmail`
|
||||
|
||||
#### Get Mail Folder
|
||||
```bash
|
||||
GET /outlook/v1.0/me/mailFolders/{folderId}
|
||||
```
|
||||
|
||||
#### Create Mail Folder
|
||||
```bash
|
||||
POST /outlook/v1.0/me/mailFolders
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"displayName": "My Folder"
|
||||
}
|
||||
```
|
||||
|
||||
### Messages
|
||||
|
||||
#### List Messages
|
||||
```bash
|
||||
GET /outlook/v1.0/me/messages
|
||||
```
|
||||
|
||||
From specific folder:
|
||||
```bash
|
||||
GET /outlook/v1.0/me/mailFolders/Inbox/messages
|
||||
```
|
||||
|
||||
With filter:
|
||||
```bash
|
||||
GET /outlook/v1.0/me/messages?$filter=isRead eq false&$top=10
|
||||
```
|
||||
|
||||
#### Get Message
|
||||
```bash
|
||||
GET /outlook/v1.0/me/messages/{messageId}
|
||||
```
|
||||
|
||||
#### Send Message
|
||||
```bash
|
||||
POST /outlook/v1.0/me/sendMail
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"message": {
|
||||
"subject": "Hello",
|
||||
"body": {
|
||||
"contentType": "Text",
|
||||
"content": "This is the email body."
|
||||
},
|
||||
"toRecipients": [
|
||||
{
|
||||
"emailAddress": {
|
||||
"address": "recipient@example.com"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"saveToSentItems": true
|
||||
}
|
||||
```
|
||||
|
||||
#### Create Draft
|
||||
```bash
|
||||
POST /outlook/v1.0/me/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subject": "Hello",
|
||||
"body": {
|
||||
"contentType": "Text",
|
||||
"content": "This is the email body."
|
||||
},
|
||||
"toRecipients": [
|
||||
{
|
||||
"emailAddress": {
|
||||
"address": "recipient@example.com"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Send Existing Draft
|
||||
```bash
|
||||
POST /outlook/v1.0/me/messages/{messageId}/send
|
||||
```
|
||||
|
||||
#### Update Message (Mark as Read)
|
||||
```bash
|
||||
PATCH /outlook/v1.0/me/messages/{messageId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"isRead": true
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Message
|
||||
```bash
|
||||
DELETE /outlook/v1.0/me/messages/{messageId}
|
||||
```
|
||||
|
||||
#### Move Message
|
||||
```bash
|
||||
POST /outlook/v1.0/me/messages/{messageId}/move
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"destinationId": "{folderId}"
|
||||
}
|
||||
```
|
||||
|
||||
### Calendar
|
||||
|
||||
#### List Calendars
|
||||
```bash
|
||||
GET /outlook/v1.0/me/calendars
|
||||
```
|
||||
|
||||
#### List Events
|
||||
```bash
|
||||
GET /outlook/v1.0/me/calendar/events
|
||||
```
|
||||
|
||||
With filter:
|
||||
```bash
|
||||
GET /outlook/v1.0/me/calendar/events?$filter=start/dateTime ge '2024-01-01'&$top=10
|
||||
```
|
||||
|
||||
#### Create Event
|
||||
```bash
|
||||
POST /outlook/v1.0/me/calendar/events
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subject": "Meeting",
|
||||
"start": {
|
||||
"dateTime": "2024-01-15T10:00:00",
|
||||
"timeZone": "UTC"
|
||||
},
|
||||
"end": {
|
||||
"dateTime": "2024-01-15T11:00:00",
|
||||
"timeZone": "UTC"
|
||||
},
|
||||
"attendees": [
|
||||
{
|
||||
"emailAddress": {
|
||||
"address": "attendee@example.com"
|
||||
},
|
||||
"type": "required"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Event
|
||||
```bash
|
||||
DELETE /outlook/v1.0/me/events/{eventId}
|
||||
```
|
||||
|
||||
### Contacts
|
||||
|
||||
#### List Contacts
|
||||
```bash
|
||||
GET /outlook/v1.0/me/contacts
|
||||
```
|
||||
|
||||
#### Create Contact
|
||||
```bash
|
||||
POST /outlook/v1.0/me/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"givenName": "John",
|
||||
"surname": "Doe",
|
||||
"emailAddresses": [
|
||||
{
|
||||
"address": "john.doe@example.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Contact
|
||||
```bash
|
||||
DELETE /outlook/v1.0/me/contacts/{contactId}
|
||||
```
|
||||
|
||||
## OData Query Parameters
|
||||
|
||||
- `$top=10` - Limit results
|
||||
- `$skip=20` - Skip results (pagination)
|
||||
- `$select=subject,from` - Select specific fields
|
||||
- `$filter=isRead eq false` - Filter results
|
||||
- `$orderby=receivedDateTime desc` - Sort results
|
||||
- `$search="keyword"` - Search content
|
||||
|
||||
## Notes
|
||||
|
||||
- Use `me` as the user identifier for the authenticated user
|
||||
- Message body content types: `Text` or `HTML`
|
||||
- Well-known folder names work as folder IDs: `Inbox`, `Drafts`, `SentItems`, etc.
|
||||
- Calendar events use ISO 8601 datetime format
|
||||
|
||||
## Resources
|
||||
|
||||
- [Microsoft Graph API Overview](https://learn.microsoft.com/en-us/graph/api/overview)
|
||||
- [Mail API](https://learn.microsoft.com/en-us/graph/api/resources/mail-api-overview)
|
||||
- [Calendar API](https://learn.microsoft.com/en-us/graph/api/resources/calendar)
|
||||
- [Contacts API](https://learn.microsoft.com/en-us/graph/api/resources/contact)
|
||||
- [Query Parameters](https://learn.microsoft.com/en-us/graph/query-parameters)
|
||||
161
skills/api-gateway/references/pipedrive.md
Normal file
161
skills/api-gateway/references/pipedrive.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# Pipedrive Routing Reference
|
||||
|
||||
**App name:** `pipedrive`
|
||||
**Base URL proxied:** `api.pipedrive.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/pipedrive/api/v1/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Deals
|
||||
```bash
|
||||
GET /pipedrive/api/v1/deals?status=open&limit=50
|
||||
```
|
||||
|
||||
### Get Deal
|
||||
```bash
|
||||
GET /pipedrive/api/v1/deals/{id}
|
||||
```
|
||||
|
||||
### Create Deal
|
||||
```bash
|
||||
POST /pipedrive/api/v1/deals
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "New Enterprise Deal",
|
||||
"value": 50000,
|
||||
"currency": "USD",
|
||||
"person_id": 123,
|
||||
"org_id": 456,
|
||||
"stage_id": 1,
|
||||
"expected_close_date": "2025-06-30"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Deal
|
||||
```bash
|
||||
PUT /pipedrive/api/v1/deals/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Updated Deal Title",
|
||||
"value": 75000,
|
||||
"status": "won"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Deal
|
||||
```bash
|
||||
DELETE /pipedrive/api/v1/deals/{id}
|
||||
```
|
||||
|
||||
### Search Deals
|
||||
```bash
|
||||
GET /pipedrive/api/v1/deals/search?term=enterprise
|
||||
```
|
||||
|
||||
### List Persons
|
||||
```bash
|
||||
GET /pipedrive/api/v1/persons
|
||||
```
|
||||
|
||||
### Create Person
|
||||
```bash
|
||||
POST /pipedrive/api/v1/persons
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "John Doe",
|
||||
"email": ["john@example.com"],
|
||||
"phone": ["+1234567890"],
|
||||
"org_id": 456
|
||||
}
|
||||
```
|
||||
|
||||
### List Organizations
|
||||
```bash
|
||||
GET /pipedrive/api/v1/organizations
|
||||
```
|
||||
|
||||
### Create Organization
|
||||
```bash
|
||||
POST /pipedrive/api/v1/organizations
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Acme Corporation",
|
||||
"address": "123 Main St, City, Country"
|
||||
}
|
||||
```
|
||||
|
||||
### List Activities
|
||||
```bash
|
||||
GET /pipedrive/api/v1/activities?type=call&done=0
|
||||
```
|
||||
|
||||
### Create Activity
|
||||
```bash
|
||||
POST /pipedrive/api/v1/activities
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"subject": "Follow-up call",
|
||||
"type": "call",
|
||||
"due_date": "2025-03-15",
|
||||
"due_time": "14:00",
|
||||
"deal_id": 789,
|
||||
"person_id": 123
|
||||
}
|
||||
```
|
||||
|
||||
### List Pipelines
|
||||
```bash
|
||||
GET /pipedrive/api/v1/pipelines
|
||||
```
|
||||
|
||||
### List Stages
|
||||
```bash
|
||||
GET /pipedrive/api/v1/stages?pipeline_id=1
|
||||
```
|
||||
|
||||
### Create Note
|
||||
```bash
|
||||
POST /pipedrive/api/v1/notes
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content": "Meeting notes: Discussed pricing and timeline",
|
||||
"deal_id": 789,
|
||||
"pinned_to_deal_flag": 1
|
||||
}
|
||||
```
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /pipedrive/api/v1/users/me
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- IDs are integers
|
||||
- Email and phone fields accept arrays for multiple values
|
||||
- `visible_to` values: 1 (owner only), 3 (entire company), 5 (owner's visibility group), 7 (entire company and visibility group)
|
||||
- Deal status: `open`, `won`, `lost`, `deleted`
|
||||
- Use `start` and `limit` for pagination
|
||||
- Custom fields are supported via their API key (e.g., `abc123_custom_field`)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Pipedrive API Overview](https://developers.pipedrive.com/docs/api/v1)
|
||||
- [Deals](https://developers.pipedrive.com/docs/api/v1/Deals)
|
||||
- [Persons](https://developers.pipedrive.com/docs/api/v1/Persons)
|
||||
- [Organizations](https://developers.pipedrive.com/docs/api/v1/Organizations)
|
||||
- [Activities](https://developers.pipedrive.com/docs/api/v1/Activities)
|
||||
- [Pipelines](https://developers.pipedrive.com/docs/api/v1/Pipelines)
|
||||
- [Stages](https://developers.pipedrive.com/docs/api/v1/Stages)
|
||||
- [Notes](https://developers.pipedrive.com/docs/api/v1/Notes)
|
||||
384
skills/api-gateway/references/quickbooks.md
Normal file
384
skills/api-gateway/references/quickbooks.md
Normal file
@@ -0,0 +1,384 @@
|
||||
# QuickBooks Routing Reference
|
||||
|
||||
**App name:** `quickbooks`
|
||||
**Base URL proxied:** `quickbooks.api.intuit.com`
|
||||
|
||||
## Special Handling
|
||||
|
||||
Use `:realmId` in the path and it will be automatically replaced with the connected company's realm ID.
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/quickbooks/v3/company/:realmId/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Company Info
|
||||
|
||||
#### Get Company Info
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/companyinfo/:realmId
|
||||
```
|
||||
|
||||
#### Get Preferences
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/preferences
|
||||
```
|
||||
|
||||
### Customers
|
||||
|
||||
#### Query Customers
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Customer%20MAXRESULTS%20100
|
||||
```
|
||||
|
||||
With filter:
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Customer%20WHERE%20Active%3Dtrue
|
||||
```
|
||||
|
||||
#### Get Customer
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/customer/{customerId}
|
||||
```
|
||||
|
||||
#### Create Customer
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/customer
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"DisplayName": "John Doe",
|
||||
"PrimaryEmailAddr": {"Address": "john@example.com"},
|
||||
"PrimaryPhone": {"FreeFormNumber": "555-1234"}
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Customer
|
||||
Requires `Id` and `SyncToken` from previous GET:
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/customer
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Id": "123",
|
||||
"SyncToken": "0",
|
||||
"DisplayName": "John Doe Updated",
|
||||
"PrimaryPhone": {"FreeFormNumber": "555-9999"}
|
||||
}
|
||||
```
|
||||
|
||||
#### Deactivate Customer (Soft Delete)
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/customer
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Id": "123",
|
||||
"SyncToken": "1",
|
||||
"DisplayName": "John Doe",
|
||||
"Active": false
|
||||
}
|
||||
```
|
||||
|
||||
### Vendors
|
||||
|
||||
#### Query Vendors
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Vendor%20MAXRESULTS%20100
|
||||
```
|
||||
|
||||
#### Get Vendor
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/vendor/{vendorId}
|
||||
```
|
||||
|
||||
#### Create Vendor
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/vendor
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"DisplayName": "Acme Supplies",
|
||||
"PrimaryEmailAddr": {"Address": "vendor@example.com"}
|
||||
}
|
||||
```
|
||||
|
||||
### Items (Products/Services)
|
||||
|
||||
#### Query Items
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Item%20MAXRESULTS%20100
|
||||
```
|
||||
|
||||
#### Get Item
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/item/{itemId}
|
||||
```
|
||||
|
||||
#### Create Item
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/item
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Name": "Consulting Services",
|
||||
"Type": "Service",
|
||||
"IncomeAccountRef": {"value": "1"}
|
||||
}
|
||||
```
|
||||
|
||||
### Invoices
|
||||
|
||||
#### Query Invoices
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Invoice%20MAXRESULTS%20100
|
||||
```
|
||||
|
||||
#### Get Invoice
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/invoice/{invoiceId}
|
||||
```
|
||||
|
||||
#### Create Invoice
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/invoice
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"CustomerRef": {"value": "123"},
|
||||
"Line": [
|
||||
{
|
||||
"Amount": 100.00,
|
||||
"DetailType": "SalesItemLineDetail",
|
||||
"SalesItemLineDetail": {
|
||||
"ItemRef": {"value": "1"},
|
||||
"Qty": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Void Invoice
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/invoice?operation=void
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Id": "123",
|
||||
"SyncToken": "0"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Invoice
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/invoice?operation=delete
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Id": "123",
|
||||
"SyncToken": "0"
|
||||
}
|
||||
```
|
||||
|
||||
### Payments
|
||||
|
||||
#### Query Payments
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Payment%20MAXRESULTS%20100
|
||||
```
|
||||
|
||||
#### Create Payment
|
||||
Simple payment:
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/payment
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"CustomerRef": {"value": "123"},
|
||||
"TotalAmt": 100.00
|
||||
}
|
||||
```
|
||||
|
||||
Payment linked to invoice:
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/payment
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"CustomerRef": {"value": "123"},
|
||||
"TotalAmt": 100.00,
|
||||
"Line": [
|
||||
{
|
||||
"Amount": 100.00,
|
||||
"LinkedTxn": [{"TxnId": "456", "TxnType": "Invoice"}]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Bills
|
||||
|
||||
#### Query Bills
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Bill%20MAXRESULTS%20100
|
||||
```
|
||||
|
||||
#### Create Bill
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/bill
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"VendorRef": {"value": "123"},
|
||||
"Line": [
|
||||
{
|
||||
"DetailType": "AccountBasedExpenseLineDetail",
|
||||
"Amount": 250.00,
|
||||
"AccountBasedExpenseLineDetail": {
|
||||
"AccountRef": {"value": "1"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Bill Payments
|
||||
|
||||
#### Create Bill Payment
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/billpayment
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"VendorRef": {"value": "123"},
|
||||
"TotalAmt": 250.00,
|
||||
"PayType": "Check",
|
||||
"CheckPayment": {
|
||||
"BankAccountRef": {"value": "23"}
|
||||
},
|
||||
"Line": [
|
||||
{
|
||||
"Amount": 250.00,
|
||||
"LinkedTxn": [{"TxnId": "456", "TxnType": "Bill"}]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**Note:** Use a Bank account (AccountType: "Bank") for `BankAccountRef`.
|
||||
|
||||
### Accounts
|
||||
|
||||
#### Query Accounts
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Account
|
||||
```
|
||||
|
||||
Filter by type:
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Account%20WHERE%20AccountType%20%3D%20%27Bank%27
|
||||
```
|
||||
|
||||
### Reports
|
||||
|
||||
#### Profit and Loss
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/reports/ProfitAndLoss?start_date=2024-01-01&end_date=2024-12-31
|
||||
```
|
||||
|
||||
#### Balance Sheet
|
||||
```bash
|
||||
GET /quickbooks/v3/company/:realmId/reports/BalanceSheet?date=2024-12-31
|
||||
```
|
||||
|
||||
### Batch Operations
|
||||
|
||||
Execute multiple queries in a single request:
|
||||
```bash
|
||||
POST /quickbooks/v3/company/:realmId/batch
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"BatchItemRequest": [
|
||||
{"bId": "1", "Query": "SELECT * FROM Customer MAXRESULTS 2"},
|
||||
{"bId": "2", "Query": "SELECT * FROM Vendor MAXRESULTS 2"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Query Language
|
||||
|
||||
QuickBooks uses a SQL-like query language:
|
||||
```sql
|
||||
SELECT * FROM Customer WHERE DisplayName LIKE 'John%' MAXRESULTS 100
|
||||
```
|
||||
|
||||
Operators: `=`, `LIKE`, `<`, `>`, `<=`, `>=`, `IN`
|
||||
|
||||
## SyncToken for Updates
|
||||
|
||||
All update operations require the current `SyncToken` from the entity. The SyncToken is incremented after each successful update.
|
||||
|
||||
1. GET the entity to retrieve current `SyncToken`
|
||||
2. Include `Id` and `SyncToken` in the POST body
|
||||
3. If the SyncToken doesn't match, the update fails (optimistic locking)
|
||||
|
||||
## Void vs Delete
|
||||
|
||||
- **Void**: Sets transaction amount to 0, adds "Voided" note, keeps record. Use for audit trail.
|
||||
- **Delete**: Permanently removes the transaction. Use `?operation=delete` query parameter.
|
||||
|
||||
Both require `Id` and `SyncToken` in the request body.
|
||||
|
||||
## Notes
|
||||
|
||||
- `:realmId` is automatically replaced by the router
|
||||
- All queries must be URL-encoded
|
||||
- Use `MAXRESULTS` to limit query results (default varies by entity)
|
||||
- Include `SyncToken` when updating entities (for optimistic locking)
|
||||
- Dates are in `YYYY-MM-DD` format
|
||||
- Soft delete entities (Customer, Vendor, Item) by setting `Active: false`
|
||||
- Transactions (Invoice, Payment, Bill) can be voided or deleted
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developer.intuit.com/app/developer/qbo/docs/get-started)
|
||||
- [Query Customers](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#query-a-customer)
|
||||
- [Get Customer](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#read-a-customer)
|
||||
- [Create Customer](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#create-a-customer)
|
||||
- [Update Customer](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#full-update-a-customer)
|
||||
- [Query Invoices](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#query-an-invoice)
|
||||
- [Get Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#read-an-invoice)
|
||||
- [Create Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#create-an-invoice)
|
||||
- [Update Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#full-update-an-invoice)
|
||||
- [Delete Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#delete-an-invoice)
|
||||
- [Send Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#send-an-invoice)
|
||||
- [Query Items](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#query-an-item)
|
||||
- [Get Item](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#read-an-item)
|
||||
- [Create Item](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#create-an-item)
|
||||
- [Update Item](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#full-update-an-item)
|
||||
- [Query Accounts](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#query-an-account)
|
||||
- [Get Account](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#read-an-account)
|
||||
- [Create Account](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#create-an-account)
|
||||
- [Update Account](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#full-update-an-account)
|
||||
- [Query Payments](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#query-a-payment)
|
||||
- [Get Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#read-a-payment)
|
||||
- [Create Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#create-a-payment)
|
||||
- [Update Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#full-update-a-payment)
|
||||
- [Delete Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#delete-a-payment)
|
||||
- [Query Vendors](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#query-a-vendor)
|
||||
- [Get Vendor](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#read-a-vendor)
|
||||
- [Create Vendor](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#create-a-vendor)
|
||||
- [Update Vendor](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#full-update-a-vendor)
|
||||
- [Query Bills](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#query-a-bill)
|
||||
- [Get Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#read-a-bill)
|
||||
- [Create Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#create-a-bill)
|
||||
- [Update Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#full-update-a-bill)
|
||||
- [Delete Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#delete-a-bill)
|
||||
- [Profit and Loss Report](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/report-entities/profitandloss)
|
||||
- [Balance Sheet Report](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/report-entities/balancesheet)
|
||||
- [Query Reference](https://developer.intuit.com/app/developer/qbdesktop/docs/develop/exploring-the-quickbooks-desktop-sdk/query-requests-and-responses)
|
||||
188
skills/api-gateway/references/quo.md
Normal file
188
skills/api-gateway/references/quo.md
Normal file
@@ -0,0 +1,188 @@
|
||||
# Quo Routing Reference
|
||||
|
||||
**App name:** `quo`
|
||||
**Base URL proxied:** `api.openphone.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/quo/v1/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Phone Numbers
|
||||
|
||||
#### List Phone Numbers
|
||||
```bash
|
||||
GET /quo/v1/phone-numbers
|
||||
```
|
||||
|
||||
### Users
|
||||
|
||||
#### List Users
|
||||
```bash
|
||||
GET /quo/v1/users?maxResults=50
|
||||
```
|
||||
|
||||
#### Get User
|
||||
```bash
|
||||
GET /quo/v1/users/{userId}
|
||||
```
|
||||
|
||||
### Messages
|
||||
|
||||
#### Send Text Message
|
||||
```bash
|
||||
POST /quo/v1/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content": "Hello, world!",
|
||||
"from": "PN123abc",
|
||||
"to": ["+15555555555"]
|
||||
}
|
||||
```
|
||||
|
||||
#### List Messages
|
||||
```bash
|
||||
GET /quo/v1/messages?phoneNumberId=PN123abc&participants[]=+15555555555&maxResults=100
|
||||
```
|
||||
|
||||
#### Get Message
|
||||
```bash
|
||||
GET /quo/v1/messages/{messageId}
|
||||
```
|
||||
|
||||
### Calls
|
||||
|
||||
#### List Calls
|
||||
```bash
|
||||
GET /quo/v1/calls?phoneNumberId=PN123abc&participants[]=+15555555555&maxResults=100
|
||||
```
|
||||
|
||||
#### Get Call
|
||||
```bash
|
||||
GET /quo/v1/calls/{callId}
|
||||
```
|
||||
|
||||
#### Get Call Recordings
|
||||
```bash
|
||||
GET /quo/v1/call-recordings/{callId}
|
||||
```
|
||||
|
||||
#### Get Call Summary
|
||||
```bash
|
||||
GET /quo/v1/call-summaries/{callId}
|
||||
```
|
||||
|
||||
#### Get Call Transcript
|
||||
```bash
|
||||
GET /quo/v1/call-transcripts/{callId}
|
||||
```
|
||||
|
||||
#### Get Call Voicemail
|
||||
```bash
|
||||
GET /quo/v1/call-voicemails/{callId}
|
||||
```
|
||||
|
||||
### Contacts
|
||||
|
||||
#### List Contacts
|
||||
```bash
|
||||
GET /quo/v1/contacts?maxResults=50
|
||||
```
|
||||
|
||||
#### Get Contact
|
||||
```bash
|
||||
GET /quo/v1/contacts/{contactId}
|
||||
```
|
||||
|
||||
#### Create Contact
|
||||
```bash
|
||||
POST /quo/v1/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"defaultFields": {
|
||||
"firstName": "Jane",
|
||||
"lastName": "Doe",
|
||||
"phoneNumbers": [{"name": "mobile", "value": "+15555555555"}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Contact
|
||||
```bash
|
||||
PATCH /quo/v1/contacts/{contactId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"defaultFields": {
|
||||
"company": "New Company"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Contact
|
||||
```bash
|
||||
DELETE /quo/v1/contacts/{contactId}
|
||||
```
|
||||
|
||||
#### Get Contact Custom Fields
|
||||
```bash
|
||||
GET /quo/v1/contact-custom-fields
|
||||
```
|
||||
|
||||
### Conversations
|
||||
|
||||
#### List Conversations
|
||||
```bash
|
||||
GET /quo/v1/conversations?maxResults=100
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
|
||||
#### List Webhooks
|
||||
```bash
|
||||
GET /quo/v1/webhooks
|
||||
```
|
||||
|
||||
#### Get Webhook
|
||||
```bash
|
||||
GET /quo/v1/webhooks/{webhookId}
|
||||
```
|
||||
|
||||
#### Create Webhook
|
||||
```bash
|
||||
POST /quo/v1/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"url": "https://your-webhook-url.com/calls",
|
||||
"resourceType": "call"
|
||||
}
|
||||
```
|
||||
|
||||
Resource types: `call`, `message`, `callSummary`, `callTranscript`
|
||||
|
||||
#### Delete Webhook
|
||||
```bash
|
||||
DELETE /quo/v1/webhooks/{webhookId}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Phone number IDs start with `PN`
|
||||
- User IDs start with `US`
|
||||
- Call/Message IDs start with `AC`
|
||||
- Phone numbers must be in E.164 format (e.g., `+15555555555`)
|
||||
- Uses token-based pagination with `pageToken` parameter
|
||||
- Maximum 1600 characters per SMS message
|
||||
- List calls requires exactly 1 participant (1:1 conversations only)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Quo API Introduction](https://www.quo.com/docs/mdx/api-reference/introduction)
|
||||
- [Quo API Authentication](https://www.quo.com/docs/mdx/api-reference/authentication)
|
||||
- [Quo Support Center](https://support.quo.com/core-concepts/integrations/api)
|
||||
193
skills/api-gateway/references/salesforce.md
Normal file
193
skills/api-gateway/references/salesforce.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# Salesforce Routing Reference
|
||||
|
||||
**App name:** `salesforce`
|
||||
**Base URL proxied:** `{instance}.salesforce.com`
|
||||
|
||||
The router automatically determines the instance URL from your OAuth credentials (`instance_url` from the token response).
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/salesforce/services/data/v59.0/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### SOQL Query
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/query?q=SELECT+Id,Name+FROM+Contact+LIMIT+10
|
||||
```
|
||||
|
||||
Complex query:
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/query?q=SELECT+Id,Name,Email+FROM+Contact+WHERE+Email+LIKE+'%example.com'+ORDER+BY+CreatedDate+DESC
|
||||
```
|
||||
|
||||
### Get Object
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/sobjects/{objectType}/{recordId}
|
||||
```
|
||||
|
||||
Example:
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/sobjects/Contact/003XXXXXXXXXXXXXXX
|
||||
```
|
||||
|
||||
### Create Object
|
||||
```bash
|
||||
POST /salesforce/services/data/v59.0/sobjects/{objectType}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"FirstName": "John",
|
||||
"LastName": "Doe",
|
||||
"Email": "john@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Object
|
||||
```bash
|
||||
PATCH /salesforce/services/data/v59.0/sobjects/{objectType}/{recordId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Phone": "+1234567890"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Object
|
||||
```bash
|
||||
DELETE /salesforce/services/data/v59.0/sobjects/{objectType}/{recordId}
|
||||
```
|
||||
|
||||
### Describe Object (get schema)
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/sobjects/{objectType}/describe
|
||||
```
|
||||
|
||||
### List Objects
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/sobjects
|
||||
```
|
||||
|
||||
### Search (SOSL)
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/search?q=FIND+{searchTerm}+IN+ALL+FIELDS+RETURNING+Contact(Id,Name)
|
||||
```
|
||||
|
||||
### Composite Request (batch multiple operations)
|
||||
```bash
|
||||
POST /salesforce/services/data/v59.0/composite
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"compositeRequest": [
|
||||
{
|
||||
"method": "GET",
|
||||
"url": "/services/data/v59.0/sobjects/Contact/003XXXXXXX",
|
||||
"referenceId": "contact1"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"url": "/services/data/v59.0/sobjects/Account/001XXXXXXX",
|
||||
"referenceId": "account1"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Composite Batch Request
|
||||
```bash
|
||||
POST /salesforce/services/data/v59.0/composite/batch
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"batchRequests": [
|
||||
{"method": "GET", "url": "v59.0/sobjects/Contact/003XXXXXXX"},
|
||||
{"method": "GET", "url": "v59.0/sobjects/Account/001XXXXXXX"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### sObject Collections Create (batch create)
|
||||
```bash
|
||||
POST /salesforce/services/data/v59.0/composite/sobjects
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"allOrNone": true,
|
||||
"records": [
|
||||
{"attributes": {"type": "Contact"}, "FirstName": "John", "LastName": "Doe"},
|
||||
{"attributes": {"type": "Contact"}, "FirstName": "Jane", "LastName": "Smith"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### sObject Collections Delete (batch delete)
|
||||
```bash
|
||||
DELETE /salesforce/services/data/v59.0/composite/sobjects?ids=003XXXXX,003YYYYY&allOrNone=true
|
||||
```
|
||||
|
||||
### Get Updated Records
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/sobjects/{objectType}/updated/?start=2026-01-30T00:00:00Z&end=2026-02-01T00:00:00Z
|
||||
```
|
||||
|
||||
### Get Deleted Records
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/sobjects/{objectType}/deleted/?start=2026-01-30T00:00:00Z&end=2026-02-01T00:00:00Z
|
||||
```
|
||||
|
||||
### Get API Limits
|
||||
```bash
|
||||
GET /salesforce/services/data/v59.0/limits
|
||||
```
|
||||
|
||||
### List API Versions
|
||||
```bash
|
||||
GET /salesforce/services/data/
|
||||
```
|
||||
|
||||
## Common Objects
|
||||
|
||||
- `Account` - Companies/Organizations
|
||||
- `Contact` - People associated with accounts
|
||||
- `Lead` - Potential customers
|
||||
- `Opportunity` - Sales deals
|
||||
- `Case` - Support cases
|
||||
- `Task` - To-do items
|
||||
- `Event` - Calendar events
|
||||
|
||||
## Notes
|
||||
|
||||
- Use URL encoding for SOQL queries (spaces become `+`)
|
||||
- Record IDs are 15 or 18 character alphanumeric strings
|
||||
- API version (v59.0) can be adjusted; latest is v65.0
|
||||
- Update and Delete operations return HTTP 204 (no content) on success
|
||||
- Dates for updated/deleted queries use ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`
|
||||
- Use `allOrNone: true` in batch operations for atomic transactions
|
||||
|
||||
## Resources
|
||||
|
||||
- [REST API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm)
|
||||
- [List sObjects](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_describeGlobal.htm)
|
||||
- [Describe sObject](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_sobject_describe.htm)
|
||||
- [Get Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_sobject_retrieve_get.htm)
|
||||
- [Get Record by External ID](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_sobject_upsert_get.htm)
|
||||
- [Create Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_create.htm)
|
||||
- [Update Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_update_fields.htm)
|
||||
- [Delete Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_delete_record.htm)
|
||||
- [Upsert Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_upsert.htm)
|
||||
- [Query Records (SOQL)](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm)
|
||||
- [Get Updated Records](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_getupdated.htm)
|
||||
- [Get Deleted Records](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_getdeleted.htm)
|
||||
- [Composite Request](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_composite_post.htm)
|
||||
- [Composite Batch Request](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/requests_composite_batch.htm)
|
||||
- [Composite Batch Response](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/responses_composite_batch.htm)
|
||||
- [Composite Graph](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_graph.htm)
|
||||
- [sObject Collections Create](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_sobjects_collections_create.htm)
|
||||
- [sObject Collections Update](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_sobjects_collections_update.htm)
|
||||
- [sObject Collections Delete](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_sobjects_collections_delete.htm)
|
||||
- [SOQL Reference](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql.htm)
|
||||
- [SOSL Reference](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_sosl.htm)
|
||||
- [API Resources List](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_list.htm)
|
||||
96
skills/api-gateway/references/signnow.md
Normal file
96
skills/api-gateway/references/signnow.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# SignNow Routing Reference
|
||||
|
||||
**App name:** `signnow`
|
||||
**Base URL proxied:** `api.signnow.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/signnow/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### User
|
||||
|
||||
```bash
|
||||
GET /signnow/user
|
||||
GET /signnow/user/documents
|
||||
```
|
||||
|
||||
### Documents
|
||||
|
||||
```bash
|
||||
# Upload document (multipart form data)
|
||||
POST /signnow/document
|
||||
|
||||
# Get document
|
||||
GET /signnow/document/{document_id}
|
||||
|
||||
# Update document
|
||||
PUT /signnow/document/{document_id}
|
||||
|
||||
# Download document
|
||||
GET /signnow/document/{document_id}/download?type=collapsed
|
||||
|
||||
# Get document history
|
||||
GET /signnow/document/{document_id}/historyfull
|
||||
|
||||
# Move document to folder
|
||||
POST /signnow/document/{document_id}/move
|
||||
|
||||
# Merge documents (returns PDF)
|
||||
POST /signnow/document/merge
|
||||
|
||||
# Delete document
|
||||
DELETE /signnow/document/{document_id}
|
||||
```
|
||||
|
||||
### Templates
|
||||
|
||||
```bash
|
||||
# Create template from document
|
||||
POST /signnow/template
|
||||
|
||||
# Create document from template
|
||||
POST /signnow/template/{template_id}/copy
|
||||
```
|
||||
|
||||
### Invites
|
||||
|
||||
```bash
|
||||
# Send freeform invite
|
||||
POST /signnow/document/{document_id}/invite
|
||||
|
||||
# Create signing link (requires document fields)
|
||||
POST /signnow/link
|
||||
```
|
||||
|
||||
### Folders
|
||||
|
||||
```bash
|
||||
GET /signnow/folder
|
||||
GET /signnow/folder/{folder_id}
|
||||
```
|
||||
|
||||
### Webhooks (Event Subscriptions)
|
||||
|
||||
```bash
|
||||
GET /signnow/event_subscription
|
||||
POST /signnow/event_subscription
|
||||
DELETE /signnow/event_subscription/{subscription_id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Documents must be uploaded as multipart form data with PDF file
|
||||
- Supported file types: PDF, DOC, DOCX, ODT, RTF, PNG, JPG
|
||||
- System folders cannot be renamed or deleted
|
||||
- Creating signing links requires documents to have signature fields
|
||||
- Custom invite subject/message requires paid subscription
|
||||
- Rate limit in development mode: 500 requests/hour per application
|
||||
|
||||
## Resources
|
||||
|
||||
- [SignNow API Reference](https://docs.signnow.com/docs/signnow/reference)
|
||||
- [SignNow Developer Portal](https://www.signnow.com/developers)
|
||||
178
skills/api-gateway/references/slack.md
Normal file
178
skills/api-gateway/references/slack.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# Slack Routing Reference
|
||||
|
||||
**App name:** `slack`
|
||||
**Base URL proxied:** `slack.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/slack/api/{method}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Post Message
|
||||
```bash
|
||||
POST /slack/api/chat.postMessage
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"channel": "C0123456789",
|
||||
"text": "Hello, world!"
|
||||
}
|
||||
```
|
||||
|
||||
With blocks:
|
||||
```bash
|
||||
POST /slack/api/chat.postMessage
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"channel": "C0123456789",
|
||||
"blocks": [
|
||||
{"type": "section", "text": {"type": "mrkdwn", "text": "*Bold* and _italic_"}}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### List Channels
|
||||
```bash
|
||||
GET /slack/api/conversations.list?types=public_channel,private_channel
|
||||
```
|
||||
|
||||
### Get Channel Info
|
||||
```bash
|
||||
GET /slack/api/conversations.info?channel=C0123456789
|
||||
```
|
||||
|
||||
### List Messages in Channel
|
||||
```bash
|
||||
GET /slack/api/conversations.history?channel=C0123456789&limit=100
|
||||
```
|
||||
|
||||
### Get Thread Replies
|
||||
```bash
|
||||
GET /slack/api/conversations.replies?channel=C0123456789&ts=1234567890.123456
|
||||
```
|
||||
|
||||
### List Users
|
||||
```bash
|
||||
GET /slack/api/users.list
|
||||
```
|
||||
|
||||
### Get User Info
|
||||
```bash
|
||||
GET /slack/api/users.info?user=U0123456789
|
||||
```
|
||||
|
||||
### Search Messages
|
||||
```bash
|
||||
GET /slack/api/search.messages?query=keyword
|
||||
```
|
||||
|
||||
### Upload File
|
||||
```bash
|
||||
POST /slack/api/files.upload
|
||||
Content-Type: multipart/form-data
|
||||
|
||||
channels=C0123456789
|
||||
content=file content here
|
||||
filename=example.txt
|
||||
```
|
||||
|
||||
### Add Reaction
|
||||
```bash
|
||||
POST /slack/api/reactions.add
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"channel": "C0123456789",
|
||||
"name": "thumbsup",
|
||||
"timestamp": "1234567890.123456"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Message
|
||||
```bash
|
||||
POST /slack/api/chat.update
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"channel": "C0123456789",
|
||||
"ts": "1234567890.123456",
|
||||
"text": "Updated message"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Message
|
||||
```bash
|
||||
POST /slack/api/chat.delete
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"channel": "C0123456789",
|
||||
"ts": "1234567890.123456"
|
||||
}
|
||||
```
|
||||
|
||||
### Post Thread Reply
|
||||
```bash
|
||||
POST /slack/api/chat.postMessage
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"channel": "C0123456789",
|
||||
"thread_ts": "1234567890.123456",
|
||||
"text": "This is a reply in a thread"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Channel Members
|
||||
```bash
|
||||
GET /slack/api/conversations.members?channel=C0123456789&limit=100
|
||||
```
|
||||
|
||||
### Open DM Conversation
|
||||
```bash
|
||||
POST /slack/api/conversations.open
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"users": "U0123456789"
|
||||
}
|
||||
```
|
||||
|
||||
### Auth Test (get current user/team)
|
||||
```bash
|
||||
GET /slack/api/auth.test
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Authentication is automatic - the router uses the user's OAuth access token
|
||||
- Channel IDs start with `C` (public), `G` (private/group), or `D` (DM)
|
||||
- User IDs start with `U`, Team IDs start with `T`
|
||||
- Message timestamps (`ts`) are used as unique identifiers
|
||||
- Use `mrkdwn` type for Slack-flavored markdown formatting
|
||||
- Thread replies use `thread_ts` to reference the parent message
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://api.slack.com/apis)
|
||||
- [Post Message](https://api.slack.com/methods/chat.postMessage)
|
||||
- [Update Message](https://api.slack.com/methods/chat.update)
|
||||
- [Delete Message](https://api.slack.com/methods/chat.delete)
|
||||
- [List Channels](https://api.slack.com/methods/conversations.list)
|
||||
- [Get Channel Info](https://api.slack.com/methods/conversations.info)
|
||||
- [Get Channel Members](https://api.slack.com/methods/conversations.members)
|
||||
- [Open Conversation](https://api.slack.com/methods/conversations.open)
|
||||
- [Channel History](https://api.slack.com/methods/conversations.history)
|
||||
- [Thread Replies](https://api.slack.com/methods/conversations.replies)
|
||||
- [List Users](https://api.slack.com/methods/users.list)
|
||||
- [Get User Info](https://api.slack.com/methods/users.info)
|
||||
- [Auth Test](https://api.slack.com/methods/auth.test)
|
||||
- [Search Messages](https://api.slack.com/methods/search.messages)
|
||||
- [Upload File](https://api.slack.com/methods/files.upload)
|
||||
- [Add Reaction](https://api.slack.com/methods/reactions.add)
|
||||
- [Block Kit Reference](https://api.slack.com/reference/block-kit)
|
||||
- [LLM Reference](https://docs.slack.dev/llms.txt)
|
||||
262
skills/api-gateway/references/squareup.md
Normal file
262
skills/api-gateway/references/squareup.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# Square Routing Reference
|
||||
|
||||
**App name:** `squareup`
|
||||
**Base URL proxied:** `connect.squareup.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/squareup/v2/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Locations
|
||||
|
||||
#### List Locations
|
||||
```bash
|
||||
GET /squareup/v2/locations
|
||||
```
|
||||
|
||||
#### Get Location
|
||||
```bash
|
||||
GET /squareup/v2/locations/{location_id}
|
||||
```
|
||||
|
||||
#### Create Location
|
||||
```bash
|
||||
POST /squareup/v2/locations
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"location": {
|
||||
"name": "New Location",
|
||||
"address": {...}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Merchants
|
||||
|
||||
#### Get Current Merchant
|
||||
```bash
|
||||
GET /squareup/v2/merchants/me
|
||||
```
|
||||
|
||||
### Payments
|
||||
|
||||
#### List Payments
|
||||
```bash
|
||||
GET /squareup/v2/payments
|
||||
GET /squareup/v2/payments?location_id={location_id}&begin_time=2026-01-01T00:00:00Z
|
||||
```
|
||||
|
||||
#### Get Payment
|
||||
```bash
|
||||
GET /squareup/v2/payments/{payment_id}
|
||||
```
|
||||
|
||||
#### Create Payment
|
||||
```bash
|
||||
POST /squareup/v2/payments
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"source_id": "cnon:card-nonce-ok",
|
||||
"idempotency_key": "unique-key",
|
||||
"amount_money": {"amount": 1000, "currency": "USD"},
|
||||
"location_id": "{location_id}"
|
||||
}
|
||||
```
|
||||
|
||||
#### Complete Payment
|
||||
```bash
|
||||
POST /squareup/v2/payments/{payment_id}/complete
|
||||
```
|
||||
|
||||
#### Cancel Payment
|
||||
```bash
|
||||
POST /squareup/v2/payments/{payment_id}/cancel
|
||||
```
|
||||
|
||||
### Refunds
|
||||
|
||||
#### List Refunds
|
||||
```bash
|
||||
GET /squareup/v2/refunds
|
||||
```
|
||||
|
||||
#### Create Refund
|
||||
```bash
|
||||
POST /squareup/v2/refunds
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"idempotency_key": "unique-key",
|
||||
"payment_id": "{payment_id}",
|
||||
"amount_money": {"amount": 500, "currency": "USD"}
|
||||
}
|
||||
```
|
||||
|
||||
### Customers
|
||||
|
||||
#### List Customers
|
||||
```bash
|
||||
GET /squareup/v2/customers
|
||||
```
|
||||
|
||||
#### Get Customer
|
||||
```bash
|
||||
GET /squareup/v2/customers/{customer_id}
|
||||
```
|
||||
|
||||
#### Create Customer
|
||||
```bash
|
||||
POST /squareup/v2/customers
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"given_name": "John",
|
||||
"family_name": "Doe",
|
||||
"email_address": "john@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
#### Search Customers
|
||||
```bash
|
||||
POST /squareup/v2/customers/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"query": {"filter": {"email_address": {"exact": "john@example.com"}}}
|
||||
}
|
||||
```
|
||||
|
||||
### Orders
|
||||
|
||||
#### Create Order
|
||||
```bash
|
||||
POST /squareup/v2/orders
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"order": {
|
||||
"location_id": "{location_id}",
|
||||
"line_items": [{"name": "Item", "quantity": "1", "base_price_money": {"amount": 1000, "currency": "USD"}}]
|
||||
},
|
||||
"idempotency_key": "unique-key"
|
||||
}
|
||||
```
|
||||
|
||||
#### Search Orders
|
||||
```bash
|
||||
POST /squareup/v2/orders/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"location_ids": ["{location_id}"]
|
||||
}
|
||||
```
|
||||
|
||||
### Catalog
|
||||
|
||||
#### List Catalog
|
||||
```bash
|
||||
GET /squareup/v2/catalog/list
|
||||
GET /squareup/v2/catalog/list?types=ITEM,CATEGORY
|
||||
```
|
||||
|
||||
#### Get Catalog Object
|
||||
```bash
|
||||
GET /squareup/v2/catalog/object/{object_id}
|
||||
```
|
||||
|
||||
#### Upsert Catalog Object
|
||||
```bash
|
||||
POST /squareup/v2/catalog/object
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"idempotency_key": "unique-key",
|
||||
"object": {"type": "ITEM", "id": "#new-item", "item_data": {"name": "Coffee"}}
|
||||
}
|
||||
```
|
||||
|
||||
#### Search Catalog
|
||||
```bash
|
||||
POST /squareup/v2/catalog/search
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"object_types": ["ITEM"],
|
||||
"query": {"text_query": {"keywords": ["coffee"]}}
|
||||
}
|
||||
```
|
||||
|
||||
### Inventory
|
||||
|
||||
#### Get Inventory Count
|
||||
```bash
|
||||
GET /squareup/v2/inventory/{catalog_object_id}
|
||||
```
|
||||
|
||||
#### Batch Change Inventory
|
||||
```bash
|
||||
POST /squareup/v2/inventory/changes/batch-create
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"idempotency_key": "unique-key",
|
||||
"changes": [...]
|
||||
}
|
||||
```
|
||||
|
||||
### Invoices
|
||||
|
||||
#### List Invoices
|
||||
```bash
|
||||
GET /squareup/v2/invoices?location_id={location_id}
|
||||
```
|
||||
|
||||
#### Create Invoice
|
||||
```bash
|
||||
POST /squareup/v2/invoices
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"invoice": {
|
||||
"location_id": "{location_id}",
|
||||
"order_id": "{order_id}",
|
||||
"primary_recipient": {"customer_id": "{customer_id}"},
|
||||
"payment_requests": [{"request_type": "BALANCE", "due_date": "2026-02-15"}]
|
||||
},
|
||||
"idempotency_key": "unique-key"
|
||||
}
|
||||
```
|
||||
|
||||
#### Publish Invoice
|
||||
```bash
|
||||
POST /squareup/v2/invoices/{invoice_id}/publish
|
||||
Content-Type: application/json
|
||||
|
||||
{"version": 1, "idempotency_key": "unique-key"}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- All amounts are in smallest currency unit (cents for USD: 1000 = $10.00)
|
||||
- Most write operations require an `idempotency_key`
|
||||
- Cursor-based pagination: use `cursor` parameter with value from response
|
||||
- Timestamps are ISO 8601 format
|
||||
- Some endpoints require specific OAuth scopes (CUSTOMERS_READ, ORDERS_READ, ITEMS_READ, INVOICES_READ, etc.)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Square API Overview](https://developer.squareup.com/docs)
|
||||
- [Square API Reference](https://developer.squareup.com/reference/square)
|
||||
- [Payments API](https://developer.squareup.com/reference/square/payments-api)
|
||||
- [Customers API](https://developer.squareup.com/reference/square/customers-api)
|
||||
- [Orders API](https://developer.squareup.com/reference/square/orders-api)
|
||||
- [Catalog API](https://developer.squareup.com/reference/square/catalog-api)
|
||||
- [Inventory API](https://developer.squareup.com/reference/square/inventory-api)
|
||||
- [Invoices API](https://developer.squareup.com/reference/square/invoices-api)
|
||||
208
skills/api-gateway/references/stripe.md
Normal file
208
skills/api-gateway/references/stripe.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# Stripe Routing Reference
|
||||
|
||||
**App name:** `stripe`
|
||||
**Base URL proxied:** `api.stripe.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/stripe/v1/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Customers
|
||||
|
||||
#### List Customers
|
||||
```bash
|
||||
GET /stripe/v1/customers?limit=10
|
||||
```
|
||||
|
||||
#### Get Customer
|
||||
```bash
|
||||
GET /stripe/v1/customers/{customerId}
|
||||
```
|
||||
|
||||
#### Create Customer
|
||||
```bash
|
||||
POST /stripe/v1/customers
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
email=customer@example.com&name=John%20Doe&description=New%20customer
|
||||
```
|
||||
|
||||
#### Update Customer
|
||||
```bash
|
||||
POST /stripe/v1/customers/{customerId}
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
email=newemail@example.com
|
||||
```
|
||||
|
||||
### Products
|
||||
|
||||
#### List Products
|
||||
```bash
|
||||
GET /stripe/v1/products?limit=10&active=true
|
||||
```
|
||||
|
||||
#### Create Product
|
||||
```bash
|
||||
POST /stripe/v1/products
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
name=Premium%20Plan&description=Monthly%20subscription
|
||||
```
|
||||
|
||||
### Prices
|
||||
|
||||
#### List Prices
|
||||
```bash
|
||||
GET /stripe/v1/prices?limit=10&active=true
|
||||
```
|
||||
|
||||
#### Create Price
|
||||
```bash
|
||||
POST /stripe/v1/prices
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
unit_amount=1999¤cy=usd&product=prod_XXX&recurring[interval]=month
|
||||
```
|
||||
|
||||
### Subscriptions
|
||||
|
||||
#### List Subscriptions
|
||||
```bash
|
||||
GET /stripe/v1/subscriptions?limit=10&status=active
|
||||
```
|
||||
|
||||
#### Get Subscription
|
||||
```bash
|
||||
GET /stripe/v1/subscriptions/{subscriptionId}
|
||||
```
|
||||
|
||||
#### Create Subscription
|
||||
```bash
|
||||
POST /stripe/v1/subscriptions
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
customer=cus_XXX&items[0][price]=price_XXX
|
||||
```
|
||||
|
||||
#### Cancel Subscription
|
||||
```bash
|
||||
DELETE /stripe/v1/subscriptions/{subscriptionId}
|
||||
```
|
||||
|
||||
### Invoices
|
||||
|
||||
#### List Invoices
|
||||
```bash
|
||||
GET /stripe/v1/invoices?limit=10&customer=cus_XXX
|
||||
```
|
||||
|
||||
#### Get Invoice
|
||||
```bash
|
||||
GET /stripe/v1/invoices/{invoiceId}
|
||||
```
|
||||
|
||||
### Charges
|
||||
|
||||
#### List Charges
|
||||
```bash
|
||||
GET /stripe/v1/charges?limit=10
|
||||
```
|
||||
|
||||
### Payment Intents
|
||||
|
||||
#### Create Payment Intent
|
||||
```bash
|
||||
POST /stripe/v1/payment_intents
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
amount=1999¤cy=usd&customer=cus_XXX
|
||||
```
|
||||
|
||||
### Balance
|
||||
|
||||
#### Get Balance
|
||||
```bash
|
||||
GET /stripe/v1/balance
|
||||
```
|
||||
|
||||
### Events
|
||||
|
||||
#### List Events
|
||||
```bash
|
||||
GET /stripe/v1/events?limit=10&type=customer.created
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Stripe API uses form-urlencoded data for POST requests
|
||||
- IDs are prefixed: `cus_` (customer), `sub_` (subscription), `prod_` (product), `price_` (price), `in_` (invoice), `pi_` (payment intent)
|
||||
- Amounts are in cents (1999 = $19.99)
|
||||
- Use `expand[]` parameter to include related objects; for list endpoints use `expand[]=data.{field}` (e.g., `expand[]=data.customer`)
|
||||
- List endpoints support pagination with `starting_after` and `ending_before`
|
||||
- Delete returns `{id, deleted: true}` on success
|
||||
- Products with prices cannot be deleted, only archived (`active=false`)
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://docs.stripe.com/api)
|
||||
- [List Customers](https://docs.stripe.com/api/customers/list.md)
|
||||
- [Get Customer](https://docs.stripe.com/api/customers/retrieve.md)
|
||||
- [Create Customer](https://docs.stripe.com/api/customers/create.md)
|
||||
- [Update Customer](https://docs.stripe.com/api/customers/update.md)
|
||||
- [Delete Customer](https://docs.stripe.com/api/customers/delete.md)
|
||||
- [Search Customers](https://docs.stripe.com/api/customers/search.md)
|
||||
- [List Products](https://docs.stripe.com/api/products/list.md)
|
||||
- [Get Product](https://docs.stripe.com/api/products/retrieve.md)
|
||||
- [Create Product](https://docs.stripe.com/api/products/create.md)
|
||||
- [Update Product](https://docs.stripe.com/api/products/update.md)
|
||||
- [Delete Product](https://docs.stripe.com/api/products/delete.md)
|
||||
- [Search Products](https://docs.stripe.com/api/products/search.md)
|
||||
- [List Prices](https://docs.stripe.com/api/prices/list.md)
|
||||
- [Get Price](https://docs.stripe.com/api/prices/retrieve.md)
|
||||
- [Create Price](https://docs.stripe.com/api/prices/create.md)
|
||||
- [Update Price](https://docs.stripe.com/api/prices/update.md)
|
||||
- [Search Prices](https://docs.stripe.com/api/prices/search.md)
|
||||
- [List Subscriptions](https://docs.stripe.com/api/subscriptions/list.md)
|
||||
- [Get Subscription](https://docs.stripe.com/api/subscriptions/retrieve.md)
|
||||
- [Create Subscription](https://docs.stripe.com/api/subscriptions/create.md)
|
||||
- [Update Subscription](https://docs.stripe.com/api/subscriptions/update.md)
|
||||
- [Cancel Subscription](https://docs.stripe.com/api/subscriptions/cancel.md)
|
||||
- [Resume Subscription](https://docs.stripe.com/api/subscriptions/resume.md)
|
||||
- [Search Subscriptions](https://docs.stripe.com/api/subscriptions/search.md)
|
||||
- [List Invoices](https://docs.stripe.com/api/invoices/list.md)
|
||||
- [Get Invoice](https://docs.stripe.com/api/invoices/retrieve.md)
|
||||
- [Create Invoice](https://docs.stripe.com/api/invoices/create.md)
|
||||
- [Update Invoice](https://docs.stripe.com/api/invoices/update.md)
|
||||
- [Delete Invoice](https://docs.stripe.com/api/invoices/delete.md)
|
||||
- [Finalize Invoice](https://docs.stripe.com/api/invoices/finalize.md)
|
||||
- [Pay Invoice](https://docs.stripe.com/api/invoices/pay.md)
|
||||
- [Send Invoice](https://docs.stripe.com/api/invoices/send.md)
|
||||
- [Void Invoice](https://docs.stripe.com/api/invoices/void.md)
|
||||
- [Search Invoices](https://docs.stripe.com/api/invoices/search.md)
|
||||
- [List Charges](https://docs.stripe.com/api/charges/list.md)
|
||||
- [Get Charge](https://docs.stripe.com/api/charges/retrieve.md)
|
||||
- [Create Charge](https://docs.stripe.com/api/charges/create.md)
|
||||
- [Update Charge](https://docs.stripe.com/api/charges/update.md)
|
||||
- [Capture Charge](https://docs.stripe.com/api/charges/capture.md)
|
||||
- [Search Charges](https://docs.stripe.com/api/charges/search.md)
|
||||
- [List Payment Intents](https://docs.stripe.com/api/payment_intents/list.md)
|
||||
- [Get Payment Intent](https://docs.stripe.com/api/payment_intents/retrieve.md)
|
||||
- [Create Payment Intent](https://docs.stripe.com/api/payment_intents/create.md)
|
||||
- [Update Payment Intent](https://docs.stripe.com/api/payment_intents/update.md)
|
||||
- [Confirm Payment Intent](https://docs.stripe.com/api/payment_intents/confirm.md)
|
||||
- [Capture Payment Intent](https://docs.stripe.com/api/payment_intents/capture.md)
|
||||
- [Cancel Payment Intent](https://docs.stripe.com/api/payment_intents/cancel.md)
|
||||
- [Search Payment Intents](https://docs.stripe.com/api/payment_intents/search.md)
|
||||
- [Get Balance](https://docs.stripe.com/api/balance/balance_retrieve.md)
|
||||
- [List Balance Transactions](https://docs.stripe.com/api/balance_transactions/list.md)
|
||||
- [Get Balance Transaction](https://docs.stripe.com/api/balance_transactions/retrieve.md)
|
||||
- [List Events](https://docs.stripe.com/api/events/list.md)
|
||||
- [Get Event](https://docs.stripe.com/api/events/retrieve.md)
|
||||
- [Pagination](https://docs.stripe.com/api/pagination.md)
|
||||
- [Expanding Responses](https://docs.stripe.com/api/expanding_objects.md)
|
||||
- [LLM Reference](https://docs.stripe.com/llms.txt)
|
||||
214
skills/api-gateway/references/systeme.md
Normal file
214
skills/api-gateway/references/systeme.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# Systeme.io Routing Reference
|
||||
|
||||
**App name:** `systeme`
|
||||
**Base URL proxied:** `api.systeme.io`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/systeme/api/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Contacts
|
||||
```bash
|
||||
GET /systeme/api/contacts
|
||||
```
|
||||
|
||||
Query parameters:
|
||||
- `limit` - Results per page (10-100)
|
||||
- `startingAfter` - ID of last item for pagination
|
||||
- `order` - Sort order: `asc` or `desc` (default: `desc`)
|
||||
|
||||
### Get Contact
|
||||
```bash
|
||||
GET /systeme/api/contacts/{id}
|
||||
```
|
||||
|
||||
### Create Contact
|
||||
```bash
|
||||
POST /systeme/api/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"firstName": "John",
|
||||
"lastName": "Doe"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Contact
|
||||
```bash
|
||||
PATCH /systeme/api/contacts/{id}
|
||||
Content-Type: application/merge-patch+json
|
||||
|
||||
{
|
||||
"firstName": "Jane"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Contact
|
||||
```bash
|
||||
DELETE /systeme/api/contacts/{id}
|
||||
```
|
||||
|
||||
### List Tags
|
||||
```bash
|
||||
GET /systeme/api/tags
|
||||
```
|
||||
|
||||
### Create Tag
|
||||
```bash
|
||||
POST /systeme/api/tags
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "VIP Customer"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Tag
|
||||
```bash
|
||||
PUT /systeme/api/tags/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Premium Customer"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Tag
|
||||
```bash
|
||||
DELETE /systeme/api/tags/{id}
|
||||
```
|
||||
|
||||
### Assign Tag to Contact
|
||||
```bash
|
||||
POST /systeme/api/contacts/{id}/tags
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"tagId": 12345
|
||||
}
|
||||
```
|
||||
|
||||
### Remove Tag from Contact
|
||||
```bash
|
||||
DELETE /systeme/api/contacts/{id}/tags/{tagId}
|
||||
```
|
||||
|
||||
### List Contact Fields
|
||||
```bash
|
||||
GET /systeme/api/contact_fields
|
||||
```
|
||||
|
||||
### List Courses
|
||||
```bash
|
||||
GET /systeme/api/school/courses
|
||||
```
|
||||
|
||||
### Create Enrollment
|
||||
```bash
|
||||
POST /systeme/api/school/courses/{courseId}/enrollments
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contactId": 12345
|
||||
}
|
||||
```
|
||||
|
||||
### List Enrollments
|
||||
```bash
|
||||
GET /systeme/api/school/enrollments
|
||||
```
|
||||
|
||||
### Delete Enrollment
|
||||
```bash
|
||||
DELETE /systeme/api/school/enrollments/{id}
|
||||
```
|
||||
|
||||
### List Communities
|
||||
```bash
|
||||
GET /systeme/api/community/communities
|
||||
```
|
||||
|
||||
### Create Membership
|
||||
```bash
|
||||
POST /systeme/api/community/communities/{communityId}/memberships
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contactId": 12345
|
||||
}
|
||||
```
|
||||
|
||||
### List Memberships
|
||||
```bash
|
||||
GET /systeme/api/community/memberships
|
||||
```
|
||||
|
||||
### Delete Membership
|
||||
```bash
|
||||
DELETE /systeme/api/community/memberships/{id}
|
||||
```
|
||||
|
||||
### List Subscriptions
|
||||
```bash
|
||||
GET /systeme/api/payment/subscriptions
|
||||
```
|
||||
|
||||
### Cancel Subscription
|
||||
```bash
|
||||
POST /systeme/api/payment/subscriptions/{id}/cancel
|
||||
```
|
||||
|
||||
### List Webhooks
|
||||
```bash
|
||||
GET /systeme/api/webhooks
|
||||
```
|
||||
|
||||
### Create Webhook
|
||||
```bash
|
||||
POST /systeme/api/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "My Webhook",
|
||||
"url": "https://example.com/webhook",
|
||||
"secret": "my-secret-key",
|
||||
"subscriptions": ["CONTACT_CREATED"]
|
||||
}
|
||||
```
|
||||
|
||||
Available events: `CONTACT_CREATED`, `CONTACT_TAG_ADDED`, `CONTACT_TAG_REMOVED`, `CONTACT_OPT_IN`, `SALE_NEW`, `SALE_CANCELED`
|
||||
|
||||
### Update Webhook
|
||||
```bash
|
||||
PATCH /systeme/api/webhooks/{id}
|
||||
Content-Type: application/merge-patch+json
|
||||
|
||||
{
|
||||
"name": "Updated Webhook Name"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Webhook
|
||||
```bash
|
||||
DELETE /systeme/api/webhooks/{id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Contact, tag, course, and enrollment IDs are numeric integers
|
||||
- Webhook IDs are UUIDs
|
||||
- Uses cursor-based pagination with `startingAfter` parameter
|
||||
- PATCH requests require `Content-Type: application/merge-patch+json`
|
||||
- Delete operations return 204 No Content
|
||||
- Email addresses are validated for real MX records
|
||||
- Payment/subscription endpoints may return 404 if not configured
|
||||
|
||||
## Resources
|
||||
|
||||
- [Systeme.io API Reference](https://developer.systeme.io/reference)
|
||||
- [Systeme.io Developer Documentation](https://developer.systeme.io/)
|
||||
174
skills/api-gateway/references/tally.md
Normal file
174
skills/api-gateway/references/tally.md
Normal file
@@ -0,0 +1,174 @@
|
||||
# Tally Routing Reference
|
||||
|
||||
**App name:** `tally`
|
||||
**Base URL proxied:** `api.tally.so`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/tally/{resource}
|
||||
```
|
||||
|
||||
Tally's API does not use version prefixes in paths.
|
||||
|
||||
## Required Headers
|
||||
|
||||
THe `User-Agent` header is required to avoid Cloudflare blocks:
|
||||
|
||||
```
|
||||
User-Agent: Maton/1.0
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current User
|
||||
```bash
|
||||
GET /tally/users/me
|
||||
```
|
||||
|
||||
### List Forms
|
||||
```bash
|
||||
GET /tally/forms
|
||||
```
|
||||
|
||||
**Query Parameters:**
|
||||
- `page` - Page number (default: 1)
|
||||
- `limit` - Items per page (default: 50)
|
||||
|
||||
### Get Form
|
||||
```bash
|
||||
GET /tally/forms/{formId}
|
||||
```
|
||||
|
||||
### Create Form
|
||||
```bash
|
||||
POST /tally/forms
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"status": "DRAFT",
|
||||
"blocks": [
|
||||
{
|
||||
"type": "FORM_TITLE",
|
||||
"uuid": "11111111-1111-1111-1111-111111111111",
|
||||
"groupUuid": "22222222-2222-2222-2222-222222222222",
|
||||
"groupType": "FORM_TITLE",
|
||||
"title": "My Form",
|
||||
"payload": {}
|
||||
},
|
||||
{
|
||||
"type": "INPUT_TEXT",
|
||||
"uuid": "33333333-3333-3333-3333-333333333333",
|
||||
"groupUuid": "44444444-4444-4444-4444-444444444444",
|
||||
"groupType": "INPUT_TEXT",
|
||||
"title": "Your name",
|
||||
"payload": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Form
|
||||
```bash
|
||||
PATCH /tally/forms/{formId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Updated Form Name",
|
||||
"status": "PUBLISHED"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Form
|
||||
```bash
|
||||
DELETE /tally/forms/{formId}
|
||||
```
|
||||
|
||||
### List Form Questions
|
||||
```bash
|
||||
GET /tally/forms/{formId}/questions
|
||||
```
|
||||
|
||||
### List Form Submissions
|
||||
```bash
|
||||
GET /tally/forms/{formId}/submissions
|
||||
```
|
||||
|
||||
**Query Parameters:**
|
||||
- `page` - Page number
|
||||
- `limit` - Items per page
|
||||
- `startDate` - Filter by start date (ISO 8601)
|
||||
- `endDate` - Filter by end date (ISO 8601)
|
||||
- `afterId` - Cursor for pagination
|
||||
|
||||
### Get Submission
|
||||
```bash
|
||||
GET /tally/forms/{formId}/submissions/{submissionId}
|
||||
```
|
||||
|
||||
### Delete Submission
|
||||
```bash
|
||||
DELETE /tally/forms/{formId}/submissions/{submissionId}
|
||||
```
|
||||
|
||||
### List Workspaces
|
||||
```bash
|
||||
GET /tally/workspaces
|
||||
```
|
||||
|
||||
### Get Workspace
|
||||
```bash
|
||||
GET /tally/workspaces/{workspaceId}
|
||||
```
|
||||
|
||||
### Create Workspace
|
||||
```bash
|
||||
POST /tally/workspaces
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "New Workspace"
|
||||
}
|
||||
```
|
||||
|
||||
### List Organization Users
|
||||
```bash
|
||||
GET /tally/organizations/{organizationId}/users
|
||||
```
|
||||
|
||||
### List Organization Invites
|
||||
```bash
|
||||
GET /tally/organizations/{organizationId}/invites
|
||||
```
|
||||
|
||||
### List Webhooks
|
||||
```bash
|
||||
GET /tally/webhooks
|
||||
```
|
||||
|
||||
### Create Webhook
|
||||
```bash
|
||||
POST /tally/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"formId": "GxdRaQ",
|
||||
"url": "https://your-endpoint.com/webhook",
|
||||
"eventTypes": ["FORM_RESPONSE"]
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Form and workspace IDs are short alphanumeric strings (e.g., `GxdRaQ`, `3jW9Q1`)
|
||||
- Block `uuid` and `groupUuid` fields must be valid UUIDs (GUIDs)
|
||||
- Page-based pagination with `page` and `limit` parameters
|
||||
- Rate limit: 100 requests per minute
|
||||
- API is in public beta and subject to changes
|
||||
- Creating workspaces requires a Pro subscription
|
||||
|
||||
## Resources
|
||||
|
||||
- [Tally API Introduction](https://developers.tally.so/api-reference/introduction)
|
||||
- [Tally API Reference](https://developers.tally.so/llms.txt)
|
||||
- [Tally Help Center](https://help.tally.so/)
|
||||
195
skills/api-gateway/references/telegram.md
Normal file
195
skills/api-gateway/references/telegram.md
Normal file
@@ -0,0 +1,195 @@
|
||||
# Telegram Routing Reference
|
||||
|
||||
**App name:** `telegram`
|
||||
**Base URL proxied:** `api.telegram.org`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/telegram/:token/{method}
|
||||
```
|
||||
|
||||
The `:token` placeholder is automatically replaced with the bot token from the connection configuration.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Bot Info
|
||||
```bash
|
||||
GET /telegram/:token/getMe
|
||||
```
|
||||
|
||||
### Get Updates
|
||||
```bash
|
||||
POST /telegram/:token/getUpdates
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"limit": 100,
|
||||
"timeout": 30
|
||||
}
|
||||
```
|
||||
|
||||
### Send Message
|
||||
```bash
|
||||
POST /telegram/:token/sendMessage
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"text": "Hello!",
|
||||
"parse_mode": "HTML"
|
||||
}
|
||||
```
|
||||
|
||||
### Send Photo
|
||||
```bash
|
||||
POST /telegram/:token/sendPhoto
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"photo": "https://example.com/image.jpg",
|
||||
"caption": "Photo caption"
|
||||
}
|
||||
```
|
||||
|
||||
### Send Document
|
||||
```bash
|
||||
POST /telegram/:token/sendDocument
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"document": "https://example.com/file.pdf"
|
||||
}
|
||||
```
|
||||
|
||||
### Send Location
|
||||
```bash
|
||||
POST /telegram/:token/sendLocation
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"latitude": 37.7749,
|
||||
"longitude": -122.4194
|
||||
}
|
||||
```
|
||||
|
||||
### Send Poll
|
||||
```bash
|
||||
POST /telegram/:token/sendPoll
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"question": "What is your favorite?",
|
||||
"options": [{"text": "Option 1"}, {"text": "Option 2"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Edit Message
|
||||
```bash
|
||||
POST /telegram/:token/editMessageText
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"message_id": 123,
|
||||
"text": "Updated text"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Message
|
||||
```bash
|
||||
POST /telegram/:token/deleteMessage
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"message_id": 123
|
||||
}
|
||||
```
|
||||
|
||||
### Forward Message
|
||||
```bash
|
||||
POST /telegram/:token/forwardMessage
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789,
|
||||
"from_chat_id": 123456789,
|
||||
"message_id": 123
|
||||
}
|
||||
```
|
||||
|
||||
### Get Chat
|
||||
```bash
|
||||
POST /telegram/:token/getChat
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"chat_id": 123456789
|
||||
}
|
||||
```
|
||||
|
||||
### Set Bot Commands
|
||||
```bash
|
||||
POST /telegram/:token/setMyCommands
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"commands": [
|
||||
{"command": "start", "description": "Start the bot"},
|
||||
{"command": "help", "description": "Get help"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Get File
|
||||
```bash
|
||||
POST /telegram/:token/getFile
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"file_id": "AgACAgQAAxkDAAM..."
|
||||
}
|
||||
```
|
||||
|
||||
### Set Webhook
|
||||
```bash
|
||||
POST /telegram/:token/setWebhook
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"url": "https://example.com/webhook",
|
||||
"allowed_updates": ["message", "callback_query"]
|
||||
}
|
||||
```
|
||||
|
||||
### Answer Callback Query
|
||||
```bash
|
||||
POST /telegram/:token/answerCallbackQuery
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"callback_query_id": "12345678901234567",
|
||||
"text": "Button clicked!"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- The `:token` placeholder is automatically replaced with the bot token
|
||||
- Chat IDs are positive integers for private chats, negative for groups
|
||||
- All methods support both GET and POST, but POST is recommended
|
||||
- Text messages have a 4096 character limit
|
||||
- Captions have a 1024 character limit
|
||||
- Polls support 2-10 options
|
||||
- Files can be sent via URL or file_id from previously uploaded files
|
||||
|
||||
## Resources
|
||||
|
||||
- [Telegram Bot API Documentation](https://core.telegram.org/bots/api)
|
||||
- [Available Methods](https://core.telegram.org/bots/api#available-methods)
|
||||
- [Formatting Options](https://core.telegram.org/bots/api#formatting-options)
|
||||
117
skills/api-gateway/references/ticktick.md
Normal file
117
skills/api-gateway/references/ticktick.md
Normal file
@@ -0,0 +1,117 @@
|
||||
# TickTick Routing Reference
|
||||
|
||||
**App name:** `ticktick`
|
||||
**Base URL proxied:** `api.ticktick.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/ticktick/open/v1/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Projects
|
||||
```bash
|
||||
GET /ticktick/open/v1/project
|
||||
```
|
||||
|
||||
### Get Project with Tasks
|
||||
```bash
|
||||
GET /ticktick/open/v1/project/{projectId}/data
|
||||
```
|
||||
|
||||
Returns project details along with tasks and columns.
|
||||
|
||||
### Create Project
|
||||
```bash
|
||||
POST /ticktick/open/v1/project
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "My Project",
|
||||
"viewMode": "list"
|
||||
}
|
||||
```
|
||||
|
||||
**viewMode options:** `list`, `kanban`, `timeline`
|
||||
|
||||
### Delete Project
|
||||
```bash
|
||||
DELETE /ticktick/open/v1/project/{projectId}
|
||||
```
|
||||
|
||||
### Get Task
|
||||
```bash
|
||||
GET /ticktick/open/v1/project/{projectId}/task/{taskId}
|
||||
```
|
||||
|
||||
### Create Task
|
||||
```bash
|
||||
POST /ticktick/open/v1/task
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "New task",
|
||||
"projectId": "PROJECT_ID",
|
||||
"content": "Task description",
|
||||
"priority": 0,
|
||||
"dueDate": "2026-02-15T10:00:00+0000",
|
||||
"isAllDay": false
|
||||
}
|
||||
```
|
||||
|
||||
**Priority values:** 0=None, 1=Low, 3=Medium, 5=High
|
||||
|
||||
### Update Task
|
||||
```bash
|
||||
POST /ticktick/open/v1/task/{taskId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"id": "TASK_ID",
|
||||
"projectId": "PROJECT_ID",
|
||||
"title": "Updated title",
|
||||
"priority": 1
|
||||
}
|
||||
```
|
||||
|
||||
### Complete Task
|
||||
```bash
|
||||
POST /ticktick/open/v1/project/{projectId}/task/{taskId}/complete
|
||||
```
|
||||
|
||||
### Delete Task
|
||||
```bash
|
||||
DELETE /ticktick/open/v1/project/{projectId}/task/{taskId}
|
||||
```
|
||||
|
||||
## Task Fields
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `id` | string | Task ID |
|
||||
| `projectId` | string | Parent project ID |
|
||||
| `title` | string | Task title |
|
||||
| `content` | string | Task description (Markdown) |
|
||||
| `priority` | integer | 0=None, 1=Low, 3=Medium, 5=High |
|
||||
| `status` | integer | 0=Active, 2=Completed |
|
||||
| `dueDate` | string | ISO 8601 format |
|
||||
| `startDate` | string | ISO 8601 format |
|
||||
| `isAllDay` | boolean | All-day task flag |
|
||||
| `timeZone` | string | e.g., "America/Los_Angeles" |
|
||||
| `tags` | array | List of tag names |
|
||||
| `columnId` | string | Kanban column ID |
|
||||
|
||||
## Notes
|
||||
|
||||
- The Open API provides access to tasks and projects only
|
||||
- Habits, focus/pomodoro, and tags endpoints are not available through the Open API
|
||||
- Task `status` values: 0 = Active, 2 = Completed
|
||||
- Dates use ISO 8601 format with timezone offset (e.g., `2026-02-15T10:00:00+0000`)
|
||||
- The `columns` field in project data is used for Kanban board columns
|
||||
|
||||
## Resources
|
||||
|
||||
- [TickTick Developer Portal](https://developer.ticktick.com/)
|
||||
- [TickTick Help Center](https://help.ticktick.com/)
|
||||
176
skills/api-gateway/references/todoist.md
Normal file
176
skills/api-gateway/references/todoist.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# Todoist Routing Reference
|
||||
|
||||
**App name:** `todoist`
|
||||
**Base URL proxied:** `api.todoist.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/todoist/rest/v2/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Projects
|
||||
```bash
|
||||
GET /todoist/rest/v2/projects
|
||||
```
|
||||
|
||||
### Get Project
|
||||
```bash
|
||||
GET /todoist/rest/v2/projects/{id}
|
||||
```
|
||||
|
||||
### Create Project
|
||||
```bash
|
||||
POST /todoist/rest/v2/projects
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "My Project",
|
||||
"color": "blue"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Project
|
||||
```bash
|
||||
POST /todoist/rest/v2/projects/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Updated Name"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Project
|
||||
```bash
|
||||
DELETE /todoist/rest/v2/projects/{id}
|
||||
```
|
||||
|
||||
### List Tasks
|
||||
```bash
|
||||
GET /todoist/rest/v2/tasks
|
||||
GET /todoist/rest/v2/tasks?project_id={project_id}
|
||||
GET /todoist/rest/v2/tasks?filter={filter}
|
||||
```
|
||||
|
||||
### Get Task
|
||||
```bash
|
||||
GET /todoist/rest/v2/tasks/{id}
|
||||
```
|
||||
|
||||
### Create Task
|
||||
```bash
|
||||
POST /todoist/rest/v2/tasks
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content": "Buy groceries",
|
||||
"priority": 2,
|
||||
"due_string": "tomorrow"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Task
|
||||
```bash
|
||||
POST /todoist/rest/v2/tasks/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content": "Updated content",
|
||||
"priority": 4
|
||||
}
|
||||
```
|
||||
|
||||
### Close Task (Complete)
|
||||
```bash
|
||||
POST /todoist/rest/v2/tasks/{id}/close
|
||||
```
|
||||
|
||||
### Reopen Task
|
||||
```bash
|
||||
POST /todoist/rest/v2/tasks/{id}/reopen
|
||||
```
|
||||
|
||||
### Delete Task
|
||||
```bash
|
||||
DELETE /todoist/rest/v2/tasks/{id}
|
||||
```
|
||||
|
||||
### List Sections
|
||||
```bash
|
||||
GET /todoist/rest/v2/sections
|
||||
GET /todoist/rest/v2/sections?project_id={project_id}
|
||||
```
|
||||
|
||||
### Create Section
|
||||
```bash
|
||||
POST /todoist/rest/v2/sections
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "In Progress",
|
||||
"project_id": "123456"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Section
|
||||
```bash
|
||||
DELETE /todoist/rest/v2/sections/{id}
|
||||
```
|
||||
|
||||
### List Labels
|
||||
```bash
|
||||
GET /todoist/rest/v2/labels
|
||||
```
|
||||
|
||||
### Create Label
|
||||
```bash
|
||||
POST /todoist/rest/v2/labels
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "urgent",
|
||||
"color": "red"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Label
|
||||
```bash
|
||||
DELETE /todoist/rest/v2/labels/{id}
|
||||
```
|
||||
|
||||
### List Comments
|
||||
```bash
|
||||
GET /todoist/rest/v2/comments?task_id={task_id}
|
||||
GET /todoist/rest/v2/comments?project_id={project_id}
|
||||
```
|
||||
|
||||
### Create Comment
|
||||
```bash
|
||||
POST /todoist/rest/v2/comments
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"task_id": "123456",
|
||||
"content": "This is a comment"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Comment
|
||||
```bash
|
||||
DELETE /todoist/rest/v2/comments/{id}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Task and Project IDs are strings
|
||||
- Priority values: 1 (normal) to 4 (urgent)
|
||||
- Use only one due date format per request: `due_string`, `due_date`, or `due_datetime`
|
||||
- Comments require either `task_id` or `project_id`
|
||||
- Close/reopen/delete operations return 204 No Content
|
||||
|
||||
## Resources
|
||||
|
||||
- [Todoist REST API v2 Documentation](https://developer.todoist.com/rest/v2)
|
||||
- [Todoist Filter Syntax](https://todoist.com/help/articles/introduction-to-filters)
|
||||
192
skills/api-gateway/references/trello.md
Normal file
192
skills/api-gateway/references/trello.md
Normal file
@@ -0,0 +1,192 @@
|
||||
# Trello Routing Reference
|
||||
|
||||
**App name:** `trello`
|
||||
**Base URL proxied:** `api.trello.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/trello/1/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Get Current Member
|
||||
```bash
|
||||
GET /trello/1/members/me
|
||||
```
|
||||
|
||||
### Get Member's Boards
|
||||
```bash
|
||||
GET /trello/1/members/me/boards?filter=open
|
||||
```
|
||||
|
||||
### Get Board
|
||||
```bash
|
||||
GET /trello/1/boards/{id}?lists=open&cards=open
|
||||
```
|
||||
|
||||
### Create Board
|
||||
```bash
|
||||
POST /trello/1/boards
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Project Alpha",
|
||||
"desc": "Main project board",
|
||||
"defaultLists": false,
|
||||
"prefs_permissionLevel": "private"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Board Lists
|
||||
```bash
|
||||
GET /trello/1/boards/{id}/lists?filter=open
|
||||
```
|
||||
|
||||
### Get Board Cards
|
||||
```bash
|
||||
GET /trello/1/boards/{id}/cards
|
||||
```
|
||||
|
||||
### Create List
|
||||
```bash
|
||||
POST /trello/1/lists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "To Do",
|
||||
"idBoard": "BOARD_ID",
|
||||
"pos": "top"
|
||||
}
|
||||
```
|
||||
|
||||
### Get Cards in List
|
||||
```bash
|
||||
GET /trello/1/lists/{id}/cards
|
||||
```
|
||||
|
||||
### Get Card
|
||||
```bash
|
||||
GET /trello/1/cards/{id}?members=true&checklists=all
|
||||
```
|
||||
|
||||
### Create Card
|
||||
```bash
|
||||
POST /trello/1/cards
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Implement feature X",
|
||||
"desc": "Description of the task",
|
||||
"idList": "LIST_ID",
|
||||
"pos": "bottom",
|
||||
"due": "2025-03-30T12:00:00.000Z",
|
||||
"idMembers": ["MEMBER_ID"],
|
||||
"idLabels": ["LABEL_ID"]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Card
|
||||
```bash
|
||||
PUT /trello/1/cards/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Updated card name",
|
||||
"desc": "Updated description",
|
||||
"due": "2025-04-15T12:00:00.000Z"
|
||||
}
|
||||
```
|
||||
|
||||
### Move Card to List
|
||||
```bash
|
||||
PUT /trello/1/cards/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"idList": "NEW_LIST_ID",
|
||||
"pos": "top"
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Card
|
||||
```bash
|
||||
DELETE /trello/1/cards/{id}
|
||||
```
|
||||
|
||||
### Add Comment to Card
|
||||
```bash
|
||||
POST /trello/1/cards/{id}/actions/comments
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"text": "This is a comment"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Checklist
|
||||
```bash
|
||||
POST /trello/1/checklists
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"idCard": "CARD_ID",
|
||||
"name": "Task Checklist"
|
||||
}
|
||||
```
|
||||
|
||||
### Create Checklist Item
|
||||
```bash
|
||||
POST /trello/1/checklists/{id}/checkItems
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Subtask 1",
|
||||
"pos": "bottom",
|
||||
"checked": false
|
||||
}
|
||||
```
|
||||
|
||||
### Get Board Labels
|
||||
```bash
|
||||
GET /trello/1/boards/{id}/labels
|
||||
```
|
||||
|
||||
### Create Label
|
||||
```bash
|
||||
POST /trello/1/labels
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "High Priority",
|
||||
"color": "red",
|
||||
"idBoard": "BOARD_ID"
|
||||
}
|
||||
```
|
||||
|
||||
### Search
|
||||
```bash
|
||||
GET /trello/1/search?query=keyword&modelTypes=cards,boards
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- IDs are 24-character alphanumeric strings
|
||||
- Use `me` to reference the authenticated user
|
||||
- Dates are in ISO 8601 format
|
||||
- `pos` can be `top`, `bottom`, or a positive number
|
||||
- Label colors: `yellow`, `purple`, `blue`, `red`, `green`, `orange`, `black`, `sky`, `pink`, `lime`, `null`
|
||||
- Use `fields` parameter to limit returned data and improve performance
|
||||
- Archived items can be retrieved with `filter=closed`
|
||||
|
||||
## Resources
|
||||
|
||||
- [Trello API Overview](https://developer.atlassian.com/cloud/trello/rest/api-group-actions/)
|
||||
- [Boards](https://developer.atlassian.com/cloud/trello/rest/api-group-boards/)
|
||||
- [Lists](https://developer.atlassian.com/cloud/trello/rest/api-group-lists/)
|
||||
- [Cards](https://developer.atlassian.com/cloud/trello/rest/api-group-cards/)
|
||||
- [Checklists](https://developer.atlassian.com/cloud/trello/rest/api-group-checklists/)
|
||||
- [Labels](https://developer.atlassian.com/cloud/trello/rest/api-group-labels/)
|
||||
- [Members](https://developer.atlassian.com/cloud/trello/rest/api-group-members/)
|
||||
- [Search](https://developer.atlassian.com/cloud/trello/rest/api-group-search/)
|
||||
170
skills/api-gateway/references/twilio.md
Normal file
170
skills/api-gateway/references/twilio.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# Twilio Routing Reference
|
||||
|
||||
**App name:** `twilio`
|
||||
**Base URL proxied:** `api.twilio.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/twilio/2010-04-01/Accounts/{AccountSid}/{resource}.json
|
||||
```
|
||||
|
||||
**Important:** Most Twilio endpoints require your Account SID in the path. Get it from `/Accounts.json`.
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Accounts
|
||||
|
||||
#### List Accounts
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts.json
|
||||
```
|
||||
|
||||
#### Get Account
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}.json
|
||||
```
|
||||
|
||||
### Messages (SMS/MMS)
|
||||
|
||||
#### List Messages
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Messages.json
|
||||
```
|
||||
|
||||
#### Send Message
|
||||
```bash
|
||||
POST /twilio/2010-04-01/Accounts/{AccountSid}/Messages.json
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
To=+15559876543&From=+15551234567&Body=Hello%20from%20Twilio!
|
||||
```
|
||||
|
||||
#### Get Message
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Messages/{MessageSid}.json
|
||||
```
|
||||
|
||||
#### Delete Message
|
||||
```bash
|
||||
DELETE /twilio/2010-04-01/Accounts/{AccountSid}/Messages/{MessageSid}.json
|
||||
```
|
||||
|
||||
### Calls (Voice)
|
||||
|
||||
#### List Calls
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Calls.json
|
||||
```
|
||||
|
||||
#### Make Call
|
||||
```bash
|
||||
POST /twilio/2010-04-01/Accounts/{AccountSid}/Calls.json
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
To=+15559876543&From=+15551234567&Url=https://example.com/twiml
|
||||
```
|
||||
|
||||
#### Get Call
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}.json
|
||||
```
|
||||
|
||||
#### End Call
|
||||
```bash
|
||||
POST /twilio/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}.json
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
Status=completed
|
||||
```
|
||||
|
||||
### Phone Numbers
|
||||
|
||||
#### List Incoming Phone Numbers
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json
|
||||
```
|
||||
|
||||
#### Get Phone Number
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{PhoneNumberSid}.json
|
||||
```
|
||||
|
||||
#### Update Phone Number
|
||||
```bash
|
||||
POST /twilio/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{PhoneNumberSid}.json
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
FriendlyName=Updated%20Name
|
||||
```
|
||||
|
||||
### Applications
|
||||
|
||||
#### List Applications
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Applications.json
|
||||
```
|
||||
|
||||
#### Create Application
|
||||
```bash
|
||||
POST /twilio/2010-04-01/Accounts/{AccountSid}/Applications.json
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
FriendlyName=My%20App&VoiceUrl=https://example.com/voice
|
||||
```
|
||||
|
||||
#### Delete Application
|
||||
```bash
|
||||
DELETE /twilio/2010-04-01/Accounts/{AccountSid}/Applications/{ApplicationSid}.json
|
||||
```
|
||||
|
||||
### Queues
|
||||
|
||||
#### List Queues
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Queues.json
|
||||
```
|
||||
|
||||
#### Create Queue
|
||||
```bash
|
||||
POST /twilio/2010-04-01/Accounts/{AccountSid}/Queues.json
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
FriendlyName=Support%20Queue&MaxSize=100
|
||||
```
|
||||
|
||||
### Usage Records
|
||||
|
||||
#### List Usage Records
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Usage/Records.json
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
Uses page-based pagination:
|
||||
|
||||
```bash
|
||||
GET /twilio/2010-04-01/Accounts/{AccountSid}/Messages.json?PageSize=50&Page=0
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
- `PageSize` - Results per page (default: 50)
|
||||
- `Page` - Page number (0-indexed)
|
||||
|
||||
Response includes `next_page_uri` for fetching next page.
|
||||
|
||||
## Notes
|
||||
|
||||
- All endpoints require `/2010-04-01/` API version prefix
|
||||
- Request bodies use `application/x-www-form-urlencoded` (not JSON)
|
||||
- Phone numbers must be in E.164 format (+15551234567)
|
||||
- SID prefixes: AC (account), SM/MM (messages), CA (calls), PN (phone numbers), AP (applications), QU (queues)
|
||||
- POST is used for both creating and updating resources
|
||||
- DELETE returns 204 No Content on success
|
||||
|
||||
## Resources
|
||||
|
||||
- [Twilio API Overview](https://www.twilio.com/docs/usage/api)
|
||||
- [Messages API](https://www.twilio.com/docs/messaging/api/message-resource)
|
||||
- [Calls API](https://www.twilio.com/docs/voice/api/call-resource)
|
||||
186
skills/api-gateway/references/typeform.md
Normal file
186
skills/api-gateway/references/typeform.md
Normal file
@@ -0,0 +1,186 @@
|
||||
# Typeform Routing Reference
|
||||
|
||||
**App name:** `typeform`
|
||||
**Base URL proxied:** `api.typeform.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/typeform/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### User
|
||||
|
||||
#### Get Current User
|
||||
```bash
|
||||
GET /typeform/me
|
||||
```
|
||||
|
||||
### Forms
|
||||
|
||||
#### List Forms
|
||||
```bash
|
||||
GET /typeform/forms?page_size=10
|
||||
```
|
||||
|
||||
#### Get Form
|
||||
```bash
|
||||
GET /typeform/forms/{formId}
|
||||
```
|
||||
|
||||
#### Create Form
|
||||
```bash
|
||||
POST /typeform/forms
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Customer Survey",
|
||||
"fields": [
|
||||
{
|
||||
"type": "short_text",
|
||||
"title": "What is your name?"
|
||||
},
|
||||
{
|
||||
"type": "email",
|
||||
"title": "What is your email?"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Form (Full Replace)
|
||||
```bash
|
||||
PUT /typeform/forms/{formId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Updated Survey Title",
|
||||
"fields": [...]
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Form (Partial - PATCH)
|
||||
```bash
|
||||
PATCH /typeform/forms/{formId}
|
||||
Content-Type: application/json
|
||||
|
||||
[
|
||||
{"op": "replace", "path": "/title", "value": "New Title"}
|
||||
]
|
||||
```
|
||||
|
||||
#### Delete Form
|
||||
```bash
|
||||
DELETE /typeform/forms/{formId}
|
||||
```
|
||||
|
||||
### Responses
|
||||
|
||||
#### List Responses
|
||||
```bash
|
||||
GET /typeform/forms/{formId}/responses?page_size=25
|
||||
```
|
||||
|
||||
With filters:
|
||||
```bash
|
||||
GET /typeform/forms/{formId}/responses?since=2024-01-01T00:00:00Z&until=2024-12-31T23:59:59Z
|
||||
```
|
||||
|
||||
Completed only:
|
||||
```bash
|
||||
GET /typeform/forms/{formId}/responses?completed=true
|
||||
```
|
||||
|
||||
#### Delete Response
|
||||
```bash
|
||||
DELETE /typeform/forms/{formId}/responses?included_response_ids={responseId}
|
||||
```
|
||||
|
||||
### Insights
|
||||
|
||||
#### Get Form Insights
|
||||
```bash
|
||||
GET /typeform/insights/{formId}/summary
|
||||
```
|
||||
|
||||
### Workspaces
|
||||
|
||||
#### List Workspaces
|
||||
```bash
|
||||
GET /typeform/workspaces
|
||||
```
|
||||
|
||||
#### Get Workspace
|
||||
```bash
|
||||
GET /typeform/workspaces/{workspaceId}
|
||||
```
|
||||
|
||||
### Themes
|
||||
|
||||
#### List Themes
|
||||
```bash
|
||||
GET /typeform/themes
|
||||
```
|
||||
|
||||
### Images
|
||||
|
||||
#### List Images
|
||||
```bash
|
||||
GET /typeform/images
|
||||
```
|
||||
|
||||
## Field Types
|
||||
|
||||
- `short_text` - Single line text
|
||||
- `long_text` - Multi-line text
|
||||
- `email` - Email address
|
||||
- `number` - Numeric input
|
||||
- `rating` - Star rating
|
||||
- `opinion_scale` - 0-10 scale
|
||||
- `multiple_choice` - Single or multiple selection
|
||||
- `yes_no` - Boolean
|
||||
- `date` - Date picker
|
||||
- `file_upload` - File attachment
|
||||
- `dropdown` - Dropdown selection
|
||||
|
||||
## Notes
|
||||
|
||||
- Form IDs are alphanumeric strings (e.g., `JiLEvIgv`)
|
||||
- Response pagination uses `before` token for cursor-based pagination
|
||||
- Timestamps are in ISO 8601 format (e.g., `2026-01-01T00:00:00Z`)
|
||||
- Responses include `answers` array with field references
|
||||
- DELETE operations return HTTP 204 (no content) on success
|
||||
- PATCH uses JSON Patch format (array of operations with `op`, `path`, `value`)
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://www.typeform.com/developers/get-started)
|
||||
- [List Forms](https://www.typeform.com/developers/create/reference/retrieve-forms)
|
||||
- [Get Form](https://www.typeform.com/developers/create/reference/retrieve-form)
|
||||
- [Create Form](https://www.typeform.com/developers/create/reference/create-form)
|
||||
- [Update Form](https://www.typeform.com/developers/create/reference/update-form)
|
||||
- [Update Form Patch](https://www.typeform.com/developers/create/reference/update-form-patch)
|
||||
- [Delete Form](https://www.typeform.com/developers/create/reference/delete-form)
|
||||
- [Get Form Messages](https://www.typeform.com/developers/create/reference/retrieve-custom-form-messages)
|
||||
- [Update Form Messages](https://www.typeform.com/developers/create/reference/update-custom-messages)
|
||||
- [List Responses](https://www.typeform.com/developers/responses/reference/retrieve-responses)
|
||||
- [Delete Responses](https://www.typeform.com/developers/responses/reference/delete-responses)
|
||||
- [List Workspaces](https://www.typeform.com/developers/create/reference/retrieve-workspaces)
|
||||
- [Get Workspace](https://www.typeform.com/developers/create/reference/retrieve-workspace)
|
||||
- [Create Workspace](https://www.typeform.com/developers/create/reference/create-workspace)
|
||||
- [Update Workspace](https://www.typeform.com/developers/create/reference/update-workspace)
|
||||
- [Delete Workspace](https://www.typeform.com/developers/create/reference/delete-workspace)
|
||||
- [List Themes](https://www.typeform.com/developers/create/reference/retrieve-themes)
|
||||
- [Get Theme](https://www.typeform.com/developers/create/reference/retrieve-theme)
|
||||
- [Create Theme](https://www.typeform.com/developers/create/reference/create-theme)
|
||||
- [Update Theme](https://www.typeform.com/developers/create/reference/update-theme-partial-update)
|
||||
- [Delete Theme](https://www.typeform.com/developers/create/reference/delete-theme)
|
||||
- [Get Image](https://www.typeform.com/developers/create/reference/retrieve-image)
|
||||
- [Get Image By Size](https://www.typeform.com/developers/create/reference/retrieve-image-by-size)
|
||||
- [Create Image](https://www.typeform.com/developers/create/reference/create-image)
|
||||
- [Delete Image](https://www.typeform.com/developers/create/reference/delete-image)
|
||||
- [Create Or Update Webhook](https://www.typeform.com/developers/webhooks/reference/create-or-update-webhook)
|
||||
- [Get Webhook](https://www.typeform.com/developers/webhooks/reference/retrieve-single-webhook)
|
||||
- [Delete Webhook](https://www.typeform.com/developers/webhooks/reference/delete-webhook)
|
||||
123
skills/api-gateway/references/vimeo.md
Normal file
123
skills/api-gateway/references/vimeo.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Vimeo Routing Reference
|
||||
|
||||
**App name:** `vimeo`
|
||||
**Base URL proxied:** `api.vimeo.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/vimeo/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### User
|
||||
|
||||
```bash
|
||||
GET /vimeo/me
|
||||
GET /vimeo/users/{user_id}
|
||||
GET /vimeo/me/feed
|
||||
```
|
||||
|
||||
### Videos
|
||||
|
||||
```bash
|
||||
# List user videos
|
||||
GET /vimeo/me/videos
|
||||
|
||||
# Search videos
|
||||
GET /vimeo/videos?query=nature
|
||||
|
||||
# Get video
|
||||
GET /vimeo/videos/{video_id}
|
||||
|
||||
# Update video
|
||||
PATCH /vimeo/videos/{video_id}
|
||||
|
||||
# Delete video
|
||||
DELETE /vimeo/videos/{video_id}
|
||||
```
|
||||
|
||||
### Folders (Projects)
|
||||
|
||||
```bash
|
||||
GET /vimeo/me/folders
|
||||
POST /vimeo/me/folders
|
||||
PATCH /vimeo/me/projects/{project_id}
|
||||
DELETE /vimeo/me/projects/{project_id}
|
||||
|
||||
# Folder videos
|
||||
GET /vimeo/me/projects/{project_id}/videos
|
||||
PUT /vimeo/me/projects/{project_id}/videos/{video_id}
|
||||
DELETE /vimeo/me/projects/{project_id}/videos/{video_id}
|
||||
```
|
||||
|
||||
### Albums (Showcases)
|
||||
|
||||
```bash
|
||||
GET /vimeo/me/albums
|
||||
POST /vimeo/me/albums
|
||||
PATCH /vimeo/me/albums/{album_id}
|
||||
DELETE /vimeo/me/albums/{album_id}
|
||||
|
||||
# Album videos
|
||||
GET /vimeo/me/albums/{album_id}/videos
|
||||
PUT /vimeo/me/albums/{album_id}/videos/{video_id}
|
||||
DELETE /vimeo/me/albums/{album_id}/videos/{video_id}
|
||||
```
|
||||
|
||||
### Comments
|
||||
|
||||
```bash
|
||||
GET /vimeo/videos/{video_id}/comments
|
||||
POST /vimeo/videos/{video_id}/comments
|
||||
DELETE /vimeo/videos/{video_id}/comments/{comment_id}
|
||||
```
|
||||
|
||||
### Likes
|
||||
|
||||
```bash
|
||||
GET /vimeo/me/likes
|
||||
PUT /vimeo/me/likes/{video_id}
|
||||
DELETE /vimeo/me/likes/{video_id}
|
||||
```
|
||||
|
||||
### Watch Later
|
||||
|
||||
```bash
|
||||
GET /vimeo/me/watchlater
|
||||
PUT /vimeo/me/watchlater/{video_id}
|
||||
DELETE /vimeo/me/watchlater/{video_id}
|
||||
```
|
||||
|
||||
### Following
|
||||
|
||||
```bash
|
||||
GET /vimeo/me/followers
|
||||
GET /vimeo/me/following
|
||||
PUT /vimeo/me/following/{user_id}
|
||||
DELETE /vimeo/me/following/{user_id}
|
||||
```
|
||||
|
||||
### Channels and Categories
|
||||
|
||||
```bash
|
||||
GET /vimeo/channels
|
||||
GET /vimeo/channels/{channel_id}
|
||||
GET /vimeo/categories
|
||||
GET /vimeo/categories/{category}/videos
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Video and user IDs are numeric
|
||||
- Folders are called "projects" in API paths
|
||||
- Albums are "Showcases" in the Vimeo UI
|
||||
- DELETE and PUT operations return 204 No Content
|
||||
- Video uploads require TUS protocol
|
||||
- Page-based pagination with `page` and `per_page` parameters
|
||||
|
||||
## Resources
|
||||
|
||||
- [Vimeo API Reference](https://developer.vimeo.com/api/reference)
|
||||
- [Vimeo Developer Portal](https://developer.vimeo.com)
|
||||
212
skills/api-gateway/references/whatsapp-business.md
Normal file
212
skills/api-gateway/references/whatsapp-business.md
Normal file
@@ -0,0 +1,212 @@
|
||||
# WhatsApp Business Routing Reference
|
||||
|
||||
**App name:** `whatsapp-business`
|
||||
**Base URL proxied:** `graph.facebook.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/whatsapp-business/v21.0/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Send Text Message
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"to": "1234567890",
|
||||
"type": "text",
|
||||
"text": {"body": "Hello from WhatsApp!"}
|
||||
}
|
||||
```
|
||||
|
||||
### Send Template Message
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"to": "1234567890",
|
||||
"type": "template",
|
||||
"template": {
|
||||
"name": "hello_world",
|
||||
"language": {"code": "en_US"},
|
||||
"components": [
|
||||
{
|
||||
"type": "body",
|
||||
"parameters": [{"type": "text", "text": "John"}]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Send Image Message
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"to": "1234567890",
|
||||
"type": "image",
|
||||
"image": {
|
||||
"link": "https://example.com/image.jpg",
|
||||
"caption": "Check out this image!"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Send Document Message
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"to": "1234567890",
|
||||
"type": "document",
|
||||
"document": {
|
||||
"link": "https://example.com/document.pdf",
|
||||
"filename": "report.pdf"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Send Interactive Button Message
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"to": "1234567890",
|
||||
"type": "interactive",
|
||||
"interactive": {
|
||||
"type": "button",
|
||||
"body": {"text": "Would you like to proceed?"},
|
||||
"action": {
|
||||
"buttons": [
|
||||
{"type": "reply", "reply": {"id": "yes", "title": "Yes"}},
|
||||
{"type": "reply", "reply": {"id": "no", "title": "No"}}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Send Interactive List Message
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"to": "1234567890",
|
||||
"type": "interactive",
|
||||
"interactive": {
|
||||
"type": "list",
|
||||
"body": {"text": "Choose from the list below"},
|
||||
"action": {
|
||||
"button": "View Options",
|
||||
"sections": [
|
||||
{
|
||||
"title": "Products",
|
||||
"rows": [
|
||||
{"id": "prod1", "title": "Product 1"},
|
||||
{"id": "prod2", "title": "Product 2"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Mark Message as Read
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"status": "read",
|
||||
"message_id": "wamid.xxxxx"
|
||||
}
|
||||
```
|
||||
|
||||
### Upload Media
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/media
|
||||
Content-Type: multipart/form-data
|
||||
|
||||
file=@/path/to/file.jpg
|
||||
type=image/jpeg
|
||||
messaging_product=whatsapp
|
||||
```
|
||||
|
||||
### Get Media URL
|
||||
```bash
|
||||
GET /whatsapp-business/v21.0/{media_id}
|
||||
```
|
||||
|
||||
### List Message Templates
|
||||
```bash
|
||||
GET /whatsapp-business/v21.0/{whatsapp_business_account_id}/message_templates
|
||||
```
|
||||
|
||||
### Create Message Template
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{whatsapp_business_account_id}/message_templates
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "order_confirmation",
|
||||
"language": "en_US",
|
||||
"category": "UTILITY",
|
||||
"components": [
|
||||
{"type": "BODY", "text": "Hi {{1}}, your order #{{2}} has been confirmed!"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Get Business Profile
|
||||
```bash
|
||||
GET /whatsapp-business/v21.0/{phone_number_id}/whatsapp_business_profile?fields=about,address,description,email,websites
|
||||
```
|
||||
|
||||
### Update Business Profile
|
||||
```bash
|
||||
POST /whatsapp-business/v21.0/{phone_number_id}/whatsapp_business_profile
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messaging_product": "whatsapp",
|
||||
"about": "Your trusted partner",
|
||||
"description": "We provide excellent services"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Phone numbers must be in international format without `+` (e.g., `1234567890`)
|
||||
- `messaging_product` must always be set to `whatsapp`
|
||||
- Template messages are required for initiating conversations (24-hour messaging window)
|
||||
- Media files must be publicly accessible URLs or uploaded via the Media API
|
||||
- Interactive messages support up to 3 buttons or 10 list items
|
||||
- Template categories: `AUTHENTICATION`, `MARKETING`, `UTILITY`
|
||||
|
||||
## Resources
|
||||
|
||||
- [WhatsApp Business API Overview](https://developers.facebook.com/docs/whatsapp/cloud-api/overview)
|
||||
- [Send Messages](https://developers.facebook.com/docs/whatsapp/cloud-api/guides/send-messages)
|
||||
- [Message Templates](https://developers.facebook.com/docs/whatsapp/cloud-api/guides/send-message-templates)
|
||||
- [Media](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media)
|
||||
- [Business Profiles](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/business-profiles)
|
||||
- [Webhooks](https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks)
|
||||
- [Error Codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes)
|
||||
277
skills/api-gateway/references/woocommerce.md
Normal file
277
skills/api-gateway/references/woocommerce.md
Normal file
@@ -0,0 +1,277 @@
|
||||
# WooCommerce Routing Reference
|
||||
|
||||
**App name:** `woocommerce`
|
||||
**Base URL proxied:** `{store-url}/wp-json/wc/v3`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/woocommerce/wp-json/wc/v3/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Products
|
||||
|
||||
#### List Products
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/products?per_page=20&status=publish
|
||||
```
|
||||
|
||||
#### Get Product
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/products/{id}
|
||||
```
|
||||
|
||||
#### Create Product
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/products
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "Premium Widget", "type": "simple", "regular_price": "19.99", "sku": "WDG-001"}
|
||||
```
|
||||
|
||||
#### Update Product
|
||||
```bash
|
||||
PUT /woocommerce/wp-json/wc/v3/products/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{"regular_price": "24.99", "sale_price": "19.99"}
|
||||
```
|
||||
|
||||
#### Delete Product
|
||||
```bash
|
||||
DELETE /woocommerce/wp-json/wc/v3/products/{id}?force=true
|
||||
```
|
||||
|
||||
### Product Variations
|
||||
|
||||
#### List Variations
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/products/{product_id}/variations
|
||||
```
|
||||
|
||||
#### Create Variation
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/products/{product_id}/variations
|
||||
Content-Type: application/json
|
||||
|
||||
{"regular_price": "29.99", "sku": "TSH-001-RED-M", "attributes": [{"id": 1, "option": "Red"}]}
|
||||
```
|
||||
|
||||
### Product Categories
|
||||
|
||||
#### List Categories
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/products/categories
|
||||
```
|
||||
|
||||
#### Create Category
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/products/categories
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "Electronics", "description": "Electronic products"}
|
||||
```
|
||||
|
||||
### Orders
|
||||
|
||||
#### List Orders
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/orders?status=processing&per_page=50
|
||||
```
|
||||
|
||||
#### Get Order
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/orders/{id}
|
||||
```
|
||||
|
||||
#### Create Order
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/orders
|
||||
Content-Type: application/json
|
||||
|
||||
{"payment_method": "stripe", "set_paid": true, "billing": {"first_name": "John", "last_name": "Doe", "email": "john@example.com"}, "line_items": [{"product_id": 123, "quantity": 2}]}
|
||||
```
|
||||
|
||||
#### Update Order Status
|
||||
```bash
|
||||
PUT /woocommerce/wp-json/wc/v3/orders/{id}
|
||||
Content-Type: application/json
|
||||
|
||||
{"status": "completed"}
|
||||
```
|
||||
|
||||
### Order Notes
|
||||
|
||||
#### List Order Notes
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/orders/{order_id}/notes
|
||||
```
|
||||
|
||||
#### Create Order Note
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/orders/{order_id}/notes
|
||||
Content-Type: application/json
|
||||
|
||||
{"note": "Order shipped via FedEx", "customer_note": true}
|
||||
```
|
||||
|
||||
### Order Refunds
|
||||
|
||||
#### Create Refund
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/orders/{order_id}/refunds
|
||||
Content-Type: application/json
|
||||
|
||||
{"amount": "25.00", "reason": "Product damaged", "api_refund": true}
|
||||
```
|
||||
|
||||
### Customers
|
||||
|
||||
#### List Customers
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/customers?per_page=25
|
||||
```
|
||||
|
||||
#### Get Customer
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/customers/{id}
|
||||
```
|
||||
|
||||
#### Create Customer
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/customers
|
||||
Content-Type: application/json
|
||||
|
||||
{"email": "jane@example.com", "first_name": "Jane", "last_name": "Smith", "username": "janesmith"}
|
||||
```
|
||||
|
||||
### Coupons
|
||||
|
||||
#### List Coupons
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/coupons
|
||||
```
|
||||
|
||||
#### Create Coupon
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/coupons
|
||||
Content-Type: application/json
|
||||
|
||||
{"code": "SUMMER2024", "discount_type": "percent", "amount": "15", "usage_limit": 100}
|
||||
```
|
||||
|
||||
### Taxes
|
||||
|
||||
#### List Tax Rates
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/taxes
|
||||
```
|
||||
|
||||
#### Create Tax Rate
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/taxes
|
||||
Content-Type: application/json
|
||||
|
||||
{"country": "US", "state": "CA", "rate": "7.25", "name": "CA State Tax"}
|
||||
```
|
||||
|
||||
### Shipping
|
||||
|
||||
#### List Shipping Zones
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/shipping/zones
|
||||
```
|
||||
|
||||
#### List Shipping Zone Methods
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/shipping/zones/{zone_id}/methods
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
|
||||
#### List Webhooks
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/webhooks
|
||||
```
|
||||
|
||||
#### Create Webhook
|
||||
```bash
|
||||
POST /woocommerce/wp-json/wc/v3/webhooks
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "Order Created", "topic": "order.created", "delivery_url": "https://example.com/webhook", "status": "active"}
|
||||
```
|
||||
|
||||
### Reports
|
||||
|
||||
#### Sales Report
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/reports/sales?period=month
|
||||
```
|
||||
|
||||
#### Top Sellers
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/reports/top_sellers
|
||||
```
|
||||
|
||||
#### Orders Totals
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/reports/orders/totals
|
||||
```
|
||||
|
||||
### Settings
|
||||
|
||||
#### List Settings Groups
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/settings
|
||||
```
|
||||
|
||||
#### Get Settings in Group
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/settings/{group}
|
||||
```
|
||||
|
||||
### System Status
|
||||
|
||||
#### Get System Status
|
||||
```bash
|
||||
GET /woocommerce/wp-json/wc/v3/system_status
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- All monetary amounts are returned as strings with two decimal places
|
||||
- Dates are in ISO8601 format: `YYYY-MM-DDTHH:MM:SS`
|
||||
- Resource IDs are integers
|
||||
- Pagination uses `page` and `per_page` parameters (max 100 per page)
|
||||
- Response headers include `X-WP-Total` and `X-WP-TotalPages`
|
||||
- Order statuses: `pending`, `processing`, `on-hold`, `completed`, `cancelled`, `refunded`, `failed`
|
||||
- Discount types: `percent`, `fixed_cart`, `fixed_product`
|
||||
- Use `force=true` query parameter to permanently delete (otherwise moves to trash)
|
||||
- Batch operations supported via `POST /{resource}/batch` with `create`, `update`, `delete` arrays
|
||||
|
||||
## Resources
|
||||
|
||||
- [WooCommerce REST API Documentation](https://woocommerce.github.io/woocommerce-rest-api-docs/)
|
||||
- [Products](https://woocommerce.github.io/woocommerce-rest-api-docs/#products)
|
||||
- [Product Variations](https://woocommerce.github.io/woocommerce-rest-api-docs/#product-variations)
|
||||
- [Product Attributes](https://woocommerce.github.io/woocommerce-rest-api-docs/#product-attributes)
|
||||
- [Product Categories](https://woocommerce.github.io/woocommerce-rest-api-docs/#product-categories)
|
||||
- [Product Tags](https://woocommerce.github.io/woocommerce-rest-api-docs/#product-tags)
|
||||
- [Product Reviews](https://woocommerce.github.io/woocommerce-rest-api-docs/#product-reviews)
|
||||
- [Orders](https://woocommerce.github.io/woocommerce-rest-api-docs/#orders)
|
||||
- [Order Notes](https://woocommerce.github.io/woocommerce-rest-api-docs/#order-notes)
|
||||
- [Refunds](https://woocommerce.github.io/woocommerce-rest-api-docs/#refunds)
|
||||
- [Customers](https://woocommerce.github.io/woocommerce-rest-api-docs/#customers)
|
||||
- [Coupons](https://woocommerce.github.io/woocommerce-rest-api-docs/#coupons)
|
||||
- [Tax Rates](https://woocommerce.github.io/woocommerce-rest-api-docs/#tax-rates)
|
||||
- [Tax Classes](https://woocommerce.github.io/woocommerce-rest-api-docs/#tax-classes)
|
||||
- [Shipping Zones](https://woocommerce.github.io/woocommerce-rest-api-docs/#shipping-zones)
|
||||
- [Shipping Methods](https://woocommerce.github.io/woocommerce-rest-api-docs/#shipping-methods)
|
||||
- [Payment Gateways](https://woocommerce.github.io/woocommerce-rest-api-docs/#payment-gateways)
|
||||
- [Settings](https://woocommerce.github.io/woocommerce-rest-api-docs/#settings)
|
||||
- [Webhooks](https://woocommerce.github.io/woocommerce-rest-api-docs/#webhooks)
|
||||
- [Reports](https://woocommerce.github.io/woocommerce-rest-api-docs/#reports)
|
||||
- [System Status](https://woocommerce.github.io/woocommerce-rest-api-docs/#system-status)
|
||||
168
skills/api-gateway/references/wordpress.md
Normal file
168
skills/api-gateway/references/wordpress.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# WordPress.com Routing Reference
|
||||
|
||||
**App name:** `wordpress`
|
||||
**Base URL proxied:** `public-api.wordpress.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/wordpress/rest/v1.1/{endpoint}
|
||||
```
|
||||
|
||||
**Important:** WordPress.com uses REST API v1.1. Site-specific endpoints use `/sites/{site_id_or_domain}/{resource}`.
|
||||
|
||||
## Site Identifiers
|
||||
|
||||
Sites can be identified by:
|
||||
- Numeric site ID (e.g., `252505333`)
|
||||
- Domain name (e.g., `myblog.wordpress.com`)
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Sites
|
||||
|
||||
#### Get Site Information
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}
|
||||
```
|
||||
|
||||
### Posts
|
||||
|
||||
#### List Posts
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/posts
|
||||
```
|
||||
|
||||
Query parameters: `number`, `offset`, `page_handle`, `status`, `search`, `category`, `tag`, `author`
|
||||
|
||||
#### Get Post
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/posts/{post_id}
|
||||
```
|
||||
|
||||
#### Create Post
|
||||
```bash
|
||||
POST /wordpress/rest/v1.1/sites/{site}/posts/new
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Post Title",
|
||||
"content": "<p>Post content...</p>",
|
||||
"status": "draft",
|
||||
"categories": "news",
|
||||
"tags": "featured"
|
||||
}
|
||||
```
|
||||
|
||||
#### Update Post
|
||||
```bash
|
||||
POST /wordpress/rest/v1.1/sites/{site}/posts/{post_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Updated Title",
|
||||
"content": "<p>Updated content...</p>"
|
||||
}
|
||||
```
|
||||
|
||||
#### Delete Post
|
||||
```bash
|
||||
POST /wordpress/rest/v1.1/sites/{site}/posts/{post_id}/delete
|
||||
```
|
||||
|
||||
### Pages
|
||||
|
||||
#### List Pages
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/posts?type=page
|
||||
```
|
||||
|
||||
#### Create Page
|
||||
```bash
|
||||
POST /wordpress/rest/v1.1/sites/{site}/posts/new?type=page
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"title": "Page Title",
|
||||
"content": "<p>Page content...</p>",
|
||||
"status": "publish"
|
||||
}
|
||||
```
|
||||
|
||||
### Post Likes
|
||||
|
||||
#### Get Post Likes
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/posts/{post_id}/likes
|
||||
```
|
||||
|
||||
#### Like Post
|
||||
```bash
|
||||
POST /wordpress/rest/v1.1/sites/{site}/posts/{post_id}/likes/new
|
||||
```
|
||||
|
||||
### Users
|
||||
|
||||
#### List Site Users
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/users
|
||||
```
|
||||
|
||||
### User Settings
|
||||
|
||||
#### Get My Settings
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/me/settings
|
||||
```
|
||||
|
||||
#### Update My Settings
|
||||
```bash
|
||||
POST /wordpress/rest/v1.1/me/settings/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"enable_translator": false
|
||||
}
|
||||
```
|
||||
|
||||
### Post Types
|
||||
|
||||
#### List Post Types
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/post-types
|
||||
```
|
||||
|
||||
### Post Counts
|
||||
|
||||
#### Get Post Counts
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/post-counts/{post_type}
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
WordPress.com uses cursor-based pagination with `page_handle`:
|
||||
|
||||
```bash
|
||||
GET /wordpress/rest/v1.1/sites/{site}/posts?number=20
|
||||
# Response includes "meta": {"next_page": "..."}
|
||||
|
||||
GET /wordpress/rest/v1.1/sites/{site}/posts?number=20&page_handle={next_page}
|
||||
```
|
||||
|
||||
Alternatively, use `offset` for simple pagination.
|
||||
|
||||
## Notes
|
||||
|
||||
- API version is v1.1 (not v2)
|
||||
- POST is used for updates (not PUT/PATCH)
|
||||
- POST to `/delete` endpoint is used for deletes (not HTTP DELETE)
|
||||
- Categories and tags are created automatically when referenced in posts
|
||||
- Content is HTML-formatted
|
||||
- Date/time values are in ISO 8601 format
|
||||
|
||||
## Resources
|
||||
|
||||
- [WordPress.com REST API Overview](https://developer.wordpress.com/docs/api/)
|
||||
- [Getting Started Guide](https://developer.wordpress.com/docs/api/getting-started/)
|
||||
- [API Reference](https://developer.wordpress.com/docs/api/rest-api-reference/)
|
||||
203
skills/api-gateway/references/xero.md
Normal file
203
skills/api-gateway/references/xero.md
Normal file
@@ -0,0 +1,203 @@
|
||||
# Xero Routing Reference
|
||||
|
||||
**App name:** `xero`
|
||||
**Base URL proxied:** `api.xero.com`
|
||||
|
||||
## Automatic Tenant ID Injection
|
||||
|
||||
The router automatically injects the `Xero-Tenant-Id` header from your connection config. You do not need to provide it manually.
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/xero/api.xro/2.0/{endpoint}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Contacts
|
||||
|
||||
#### List Contacts
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Contacts
|
||||
```
|
||||
|
||||
#### Get Contact
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Contacts/{contactId}
|
||||
```
|
||||
|
||||
#### Create Contact
|
||||
```bash
|
||||
POST /xero/api.xro/2.0/Contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Contacts": [{
|
||||
"Name": "John Doe",
|
||||
"EmailAddress": "john@example.com",
|
||||
"Phones": [{"PhoneType": "DEFAULT", "PhoneNumber": "555-1234"}]
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### Invoices
|
||||
|
||||
#### List Invoices
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Invoices
|
||||
```
|
||||
|
||||
#### Get Invoice
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Invoices/{invoiceId}
|
||||
```
|
||||
|
||||
#### Create Invoice
|
||||
```bash
|
||||
POST /xero/api.xro/2.0/Invoices
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"Invoices": [{
|
||||
"Type": "ACCREC",
|
||||
"Contact": {"ContactID": "xxx"},
|
||||
"LineItems": [{
|
||||
"Description": "Service",
|
||||
"Quantity": 1,
|
||||
"UnitAmount": 100.00,
|
||||
"AccountCode": "200"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### Accounts
|
||||
|
||||
#### List Accounts
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Accounts
|
||||
```
|
||||
|
||||
### Items
|
||||
|
||||
#### List Items
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Items
|
||||
```
|
||||
|
||||
### Payments
|
||||
|
||||
#### List Payments
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Payments
|
||||
```
|
||||
|
||||
### Bank Transactions
|
||||
|
||||
#### List Bank Transactions
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/BankTransactions
|
||||
```
|
||||
|
||||
### Reports
|
||||
|
||||
#### Profit and Loss
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Reports/ProfitAndLoss?fromDate=2024-01-01&toDate=2024-12-31
|
||||
```
|
||||
|
||||
#### Balance Sheet
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Reports/BalanceSheet?date=2024-12-31
|
||||
```
|
||||
|
||||
#### Trial Balance
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Reports/TrialBalance?date=2024-12-31
|
||||
```
|
||||
|
||||
### Currencies
|
||||
|
||||
#### List Currencies
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Currencies
|
||||
```
|
||||
|
||||
### Tax Rates
|
||||
|
||||
#### List Tax Rates
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/TaxRates
|
||||
```
|
||||
|
||||
### Credit Notes
|
||||
|
||||
#### List Credit Notes
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/CreditNotes
|
||||
```
|
||||
|
||||
### Purchase Orders
|
||||
|
||||
#### List Purchase Orders
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/PurchaseOrders
|
||||
```
|
||||
|
||||
### Organisation
|
||||
|
||||
#### Get Organisation
|
||||
```bash
|
||||
GET /xero/api.xro/2.0/Organisation
|
||||
```
|
||||
|
||||
## Invoice Types
|
||||
|
||||
- `ACCREC` - Accounts Receivable (sales invoice)
|
||||
- `ACCPAY` - Accounts Payable (bill)
|
||||
|
||||
## Notes
|
||||
|
||||
- `Xero-Tenant-Id` header is automatically injected by the router
|
||||
- Dates are in `YYYY-MM-DD` format
|
||||
- Multiple records can be created in a single request using arrays
|
||||
- Updates use POST method with the record ID in the URL
|
||||
- Draft invoices can be deleted by setting `Status` to `DELETED`
|
||||
- Use `where` query parameter for filtering (e.g., `where=Status=="VOIDED"`)
|
||||
|
||||
## Resources
|
||||
|
||||
- [API Overview](https://developer.xero.com/documentation/api/accounting/overview)
|
||||
- [List Contacts](https://developer.xero.com/documentation/api/accounting/contacts#get-contacts)
|
||||
- [Get Contact](https://developer.xero.com/documentation/api/accounting/contacts#get-contacts)
|
||||
- [Create Contact](https://developer.xero.com/documentation/api/accounting/contacts#put-contacts)
|
||||
- [Update Contact](https://developer.xero.com/documentation/api/accounting/contacts#post-contacts)
|
||||
- [List Invoices](https://developer.xero.com/documentation/api/accounting/invoices#get-invoices)
|
||||
- [Get Invoice](https://developer.xero.com/documentation/api/accounting/invoices#get-invoices)
|
||||
- [Create Invoice](https://developer.xero.com/documentation/api/accounting/invoices#put-invoices)
|
||||
- [Update Invoice](https://developer.xero.com/documentation/api/accounting/invoices#post-invoices)
|
||||
- [Email Invoice](https://developer.xero.com/documentation/api/accounting/invoices#emailing-an-invoice)
|
||||
- [List Accounts](https://developer.xero.com/documentation/api/accounting/accounts#get-accounts)
|
||||
- [Get Account](https://developer.xero.com/documentation/api/accounting/accounts#get-accounts)
|
||||
- [Create Account](https://developer.xero.com/documentation/api/accounting/accounts#put-accounts)
|
||||
- [Update Account](https://developer.xero.com/documentation/api/accounting/accounts#post-accounts)
|
||||
- [Delete Account](https://developer.xero.com/documentation/api/accounting/accounts#delete-accounts)
|
||||
- [List Items](https://developer.xero.com/documentation/api/accounting/items#get-items)
|
||||
- [Get Item](https://developer.xero.com/documentation/api/accounting/items#get-items)
|
||||
- [Create Item](https://developer.xero.com/documentation/api/accounting/items#put-items)
|
||||
- [Update Item](https://developer.xero.com/documentation/api/accounting/items#post-items)
|
||||
- [Delete Item](https://developer.xero.com/documentation/api/accounting/items#delete-items)
|
||||
- [List Payments](https://developer.xero.com/documentation/api/accounting/payments#get-payments)
|
||||
- [Get Payment](https://developer.xero.com/documentation/api/accounting/payments#get-payments)
|
||||
- [Create Payment](https://developer.xero.com/documentation/api/accounting/payments#put-payments)
|
||||
- [Update Payment](https://developer.xero.com/documentation/api/accounting/payments#post-payments)
|
||||
- [List Bank Transactions](https://developer.xero.com/documentation/api/accounting/banktransactions#get-banktransactions)
|
||||
- [Get Bank Transaction](https://developer.xero.com/documentation/api/accounting/banktransactions#get-banktransactions)
|
||||
- [Create Bank Transaction](https://developer.xero.com/documentation/api/accounting/banktransactions#put-banktransactions)
|
||||
- [Update Bank Transaction](https://developer.xero.com/documentation/api/accounting/banktransactions#post-banktransactions)
|
||||
- [Profit and Loss Report](https://developer.xero.com/documentation/api/accounting/reports#profitandloss)
|
||||
- [Balance Sheet Report](https://developer.xero.com/documentation/api/accounting/reports#balancesheet)
|
||||
- [Trial Balance Report](https://developer.xero.com/documentation/api/accounting/reports#trialbalance)
|
||||
- [Bank Summary Report](https://developer.xero.com/documentation/api/accounting/reports#banksummary)
|
||||
- [Get Organisation](https://developer.xero.com/documentation/api/accounting/organisation#get-organisation)
|
||||
167
skills/api-gateway/references/youtube.md
Normal file
167
skills/api-gateway/references/youtube.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# YouTube Routing Reference
|
||||
|
||||
**App name:** `youtube`
|
||||
**Base URL proxied:** `www.googleapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/youtube/youtube/v3/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Search Videos
|
||||
```bash
|
||||
GET /youtube/youtube/v3/search?part=snippet&q=coding+tutorial&type=video&maxResults=10
|
||||
```
|
||||
|
||||
Query parameters:
|
||||
- `part` - Required: `snippet`
|
||||
- `q` - Search query
|
||||
- `type` - Filter: `video`, `channel`, `playlist`
|
||||
- `maxResults` - Results per page (1-50)
|
||||
- `order` - Sort: `date`, `rating`, `relevance`, `title`, `viewCount`
|
||||
- `videoDuration` - `short` (<4min), `medium` (4-20min), `long` (>20min)
|
||||
|
||||
### Get Video Details
|
||||
```bash
|
||||
GET /youtube/youtube/v3/videos?part=snippet,statistics,contentDetails&id={videoId}
|
||||
```
|
||||
|
||||
Parts available: `snippet`, `statistics`, `contentDetails`, `status`, `player`
|
||||
|
||||
### Get Trending Videos
|
||||
```bash
|
||||
GET /youtube/youtube/v3/videos?part=snippet,statistics&chart=mostPopular®ionCode=US&maxResults=10
|
||||
```
|
||||
|
||||
### Rate Video
|
||||
```bash
|
||||
POST /youtube/youtube/v3/videos/rate?id={videoId}&rating=like
|
||||
```
|
||||
|
||||
Rating values: `like`, `dislike`, `none`
|
||||
|
||||
### Get My Channel
|
||||
```bash
|
||||
GET /youtube/youtube/v3/channels?part=snippet,statistics,contentDetails&mine=true
|
||||
```
|
||||
|
||||
### Get Channel Details
|
||||
```bash
|
||||
GET /youtube/youtube/v3/channels?part=snippet,statistics&id={channelId}
|
||||
```
|
||||
|
||||
### List My Playlists
|
||||
```bash
|
||||
GET /youtube/youtube/v3/playlists?part=snippet,contentDetails&mine=true&maxResults=25
|
||||
```
|
||||
|
||||
### Create Playlist
|
||||
```bash
|
||||
POST /youtube/youtube/v3/playlists?part=snippet,status
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"snippet": {
|
||||
"title": "My New Playlist",
|
||||
"description": "A collection of videos"
|
||||
},
|
||||
"status": {
|
||||
"privacyStatus": "private"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Privacy values: `public`, `private`, `unlisted`
|
||||
|
||||
### Delete Playlist
|
||||
```bash
|
||||
DELETE /youtube/youtube/v3/playlists?id={playlistId}
|
||||
```
|
||||
|
||||
### List Playlist Items
|
||||
```bash
|
||||
GET /youtube/youtube/v3/playlistItems?part=snippet,contentDetails&playlistId={playlistId}&maxResults=50
|
||||
```
|
||||
|
||||
### Add Video to Playlist
|
||||
```bash
|
||||
POST /youtube/youtube/v3/playlistItems?part=snippet
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"snippet": {
|
||||
"playlistId": "PLxyz123",
|
||||
"resourceId": {
|
||||
"kind": "youtube#video",
|
||||
"videoId": "abc123xyz"
|
||||
},
|
||||
"position": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List My Subscriptions
|
||||
```bash
|
||||
GET /youtube/youtube/v3/subscriptions?part=snippet&mine=true&maxResults=50
|
||||
```
|
||||
|
||||
### Subscribe to Channel
|
||||
```bash
|
||||
POST /youtube/youtube/v3/subscriptions?part=snippet
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"snippet": {
|
||||
"resourceId": {
|
||||
"kind": "youtube#channel",
|
||||
"channelId": "UCxyz123"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### List Video Comments
|
||||
```bash
|
||||
GET /youtube/youtube/v3/commentThreads?part=snippet,replies&videoId={videoId}&maxResults=100
|
||||
```
|
||||
|
||||
### Add Comment to Video
|
||||
```bash
|
||||
POST /youtube/youtube/v3/commentThreads?part=snippet
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"snippet": {
|
||||
"videoId": "abc123xyz",
|
||||
"topLevelComment": {
|
||||
"snippet": {
|
||||
"textOriginal": "Great video!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Video IDs are 11 characters (e.g., `dQw4w9WgXcQ`)
|
||||
- Channel IDs start with `UC` (e.g., `UCxyz123`)
|
||||
- Playlist IDs start with `PL` (user) or `UU` (uploads)
|
||||
- Use `pageToken` for pagination through large result sets
|
||||
- The `part` parameter is required and determines what data is returned
|
||||
- Quota costs vary by endpoint - search is expensive (100 units), reads are cheap (1 unit)
|
||||
|
||||
## Resources
|
||||
|
||||
- [YouTube Data API Overview](https://developers.google.com/youtube/v3)
|
||||
- [Search](https://developers.google.com/youtube/v3/docs/search/list)
|
||||
- [Videos](https://developers.google.com/youtube/v3/docs/videos)
|
||||
- [Channels](https://developers.google.com/youtube/v3/docs/channels)
|
||||
- [Playlists](https://developers.google.com/youtube/v3/docs/playlists)
|
||||
- [PlaylistItems](https://developers.google.com/youtube/v3/docs/playlistItems)
|
||||
- [Subscriptions](https://developers.google.com/youtube/v3/docs/subscriptions)
|
||||
- [Comments](https://developers.google.com/youtube/v3/docs/comments)
|
||||
- [Quota Calculator](https://developers.google.com/youtube/v3/determine_quota_cost)
|
||||
104
skills/api-gateway/references/zoho-bigin.md
Normal file
104
skills/api-gateway/references/zoho-bigin.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# Zoho Bigin Routing Reference
|
||||
|
||||
**App name:** `zoho-bigin`
|
||||
**Base URL proxied:** `www.zohoapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-bigin/bigin/v2/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### List Contacts
|
||||
```bash
|
||||
GET /zoho-bigin/bigin/v2/Contacts?fields=First_Name,Last_Name,Email
|
||||
```
|
||||
|
||||
### Get Contact
|
||||
```bash
|
||||
GET /zoho-bigin/bigin/v2/Contacts/{id}
|
||||
```
|
||||
|
||||
### Create Contact
|
||||
```bash
|
||||
POST /zoho-bigin/bigin/v2/Contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [{
|
||||
"Last_Name": "Smith",
|
||||
"First_Name": "John",
|
||||
"Email": "john@example.com"
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### Update Contact
|
||||
```bash
|
||||
PUT /zoho-bigin/bigin/v2/Contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [{
|
||||
"id": "{record_id}",
|
||||
"Phone": "+1-555-1234"
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### Delete Contact
|
||||
```bash
|
||||
DELETE /zoho-bigin/bigin/v2/Contacts?ids={id1},{id2}
|
||||
```
|
||||
|
||||
### Search Contacts
|
||||
```bash
|
||||
GET /zoho-bigin/bigin/v2/Contacts/search?email=john@example.com
|
||||
GET /zoho-bigin/bigin/v2/Contacts/search?criteria=(Last_Name:equals:Smith)
|
||||
```
|
||||
|
||||
### List Companies (Accounts)
|
||||
```bash
|
||||
GET /zoho-bigin/bigin/v2/Accounts?fields=Account_Name,Website
|
||||
```
|
||||
|
||||
### Get Users
|
||||
```bash
|
||||
GET /zoho-bigin/bigin/v2/users?type=ActiveUsers
|
||||
```
|
||||
|
||||
### Get Modules
|
||||
```bash
|
||||
GET /zoho-bigin/bigin/v2/settings/modules
|
||||
```
|
||||
|
||||
## Available Modules
|
||||
|
||||
| Module | API Name | Description |
|
||||
|--------|----------|-------------|
|
||||
| Contacts | `Contacts` | Individual people |
|
||||
| Companies | `Accounts` | Organizations/businesses |
|
||||
| Pipelines | `Pipelines` | Sales opportunities/deals |
|
||||
| Products | `Products` | Items you sell |
|
||||
| Tasks | `Tasks` | To-do items |
|
||||
| Events | `Events` | Calendar appointments |
|
||||
| Calls | `Calls` | Phone call logs |
|
||||
| Notes | `Notes` | Notes attached to records |
|
||||
|
||||
## Notes
|
||||
|
||||
- The `fields` query parameter is **required** for list operations
|
||||
- Module API names are case-sensitive (e.g., `Contacts`, not `contacts`)
|
||||
- Companies are accessed via the `Accounts` module
|
||||
- Sales opportunities are in the `Pipelines` module (not `Deals`)
|
||||
- Record IDs are numeric strings (e.g., `7255024000000596045`)
|
||||
- Maximum 200 records per page, 100 per create/update/delete
|
||||
- Some modules (Tasks, Events, Calls, Notes) require additional OAuth scopes
|
||||
|
||||
## Resources
|
||||
|
||||
- [Bigin API Overview](https://www.bigin.com/developer/docs/apis/v2/)
|
||||
- [Bigin REST API Documentation](https://www.bigin.com/developer/docs/apis/)
|
||||
- [Modules API](https://www.bigin.com/developer/docs/apis/modules-api.html)
|
||||
151
skills/api-gateway/references/zoho-books.md
Normal file
151
skills/api-gateway/references/zoho-books.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# Zoho Books Routing Reference
|
||||
|
||||
**App name:** `zoho-books`
|
||||
**Base URL proxied:** `www.zohoapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-books/books/v3/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Contacts
|
||||
|
||||
```bash
|
||||
# List contacts
|
||||
GET /zoho-books/books/v3/contacts
|
||||
|
||||
# Get contact
|
||||
GET /zoho-books/books/v3/contacts/{contact_id}
|
||||
|
||||
# Create contact
|
||||
POST /zoho-books/books/v3/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contact_name": "Customer Name",
|
||||
"contact_type": "customer"
|
||||
}
|
||||
|
||||
# Update contact
|
||||
PUT /zoho-books/books/v3/contacts/{contact_id}
|
||||
|
||||
# Delete contact
|
||||
DELETE /zoho-books/books/v3/contacts/{contact_id}
|
||||
```
|
||||
|
||||
### Invoices
|
||||
|
||||
```bash
|
||||
# List invoices
|
||||
GET /zoho-books/books/v3/invoices
|
||||
|
||||
# Get invoice
|
||||
GET /zoho-books/books/v3/invoices/{invoice_id}
|
||||
|
||||
# Create invoice
|
||||
POST /zoho-books/books/v3/invoices
|
||||
|
||||
# Mark as sent
|
||||
POST /zoho-books/books/v3/invoices/{invoice_id}/status/sent
|
||||
|
||||
# Email invoice
|
||||
POST /zoho-books/books/v3/invoices/{invoice_id}/email
|
||||
```
|
||||
|
||||
### Bills
|
||||
|
||||
```bash
|
||||
# List bills
|
||||
GET /zoho-books/books/v3/bills
|
||||
|
||||
# Create bill
|
||||
POST /zoho-books/books/v3/bills
|
||||
|
||||
# Update bill
|
||||
PUT /zoho-books/books/v3/bills/{bill_id}
|
||||
|
||||
# Delete bill
|
||||
DELETE /zoho-books/books/v3/bills/{bill_id}
|
||||
```
|
||||
|
||||
### Expenses
|
||||
|
||||
```bash
|
||||
# List expenses
|
||||
GET /zoho-books/books/v3/expenses
|
||||
|
||||
# Create expense
|
||||
POST /zoho-books/books/v3/expenses
|
||||
|
||||
# Update expense
|
||||
PUT /zoho-books/books/v3/expenses/{expense_id}
|
||||
|
||||
# Delete expense
|
||||
DELETE /zoho-books/books/v3/expenses/{expense_id}
|
||||
```
|
||||
|
||||
### Sales Orders
|
||||
|
||||
```bash
|
||||
GET /zoho-books/books/v3/salesorders
|
||||
POST /zoho-books/books/v3/salesorders
|
||||
```
|
||||
|
||||
### Purchase Orders
|
||||
|
||||
```bash
|
||||
GET /zoho-books/books/v3/purchaseorders
|
||||
POST /zoho-books/books/v3/purchaseorders
|
||||
```
|
||||
|
||||
### Credit Notes
|
||||
|
||||
```bash
|
||||
GET /zoho-books/books/v3/creditnotes
|
||||
```
|
||||
|
||||
### Recurring Invoices
|
||||
|
||||
```bash
|
||||
GET /zoho-books/books/v3/recurringinvoices
|
||||
```
|
||||
|
||||
### Recurring Bills
|
||||
|
||||
```bash
|
||||
GET /zoho-books/books/v3/recurringbills
|
||||
```
|
||||
|
||||
## Available Modules
|
||||
|
||||
| Module | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| Contacts | `/contacts` | Customers and vendors |
|
||||
| Invoices | `/invoices` | Sales invoices |
|
||||
| Bills | `/bills` | Vendor bills |
|
||||
| Expenses | `/expenses` | Business expenses |
|
||||
| Sales Orders | `/salesorders` | Sales orders |
|
||||
| Purchase Orders | `/purchaseorders` | Purchase orders |
|
||||
| Credit Notes | `/creditnotes` | Customer credit notes |
|
||||
| Recurring Invoices | `/recurringinvoices` | Recurring invoices |
|
||||
| Recurring Bills | `/recurringbills` | Recurring bills |
|
||||
|
||||
## Notes
|
||||
|
||||
- All successful responses have `code: 0`
|
||||
- Dates should be in `yyyy-mm-dd` format
|
||||
- Contact types are `customer` or `vendor`
|
||||
- Some modules (items, chart of accounts, bank accounts, projects) require additional OAuth scopes
|
||||
- Rate limits: 100 requests/minute per organization
|
||||
- Pagination uses `page` and `per_page` parameters with `has_more_page` in response
|
||||
|
||||
## Resources
|
||||
|
||||
- [Zoho Books API v3 Introduction](https://www.zoho.com/books/api/v3/introduction/)
|
||||
- [Zoho Books Invoices API](https://www.zoho.com/books/api/v3/invoices/)
|
||||
- [Zoho Books Contacts API](https://www.zoho.com/books/api/v3/contacts/)
|
||||
- [Zoho Books Bills API](https://www.zoho.com/books/api/v3/bills/)
|
||||
- [Zoho Books Expenses API](https://www.zoho.com/books/api/v3/expenses/)
|
||||
118
skills/api-gateway/references/zoho-calendar.md
Normal file
118
skills/api-gateway/references/zoho-calendar.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# Zoho Calendar Routing Reference
|
||||
|
||||
**App name:** `zoho-calendar`
|
||||
**Base URL proxied:** `calendar.zoho.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-calendar/api/v1/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Calendars
|
||||
|
||||
```bash
|
||||
# List calendars
|
||||
GET /zoho-calendar/api/v1/calendars
|
||||
|
||||
# Get calendar details
|
||||
GET /zoho-calendar/api/v1/calendars/{calendar_uid}
|
||||
|
||||
# Create calendar
|
||||
POST /zoho-calendar/api/v1/calendars?calendarData={json}
|
||||
|
||||
# Delete calendar
|
||||
DELETE /zoho-calendar/api/v1/calendars/{calendar_uid}
|
||||
```
|
||||
|
||||
### Events
|
||||
|
||||
```bash
|
||||
# List events (range required, max 31 days)
|
||||
GET /zoho-calendar/api/v1/calendars/{calendar_uid}/events?range={"start":"yyyyMMdd","end":"yyyyMMdd"}
|
||||
|
||||
# Get event details
|
||||
GET /zoho-calendar/api/v1/calendars/{calendar_uid}/events/{event_uid}
|
||||
|
||||
# Create event
|
||||
POST /zoho-calendar/api/v1/calendars/{calendar_uid}/events?eventdata={json}
|
||||
|
||||
# Update event (etag required in eventdata)
|
||||
PUT /zoho-calendar/api/v1/calendars/{calendar_uid}/events/{event_uid}?eventdata={json}
|
||||
|
||||
# Delete event (etag required as HEADER)
|
||||
DELETE /zoho-calendar/api/v1/calendars/{calendar_uid}/events/{event_uid}
|
||||
Header: etag: {etag_value}
|
||||
```
|
||||
|
||||
## Event Data Format
|
||||
|
||||
### Create/Update Event
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "Meeting Title",
|
||||
"dateandtime": {
|
||||
"timezone": "America/Los_Angeles",
|
||||
"start": "yyyyMMdd'T'HHmmss'Z'",
|
||||
"end": "yyyyMMdd'T'HHmmss'Z'"
|
||||
},
|
||||
"description": "Event description",
|
||||
"location": "Meeting room",
|
||||
"isallday": false,
|
||||
"attendees": [
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"permission": 1,
|
||||
"attendance": 1
|
||||
}
|
||||
],
|
||||
"reminders": [
|
||||
{
|
||||
"action": "popup",
|
||||
"minutes": 30
|
||||
}
|
||||
],
|
||||
"rrule": "FREQ=DAILY;COUNT=5"
|
||||
}
|
||||
```
|
||||
|
||||
### Update Event (etag required)
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "Updated Title",
|
||||
"dateandtime": {...},
|
||||
"etag": 1770368451507
|
||||
}
|
||||
```
|
||||
|
||||
## Calendar Data Format
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Calendar Name",
|
||||
"color": "#FF5733",
|
||||
"textcolor": "#FFFFFF",
|
||||
"description": "Calendar description"
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Event and calendar data is passed as JSON in query parameters (`eventdata`, `calendarData`)
|
||||
- Date/time format: `yyyyMMdd'T'HHmmss'Z'` (GMT) for timed events, `yyyyMMdd` for all-day
|
||||
- The `range` parameter for listing events cannot exceed 31 days
|
||||
- **IMPORTANT:** For delete operations, `etag` must be passed as an HTTP header, not a query parameter
|
||||
- The `etag` is required for update and delete operations - always get the latest etag before modifying
|
||||
- Permission levels for attendees: 0 (Guest), 1 (View), 2 (Invite), 3 (Edit)
|
||||
- Attendance: 0 (Non-participant), 1 (Required), 2 (Optional)
|
||||
- Reminder actions: `email`, `popup`, `notification`
|
||||
|
||||
## Resources
|
||||
|
||||
- [Zoho Calendar API Introduction](https://www.zoho.com/calendar/help/api/introduction.html)
|
||||
- [Zoho Calendar Events API](https://www.zoho.com/calendar/help/api/events-api.html)
|
||||
- [Zoho Calendar Calendars API](https://www.zoho.com/calendar/help/api/calendars-api.html)
|
||||
112
skills/api-gateway/references/zoho-crm.md
Normal file
112
skills/api-gateway/references/zoho-crm.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Zoho CRM Routing Reference
|
||||
|
||||
**App name:** `zoho-crm`
|
||||
**Base URL proxied:** `www.zohoapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-crm/crm/v8/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Records
|
||||
|
||||
```bash
|
||||
# List records (fields required)
|
||||
GET /zoho-crm/crm/v8/{module_api_name}?fields={field1},{field2}
|
||||
|
||||
# Get record
|
||||
GET /zoho-crm/crm/v8/{module_api_name}/{record_id}
|
||||
|
||||
# Create records
|
||||
POST /zoho-crm/crm/v8/{module_api_name}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"field_api_name": "value"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Update records
|
||||
PUT /zoho-crm/crm/v8/{module_api_name}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "record_id",
|
||||
"field_api_name": "updated_value"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Delete records
|
||||
DELETE /zoho-crm/crm/v8/{module_api_name}?ids={id1},{id2}
|
||||
```
|
||||
|
||||
### Search
|
||||
|
||||
```bash
|
||||
# Search by criteria
|
||||
GET /zoho-crm/crm/v8/{module_api_name}/search?criteria=(Last_Name:equals:Smith)
|
||||
|
||||
# Search by email
|
||||
GET /zoho-crm/crm/v8/{module_api_name}/search?email=user@example.com
|
||||
|
||||
# Search by phone
|
||||
GET /zoho-crm/crm/v8/{module_api_name}/search?phone=555-1234
|
||||
|
||||
# Global text search
|
||||
GET /zoho-crm/crm/v8/{module_api_name}/search?word=searchterm
|
||||
```
|
||||
|
||||
## Available Modules
|
||||
|
||||
| Module | API Name | Description |
|
||||
|--------|----------|-------------|
|
||||
| Leads | `Leads` | Potential customers |
|
||||
| Contacts | `Contacts` | Individual people |
|
||||
| Accounts | `Accounts` | Organizations/companies |
|
||||
| Deals | `Deals` | Sales opportunities |
|
||||
| Campaigns | `Campaigns` | Marketing campaigns |
|
||||
| Tasks | `Tasks` | To-do items |
|
||||
| Calls | `Calls` | Phone call logs |
|
||||
| Events | `Events` | Calendar appointments |
|
||||
| Products | `Products` | Items for sale |
|
||||
|
||||
## Mandatory Fields
|
||||
|
||||
| Module | Required Fields |
|
||||
|--------|-----------------|
|
||||
| Leads | `Last_Name` |
|
||||
| Contacts | `Last_Name` |
|
||||
| Accounts | `Account_Name` |
|
||||
| Deals | `Deal_Name`, `Stage` |
|
||||
| Tasks | `Subject` |
|
||||
|
||||
## Search Operators
|
||||
|
||||
- Text: `equals`, `not_equal`, `starts_with`, `in`
|
||||
- Date/Number: `equals`, `not_equal`, `greater_than`, `less_than`, `between`, `in`
|
||||
- Boolean: `equals`, `not_equal`
|
||||
|
||||
## Notes
|
||||
|
||||
- The `fields` parameter is **required** for list operations (max 50 fields)
|
||||
- Module API names are case-sensitive (e.g., `Leads`, not `leads`)
|
||||
- Maximum 100 records per create/update/delete request
|
||||
- Maximum 200 records returned per GET request
|
||||
- Use `page_token` for >2,000 records (expires after 24 hours)
|
||||
- Some modules require additional OAuth scopes (Tasks, Events, Calls, Products)
|
||||
- Empty datasets return HTTP 204 (No Content)
|
||||
|
||||
## Resources
|
||||
|
||||
- [Zoho CRM API v8 Documentation](https://www.zoho.com/crm/developer/docs/api/v8/)
|
||||
- [Get Records API](https://www.zoho.com/crm/developer/docs/api/v8/get-records.html)
|
||||
- [Search Records API](https://www.zoho.com/crm/developer/docs/api/v8/search-records.html)
|
||||
214
skills/api-gateway/references/zoho-inventory.md
Normal file
214
skills/api-gateway/references/zoho-inventory.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# Zoho Inventory Routing Reference
|
||||
|
||||
**App name:** `zoho-inventory`
|
||||
**Base URL proxied:** `www.zohoapis.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-inventory/inventory/v1/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Items
|
||||
|
||||
```bash
|
||||
# List items
|
||||
GET /zoho-inventory/inventory/v1/items
|
||||
|
||||
# Get item
|
||||
GET /zoho-inventory/inventory/v1/items/{item_id}
|
||||
|
||||
# Create item
|
||||
POST /zoho-inventory/inventory/v1/items
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Widget",
|
||||
"rate": 25.00,
|
||||
"purchase_rate": 10.00,
|
||||
"sku": "WDG-001",
|
||||
"item_type": "inventory",
|
||||
"product_type": "goods",
|
||||
"unit": "pcs"
|
||||
}
|
||||
|
||||
# Update item
|
||||
PUT /zoho-inventory/inventory/v1/items/{item_id}
|
||||
|
||||
# Delete item
|
||||
DELETE /zoho-inventory/inventory/v1/items/{item_id}
|
||||
|
||||
# Mark as active/inactive
|
||||
POST /zoho-inventory/inventory/v1/items/{item_id}/active
|
||||
POST /zoho-inventory/inventory/v1/items/{item_id}/inactive
|
||||
```
|
||||
|
||||
### Contacts
|
||||
|
||||
```bash
|
||||
# List contacts
|
||||
GET /zoho-inventory/inventory/v1/contacts
|
||||
|
||||
# Get contact
|
||||
GET /zoho-inventory/inventory/v1/contacts/{contact_id}
|
||||
|
||||
# Create contact
|
||||
POST /zoho-inventory/inventory/v1/contacts
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"contact_name": "Customer Name",
|
||||
"contact_type": "customer"
|
||||
}
|
||||
|
||||
# Update contact
|
||||
PUT /zoho-inventory/inventory/v1/contacts/{contact_id}
|
||||
|
||||
# Delete contact
|
||||
DELETE /zoho-inventory/inventory/v1/contacts/{contact_id}
|
||||
```
|
||||
|
||||
### Sales Orders
|
||||
|
||||
```bash
|
||||
# List sales orders
|
||||
GET /zoho-inventory/inventory/v1/salesorders
|
||||
|
||||
# Get sales order
|
||||
GET /zoho-inventory/inventory/v1/salesorders/{salesorder_id}
|
||||
|
||||
# Create sales order
|
||||
POST /zoho-inventory/inventory/v1/salesorders
|
||||
|
||||
# Update sales order
|
||||
PUT /zoho-inventory/inventory/v1/salesorders/{salesorder_id}
|
||||
|
||||
# Delete sales order
|
||||
DELETE /zoho-inventory/inventory/v1/salesorders/{salesorder_id}
|
||||
|
||||
# Status actions
|
||||
POST /zoho-inventory/inventory/v1/salesorders/{salesorder_id}/status/confirmed
|
||||
POST /zoho-inventory/inventory/v1/salesorders/{salesorder_id}/status/void
|
||||
```
|
||||
|
||||
### Invoices
|
||||
|
||||
```bash
|
||||
# List invoices
|
||||
GET /zoho-inventory/inventory/v1/invoices
|
||||
|
||||
# Get invoice
|
||||
GET /zoho-inventory/inventory/v1/invoices/{invoice_id}
|
||||
|
||||
# Create invoice
|
||||
POST /zoho-inventory/inventory/v1/invoices
|
||||
|
||||
# Update invoice
|
||||
PUT /zoho-inventory/inventory/v1/invoices/{invoice_id}
|
||||
|
||||
# Delete invoice
|
||||
DELETE /zoho-inventory/inventory/v1/invoices/{invoice_id}
|
||||
|
||||
# Status actions
|
||||
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/status/sent
|
||||
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/status/draft
|
||||
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/status/void
|
||||
|
||||
# Email
|
||||
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/email
|
||||
```
|
||||
|
||||
### Purchase Orders
|
||||
|
||||
```bash
|
||||
# List purchase orders
|
||||
GET /zoho-inventory/inventory/v1/purchaseorders
|
||||
|
||||
# Create purchase order
|
||||
POST /zoho-inventory/inventory/v1/purchaseorders
|
||||
|
||||
# Update purchase order
|
||||
PUT /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}
|
||||
|
||||
# Delete purchase order
|
||||
DELETE /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}
|
||||
|
||||
# Status actions
|
||||
POST /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}/status/issued
|
||||
POST /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}/status/cancelled
|
||||
```
|
||||
|
||||
### Bills
|
||||
|
||||
```bash
|
||||
# List bills
|
||||
GET /zoho-inventory/inventory/v1/bills
|
||||
|
||||
# Create bill
|
||||
POST /zoho-inventory/inventory/v1/bills
|
||||
|
||||
# Update bill
|
||||
PUT /zoho-inventory/inventory/v1/bills/{bill_id}
|
||||
|
||||
# Delete bill
|
||||
DELETE /zoho-inventory/inventory/v1/bills/{bill_id}
|
||||
|
||||
# Status actions
|
||||
POST /zoho-inventory/inventory/v1/bills/{bill_id}/status/open
|
||||
POST /zoho-inventory/inventory/v1/bills/{bill_id}/status/void
|
||||
```
|
||||
|
||||
### Item Groups
|
||||
|
||||
```bash
|
||||
GET /zoho-inventory/inventory/v1/itemgroups
|
||||
GET /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}
|
||||
POST /zoho-inventory/inventory/v1/itemgroups
|
||||
PUT /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}
|
||||
DELETE /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}
|
||||
```
|
||||
|
||||
### Shipment Orders
|
||||
|
||||
```bash
|
||||
POST /zoho-inventory/inventory/v1/shipmentorders
|
||||
GET /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}
|
||||
PUT /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}
|
||||
DELETE /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}
|
||||
POST /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}/status/delivered
|
||||
```
|
||||
|
||||
## Available Modules
|
||||
|
||||
| Module | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| Items | `/items` | Products and services |
|
||||
| Item Groups | `/itemgroups` | Grouped product variants |
|
||||
| Contacts | `/contacts` | Customers and vendors |
|
||||
| Sales Orders | `/salesorders` | Sales orders |
|
||||
| Invoices | `/invoices` | Sales invoices |
|
||||
| Purchase Orders | `/purchaseorders` | Purchase orders |
|
||||
| Bills | `/bills` | Vendor bills |
|
||||
| Shipment Orders | `/shipmentorders` | Shipment tracking |
|
||||
|
||||
## Notes
|
||||
|
||||
- All successful responses have `code: 0`
|
||||
- Dates should be in `yyyy-mm-dd` format
|
||||
- Contact types are `customer` or `vendor`
|
||||
- The `organization_id` parameter is automatically handled by the gateway
|
||||
- Sales order and purchase order numbers are auto-generated by default
|
||||
- Pagination uses `page` and `per_page` parameters with `has_more_page` in response
|
||||
- Rate limits: 100 requests/minute per organization
|
||||
|
||||
## Resources
|
||||
|
||||
- [Zoho Inventory API v1 Introduction](https://www.zoho.com/inventory/api/v1/introduction/)
|
||||
- [Zoho Inventory Items API](https://www.zoho.com/inventory/api/v1/items/)
|
||||
- [Zoho Inventory Contacts API](https://www.zoho.com/inventory/api/v1/contacts/)
|
||||
- [Zoho Inventory Sales Orders API](https://www.zoho.com/inventory/api/v1/salesorders/)
|
||||
- [Zoho Inventory Invoices API](https://www.zoho.com/inventory/api/v1/invoices/)
|
||||
- [Zoho Inventory Purchase Orders API](https://www.zoho.com/inventory/api/v1/purchaseorders/)
|
||||
- [Zoho Inventory Bills API](https://www.zoho.com/inventory/api/v1/bills/)
|
||||
173
skills/api-gateway/references/zoho-mail.md
Normal file
173
skills/api-gateway/references/zoho-mail.md
Normal file
@@ -0,0 +1,173 @@
|
||||
# Zoho Mail Routing Reference
|
||||
|
||||
**App name:** `zoho-mail`
|
||||
**Base URL proxied:** `mail.zoho.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-mail/api/{resource}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Accounts
|
||||
|
||||
```bash
|
||||
# Get all accounts
|
||||
GET /zoho-mail/api/accounts
|
||||
|
||||
# Get account details
|
||||
GET /zoho-mail/api/accounts/{accountId}
|
||||
```
|
||||
|
||||
### Folders
|
||||
|
||||
```bash
|
||||
# List all folders
|
||||
GET /zoho-mail/api/accounts/{accountId}/folders
|
||||
|
||||
# Create folder
|
||||
POST /zoho-mail/api/accounts/{accountId}/folders
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"folderName": "My Folder"
|
||||
}
|
||||
|
||||
# Rename folder
|
||||
PUT /zoho-mail/api/accounts/{accountId}/folders/{folderId}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"folderName": "Renamed Folder"
|
||||
}
|
||||
|
||||
# Delete folder
|
||||
DELETE /zoho-mail/api/accounts/{accountId}/folders/{folderId}
|
||||
```
|
||||
|
||||
### Labels
|
||||
|
||||
```bash
|
||||
# List labels
|
||||
GET /zoho-mail/api/accounts/{accountId}/labels
|
||||
|
||||
# Create label
|
||||
POST /zoho-mail/api/accounts/{accountId}/labels
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"labelName": "Important"
|
||||
}
|
||||
|
||||
# Update label
|
||||
PUT /zoho-mail/api/accounts/{accountId}/labels/{labelId}
|
||||
|
||||
# Delete label
|
||||
DELETE /zoho-mail/api/accounts/{accountId}/labels/{labelId}
|
||||
```
|
||||
|
||||
### Messages
|
||||
|
||||
```bash
|
||||
# List emails in folder
|
||||
GET /zoho-mail/api/accounts/{accountId}/messages/view?folderId={folderId}&limit=50
|
||||
|
||||
# Search emails
|
||||
GET /zoho-mail/api/accounts/{accountId}/messages/search?searchKey={query}
|
||||
|
||||
# Get email content
|
||||
GET /zoho-mail/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/content
|
||||
|
||||
# Get email headers
|
||||
GET /zoho-mail/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/header
|
||||
|
||||
# Get email metadata
|
||||
GET /zoho-mail/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/details
|
||||
|
||||
# Get original MIME message
|
||||
GET /zoho-mail/api/accounts/{accountId}/messages/{messageId}/originalmessage
|
||||
|
||||
# Send email
|
||||
POST /zoho-mail/api/accounts/{accountId}/messages
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"fromAddress": "sender@yourdomain.com",
|
||||
"toAddress": "recipient@example.com",
|
||||
"subject": "Subject",
|
||||
"content": "Email body",
|
||||
"mailFormat": "html"
|
||||
}
|
||||
|
||||
# Reply to email
|
||||
POST /zoho-mail/api/accounts/{accountId}/messages/{messageId}
|
||||
|
||||
# Update message (mark read, move, flag, archive, spam)
|
||||
PUT /zoho-mail/api/accounts/{accountId}/updatemessage
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"messageId": ["messageId1"],
|
||||
"folderId": "folderId",
|
||||
"mode": "markAsRead"
|
||||
}
|
||||
|
||||
# Delete email
|
||||
DELETE /zoho-mail/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}
|
||||
```
|
||||
|
||||
### Attachments
|
||||
|
||||
```bash
|
||||
# Upload attachment
|
||||
POST /zoho-mail/api/accounts/{accountId}/messages/attachments
|
||||
Content-Type: multipart/form-data
|
||||
|
||||
# Get attachment info
|
||||
GET /zoho-mail/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/attachmentinfo
|
||||
|
||||
# Download attachment
|
||||
GET /zoho-mail/api/accounts/{accountId}/folders/{folderId}/messages/{messageId}/attachments/{attachmentId}
|
||||
```
|
||||
|
||||
## Update Message Modes
|
||||
|
||||
| Mode | Description |
|
||||
|------|-------------|
|
||||
| `markAsRead` | Mark messages as read |
|
||||
| `markAsUnread` | Mark messages as unread |
|
||||
| `moveMessage` | Move messages (requires `destfolderId`) |
|
||||
| `flag` | Set flag (requires `flagid`: 1-4) |
|
||||
| `archive` | Archive messages |
|
||||
| `unArchive` | Unarchive messages |
|
||||
| `spam` | Mark as spam |
|
||||
| `notSpam` | Mark as not spam |
|
||||
|
||||
## Default Folders
|
||||
|
||||
| Folder | Type |
|
||||
|--------|------|
|
||||
| Inbox | `Inbox` |
|
||||
| Drafts | `Drafts` |
|
||||
| Templates | `Templates` |
|
||||
| Snoozed | `Snoozed` |
|
||||
| Sent | `Sent` |
|
||||
| Spam | `Spam` |
|
||||
| Trash | `Trash` |
|
||||
| Outbox | `Outbox` |
|
||||
|
||||
## Notes
|
||||
|
||||
- Account IDs are required for most operations - get via `/api/accounts`
|
||||
- Message IDs and Folder IDs are numeric strings
|
||||
- The `fromAddress` must be associated with the authenticated account
|
||||
- Uses offset-based pagination with `start` and `limit` parameters
|
||||
- Some operations require additional OAuth scopes
|
||||
|
||||
## Resources
|
||||
|
||||
- [Zoho Mail API Overview](https://www.zoho.com/mail/help/api/overview.html)
|
||||
- [Email Messages API](https://www.zoho.com/mail/help/api/email-api.html)
|
||||
- [Folders API](https://www.zoho.com/mail/help/api/get-all-folder-details.html)
|
||||
153
skills/api-gateway/references/zoho-people.md
Normal file
153
skills/api-gateway/references/zoho-people.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Zoho People Routing Reference
|
||||
|
||||
**App name:** `zoho-people`
|
||||
**Base URL proxied:** `people.zoho.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-people/people/api/{resource}
|
||||
```
|
||||
|
||||
or for view-based endpoints:
|
||||
|
||||
```
|
||||
/zoho-people/api/forms/{viewName}/records
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Forms
|
||||
|
||||
```bash
|
||||
# List all forms
|
||||
GET /zoho-people/people/api/forms
|
||||
```
|
||||
|
||||
### Records (Bulk)
|
||||
|
||||
```bash
|
||||
# Get records from any form
|
||||
GET /zoho-people/people/api/forms/{formLinkName}/getRecords?sIndex=1&limit=200
|
||||
|
||||
# Common form link names:
|
||||
# - employee
|
||||
# - department
|
||||
# - designation
|
||||
# - leave
|
||||
# - P_ClientDetails
|
||||
```
|
||||
|
||||
### Records (View-based)
|
||||
|
||||
```bash
|
||||
# Get records using a view
|
||||
GET /zoho-people/api/forms/{viewName}/records?rec_limit=200
|
||||
|
||||
# Common view names:
|
||||
# - P_EmployeeView
|
||||
# - P_DepartmentView
|
||||
# - P_DesignationView
|
||||
```
|
||||
|
||||
### Search
|
||||
|
||||
```bash
|
||||
# Search by Employee ID
|
||||
GET /zoho-people/people/api/forms/employee/getRecords?SearchColumn=EMPLOYEEID&SearchValue={empId}
|
||||
|
||||
# Search by Email
|
||||
GET /zoho-people/people/api/forms/employee/getRecords?SearchColumn=EMPLOYEEMAILALIAS&SearchValue={email}
|
||||
|
||||
# Get modified records
|
||||
GET /zoho-people/people/api/forms/{formLinkName}/getRecords?modifiedtime={timestamp_ms}
|
||||
```
|
||||
|
||||
### Insert Record
|
||||
|
||||
```bash
|
||||
POST /zoho-people/people/api/forms/json/{formLinkName}/insertRecord
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
inputData={"field1":"value1","field2":"value2"}
|
||||
```
|
||||
|
||||
### Update Record
|
||||
|
||||
```bash
|
||||
POST /zoho-people/people/api/forms/json/{formLinkName}/updateRecord
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
inputData={"field1":"newValue"}&recordId={recordId}
|
||||
```
|
||||
|
||||
### Attendance
|
||||
|
||||
```bash
|
||||
# Get attendance entries (requires additional scope)
|
||||
GET /zoho-people/people/api/attendance/getAttendanceEntries?date={date}&dateFormat={format}
|
||||
|
||||
# Check-in/Check-out (requires additional scope)
|
||||
POST /zoho-people/people/api/attendance
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
dateFormat=dd/MM/yyyy HH:mm:ss&checkIn={datetime}&checkOut={datetime}&empId={empId}
|
||||
```
|
||||
|
||||
### Leave
|
||||
|
||||
```bash
|
||||
# Get leave records
|
||||
GET /zoho-people/people/api/forms/leave/getRecords?sIndex=1&limit=200
|
||||
|
||||
# Add leave
|
||||
POST /zoho-people/people/api/forms/json/leave/insertRecord
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
inputData={"Employee_ID":"EMP001","Leavetype":"123456","From":"01-Feb-2026","To":"02-Feb-2026"}
|
||||
```
|
||||
|
||||
## Common Form Link Names
|
||||
|
||||
| Form | formLinkName |
|
||||
|------|--------------|
|
||||
| Employee | `employee` |
|
||||
| Department | `department` |
|
||||
| Designation | `designation` |
|
||||
| Leave | `leave` |
|
||||
| Clients | `P_ClientDetails` |
|
||||
|
||||
## Pagination
|
||||
|
||||
Uses index-based pagination:
|
||||
- `sIndex`: Starting index (1-based)
|
||||
- `limit`: Max records per request (max 200)
|
||||
|
||||
For page 2: `sIndex=201&limit=200`
|
||||
|
||||
## Notes
|
||||
|
||||
- Record IDs are numeric strings (e.g., `943596000000294355`)
|
||||
- Insert/Update use `application/x-www-form-urlencoded` content type
|
||||
- `inputData` parameter contains JSON object as string
|
||||
- Attendance endpoints require additional OAuth scopes
|
||||
- Maximum 200 records per request
|
||||
- Response wraps data in `response.result[]` array
|
||||
|
||||
## Error Codes
|
||||
|
||||
| Code | Description |
|
||||
|------|-------------|
|
||||
| 7011 | Invalid form name |
|
||||
| 7012 | Invalid view name |
|
||||
| 7021 | Max limit exceeded (200) |
|
||||
| 7024 | No records found |
|
||||
| 7042 | Invalid search value |
|
||||
| 7218 | Invalid OAuth scope |
|
||||
|
||||
## Resources
|
||||
|
||||
- [Zoho People API Overview](https://www.zoho.com/people/api/overview.html)
|
||||
- [Get Bulk Records API](https://www.zoho.com/people/api/bulk-records.html)
|
||||
- [Insert Record API](https://www.zoho.com/people/api/insert-records.html)
|
||||
- [Update Record API](https://www.zoho.com/people/api/update-records.html)
|
||||
153
skills/api-gateway/references/zoho-recruit.md
Normal file
153
skills/api-gateway/references/zoho-recruit.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Zoho Recruit Routing Reference
|
||||
|
||||
**App name:** `zoho-recruit`
|
||||
**Base URL proxied:** `recruit.zoho.com`
|
||||
|
||||
## API Path Pattern
|
||||
|
||||
```
|
||||
/zoho-recruit/recruit/v2/{module_api_name}
|
||||
```
|
||||
|
||||
## Common Endpoints
|
||||
|
||||
### Modules
|
||||
|
||||
```bash
|
||||
# List all modules
|
||||
GET /zoho-recruit/recruit/v2/settings/modules
|
||||
|
||||
# Get specific module
|
||||
GET /zoho-recruit/recruit/v2/settings/modules/{module_api_name}
|
||||
```
|
||||
|
||||
### Records
|
||||
|
||||
```bash
|
||||
# List records
|
||||
GET /zoho-recruit/recruit/v2/{module_api_name}?page=1&per_page=200
|
||||
|
||||
# Get single record
|
||||
GET /zoho-recruit/recruit/v2/{module_api_name}/{record_id}
|
||||
|
||||
# Create records (max 100)
|
||||
POST /zoho-recruit/recruit/v2/{module_api_name}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [
|
||||
{"field_api_name": "value"}
|
||||
]
|
||||
}
|
||||
|
||||
# Update single record
|
||||
PUT /zoho-recruit/recruit/v2/{module_api_name}/{record_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [
|
||||
{"field_api_name": "new_value"}
|
||||
]
|
||||
}
|
||||
|
||||
# Update multiple records (max 100)
|
||||
PUT /zoho-recruit/recruit/v2/{module_api_name}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"data": [
|
||||
{"id": "record_id", "field_api_name": "value"}
|
||||
]
|
||||
}
|
||||
|
||||
# Delete records (max 100)
|
||||
DELETE /zoho-recruit/recruit/v2/{module_api_name}?ids={id1},{id2}
|
||||
```
|
||||
|
||||
### Search
|
||||
|
||||
```bash
|
||||
# Search by criteria
|
||||
GET /zoho-recruit/recruit/v2/{module_api_name}/search?criteria=(field:operator:value)
|
||||
|
||||
# Search by email
|
||||
GET /zoho-recruit/recruit/v2/{module_api_name}/search?email=user@example.com
|
||||
|
||||
# Search by phone
|
||||
GET /zoho-recruit/recruit/v2/{module_api_name}/search?phone=555-1234
|
||||
|
||||
# Global word search
|
||||
GET /zoho-recruit/recruit/v2/{module_api_name}/search?word=keyword
|
||||
```
|
||||
|
||||
## Available Modules
|
||||
|
||||
| Module | API Name |
|
||||
|--------|----------|
|
||||
| Candidates | `Candidates` |
|
||||
| Job Openings | `Job_Openings` |
|
||||
| Applications | `Applications` |
|
||||
| Interviews | `Interviews` |
|
||||
| Departments | `Departments` |
|
||||
| Clients | `Clients` |
|
||||
| Contacts | `Contacts` |
|
||||
| Campaigns | `Campaigns` |
|
||||
| Referrals | `Referrals` |
|
||||
| Tasks | `Tasks` |
|
||||
| Events | `Events` |
|
||||
| Vendors | `Vendors` |
|
||||
|
||||
## Query Parameters
|
||||
|
||||
| Parameter | Type | Description |
|
||||
|-----------|------|-------------|
|
||||
| `fields` | string | Comma-separated field API names |
|
||||
| `sort_order` | string | `asc` or `desc` |
|
||||
| `sort_by` | string | Field API name |
|
||||
| `converted` | string | `true`, `false`, or `both` |
|
||||
| `approved` | string | `true`, `false`, or `both` |
|
||||
| `page` | integer | Page number (default: 1) |
|
||||
| `per_page` | integer | Records per page (max 200) |
|
||||
|
||||
## Search Operators
|
||||
|
||||
**Text fields:**
|
||||
- `equals`, `not_equal`, `starts_with`, `ends_with`, `contains`, `not_contains`, `in`
|
||||
|
||||
**Date/Number fields:**
|
||||
- `equals`, `not_equal`, `greater_than`, `less_than`, `greater_equal`, `less_equal`, `between`
|
||||
|
||||
## Pagination
|
||||
|
||||
Uses page-based pagination:
|
||||
- `page`: Page number (default: 1)
|
||||
- `per_page`: Records per page (max: 200)
|
||||
|
||||
Response includes:
|
||||
```json
|
||||
{
|
||||
"data": [...],
|
||||
"info": {
|
||||
"per_page": 200,
|
||||
"count": 50,
|
||||
"page": 1,
|
||||
"more_records": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Module API names are case-sensitive (e.g., `Job_Openings`)
|
||||
- Maximum 200 records per GET request
|
||||
- Maximum 100 records per POST/PUT/DELETE request
|
||||
- `Last_Name` is mandatory for Candidates
|
||||
- Date format: `yyyy-MM-dd`
|
||||
- DateTime format: `yyyy-MM-ddTHH:mm:ss±HH:mm` (ISO 8601)
|
||||
- Lookup fields use JSON objects with `id`
|
||||
|
||||
## Resources
|
||||
|
||||
- [Zoho Recruit API v2 Overview](https://www.zoho.com/recruit/developer-guide/apiv2/)
|
||||
- [Get Records API](https://www.zoho.com/recruit/developer-guide/apiv2/get-records.html)
|
||||
- [Search Records API](https://www.zoho.com/recruit/developer-guide/apiv2/search-records.html)
|
||||
7
skills/auto-updater/.clawdhub/origin.json
Normal file
7
skills/auto-updater/.clawdhub/origin.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"registry": "https://clawdhub.com",
|
||||
"slug": "auto-updater",
|
||||
"installedVersion": "1.0.0",
|
||||
"installedAt": 1769729588514
|
||||
}
|
||||
149
skills/auto-updater/SKILL.md
Normal file
149
skills/auto-updater/SKILL.md
Normal file
@@ -0,0 +1,149 @@
|
||||
---
|
||||
name: auto-updater
|
||||
description: "Automatically update Clawdbot and all installed skills once daily. Runs via cron, checks for updates, applies them, and messages the user with a summary of what changed."
|
||||
metadata: {"version":"1.0.0","clawdbot":{"emoji":"🔄","os":["darwin","linux"]}}
|
||||
---
|
||||
|
||||
# Auto-Updater Skill
|
||||
|
||||
Keep your Clawdbot and skills up to date automatically with daily update checks.
|
||||
|
||||
## What It Does
|
||||
|
||||
This skill sets up a daily cron job that:
|
||||
|
||||
1. Updates Clawdbot itself (via `clawdbot doctor` or package manager)
|
||||
2. Updates all installed skills (via `clawdhub update --all`)
|
||||
3. Messages you with a summary of what was updated
|
||||
|
||||
## Setup
|
||||
|
||||
### Quick Start
|
||||
|
||||
Ask Clawdbot to set up the auto-updater:
|
||||
|
||||
```
|
||||
Set up daily auto-updates for yourself and all your skills.
|
||||
```
|
||||
|
||||
Or manually add the cron job:
|
||||
|
||||
```bash
|
||||
clawdbot cron add \
|
||||
--name "Daily Auto-Update" \
|
||||
--cron "0 4 * * *" \
|
||||
--tz "America/Los_Angeles" \
|
||||
--session isolated \
|
||||
--wake now \
|
||||
--deliver \
|
||||
--message "Run daily auto-updates: check for Clawdbot updates and update all skills. Report what was updated."
|
||||
```
|
||||
|
||||
### Configuration Options
|
||||
|
||||
| Option | Default | Description |
|
||||
|--------|---------|-------------|
|
||||
| Time | 4:00 AM | When to run updates (use `--cron` to change) |
|
||||
| Timezone | System default | Set with `--tz` |
|
||||
| Delivery | Main session | Where to send the update summary |
|
||||
|
||||
## How Updates Work
|
||||
|
||||
### Clawdbot Updates
|
||||
|
||||
For **npm/pnpm/bun installs**:
|
||||
```bash
|
||||
npm update -g clawdbot@latest
|
||||
# or: pnpm update -g clawdbot@latest
|
||||
# or: bun update -g clawdbot@latest
|
||||
```
|
||||
|
||||
For **source installs** (git checkout):
|
||||
```bash
|
||||
clawdbot update
|
||||
```
|
||||
|
||||
Always run `clawdbot doctor` after updating to apply migrations.
|
||||
|
||||
### Skill Updates
|
||||
|
||||
```bash
|
||||
clawdhub update --all
|
||||
```
|
||||
|
||||
This checks all installed skills against the registry and updates any with new versions available.
|
||||
|
||||
## Update Summary Format
|
||||
|
||||
After updates complete, you'll receive a message like:
|
||||
|
||||
```
|
||||
🔄 Daily Auto-Update Complete
|
||||
|
||||
**Clawdbot**: Updated to v2026.1.10 (was v2026.1.9)
|
||||
|
||||
**Skills Updated (3)**:
|
||||
- prd: 2.0.3 → 2.0.4
|
||||
- browser: 1.2.0 → 1.2.1
|
||||
- nano-banana-pro: 3.1.0 → 3.1.2
|
||||
|
||||
**Skills Already Current (5)**:
|
||||
gemini, sag, things-mac, himalaya, peekaboo
|
||||
|
||||
No issues encountered.
|
||||
```
|
||||
|
||||
## Manual Commands
|
||||
|
||||
Check for updates without applying:
|
||||
```bash
|
||||
clawdhub update --all --dry-run
|
||||
```
|
||||
|
||||
View current skill versions:
|
||||
```bash
|
||||
clawdhub list
|
||||
```
|
||||
|
||||
Check Clawdbot version:
|
||||
```bash
|
||||
clawdbot --version
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Updates Not Running
|
||||
|
||||
1. Verify cron is enabled: check `cron.enabled` in config
|
||||
2. Confirm Gateway is running continuously
|
||||
3. Check cron job exists: `clawdbot cron list`
|
||||
|
||||
### Update Failures
|
||||
|
||||
If an update fails, the summary will include the error. Common fixes:
|
||||
|
||||
- **Permission errors**: Ensure the Gateway user can write to skill directories
|
||||
- **Network errors**: Check internet connectivity
|
||||
- **Package conflicts**: Run `clawdbot doctor` to diagnose
|
||||
|
||||
### Disabling Auto-Updates
|
||||
|
||||
Remove the cron job:
|
||||
```bash
|
||||
clawdbot cron remove "Daily Auto-Update"
|
||||
```
|
||||
|
||||
Or disable temporarily in config:
|
||||
```json
|
||||
{
|
||||
"cron": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Resources
|
||||
|
||||
- [Clawdbot Updating Guide](https://docs.clawd.bot/install/updating)
|
||||
- [ClawdHub CLI](https://docs.clawd.bot/tools/clawdhub)
|
||||
- [Cron Jobs](https://docs.clawd.bot/cron)
|
||||
152
skills/auto-updater/references/agent-guide.md
Normal file
152
skills/auto-updater/references/agent-guide.md
Normal file
@@ -0,0 +1,152 @@
|
||||
# Agent Implementation Guide
|
||||
|
||||
When asked to set up auto-updates, follow this procedure.
|
||||
|
||||
## Step 1: Detect Installation Type
|
||||
|
||||
```bash
|
||||
# Check if installed via npm globally
|
||||
npm list -g clawdbot 2>/dev/null && echo "npm-global"
|
||||
|
||||
# Check if installed via source (git)
|
||||
[ -d ~/.clawdbot/.git ] || [ -f /opt/clawdbot/.git/config ] && echo "source-install"
|
||||
|
||||
# Check pnpm
|
||||
pnpm list -g clawdbot 2>/dev/null && echo "pnpm-global"
|
||||
|
||||
# Check bun
|
||||
bun pm ls -g 2>/dev/null | grep clawdbot && echo "bun-global"
|
||||
```
|
||||
|
||||
## Step 2: Create the Update Script (Optional)
|
||||
|
||||
For complex setups, create a helper script at `~/.clawdbot/scripts/auto-update.sh`:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
LOG_FILE="${HOME}/.clawdbot/logs/auto-update.log"
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
||||
}
|
||||
|
||||
log "Starting auto-update..."
|
||||
|
||||
# Capture starting versions
|
||||
CLAWDBOT_VERSION_BEFORE=$(clawdbot --version 2>/dev/null || echo "unknown")
|
||||
|
||||
# Update Clawdbot
|
||||
log "Updating Clawdbot..."
|
||||
if command -v npm &> /dev/null && npm list -g clawdbot &> /dev/null; then
|
||||
npm update -g clawdbot@latest 2>&1 | tee -a "$LOG_FILE"
|
||||
elif command -v pnpm &> /dev/null && pnpm list -g clawdbot &> /dev/null; then
|
||||
pnpm update -g clawdbot@latest 2>&1 | tee -a "$LOG_FILE"
|
||||
elif command -v bun &> /dev/null; then
|
||||
bun update -g clawdbot@latest 2>&1 | tee -a "$LOG_FILE"
|
||||
else
|
||||
log "Running clawdbot update (source install)"
|
||||
clawdbot update 2>&1 | tee -a "$LOG_FILE" || true
|
||||
fi
|
||||
|
||||
# Run doctor for migrations
|
||||
log "Running doctor..."
|
||||
clawdbot doctor --yes 2>&1 | tee -a "$LOG_FILE" || true
|
||||
|
||||
# Capture new version
|
||||
CLAWDBOT_VERSION_AFTER=$(clawdbot --version 2>/dev/null || echo "unknown")
|
||||
|
||||
# Update skills
|
||||
log "Updating skills via ClawdHub..."
|
||||
SKILL_OUTPUT=$(clawdhub update --all 2>&1) || true
|
||||
echo "$SKILL_OUTPUT" >> "$LOG_FILE"
|
||||
|
||||
log "Auto-update complete."
|
||||
|
||||
# Output summary for agent to parse
|
||||
echo "---UPDATE_SUMMARY_START---"
|
||||
echo "clawdbot_before: $CLAWDBOT_VERSION_BEFORE"
|
||||
echo "clawdbot_after: $CLAWDBOT_VERSION_AFTER"
|
||||
echo "skill_output: $SKILL_OUTPUT"
|
||||
echo "---UPDATE_SUMMARY_END---"
|
||||
```
|
||||
|
||||
## Step 3: Add Cron Job
|
||||
|
||||
The recommended approach is to use Clawdbot's built-in cron with an isolated session:
|
||||
|
||||
```bash
|
||||
clawdbot cron add \
|
||||
--name "Daily Auto-Update" \
|
||||
--cron "0 4 * * *" \
|
||||
--tz "America/Los_Angeles" \
|
||||
--session isolated \
|
||||
--wake now \
|
||||
--deliver \
|
||||
--message "Run the daily auto-update routine:
|
||||
|
||||
1. Check and update Clawdbot:
|
||||
- For npm installs: npm update -g clawdbot@latest
|
||||
- For source installs: clawdbot update
|
||||
- Then run: clawdbot doctor --yes
|
||||
|
||||
2. Update all skills:
|
||||
- Run: clawdhub update --all
|
||||
|
||||
3. Report back with:
|
||||
- Clawdbot version before/after
|
||||
- List of skills that were updated (name + old version → new version)
|
||||
- Any errors encountered
|
||||
|
||||
Format the summary clearly for the user."
|
||||
```
|
||||
|
||||
## Step 4: Verify Setup
|
||||
|
||||
```bash
|
||||
# Confirm cron job was added
|
||||
clawdbot cron list
|
||||
|
||||
# Test the update commands work
|
||||
clawdbot --version
|
||||
clawdhub list
|
||||
```
|
||||
|
||||
## Customization Prompts
|
||||
|
||||
Users may want to customize:
|
||||
|
||||
**Different time:**
|
||||
```bash
|
||||
--cron "0 6 * * *" # 6 AM instead of 4 AM
|
||||
```
|
||||
|
||||
**Different timezone:**
|
||||
```bash
|
||||
--tz "Europe/London"
|
||||
```
|
||||
|
||||
**Specific provider delivery:**
|
||||
```bash
|
||||
--provider telegram --to "@username"
|
||||
```
|
||||
|
||||
**Weekly instead of daily:**
|
||||
```bash
|
||||
--cron "0 4 * * 0" # Sundays at 4 AM
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
If updates fail, the agent should:
|
||||
|
||||
1. Log the error clearly
|
||||
2. Still report partial success (if skills updated but Clawdbot didn't, or vice versa)
|
||||
3. Suggest manual intervention if needed
|
||||
|
||||
Common errors to handle:
|
||||
- `EACCES`: Permission denied → suggest `sudo` or fixing permissions
|
||||
- Network timeouts → retry once, then report
|
||||
- Git conflicts (source installs) → suggest `clawdbot update --force`
|
||||
109
skills/auto-updater/references/summary-examples.md
Normal file
109
skills/auto-updater/references/summary-examples.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# Update Summary Examples
|
||||
|
||||
Reference examples for formatting the update report message.
|
||||
|
||||
## Full Update (Everything Changed)
|
||||
|
||||
```
|
||||
🔄 Daily Auto-Update Complete
|
||||
|
||||
**Clawdbot**
|
||||
Updated: v2026.1.9 → v2026.1.10
|
||||
|
||||
Key changes in this release:
|
||||
- CLI: add clawdbot update command
|
||||
- Gateway: add OpenAI-compatible HTTP endpoint
|
||||
- Sandbox: improved tool-policy errors
|
||||
|
||||
**Skills Updated (3)**
|
||||
1. prd: 2.0.3 → 2.0.4
|
||||
2. browser: 1.2.0 → 1.2.1
|
||||
3. nano-banana-pro: 3.1.0 → 3.1.2
|
||||
|
||||
**Skills Already Current (5)**
|
||||
gemini, sag, things-mac, himalaya, peekaboo
|
||||
|
||||
✅ All updates completed successfully.
|
||||
```
|
||||
|
||||
## No Updates Available
|
||||
|
||||
```
|
||||
🔄 Daily Auto-Update Check
|
||||
|
||||
**Clawdbot**: v2026.1.10 (already latest)
|
||||
|
||||
**Skills**: All 8 installed skills are current.
|
||||
|
||||
Nothing to update today.
|
||||
```
|
||||
|
||||
## Partial Update (Skills Only)
|
||||
|
||||
```
|
||||
🔄 Daily Auto-Update Complete
|
||||
|
||||
**Clawdbot**: v2026.1.10 (no update available)
|
||||
|
||||
**Skills Updated (2)**
|
||||
1. himalaya: 1.0.0 → 1.0.1
|
||||
- Fixed IMAP connection timeout handling
|
||||
2. 1password: 2.1.0 → 2.2.0
|
||||
- Added support for SSH keys
|
||||
|
||||
**Skills Already Current (6)**
|
||||
prd, gemini, browser, sag, things-mac, peekaboo
|
||||
|
||||
✅ Skill updates completed.
|
||||
```
|
||||
|
||||
## Update With Errors
|
||||
|
||||
```
|
||||
🔄 Daily Auto-Update Complete (with issues)
|
||||
|
||||
**Clawdbot**: v2026.1.9 → v2026.1.10 ✅
|
||||
|
||||
**Skills Updated (1)**
|
||||
1. prd: 2.0.3 → 2.0.4 ✅
|
||||
|
||||
**Skills Failed (1)**
|
||||
1. ❌ nano-banana-pro: Update failed
|
||||
Error: Network timeout while downloading v3.1.2
|
||||
Recommendation: Run `clawdhub update nano-banana-pro` manually
|
||||
|
||||
**Skills Already Current (6)**
|
||||
gemini, sag, things-mac, himalaya, peekaboo, browser
|
||||
|
||||
⚠️ Completed with 1 error. See above for details.
|
||||
```
|
||||
|
||||
## First Run / Setup Confirmation
|
||||
|
||||
```
|
||||
🔄 Auto-Updater Configured
|
||||
|
||||
Daily updates will run at 4:00 AM (America/Los_Angeles).
|
||||
|
||||
**What will be updated:**
|
||||
- Clawdbot core
|
||||
- All installed skills via ClawdHub
|
||||
|
||||
**Current status:**
|
||||
- Clawdbot: v2026.1.10
|
||||
- Installed skills: 8
|
||||
|
||||
You'll receive a summary here after each update run.
|
||||
|
||||
To modify: `clawdbot cron edit "Daily Auto-Update"`
|
||||
To disable: `clawdbot cron remove "Daily Auto-Update"`
|
||||
```
|
||||
|
||||
## Formatting Guidelines
|
||||
|
||||
1. **Use emojis sparingly** - just the 🔄 header and ✅/❌ for status
|
||||
2. **Lead with the most important info** - what changed
|
||||
3. **Group similar items** - updated skills together, current skills together
|
||||
4. **Include version numbers** - always show before → after
|
||||
5. **Be concise** - users want a quick scan, not a wall of text
|
||||
6. **Surface errors prominently** - don't bury failures
|
||||
7
skills/clawdbot-backup/.clawdhub/origin.json
Normal file
7
skills/clawdbot-backup/.clawdhub/origin.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"registry": "https://clawdhub.com",
|
||||
"slug": "clawdbot-backup",
|
||||
"installedVersion": "1.0.0",
|
||||
"installedAt": 1769731470951
|
||||
}
|
||||
802
skills/clawdbot-backup/SKILL.md
Normal file
802
skills/clawdbot-backup/SKILL.md
Normal file
@@ -0,0 +1,802 @@
|
||||
---
|
||||
name: clawdbot-backup
|
||||
description: Backup and restore ClawdBot configuration, skills, commands, and settings. Sync across devices, version control with git, automate backups, and migrate to new machines.
|
||||
homepage: https://github.com/clawdbot/backup-skill
|
||||
metadata: {"clawdbot":{"emoji":"💾","requires":{"bins":["git","tar","rsync"],"env":[]}}}
|
||||
---
|
||||
|
||||
# ClawdBot Backup Skill
|
||||
|
||||
Backup, restore, and sync your ClawdBot configuration across devices directly from Clawdbot.
|
||||
|
||||
## Overview
|
||||
|
||||
This skill helps you:
|
||||
- Backup all ClawdBot data and settings
|
||||
- Restore from backups
|
||||
- Sync between multiple machines
|
||||
- Version control your configuration
|
||||
- Automate backup routines
|
||||
- Migrate to new devices
|
||||
|
||||
## ClawdBot Directory Structure
|
||||
|
||||
### Key Locations
|
||||
|
||||
```
|
||||
~/.claude/ # Main ClawdBot directory
|
||||
├── settings.json # Global settings
|
||||
├── settings.local.json # Local overrides (machine-specific)
|
||||
├── projects.json # Project configurations
|
||||
├── skills/ # Your custom skills
|
||||
│ ├── skill-name/
|
||||
│ │ ├── SKILL.md
|
||||
│ │ └── supporting-files/
|
||||
│ └── another-skill/
|
||||
├── commands/ # Custom slash commands (legacy)
|
||||
│ └── command-name.md
|
||||
├── contexts/ # Saved contexts
|
||||
├── templates/ # Response templates
|
||||
└── mcp/ # MCP server configurations
|
||||
└── servers.json
|
||||
|
||||
~/projects/ # Your projects (optional backup)
|
||||
├── project-1/
|
||||
│ └── .claude/ # Project-specific config
|
||||
│ ├── settings.json
|
||||
│ └── skills/
|
||||
└── project-2/
|
||||
```
|
||||
|
||||
### What to Backup
|
||||
|
||||
```
|
||||
ESSENTIAL (Always backup):
|
||||
✓ ~/.claude/skills/ # Custom skills
|
||||
✓ ~/.claude/commands/ # Custom commands
|
||||
✓ ~/.claude/settings.json # Global settings
|
||||
✓ ~/.claude/mcp/ # MCP configurations
|
||||
|
||||
RECOMMENDED (Usually backup):
|
||||
✓ ~/.claude/contexts/ # Saved contexts
|
||||
✓ ~/.claude/templates/ # Templates
|
||||
✓ Project .claude/ folders # Project configs
|
||||
|
||||
OPTIONAL (Case by case):
|
||||
○ ~/.claude/settings.local.json # Machine-specific
|
||||
○ Cache directories # Can be rebuilt
|
||||
○ Log files # Usually not needed
|
||||
```
|
||||
|
||||
## Quick Backup Commands
|
||||
|
||||
### Full Backup
|
||||
|
||||
```bash
|
||||
# Create timestamped backup
|
||||
BACKUP_DIR="$HOME/clawdbot-backups"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="clawdbot_backup_$TIMESTAMP"
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
tar -czvf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" \
|
||||
-C "$HOME" \
|
||||
.claude/skills \
|
||||
.claude/commands \
|
||||
.claude/settings.json \
|
||||
.claude/mcp \
|
||||
.claude/contexts \
|
||||
.claude/templates \
|
||||
2>/dev/null
|
||||
|
||||
echo "Backup created: $BACKUP_DIR/$BACKUP_NAME.tar.gz"
|
||||
```
|
||||
|
||||
### Quick Skills-Only Backup
|
||||
|
||||
```bash
|
||||
# Backup just skills
|
||||
tar -czvf ~/clawdbot_skills_$(date +%Y%m%d).tar.gz \
|
||||
-C "$HOME" .claude/skills .claude/commands
|
||||
```
|
||||
|
||||
### Restore from Backup
|
||||
|
||||
```bash
|
||||
# Restore full backup
|
||||
BACKUP_FILE="$HOME/clawdbot-backups/clawdbot_backup_20260129.tar.gz"
|
||||
|
||||
# Preview contents first
|
||||
tar -tzvf "$BACKUP_FILE"
|
||||
|
||||
# Restore (will overwrite existing)
|
||||
tar -xzvf "$BACKUP_FILE" -C "$HOME"
|
||||
|
||||
echo "Restore complete!"
|
||||
```
|
||||
|
||||
## Backup Script
|
||||
|
||||
### Full-Featured Backup Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# clawdbot-backup.sh - Comprehensive ClawdBot backup tool
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
BACKUP_ROOT="${CLAWDBOT_BACKUP_DIR:-$HOME/clawdbot-backups}"
|
||||
CLAUDE_DIR="$HOME/.claude"
|
||||
MAX_BACKUPS=10 # Keep last N backups
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
|
||||
# Check if ClawdBot directory exists
|
||||
check_claude_dir() {
|
||||
if [ ! -d "$CLAUDE_DIR" ]; then
|
||||
log_error "ClawdBot directory not found: $CLAUDE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Create backup
|
||||
create_backup() {
|
||||
local backup_type="${1:-full}"
|
||||
local backup_name="clawdbot_${backup_type}_${TIMESTAMP}"
|
||||
local backup_path="$BACKUP_ROOT/$backup_name.tar.gz"
|
||||
|
||||
mkdir -p "$BACKUP_ROOT"
|
||||
|
||||
log_info "Creating $backup_type backup..."
|
||||
|
||||
case $backup_type in
|
||||
full)
|
||||
tar -czvf "$backup_path" \
|
||||
-C "$HOME" \
|
||||
.claude/skills \
|
||||
.claude/commands \
|
||||
.claude/settings.json \
|
||||
.claude/settings.local.json \
|
||||
.claude/projects.json \
|
||||
.claude/mcp \
|
||||
.claude/contexts \
|
||||
.claude/templates \
|
||||
2>/dev/null || true
|
||||
;;
|
||||
skills)
|
||||
tar -czvf "$backup_path" \
|
||||
-C "$HOME" \
|
||||
.claude/skills \
|
||||
.claude/commands \
|
||||
2>/dev/null || true
|
||||
;;
|
||||
settings)
|
||||
tar -czvf "$backup_path" \
|
||||
-C "$HOME" \
|
||||
.claude/settings.json \
|
||||
.claude/settings.local.json \
|
||||
.claude/mcp \
|
||||
2>/dev/null || true
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown backup type: $backup_type"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -f "$backup_path" ]; then
|
||||
local size=$(du -h "$backup_path" | cut -f1)
|
||||
log_info "Backup created: $backup_path ($size)"
|
||||
else
|
||||
log_error "Backup failed!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# List backups
|
||||
list_backups() {
|
||||
log_info "Available backups in $BACKUP_ROOT:"
|
||||
echo ""
|
||||
|
||||
if [ -d "$BACKUP_ROOT" ]; then
|
||||
ls -lh "$BACKUP_ROOT"/*.tar.gz 2>/dev/null | \
|
||||
awk '{print $9, $5, $6, $7, $8}' || \
|
||||
echo "No backups found."
|
||||
else
|
||||
echo "Backup directory doesn't exist."
|
||||
fi
|
||||
}
|
||||
|
||||
# Restore backup
|
||||
restore_backup() {
|
||||
local backup_file="$1"
|
||||
|
||||
if [ -z "$backup_file" ]; then
|
||||
log_error "Please specify backup file"
|
||||
list_backups
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$backup_file" ]; then
|
||||
# Try relative path in backup dir
|
||||
backup_file="$BACKUP_ROOT/$backup_file"
|
||||
fi
|
||||
|
||||
if [ ! -f "$backup_file" ]; then
|
||||
log_error "Backup file not found: $backup_file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_warn "This will overwrite existing configuration!"
|
||||
read -p "Continue? (y/N) " confirm
|
||||
|
||||
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
|
||||
log_info "Restore cancelled."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
log_info "Restoring from: $backup_file"
|
||||
tar -xzvf "$backup_file" -C "$HOME"
|
||||
log_info "Restore complete!"
|
||||
}
|
||||
|
||||
# Clean old backups
|
||||
cleanup_backups() {
|
||||
log_info "Cleaning old backups (keeping last $MAX_BACKUPS)..."
|
||||
|
||||
cd "$BACKUP_ROOT" 2>/dev/null || return
|
||||
|
||||
local count=$(ls -1 *.tar.gz 2>/dev/null | wc -l)
|
||||
|
||||
if [ "$count" -gt "$MAX_BACKUPS" ]; then
|
||||
local to_delete=$((count - MAX_BACKUPS))
|
||||
ls -1t *.tar.gz | tail -n "$to_delete" | xargs rm -v
|
||||
log_info "Removed $to_delete old backup(s)"
|
||||
else
|
||||
log_info "No cleanup needed ($count backups)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Show backup stats
|
||||
show_stats() {
|
||||
log_info "ClawdBot Backup Statistics"
|
||||
echo ""
|
||||
|
||||
echo "=== Directory Sizes ==="
|
||||
du -sh "$CLAUDE_DIR"/skills 2>/dev/null || echo "Skills: N/A"
|
||||
du -sh "$CLAUDE_DIR"/commands 2>/dev/null || echo "Commands: N/A"
|
||||
du -sh "$CLAUDE_DIR"/mcp 2>/dev/null || echo "MCP: N/A"
|
||||
du -sh "$CLAUDE_DIR" 2>/dev/null || echo "Total: N/A"
|
||||
|
||||
echo ""
|
||||
echo "=== Skills Count ==="
|
||||
find "$CLAUDE_DIR/skills" -name "SKILL.md" 2>/dev/null | wc -l | xargs echo "Skills:"
|
||||
find "$CLAUDE_DIR/commands" -name "*.md" 2>/dev/null | wc -l | xargs echo "Commands:"
|
||||
|
||||
echo ""
|
||||
echo "=== Backup Directory ==="
|
||||
if [ -d "$BACKUP_ROOT" ]; then
|
||||
du -sh "$BACKUP_ROOT"
|
||||
ls -1 "$BACKUP_ROOT"/*.tar.gz 2>/dev/null | wc -l | xargs echo "Backup files:"
|
||||
else
|
||||
echo "No backups yet"
|
||||
fi
|
||||
}
|
||||
|
||||
# Usage
|
||||
usage() {
|
||||
cat << EOF
|
||||
ClawdBot Backup Tool
|
||||
|
||||
Usage: $(basename $0) <command> [options]
|
||||
|
||||
Commands:
|
||||
backup [type] Create backup (types: full, skills, settings)
|
||||
restore <file> Restore from backup file
|
||||
list List available backups
|
||||
cleanup Remove old backups (keep last $MAX_BACKUPS)
|
||||
stats Show backup statistics
|
||||
help Show this help
|
||||
|
||||
Examples:
|
||||
$(basename $0) backup # Full backup
|
||||
$(basename $0) backup skills # Skills only
|
||||
$(basename $0) restore latest.tar.gz
|
||||
$(basename $0) list
|
||||
$(basename $0) cleanup
|
||||
|
||||
Environment:
|
||||
CLAWDBOT_BACKUP_DIR Backup directory (default: ~/clawdbot-backups)
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Main
|
||||
main() {
|
||||
check_claude_dir
|
||||
|
||||
case "${1:-help}" in
|
||||
backup)
|
||||
create_backup "${2:-full}"
|
||||
;;
|
||||
restore)
|
||||
restore_backup "$2"
|
||||
;;
|
||||
list)
|
||||
list_backups
|
||||
;;
|
||||
cleanup)
|
||||
cleanup_backups
|
||||
;;
|
||||
stats)
|
||||
show_stats
|
||||
;;
|
||||
help|--help|-h)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown command: $1"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
```
|
||||
|
||||
### Save and Use
|
||||
|
||||
```bash
|
||||
# Save script
|
||||
cat > ~/.local/bin/clawdbot-backup << 'SCRIPT'
|
||||
# Paste script content here
|
||||
SCRIPT
|
||||
|
||||
chmod +x ~/.local/bin/clawdbot-backup
|
||||
|
||||
# Usage
|
||||
clawdbot-backup backup # Full backup
|
||||
clawdbot-backup backup skills # Skills only
|
||||
clawdbot-backup list # List backups
|
||||
clawdbot-backup restore <file> # Restore
|
||||
```
|
||||
|
||||
## Git Version Control
|
||||
|
||||
### Initialize Git Repo
|
||||
|
||||
```bash
|
||||
cd ~/.claude
|
||||
|
||||
# Initialize git
|
||||
git init
|
||||
|
||||
# Create .gitignore
|
||||
cat > .gitignore << 'EOF'
|
||||
# Machine-specific settings
|
||||
settings.local.json
|
||||
|
||||
# Cache and temp files
|
||||
cache/
|
||||
*.tmp
|
||||
*.log
|
||||
|
||||
# Large files
|
||||
*.tar.gz
|
||||
*.zip
|
||||
|
||||
# Sensitive data (if any)
|
||||
*.pem
|
||||
*.key
|
||||
credentials/
|
||||
EOF
|
||||
|
||||
# Initial commit
|
||||
git add .
|
||||
git commit -m "Initial ClawdBot configuration backup"
|
||||
```
|
||||
|
||||
### Push to Remote
|
||||
|
||||
```bash
|
||||
# Add remote (GitHub, GitLab, etc)
|
||||
git remote add origin git@github.com:username/clawdbot-config.git
|
||||
|
||||
# Push
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
### Daily Workflow
|
||||
|
||||
```bash
|
||||
# After making changes to skills/settings
|
||||
cd ~/.claude
|
||||
git add .
|
||||
git commit -m "Updated skill: trading-bot"
|
||||
git push
|
||||
```
|
||||
|
||||
### Auto-Commit Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# auto-commit-claude.sh - Auto commit changes
|
||||
|
||||
cd ~/.claude || exit 1
|
||||
|
||||
# Check for changes
|
||||
if git diff --quiet && git diff --staged --quiet; then
|
||||
echo "No changes to commit"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get changed files for commit message
|
||||
CHANGED=$(git status --short | head -5 | awk '{print $2}' | tr '\n' ', ')
|
||||
|
||||
git add .
|
||||
git commit -m "Auto-backup: $CHANGED ($(date +%Y-%m-%d))"
|
||||
git push 2>/dev/null || echo "Push failed (offline?)"
|
||||
```
|
||||
|
||||
## Sync Between Devices
|
||||
|
||||
### Method 1: Git Sync
|
||||
|
||||
```bash
|
||||
# On new device
|
||||
git clone git@github.com:username/clawdbot-config.git ~/.claude
|
||||
|
||||
# Pull latest changes
|
||||
cd ~/.claude && git pull
|
||||
|
||||
# Push local changes
|
||||
cd ~/.claude && git add . && git commit -m "Update" && git push
|
||||
```
|
||||
|
||||
### Method 2: Rsync
|
||||
|
||||
```bash
|
||||
# Sync to remote server
|
||||
rsync -avz --delete \
|
||||
~/.claude/ \
|
||||
user@server:~/clawdbot-backup/
|
||||
|
||||
# Sync from remote server
|
||||
rsync -avz --delete \
|
||||
user@server:~/clawdbot-backup/ \
|
||||
~/.claude/
|
||||
```
|
||||
|
||||
### Method 3: Cloud Storage
|
||||
|
||||
```bash
|
||||
# Backup to cloud folder (Dropbox, Google Drive, etc)
|
||||
CLOUD_DIR="$HOME/Dropbox/ClawdBot"
|
||||
|
||||
# Sync skills
|
||||
rsync -avz ~/.claude/skills/ "$CLOUD_DIR/skills/"
|
||||
rsync -avz ~/.claude/commands/ "$CLOUD_DIR/commands/"
|
||||
|
||||
# Copy settings
|
||||
cp ~/.claude/settings.json "$CLOUD_DIR/"
|
||||
```
|
||||
|
||||
### Sync Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# sync-clawdbot.sh - Sync ClawdBot config between devices
|
||||
|
||||
SYNC_DIR="${CLAWDBOT_SYNC_DIR:-$HOME/Dropbox/ClawdBot}"
|
||||
CLAUDE_DIR="$HOME/.claude"
|
||||
|
||||
sync_to_cloud() {
|
||||
echo "Syncing to cloud..."
|
||||
mkdir -p "$SYNC_DIR"
|
||||
|
||||
rsync -avz --delete "$CLAUDE_DIR/skills/" "$SYNC_DIR/skills/"
|
||||
rsync -avz --delete "$CLAUDE_DIR/commands/" "$SYNC_DIR/commands/"
|
||||
rsync -avz "$CLAUDE_DIR/mcp/" "$SYNC_DIR/mcp/" 2>/dev/null
|
||||
cp "$CLAUDE_DIR/settings.json" "$SYNC_DIR/" 2>/dev/null
|
||||
|
||||
echo "Sync complete!"
|
||||
}
|
||||
|
||||
sync_from_cloud() {
|
||||
echo "Syncing from cloud..."
|
||||
|
||||
rsync -avz "$SYNC_DIR/skills/" "$CLAUDE_DIR/skills/"
|
||||
rsync -avz "$SYNC_DIR/commands/" "$CLAUDE_DIR/commands/"
|
||||
rsync -avz "$SYNC_DIR/mcp/" "$CLAUDE_DIR/mcp/" 2>/dev/null
|
||||
|
||||
# Don't overwrite local settings by default
|
||||
if [ ! -f "$CLAUDE_DIR/settings.json" ]; then
|
||||
cp "$SYNC_DIR/settings.json" "$CLAUDE_DIR/" 2>/dev/null
|
||||
fi
|
||||
|
||||
echo "Sync complete!"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
push) sync_to_cloud ;;
|
||||
pull) sync_from_cloud ;;
|
||||
*)
|
||||
echo "Usage: $0 {push|pull}"
|
||||
echo " push - Upload local config to cloud"
|
||||
echo " pull - Download cloud config to local"
|
||||
;;
|
||||
esac
|
||||
```
|
||||
|
||||
## Automated Backups
|
||||
|
||||
### Cron Job (Linux/Mac)
|
||||
|
||||
```bash
|
||||
# Edit crontab
|
||||
crontab -e
|
||||
|
||||
# Add daily backup at 2 AM
|
||||
0 2 * * * /home/user/.local/bin/clawdbot-backup backup full
|
||||
|
||||
# Add weekly cleanup on Sundays
|
||||
0 3 * * 0 /home/user/.local/bin/clawdbot-backup cleanup
|
||||
|
||||
# Add git auto-commit every 6 hours
|
||||
0 */6 * * * cd ~/.claude && git add . && git commit -m "Auto-backup $(date +\%Y-\%m-\%d)" && git push 2>/dev/null
|
||||
```
|
||||
|
||||
### Systemd Timer (Linux)
|
||||
|
||||
```bash
|
||||
# Create service: ~/.config/systemd/user/clawdbot-backup.service
|
||||
cat > ~/.config/systemd/user/clawdbot-backup.service << 'EOF'
|
||||
[Unit]
|
||||
Description=ClawdBot Backup
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/home/user/.local/bin/clawdbot-backup backup full
|
||||
EOF
|
||||
|
||||
# Create timer: ~/.config/systemd/user/clawdbot-backup.timer
|
||||
cat > ~/.config/systemd/user/clawdbot-backup.timer << 'EOF'
|
||||
[Unit]
|
||||
Description=Daily ClawdBot Backup
|
||||
|
||||
[Timer]
|
||||
OnCalendar=daily
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
|
||||
# Enable
|
||||
systemctl --user enable clawdbot-backup.timer
|
||||
systemctl --user start clawdbot-backup.timer
|
||||
```
|
||||
|
||||
### Launchd (macOS)
|
||||
|
||||
```bash
|
||||
# Create plist: ~/Library/LaunchAgents/com.clawdbot.backup.plist
|
||||
cat > ~/Library/LaunchAgents/com.clawdbot.backup.plist << 'EOF'
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>com.clawdbot.backup</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/Users/username/.local/bin/clawdbot-backup</string>
|
||||
<string>backup</string>
|
||||
<string>full</string>
|
||||
</array>
|
||||
<key>StartCalendarInterval</key>
|
||||
<dict>
|
||||
<key>Hour</key>
|
||||
<integer>2</integer>
|
||||
<key>Minute</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# Load
|
||||
launchctl load ~/Library/LaunchAgents/com.clawdbot.backup.plist
|
||||
```
|
||||
|
||||
## Migration Guide
|
||||
|
||||
### Migrate to New Machine
|
||||
|
||||
```bash
|
||||
# === On OLD machine ===
|
||||
|
||||
# 1. Create full backup
|
||||
clawdbot-backup backup full
|
||||
|
||||
# 2. Copy backup file to new machine
|
||||
scp ~/clawdbot-backups/clawdbot_full_*.tar.gz newmachine:~/
|
||||
|
||||
# Or use git
|
||||
cd ~/.claude
|
||||
git add . && git commit -m "Pre-migration backup"
|
||||
git push
|
||||
|
||||
|
||||
# === On NEW machine ===
|
||||
|
||||
# Method A: From backup file
|
||||
tar -xzvf ~/clawdbot_full_*.tar.gz -C ~
|
||||
|
||||
# Method B: From git
|
||||
git clone git@github.com:username/clawdbot-config.git ~/.claude
|
||||
|
||||
# 3. Verify
|
||||
ls -la ~/.claude/skills/
|
||||
```
|
||||
|
||||
### Export Single Skill
|
||||
|
||||
```bash
|
||||
# Export one skill for sharing
|
||||
SKILL_NAME="my-awesome-skill"
|
||||
tar -czvf "${SKILL_NAME}.tar.gz" -C ~/.claude/skills "$SKILL_NAME"
|
||||
|
||||
# Import skill
|
||||
tar -xzvf "${SKILL_NAME}.tar.gz" -C ~/.claude/skills/
|
||||
```
|
||||
|
||||
### Export All Skills for Sharing
|
||||
|
||||
```bash
|
||||
# Create shareable skills bundle (no personal settings)
|
||||
tar -czvf clawdbot-skills-share.tar.gz \
|
||||
-C ~/.claude \
|
||||
skills \
|
||||
--exclude='*.local*' \
|
||||
--exclude='*personal*'
|
||||
```
|
||||
|
||||
## Backup Verification
|
||||
|
||||
### Verify Backup Integrity
|
||||
|
||||
```bash
|
||||
# Test backup without extracting
|
||||
tar -tzvf backup.tar.gz > /dev/null && echo "Backup OK" || echo "Backup CORRUPT"
|
||||
|
||||
# List contents
|
||||
tar -tzvf backup.tar.gz
|
||||
|
||||
# Verify specific file exists
|
||||
tar -tzvf backup.tar.gz | grep "skills/my-skill/SKILL.md"
|
||||
```
|
||||
|
||||
### Compare Backup to Current
|
||||
|
||||
```bash
|
||||
# Extract to temp dir
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
tar -xzf backup.tar.gz -C "$TEMP_DIR"
|
||||
|
||||
# Compare
|
||||
diff -rq ~/.claude/skills "$TEMP_DIR/.claude/skills"
|
||||
|
||||
# Cleanup
|
||||
rm -rf "$TEMP_DIR"
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
```bash
|
||||
# Issue: Permission denied
|
||||
chmod -R u+rw ~/.claude
|
||||
|
||||
# Issue: Backup too large
|
||||
# Exclude cache and logs
|
||||
tar --exclude='cache' --exclude='*.log' -czvf backup.tar.gz ~/.claude
|
||||
|
||||
# Issue: Restore overwrote settings
|
||||
# Keep settings.local.json for machine-specific config
|
||||
# It won't be overwritten if using proper backup
|
||||
|
||||
# Issue: Git conflicts after sync
|
||||
cd ~/.claude
|
||||
git stash
|
||||
git pull
|
||||
git stash pop
|
||||
# Resolve conflicts manually if needed
|
||||
```
|
||||
|
||||
### Recovery from Corruption
|
||||
|
||||
```bash
|
||||
# If ~/.claude is corrupted
|
||||
|
||||
# 1. Move corrupted dir
|
||||
mv ~/.claude ~/.claude.corrupted
|
||||
|
||||
# 2. Restore from backup
|
||||
clawdbot-backup restore latest.tar.gz
|
||||
|
||||
# 3. Or restore from git
|
||||
git clone git@github.com:username/clawdbot-config.git ~/.claude
|
||||
|
||||
# 4. Compare and recover anything missing
|
||||
diff -rq ~/.claude ~/.claude.corrupted/
|
||||
```
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### Essential Commands
|
||||
|
||||
```bash
|
||||
# Backup
|
||||
tar -czvf ~/clawdbot-backup.tar.gz -C ~ .claude/skills .claude/commands .claude/settings.json
|
||||
|
||||
# Restore
|
||||
tar -xzvf ~/clawdbot-backup.tar.gz -C ~
|
||||
|
||||
# List backup contents
|
||||
tar -tzvf ~/clawdbot-backup.tar.gz
|
||||
|
||||
# Git backup
|
||||
cd ~/.claude && git add . && git commit -m "Backup" && git push
|
||||
|
||||
# Git restore
|
||||
cd ~/.claude && git pull
|
||||
```
|
||||
|
||||
### Backup Checklist
|
||||
|
||||
```
|
||||
Before major changes:
|
||||
□ Create backup
|
||||
□ Verify backup integrity
|
||||
□ Note what you're changing
|
||||
|
||||
Regular maintenance:
|
||||
□ Weekly full backup
|
||||
□ Daily git commits (if using)
|
||||
□ Monthly cleanup of old backups
|
||||
□ Test restore procedure quarterly
|
||||
```
|
||||
|
||||
## Resources
|
||||
|
||||
### Related Skills
|
||||
```
|
||||
- skill-creator - Create new skills
|
||||
- mcp-builder - Configure MCP servers
|
||||
- dotfiles - General dotfile management
|
||||
```
|
||||
|
||||
### Documentation
|
||||
```
|
||||
- ClawdBot Docs: docs.clawdbot.com
|
||||
- Skills Guide: docs.clawdbot.com/skills
|
||||
- MCP Setup: docs.clawdbot.com/mcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Tip:** Always test your backup restoration process before you actually need it. A backup you can't restore is worthless!
|
||||
7
skills/clean-code/.clawdhub/origin.json
Normal file
7
skills/clean-code/.clawdhub/origin.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"registry": "https://clawdhub.com",
|
||||
"slug": "clean-code",
|
||||
"installedVersion": "1.0.0",
|
||||
"installedAt": 1769734456794
|
||||
}
|
||||
201
skills/clean-code/SKILL.md
Normal file
201
skills/clean-code/SKILL.md
Normal file
@@ -0,0 +1,201 @@
|
||||
---
|
||||
name: clean-code
|
||||
description: Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments
|
||||
allowed-tools: Read, Write, Edit
|
||||
version: 2.0
|
||||
priority: CRITICAL
|
||||
---
|
||||
|
||||
# Clean Code - Pragmatic AI Coding Standards
|
||||
|
||||
> **CRITICAL SKILL** - Be **concise, direct, and solution-focused**.
|
||||
|
||||
---
|
||||
|
||||
## Core Principles
|
||||
|
||||
| Principle | Rule |
|
||||
|-----------|------|
|
||||
| **SRP** | Single Responsibility - each function/class does ONE thing |
|
||||
| **DRY** | Don't Repeat Yourself - extract duplicates, reuse |
|
||||
| **KISS** | Keep It Simple - simplest solution that works |
|
||||
| **YAGNI** | You Aren't Gonna Need It - don't build unused features |
|
||||
| **Boy Scout** | Leave code cleaner than you found it |
|
||||
|
||||
---
|
||||
|
||||
## Naming Rules
|
||||
|
||||
| Element | Convention |
|
||||
|---------|------------|
|
||||
| **Variables** | Reveal intent: `userCount` not `n` |
|
||||
| **Functions** | Verb + noun: `getUserById()` not `user()` |
|
||||
| **Booleans** | Question form: `isActive`, `hasPermission`, `canEdit` |
|
||||
| **Constants** | SCREAMING_SNAKE: `MAX_RETRY_COUNT` |
|
||||
|
||||
> **Rule:** If you need a comment to explain a name, rename it.
|
||||
|
||||
---
|
||||
|
||||
## Function Rules
|
||||
|
||||
| Rule | Description |
|
||||
|------|-------------|
|
||||
| **Small** | Max 20 lines, ideally 5-10 |
|
||||
| **One Thing** | Does one thing, does it well |
|
||||
| **One Level** | One level of abstraction per function |
|
||||
| **Few Args** | Max 3 arguments, prefer 0-2 |
|
||||
| **No Side Effects** | Don't mutate inputs unexpectedly |
|
||||
|
||||
---
|
||||
|
||||
## Code Structure
|
||||
|
||||
| Pattern | Apply |
|
||||
|---------|-------|
|
||||
| **Guard Clauses** | Early returns for edge cases |
|
||||
| **Flat > Nested** | Avoid deep nesting (max 2 levels) |
|
||||
| **Composition** | Small functions composed together |
|
||||
| **Colocation** | Keep related code close |
|
||||
|
||||
---
|
||||
|
||||
## AI Coding Style
|
||||
|
||||
| Situation | Action |
|
||||
|-----------|--------|
|
||||
| User asks for feature | Write it directly |
|
||||
| User reports bug | Fix it, don't explain |
|
||||
| No clear requirement | Ask, don't assume |
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns (DON'T)
|
||||
|
||||
| ❌ Pattern | ✅ Fix |
|
||||
|-----------|-------|
|
||||
| Comment every line | Delete obvious comments |
|
||||
| Helper for one-liner | Inline the code |
|
||||
| Factory for 2 objects | Direct instantiation |
|
||||
| utils.ts with 1 function | Put code where used |
|
||||
| "First we import..." | Just write code |
|
||||
| Deep nesting | Guard clauses |
|
||||
| Magic numbers | Named constants |
|
||||
| God functions | Split by responsibility |
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Before Editing ANY File (THINK FIRST!)
|
||||
|
||||
**Before changing a file, ask yourself:**
|
||||
|
||||
| Question | Why |
|
||||
|----------|-----|
|
||||
| **What imports this file?** | They might break |
|
||||
| **What does this file import?** | Interface changes |
|
||||
| **What tests cover this?** | Tests might fail |
|
||||
| **Is this a shared component?** | Multiple places affected |
|
||||
|
||||
**Quick Check:**
|
||||
```
|
||||
File to edit: UserService.ts
|
||||
└── Who imports this? → UserController.ts, AuthController.ts
|
||||
└── Do they need changes too? → Check function signatures
|
||||
```
|
||||
|
||||
> 🔴 **Rule:** Edit the file + all dependent files in the SAME task.
|
||||
> 🔴 **Never leave broken imports or missing updates.**
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
| Do | Don't |
|
||||
|----|-------|
|
||||
| Write code directly | Write tutorials |
|
||||
| Let code self-document | Add obvious comments |
|
||||
| Fix bugs immediately | Explain the fix first |
|
||||
| Inline small things | Create unnecessary files |
|
||||
| Name things clearly | Use abbreviations |
|
||||
| Keep functions small | Write 100+ line functions |
|
||||
|
||||
> **Remember: The user wants working code, not a programming lesson.**
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Self-Check Before Completing (MANDATORY)
|
||||
|
||||
**Before saying "task complete", verify:**
|
||||
|
||||
| Check | Question |
|
||||
|-------|----------|
|
||||
| ✅ **Goal met?** | Did I do exactly what user asked? |
|
||||
| ✅ **Files edited?** | Did I modify all necessary files? |
|
||||
| ✅ **Code works?** | Did I test/verify the change? |
|
||||
| ✅ **No errors?** | Lint and TypeScript pass? |
|
||||
| ✅ **Nothing forgotten?** | Any edge cases missed? |
|
||||
|
||||
> 🔴 **Rule:** If ANY check fails, fix it before completing.
|
||||
|
||||
---
|
||||
|
||||
## Verification Scripts (MANDATORY)
|
||||
|
||||
> 🔴 **CRITICAL:** Each agent runs ONLY their own skill's scripts after completing work.
|
||||
|
||||
### Agent → Script Mapping
|
||||
|
||||
| Agent | Script | Command |
|
||||
|-------|--------|---------|
|
||||
| **frontend-specialist** | UX Audit | `python .agent/skills/frontend-design/scripts/ux_audit.py .` |
|
||||
| **frontend-specialist** | A11y Check | `python .agent/skills/frontend-design/scripts/accessibility_checker.py .` |
|
||||
| **backend-specialist** | API Validator | `python .agent/skills/api-patterns/scripts/api_validator.py .` |
|
||||
| **mobile-developer** | Mobile Audit | `python .agent/skills/mobile-design/scripts/mobile_audit.py .` |
|
||||
| **database-architect** | Schema Validate | `python .agent/skills/database-design/scripts/schema_validator.py .` |
|
||||
| **security-auditor** | Security Scan | `python .agent/skills/vulnerability-scanner/scripts/security_scan.py .` |
|
||||
| **seo-specialist** | SEO Check | `python .agent/skills/seo-fundamentals/scripts/seo_checker.py .` |
|
||||
| **seo-specialist** | GEO Check | `python .agent/skills/geo-fundamentals/scripts/geo_checker.py .` |
|
||||
| **performance-optimizer** | Lighthouse | `python .agent/skills/performance-profiling/scripts/lighthouse_audit.py <url>` |
|
||||
| **test-engineer** | Test Runner | `python .agent/skills/testing-patterns/scripts/test_runner.py .` |
|
||||
| **test-engineer** | Playwright | `python .agent/skills/webapp-testing/scripts/playwright_runner.py <url>` |
|
||||
| **Any agent** | Lint Check | `python .agent/skills/lint-and-validate/scripts/lint_runner.py .` |
|
||||
| **Any agent** | Type Coverage | `python .agent/skills/lint-and-validate/scripts/type_coverage.py .` |
|
||||
| **Any agent** | i18n Check | `python .agent/skills/i18n-localization/scripts/i18n_checker.py .` |
|
||||
|
||||
> ❌ **WRONG:** `test-engineer` running `ux_audit.py`
|
||||
> ✅ **CORRECT:** `frontend-specialist` running `ux_audit.py`
|
||||
|
||||
---
|
||||
|
||||
### 🔴 Script Output Handling (READ → SUMMARIZE → ASK)
|
||||
|
||||
**When running a validation script, you MUST:**
|
||||
|
||||
1. **Run the script** and capture ALL output
|
||||
2. **Parse the output** - identify errors, warnings, and passes
|
||||
3. **Summarize to user** in this format:
|
||||
|
||||
```markdown
|
||||
## Script Results: [script_name.py]
|
||||
|
||||
### ❌ Errors Found (X items)
|
||||
- [File:Line] Error description 1
|
||||
- [File:Line] Error description 2
|
||||
|
||||
### ⚠️ Warnings (Y items)
|
||||
- [File:Line] Warning description
|
||||
|
||||
### ✅ Passed (Z items)
|
||||
- Check 1 passed
|
||||
- Check 2 passed
|
||||
|
||||
**Should I fix the X errors?**
|
||||
```
|
||||
|
||||
4. **Wait for user confirmation** before fixing
|
||||
5. **After fixing** → Re-run script to confirm
|
||||
|
||||
> 🔴 **VIOLATION:** Running script and ignoring output = FAILED task.
|
||||
> 🔴 **VIOLATION:** Auto-fixing without asking = Not allowed.
|
||||
> 🔴 **Rule:** Always READ output → SUMMARIZE → ASK → then fix.
|
||||
|
||||
7
skills/coding-agent/.clawdhub/origin.json
Normal file
7
skills/coding-agent/.clawdhub/origin.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"registry": "https://clawdhub.com",
|
||||
"slug": "coding-agent",
|
||||
"installedVersion": "1.0.1",
|
||||
"installedAt": 1769734439160
|
||||
}
|
||||
274
skills/coding-agent/SKILL.md
Normal file
274
skills/coding-agent/SKILL.md
Normal file
@@ -0,0 +1,274 @@
|
||||
---
|
||||
name: coding-agent
|
||||
description: Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.
|
||||
metadata: {"clawdbot":{"emoji":"🧩","requires":{"anyBins":["claude","codex","opencode","pi"]}}}
|
||||
---
|
||||
|
||||
# Coding Agent (background-first)
|
||||
|
||||
Use **bash background mode** for non-interactive coding work. For interactive coding sessions, use the **tmux** skill (always, except very simple one-shot prompts).
|
||||
|
||||
## The Pattern: workdir + background
|
||||
|
||||
```bash
|
||||
# Create temp space for chats/scratch work
|
||||
SCRATCH=$(mktemp -d)
|
||||
|
||||
# Start agent in target directory ("little box" - only sees relevant files)
|
||||
bash workdir:$SCRATCH background:true command:"<agent command>"
|
||||
# Or for project work:
|
||||
bash workdir:~/project/folder background:true command:"<agent command>"
|
||||
# Returns sessionId for tracking
|
||||
|
||||
# Monitor progress
|
||||
process action:log sessionId:XXX
|
||||
|
||||
# Check if done
|
||||
process action:poll sessionId:XXX
|
||||
|
||||
# Send input (if agent asks a question)
|
||||
process action:write sessionId:XXX data:"y"
|
||||
|
||||
# Kill if needed
|
||||
process action:kill sessionId:XXX
|
||||
```
|
||||
|
||||
**Why workdir matters:** Agent wakes up in a focused directory, doesn't wander off reading unrelated files (like your soul.md 😅).
|
||||
|
||||
---
|
||||
|
||||
## Codex CLI
|
||||
|
||||
**Model:** `gpt-5.2-codex` is the default (set in ~/.codex/config.toml)
|
||||
|
||||
### Building/Creating (use --full-auto or --yolo)
|
||||
```bash
|
||||
# --full-auto: sandboxed but auto-approves in workspace
|
||||
bash workdir:~/project background:true command:"codex exec --full-auto \"Build a snake game with dark theme\""
|
||||
|
||||
# --yolo: NO sandbox, NO approvals (fastest, most dangerous)
|
||||
bash workdir:~/project background:true command:"codex --yolo \"Build a snake game with dark theme\""
|
||||
|
||||
# Note: --yolo is a shortcut for --dangerously-bypass-approvals-and-sandbox
|
||||
```
|
||||
|
||||
### Reviewing PRs (vanilla, no flags)
|
||||
|
||||
**⚠️ CRITICAL: Never review PRs in Clawdbot's own project folder!**
|
||||
- Either use the project where the PR is submitted (if it's NOT ~/Projects/clawdbot)
|
||||
- Or clone to a temp folder first
|
||||
|
||||
```bash
|
||||
# Option 1: Review in the actual project (if NOT clawdbot)
|
||||
bash workdir:~/Projects/some-other-repo background:true command:"codex review --base main"
|
||||
|
||||
# Option 2: Clone to temp folder for safe review (REQUIRED for clawdbot PRs!)
|
||||
REVIEW_DIR=$(mktemp -d)
|
||||
git clone https://github.com/clawdbot/clawdbot.git $REVIEW_DIR
|
||||
cd $REVIEW_DIR && gh pr checkout 130
|
||||
bash workdir:$REVIEW_DIR background:true command:"codex review --base origin/main"
|
||||
# Clean up after: rm -rf $REVIEW_DIR
|
||||
|
||||
# Option 3: Use git worktree (keeps main intact)
|
||||
git worktree add /tmp/pr-130-review pr-130-branch
|
||||
bash workdir:/tmp/pr-130-review background:true command:"codex review --base main"
|
||||
```
|
||||
|
||||
**Why?** Checking out branches in the running Clawdbot repo can break the live instance!
|
||||
|
||||
### Batch PR Reviews (parallel army!)
|
||||
```bash
|
||||
# Fetch all PR refs first
|
||||
git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'
|
||||
|
||||
# Deploy the army - one Codex per PR!
|
||||
bash workdir:~/project background:true command:"codex exec \"Review PR #86. git diff origin/main...origin/pr/86\""
|
||||
bash workdir:~/project background:true command:"codex exec \"Review PR #87. git diff origin/main...origin/pr/87\""
|
||||
bash workdir:~/project background:true command:"codex exec \"Review PR #95. git diff origin/main...origin/pr/95\""
|
||||
# ... repeat for all PRs
|
||||
|
||||
# Monitor all
|
||||
process action:list
|
||||
|
||||
# Get results and post to GitHub
|
||||
process action:log sessionId:XXX
|
||||
gh pr comment <PR#> --body "<review content>"
|
||||
```
|
||||
|
||||
### Tips for PR Reviews
|
||||
- **Fetch refs first:** `git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'`
|
||||
- **Use git diff:** Tell Codex to use `git diff origin/main...origin/pr/XX`
|
||||
- **Don't checkout:** Multiple parallel reviews = don't let them change branches
|
||||
- **Post results:** Use `gh pr comment` to post reviews to GitHub
|
||||
|
||||
---
|
||||
|
||||
## Claude Code
|
||||
|
||||
```bash
|
||||
bash workdir:~/project background:true command:"claude \"Your task\""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## OpenCode
|
||||
|
||||
```bash
|
||||
bash workdir:~/project background:true command:"opencode run \"Your task\""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Pi Coding Agent
|
||||
|
||||
```bash
|
||||
# Install: npm install -g @mariozechner/pi-coding-agent
|
||||
bash workdir:~/project background:true command:"pi \"Your task\""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Pi flags (common)
|
||||
|
||||
- `--print` / `-p`: non-interactive; runs prompt and exits.
|
||||
- `--provider <name>`: pick provider (default: google).
|
||||
- `--model <id>`: pick model (default: gemini-2.5-flash).
|
||||
- `--api-key <key>`: override API key (defaults to env vars).
|
||||
|
||||
Examples:
|
||||
|
||||
```bash
|
||||
# Set provider + model, non-interactive
|
||||
bash workdir:~/project background:true command:"pi --provider openai --model gpt-4o-mini -p \"Summarize src/\""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## tmux (interactive sessions)
|
||||
|
||||
Use the tmux skill for interactive coding sessions (always, except very simple one-shot prompts). Prefer bash background mode for non-interactive runs.
|
||||
|
||||
---
|
||||
|
||||
## Parallel Issue Fixing with git worktrees + tmux
|
||||
|
||||
For fixing multiple issues in parallel, use git worktrees (isolated branches) + tmux sessions:
|
||||
|
||||
```bash
|
||||
# 1. Clone repo to temp location
|
||||
cd /tmp && git clone git@github.com:user/repo.git repo-worktrees
|
||||
cd repo-worktrees
|
||||
|
||||
# 2. Create worktrees for each issue (isolated branches!)
|
||||
git worktree add -b fix/issue-78 /tmp/issue-78 main
|
||||
git worktree add -b fix/issue-99 /tmp/issue-99 main
|
||||
|
||||
# 3. Set up tmux sessions
|
||||
SOCKET="${TMPDIR:-/tmp}/codex-fixes.sock"
|
||||
tmux -S "$SOCKET" new-session -d -s fix-78
|
||||
tmux -S "$SOCKET" new-session -d -s fix-99
|
||||
|
||||
# 4. Launch Codex in each (after pnpm install!)
|
||||
tmux -S "$SOCKET" send-keys -t fix-78 "cd /tmp/issue-78 && pnpm install && codex --yolo 'Fix issue #78: <description>. Commit and push.'" Enter
|
||||
tmux -S "$SOCKET" send-keys -t fix-99 "cd /tmp/issue-99 && pnpm install && codex --yolo 'Fix issue #99: <description>. Commit and push.'" Enter
|
||||
|
||||
# 5. Monitor progress
|
||||
tmux -S "$SOCKET" capture-pane -p -t fix-78 -S -30
|
||||
tmux -S "$SOCKET" capture-pane -p -t fix-99 -S -30
|
||||
|
||||
# 6. Check if done (prompt returned)
|
||||
tmux -S "$SOCKET" capture-pane -p -t fix-78 -S -3 | grep -q "❯" && echo "Done!"
|
||||
|
||||
# 7. Create PRs after fixes
|
||||
cd /tmp/issue-78 && git push -u origin fix/issue-78
|
||||
gh pr create --repo user/repo --head fix/issue-78 --title "fix: ..." --body "..."
|
||||
|
||||
# 8. Cleanup
|
||||
tmux -S "$SOCKET" kill-server
|
||||
git worktree remove /tmp/issue-78
|
||||
git worktree remove /tmp/issue-99
|
||||
```
|
||||
|
||||
**Why worktrees?** Each Codex works in isolated branch, no conflicts. Can run 5+ parallel fixes!
|
||||
|
||||
**Why tmux over bash background?** Codex is interactive — needs TTY for proper output. tmux provides persistent sessions with full history capture.
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Rules
|
||||
|
||||
1. **Respect tool choice** — if user asks for Codex, use Codex. NEVER offer to build it yourself!
|
||||
2. **Be patient** — don't kill sessions because they're "slow"
|
||||
3. **Monitor with process:log** — check progress without interfering
|
||||
4. **--full-auto for building** — auto-approves changes
|
||||
5. **vanilla for reviewing** — no special flags needed
|
||||
6. **Parallel is OK** — run many Codex processes at once for batch work
|
||||
7. **NEVER start Codex in ~/clawd/** — it'll read your soul docs and get weird ideas about the org chart! Use the target project dir or /tmp for blank slate chats
|
||||
8. **NEVER checkout branches in ~/Projects/clawdbot/** — that's the LIVE Clawdbot instance! Clone to /tmp or use git worktree for PR reviews
|
||||
|
||||
---
|
||||
|
||||
## PR Template (The Razor Standard)
|
||||
|
||||
When submitting PRs to external repos, use this format for quality & maintainer-friendliness:
|
||||
|
||||
````markdown
|
||||
## Original Prompt
|
||||
[Exact request/problem statement]
|
||||
|
||||
## What this does
|
||||
[High-level description]
|
||||
|
||||
**Features:**
|
||||
- [Key feature 1]
|
||||
- [Key feature 2]
|
||||
|
||||
**Example usage:**
|
||||
```bash
|
||||
# Example
|
||||
command example
|
||||
```
|
||||
|
||||
## Feature intent (maintainer-friendly)
|
||||
[Why useful, how it fits, workflows it enables]
|
||||
|
||||
## Prompt history (timestamped)
|
||||
- YYYY-MM-DD HH:MM UTC: [Step 1]
|
||||
- YYYY-MM-DD HH:MM UTC: [Step 2]
|
||||
|
||||
## How I tested
|
||||
**Manual verification:**
|
||||
1. [Test step] - Output: `[result]`
|
||||
2. [Test step] - Result: [result]
|
||||
|
||||
**Files tested:**
|
||||
- [Detail]
|
||||
- [Edge cases]
|
||||
|
||||
## Session logs (implementation)
|
||||
- [What was researched]
|
||||
- [What was discovered]
|
||||
- [Time spent]
|
||||
|
||||
## Implementation details
|
||||
**New files:**
|
||||
- `path/file.ts` - [description]
|
||||
|
||||
**Modified files:**
|
||||
- `path/file.ts` - [change]
|
||||
|
||||
**Technical notes:**
|
||||
- [Detail 1]
|
||||
- [Detail 2]
|
||||
|
||||
---
|
||||
*Submitted by Razor 🥷 - Mariano's AI agent*
|
||||
````
|
||||
|
||||
**Key principles:**
|
||||
1. Human-written description (no AI slop)
|
||||
2. Feature intent for maintainers
|
||||
3. Timestamped prompt history
|
||||
4. Session logs if using Codex/agent
|
||||
|
||||
**Example:** https://github.com/steipete/bird/pull/22
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user