← 返回
安全合规 Key 中文

Podio

Podio API integration with managed OAuth. Manage workspaces, apps, items, tasks, and comments. Use this skill when users want to read, create, update, or del...
Podio API 集成,托管 OAuth。可管理工作区、应用、条目、任务和评论。用户需要读取、创建、更新或删除时使用此技能。
byungkyu
安全合规 clawhub v1.0.1 2 版本 99620.5 Key: 需要
★ 2
Stars
📥 1,535
下载
💾 12
安装
2
版本
#latest

概述

Podio

Access the Podio API with managed OAuth authentication. Manage organizations, workspaces (spaces), apps, items, tasks, comments, and files.

Quick Start

# List organizations
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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

Base URL

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

Maton proxies requests to api.podio.com and automatically injects your OAuth token.

Authentication

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"

Getting Your API Key

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your Podio OAuth connections at https://api.maton.ai.

List Connections

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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

Create Connection

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'podio'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Get Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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": "{connection_id}",
    "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.

Delete Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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 Podio connections, specify which one to use with the Maton-Connection header:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/podio/org/')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If you have multiple connections, always include this header to ensure requests go to the intended account.

Security & Permissions

  • Access is scoped to workspaces, apps, items, tasks, and comments within the connected Podio account.
  • All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.

API Reference

Organization Operations

List Organizations

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 Organization

GET /podio/org/{org_id}

Space (Workspace) Operations

Get Space

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"
  }
}

Create Space

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"
}

Application Operations

Get Apps by Space

GET /podio/app/space/{space_id}/

Optional query parameters:

  • include_inactive - Include inactive apps (default: false)

Get App

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": [...]
}

Item Operations

Get Item

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"
  }
}

Filter Items

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
    }
  ]
}

Add New Item

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"
}

Update Item

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 Item

DELETE /podio/item/{item_id}

Optional query parameters:

  • hook - Execute hooks (default: true)
  • silent - Suppress notifications (default: false)

Task Operations

Get Tasks

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 ID
  • app - Filter by app ID
  • completed - Filter by completion status (true or false)
  • responsible - Filter by responsible user IDs
  • created_by - Filter by creator
  • due_date - Date range (YYYY-MM-DD-YYYY-MM-DD)
  • limit - Maximum results
  • offset - Result offset
  • sort_by - Sort by: created_on, completed_on, rank (default: rank)
  • grouping - Group by: due_date, created_by, responsible, app, space, org

Get Task

GET /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"}
  ]
}

Create Task

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,
  ...
}

Comment Operations

Get Comments on Object

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": []
  }
]

Add Comment to Object

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,
  ...
}

Pagination

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
}

Code Examples

JavaScript

const response = await fetch(
  'https://api.maton.ai/podio/org/',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const data = await response.json();

Python

import os
import requests

response = requests.get(
    'https://api.maton.ai/podio/org/',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
data = response.json()

Notes

  • Organization IDs, space IDs, app IDs, and item IDs are integers
  • Field values can be specified by field_id or external_id
  • Category fields use option IDs (integers), not text values
  • Deleting an item also deletes associated tasks (cascade delete)
  • Tasks require at least one filter (org, space, app, responsible, reference, created_by, or completed_by)
  • Use silent=true to suppress notifications for bulk operations
  • Use hook=false to skip webhook triggers
  • Include revision in update requests for conflict detection (returns 409 if conflict)
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments

Error Handling

StatusMeaning
-----------------
400Missing Podio connection or invalid request
401Invalid or missing Maton API key
403Forbidden - insufficient permissions
404Resource not found
409Conflict (revision mismatch on update)
410Resource has been deleted
429Rate limited
4xx/5xxPassthrough error from Podio API

Troubleshooting: API Key Issues

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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. Ensure your URL path starts with podio. For example:
  • Correct: https://api.maton.ai/podio/org/
  • Incorrect: https://api.maton.ai/org/

Resources

版本历史

共 2 个版本

  • v1.0.1 当前
    2026-05-03 02:44 安全 安全
  • v1.0.0
    2026-03-28 21:48 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

security-compliance

Skill Vetter

spclaudehome
AI智能体技能安全预审工具。安装ClawdHub、GitHub等来源技能前,检查风险信号、权限范围及可疑模式。
★ 1,210 📥 266,145
content-creation

YouTube

byungkyu
使用托管OAuth集成YouTube Data API,支持搜索视频、管理播放列表、获取频道数据及评论互动,适用于用户需要时使用此技能。
★ 141 📥 41,013
developer-tools

API Gateway

byungkyu
通过 Maton 管理的 API 路由连接外部服务;仅在用户指定目标应用、账户和任务后使用;以读取/列...
★ 392 📥 103,026