podioPodio API integration with managed OAuth. Manage workspaces, apps, items, tasks, and comments. Use this skill when users want to read, create, update, or delete Podio items, manage tasks, or interact with Podio apps and workspaces. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Install via ClawdBot CLI:
clawdbot install byungkyu/podioAccess the Podio API with managed OAuth authentication. Manage organizations, workspaces (spaces), apps, items, tasks, comments, and files.
# List organizations
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/podio/org/')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://gateway.maton.ai/podio/{native-api-path}
Replace {native-api-path} with the actual Podio API endpoint path. The gateway proxies requests to api.podio.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Podio OAuth connections at https://ctrl.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=podio&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
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'podio'}).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
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "podio",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
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
If you have multiple Podio connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/podio/org/')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
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.
Returns all organizations and spaces the user is a member of.
GET /podio/org/
Response:
[
{
"org_id": 123456,
"name": "My Organization",
"url": "https://podio.com/myorg",
"url_label": "myorg",
"type": "premium",
"role": "admin",
"status": "active",
"spaces": [
{
"space_id": 789,
"name": "Project Space",
"url": "https://podio.com/myorg/project-space",
"role": "admin"
}
]
}
]
GET /podio/org/{org_id}
GET /podio/space/{space_id}
Response:
{
"space_id": 789,
"name": "Project Space",
"privacy": "closed",
"auto_join": false,
"url": "https://podio.com/myorg/project-space",
"url_label": "project-space",
"role": "admin",
"created_on": "2025-01-15T10:30:00Z",
"created_by": {
"user_id": 12345,
"name": "John Doe"
}
}
POST /podio/space/
Content-Type: application/json
{
"org_id": 123456,
"name": "New Project Space",
"privacy": "closed",
"auto_join": false,
"post_on_new_app": true,
"post_on_new_member": true
}
Response:
{
"space_id": 790,
"url": "https://podio.com/myorg/new-project-space"
}
GET /podio/app/space/{space_id}/
Optional query parameters:
include_inactive - Include inactive apps (default: false)GET /podio/app/{app_id}
Response:
{
"app_id": 456,
"status": "active",
"space_id": 789,
"config": {
"name": "Tasks",
"item_name": "Task",
"description": "Track project tasks",
"icon": "list"
},
"fields": [...]
}
GET /podio/item/{item_id}
Optional query parameters:
mark_as_viewed - Mark notifications as viewed (default: true)Response:
{
"item_id": 123,
"title": "Complete project plan",
"app": {
"app_id": 456,
"name": "Tasks"
},
"fields": [
{
"field_id": 1,
"external_id": "status",
"type": "category",
"values": [{"value": {"text": "In Progress"}}]
}
],
"created_on": "2025-01-20T14:00:00Z",
"created_by": {
"user_id": 12345,
"name": "John Doe"
}
}
POST /podio/item/app/{app_id}/filter/
Content-Type: application/json
{
"sort_by": "created_on",
"sort_desc": true,
"filters": {
"status": [1, 2]
},
"limit": 30,
"offset": 0
}
Response:
{
"total": 150,
"filtered": 45,
"items": [
{
"item_id": 123,
"title": "Complete project plan",
"fields": [...],
"comment_count": 5,
"file_count": 2
}
]
}
POST /podio/item/app/{app_id}/
Content-Type: application/json
{
"fields": {
"title": "New task",
"status": 1,
"due-date": {"start": "2025-02-15"}
},
"tags": ["urgent", "project-alpha"],
"file_ids": [12345]
}
Optional query parameters:
hook - Execute hooks (default: true)silent - Suppress notifications (default: false)Response:
{
"item_id": 124,
"title": "New task"
}
PUT /podio/item/{item_id}
Content-Type: application/json
{
"fields": {
"status": 2
},
"revision": 5
}
Optional query parameters:
hook - Execute hooks (default: true)silent - Suppress notifications (default: false)Response:
{
"revision": 6,
"title": "New task"
}
DELETE /podio/item/{item_id}
Optional query parameters:
hook - Execute hooks (default: true)silent - Suppress notifications (default: false)Note: Tasks require at least one filter: org, space, app, responsible, reference, created_by, or completed_by.
GET /podio/task/?org={org_id}
GET /podio/task/?space={space_id}
GET /podio/task/?app={app_id}&completed=false
Query parameters:
org - Filter by organization ID (required if no other filter)space - Filter by space IDapp - Filter by app IDcompleted - Filter by completion status (true or false)responsible - Filter by responsible user IDscreated_by - Filter by creatordue_date - Date range (YYYY-MM-DD-YYYY-MM-DD)limit - Maximum resultsoffset - Result offsetsort_by - Sort by: created_on, completed_on, rank (default: rank)grouping - Group by: due_date, created_by, responsible, app, space, orgGET /podio/task/{task_id}
Response:
{
"task_id": 789,
"text": "Review project proposal",
"description": "Detailed review of the Q1 proposal",
"status": "active",
"due_date": "2025-02-15",
"due_time": "17:00:00",
"responsible": {
"user_id": 12345,
"name": "John Doe"
},
"created_on": "2025-01-20T10:00:00Z",
"labels": [
{"label_id": 1, "text": "High Priority", "color": "red"}
]
}
POST /podio/task/
Content-Type: application/json
{
"text": "Review project proposal",
"description": "Detailed review of the Q1 proposal",
"due_date": "2025-02-15",
"due_time": "17:00:00",
"responsible": 12345,
"private": false,
"ref_type": "item",
"ref_id": 123,
"labels": [1, 2]
}
Optional query parameters:
hook - Execute hooks (default: true)silent - Suppress notifications (default: false)Response:
{
"task_id": 790,
...
}
GET /podio/comment/{type}/{id}/
Where {type} is the object type (e.g., "item", "task") and {id} is the object ID.
Optional query parameters:
limit - Maximum comments (default: 100)offset - Pagination offset (default: 0)Response:
[
{
"comment_id": 456,
"value": "This looks great!",
"created_on": "2025-01-20T15:30:00Z",
"created_by": {
"user_id": 12345,
"name": "John Doe"
},
"files": []
}
]
POST /podio/comment/{type}/{id}
Content-Type: application/json
{
"value": "Great progress on this task!",
"file_ids": [12345],
"embed_url": "https://example.com/doc"
}
Optional query parameters:
alert_invite - Auto-invite mentioned users (default: false)hook - Execute hooks (default: true)silent - Suppress notifications (default: false)Response:
{
"comment_id": 457,
...
}
Podio uses offset-based pagination with limit and offset parameters:
POST /podio/item/app/{app_id}/filter/
Content-Type: application/json
{
"limit": 30,
"offset": 0
}
Response includes total counts:
{
"total": 150,
"filtered": 45,
"items": [...]
}
For subsequent pages, increment the offset:
{
"limit": 30,
"offset": 30
}
const response = await fetch(
'https://gateway.maton.ai/podio/org/',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const data = await response.json();
import os
import requests
response = requests.get(
'https://gateway.maton.ai/podio/org/',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
data = response.json()
silent=true to suppress notifications for bulk operationshook=false to skip webhook triggersrevision in update requests for conflict detection (returns 409 if conflict)curl -g when URLs contain brackets to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments| Status | Meaning |
|--------|---------|
| 400 | Missing Podio connection or invalid request |
| 401 | Invalid or missing Maton API key |
| 403 | Forbidden - insufficient permissions |
| 404 | Resource not found |
| 409 | Conflict (revision mismatch on update) |
| 410 | Resource has been deleted |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Podio API |
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
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
podio. For example:https://gateway.maton.ai/podio/org/https://gateway.maton.ai/org/AI Usage Analysis
Analysis is being generated⦠refresh in a few seconds.
Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.
Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to...
Build, debug, and deploy websites using HTML, CSS, JavaScript, and modern frameworks following production best practices.
YouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Scaffold, test, document, and debug REST and GraphQL APIs. Use when the user needs to create API endpoints, write integration tests, generate OpenAPI specs, test with curl, mock APIs, or troubleshoot HTTP issues.
Search for jobs across LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, and BDJobs using the JobSpy MCP server.