AI Newsletter Digest improvements: fixed QP soft line break decoding, URL extraction, and content cleaning

This commit is contained in:
Krilly
2026-03-04 13:29:22 +00:00
parent 29a98137a7
commit 57dd294675
13706 changed files with 2114953 additions and 237629 deletions

View File

@@ -90,6 +90,7 @@ Content-Type: application/json
"data": {
"content": "Task description",
"format": "plaintext",
"deadline_at": null,
"assignees": [],
"linked_records": []
}
@@ -106,14 +107,182 @@ GET /attio/v2/workspace_members
GET /attio/v2/self
```
## Notes
### Notes
#### List Notes
```bash
GET /attio/v2/notes?limit=50&parent_object={object}&parent_record_id={record_id}
```
#### Get Note
```bash
GET /attio/v2/notes/{note_id}
```
#### Create Note
```bash
POST /attio/v2/notes
Content-Type: application/json
{
"data": {
"format": "plaintext",
"title": "Meeting Summary",
"content": "Note content here",
"parent_object": "companies",
"parent_record_id": "{record_id}",
"created_by_actor": {
"type": "workspace-member",
"id": "{workspace_member_id}"
}
}
}
```
#### Delete Note
```bash
DELETE /attio/v2/notes/{note_id}
```
### Comments
#### Create Comment on Record
```bash
POST /attio/v2/comments
Content-Type: application/json
{
"data": {
"format": "plaintext",
"content": "Comment text",
"author": {
"type": "workspace-member",
"id": "{workspace_member_id}"
},
"record": {
"object": "companies",
"record_id": "{record_id}"
}
}
}
```
#### Reply to Comment Thread
```bash
POST /attio/v2/comments
Content-Type: application/json
{
"data": {
"format": "plaintext",
"content": "This is a reply",
"author": {
"type": "workspace-member",
"id": "{workspace_member_id}"
},
"thread_id": "{thread_id}"
}
}
```
### Lists
#### List All Lists
```bash
GET /attio/v2/lists
```
#### Get List
```bash
GET /attio/v2/lists/{list_id}
```
### List Entries
#### Query List Entries
```bash
POST /attio/v2/lists/{list}/entries/query
Content-Type: application/json
{
"limit": 50,
"offset": 0
}
```
#### Create List Entry
```bash
POST /attio/v2/lists/{list}/entries
Content-Type: application/json
{
"data": {
"parent_record_id": "{record_id}",
"parent_object": "companies",
"entry_values": {}
}
}
```
#### Get List Entry
```bash
GET /attio/v2/lists/{list}/entries/{entry_id}
```
#### Update List Entry
```bash
PATCH /attio/v2/lists/{list}/entries/{entry_id}
Content-Type: application/json
{
"data": {
"entry_values": {
"status": "Active"
}
}
}
```
#### Delete List Entry
```bash
DELETE /attio/v2/lists/{list}/entries/{entry_id}
```
### Meetings
#### List Meetings
```bash
GET /attio/v2/meetings?limit=50
```
#### Get Meeting
```bash
GET /attio/v2/meetings/{meeting_id}
```
### Call Recordings
#### List Call Recordings for Meeting
```bash
GET /attio/v2/meetings/{meeting_id}/call_recordings?limit=50
```
#### Get Call Recording
```bash
GET /attio/v2/meetings/{meeting_id}/call_recordings/{call_recording_id}
```
## Usage Notes
- Object slugs are lowercase snake_case (e.g., `people`, `companies`)
- Record IDs are UUIDs
- For personal-name attributes, include `full_name` when creating records
- Task creation requires `format` and `assignees` fields
- Task creation requires `format`, `deadline_at`, `assignees`, and `linked_records` fields
- Note creation requires `format`, `content`, `parent_object`, and `parent_record_id`
- Comment creation requires `format`, `content`, `author`, plus one of `record`, `entry`, or `thread_id`
- Meetings use cursor-based pagination
- Rate limits: 100 read/sec, 25 write/sec
- Pagination uses `limit` and `offset` parameters
- Pagination uses `limit` and `offset` parameters (or `cursor` for meetings)
## Resources

View File

@@ -11,11 +11,9 @@
**Note:** Dropbox Business API uses POST for almost all endpoints, including read operations. Request bodies should be JSON (use `null` for endpoints with no parameters).
## Common Endpoints
## Team Information
### Team Information
#### Get Team Info
### Get Team Info
```bash
POST /dropbox-business/2/team/get_info
Content-Type: application/json
@@ -23,39 +21,72 @@ Content-Type: application/json
null
```
#### Get Team Features
### Get Team Features
```bash
POST /dropbox-business/2/team/features/get_values
Content-Type: application/json
{
"features": [{".tag": "upload_api_rate_limit"}]
"features": [
{".tag": "upload_api_rate_limit"},
{".tag": "has_team_shared_dropbox"},
{".tag": "has_team_file_events"},
{".tag": "has_team_selective_sync"}
]
}
```
### Team Members
### Get Authenticated Admin
```bash
POST /dropbox-business/2/team/token/get_authenticated_admin
Content-Type: application/json
#### List Members
null
```
## Team Members
### List Members
```bash
POST /dropbox-business/2/team/members/list
Content-Type: application/json
{
"limit": 100
}
{"limit": 100}
```
#### Get Member Info
### List Members (V2) - Recommended
```bash
POST /dropbox-business/2/team/members/list_v2
Content-Type: application/json
{"limit": 100, "include_removed": false}
```
### Continue Listing Members
```bash
POST /dropbox-business/2/team/members/list/continue
Content-Type: application/json
{"cursor": "..."}
```
### Get Member Info
```bash
POST /dropbox-business/2/team/members/get_info
Content-Type: application/json
{
"members": [{".tag": "email", "email": "user@company.com"}]
}
{"members": [{".tag": "email", "email": "user@company.com"}]}
```
#### Add Member
### Get Member Info (V2) - Recommended
```bash
POST /dropbox-business/2/team/members/get_info_v2
Content-Type: application/json
{"members": [{".tag": "email", "email": "user@company.com"}]}
```
### Add Member
```bash
POST /dropbox-business/2/team/members/add
Content-Type: application/json
@@ -64,24 +95,152 @@ Content-Type: application/json
"new_members": [{
"member_email": "user@company.com",
"member_given_name": "John",
"member_surname": "Doe"
"member_surname": "Doe",
"send_welcome_email": true
}]
}
```
### Groups
### Suspend Member
```bash
POST /dropbox-business/2/team/members/suspend
Content-Type: application/json
#### List Groups
{"user": {".tag": "email", "email": "user@company.com"}, "wipe_data": false}
```
### Unsuspend Member
```bash
POST /dropbox-business/2/team/members/unsuspend
Content-Type: application/json
{"user": {".tag": "email", "email": "user@company.com"}}
```
### Remove Member
```bash
POST /dropbox-business/2/team/members/remove
Content-Type: application/json
{
"user": {".tag": "email", "email": "user@company.com"},
"wipe_data": true,
"transfer_dest_id": {".tag": "email", "email": "admin@company.com"},
"transfer_admin_id": {".tag": "email", "email": "admin@company.com"},
"keep_account": false
}
```
### Send Welcome Email
```bash
POST /dropbox-business/2/team/members/send_welcome_email
Content-Type: application/json
{".tag": "email", "email": "pending@company.com"}
```
### Set Member Profile (V2)
```bash
POST /dropbox-business/2/team/members/set_profile_v2
Content-Type: application/json
{
"user": {".tag": "team_member_id", "team_member_id": "dbmid:AAA..."},
"new_given_name": "John",
"new_surname": "Smith"
}
```
### Set Admin Permissions (V2)
```bash
POST /dropbox-business/2/team/members/set_admin_permissions_v2
Content-Type: application/json
{
"user": {".tag": "email", "email": "user@company.com"},
"new_roles": ["pid_dbtmr:..."]
}
```
### Delete Profile Photo (V2)
```bash
POST /dropbox-business/2/team/members/delete_profile_photo_v2
Content-Type: application/json
{"user": {".tag": "team_member_id", "team_member_id": "dbmid:AAA..."}}
```
## Secondary Emails
### Add Secondary Emails
```bash
POST /dropbox-business/2/team/members/secondary_emails/add
Content-Type: application/json
{
"new_secondary_emails": [{
"user": {".tag": "email", "email": "user@company.com"},
"secondary_emails": ["alias@company.com"]
}]
}
```
### Delete Secondary Emails
```bash
POST /dropbox-business/2/team/members/secondary_emails/delete
Content-Type: application/json
{
"emails_to_delete": [{
"user": {".tag": "email", "email": "user@company.com"},
"secondary_emails": ["alias@company.com"]
}]
}
```
### Resend Verification Emails
```bash
POST /dropbox-business/2/team/members/secondary_emails/resend_verification_emails
Content-Type: application/json
{
"emails_to_resend": [{
"user": {".tag": "email", "email": "user@company.com"},
"secondary_emails": ["alias@company.com"]
}]
}
```
## Groups
### List Groups
```bash
POST /dropbox-business/2/team/groups/list
Content-Type: application/json
{"limit": 100}
```
### Get Group Info
```bash
POST /dropbox-business/2/team/groups/get_info
Content-Type: application/json
{".tag": "group_ids", "group_ids": ["g:1d31f47b..."]}
```
### List Group Members
```bash
POST /dropbox-business/2/team/groups/members/list
Content-Type: application/json
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"limit": 100
}
```
#### Create Group
### Create Group
```bash
POST /dropbox-business/2/team/groups/create
Content-Type: application/json
@@ -92,43 +251,136 @@ Content-Type: application/json
}
```
### Team Folders
### Update Group
```bash
POST /dropbox-business/2/team/groups/update
Content-Type: application/json
#### List Team Folders
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"new_group_name": "New Name"
}
```
### Add Members to Group
```bash
POST /dropbox-business/2/team/groups/members/add
Content-Type: application/json
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"members": [{"user": {".tag": "email", "email": "user@company.com"}, "access_type": {".tag": "member"}}],
"return_members": true
}
```
### Remove Members from Group
```bash
POST /dropbox-business/2/team/groups/members/remove
Content-Type: application/json
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"users": [{".tag": "email", "email": "user@company.com"}],
"return_members": true
}
```
### Delete Group
```bash
POST /dropbox-business/2/team/groups/delete
Content-Type: application/json
{".tag": "group_id", "group_id": "g:1d31f47b..."}
```
### Check Group Job Status
```bash
POST /dropbox-business/2/team/groups/job_status/get
Content-Type: application/json
{"async_job_id": "dbjid:..."}
```
## Team Folders
### List Team Folders
```bash
POST /dropbox-business/2/team/team_folder/list
Content-Type: application/json
{
"limit": 100
}
{"limit": 100}
```
#### Create Team Folder
### Get Team Folder Info
```bash
POST /dropbox-business/2/team/team_folder/get_info
Content-Type: application/json
{"team_folder_ids": ["13646676387"]}
```
### Create Team Folder
```bash
POST /dropbox-business/2/team/team_folder/create
Content-Type: application/json
{
"name": "Folder Name"
}
{"name": "Folder Name", "sync_setting": {".tag": "default"}}
```
### Namespaces
### Rename Team Folder
```bash
POST /dropbox-business/2/team/team_folder/rename
Content-Type: application/json
#### List Namespaces
{"team_folder_id": "13646676387", "name": "New Name"}
```
### Archive Team Folder
```bash
POST /dropbox-business/2/team/team_folder/archive
Content-Type: application/json
{"team_folder_id": "13646676387", "force_async_off": false}
```
### Activate Team Folder
```bash
POST /dropbox-business/2/team/team_folder/activate
Content-Type: application/json
{"team_folder_id": "13646676387"}
```
### Update Sync Settings
```bash
POST /dropbox-business/2/team/team_folder/update_sync_settings
Content-Type: application/json
{"team_folder_id": "13646676387", "sync_setting": {".tag": "default"}}
```
### Permanently Delete Team Folder
```bash
POST /dropbox-business/2/team/team_folder/permanently_delete
Content-Type: application/json
{"team_folder_id": "13646676387"}
```
## Namespaces
### List Namespaces
```bash
POST /dropbox-business/2/team/namespaces/list
Content-Type: application/json
{
"limit": 100
}
{"limit": 100}
```
### Devices
## Devices
#### List Members' Devices
### List Members' Devices
```bash
POST /dropbox-business/2/team/devices/list_members_devices
Content-Type: application/json
@@ -136,16 +388,147 @@ Content-Type: application/json
{}
```
### Audit Log
### List Member Devices
```bash
POST /dropbox-business/2/team/devices/list_member_devices
Content-Type: application/json
#### Get Events
{"team_member_id": "dbmid:AAA..."}
```
### Revoke Device Session
```bash
POST /dropbox-business/2/team/devices/revoke_device_session
Content-Type: application/json
{".tag": "web_session", "session_id": "dbwsid:...", "team_member_id": "dbmid:AAA..."}
```
### Revoke Device Sessions (Batch)
```bash
POST /dropbox-business/2/team/devices/revoke_device_session_batch
Content-Type: application/json
{
"revoke_devices": [
{".tag": "web_session", "session_id": "dbwsid:...", "team_member_id": "dbmid:AAA..."}
]
}
```
## Linked Apps
### List Members' Linked Apps
```bash
POST /dropbox-business/2/team/linked_apps/list_members_linked_apps
Content-Type: application/json
{}
```
### List Team Linked Apps
```bash
POST /dropbox-business/2/team/linked_apps/list_team_linked_apps
Content-Type: application/json
{}
```
### Revoke Linked App
```bash
POST /dropbox-business/2/team/linked_apps/revoke_linked_app
Content-Type: application/json
{"app_id": "...", "team_member_id": "dbmid:AAA..."}
```
## Member Space Limits
### Get Custom Quotas
```bash
POST /dropbox-business/2/team/member_space_limits/get_custom_quota
Content-Type: application/json
{"users": [{".tag": "email", "email": "user@company.com"}]}
```
### Set Custom Quotas
```bash
POST /dropbox-business/2/team/member_space_limits/set_custom_quota
Content-Type: application/json
{
"users_and_quotas": [{
"user": {".tag": "email", "email": "user@company.com"},
"quota_gb": 100
}]
}
```
### List Excluded Users
```bash
POST /dropbox-business/2/team/member_space_limits/excluded_users/list
Content-Type: application/json
{}
```
## Sharing Allowlist
### List Sharing Allowlist
```bash
POST /dropbox-business/2/team/sharing_allowlist/list
Content-Type: application/json
{}
```
### Add to Sharing Allowlist
```bash
POST /dropbox-business/2/team/sharing_allowlist/add
Content-Type: application/json
{"domains": ["partner.com"], "emails": ["external@client.com"]}
```
## Audit Log (Team Log)
### Get Events
```bash
POST /dropbox-business/2/team_log/get_events
Content-Type: application/json
{
"limit": 100
}
{"limit": 100, "category": {".tag": "members"}}
```
### Continue Getting Events
```bash
POST /dropbox-business/2/team_log/get_events/continue
Content-Type: application/json
{"cursor": "..."}
```
## Member File Access
Use the `Dropbox-API-Select-User` header with a team_member_id to access files on behalf of a member.
### List Member's Files
```bash
POST /dropbox-business/2/files/list_folder
Content-Type: application/json
Dropbox-API-Select-User: dbmid:AAA...
{"path": ""}
```
### List Member's Shared Folders
```bash
POST /dropbox-business/2/sharing/list_folders
Content-Type: application/json
Dropbox-API-Select-User: dbmid:AAA...
{}
```
## Notes
@@ -154,9 +537,28 @@ Content-Type: application/json
- Request bodies must be JSON (use `null` for no-parameter endpoints)
- Many fields use `.tag` format for type indication
- Pagination uses `cursor` and `has_more` fields
- Requires team admin OAuth authorization
- Use V2 endpoints for enhanced responses with roles info
- `Dropbox-API-Select-User` header enables member file access
- System-managed groups cannot be modified
- Reports endpoints (`team/reports/*`) are deprecated
## OAuth Scopes
| Scope | Usage |
|-------|-------|
| `team_info.read` | Team info, features |
| `members.read` | List/get members |
| `members.write` | Add/modify members |
| `members.delete` | Remove members |
| `groups.read` | List/get groups |
| `groups.write` | Create/modify groups |
| `sessions.list` | List devices/sessions |
| `sessions.modify` | Revoke sessions |
| `events.read` | Team audit log |
| `team_data.member` | Select-User header |
## Resources
- [Dropbox Business API Documentation](https://www.dropbox.com/developers/documentation/http/teams)
- [Team Administration Guide](https://developers.dropbox.com/dbx-team-administration-guide)
- [Team Files Guide](https://developers.dropbox.com/dbx-team-files-guide)

View File

@@ -9,10 +9,80 @@
/google-merchant/{sub-api}/{version}/accounts/{accountId}/{resource}
```
The Merchant API uses sub-APIs: `products`, `accounts`, `datasources`, `reports`, `promotions`, `inventories`, `notifications`, `conversions`, `lfp`
The Merchant API uses sub-APIs: `products`, `accounts`, `datasources`, `reports`, `promotions`, `inventories`, `notifications`, `conversions`
**Important:** The v1 API requires one-time developer registration per Merchant Center account. Complete the registration steps below before using any endpoints.
## Developer Registration
Before using v1 endpoints, you must complete a one-time registration:
### Step 1: Get Your Account ID
**Option A: Try fetching via API first**
Try listing accounts using the v1beta endpoint. If this works, you can get your account ID automatically:
```bash
GET /google-merchant/accounts/v1beta/accounts
```
Response (if successful):
```json
{
"accounts": [
{"accountId": "123456789", "accountName": "My Store"}
]
}
```
**Option B: From Merchant Center UI (if Option A fails)**
If the v1beta endpoint is unavailable or returns an error:
1. Log in to [Google Merchant Center](https://merchants.google.com/)
2. Your account ID is in the URL: `https://merchants.google.com/mc/overview?a=YOUR_ACCOUNT_ID`
For example, if your URL is `https://merchants.google.com/mc/overview?a=123456789`, your account ID is `123456789`.
### Step 2: Register for API Access
```bash
POST /google-merchant/accounts/v1/accounts/{accountId}/developerRegistration:registerGcp
Content-Type: application/json
{
"developerEmail": "your-email@example.com"
}
```
Replace `{accountId}` with your account ID from Step 1, and use the email associated with your Google account.
**Response:**
```json
{
"name": "accounts/123456789/developerRegistration",
"gcpIds": ["..."]
}
```
### Step 3: Verify Registration
After registration, test that v1 endpoints work:
```bash
GET /google-merchant/accounts/v1/accounts/{accountId}
```
**Note:** Registration only needs to be done once per Merchant Center account. After successful registration, all v1 endpoints will work for that account.
## Common Endpoints
### List Accounts
```bash
GET /google-merchant/accounts/v1/accounts
```
### List Products
```bash
GET /google-merchant/products/v1/accounts/{accountId}/products
@@ -34,7 +104,7 @@ Content-Type: application/json
"offerId": "sku123",
"contentLanguage": "en",
"feedLabel": "US",
"attributes": {
"productAttributes": {
"title": "Product Title",
"link": "https://example.com/product",
"imageLink": "https://example.com/image.jpg",
@@ -60,33 +130,47 @@ 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'"
"query": "SELECT id, offer_id, title FROM product_view LIMIT 10"
}
```
Note: The `product_view` table requires the `id` field in SELECT clause.
### List Promotions
```bash
GET /google-merchant/promotions/v1/accounts/{accountId}/promotions
```
Note: Requires Promotions program enrollment.
### Get Account
```bash
GET /google-merchant/accounts/v1/accounts/{accountId}
```
### List Regional Inventories
```bash
GET /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/regionalInventories
```
### List Local Inventories
```bash
GET /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/localInventories
```
Note: Local inventories only work for products with LOCAL channel.
## Notes
- **Developer registration required** - Complete registration before using v1 endpoints
- 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`
- Products can only be inserted in data sources with `input: "API"` type
- Uses token-based pagination with `pageSize` and `pageToken`
- Promotions require account enrollment in Promotions program
- Local inventories only work for LOCAL channel products
## Resources

View File

@@ -0,0 +1,95 @@
# Granola Routing Reference
**App name:** `granola`
**Base URL proxied:** `mcp.granola.ai` (MCP Server)
## API Path Pattern
Granola uses the Model Context Protocol (MCP). All requests are POST requests to tool endpoints:
```
/granola/{tool_name}
```
## MCP Tools
### Query Meeting Notes
```bash
POST /granola/query_granola_meetings
Content-Type: application/json
{
"query": "What action items came from my last meeting?"
}
```
**Parameters:**
- `query` (string, required): Natural language query about meetings
### List Meetings
```bash
POST /granola/list_meetings
Content-Type: application/json
{}
```
**Parameters:** None required. Returns recent meetings with metadata.
### Get Meetings
```bash
POST /granola/get_meetings
Content-Type: application/json
{
"meeting_ids": ["0dba4400-50f1-4262-9ac7-89cd27b79371"]
}
```
**Parameters:**
- `meeting_ids` (array of strings, required): Meeting IDs to retrieve
### Get Meeting Transcript
```bash
POST /granola/get_meeting_transcript
Content-Type: application/json
{
"meeting_id": "0dba4400-50f1-4262-9ac7-89cd27b79371"
}
```
**Parameters:**
- `meeting_id` (string, required): Meeting ID to get transcript for
**Note:** Only available on paid Granola tiers.
## Response Format
All responses follow MCP format:
```json
{
"content": [
{
"type": "text",
"text": "Response content here..."
}
],
"isError": false
}
```
## Notes
- All tool calls are POST requests with JSON body
- Meeting IDs are UUIDs (e.g., `0dba4400-50f1-4262-9ac7-89cd27b79371`)
- Users can only access their own meeting notes
- Free tier users limited to notes from last 30 days
- Transcripts require paid Granola tier
- Rate limit: ~100 requests/minute
## Resources
- [Granola MCP Documentation](https://docs.granola.ai/help-center/sharing/integrations/mcp)
- [Granola Help Center](https://docs.granola.ai)

View File

@@ -0,0 +1,306 @@
# Microsoft Teams Routing Reference
**App name:** `microsoft-teams`
**Base URL proxied:** `graph.microsoft.com`
## API Path Pattern
```
/microsoft-teams/v1.0/{resource}
```
## Common Endpoints
### Teams
#### List Joined Teams
```bash
GET /microsoft-teams/v1.0/me/joinedTeams
```
#### Get Team
```bash
GET /microsoft-teams/v1.0/teams/{team-id}
```
### Channels
#### List Channels
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/channels
```
#### List Private Channels
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/channels?$filter=membershipType eq 'private'
```
#### Get Channel
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}
```
#### Create Channel
```bash
POST /microsoft-teams/v1.0/teams/{team-id}/channels
Content-Type: application/json
{
"displayName": "Channel Name",
"description": "Description",
"membershipType": "standard"
}
```
#### Update Channel
```bash
PATCH /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}
Content-Type: application/json
{
"description": "Updated description"
}
```
#### Delete Channel
```bash
DELETE /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}
```
### Channel Members
#### List Channel Members
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/members
```
### Messages
#### List Channel Messages
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/messages
```
#### Send Message
```bash
POST /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/messages
Content-Type: application/json
{
"body": {
"content": "Hello World"
}
}
```
#### Send HTML Message
```bash
POST /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/messages
Content-Type: application/json
{
"body": {
"contentType": "html",
"content": "<p>Formatted message</p>"
}
}
```
#### Reply to Message
```bash
POST /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/messages/{message-id}/replies
Content-Type: application/json
{
"body": {
"content": "Reply content"
}
}
```
#### List Message Replies
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/messages/{message-id}/replies
```
#### Edit Message
```bash
PATCH /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/messages/{message-id}
Content-Type: application/json
{
"body": {
"content": "Updated message content"
}
}
```
### Team Members
#### List Members
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/members
```
### Presence
#### Get User Presence
```bash
GET /microsoft-teams/v1.0/me/presence
```
#### Get User Presence by ID
```bash
GET /microsoft-teams/v1.0/users/{user-id}/presence
```
### Tabs
#### List Channel Tabs
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/channels/{channel-id}/tabs
```
### Apps
#### List Installed Apps
```bash
GET /microsoft-teams/v1.0/teams/{team-id}/installedApps
```
### Online Meetings
#### Create Meeting
```bash
POST /microsoft-teams/v1.0/me/onlineMeetings
Content-Type: application/json
{
"subject": "Team Sync",
"startDateTime": "2026-02-18T10:00:00Z",
"endDateTime": "2026-02-18T11:00:00Z"
}
```
#### Create Meeting with Attendees
```bash
POST /microsoft-teams/v1.0/me/onlineMeetings
Content-Type: application/json
{
"subject": "Project Review",
"startDateTime": "2026-02-18T14:00:00Z",
"endDateTime": "2026-02-18T15:00:00Z",
"participants": {
"attendees": [
{
"upn": "attendee@example.com",
"role": "attendee"
}
]
}
}
```
#### Get Meeting
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}
```
#### Find Meeting by Join URL
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings?$filter=JoinWebUrl eq '{encoded-join-url}'
```
#### Delete Meeting
```bash
DELETE /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}
```
#### List Calendar Events
```bash
GET /microsoft-teams/v1.0/me/calendar/events?$top=10
```
#### List Meeting Recordings
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}/recordings
```
#### Get Meeting Recording
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}/recordings/{recording-id}
```
#### List Meeting Transcripts
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}/transcripts
```
#### Get Meeting Transcript
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}/transcripts/{transcript-id}
```
#### List Attendance Reports
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}/attendanceReports
```
#### Get Attendance Report
```bash
GET /microsoft-teams/v1.0/me/onlineMeetings/{meeting-id}/attendanceReports/{report-id}
```
### Chats
#### List Chats
```bash
GET /microsoft-teams/v1.0/me/chats
```
#### Get Chat
```bash
GET /microsoft-teams/v1.0/chats/{chat-id}
```
#### List Chat Messages
```bash
GET /microsoft-teams/v1.0/chats/{chat-id}/messages
```
#### Send Chat Message
```bash
POST /microsoft-teams/v1.0/chats/{chat-id}/messages
Content-Type: application/json
{
"body": {
"content": "Hello"
}
}
```
## OData Query Parameters
- `$top=10` - Limit results
- `$skip=20` - Skip results
- `$select=id,displayName` - Select specific fields
- `$filter=membershipType eq 'private'` - Filter results
- `$orderby=displayName` - Sort results
## Notes
- Uses Microsoft Graph API (`graph.microsoft.com`)
- Channel IDs include thread suffix: `19:xxx@thread.tacv2`
- Message body content types: `text` or `html`
- Channel membership types: `standard`, `private`, `shared`
- Supports OData query parameters for filtering and pagination
- Meeting recordings/transcripts available after meeting ends
## Resources
- [Microsoft Teams API Overview](https://learn.microsoft.com/en-us/graph/api/resources/teams-api-overview)
- [Microsoft Graph API Reference](https://learn.microsoft.com/en-us/graph/api/overview)
- [Channel Resource](https://learn.microsoft.com/en-us/graph/api/resources/channel)
- [ChatMessage Resource](https://learn.microsoft.com/en-us/graph/api/resources/chatmessage)

View File

@@ -0,0 +1,166 @@
# PostHog Routing Reference
**App name:** `posthog`
**Base URL proxied:** `{subdomain}.posthog.com`
## API Path Pattern
```
/posthog/api/{resource}
/posthog/api/projects/{project_id}/{resource}
```
## Common Endpoints
### Get Current User
```bash
GET /posthog/api/users/@me/
```
### Get Current Organization
```bash
GET /posthog/api/organizations/@current/
```
### List Projects
```bash
GET /posthog/api/projects/
```
### Get Current Project
```bash
GET /posthog/api/projects/@current/
```
### Run HogQL Query
```bash
POST /posthog/api/projects/{project_id}/query/
Content-Type: application/json
{
"query": {
"kind": "HogQLQuery",
"query": "SELECT event, count() FROM events GROUP BY event LIMIT 10"
}
}
```
### List Persons
```bash
GET /posthog/api/projects/{project_id}/persons/?limit=10
```
### Get Person
```bash
GET /posthog/api/projects/{project_id}/persons/{person_uuid}/
```
### List Dashboards
```bash
GET /posthog/api/projects/{project_id}/dashboards/
```
### Get Dashboard
```bash
GET /posthog/api/projects/{project_id}/dashboards/{dashboard_id}/
```
### Create Dashboard
```bash
POST /posthog/api/projects/{project_id}/dashboards/
Content-Type: application/json
{
"name": "My Dashboard",
"description": "Analytics overview"
}
```
### List Insights
```bash
GET /posthog/api/projects/{project_id}/insights/?limit=10
```
### List Feature Flags
```bash
GET /posthog/api/projects/{project_id}/feature_flags/
```
### Create Feature Flag
```bash
POST /posthog/api/projects/{project_id}/feature_flags/
Content-Type: application/json
{
"key": "my-feature-flag",
"name": "My Feature Flag",
"active": true,
"filters": {
"groups": [{"rollout_percentage": 100}]
}
}
```
### Delete Feature Flag
Use soft delete by setting `deleted: true`:
```bash
PATCH /posthog/api/projects/{project_id}/feature_flags/{flag_id}/
Content-Type: application/json
{
"deleted": true
}
```
### List Session Recordings
```bash
GET /posthog/api/projects/{project_id}/session_recordings/?limit=10
```
### List Cohorts
```bash
GET /posthog/api/projects/{project_id}/cohorts/
```
### List Actions
```bash
GET /posthog/api/projects/{project_id}/actions/
```
### List Experiments
```bash
GET /posthog/api/projects/{project_id}/experiments/
```
### List Surveys
```bash
GET /posthog/api/projects/{project_id}/surveys/
```
### List Event Definitions
```bash
GET /posthog/api/projects/{project_id}/event_definitions/?limit=10
```
### List Property Definitions
```bash
GET /posthog/api/projects/{project_id}/property_definitions/?limit=10
```
## Notes
- Use `@current` as a shortcut for the current project ID (e.g., `/api/projects/@current/dashboards/`)
- Project IDs are integers (e.g., `136209`)
- Person UUIDs are in standard UUID format
- The Events endpoint is deprecated; use the Query endpoint with HogQL instead
- All project-scoped endpoints require `{project_id}` or `@current`
- Pagination uses `limit` and `offset` query parameters
- PostHog uses soft delete: use `PATCH` with `{"deleted": true}` instead of HTTP DELETE
## Resources
- [PostHog API Overview](https://posthog.com/docs/api)
- [HogQL Documentation](https://posthog.com/docs/hogql)
- [Feature Flags](https://posthog.com/docs/feature-flags)
- [Session Replay](https://posthog.com/docs/session-replay)
- [Experiments](https://posthog.com/docs/experiments)

View File

@@ -0,0 +1,155 @@
# Sentry Routing Reference
**App name:** `sentry`
**Base URL proxied:** `{subdomain}.sentry.io`
## API Path Pattern
```
/sentry/api/0/{resource}
```
Sentry API uses version `0` prefix in all paths.
## Common Endpoints
### List Organizations
```bash
GET /sentry/api/0/organizations/
```
### Retrieve Organization
```bash
GET /sentry/api/0/organizations/{organization_slug}/
```
### List Organization Projects
```bash
GET /sentry/api/0/organizations/{organization_slug}/projects/
```
### List Organization Members
```bash
GET /sentry/api/0/organizations/{organization_slug}/members/
```
### Retrieve Project
```bash
GET /sentry/api/0/projects/{organization_slug}/{project_slug}/
```
### List Project Issues
```bash
GET /sentry/api/0/projects/{organization_slug}/{project_slug}/issues/
```
Query parameters:
- `statsPeriod` - Stats period: `24h`, `14d`, or empty
- `query` - Sentry search query (default: `is:unresolved`)
- `cursor` - Pagination cursor
### List Organization Issues
```bash
GET /sentry/api/0/organizations/{organization_slug}/issues/
```
### Retrieve Issue
```bash
GET /sentry/api/0/issues/{issue_id}/
```
### Update Issue
```bash
PUT /sentry/api/0/issues/{issue_id}/
Content-Type: application/json
{
"status": "resolved"
}
```
Status values: `resolved`, `unresolved`, `ignored`
### Delete Issue
```bash
DELETE /sentry/api/0/issues/{issue_id}/
```
### List Issue Events
```bash
GET /sentry/api/0/issues/{issue_id}/events/
```
### List Project Events
```bash
GET /sentry/api/0/projects/{organization_slug}/{project_slug}/events/
```
### List Organization Teams
```bash
GET /sentry/api/0/organizations/{organization_slug}/teams/
```
### Create Team
```bash
POST /sentry/api/0/organizations/{organization_slug}/teams/
Content-Type: application/json
{
"name": "New Team",
"slug": "new-team"
}
```
### Retrieve Team
```bash
GET /sentry/api/0/teams/{organization_slug}/{team_slug}/
```
### List Organization Releases
```bash
GET /sentry/api/0/organizations/{organization_slug}/releases/
```
### Create Release
```bash
POST /sentry/api/0/organizations/{organization_slug}/releases/
Content-Type: application/json
{
"version": "1.0.0",
"projects": ["project-slug"]
}
```
### Retrieve Release
```bash
GET /sentry/api/0/organizations/{organization_slug}/releases/{version}/
```
### Create Deploy
```bash
POST /sentry/api/0/organizations/{organization_slug}/releases/{version}/deploys/
Content-Type: application/json
{
"environment": "production"
}
```
## Notes
- Organization and project identifiers use slugs (lowercase, hyphenated)
- Issue IDs are numeric
- Release versions can contain special characters (URL encode as needed)
- Uses cursor-based pagination via Link header
- Most endpoints require OAuth scopes like `event:read`, `project:read`, `org:read`
## Resources
- [Sentry API Documentation](https://docs.sentry.io/api/)
- [Events API](https://docs.sentry.io/api/events/)
- [Projects API](https://docs.sentry.io/api/projects/)
- [Organizations API](https://docs.sentry.io/api/organizations/)
- [Teams API](https://docs.sentry.io/api/teams/)
- [Releases API](https://docs.sentry.io/api/releases/)

View File

@@ -0,0 +1,325 @@
# Squarespace Routing Reference
**App name:** `squarespace`
**Base URL proxied:** `api.squarespace.com`
## API Path Pattern
```
/squarespace/v2/commerce/products # Products API (v2)
/squarespace/1.0/commerce/store_pages # Store Pages (1.0 only)
/squarespace/1.0/commerce/inventory # Inventory API
/squarespace/1.0/commerce/orders # Orders API
/squarespace/1.0/commerce/transactions # Transactions API
/squarespace/1.0/profiles # Profiles API
```
## Important Notes
- All requests require a `User-Agent` header describing your application
- Requests without a custom User-Agent are subject to stricter rate limits
- Maximum 50 items per batch request
- Idempotency-Key header is required for stock adjustments and order creation
- Rate limit: 300 requests per minute (5 per second)
- Create Order has a stricter rate limit: 100 requests per hour per website
## Common Endpoints
### Inventory
#### List All Inventory
```bash
GET /squarespace/1.0/commerce/inventory
GET /squarespace/1.0/commerce/inventory?cursor={cursor}
```
#### Get Specific Inventory
```bash
GET /squarespace/1.0/commerce/inventory/{variantId1},{variantId2}
```
Max 50 variant IDs per request.
#### Adjust Stock Quantities
```bash
POST /squarespace/1.0/commerce/inventory/adjustments
Content-Type: application/json
Idempotency-Key: unique-key-here
{
"incrementOperations": [{"variantId": "variant-id", "quantity": 5}],
"decrementOperations": [{"variantId": "variant-id", "quantity": 2}],
"setFiniteOperations": [{"variantId": "variant-id", "quantity": 100}],
"setUnlimitedOperations": ["variant-id"]
}
```
### Orders
#### List All Orders
```bash
GET /squarespace/1.0/commerce/orders
GET /squarespace/1.0/commerce/orders?fulfillmentStatus=PENDING
GET /squarespace/1.0/commerce/orders?modifiedAfter=2024-01-01T00:00:00Z&modifiedBefore=2024-12-31T23:59:59Z
GET /squarespace/1.0/commerce/orders?customerId={customerId}
```
Note: Cannot combine `cursor` with date range parameters.
#### Get Specific Order
```bash
GET /squarespace/1.0/commerce/orders/{orderId}
```
#### Create Order
```bash
POST /squarespace/1.0/commerce/orders
Content-Type: application/json
Idempotency-Key: unique-key-here
{
"channelName": "External Store",
"externalOrderReference": "ORDER-12345",
"customerEmail": "customer@example.com",
"lineItems": [
{
"lineItemType": "PHYSICAL_PRODUCT",
"variantId": "variant-id",
"quantity": 2,
"unitPricePaid": {"currency": "USD", "value": "29.99"}
}
],
"subtotal": {"currency": "USD", "value": "59.98"},
"priceTaxInterpretation": "EXCLUSIVE",
"grandTotal": {"currency": "USD", "value": "59.98"},
"createdOn": "2024-01-15T10:30:00Z"
}
```
Note: `subtotal` must equal sum of `lineItems.unitPricePaid.value * quantity`.
#### Fulfill Order
```bash
POST /squarespace/1.0/commerce/orders/{orderId}/fulfillments
Content-Type: application/json
{
"shouldSendNotification": true,
"shipments": [
{
"shipDate": "2024-01-16T08:00:00Z",
"carrierName": "USPS",
"service": "Priority Mail",
"trackingNumber": "9400111899223456789012",
"trackingUrl": "https://tools.usps.com/go/TrackConfirmAction?tLabels=9400111899223456789012"
}
]
}
```
### Products (v2 API)
#### List Store Pages
```bash
GET /squarespace/1.0/commerce/store_pages
```
Note: Store Pages endpoint uses v1.0 (no v2 available).
#### List All Products
```bash
GET /squarespace/v2/commerce/products
GET /squarespace/v2/commerce/products?type=PHYSICAL,SERVICE,GIFT_CARD,DIGITAL
GET /squarespace/v2/commerce/products?modifiedAfter=2024-01-01T00:00:00Z
```
Note: Cannot combine `cursor` with date/type filters.
#### Get Specific Products
```bash
GET /squarespace/v2/commerce/products/{productId1},{productId2}
```
Max 50 product IDs per request.
#### Create Product
```bash
POST /squarespace/v2/commerce/products
Content-Type: application/json
{
"type": "PHYSICAL",
"storePageId": "store-page-id",
"name": "New Product",
"description": "<p>Product description</p>",
"urlSlug": "new-product",
"isVisible": true,
"variants": [
{
"sku": "SKU-001",
"pricing": {"basePrice": {"currency": "USD", "value": "49.99"}},
"stock": {"quantity": 100, "unlimited": false}
}
]
}
```
#### Update Product
```bash
POST /squarespace/v2/commerce/products/{productId}
Content-Type: application/json
{
"name": "Updated Product Name",
"isVisible": true
}
```
#### Delete Product
```bash
DELETE /squarespace/v2/commerce/products/{productId}
```
### Product Variants (v2 API)
#### Create Variant
```bash
POST /squarespace/v2/commerce/products/{productId}/variants
Content-Type: application/json
{
"sku": "SKU-002",
"pricing": {"basePrice": {"currency": "USD", "value": "59.99"}},
"stock": {"quantity": 50, "unlimited": false},
"attributes": {"Size": "Large"}
}
```
Note: To use `attributes`, product must have matching `variantAttributes` set first via Update Product.
#### Update Variant
```bash
POST /squarespace/v2/commerce/products/{productId}/variants/{variantId}
Content-Type: application/json
{
"sku": "SKU-002-UPDATED",
"pricing": {"basePrice": {"currency": "USD", "value": "64.99"}}
}
```
#### Delete Variant
```bash
DELETE /squarespace/v2/commerce/products/{productId}/variants/{variantId}
```
### Product Images (v2 API)
#### Upload Image
```bash
POST /squarespace/v2/commerce/products/{productId}/images
Content-Type: multipart/form-data
curl "https://gateway.maton.ai/squarespace/v2/commerce/products/{productId}/images" \
-H "Authorization: Bearer $MATON_API_KEY" \
-H "User-Agent: MyClaude/1.0" \
-X POST \
-F file=@image.png
```
#### Check Upload Status
```bash
GET /squarespace/v2/commerce/products/{productId}/images/{imageId}/status
```
#### Update Image Alt Text
```bash
POST /squarespace/v2/commerce/products/{productId}/images/{imageId}
Content-Type: application/json
{"altText": "Product image description"}
```
#### Reorder Image
```bash
POST /squarespace/v2/commerce/products/{productId}/images/{imageId}/order
Content-Type: application/json
{"afterImageId": "other-image-id"}
```
#### Assign Image to Variant
```bash
POST /squarespace/v2/commerce/products/{productId}/variants/{variantId}/image
Content-Type: application/json
{"imageId": "image-id"}
```
#### Delete Image
```bash
DELETE /squarespace/v2/commerce/products/{productId}/images/{imageId}
```
### Profiles (Customers)
#### List All Profiles
```bash
GET /squarespace/1.0/profiles
GET /squarespace/1.0/profiles?filter=isCustomer,true
GET /squarespace/1.0/profiles?sortField=email&sortDirection=asc
```
Filters (semicolon-separated):
- `isCustomer,true` or `isCustomer,false`
- `hasAccount,true` or `hasAccount,false`
- `email,customer@example.com`
Sort fields: `createdOn`, `id`, `email`, `lastName`
#### Get Specific Profiles
```bash
GET /squarespace/1.0/profiles/{profileId1},{profileId2}
```
Max 50 profile IDs per request.
### Transactions
#### List All Transactions
```bash
GET /squarespace/1.0/commerce/transactions
GET /squarespace/1.0/commerce/transactions?modifiedAfter=2024-01-01T00:00:00Z&modifiedBefore=2024-12-31T23:59:59Z
```
Note: Date filters must be used together (both `modifiedAfter` and `modifiedBefore` required).
#### Get Specific Transactions
```bash
GET /squarespace/1.0/commerce/transactions/{documentId1},{documentId2}
```
Max 50 document IDs per request.
## Pagination
Squarespace uses cursor-based pagination:
```json
{
"pagination": {
"hasNextPage": true,
"nextPageCursor": "cursor-value",
"nextPageUrl": "https://api.squarespace.com/..."
}
}
```
Use the `cursor` parameter to get the next page:
```bash
GET /squarespace/v2/commerce/products?cursor=cursor-value
```
## Resources
- [Squarespace Commerce APIs Overview](https://developers.squarespace.com/commerce-apis/overview)
- [Inventory API](https://developers.squarespace.com/commerce-apis/inventory-overview)
- [Orders API](https://developers.squarespace.com/commerce-apis/orders-overview)
- [Products API](https://developers.squarespace.com/commerce-apis/products-overview)
- [Profiles API](https://developers.squarespace.com/commerce-apis/profiles-overview)
- [Transactions API](https://developers.squarespace.com/commerce-apis/transactions-overview)

View File

@@ -6,24 +6,24 @@
## API Path Pattern
```
/todoist/rest/v2/{resource}
/todoist/api/v1/{resource}
```
## Common Endpoints
### List Projects
```bash
GET /todoist/rest/v2/projects
GET /todoist/api/v1/projects
```
### Get Project
```bash
GET /todoist/rest/v2/projects/{id}
GET /todoist/api/v1/projects/{id}
```
### Create Project
```bash
POST /todoist/rest/v2/projects
POST /todoist/api/v1/projects
Content-Type: application/json
{
@@ -34,7 +34,7 @@ Content-Type: application/json
### Update Project
```bash
POST /todoist/rest/v2/projects/{id}
POST /todoist/api/v1/projects/{id}
Content-Type: application/json
{
@@ -44,24 +44,24 @@ Content-Type: application/json
### Delete Project
```bash
DELETE /todoist/rest/v2/projects/{id}
DELETE /todoist/api/v1/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 /todoist/api/v1/tasks
GET /todoist/api/v1/tasks?project_id={project_id}
GET /todoist/api/v1/tasks?filter={filter}
```
### Get Task
```bash
GET /todoist/rest/v2/tasks/{id}
GET /todoist/api/v1/tasks/{id}
```
### Create Task
```bash
POST /todoist/rest/v2/tasks
POST /todoist/api/v1/tasks
Content-Type: application/json
{
@@ -73,7 +73,7 @@ Content-Type: application/json
### Update Task
```bash
POST /todoist/rest/v2/tasks/{id}
POST /todoist/api/v1/tasks/{id}
Content-Type: application/json
{
@@ -84,28 +84,28 @@ Content-Type: application/json
### Close Task (Complete)
```bash
POST /todoist/rest/v2/tasks/{id}/close
POST /todoist/api/v1/tasks/{id}/close
```
### Reopen Task
```bash
POST /todoist/rest/v2/tasks/{id}/reopen
POST /todoist/api/v1/tasks/{id}/reopen
```
### Delete Task
```bash
DELETE /todoist/rest/v2/tasks/{id}
DELETE /todoist/api/v1/tasks/{id}
```
### List Sections
```bash
GET /todoist/rest/v2/sections
GET /todoist/rest/v2/sections?project_id={project_id}
GET /todoist/api/v1/sections
GET /todoist/api/v1/sections?project_id={project_id}
```
### Create Section
```bash
POST /todoist/rest/v2/sections
POST /todoist/api/v1/sections
Content-Type: application/json
{
@@ -116,17 +116,17 @@ Content-Type: application/json
### Delete Section
```bash
DELETE /todoist/rest/v2/sections/{id}
DELETE /todoist/api/v1/sections/{id}
```
### List Labels
```bash
GET /todoist/rest/v2/labels
GET /todoist/api/v1/labels
```
### Create Label
```bash
POST /todoist/rest/v2/labels
POST /todoist/api/v1/labels
Content-Type: application/json
{
@@ -137,18 +137,18 @@ Content-Type: application/json
### Delete Label
```bash
DELETE /todoist/rest/v2/labels/{id}
DELETE /todoist/api/v1/labels/{id}
```
### List Comments
```bash
GET /todoist/rest/v2/comments?task_id={task_id}
GET /todoist/rest/v2/comments?project_id={project_id}
GET /todoist/api/v1/comments?task_id={task_id}
GET /todoist/api/v1/comments?project_id={project_id}
```
### Create Comment
```bash
POST /todoist/rest/v2/comments
POST /todoist/api/v1/comments
Content-Type: application/json
{
@@ -159,7 +159,7 @@ Content-Type: application/json
### Delete Comment
```bash
DELETE /todoist/rest/v2/comments/{id}
DELETE /todoist/api/v1/comments/{id}
```
## Notes
@@ -172,5 +172,5 @@ DELETE /todoist/rest/v2/comments/{id}
## Resources
- [Todoist REST API v2 Documentation](https://developer.todoist.com/rest/v2)
- [Todoist API v1 Documentation](https://developer.todoist.com/api/v1)
- [Todoist Filter Syntax](https://todoist.com/help/articles/introduction-to-filters)